var Tg=Object.defineProperty;var Sm=p=>{throw TypeError(p)};var $g=(p,t,e)=>t in p?Tg(p,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):p[t]=e;var r=(p,t,e)=>$g(p,typeof t!="symbol"?t+"":t,e),dh=(p,t,e)=>t.has(p)||Sm("Cannot "+e);var j=(p,t,e)=>(dh(p,t,"read from private field"),e?e.call(p):t.get(p)),Z=(p,t,e)=>t.has(p)?Sm("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(p):t.set(p,e),J=(p,t,e,i)=>(dh(p,t,"write to private field"),i?i.call(p,e):t.set(p,e),e),ne=(p,t,e)=>(dh(p,t,"access private method"),e);var El=(p,t,e,i)=>({set _(n){J(p,t,n,e)},get _(){return j(p,t,i)}});import{j as y}from"./assets/jquery-Bu9idKpp.js";import{T as Jm,B as ep,S as tp,M as Ki,u as ip,P as ue,G as He,a as Vn,b as Eg,R as $h,A as to,C as ks,c as eh,d as ca,e as io,f as Ig,g as Dg,i as jg}from"./assets/pixi.js-DMQUwG-p.js";import{e as H,U as Mg,l as O,M as hh,R as Pg,K as xm,a as Ao,W as Bg,b as Og,c as Vg,d as Lg,f as Fg}from"./assets/monaco-editor-BN-bZSKI.js";/* empty css */import{e as np}from"./assets/dragdroptouch-B-sHm6CJ.js";import{h as _g}from"./assets/howler-Dn3Ikqai.js";import{c as xt}from"./assets/chalk-D1XV3AHK.js";import{T as Sl,S as Il,N as ma,D as zg,R as Tm,U as qg,V as Wg,W as Ng,a as $m,B as Rg,b as It,c as Gg,d as Kg,A as Hg,I as Ug,F as Em,e as Qg,f as pa,g as Yg,h as Eh,M as me,i as Zg,P as Hl,j as Xg,O as rp,C as zs,k as Jg,l as ch,m as Fl,n as ef,o as za,p as uh,q as ms,r as Dl,s as jl,t as fo,G as tf,u as sp,v as nf,w as rf,x as ap,y as Ih,z as mh,E as ph,H as sf,J as af,K as _l,L as Ml,Q as Pl,X as gh,Y as of,Z as lf,_ as fh}from"./assets/three-B5n8bdcM.js";import{U as no}from"./assets/upng-js-CdTi715d.js";import{p as df}from"./assets/p5-Clb-A5Eo.js";import{p as Im}from"./assets/pako-DwGzBETv.js";import{J as Dm}from"./assets/jszip-eerVpFfC.js";import{d as op}from"./assets/diff-match-patch-BoheT17E.js";import{M as jm}from"./assets/markdown-it-C44Roubk.js";import"./online-ide-embedded.js";import"./assets/eventemitter3-D_kXO2ei.js";import"./assets/earcut-CqlJ6MN1.js";import"./assets/ismobilejs-CHLuctl-.js";import"./assets/pixi-fQzusUms.js";import"./assets/parse-svg-path-Cdo3mi5v.js";import"./assets/mdurl-k9Sl0PQj.js";import"./assets/uc.micro-kMc2yuuw.js";import"./assets/entities-C20TfXL6.js";import"./assets/linkify-it-DmNjr4Kv.js";import"./assets/punycode.js-Dj65hjkv.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))i(n);new MutationObserver(n=>{for(const s of n)if(s.type==="childList")for(const a of s.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&i(a)}).observe(document,{childList:!0,subtree:!0});function e(n){const s={};return n.integrity&&(s.integrity=n.integrity),n.referrerPolicy&&(s.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?s.credentials="include":n.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(n){if(n.ep)return;n.ep=!0;const s=e(n);fetch(n.href,s)}})();var yA=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function vA(p){return p&&p.__esModule&&Object.prototype.hasOwnProperty.call(p,"default")?p.default:p}const hf="modulepreload",cf=function(p,t){return new URL(p,t).href},Mm={},AA=function(t,e,i){let n=Promise.resolve();if(e&&e.length>0){const a=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),h=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));n=Promise.allSettled(e.map(c=>{if(c=cf(c,i),c in Mm)return;Mm[c]=!0;const u=c.endsWith(".css"),g=u?'[rel="stylesheet"]':"";if(!!i)for(let A=a.length-1;A>=0;A--){const S=a[A];if(S.href===c&&(!u||S.rel==="stylesheet"))return}else if(document.querySelector(`link[href="proxy.php?url=https%3A%2F%2Fwww.learnj.de%2F%24%7Bc%7D"]${g}`))return;const b=document.createElement("link");if(b.rel=u?"stylesheet":hf,u||(b.as="script"),b.crossOrigin="",b.href=c,h&&b.setAttribute("nonce",h),document.head.appendChild(b),u)return new Promise((A,S)=>{b.addEventListener("load",A),b.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${c}`)))})}))}function s(a){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=a,window.dispatchEvent(l),!l.defaultPrevented)throw a}return n.then(a=>{for(const l of a||[])l.status==="rejected"&&s(l.reason);return t().catch(s)})};class lp{constructor(t){r(this,"themes",[]);r(this,"currentTheme");this.rootElement=t,this.initThemes(),this.initEditorThemes(),this.currentTheme=this.themes[0]}switchTheme(t){for(let e of this.themes)if(e.name==t){this.internalSwitchTheme(e);break}}internalSwitchTheme(t){H.setTheme(t.monacoTheme);for(const e of Object.keys(t.cssColors)){const i=t.cssColors[e];this.rootElement.style.setProperty(e,i)}this.currentTheme=t}initThemes(){this.themes.push({name:"dark",monacoTheme:"myCustomThemeDark",cssColors:{"--defaultPrintColor":"#ffffff","--backgroundDark":"#1e1e1e","--backgroundLight":"#252526","--backgroundHeading":"#37373d","--backgroundSelected":"#2a2d2e","--fontColorNormal":"#c2cccc","--fontColorLight":"#e7e7e7","--slider":"#414141","--loginButtonBackgrond":"#59a15d","--loginButtonFontColor":"#000000","--loginMessageColor":"rgb(122, 48, 48)","--loginButtonHover":"#63a867","--loginButtonActive":"#94ffd1","--scrollbar":"#1e1e1e","--scrollbar-thumb":"#3e3e3e","--scrollbar-thumb-hover":"#5e5e5e","--scrollbar-thumb-active":"#7e7e7e","--submenu-hover":"#094771","--submenu-color":"#ffffff","--menuitemsdivider":"#616162","--file-hover":"hsla(0, 0%, 38%, 0.125)","--file-active":"#094771","--file-active-hover":"rgba(9, 71, 113, 0.827)","--file-active-border":"#007fd4","--file-errorcount":"rgb(224, 93, 93)","--inplace-editor":"blue","--contextmenu-background":"#3c3c3c","--contextmenu-color":"rgb(212,212,212)","--contextmenu-hover-background":"#094771","--contextmenu-hover-color":"#ffffff","--error-filename":"#2a709e","--error-line-ative":"#094771","--error-line-hover":"rgba(96, 96, 96, 0.125)","--error-position":"#c0802d","--linecolumn":"#14c714","--reveal-error":"rgba(253, 101, 101, 0.745)","--reveal-method":"#2b2b7d2f","--reveal-errorline-background":"red","--reveal-error-whole-line":"rgba(255, 0, 0, 0.555)","--reveal-programpointer":"rgba(111, 214, 27, 0.337)","--reveal-syntaxelement":"rgba(122, 122, 122, 0.61)","--margin-breakpoint":"rgba(255, 0, 0, 0.623)","--speedcontrol-bar":"#9d9d9d","--speedcontrol-grip":"#588555","--speedcontrol-grip-hover":"#89d185","--speedcontrol-display-background":"#383838","--speedcontrol-display-border":"#9d9d9d","--editorTooltip-background":"#252526","--editorTooltip-border":"#454545","--renameInput-color":"#ffffff","--bottomdiv-tabheading-hover":"white","--bottomdiv-tabheading-active":"rgb(97,97,255)","--noErrorMessage":"rgb(37, 211, 37)","--console-top-borderbottom":"#c4c4c4","--console-top-background":"#1e1e1e","--consoleEntry-withBorder":"#303030","--consoleEntryValue":"white","--consoleEntryIdentifier":"rgb(156, 156, 235)","--consoleEntryNoValue":"gray","--consoleEntryCaption":"white","--error-Caption":"rgb(166, 165, 176)","--console-error":"rgb(155, 51, 51)","--deIdentifier":"rgb(156, 156, 235)","--deValue":"white","--helper-background-color":"#383838","--helper-border-color":"#d4d4d4","--arrowBoxButtonOuter-background":"#59a15d","--arrowBoxButtonOuter-border":"#3d3d3d","--arrowBoxButtonOuter-color":"black","--arrowBoxButtonOuter-button-hover":"#63a867","--arrowBox-after":"rgba(136, 183, 213, 0)","--arrowBox-before":"rgba(194, 225, 245, 0)","--defaultOutputColor":"#ffffff","--runInputColor":"#ffffff","--runBackgroundColor":"rgba(255, 255, 255, 0.2)","--console-fieldidentifier":"#e6e92c"}});let t="#8080ff";this.themes.push({name:"light",monacoTheme:"myCustomThemeLight",cssColors:{"--defaultPrintColor":"#000000","--backgroundDark":"white","--backgroundLight":"#f3f3f3","--backgroundHeading":"#dcdcdc","--backgroundSelected":"#e8e8e8","--fontColorNormal":"#000","--fontColorLight":"#303030","--slider":"#b0b0b0","--loginButtonBackgrond":"#59a15d","--loginButtonFontColor":"#000000","--loginMessageColor":"rgb(122, 48, 48)","--loginButtonHover":"#63a867","--loginButtonActive":"#94ffd1","--scrollbar":"#e3e3e3","--scrollbar-thumb":"#bababa","--scrollbar-thumb-hover":"#8e8e8e","--scrollbar-thumb-active":"#616161","--submenu-hover":t,"--submenu-color":"#ffffff","--menuitemsdivider":"#cfcfcf","--file-hover":"#e8e8e8","--file-active":"rgba(171, 231, 255, 0.74)","--file-active-hover":"rgba(203, 212, 253, 0.61)","--file-active-border":"rgba(76, 204, 255, 0.74)","--file-errorcount":"red","--inplace-editor":"white","--contextmenu-background":"white","--contextmenu-color":"#756161","--contextmenu-hover-background":t,"--contextmenu-hover-color":"#a0a0ff","--error-filename":"#ff0000","--error-line-ative":"#ffa0a0","--error-line-hover":"#ffc0c0","--error-position":"#804040","--linecolumn":"#14c714","--reveal-error":"rgba(253, 101, 101, 0.745)","--reveal-method":"#babaec80","--reveal-errorline-background":"red","--reveal-error-whole-line":"rgba(255, 0, 0, 0.555)","--reveal-programpointer":"rgba(111, 214, 27, 0.337)","--reveal-syntaxelement":"rgba(244, 255, 96, 0.61)","--margin-breakpoint":"rgba(255, 0, 0, 0.623)","--speedcontrol-bar":"#9d9d9d","--speedcontrol-grip":"#588555","--speedcontrol-grip-hover":"#89d185","--speedcontrol-display-background":"#e0e0e0","--speedcontrol-display-border":"#9d9d9d","--editorTooltip-background":"#e0e0e0","--editorTooltip-border":"#9d9d9d","--renameInput-color":"#000000","--bottomdiv-tabheading-hover":"#424242","--bottomdiv-tabheading-active":"#424242","--noErrorMessage":"rgb(17, 180, 17)","--console-top-borderbottom":"#c4c4c4","--console-top-background":"white","--consoleEntry-withBorder":"#dbdbdbff","--consoleEntryValue":"#0000a0","--consoleEntryIdentifier":"black","--consoleEntryNoValue":"gray","--consoleEntryCaption":"#756161","--error-Caption":"rgb(166, 165, 176)","--console-error":"rgb(155, 21, 21)","--deIdentifier":"black","--deValue":"#0000a0","--helper-background-color":"#f3f3f3","--helper-border-color":"#606060","--arrowBoxButtonOuter-background":"#59a15d","--arrowBoxButtonOuter-border":"#3d3d3d","--arrowBoxButtonOuter-color":"black","--arrowBoxButtonOuter-button-hover":"#63a867","--arrowBox-after":"rgba(136, 183, 213, 0)","--arrowBox-before":"rgba(194, 225, 245, 0)","--defaultOutputColor":"#303030","--runInputColor":"#000000","--runBackgroundColor":"rgba(0, 0, 0, 0.2)","--console-fieldidentifier":"#b37c35ff"}})}initEditorThemes(){H.defineTheme("myCustomThemeDark",{base:"vs-dark",inherit:!0,rules:[{token:"method",foreground:"dcdcaa",fontStyle:"italic"},{token:"print",foreground:"dcdcaa",fontStyle:"italic bold"},{token:"class",foreground:"3DC9B0"},{token:"number",foreground:"b5cea8"},{token:"type",foreground:"499cd6"},{token:"identifier",foreground:"9cdcfe"},{token:"statement",foreground:"bb96c0",fontStyle:"bold"},{token:"keyword",foreground:"68bed4",fontStyle:"bold"},{token:"string3",foreground:"ff0000"},{token:"property",foreground:"ffffff",fontStyle:"bold"}],colors:{"editor.background":"#1e1e1e",jo_highlightMethod:"#2b2b7d"}}),H.defineTheme("myCustomThemeLight",{base:"vs",inherit:!0,rules:[{token:"method",foreground:"694E16",fontStyle:"italic bold"},{token:"print",foreground:"811f3f",fontStyle:"italic bold"},{token:"class",foreground:"a03030"},{token:"number",foreground:"404040"},{token:"type",foreground:"0000ff",fontStyle:"bold"},{token:"identifier",foreground:"001080"},{token:"statement",foreground:"8000e0",fontStyle:"bold"},{token:"keyword",foreground:"00a000",fontStyle:"bold"},{token:"comment",foreground:"808080",fontStyle:"italic"}],colors:{"editor.background":"#FFFFFF","editor.foreground":"#000000","editor.inactiveSelectionBackground":"#E5EBF1","editorIndentGuide.background":"#D3D3D3","editorIndentGuide.activeBackground":"#939393","editor.selectionHighlightBackground":"#ADD6FF80","editorSuggestWidget.background":"#F3F3F3","activityBarBadge.background":"#007ACC","sideBarTitle.foreground":"#6F6F6F","list.hoverBackground":"#E8E8E8","input.placeholderForeground":"#767676","searchEditor.textInputBorder":"#CECECE","settings.textInputBorder":"#CECECE","settings.numberInputBorder":"#CECECE","statusBarItem.remoteForeground":"#FFF","statusBarItem.remoteBackground":"#16825D",jo_highlightMethod:"#babaec"}})}}class th{constructor(t){r(this,"name");r(this,"fileContentChangedListeners",[]);r(this,"editorState",null);r(this,"__textWhenMonacoModelAbsent","");r(this,"lastSavedVersion",0);r(this,"localVersion",this.lastSavedVersion);this.name=t||""}getText(){return this.__textWhenMonacoModelAbsent}setText(t){this.__textWhenMonacoModelAbsent=t,this.notifyListeners()}getLocalVersion(){return this.localVersion}isSaved(){return this.lastSavedVersion==this.getLocalVersion()}setSaved(t){t?this.lastSavedVersion=this.getLocalVersion():this.lastSavedVersion=-1}onFileContentChanged(t){this.fileContentChangedListeners.push(t)}notifyListeners(){for(let t of this.fileContentChangedListeners)t(this)}saveViewState(t){this.editorState=t.saveViewState()}restoreViewState(t){if(this.editorState)try{t.restoreViewState(this.editorState)}catch{}this.editorState=null}}class Ai{static fileTypeToIconClass(t){for(let e of this.filetypes)if(e.file_type==t)return e.iconclass;return"java"}static suffixToFileType(t){for(let e of this.filetypes)if(e.suffix==t)return e;return this.filetypes[0]}static filenameToFileType(t){for(let e of this.filetypes)if(t.endsWith(e.suffix))return e;return this.filetypes[0]}}r(Ai,"filetypes",[{name:"Java-Quelltext",file_type:0,iconclass:"img_file-dark-java",language:"myJava",suffix:".java"},{name:"Textdatei",file_type:1,iconclass:"img_file-dark-text",language:"text",suffix:".txt"},{name:"JSON-Datei",file_type:1,iconclass:"img_file-dark-json",language:"json",suffix:".json"},{name:"XML-Datei",file_type:1,iconclass:"img_file-dark-xml",language:"xml",suffix:".xml"},{name:"CSV-Datei",file_type:1,iconclass:"img_file-dark-csv",language:"csv",suffix:".csv"},{name:"Markup",file_type:1,iconclass:"img_file-dark-md",language:"md",suffix:".md"}]);const zd=class zd{static patch(t){let e=!1;for(let i of zd.patches)t.match(i.old)!=null&&(t=t.replace(i.old,i.new),e=!0);return{patchedText:t,modified:e}}};r(zd,"patches",[{old:/SpriteLibrary.Ship_Adrian,\s*0/g,new:"SpriteLibrary.Space_Shooter_1, 0"},{old:/SpriteLibrary.Ship_Adrian,\s*1/g,new:"SpriteLibrary.Space_Shooter_1, 1"},{old:/SpriteLibrary.Ship_Adrian,\s*2/g,new:"SpriteLibrary.Space_Shooter_1, 2"},{old:/SpriteLibrary.Ship_Adrian,\s*3/g,new:"SpriteLibrary.Space_Shooter_1, 3"},{old:/SpriteLibrary.Ship_Adrian,\s*4/g,new:"SpriteLibrary.Space_Shooter_1, 4"},{old:/SpriteLibrary.Schuss_Adrian,\s*0/g,new:"SpriteLibrary.Space_Shooter_1, 5"},{old:/SpriteLibrary.Schuss_Adrian,\s*1/g,new:"SpriteLibrary.Space_Shooter_1, 6"},{old:/SpriteLibrary.Schuss_Adrian,\s*2/g,new:"SpriteLibrary.Space_Shooter_1, 7"},{old:/SpriteLibrary.Schuss_Adrian,\s*3/g,new:"SpriteLibrary.Space_Shooter_1, 8"},{old:/SpriteLibrary.Schuss_Adrian,\s*4/g,new:"SpriteLibrary.Space_Shooter_1, 9"},{old:/SpriteLibrary.Asteroid_Adrian,\s*0/g,new:"SpriteLibrary.Space_Shooter_1, 10"},{old:/SpriteLibrary.Gegner_Adrian,\s*0/g,new:"SpriteLibrary.Space_Shooter_1, 11"},{old:/SpriteLibrary.Explosion_Adrian,\s*0/g,new:"SpriteLibrary.Space_Shooter_1, 12"},{old:/SpriteLibrary.Explosion_Adrian,\s*1/g,new:"SpriteLibrary.Space_Shooter_1, 13"},{old:/SpriteLibrary.Explosion_Adrian,\s*2/g,new:"SpriteLibrary.Space_Shooter_1, 14"},{old:/SpriteLibrary.Explosion_Adrian,\s*3/g,new:"SpriteLibrary.Space_Shooter_1, 15"},{old:/SpriteLibrary.Explosion_Adrian,\s*4/g,new:"SpriteLibrary.Space_Shooter_1, 16"},{old:/SpriteLibrary.Explosion_Adrian,\s*5/g,new:"SpriteLibrary.Space_Shooter_1, 17"},{old:/SpriteLibrary.Explosion_Adrian,\s*6/g,new:"SpriteLibrary.Space_Shooter_1, 18"},{old:/SpriteLibrary.Explosion_Adrian,\s*7/g,new:"SpriteLibrary.Space_Shooter_1, 19"},{old:/SpriteLibrary.Explosion_Adrian,\s*8/g,new:"SpriteLibrary.Space_Shooter_1, 20"},{old:/SpriteLibrary.Explosion_Adrian,\s*9/g,new:"SpriteLibrary.Space_Shooter_1, 21"},{old:/SpriteLibrary.Explosion_Adrian,\s*10/g,new:"SpriteLibrary.Space_Shooter_1, 22"},{old:/SpriteLibrary.Explosion_Adrian,\s*11/g,new:"SpriteLibrary.Space_Shooter_1, 23"}]);let Dh=zd;const Aa=class Aa extends th{constructor(e,i,n){super(i);r(this,"id");r(this,"text_before_revision",null);r(this,"submitted_date",null);r(this,"student_edited_after_revision",!1);r(this,"is_copy_of_id",null);r(this,"repository_file_version",null);r(this,"identical_to_repository_version",!0);r(this,"remote_version",1);r(this,"isFolder",!1);r(this,"parent_folder_id");r(this,"sorting_order");r(this,"monacoModel");this.main=e,n&&this.setText(n)}getFileData(e){return{id:this.id,name:this.name,text:this.getText(),text_before_revision:this.text_before_revision,submitted_date:this.submitted_date,student_edited_after_revision:this.student_edited_after_revision,version:this.remote_version,is_copy_of_id:this.is_copy_of_id,repository_file_version:this.repository_file_version,identical_to_repository_version:this.identical_to_repository_version,workspace_id:e.id,forceUpdate:!1,isFolder:this.isFolder,parent_folder_id:this.parent_folder_id,sorting_order:this.sorting_order}}static restoreFromData(e,i){let n=Dh.patch(i.text),s=new Aa(e,i.name);return s.setText(n.patchedText),s.text_before_revision=i.text_before_revision,s.submitted_date=i.submitted_date,s.student_edited_after_revision=!1,s.remote_version=i.version,s.id=i.id,s.is_copy_of_id=i.is_copy_of_id,s.repository_file_version=i.repository_file_version,s.identical_to_repository_version=i.identical_to_repository_version,s.isFolder=i.isFolder,s.parent_folder_id=i.parent_folder_id,s.sorting_order=i.sorting_order,s}getMonacoModel(){let e=this.hasMonacoModel();return this.monacoModel||this.createMonacolModel(),!e&&!this.main.isEmbedded()&&this.monacoModel.onDidChangeContent(i=>{let n=this.main;n.workspacesOwnerId!=n.user.id?i.isUndoing||i.isRedoing||(this.text_before_revision==null||this.student_edited_after_revision)&&(this.student_edited_after_revision=!1,this.monacoModel.undo(),this.text_before_revision=this.monacoModel.getValue(H.EndOfLinePreference.LF),this.monacoModel.redo(),this.setSaved(!1),n.networkManager.sendUpdatesAsync(!1).then(()=>{n.bottomDiv.homeworkManager.showHomeWorkRevisionButton(),n.projectExplorer.renderHomeworkButton(this)})):this.student_edited_after_revision=!0}),this.monacoModel}getText(){return this.monacoModel?this.monacoModel.getValue(H.EndOfLinePreference.LF):super.getText()}setText(e){this.monacoModel?(this.monacoModel.setValue(e),this.notifyListeners()):super.setText(e)}createMonacolModel(){let e=this.name;e=e.replaceAll("//","_");let i=Aa.uriMap[e];i==null?i=0:i++,Aa.uriMap[e]=i,i>0&&(e+=" ("+i+")");let n=Mg.from({path:e,scheme:"inmemory"}),s=Ai.filenameToFileType(this.name).language,a=this.isSaved();this.monacoModel=H.createModel(super.getText(),s,n),this.monacoModel.updateOptions({tabSize:3,bracketColorizationOptions:{enabled:!0,independentColorPoolPerBracketType:!1}}),this.monacoModel.onDidChangeContent(()=>{this.notifyListeners()}),this.setSaved(a)}disposeMonacoModel(){var e;this.monacoModel&&(this.localVersion=this.monacoModel.getAlternativeVersionId(),super.setText(this.monacoModel.getValue()),(e=this.monacoModel)==null||e.dispose(),this.monacoModel=void 0)}getLocalVersion(){return this.monacoModel?this.monacoModel.getAlternativeVersionId():this.localVersion}hasMonacoModel(){return typeof this.monacoModel<"u"}getFolderContentsRecursively(e){let i=e.filter(n=>n.parent_folder_id==this.id);for(let n of i.slice())n.isFolder&&(i=i.concat(n.getFolderContentsRecursively(e)));return i}};r(Aa,"uriMap",{});let Ge=Aa;class uf{constructor(t){r(this,"breakpoints",[]);r(this,"breakpointDecorators",[]);r(this,"decoratorIdToBreakpointMap",{});this.module=t}}var cl,ft,jh,zl,hp,cp,up,ql,mp;class dp{constructor(t){Z(this,ft);Z(this,cl,new Map);this.main=t;let e=t.getMainEditor();e.onMouseDown(i=>{i.target.type!==H.MouseTargetType.GUTTER_GLYPH_MARGIN&&i.target.type!==H.MouseTargetType.GUTTER_LINE_NUMBERS||(this.toggleBreakpoint(i.target.position.lineNumber),t.getMainEditor().focus())}),e.onDidChangeModel(()=>{ne(this,ft,jh).call(this)})}attachToInterpreter(t){t.eventManager.on("resetRuntime",()=>{ne(this,ft,mp).call(this)})}toggleBreakpoint(t){const e=ne(this,ft,ql).call(this);e&&(ne(this,ft,hp).call(this,t,e),ne(this,ft,jh).call(this))}}cl=new WeakMap,ft=new WeakSet,jh=function(){let t=ne(this,ft,ql).call(this);if(!t)return;ne(this,ft,zl).call(this,t);let e=[];for(let n of t.breakpoints){let s=!!n.step;e.push({range:{startLineNumber:n.lineNumber,endLineNumber:n.lineNumber,startColumn:1,endColumn:1},options:{isWholeLine:!0,className:s?"jo_decorate_breakpoint":"jo_decorate_breakpoint_inactive",overviewRuler:{color:"#580000",position:H.OverviewRulerLane.Left},minimap:{color:"#580000",position:H.MinimapPosition.Inline},marginClassName:s?"jo_margin_breakpoint":"jo_margin_breakpoint_inactive",stickiness:H.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges},breakpoint:n})}let i=t.module.file;if(i instanceof Ge){t.breakpointDecorators=i.getMonacoModel().deltaDecorations(t.breakpointDecorators,e),t.decoratorIdToBreakpointMap={};for(let n=0;n=0){let a=t.decoratorIdToBreakpointMap[n.id];a!=null&&(a.lineNumber=n.range.startLineNumber)}}},hp=function(t,e){ne(this,ft,zl).call(this,e),ne(this,ft,up).call(this,t,e)||ne(this,ft,cp).call(this,t,e)},cp=function(t,e){var n;let i={lineNumber:t,step:e.module.findStep(t)};return e.breakpoints.push(i),(n=i.step)==null||n.setBreakpoint(),i},up=function(t,e){var i;for(let n=0;nt.appendChild(s))}static makeDiv(t,...e){let i=document.createElement("div");return e!=null&&i.classList.add(...e.filter(n=>n!=null)),t&&t.appendChild(i),i}static makeElement(t,e,...i){let n=document.createElement(e);return i!=null&&n.classList.add(...i),t&&t.appendChild(n),n}static makeSpan(t,...e){let i=document.createElement("span");return e!=null&&i.classList.add(...e),t.appendChild(i),i}}class mf{constructor(t,e){r(this,"div");r(this,"yStart");r(this,"divsStartHeights",[]);r(this,"transparentOverlay");this.accordion=t,this.treeviewBelowIndex=e;let i=t.treeviewList[e].outerDiv;this.div=R.makeDiv(i,"jo_treeview_splitter"),this.div.style.display="none",this.enable()}enable(){this.div.style.display="",this.div.onpointerdown=t=>{this.div.style.backgroundColor="#800000",this.yStart=t.pageY;let e=this.accordion.treeviewList;this.divsStartHeights=[];for(let i of e){let n=i.outerDiv.getBoundingClientRect().height;this.divsStartHeights.push(n),i.outerDiv.style.height=n+"px",i.outerDiv.style.flex="none"}this.transparentOverlay=R.makeDiv(document.body),this.transparentOverlay.style.cursor="ns-resize",this.transparentOverlay.style.position="absolute",this.transparentOverlay.style.left="0",this.transparentOverlay.style.top="0",this.transparentOverlay.style.bottom="0",this.transparentOverlay.style.right="0",this.transparentOverlay.style.zIndex="1000",this.transparentOverlay.onpointermove=i=>{this.onPointerMove(i.pageY),i.stopPropagation()},this.transparentOverlay.onmousemove=i=>{i.stopPropagation()},this.transparentOverlay.onpointerup=()=>{this.transparentOverlay.remove(),this.div.style.backgroundColor=""}}}onPointerMove(t){let e=t-this.yStart,i=this.accordion.treeviewList,n=this.divsStartHeights.slice();if(e>0){let s=e;for(let a=this.treeviewBelowIndex;a=s){n[a]-=s,s=0;break}else s-=h,n[a]-=h}n[this.treeviewBelowIndex-1]+=e-s}else{let s=e;for(let a=this.treeviewBelowIndex-1;a>=0;a--){if(i[a].isCollapsed())continue;let h=i[a].config.minHeight-n[a];if(!(h>=0))if(h<=s){n[a]+=s,s=0;break}else s-=h,n[a]+=h}n[this.treeviewBelowIndex]-=e-s}for(let s=0;s{clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{this.onResize(!1)},200)}).observe(document.body)}get mainDiv(){return this._mainDiv}set mainDiv(t){this._mainDiv=t}onResize(t){let e=this.outerElementWithCorrectSize.getBoundingClientRect().height-this.treeviewList.length*1,i=0,n=0;for(let a of this.treeviewList)a.isCollapsed()||(n+=a.getTargetVariableHeight()),i+=a.getFixedHeight();let s=n==0?0:(e-i)/n;for(let a of this.treeviewList)a.outerDiv.style.flexBasis="",a.outerDiv.style.flexGrow="";for(let a of this.treeviewList){let l=(a.isCollapsed()?0:a.getTargetVariableHeight())*s+a.getFixedHeight();a.outerDiv.style.height=l+"px",t&&!a.isCollapsed()&&(a._lastExpandedHeight=l)}}addTreeview(t){this.treeviewList.push(t),this.treeviewList.length>1&&this.splitterList.push(new mf(this,this.treeviewList.length-1));let e=this._mainDiv.getElementsByClassName("jo_treeview_dummy");for(let i=0;i{n.stopPropagation(),this.toggleState()},this._state=i,this.render()}get state(){return this._state}toggleState(){switch(this._state){case"collapsed":this.setState("expanded",!0);break;case"expanded":this.setState("collapsed",!0);break}}get parent(){return this._parent}setState(t,e=!0){this._state=t,this.render(),e&&this.listener(t)}render(){this.currentIconClass&&this.divElement.classList.remove(this.currentIconClass),this.currentIconClass=qd.iconClasses[this.darkLightState][this._state],this.divElement.classList.add(this.currentIconClass)}setDarkLightState(t){this.darkLightState=t,this.render()}hide(){this.divElement.style.display="none"}show(){this.divElement.style.display=""}};r(qd,"iconClasses",{light:{expanded:"img_chevron-down",collapsed:"img_chevron-right"},dark:{expanded:"img_chevron-down-dark",collapsed:"img_chevron-right-dark"}});let Ul=qd;class ro{constructor(t,e,i,n=[],s=!1,a="prepend"){r(this,"divElement");r(this,"darkLightState","dark");r(this,"isActive",!0);r(this,"currentIconClass");r(this,"currentState",0);r(this,"tag");r(this,"_iconClasses");r(this,"_toolTips");r(this,"_toggleBetweenStates");switch(this._parent=t,this.listener=i,this._toggleBetweenStates=s,this.divElement=R.makeDiv(void 0,"jo_iconButton"),a){case"prepend":t.prepend(this.divElement);break;case"append":t.append(this.divElement);break}Array.isArray(n)||(n=[n]),this._toolTips=n,this.divElement.onpointerup=l=>{l.stopPropagation(),this._toggleBetweenStates&&(this.currentState=(this.currentState+1)%this._iconClasses.length,this.render()),this.listener&&this.listener(l,this.currentState)},Array.isArray(e)||(e=[e]),this._iconClasses=e.map(l=>this.stripDark(l)),this.render()}get parent(){return this._parent}set title(t){this.divElement.title=t}stripDark(t){return t.endsWith("-dark")?t.substring(0,t.length-5):t}set iconClass(t){t=this.stripDark(t),this._iconClasses[0]=t,this.render()}set state(t){this.currentState=t,this.render()}render(){this.currentIconClass&&this.divElement.classList.remove(this.currentIconClass),this.currentIconClass=this._iconClasses[this.currentState],this.darkLightState=="dark"&&(this.currentIconClass+="-dark"),this.divElement.classList.add(this.currentIconClass),this._toolTips.length>0&&(this._toolTips.length==1?this.divElement.title=this._toolTips[0]:this.divElement.title=this._toolTips[this.currentState])}setDarkLightState(t){this.darkLightState=t,this.render()}setActive(t){this.isActive!=t&&(this.divElement.classList.toggle("jo_iconButton_active"),this.isActive=t)}setVisible(t){this.divElement.style.display=t?"":"none"}remove(){this.divElement.remove()}}function pf(p){let t=0,e;for(let i=0;i"u"?"":p.replace(/['"]+/g,"").replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function pp(p,t=!1){let e=`${Kr(p.getDate())}.${Kr(p.getMonth()+1)}.${p.getFullYear()}, ${Kr(p.getHours())}:${Kr(p.getMinutes())}`;return t&&(e+=`, ${Kr(p.getHours())}:${Kr(p.getMinutes())}`),e}function gf(p){return`${Kr(p.getDate())}.${Kr(p.getMonth()+1)}.${p.getFullYear()}`}function Kr(p){return p<10?"0"+p:""+p}function Bl(p){return p<10?" "+p:p<100?" "+p:""+p}function ff(p){let t=p.match(/^(\d{2})\.(\d{2})\.(\d{4}), (\d{2}):(\d{2})$/);return t?new Date(Number.parseInt(t[3]),Number.parseInt(t[2])-1,Number.parseInt(t[1]),Number.parseInt(t[4]),Number.parseInt(t[5])):void 0}function bf(p,t){return p.replace(new RegExp(`(?![^\\n]{1,${t}}$)([^\\n]{1,${t}})\\s`,"g"),`$1 `)}function yf(p,t=""){let e="";if(typeof t=="string")e=t;else for(let i=0;i');a.css({color:t.css("color"),position:t.css("position"),"background-color":t.css("background-color"),"font-size":t.css("font-size"),"font-weight":t.css("font-weight"),"line-height":t.css("line-height"),flex:t.css("flex"),"box-sizing":"border-box"});let l=t.css("height");l!=null&&l!="0px"&&a.css("height",l);let h=t.css("width");h!=null&&h!="0px"&&a.css("width",h),a.val(p.text()),a.on(s+"down",c=>{c.stopPropagation()}),a.on(s+"up",c=>{c.stopPropagation()}),a[0].addEventListener("touchstart",c=>{c.stopPropagation(),a[0].focus()}),a.on("click",c=>{c.stopPropagation(),a[0].focus()}),i!=null&&a[0].setSelectionRange(i.start,i.end),t.after(a),t.hide(),setTimeout(()=>{a[0].focus();let c=new KeyboardEvent("touchstart",{bubbles:!0});a[0].dispatchEvent(c)},300),a.on("keydown.me",c=>{if(c.key=="Enter"||c.key=="Escape"){a.off("keydown.me"),a.off("focusout.me"),a.remove(),n.show();let u=Mh(a.val());e(u);return}}),a.on("focusout.me",c=>{a.off("keydown.me"),a.off("focusout.me"),a.remove(),n.show();let u=Mh(a.val());e(u)})}function Ln(p,t,e,i=!1){let n=window.PointerEvent?"pointer":"mouse";i||y(".jo_contextmenu").remove();let s=y('
'),a=y(".joeCssFence")[0],l=a.style.getPropertyValue("--contextmenu-background");s.css("background-color",l);let h=a.style.getPropertyValue("--fontColorNormal"),c,u;for(let C of p){if(C.caption.trim()=="-"){s.append(y('
'));continue}let q=C.iconClass?``:"",I=C.caption;C.link!=null&&(I=`${C.caption}`);let W=y(`
${q}`+I+(C.subMenu!=null?'     >':"")+"
");if(W.find("a").attr("style","color: "+h+" !important"),W.attr("style","color: "+h+" !important"),C.color!=null&&W.css("color",C.color),C.link==null)W.on(n+"up.contextmenu",te=>{te.stopPropagation(),C.subMenu?W.trigger("move.contextmenu"):(y(".jo_contextmenu").remove(),y(document).off(n+"up.contextmenu"),y(document).off(n+"down.contextmenu"),y(document).off("keydown.contextmenu"),C.callback())}),W.on(n+"down.contextmenu",te=>{te.stopPropagation()});else{let te=W.find("a");te.on(n+"up",Y=>{Y.stopPropagation(),setTimeout(()=>{W.hide()},500)}),te.on(n+"down",Y=>{Y.stopPropagation()})}W.on(n+"move.contextmenu",()=>{C!=u&&c!=null&&(c.remove(),u=void 0,c=void 0),C.subMenu!=null&&(c=Ln(C.subMenu,W.offset().left+W.width(),W.offset().top,!0))}),s.append(W)}y(document).on(n+"down.contextmenu",C=>{y(document).off(n+"down.contextmenu"),y(document).off("keydown.contextmenu"),y(".jo_contextmenu").remove()}),y(document).on("keydown.contextmenu",C=>{C.key=="Escape"&&(y(document).off(n+"up.contextmenu"),y(document).off("keydown.contextmenu"),y(".jo_contextmenu").remove())});let g=t>window.innerWidth*.8?"right":"left",f=t>window.innerWidth*.8?window.innerWidth-t:t,b="top";y("body").append(s),s.show();let A={},S=e,w=s.height()||0;return e+w>window.innerHeight&&(S=e-(w-(window.innerHeight-e))-20),w>window.innerHeight-20&&(S=10,A["max-height"]=window.innerHeight-20+"px",A.overflow="auto"),A[g]=f+"px",A[b]=S+"px",s.css(A),s.on(n+"down.contextmenu",C=>{C.stopPropagation()}),s}function gp(p){let t=p.find(".jo_tabheadings>div").not(".jo_noHeading"),e=p.find(".jo_tabs>div"),i=window.PointerEvent?"pointer":"mouse";t.on(i+"down",n=>{let s=y(n.target);t.removeClass("jo_active"),s.addClass("jo_active");let a=p.find("."+s.data("target"));e.removeClass("jo_active"),e.trigger("myhide"),a.addClass("jo_active"),a.trigger("myshow")})}function Ql(p){return p=p.replace("px","").trim(),Number.parseInt(p)}function M(p,t="",e="",i,n){let s="";p!=null&&p!=""&&(s+=` id="${p}"`),t!=null&&t!=""&&(s+=` class="${t}"`);let a=y(``);return i!=null&&a.css(i),e!=null&&e!=""&&a.text(e),n!=null&&n.append(a),a}function so(p,t,e){p.empty(),t.forEach(i=>{let n=i.value==e?' selected="selected"':"",s=y(``);p.append(s),s.data("object",i.object)}),p.data("items",t)}function ao(p){var i;let t=p.data("items"),e=p.val();return(i=t.find(n=>n.value==e))==null?void 0:i.object}function Af(){matchMedia("(pointer:fine)").matches}function Or(p,t,e=!1){var i=e?p:new Blob([typeof p=="string"?p:JSON.stringify(p,void 0,3)],{type:"text/plain"});if(window.navigator&&window.navigator.msSaveOrOpenBlob)window.navigator.msSaveOrOpenBlob(i,t);else{var n=document.createEvent("MouseEvents"),s=document.createElement("a");s.download=t,s.href=window.URL.createObjectURL(i),s.dataset.downloadurl=["text/plain",s.download,s.href].join(":"),n.initEvent("click",!0,!1,window,0,0,0,0,0,!1,!1,!1,!1,0,null),s.dispatchEvent(n),s.remove()}}function wf(p){var t=document.createElement("textarea");t.value=p,t.style.top="0",t.style.left="0",t.style.position="fixed",document.body.appendChild(t),t.focus(),t.select();try{document.execCommand("copy")}catch(e){console.error("Fallback: Oops, unable to copy",e)}document.body.removeChild(t)}function Yl(p){if(!navigator.clipboard){wf(p);return}navigator.clipboard.writeText(p).then(function(){},function(t){console.error("Async: Could not copy text: ",t)})}function kf(p,t){var e=p>>16,i=p>>8&255,n=p&255;e=Math.round((255-e)*t)+e&255,i=Math.round((255-i)*t)+i&255,n=Math.round((255-n)*t)+n&255;var s=n|i<<8|e<<16;return s}function Wl(p){var t=null,e=[];return location.search.substring(1).split("&").forEach(function(i){e=i.split("="),e[0]===p&&(t=decodeURIComponent(e[1]))}),t}function fa(p,t){if(p&&t)for(;p.children.length>0;){let e=p.children[0];t.append(e)}}function Ol(){return!!(navigator.userAgent.match(/Mac/)&&navigator.maxTouchPoints)}class fp{}r(fp,"alertMessage",()=>d({de:"Sie müssen sich aus- und wiedereinloggen, damit die gewählte Sprache aktiv wird.",en:"You have to logout/login to activate the selected language."}));var ps="de",qs=[{id:"de",name:"deutsch",iconClass:"img_flag-german"},{id:"en",name:"english",iconClass:"img_flag-english"}];function d(p){let t=p[ps];if(!t){for(let e of qs)if(t=p[e.id],t)break;if(!t)return"Missing template for language "+ps}return t}function bh(p){let t=p[ps];if(!t){for(let e of qs)if(t=p[e.id],t)break;if(!t)return[0,0]}return t}function E(p){let t=p[ps];if(!t){for(let i of qs)if(t=p[i.id],t)break;if(!t)return{id:"MissingTemplate",message:"Missing template for language "+ps}}let e=p.id||"no id";return{message:t,id:e}}class Cf{constructor(t,e){r(this,"selectorDivEventListener");this.main=t,this.rootHtmlElement=e}setupLanguageSelector(){let t=this.rootHtmlElement.getElementsByClassName("languageElement");if(t.length==0)return;let e=t.item(0),i=qs.find(n=>n.id==ps);e.classList.add(i.iconClass),this.selectorDivEventListener&&(e.removeEventListener("click",this.selectorDivEventListener),this.selectorDivEventListener=void 0),e.addEventListener("click",this.selectorDivEventListener=n=>{Ln(qs.filter(s=>s.id!=ps).map(s=>({callback:()=>{this.setLanguage(s.id),alert(fp.alertMessage())},caption:s.name,iconClass:s.iconClass})),n.pageX+2,n.pageY+2)})}setLanguage(t){let e=qs[0];t&&(e=qs.find(i=>i.id.toLowerCase()==t.toLowerCase())),ps=e.id,this.setupLanguageSelector(),this.main.user.gui_state.language!=e.id&&(this.main.user.gui_state.language=e.id,this.main.gui_state_dirty=!0)}}class yn{}r(yn,"wholeWindow",()=>d({de:"Auf Fenstergröße vergrößern",en:"Whole window"})),r(yn,"backToNormalSize",()=>d({de:"Auf normale Größe zurückführen",en:"Back to normal size"})),r(yn,"programEnd",()=>d({de:"Programm beendet",en:"Program end"})),r(yn,"inputNumber",()=>d({de:"Bitte geben Sie eine Zahl ein!",en:"Input any number!"})),r(yn,"classDiagram",()=>d({de:"Klassendiagramm",en:"Class diagram"})),r(yn,"output",()=>d({de:"Ausgabe",en:"Output"}));class qa{}r(qa,"code",()=>d({de:"Code",en:"Code"})),r(qa,"testRunner",()=>d({de:"Testrunner",en:"Test runner"})),r(qa,"waitForDatabase",()=>d({de:"Warten auf Datenbank...",en:""}));class sr{}r(sr,"errors",()=>d({de:"Fehler",en:"Errors"})),r(sr,"noErrorsFound",()=>d({de:"Keine Fehler gefunden :-)",en:"No errors found :-)"})),r(sr,"warning",()=>d({de:"Warnung",en:"Warning"})),r(sr,"info",()=>d({de:"Info",en:"Info"})),r(sr,"error",()=>d({de:"Fehler",en:"Error"}));class cs{}r(cs,"console",()=>d({de:"Console",en:"Console"})),r(cs,"emptyConsole",()=>d({de:"Console leeren",en:"Empty console"})),r(cs,"copyToClipboard",()=>d({de:"Anweisungen aus der Console in die Zwischenablage kopieren",en:"Copy console statements to clipboard"})),r(cs,"error",()=>d({de:"Fehler",en:"Error"}));class li{}r(li,"homework",()=>d({de:"Hausaufgaben",en:"Homework"})),r(li,"defaultView",()=>d({de:"Normalansicht",en:"default view"})),r(li,"showRemarks",()=>d({de:"Korrekturen zeigen",en:"Show remarks"})),r(li,"filingDays",()=>d({de:"Abgabetage",en:""})),r(li,"givenFiles",()=>d({de:"Abgegebene Dateien",en:"Files"})),r(li,"workspace",()=>d({de:"Workspace",en:"Workspace"})),r(li,"file",()=>d({de:"Datei",en:"File"})),r(li,"dateFiled",()=>d({de:"Abgabe",en:"Date"}));class Ni{}r(Ni,"evaluation",()=>d({de:"Bewertung",en:"Evaluation"})),r(Ni,"points",()=>d({de:"Punkte",en:"Points"})),r(Ni,"grade",()=>d({de:"Note",en:"Grade"})),r(Ni,"attendance",()=>d({de:"Anwesend",en:"Attendance"})),r(Ni,"yes",()=>d({de:"Ja",en:"yes"})),r(Ni,"no",()=>d({de:"Nein",en:"no"})),r(Ni,"remark",()=>d({de:"Bemerkung",en:"Remark"}));class K{}r(K,"confirmDeleteFileFolderRecursively",t=>d({de:`Sie sind dabei, einen Ordner mitsamt aller darin enthaltenen Dateien und Unterordner rekursiv zu löschen. Insgesamt betrifft dies ${t} Dateien und Ordner. Diese Opertion kann nicht wieder rückgängig gemacht werden! Sind Sie sicher?`,en:`You are about to delete a folder with all its files and subfolders recursively. This affects a total of ${t} files and folders. This operation cannot be undone! Are you sure?`})),r(K,"confirmDeleteWorkspaceFolderRecursively",t=>d({de:`Sie sind dabei, einen Ordner mitsamt aller darin enthaltenen Workspaces und Unterordner rekursiv zu löschen. Insgesamt betrifft dies ${t} Workspaces und Ordner. Diese Opertion kann nicht wieder rückgängig gemacht werden! Sind Sie sicher?`,en:`You are about to delete a folder with all its workspaces and subfolders recursively. This affects a total of ${t} workspaces and folders. This operation cannot be undone! Are you sure?`})),r(K,"noWorkspaceSelected",()=>d({de:"Kein Workspace ausgewählt",en:"No workspace selected"})),r(K,"newFile",()=>d({de:"Neue Datei...",en:"New file..."})),r(K,"firstChooseWorkspace",()=>d({de:"Bitte wählen Sie zuerst einen Workspace aus.",en:"Choose workspace first."})),r(K,"firstChooseWorkspaceBecauseFolderIsSelected",()=>d({de:"Bitte wählen Sie zuerst einen Workspace aus. Selektiert ist aktuell ein Ordner, kein Workspace.",en:"Choose workspace first. Currently a folder is selected, not a workspace."})),r(K,"serverNotReachable",()=>d({de:"Der Server ist nicht erreichbar!",en:"Server not reachable!"})),r(K,"noFile",()=>d({de:"Keine Datei vorhanden",en:"No file"})),r(K,"duplicate",()=>d({de:"Duplizieren",en:"Duplicate"})),r(K,"exportAsFile",()=>d({de:"Als Datei exportieren",en:"Export as file"})),r(K,"copy",()=>d({de:"Kopie",en:"copy"})),r(K,"markAsAssignment",()=>d({de:"Als Hausaufgabe markieren",en:"Label as assignment"})),r(K,"removeAssignmentLabel",()=>d({de:"Hausaufgabenmarkierung entfernen",en:"Remove assignment label"})),r(K,"synchronizeWorkspaceWithRepository",()=>d({de:"Workspace mit Repository synchronisieren",en:"Synchronize workspace with repository"})),r(K,"labeledAsAssignment",()=>d({de:"Wurde aus Hausaufgabe abgegeben",en:"Labeled as assignment"})),r(K,"assignmentIsCorrected",()=>d({de:"Korrektur liegt vor",en:"Assignment is corrected",fr:"Devoir corrigé"})),r(K,"WORKSPACES",()=>d({de:"WORKSPACES",en:"WORKSPACES"})),r(K,"newWorkspace",()=>d({de:"Neuer Workspace",en:"New workspace"})),r(K,"selectWorkspace",()=>d({de:"Bitte Workspace selektieren",en:"Select workspace"})),r(K,"error",()=>d({de:"Fehler",en:"Error"})),r(K,"displayOwnWorkspaces",()=>d({de:"Meine eigenen Workspaces anzeigen",en:"Display own workspaces"})),r(K,"importWorkspace",()=>d({de:"Workspace importieren",en:"Import workspace"})),r(K,"exportFolder",()=>d({de:"Ordner exportieren",en:"Export folder"})),r(K,"exportRepository",()=>d({de:"Repository als Datei exportieren",en:"Export repository to file"})),r(K,"exportToFile",()=>d({de:"Workspace als Datei exportieren",en:"Export workspace to file"})),r(K,"distributeToClass",()=>d({de:"An Klasse austeilen",en:"Distribute to class"})),r(K,"workspaceDistributed",(t,e)=>d({de:"Der Workspace "+t+" wurde an die Klasse "+e+` ausgeteilt. Er wird sofort in der Workspaceliste der Schüler/innen erscheinen. Falls das bei einer Schülerin/einem Schüler nicht klappt, bitten Sie sie/ihn, sich kurz aus- und wieder einzuloggen.`,en:"Workspace "+t+" gets distributed to class "+e+" . If it's not visible for a given student, she/he might logout and login to see it."})),r(K,"distributeToStudents",()=>d({de:"An einzelne Schüler/-innen austeilen...",en:"Distribute to individual students..."})),r(K,"createRepository",()=>d({de:"Repository anlegen...",en:"Create repository..."})),r(K,"detachFromRepository",()=>d({de:"Vom Repository loslösen",en:"Detach from Repository"})),r(K,"settings",()=>d({de:"Einstellungen",en:"Settings"})),r(K,"noWorkspace",()=>d({de:"Kein Workspace vorhanden",en:"No workspace"})),r(K,"myWorkspaces",()=>d({de:"Meine WORKSPACES",en:"Own Workspaces"}));class Ii{}r(Ii,"students",()=>d({de:"Schüler/-innen",en:"Students"})),r(Ii,"classes",()=>d({de:"Klassen",en:"classes"})),r(Ii,"tests",()=>d({de:"Prüfungen",en:"tests"})),r(Ii,"createNewTest",()=>d({de:"Prüfungen verwalten",en:"Manage tests"})),r(Ii,"testIsInState",t=>d({de:'Die Prüfung befindet sich im Zustand "'+t+`, daher kann noch keine Schülerliste zur Korrektur angezeigt werden. Klicken Sie auf das Zahnrad rechts oberhalb der Prüfungsliste, um zur Prüfungsverwaltung zu gelangen. Dort können Sie den Zustand der Prüfung ändern.`,en:'This test is in state "'+t+`, therefore a list of participating students cannot be displayed yet. Click on the cogwheel right above this list of tests to go to test administration. There you can manage each tests state.`})),r(Ii,"noFile",()=>d({de:"Keine Datei vorhanden",en:"No file"}));class Mn{}r(Mn,"createFolderTopmostLevel",()=>d({de:"Neuen Ordner auf oberster Ebene anlegen",en:"Create folder at topmost level"})),r(Mn,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(Mn,"newFolder",()=>d({de:"Neuer Ordner",en:"New Folder"})),r(Mn,"collapseAllFoders",()=>d({de:"Alle Ordner zusammenfalten",en:"Collapse all folders"})),r(Mn,"rename",()=>d({de:"Umbenennen",en:"Rename"})),r(Mn,"createNewFolderBelow",t=>d({de:"Neuen Unterordner anlegen (unterhalb '"+t+"')...",en:"Create new folder (below "+t+"')..."})),r(Mn,"sureDelete",()=>d({de:"Ich bin mir sicher: löschen!",en:"I'm sure: delete!"})),r(Mn,"cannotDeleteNonEmptyFolder",()=>d({de:"Dieser Ordner kann nicht gelöscht werden, da er nicht leer ist.",en:"Can't delete folder as it is not empty."}));class di{}r(di,"distributeWorkspaceToIndividualStudents",()=>d({de:"Austeilen eines Workspace an einzelne Schüler/-innen",en:"Distribute workspace to individual students"})),r(di,"workspace",()=>d({de:"Workspace",en:"Workspace"})),r(di,"filterList",()=>d({de:"Liste filtern",en:"Filter list"})),r(di,"selectMultiple",()=>d({de:"(Mehrfachauswahl ist durch Halten der Shift- oder Strg-/Cmd-Taste möglich.)",en:"(Select multiple students by holding Shift or Ctrl/Cmd key.)"})),r(di,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(di,"distribute",()=>d({de:"Austeilen",en:"Distribute"})),r(di,"studentsSelected",()=>d({de:"Schüler/-in/nen selektiert",en:"student(s) selected"})),r(di,"workspaceDistributed",(t,e,i)=>d({de:`Der Workspace ${t} wurde an ${e} Schüler/innen ausgeteilt. Er wird in maximal ${i} s bei jedem Schüler ankommen.`,en:`Workspace ${t} has been distributed to ${e} students. It will be there in max ${i} s.`}));class Rt{}r(Rt,"reportBug",()=>d({de:"Fehler melden",en:"Report bug"})),r(Rt,"bugReport",()=>d({de:"Beschreibung des Fehlers",en:"Bug report"})),r(Rt,"sendCopyOfWorkspace",()=>d({de:"Der Fehlermeldung eine Kopie des aktuell offenen Workspaces beifügen",en:"Send copy of workspace"})),r(Rt,"email",()=>d({de:"E-Mail-Adresse (für Rückfragen, optional)",en:"Mail (optional)"})),r(Rt,"firstName",()=>d({de:"Rufname (für Rückfragen, optional)",en:"First name (optional)"})),r(Rt,"lastName",()=>d({de:"Familienname (für Rückfragen, optional)",en:"Last name (optional)"})),r(Rt,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(Rt,"send",()=>d({de:"Senden",en:"Send"})),r(Rt,"thanks",()=>d({de:`Danke für die Fehlermeldung! Der Fehler wurde erfolgreich übermittelt.`,en:"Thank you!"}));class Pr{}r(Pr,"speedControl",()=>d({de:"Geschwindigkeitsregler",en:"Speed control"})),r(Pr,"stepsPerSecond",()=>d({de:"Schritte/s",en:"steps/s"})),r(Pr,"maximumSpeed",()=>d({de:"Maximale Geschwindigkeit",en:"Maximum speed"})),r(Pr,"millions",()=>d({de:"Millionen",en:"million"}));class gt{}r(gt,"changePassword",()=>d({de:"Passwort ändern",en:"Change password"})),r(gt,"changePasswordDescription",()=>d({de:"Bitte geben Sie Ihr bisheriges Passwort und darunter zweimal Ihr neues Passwort ein.
Das Passwort muss mindestens 8 Zeichen lang sein und sowohl Buchstaben als auch Zahlen oder Sonderzeichen enthalten.",en:"Please input your old password and your new one (two times).
Your password has to be at least 8 charachters long and must contain letters, digits and special chars."})),r(gt,"oldPassword",()=>d({de:"Altes Passwort",en:"Old password"})),r(gt,"newPassword",()=>d({de:"Neues Passwort",en:"New password"})),r(gt,"repeatNewPassword",()=>d({de:"Neues Passwort wiederholen",en:"Repeat new password"})),r(gt,"pleaseWait",()=>d({de:"Bitte warten...",en:"Please wait..."})),r(gt,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(gt,"ok",()=>d({de:"OK",en:"OK"})),r(gt,"passwordsDontMatch",()=>d({de:"Die zwei eingegebenen neuen Passwörter stimmen nicht überein.",en:"New passwords don't match."})),r(gt,"settingPasswordSuccessful",()=>d({de:"Das Passwort wurde erfolgreich geändert.",en:"Setting new password was successful."}));class fn{}r(fn,"fullWidth",()=>d({de:"Editor in voller Breite",en:"Expand editor to full width"})),r(fn,"defaultWidth",()=>d({de:"Editor in normaler Breite",en:"Shrink editor to default width"})),r(fn,"presentation",()=>d({de:"Präsentation (Beamer)",en:"Presentation (Beamer)"})),r(fn,"monitor",()=>d({de:"Monitor",en:"Monitor"}));class us{}r(us,"workspaceSettings",t=>d({de:"Einstellungen zum Workspace "+t,en:"Settings for workspace "+t})),r(us,"usedLibraries",()=>d({de:"A. Verwendete Bibliotheken",en:"A. Used libraries"})),r(us,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(us,"OK",()=>d({de:"OK",en:"OK"}));class dt{}r(dt,"caption",()=>d({de:"Überschrift",en:"Caption"})),r(dt,"newElement",()=>d({de:"Neues Element anlegen...",en:"Create new element..."})),r(dt,"newFolder",t=>d({de:"Neuen Ordner anlegen (unterhalb "+t+")",en:"Create new folder (as subfolder of "+t+")..."})),r(dt,"rename",()=>d({de:"Umbenennen",en:"Rename"})),r(dt,"delete",()=>d({de:"Löschen",en:"Delete"})),r(dt,"confirmDelete",()=>d({de:"Wirklich löschen?",en:"Are you sure to delete this elements/folders?"})),r(dt,"addElements",()=>d({de:"Elemente hinzufügen",en:"Add elements"})),r(dt,"addFolder",()=>d({de:"Ordner hinzufügen (auf oberster Ebene)",en:"Add folder (at root level)"})),r(dt,"collapseAll",()=>d({de:"Alle Ordner zusammenfalten",en:"Collapse all folders"})),r(dt,"elementsFolders",()=>d({de:"Elemente/Ordner",en:"elements/folders"}));class Zl{constructor(t,e,i,n,s,a,l=!1,h=!1){r(this,"_hasFocus",!1);r(this,"_isRootNode",!1);r(this,"contextmenuHandler");r(this,"_isSelected",!1);r(this,"_readOnly",!1);r(this,"children",[]);r(this,"parent");r(this,"childrenDiv");r(this,"nodeWithChildrenDiv");r(this,"dragAndDropDestinationDiv");r(this,"dropzoneDiv");r(this,"nodeLineDiv");r(this,"marginLeftDiv");r(this,"expandCollapseDiv");r(this,"iconDiv");r(this,"captionDiv");r(this,"rightPartOfCaptionDiv");r(this,"buttonsDiv");r(this,"alwaysVisibleButtonsDiv");r(this,"buttons",[]);r(this,"expandCollapseComponent");r(this,"childrenLineDiv");r(this,"tooltip");r(this,"_iconClass");r(this,"_onClickHandler");r(this,"_iconOnClickHandler");r(this,"_onExpandListener",[]);this._treeview=t,this._isFolder=e,this._caption=i,this._externalObject=s,this._parentKey=a,this._renderCaptionAsHtml=l,this._isRootNode=h;let c=this._treeview.config.parentKeyExtractor;typeof this._parentKey>"u"&&c&&this._externalObject&&(this._parentKey=c(s)),t.addNodeInternal(this),this.render(),this.iconClass=n}get hasFocus(){return this._hasFocus}setFocus(t){t&&this.treeview.unfocusAllNodes(),this._hasFocus=t,this.nodeLineDiv&&this.nodeLineDiv.classList.toggle("jo_treeview_focus",t)}get isSelected(){return this._isSelected}setSelected(t){this._isSelected=t,this.nodeLineDiv&&this.nodeLineDiv.classList.toggle("jo_treeview_selected",t)}get readOnly(){return this._treeview.config.readOnlyExtractor&&this._externalObject?this._treeview.config.readOnlyExtractor(this._externalObject):this._readOnly?!0:this.isRootNode()?!1:this.parent?this.parent.readOnly:!1}set readOnly(t){this._readOnly=t}scrollIntoView(){let t=this.parent;for(;t;)t.expandCollapseComponent.setState("expanded"),t=t.parent;this.getMainDiv().scrollIntoView({behavior:"instant",block:"center"})}get parentKey(){return this._parentKey}get ownKey(){return this._externalObject?this._treeview.config.keyExtractor(this._externalObject):null}set onClickHandler(t){this._onClickHandler=t}set onIconClicked(t){this._iconOnClickHandler=t,this.iconDiv.classList.add("jo_iconButton")}set renderCaptionAsHtml(t){this._renderCaptionAsHtml=t}findAndCorrectParent(){var e;let t=this.treeview.findParent(this);this.parent!=t&&((e=this.parent)==null||e.remove(this),this.parent=t,t==null||t.add(this),this.adjustLeftMarginToDepth())}getMainDiv(){return this.nodeWithChildrenDiv}getParent(){return this.parent}render(){this.nodeWithChildrenDiv||this.buildHtmlScaffolding(),!this.parent&&!this.isRootNode()&&this.findAndCorrectParent(),this.isRootNode()&&(this.treeview.getNodeDiv().appendChild(this.nodeWithChildrenDiv),this.nodeWithChildrenDiv.style.flex="1"),this.tooltip&&(this.nodeLineDiv.title=this.tooltip),!this.isRootNode()&&(this._renderCaptionAsHtml?(this.captionDiv.innerHTML=this.caption,this.captionDiv.classList.toggle("jo_treeview_caption_bold",!1)):(this.captionDiv.textContent=this.caption,this.captionDiv.classList.toggle("jo_treeview_caption_bold",this.isFolder)),this.adjustLeftMarginToDepth())}get externalObject(){return this._externalObject}set externalObject(t){this._externalObject=t}get iconClass(){return this._iconClass}set iconClass(t){this._iconClass!=t&&this.iconDiv&&(this._iconClass&&this.iconDiv.classList.remove(this._iconClass),this.iconDiv.classList.add(t)),this._iconClass=t}set iconTooltip(t){this.iconDiv.title=t}get caption(){return this._caption}set caption(t){this._caption=t,this._renderCaptionAsHtml?this.captionDiv.innerHTML=t:this.captionDiv.textContent=t}get isFolder(){return this._isFolder}set isFolder(t){this._isFolder=t,t?this.expandCollapseComponent.show():this.expandCollapseComponent.hide()}get treeview(){return this._treeview}set treeview(t){this._treeview=t}isRootNode(){return this._isRootNode}buildHtmlScaffolding(){this.nodeWithChildrenDiv=R.makeDiv(void 0,"jo_treeviewNodeWithChildren"),this.isFolder&&(this.dropzoneDiv=R.makeDiv(this.nodeWithChildrenDiv,this._isFolder?"jo_treeviewNode_dropzone":"")),this.dragAndDropDestinationDiv=R.makeDiv(this.nodeWithChildrenDiv,"jo_treeviewNode_dragAndDropDestinationLine"),this.dragAndDropDestinationDiv.style.display="none",this.isRootNode()||(this.nodeLineDiv=R.makeDiv(this.nodeWithChildrenDiv,"jo_treeviewNode"),this.marginLeftDiv=R.makeDiv(this.nodeLineDiv,"jo_treeviewNode_marginLeft"),this.expandCollapseDiv=R.makeDiv(this.nodeLineDiv,"jo_treeviewNode_expandCollapse"),this.iconDiv=R.makeDiv(this.nodeLineDiv,"jo_treeviewNode_icon"),this.iconDiv.onclick=t=>{this._iconOnClickHandler&&(this._iconOnClickHandler(this.externalObject),t.stopPropagation())},this.captionDiv=R.makeDiv(this.nodeLineDiv,"jo_treeviewNode_caption"),this.rightPartOfCaptionDiv=R.makeDiv(this.nodeLineDiv,"jo_treeviewNode_errors"),this.buttonsDiv=R.makeDiv(this.nodeLineDiv,"jo_treeviewNode_buttons"),this.alwaysVisibleButtonsDiv=R.makeDiv(this.nodeLineDiv,"jo_treeviewNode_buttons","jo_treeviewNode_buttons_always_visible"),this.nodeLineDiv.onpointerup=t=>{if(this.treeview.startStopDragDrop(!1),this.treeview.removeDragGhost(),t.button!=2&&this.treeview.config.withSelection)if(t.stopPropagation(),(t.shiftKey||t.ctrlKey)&&this.treeview.config.selectMultiple&&this.treeview.getCurrentlySelectedNodes().length>0)t.shiftKey?this.treeview.expandSelectionTo(this):this.hasFocus||(this.isSelected?this.treeview.removeFromSelection(this):this.treeview.addToSelection(this));else{if(this.treeview.unselectAllNodes(!0),this.setSelected(!0),this.treeview.addToSelection(this),this.setFocus(!0),this.treeview.setLastSelectedElement(this),this.isFolder&&this.expandCollapseComponent.toggleState(),this.treeview.config.selectWholeFolders&&this.isFolder)for(let e of this.getOrderedNodeListRecursively())e.setSelected(!0),this.treeview.addToSelection(e);this._onClickHandler&&this._onClickHandler(this._externalObject),this.treeview.nodeClickedCallback&&this.treeview.nodeClickedCallback(this._externalObject)}}),this.childrenDiv=R.makeDiv(this.nodeWithChildrenDiv,"jo_treeviewChildren"),this.childrenLineDiv=R.makeDiv(this.childrenDiv,"jo_treeviewChildrenLineDiv"),this.expandCollapseComponent=new Ul(this.expandCollapseDiv,t=>{t=="expanded"&&this._onExpandListener.slice().forEach(e=>{e.listener(t),e.once&&this._onExpandListener.splice(this._onExpandListener.indexOf(e),1)}),this.toggleChildrenDiv(t)},"expanded"),this.isRootNode()||(this.captionDiv.onpointerup=()=>{}),this._isFolder||this.expandCollapseComponent.hide(),this.treeview.config.withDeleteButtons&&!this.isRootNode()&&!this.readOnly&&this.addIconButton("img_delete",(t,e,i)=>{let n=async()=>{this.treeview.deleteCallback?await this.treeview.deleteCallback(this.externalObject,this)&&this.treeview.removeNodeAndItsFolderContents(this):this.treeview.removeNodeAndItsFolderContents(this)};this._treeview.config.confirmDelete?Ln([{caption:Mn.cancel(),callback:()=>{}},{caption:Mn.sureDelete(),color:"#ff6060",callback:()=>{n()}}],i.pageX+2,i.pageY+2):n()},"Löschen"),this.adjustLeftMarginToDepth(),this.initDragAndDrop(),this.initContextMenu(),Ol()&&!this.isRootNode()&&this.addIconButton("img_ellipsis-dark",(t,e,i)=>{this.contextmenuHandler(i)},"Kontextmenü aufrufen",!0)}select(t=!0){this.treeview.unselectAllNodes(!0),this.setSelected(!0),this.treeview.addToSelection(this),t&&(this._onClickHandler&&this._onClickHandler(this._externalObject),this.treeview.nodeClickedCallback&&this.treeview.nodeClickedCallback(this._externalObject))}initContextMenu(){if(this.isRootNode())return;this.contextmenuHandler=i=>{let n=[];if(this.readOnly||(this.treeview.renameCallback!=null&&n.push({caption:dt.rename(),callback:()=>{this.renameNode()}}),Ol()&&n.push({caption:dt.delete(),callback:()=>{this.treeview.config.confirmDelete?confirm(dt.confirmDelete())&&this.treeview.removeNodeAndItsFolderContents(this):this.treeview.removeNodeAndItsFolderContents(this)}}),this.isFolder&&this.treeview.config.buttonAddFolders&&(n=n.concat([{caption:dt.newFolder(this.caption),callback:()=>{this._treeview.addNewNode(!0,this)}}]))),this.treeview.contextMenuProvider!=null)for(let s of this.treeview.contextMenuProvider(this._externalObject,this))n.push({caption:s.caption,callback:()=>{s.callback(this._externalObject,this)},color:s.color,subMenu:s.subMenu==null?void 0:s.subMenu.map(a=>({caption:a.caption,callback:()=>{a.callback(this._externalObject,this)},color:a.color}))});i.preventDefault(),i.stopPropagation(),n.length>0&&(this._treeview.contextMenu=Ln(n,i.pageX,i.pageY))},this.nodeLineDiv.addEventListener("contextmenu",i=>{this.contextmenuHandler(i)},!1);let t=0,e=0;Ol()&&(this.nodeLineDiv.addEventListener("touchstart",i=>{if(this._treeview.contextMenuTimer&&clearTimeout(this._treeview.contextMenuTimer),this._treeview.contextMenuTimer=void 0,i.touches.length>1)return;let n=i.touches[0];t=n.clientX,e=n.clientY,this._treeview.contextMenuTimer=setTimeout(()=>{let s={pageX:n.pageX,pageY:n.pageY,preventDefault:()=>{},stopPropagation:()=>{}};this.contextmenuHandler(s)},900)}),this.nodeLineDiv.addEventListener("touchend",i=>{this._treeview.contextMenuTimer&&clearTimeout(this._treeview.contextMenuTimer),this._treeview.contextMenuTimer=void 0}),this.nodeLineDiv.addEventListener("touchmove",i=>{let n=i.touches[0];(Math.abs(n.clientX-t)>10||Math.abs(n.clientY-e)>10)&&this._treeview.contextMenuTimer&&clearTimeout(this._treeview.contextMenuTimer)}))}renameNode(){am(this.captionDiv,void 0,async t=>{var e,i;if(t!=this._caption){if(this.treeview.renameCallback){let n=await this.treeview.renameCallback(this._externalObject,t,this);n.success?(this.caption=n.correctedName??t,this.treeview.config.comparator&&this.treeview.config.orderBy=="comparator"&&((e=this.parent)==null||e.sort())):this.caption=this._caption;return}this.caption=t,this.treeview.config.comparator&&this.treeview.config.orderBy=="comparator"&&((i=this.parent)==null||i.sort())}},{start:0,end:this._caption.length})}findNonFolderElementContainingPoint(t){let e=null;for(let i of this.children.filter(n=>!n.isFolder)){let n=i.nodeLineDiv.getBoundingClientRect();if(t>=n.top&&t<=n.top+n.height){e=i;break}}return e}getDragAndDropIndexForInsertKindAsElement(t,e){let n=this.nodeWithChildrenDiv.getBoundingClientRect().top;if(!this.isRootNode()){let a=this.nodeLineDiv.getBoundingClientRect();if(!this.isFolder&&e<=a.top+a.height/2)return{index:-1,insertPosY:a.top-n}}for(let a=0;a0&&(s=this.children[this.children.length-1].nodeWithChildrenDiv.getBoundingClientRect().bottom-n),{index:this.children.length,insertPosY:s}}containsNode(t){if(this==t)return!0;for(let e of this.children)if(e.containsNode(t))return!0;return!1}selectionContainsThisNode(){for(let t of this.treeview.getCurrentlySelectedNodes())if(t.containsNode(this))return!0;return!1}initDragAndDrop(){Ol(),this.treeview.config.isDragAndDropSource&&this.nodeWithChildrenDiv.setAttribute("draggable","true"),this.nodeWithChildrenDiv.ondragstart=t=>{var e;if(t.stopPropagation(),(e=this._treeview.contextMenu)==null||e.hide(),this.treeview.isSelected(this)||(this.treeview.unselectAllNodes(!0),this.treeview.addToSelection(this),this.setFocus(!0)),this.treeview.config.selectWholeFolders&&this.isFolder)for(let i of this.getOrderedNodeListRecursively())i.setSelected(!0),this.treeview.addToSelection(i);Zt.currentDragSource=this._treeview,t.dataTransfer&&(t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage(this.treeview.getDragGhost(),-10,10)),setTimeout(()=>{this.treeview.startStopDragDrop(!0)},100)},this.nodeWithChildrenDiv.ondragend=()=>{this.treeview.startStopDragDrop(!1),this.treeview.removeDragGhost()},(this.isFolder||this.isRootNode())&&(this.dropzoneDiv.ondragover=t=>{var i,n;(i=this._treeview.contextMenu)==null||i.hide();let e=this._treeview.getCurrentDragAndDropSource();if(e){if(t.dataTransfer)if(e){let s=e.defaultDragKind;t.shiftKey&&e.dragKindWithShift&&(s=e.dragKindWithShift),t.ctrlKey&&e.dragKindWithCtrl&&(s=e.dragKindWithCtrl),t.dataTransfer.dropEffect=s}else return;switch(e.dropInsertKind){case"asElement":this.dragAndDropDestinationDiv.classList.toggle("jo_treeview_invald_dragdestination",!1);let s=this.getDragAndDropIndexForInsertKindAsElement(t.pageX,t.pageY);if(s.index<0){(n=this.parent)!=null&&n.dropzoneDiv.ondragover&&(this.parent.dropzoneDiv.ondragover(t),this.dropzoneDiv.ondragleave(t));return}if(this.dragAndDropDestinationDiv.style.top=s.insertPosY-1+"px",this.dragAndDropDestinationDiv.style.display="block",this.selectionContainsThisNode()&&e.treeview==this.treeview){this.dragAndDropDestinationDiv.classList.toggle("jo_treeview_invald_dragdestination",!0);return}this.nodeWithChildrenDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!0);break;case"intoElement":let l=this.findNonFolderElementContainingPoint(t.pageY);if(!l)return;for(let h of this.children)h.nodeLineDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",h==l);break}t.stopPropagation(),t.preventDefault()}},this.dropzoneDiv.ondragleave=t=>{if(t.target.classList.contains("jo_treeviewNode_caption")){t.stopPropagation();return}this.dragAndDropDestinationDiv.style.display="none",this.nodeWithChildrenDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!1);for(let e of this.children)e.nodeLineDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!1);t.stopPropagation()},this.dropzoneDiv.onpointerdown=()=>{this._treeview.startStopDragDrop(!1)},this.dropzoneDiv.ondrop=async t=>{var n,s;this.dragAndDropDestinationDiv.style.display="none",this.nodeWithChildrenDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!1);for(let a of this.children)a.nodeLineDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!1);t.preventDefault(),t.stopPropagation();let e=this._treeview.getCurrentDragAndDropSource();if(!e)return;let i=e.defaultDragKind;switch(t.shiftKey&&e.dragKindWithShift&&(i=e.dragKindWithShift),t.ctrlKey&&e.dragKindWithCtrl&&(i=e.dragKindWithCtrl),e.dropInsertKind){case"asElement":let a=this.getDragAndDropIndexForInsertKindAsElement(t.pageX,t.pageY).index;if(a<0&&(s=(n=this.parent)==null?void 0:n.dropzoneDiv)!=null&&s.ondrop){this.parent.dropzoneDiv.ondrop(t);return}this._treeview.notifyDropEvent(e.treeview,this,a,i);break;case"intoElement":let l=this.findNonFolderElementContainingPoint(t.pageY);l&&this._treeview.notifyDropEvent(e.treeview,l,0,i);break}})}insertNodes(t,e){this.isFolder&&(e.forEach(i=>{i.parent&&i.parent.remove(i),i.parent=this}),this.children.splice(t,0,...e),this.children.forEach(i=>{this.childrenDiv.appendChild(i.nodeWithChildrenDiv)}),this._treeview.adjustAllLeftMarginsToDepth(),this._treeview.config.orderBy=="comparator"&&this.sort())}async reorder(){let t=this._treeview.config.orderSetter;if(t){for(let e=0;e{e(this._externalObject,this,l)},i);return this.buttons.push(a),a}getIconButtonByTag(t){return this.buttons.find(e=>e.tag==t)}destroy(t=!0){var e;(e=this.parent)==null||e.remove(this),this.nodeWithChildrenDiv.remove(),t&&this.treeview.removeNodeAndItsFolderContents(this)}add(t){let e=this.treeview.config.comparator,i=this._treeview.config.orderExtractor;if(this._treeview.config.orderBy=="user-defined"&&i&&(e=(n,s)=>Math.sign(i(n)-i(s))),this.children.indexOf(t)<0){let n=this.children.length;if(e&&t.externalObject){for(;n>0&&e(t.externalObject,this.children[n-1].externalObject)<0;)n--;this.children.splice(n,0,t)}else this.children.push(t);if(this.childrenDiv&&t.getMainDiv())if(n=0&&this.children.splice(e,1),t.getMainDiv().remove()}sort(t){if(!t){let e=this._treeview.config.comparator;t=e;let i=this._treeview.config.orderExtractor;this._treeview.config.orderBy=="user-defined"&&i&&(t=(n,s)=>{let a=Math.sign(i(n)-i(s));return a==0&&this._treeview.config.comparator&&(a=e(n,s)),a})}t&&(this.children=this.children.sort((e,i)=>t(e.externalObject,i.externalObject)),R.clearAllButGivenClasses(this.childrenDiv,"jo_treeviewChildrenLineDiv"),this.children.forEach(e=>{this.childrenDiv.appendChild(e.getMainDiv()),e.sort(t)}))}getDepth(){return this.parent?this.parent.getDepth()+1:0}getOrderedNodeListRecursively(){let t=[];return this.children.forEach(e=>{t.push(e),t=t.concat(e.getOrderedNodeListRecursively())}),t}removeChildren(){this.children=[],R.clear(this.childrenDiv)}detach(){this.parent==this.treeview.rootNode&&this.nodeWithChildrenDiv.parentNode&&this.treeview.rootNode.childrenDiv.removeChild(this.nodeWithChildrenDiv);let t=this.parent.children.indexOf(this);t>=0&&this.parent.children.splice(t,1),this.treeview.nodes.splice(this.treeview.nodes.indexOf(this),1)}attachAfterDetaching(){var t;this.treeview.nodes.indexOf(this)<0&&(this.treeview.nodes.push(this),(t=this.parent)==null||t.add(this))}addExpandListener(t,e=!1){this._onExpandListener.push({listener:t,once:e})}removeAllExpandListeners(){this._onExpandListener=[]}setTooltip(t){this.tooltip=t,this.nodeLineDiv&&(this.nodeLineDiv.title=t)}getChildren(){return this.children}pulse(){this.nodeLineDiv.classList.toggle("jo_treeview_pulse",!0)}setCaptionColor(t){this.captionDiv.style.color=t}expand(){this.parent&&this.parent.expand(),this.expandCollapseComponent.setState("expanded")}collapse(){this.expandCollapseComponent.setState("collapsed")}}const Wd=class Wd{constructor(t,e){r(this,"treeviewAccordion");r(this,"parentElement");r(this,"contextMenuTimer");r(this,"contextMenu");r(this,"nodes",[]);r(this,"rootNode");r(this,"currentSelection",[]);r(this,"lastSelectedElement");r(this,"_lastExpandedHeight");r(this,"dragDropDestinations",[]);r(this,"dragDropSources",[]);r(this,"_outerDiv");r(this,"_nodeDiv");r(this,"captionLineDiv");r(this,"captionLineExpandCollapseDiv");r(this,"captionLineTextDiv");r(this,"captionLineButtonsLeftDiv");r(this,"captionLineButtonsRightDiv");r(this,"addElementsButton");r(this,"addFolderButton");r(this,"captionLineExpandCollapseComponent");r(this,"config");r(this,"_dropEventCallback");r(this,"_renameCallback");r(this,"_newNodeCallback");r(this,"_deleteCallback");r(this,"_contextMenuProvider");r(this,"_nodeClickedCallback");r(this,"_orderChangedCallback");t instanceof sm?(this.treeviewAccordion=t,this.parentElement=this.treeviewAccordion.mainDiv):this.parentElement=t,np(this.parentElement,this.parentElement,{forceListen:!1,dragThresholdPixels:15,isPressHoldMode:!0});let i={keyExtractor:n=>n,parentKeyExtractor:void 0,orderBy:"comparator",captionLine:{enabled:!0,text:dt.caption()},withFolders:!0,withDeleteButtons:!0,confirmDelete:!1,isDragAndDropSource:!0,contextMenu:{messageNewNode:dt.newElement(),messageNewFolder:n=>dt.newFolder(n),messageRename:dt.rename()},minHeight:150,initialExpandCollapseState:"expanded",buttonAddFolders:!0,buttonCollapseAll:!0,buttonAddElements:!0,buttonAddElementsCaption:dt.addElements(),withSelection:!0,selectMultiple:!0,selectWholeFolders:!1};this._lastExpandedHeight=(e==null?void 0:e.minHeight)??100,e?(e.contextMenu&&(e.contextMenu=Object.assign(i.contextMenu,e.contextMenu)),this.config=Object.assign(i,e)):this.config=i,this.buildHtmlScaffolding(),e!=null&&e.flexWeight&&this.setFlexWeight(e.flexWeight),this.rootNode=new Zl(this,!0,"Root",void 0,void 0,null,null,!0),this.treeviewAccordion&&this.treeviewAccordion.addTreeview(this)}get outerDiv(){return this._outerDiv}get nodeDiv(){return this._nodeDiv}getFixedHeight(){let t=this.captionLineDiv.getBoundingClientRect().height;return t==0&&(t=20),t}getCurrentVariableHeight(){return this.isCollapsed?0:this._outerDiv.getBoundingClientRect().height-this.getFixedHeight()}getTargetVariableHeight(){return Math.max(this.config.minHeight,100,this._lastExpandedHeight-this.getFixedHeight(),this.getCurrentVariableHeight())}get dropEventCallback(){return this._dropEventCallback}set dropEventCallback(t){this._dropEventCallback=t}get renameCallback(){return this._renameCallback}set renameCallback(t){this._renameCallback=t}get newNodeCallback(){return this._newNodeCallback}set newNodeCallback(t){this._newNodeCallback=t}get deleteCallback(){return this._deleteCallback}set deleteCallback(t){this._deleteCallback=t}get contextMenuProvider(){return this._contextMenuProvider}set contextMenuProvider(t){this._contextMenuProvider=t}set nodeClickedCallback(t){this._nodeClickedCallback=t}get nodeClickedCallback(){return this._nodeClickedCallback}get orderChangedCallback(){return this._orderChangedCallback}set orderChangedCallback(t){this._orderChangedCallback=t}configureCaptionAsDropDestination(){this.captionLineDiv.ondragover=t=>{let e=this.getCurrentDragAndDropSource();if(e&&e.dropInsertKind!="intoElement"){if(t.dataTransfer)if(e){let i=e.defaultDragKind;t.shiftKey&&e.dragKindWithShift&&(i=e.dragKindWithShift),t.ctrlKey&&e.dragKindWithCtrl&&(i=e.dragKindWithCtrl),t.dataTransfer.dropEffect=i}else return;this.captionLineDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!0),this.nodeDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!0),t.stopPropagation(),t.preventDefault()}},this.captionLineDiv.ondragleave=t=>{this.captionLineDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!1),this.nodeDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!1)},this.captionLineDiv.ondrop=t=>{this.captionLineDiv.ondragleave(t),t.preventDefault(),t.stopPropagation();let e=this.getCurrentDragAndDropSource();if(!e)return;let i=e.defaultDragKind;t.shiftKey&&e.dragKindWithShift&&(i=e.dragKindWithShift),t.ctrlKey&&e.dragKindWithCtrl&&(i=e.dragKindWithCtrl),e.dropInsertKind!="intoElement"&&this.notifyDropEvent(e.treeview,this.rootNode,0,i)}}setFlexWeight(t){this._outerDiv.style.flexGrow=t,this.config.minHeight>0&&(this._outerDiv.style.flexBasis=this.config.minHeight+"px")}addDragDropSource(t){this.dragDropSources.push(t),t.treeview.dragDropDestinations.push(this),this.dragDropSources.length==1&&this.configureCaptionAsDropDestination()}buildHtmlScaffolding(){this._outerDiv=R.makeDiv(this.parentElement,"jo_treeview_outer"),this.buildCaption(),this._nodeDiv=R.makeDiv(this._outerDiv,"jo_treeview_nodediv","jo_scrollable"),this.config.initialExpandCollapseState=="collapsed"&&this.captionLineExpandCollapseComponent.setState("collapsed",!1)}getNodeDiv(){return this._nodeDiv}buildCaption(){this.captionLineDiv=R.makeDiv(this._outerDiv,"jo_treeview_caption"),this.captionLineExpandCollapseDiv=R.makeDiv(this.captionLineDiv,"jo_treevew_caption_expandcollapse"),this.captionLineButtonsLeftDiv=R.makeDiv(this.captionLineDiv,"jo_treeview_caption_buttons"),this.captionLineTextDiv=R.makeDiv(this.captionLineDiv,"jo_treeview_caption_text"),this.captionLineButtonsRightDiv=R.makeDiv(this.captionLineDiv,"jo_treeview_caption_buttons"),this.captionLineDiv.style.display=this.config.captionLine.enabled?"flex":"none",this.captionLineTextDiv.textContent=this.config.captionLine.text||"",this.config.captionLine.element&&this.captionLineTextDiv.appendChild(this.config.captionLine.element),this.captionLineExpandCollapseComponent=new Ul(this.captionLineExpandCollapseDiv,t=>{this.isCollapsed()?(this._lastExpandedHeight=this._outerDiv.getBoundingClientRect().height,this.nodeDiv.style.display="none"):this.nodeDiv.style.display="",this.treeviewAccordion&&this.treeviewAccordion.onResize(!1)},"expanded"),this.config.buttonAddFolders&&(this.addFolderButton=this.captionLineAddIconButton("img_add-folder-dark","right",()=>{this.addNewNode(!0)},dt.addFolder())),this.config.buttonAddElements&&(this.addElementsButton=this.captionLineAddIconButton("img_add-dark","right",()=>{this.addNewNode(!1)},this.config.buttonAddElementsCaption)),this.config.buttonAddFolders&&this.config.buttonCollapseAll&&this.captionLineAddIconButton("img_collapse-all-dark","left",()=>{this.collapseAllButRootnode()},dt.collapseAll())}addNewNode(t,e){if(!e&&!t){let n=this.getCurrentlySelectedNodes();if(n.length>0){let s=n[0];for(;!s.isFolder&&s.getParent();)s=s.getParent();s.isFolder&&(e=s)}}let i=this.addNode(t,"",t?void 0:this.config.defaultIconClass,null,e==null?void 0:e.ownKey);am(i.captionDiv,i.captionDiv,async n=>{if(i.caption=n,this.newNodeCallback){let s=await this.newNodeCallback(n,i);s==null?this.removeNodeAndItsFolderContents(i):(i.externalObject=s,this.selectNodeAndSetFocus(i,!1),e&&e.sort(),i.scrollIntoView())}})}captionLineAddIconButton(t,e,i,n){switch(e){case"left":return new ro(this.captionLineButtonsLeftDiv,t,i,n);case"right":return new ro(this.captionLineButtonsRightDiv,t,i,n)}}captionLineAddElementToButtonDiv(t,e){switch(e){case"left":this.captionLineButtonsLeftDiv.prepend(t);break;case"right":this.captionLineButtonsRightDiv.prepend(t);break}}setCaption(t){this.captionLineTextDiv.textContent=t}addNode(t,e,i,n,s){let a=new Zl(this,t,e,i,n,s);return this.adjustFoldersByExternalObjectRelations(),a}addNodeInternal(t){this.nodes.indexOf(t)<0&&this.nodes.push(t)}findParent(t){let e=t.parentKey==null?this.rootNode:this.nodes.find(i=>i.ownKey==t.parentKey);if(e==t&&(e=null),e!=null){if(e.isRootNode())return e;let i=e;do i=i.getParent();while(i!=null&&i!=e&&i!=t&&!i.isRootNode());i!=null&&!i.isRootNode()&&(e=void 0)}return e??this.rootNode}unfocusAllNodes(){this.nodes.forEach(t=>t.setFocus(!1))}selectElement(t,e){if(!t){this.unselectAllNodes(!0);return}let i=this.findNodeByElement(t);this.selectNodeAndSetFocus(i,e)}selectNodeAndSetFocus(t,e){t&&(t.select(e),t.setFocus(!0),this.lastSelectedElement=t,t.expand(),(typeof this.config.scrollToSelectedElement===void 0||this.config.scrollToSelectedElement)&&t.scrollIntoView())}unselectAllNodes(t){this.nodes.forEach(e=>{e.setSelected(!1)}),this.currentSelection=[]}addToSelection(t){this.currentSelection.indexOf(t)<0&&this.currentSelection.push(t),t.setSelected(!0)}removeFromSelection(t){let e=this.currentSelection.indexOf(t);e>=0&&(this.currentSelection.splice(e,1),t.setSelected(!1))}setLastSelectedElement(t){this.lastSelectedElement=t}getOrderedNodeListRecursively(){return this.rootNode.getOrderedNodeListRecursively()}expandSelectionTo(t){if(this.lastSelectedElement){let e=this.rootNode.getOrderedNodeListRecursively(),i=e.indexOf(this.lastSelectedElement),n=e.indexOf(t);if(i>=0&&n>=0){if(n=0&&this.nodes.splice(e,1),t.destroy(!1)}removeElementAndItsFolderContents(t){let e=this.findNodeByElement(t);e&&this.removeNodeAndItsFolderContents(e)}findNodeByElement(t){return this.nodes.find(e=>e.externalObject==t)}setIconClassForElement(t,e){let i=this.findNodeByElement(t);i&&(i.iconClass=e)}getCurrentlySelectedNodes(){return this.currentSelection}getOrderedListOfCurrentlySelectedNodes(){let t=[];for(let e of this.getOrderedNodeListRecursively())this.currentSelection.indexOf(e)>=0&&t.push(e);return t}startStopDragDrop(t){this._outerDiv.classList.toggle("jo_dragdrop",t);for(let e of this.dragDropDestinations)e._outerDiv.classList.toggle("jo_dragdrop",t);t||this.nodes.forEach(e=>e.stopDragAndDrop())}getDragGhost(){let t=document.createElement("div");return t.classList.add("jo_treeview_drag_ghost"),t.style.top="-10000px",this.currentSelection.length==1?t.textContent=this.currentSelection[0].caption:t.textContent=this.currentSelection.length+" "+dt.elementsFolders(),document.body.appendChild(t),t}removeDragGhost(){let t=document.getElementsByClassName("jo_treeview_drag_ghost");for(let e=0;e=0}isCollapsed(){return this.captionLineExpandCollapseComponent.state=="collapsed"}getCaptionHeight(){return this.captionLineDiv.getBoundingClientRect().height}clear(){this.nodes=[this.rootNode],this.rootNode.removeChildren()}detachAllNodes(){for(let t of this.nodes.slice())t!==this.rootNode&&t.detach()}sort(){var t;(t=this.rootNode)==null||t.sort()}adjustFoldersByExternalObjectRelations(){let t=this.nodes.filter(s=>!s.isRootNode()&&s.parentKey!=null&&s.getParent()==this.rootNode);if(t.length==0)return;let e=new Map;for(let s of this.rootNode.getOrderedNodeListRecursively())s.isFolder&&t.indexOf(s)<0&&e.set(s.ownKey,s);let i=[],n=-1;for(;i.length>n;){n=i.length;for(let s of t.slice())e.get(s.parentKey)!=null&&(i.push(s),s.isFolder&&e.set(s.ownKey,s),t.splice(t.indexOf(s),1))}for(let s of i)s.findAndCorrectParent();this.adjustAllLeftMarginsToDepth()}adjustAllLeftMarginsToDepth(){for(let t of this.nodes)t.adjustLeftMarginToDepth()}setVisible(t){this._outerDiv.style.display=t?"":"none"}size(t){return t?this.nodes.length:this.nodes.filter(e=>!e.isFolder).length}notifyDropEvent(t,e,i,n){this.dropEventCallback&&this.dropEventCallback(t,e,i,n)}getCurrentDragAndDropSource(){return this.dragDropSources.find(t=>t.treeview==Wd.currentDragSource)}hasDragAndDropSources(){return this.dragDropSources.length>0}collapseAllButRootnode(){for(let t of this.nodes.filter(e=>!e.isRootNode()))t.expandCollapseComponent.setState("collapsed")}getAllExternalObjects(){return this.nodes.filter(t=>!t.isRootNode()&&t.externalObject).map(t=>t.externalObject)}reduceNodesToMove(t){let e=t.slice();for(let i of t)i.isFolder&&(e=e.filter(n=>n.getParent()!=i));return e}};r(Wd,"currentDragSource",null);let Zt=Wd;class hi{}r(hi,"watch",()=>d({de:"BEOBACHTEN",en:"WATCH"})),r(hi,"files",()=>d({de:"DATEIEN",en:"FILES"})),r(hi,"threads",()=>d({de:"THREADS",en:"THREADS"})),r(hi,"callStack",()=>d({de:"CALL STACK",en:"CALL STACK"})),r(hi,"variables",()=>d({de:"VARIABLEN",en:"VARIABLES"})),r(hi,"more",()=>d({de:"weitere ...",en:"more ..."})),r(hi,"object",()=>d({de:"Objekt",en:"object"})),r(hi,"mainProgram",()=>d({de:"Hauptprogramm",en:"main program"}));var B=(p=>(p[p.new=0]="new",p[p.running=1]="running",p[p.stoppedAtBreakpoint=2]="stoppedAtBreakpoint",p[p.runnable=3]="runnable",p[p.waiting=4]="waiting",p[p.timedWaiting=5]="timedWaiting",p[p.terminated=6]="terminated",p[p.terminatedWithException=7]="terminatedWithException",p[p.immediatelyAfterReplStatement=8]="immediatelyAfterReplStatement",p[p.changeSpeedRequested=9]="changeSpeedRequested",p))(B||{});class Ph{constructor(t){r(this,"program");r(this,"nextStep");r(this,"range");r(this,"symbolTable");var e,i;this.programState=t,this.program=t.program,this.symbolTable=this.program.symbolTable,this.nextStep=t.currentStepList[t.stepIndex],this.nextStep&&(this.range=this.nextStep.range),this.symbolTable&&this.nextStep&&((e=this.nextStep.range)!=null&&e.startLineNumber)&&((i=this.nextStep.range)!=null&&i.startColumn)&&(this.symbolTable=this.symbolTable.findSymbolTableAtPosition({lineNumber:this.nextStep.range.startLineNumber,column:this.nextStep.range.startColumn}))}getCaption(){let t=this.program.methodIdentifierWithClass;return t==".main"&&(t=hi.mainProgram()),this.range&&this.range.startLineNumber&&(t+=`:${this.range.startLineNumber}`),t=t.replace(/\d*\./g,"."),t=t.replaceAll(/\$/g,""),t}}class Sf{constructor(t){this.term=t}}class Ri{static quickArrayOutput(t,e,i,n){let s={text:""};return this.quickArrayOutputHelper(t,s,e,i,n),s.text}static quickArrayOutputHelper(t,e,i,n,s){let a=0;for(e.text+="[";a",">"),g&&(c=`${c}`)}e.text+=c}a!l.hiddenWhenDebugging),a=0;for(;a{let s=new Sf(i);return n.renderCaptionAsHtml=!0,this.lastRepl&&this.updateNode(n,s,this.lastRepl),s},t.deleteCallback=async i=>!0}update(t){let e=this.debugger_.main.getRepl();if(e||(e=this.lastRepl),!!e){this.lastRepl=e;for(let i of this.treeview.nodes){let n=i.externalObject;n&&this.updateNode(i,n,e)}}}updateNode(t,e,i){let n="---",s=i.executeSynchronously(e.term);s&&s.text!="---"&&(n=Ri.renderValue(s,20)),H.colorize(e.term+" = "+n,"myJava",{tabSize:3}).then(a=>{t.caption=a})}}class rr{constructor(t,e){r(this,"lineNumber");r(this,"column");this.lineNumber=t,this.column=e}with(t=this.lineNumber,e=this.column){return t===this.lineNumber&&e===this.column?this:new rr(t,e)}delta(t=0,e=0){return this.with(this.lineNumber+t,this.column+e)}equals(t){return rr.equals(this,t)}static equals(t,e){return!t&&!e?!0:!!t&&!!e&&t.lineNumber===e.lineNumber&&t.column===e.column}isBefore(t){return rr.isBefore(this,t)}static isBefore(t,e){return t.lineNumberi||t===i&&e>n?(this.startLineNumber=i,this.startColumn=n,this.endLineNumber=t,this.endColumn=e):(this.startLineNumber=t,this.startColumn=e,this.endLineNumber=i,this.endColumn=n)}isEmpty(){return ee.isEmpty(this)}static isEmpty(t){return t.startLineNumber===t.endLineNumber&&t.startColumn===t.endColumn}containsPosition(t){return ee.containsPosition(this,t)}static containsPosition(t,e){return!(e.lineNumbert.endLineNumber||e.lineNumber===t.startLineNumber&&e.columnt.endColumn)}static strictContainsPosition(t,e){return!(e.lineNumbert.endLineNumber||e.lineNumber===t.startLineNumber&&e.column<=t.startColumn||e.lineNumber===t.endLineNumber&&e.column>=t.endColumn)}containsRange(t){return ee.containsRange(this,t)}static containsRange(t,e){return!(e.startLineNumbert.endLineNumber||e.endLineNumber>t.endLineNumber||e.startLineNumber===t.startLineNumber&&e.startColumnt.endColumn)}strictContainsRange(t){return ee.strictContainsRange(this,t)}static strictContainsRange(t,e){return!(e.startLineNumbert.endLineNumber||e.endLineNumber>t.endLineNumber||e.startLineNumber===t.startLineNumber&&e.startColumn<=t.startColumn||e.endLineNumber===t.endLineNumber&&e.endColumn>=t.endColumn)}plusRange(t){return ee.plusRange(this,t)}static plusRange(t,e){let i,n,s,a;return e.startLineNumbert.endLineNumber?(s=e.endLineNumber,a=e.endColumn):e.endLineNumber===t.endLineNumber?(s=e.endLineNumber,a=Math.max(e.endColumn,t.endColumn)):(s=t.endLineNumber,a=t.endColumn),new ee(i,n,s,a)}intersectRanges(t){return ee.intersectRanges(this,t)}static intersectRanges(t,e){let i=t.startLineNumber,n=t.startColumn,s=t.endLineNumber,a=t.endColumn;const l=e.startLineNumber,h=e.startColumn,c=e.endLineNumber,u=e.endColumn;return ic?(s=c,a=u):s===c&&(a=Math.min(a,u)),i>s||i===s&&n>a?null:new ee(i,n,s,a)}equalsRange(t){return ee.equalsRange(this,t)}static equalsRange(t,e){return!t&&!e?!0:!!t&&!!e&&t.startLineNumber===e.startLineNumber&&t.startColumn===e.startColumn&&t.endLineNumber===e.endLineNumber&&t.endColumn===e.endColumn}getEndPosition(){return ee.getEndPosition(this)}static getEndPosition(t){return new rr(t.endLineNumber,t.endColumn)}getStartPosition(){return ee.getStartPosition(this)}static getStartPosition(t){return new rr(t.startLineNumber,t.startColumn)}toString(){return"["+this.startLineNumber+","+this.startColumn+" -> "+this.endLineNumber+","+this.endColumn+"]"}setEndPosition(t,e){return new ee(this.startLineNumber,this.startColumn,t,e)}setStartPosition(t,e){return new ee(t,e,this.endLineNumber,this.endColumn)}collapseToStart(){return ee.collapseToStart(this)}static collapseToStart(t){return new ee(t.startLineNumber,t.startColumn,t.startLineNumber,t.startColumn)}collapseToEnd(){return ee.collapseToEnd(this)}static collapseToEnd(t){return new ee(t.endLineNumber,t.endColumn,t.endLineNumber,t.endColumn)}delta(t){return new ee(this.startLineNumber+t,this.startColumn,this.endLineNumber+t,this.endColumn)}static fromPositions(t,e=t){return new ee(t.lineNumber,t.column,e.lineNumber,e.column)}static lift(t){return t?new ee(t.startLineNumber,t.startColumn,t.endLineNumber,t.endColumn):null}static isIRange(t){return t&&typeof t.startLineNumber=="number"&&typeof t.startColumn=="number"&&typeof t.endLineNumber=="number"&&typeof t.endColumn=="number"}static areIntersectingOrTouching(t,e){return!(t.endLineNumbert.startLineNumber}toJSON(){return this}}class ih{constructor(t,e,i){r(this,"documentation");r(this,"hiddenWhenDebugging");this.identifier=t,this.identifierRange=e,this.module=i}onStackframe(){return!1}getDocumentation(){if(this.documentation)return typeof this.documentation=="string"?this.documentation:this.documentation()}}class nh extends ih{constructor(){super(...arguments);r(this,"stackframePosition");r(this,"isFinal",!1)}onStackframe(){return!0}getValue(e,i){return e[i+this.stackframePosition]}}class Tf{constructor(t,e){r(this,"childTables",[]);r(this,"stackframe");r(this,"identifierToSymbolMap",new Map);r(this,"hiddenWhenDebugging");this.range=t,this.parent=e,e&&e.childTables.push(this)}addSymbol(t){this.identifierToSymbolMap.set(t.identifier,t)}findSymbolTableAtPosition(t){if(!ee.containsPosition(this.range,t))return;let e=this;for(let i of this.childTables){let n=i.findSymbolTableAtPosition(t);n&&(e=n)}return e}}class $f{constructor(t){r(this,"nextFreePosition",0);r(this,"numberOfThisObjects",0);r(this,"numberOfParameters",0);r(this,"numberOfLocalVariables",0);r(this,"numberOfReplLocalVariables",0);r(this,"positionToSymbolMap",{});this.nextFreePosition=t,this.numberOfThisObjects=t}addSymbol(t,e){switch(e){case"parameter":this.numberOfParameters++;break;case"localVariable":this.numberOfLocalVariables++;break}let i=this.nextFreePosition++;t.stackframePosition=i,this.positionToSymbolMap[i]=t}insertInvisibleParameter(){this.numberOfParameters++}insertInvisibleLocalVariableAndGetItsIndex(){let t=this.nextFreePosition++;return this.numberOfLocalVariables++,t}}class Ef extends ih{}class v{}r(v,"typeLeftOperandNotFound",()=>E({de:"Der Typ des linken Operanden kann nicht bestimmt werden.",en:"Couldn't compute type of left operand.",fr:"Le type de l'opérande gauche ne peut pas être déterminé."})),r(v,"typeRightOperandNotFound",()=>E({de:"Der Typ des rechten Operanden kann nicht bestimmt werden.",en:"Couldn't compute type of right operand.",fr:"Le type de l'opérande droite ne peut pas être déterminé."})),r(v,"operatorNotFeasibleForOperands",(t,e,i)=>E({de:"Der Operator "+t+" ist für die Typen "+e+" und "+i+" nicht geeignet.",en:"Operator "+t+" is not defined for operands of type "+e+" and "+i+".",fr:`L'opérateur ${t} n'est pas défini pour les opérandes de type ${e} et ${i}.`})),r(v,"rightSideOfInstanceofError",()=>E({de:"Rechts vom Operator instanceof muss eine Klasse/ein Interface/ein Enum-Typ stehen.",en:"Class/interface/enum-type expected on righthand side of operator instanceof.",fr:"Type classe/interface/enum attendu à droite de l'opérateur instanceof."})),r(v,"leftSideOfInstanceofError",()=>E({de:"Links vom Operator instanceof muss ein Objekt stehen.",en:"Object expected on righthand side of operator instanceof.",fr:"Objet attendu à gauche de l'opérateur instanceof."})),r(v,"cantAssignValueToTerm",()=>E({de:"Dem Term auf der linken Seite des Zuweisungsoperators kann nichts zugewiesen werden.",en:"Can't assign value to expression on left side of assignment operator.",fr:"Impossible d'affecter une valeur à l'expression à gauche de l'opérateur d'affectation."})),r(v,"cantCastRightSideToString",()=>E({de:"Der Term auf der rechten Seite des Zuweisungsoperators kann nicht in den Typ String umgewandelt werden.",en:"Can't cast expression on right side of assignment operator to type String.",fr:"Impossible de convertir l'expression à droite de l'opérateur d'affectation en type String."})),r(v,"leftOperatorNotFitForAttribute",t=>E({de:"Mit dem Attribut/der Variablen auf der linken Seite des Zuweisungsoperators kann die Berechnung "+t+" nicht durchgeführt werden.",en:"Field/variable on left side of operator "+t+" is not usable for this operation.",fr:`Le champ/la variable à gauche de l'opérateur ${t} ne peut pas être utilisé(e) pour cette opération.`})),r(v,"rightOperatorNotFitForAttribute",t=>E({de:"Mit dem Attribut/der Variablen auf der rechten Seite des Zuweisungsoperators kann die Berechnung "+t+" nicht durchgeführt werden.",en:"Field/variable on right side of operator "+t+" is not usable for this operation.",fr:`Le champ/la variable à droite de l'opérateur ${t} ne peut pas être utilisé(e) pour cette opération.`})),r(v,"cantUseOperatorForLeftRightTypes",t=>E({de:"Der Wert des Datentyps auf der rechten Seite des Operators "+t+" kann mit der Variablen/dem Attribut auf der linken Seite nicht verrechnet werden.",en:"Can't use operator "+t+" for types of given left/right side operands.",fr:`Impossible d'utiliser l'opérateur ${t} pour les types des opérandes gauche/droite donnés.`})),r(v,"cantCastType",(t,e)=>E({de:"Der Typ "+t+" kann nicht in den Typ "+e+" gecastet werden.",en:`Can't cast ${t} to ${e}.`,fr:`Impossible de convertir ${t} en ${e}.`})),r(v,"unneccessaryCast",()=>E({de:"Unnötiges Casten",en:"Unneccessary cast",fr:"Cast inutile"})),r(v,"leftExpressionHasNoType",t=>E({de:"Der Term auf der linken Seite des '"+t+"' - Operators hat keinen Datentyp. ",en:`Expression on left side of operator '${t}' has no type.`,fr:`L'expression à gauche de l'opérateur '${t}' n'a pas de type.`})),r(v,"rightExpressionHasNoType",t=>E({de:"Der Term auf der rechten Seite des '"+t+"' - Operators hat keinen Datentyp. ",en:`Expression on right side of operator '${t}' has no type.`,fr:`L'expression à droite de l'opérateur '${t}' n'a pas de type.`})),r(v,"cantGetTypeOfExpression",()=>E({de:"Der Typ des Terms kann nicht bestimmt werden.",en:"Can't compute type of this expression.",fr:"Impossible de déterminer le type de cette expression."})),r(v,"operatorNotUsableForOperands",(t,e)=>E({de:"Der Operator "+t+" ist nicht für den Operanden des Typs "+e+"geeignet.",en:`Operator ${t} is not usable for operands of type ${e}.`,fr:`L'opérateur ${t} ne peut pas être utilisé pour les opérandes de type ${e}.`})),r(v,"notOperatorNeedsBooleanOperands",t=>E({de:"Der Operator ! (not) ist nur für boolesche Operanden geeignet, nicht für Operanden des Typs "+t+".",en:`Operator ! (not) needs boolean operands, but given operands are of type ${t}.`,fr:`L'opérateur ! (not) nécessite des opérandes booléens, mais les opérandes donnés sont de type ${t}.`})),r(v,"plusPlusMinusMinusOnlyForLeftyOperands",t=>E({de:"Der Operator "+t+" ist nur für Variablen/Attribute geeignet, deren Wert verändert werden kann.",en:`Operator ${t} can only be used for fields/variables which are writable.`,fr:`L'opérateur ${t} ne peut être utilisé que pour les champs/variables qui sont modifiables.`})),r(v,"badOperandTypesForBinaryOperator",(t,e,i)=>E({de:"Der Operator "+t+" ist für Operanden der Typen "+e+" und "+i+" nicht definiert.",en:`Operator ${t} is not defined for operands of type ${e} and ${i}.`,fr:`L'opérateur ${t} n'est pas défini pour les opérandes de type ${e} et ${i}.`})),r(v,"interfaceOnlyDefaultMethodsHaveBody",()=>E({de:"In Interfaces können nur default-Methoden einen Methodenrumpf haben.",en:"In interfaces only default methods have a method body. ",fr:"Dans les interfaces, seules les méthodes par défaut peuvent avoir un corps de méthode."})),r(v,"enumConstructorsMustBePrivate",()=>E({de:"Konstruktoren von enums müssen die Sichtbarkeit private haben.",en:"Enum constructors must be private.",fr:"Les constructeurs d'enums doivent être privés."})),r(v,"interfaceFieldsMustBeStatic",()=>E({de:"Interfaces können nur statische konstante (final) Attribute besitzen.",en:"Interface fields must be static final.",fr:"Les champs d'interface doivent être statiques et finaux."})),r(v,"cantFindConstructor",()=>E({de:"Es konnte kein passender Konstruktor mit dieser Signatur gefunden werden.",en:"Cant find constructor.",fr:"Impossible de trouver un constructeur correspondant à cette signature."})),r(v,"cantInstantiateFromAbstractClass",()=>E({de:"Von einer abstrakten Klasse kann man keine Objekte instanzieren.",en:"You can't create objects of an abstract class.",fr:"Vous ne pouvez pas instancier d'objets à partir d'une classe abstraite."})),r(v,"cantInstantiateFromType",t=>E({de:`Vom Datentyp ${t} können keine Objekte instanziert werden.`,en:`You can't create objects of type ${t}.`,fr:`Vous ne pouvez pas instancier d'objets à partir de ce type ${t}.`})),r(v,"interfacesDontHaveConstructors",()=>E({de:"Interfaces haben keinen Konstruktor.",en:"Interfaces don't have construtctors.",fr:"Les interfaces n'ont pas de constructeurs."})),r(v,"methodImitatesConstructor",t=>E({de:"Die Methode "+t+" trägt denselben Bezeichner wie die Klasse, hat aber einen Rückgabewert und ist damit KEIN Konstruktor. Das ist irreführend.",en:"Method "+t+" has same identifier as class and an return type. Therefore it is no constructor. This is irritating.",fr:`La méthode ${t} a le même identifiant que la classe, mais elle a un type de retour. Ce n'est donc PAS un constructeur. C'est trompeur.`})),r(v,"abstractMethodsDontHaveMethodBodies",()=>E({de:"Eine abstrakte Methode kann keinen Methodenrumpf besitzen.",en:"Abstract methods don't have method bodies.",fr:"Les méthodes abstraites ne peuvent pas avoir de corps de méthode."})),r(v,"superCallInConstructorMissing",t=>E({de:`Da die Oberklasse ${t} keinen parameterlosen Konstruktor hat, muss in jedem Konstruktor einer Unterklasse gleich zu Beginn der Aufruf eines Konstruktors der Oberklasse erfolgen (super(...)).`,en:"",fr:`Puisque la super-classe ${t} n'a pas de constructeur sans paramètres, chaque constructeur d'une sous-classe doit commencer par un appel au constructeur de la super-classe (super(...)).`})),r(v,"lambdaFunctionHereNotPossible",()=>E({de:"Eine Lambda-Funktion darf nur an einer Stelle im Code stehen, an der ein functional interface (d.h. ein Interface mit genau einer Methode) erwartet wird.",en:"Lambda functions are only usable in places where a functional interface (that is: a interface with only one method) is expected.",fr:"Les fonctions lambda ne peuvent être utilisées qu'aux endroits où une interface fonctionnelle (c'est-à-dire une interface avec une seule méthode) est attendue."})),r(v,"lambdaFunctionWrongParameterCount",(t,e,i)=>E({de:`Die Anzahl der Parameter der Lambda-Funktion (${t}) stimmt nicht mit der des functional interfaces ${i} (${e}) überein.`,en:`Number of parameters of lambda function (${t}) doesn't match number of parameters of functional interfaces ${i} (${e}).`,fr:`Le nombre de paramètres de la fonction lambda (${t}) ne correspond pas à celui de l'interface fonctionnelle ${i} (${e}).`})),r(v,"lambdaFunctionWrongParameterType",(t,e)=>E({de:`Der Datentyp des Parameters ${t} passt nicht zum erwarteten Datentyp ${e}.`,en:`Parameter ${t} has wrong type. Expected type: ${e}.`,fr:`Le paramètre ${t} a un type incorrect. Type attendu : ${e}.`})),r(v,"arrayLiteralTypeUnknown",()=>E({de:`Der erwartete Datentyp der Array-Elemente kann nicht ermittelt werden. Tipp: Versuchen Sie es mit der Syntax 'new int[]{1, 2, 3}'`,en:`Can't figure out exptected type of array elements. Hint: Try syntax 'new int[]{1, 2, 3}'.`,fr:`Impossible de déterminer le type attendu des éléments du tableau. Indice : Essayez la syntaxe 'new int[]{1, 2, 3}'.`})),r(v,"missingProgram",()=>E({de:"//Kein Programm vorhanden.",en:"//Missing program.",fr:"//Programme manquant."})),r(v,"variableNotInitialized",t=>E({de:"Die Variable/der Parameter "+t+" ist vor diesem lesenden Zugriff noch nicht initialisiert worden.",en:`Variable/field ${t} had not been initialized before first read access.`,fr:`La variable/le champ ${t} n'a pas été initialisé(e) avant le premier accès en lecture.`})),r(v,"noReadAccessForVariable",t=>E({de:"Auf die Variable/den Parameter "+t+" wird nie lesend zugegriffen.",en:`No read access on variable/field ${t}.`,fr:`Aucun accès en lecture sur la variable/le champ ${t}.`})),r(v,"returnStatementMissing",(t,e)=>E({de:"Die Methode "+t+" muss einen Wert vom Typ "+e+" zurückliefern. In einem der Ausführungszweige fehlt ein entsprechendes return-statement.",en:`Method ${t} must return value of type ${e}. Return statement is missing in at least one program branch.`,fr:`La méthode ${t} doit retourner une valeur de type ${e}. Une instruction return est manquante dans au moins une branche du programme.`})),r(v,"cantRedeclareVariableError",t=>E({de:"Die Variable "+t+" wurde zweifach deklariert.",en:"Variable "+t+" had been declared twice.",fr:`La variable ${t} a été déclarée deux fois.`})),r(v,"shadowedVariableError",(t,e)=>E({de:"Die Variable "+t+" überdeckt eine gleichnamige Variable in einem äußeren Sichtbarkeitsbereich (definiert in Zeile "+e+").",en:"Variable "+t+" shadowes a variable with same identifier in outer scope (defined in line "+e+").",fr:`La variable ${t} masque une variable du même identifiant dans une portée externe (définie à la ligne ${e}).`})),r(v,"breakNotExpected",()=>E({de:"An dieser Stelle kann kein break stehen, da der Ausdruck nicht innerhalb einer Schleife (for, while, do) oder switch-case Anweisung steht.",en:"break statement is only expected inside loops (for, while, do...while) and switch-statements.",fr:"L'instruction break n'est attendue qu'à l'intérieur des boucles (for, while, do...while) et des instructions switch."})),r(v,"noVariableDeclarationWhileProgramIsRunning",()=>E({de:"Während ein Programm läuft (oder pausiert ist) kann keine Variable in der Konsole deklariert werden.",en:"You can't declare a variable while a program is running (or paused).",fr:"Vous ne pouvez pas déclarer de variable pendant qu'un programme est en cours d'exécution (ou en pause)."})),r(v,"emptyStatementAfterIf",()=>E({de:"Hinter if(...) steht eine leere Anweisung. Dies ist sicher nicht so gewollt.",en:"There's an empty statement after if(...). This may be unintentional."})),r(v,"continueNotExpected",()=>E({de:"An dieser Stelle kann kein continue stehen, da der Ausdruck nicht innerhalb einer Schleife (for, while, do) oder switch-case Anweisung steht.",en:"continue statement is only expected inside loops (for, while, do...while) and switch-statements.",fr:"L'instruction continue n'est attendue qu'à l'intérieur des boucles (for, while, do...while) et des instructions switch."})),r(v,"returnNotExpected",()=>E({de:"Eine return-Anweisung ist nur innerhalb einer Methode sinnvoll.",en:"return statement outside method context",fr:"Instruction return en dehors du contexte de la méthode."})),r(v,"returnValueNotExpected",()=>E({de:"Die Methode erwartet keinen Rückgabewert, hier ist aber einer angegeben.",en:"Method doesn't expect return value.",fr:"La méthode n'attend pas de valeur de retour, mais une est spécifiée ici."})),r(v,"returnValueExpected",t=>E({de:"Die Methode erwartet einen Rückgabewert vom Typ "+t+", hier wird aber keiner übergeben.",en:`Missing return value of type ${t}.`,fr:`Valeur de retour de type ${t} attendue.`})),r(v,"wrongReturnValueType",(t,e)=>E({de:"Die Methode erwartet einen Rückgabewert vom Typ "+t+", der Wert des Terms hat aber den Datentyp "+e+".",en:`Expression of type ${e} found, but return value of type ${t} expected.`,fr:`Expression de type ${e} trouvée, mais valeur de retour de type ${t} attendue.`})),r(v,"wrongArrayElementType",(t,e,i)=>E({de:`Der Typ ${t} des Elements ${e} muss mit dem Elementtyp des Arrays (${i}) übereinstimmen. Tipp: Verwende das var-Schlüsselwort, also for(var element: array){...}`,en:`Type ${t} of element ${e} doesn't fit to element type of array (${i}). Hint: use var-keyword (for(var element: array)){...}`,fr:`Le type ${t} de l'élément ${e} ne correspond pas au type d'élément du tableau (${i}). Astuce : utilisez le mot-clé var, par exemple for(var element: array){...}`})),r(v,"wrongCollectionElementType",(t,e,i)=>E({de:`Der Typ ${t} des Elements ${e} muss mit dem Elementtyp des Collections (${i}) übereinstimmen. Tipp: Verwende das var-Schlüsselwort, also for(var element: collection){...}`,en:`Type ${t} of element ${e} doesn't fit to element type of collection (${i}). Hint: use var-keyword (for(var element: collection)){...}`,fr:`Le type ${t} de l'élément ${e} ne correspond pas au type d'élément de la collection (${i}). Astuce : utilisez le mot-clé var, par exemple for(var element: collection){...}`})),r(v,"cantComputeArrayElementType",t=>E({de:`Der Elementtyp des Arrays ${t} kann nicht bestimmt werden.`,en:`Can't compute element type of array ${t}.`,fr:`Impossible de déterminer le type d'élément du tableau ${t}.`})),r(v,"cantComputeCollectionElementType",t=>E({de:`Der Elementtyp der Collection ${t} kann nicht bestimmt werden.`,en:`Can't compute element type of collection ${t}.`,fr:`Impossible de déterminer le type d'élément de la collection ${t}.`})),r(v,"elementTypeDoesntFitToIterable",(t,e,i)=>E({de:`Der Typ ${t} des Elements ${e} muss mit dem Elementtyp des Iterables(${i}) übereinstimmen. Tipp: Verwende das var-Schlüsselwort, also for(var element: array){...}`,en:`Type ${t} of element ${e} must be identical to type of Iterable (${i}). Hint: use var keyword, for example: for(var element: iterable){...}`,fr:`Le type ${t} de l'élément ${e} doit être identique au type de l'Itérable (${i}). Astuce : utilisez le mot-clé var, par exemple : for(var element: iterable){...}`})),r(v,"enhancedForLoopOnlyForArraysCollectionsIterables",()=>E({de:"Die vereinfachte for-loop kann nur über Arrays iterieren oder über Klassen, die das Interface Iterable implementieren.",en:"Enhanced for-loops are only possible for arrays, collections and iterables.",fr:"Les boucles for améliorées ne sont possibles que pour les tableaux, les collections et les itérables."})),r(v,"booleanTermExpected",t=>E({de:"Hier wird eine Bedingung erwartet, deren Wert true oder false ergibt. Der Datentyp dieses Terms ist "+t,en:`Boolean value expected, but expression of type ${t} found.`,fr:`Valeur booléenne attendue, mais expression de type ${t} trouvée.`})),r(v,"assignmentInsteadOfComparisonOperator",()=>E({de:"Hier wird ein boolescher Wert erwartet. Du musst statt des Zuweisungsoperators = den Vergleichsoperator == benutzen.",en:"Boolean value expected. Use comparison operator == instead of assignment operator =.",fr:"Valeur booléenne attendue. Utilisez l'opérateur de comparaison == au lieu de l'opérateur d'affectation =."})),r(v,"comparisonOperatorInsteadOfAssignment",()=>E({de:"Hier wird ein Zuweisungsoperator erwartet. Du musst statt des Vergleichsoperators == den Zuweisungsoperator == benutzen.",en:"Assignment operator expected. Use assignment operator = instead of comparison operator ==.",fr:"Opérateur d'affectation attendu. Utilisez l'opérateur d'affectation = au lieu de l'opérateur de comparaison ==."})),r(v,"enumIdentifierUnknown",(t,e)=>E({de:`Der Enum-Typ ${t} hat kein Element mit dem Bezeichner ${e}.`,en:`Enum-type ${t} has no element with identifier ${e}.`,fr:`Le type enum ${t} n'a pas d'élément avec l'identifiant ${e}.`})),r(v,"valueNotComputable",()=>E({de:"Der Wert des Ausdrucks ist nicht ermittelbar.",en:"Can't compute value.",fr:"Impossible de calculer la valeur."})),r(v,"constantValueExpectedAfterCase",()=>E({de:"Nach case dürfen nur konstante Ausdrücke stehen, z.B. eine feste Zahl oder Zeichenkette. Wenn du an dieser Stelle etwas anderes (einen Term oder eine Variable) verwenden möchtest, informiere dich über sogenannten constant expressions in Java.",en:"Constant value expected.",fr:"Valeur constante attendue."})),r(v,"caseValueDoesntFitToSwitchValue",(t,e)=>E({de:`Ich erwarte hier einen Ausdruck vom Typ ${t} - dem Datentyp des Switch-Ausdrucks - bekomme aber einen Ausdruck vom Typ ${e}.`,en:`Value of type ${t} expected (this is type inside switch()-expression), but found value of type ${e}.`,fr:`Valeur de type ${t} attendue (c'est le type de l'expression switch()), mais valeur de type ${e} trouvée.`})),r(v,"switchOnlyFeasibleForTypes",()=>E({de:"Die Anweisung switch(x) ist nur möglich, wenn x den Typ int, String, oder enum hat.",en:"Switch statement (switch) is only feasible for expression x of type int, String or enum.",fr:"L'instruction switch(x) n'est possible que si x est de type int, String ou enum."})),r(v,"cantAssignArrayLiteralToNonArrayVariable",()=>E({de:"Der Typ der deklarierten Variable ist kein Array, daher kann ihr auch kein Array-Literal zugewiesen werden.",en:"Declared variable has no array type, therefore you can't assign a array literal.",fr:"La variable déclarée n'est pas de type tableau, vous ne pouvez donc pas lui affecter un littéral de tableau."})),r(v,"localVariableDeclarationWrongInitializerType",(t,e)=>E({id:"cantAssignValueToLocalVariable",de:"Der Term auf der rechten Seite des Zuweisungsoperators hat den Datentyp "+t+" und kann daher der Variablen auf der linken Seite (Datentyp "+e+") nicht zugewiesen werden.",en:`Can't assign value of type ${t} to local variable of type ${e}.`,fr:`Impossible d'affecter une valeur de type ${t} à la variable locale de type ${e}.`})),r(v,"voidTypeNotAllowedAsParameterType",t=>E({de:`Der Datentyp void ist nicht als Typ eines Parameters der Methode ${t} erlaubt.`,en:`Void type is not allowed as parameter type of method ${t}.`,fr:`Le type void n'est pas autorisé comme type de paramètre de la méthode ${t}.`})),r(v,"localVariableUsedBeforeDeclaration",t=>E({de:`Die Variable ${t} wurde vor ihrer Deklaration verwendet.`,en:`Variable ${t} is used before it's declaration.`,fr:`La variable ${t} est utilisée avant sa déclaration.`})),r(v,"superOnlyInClassesOrEnums",()=>E({de:"Das Schlüsselwort super ist nur innerhalb einer Klasse oder eines Enum sinnvoll.",en:"Keyword super is only usable in classes and enums.",fr:"Le mot-clé super n'est utilisable que dans les classes et les enums."})),r(v,"thisOnlyInClassesOrEnums",()=>E({de:"Das Schlüsselwort this ist nur innerhalb einer Klasse oder eines Enum sinnvoll.",en:"Keyword this is only usable in classes and enums.",fr:"Le mot-clé this n'est utilisable que dans les classes et les enums."})),r(v,"cantCastFromTo",(t,e)=>E({de:`Casten von ${t} nach ${e} ist nicht möglich.`,en:`Can't cast from ${t} to ${e}.`,fr:`Impossible de convertir de ${t} à ${e}.`})),r(v,"objectContextNeededForInstantiation",(t,e)=>E({de:`Zum Instanzieren eines Objekts der Klasse ${t} wird ein Objektkontext der Klasse ${e} benötigt.`,en:`You need objectcontext ${e} to instantiate a object of type ${t}.`,fr:`Vous avez besoin d'un contexte d'objet ${e} pour instancier un objet de type ${t}.`})),r(v,"noArrayBracketAfterType",t=>E({de:`Vor [ muss ein Array stehen. Dieser Term hat aber den Typ ${t}`,en:`Type ${t} is no array type, therefore [ is not expected here.`,fr:`Le type ${t} n'est pas un type tableau, par conséquent [ n'est pas attendu ici.`})),r(v,"wrongArrayDimensionCount",(t,e)=>E({de:`Das Array hat die Dimension ${t}, hier stehen aber ${e} Längenangaben in den eckigen Klammern.`,en:`Array has dimension ${t}, but ${e} length-values found inside square brackets ([...]).`,fr:`Le tableau a la dimension ${t}, mais ${e} valeurs de longueur ont été trouvées entre crochets ([...]).`})),r(v,"indexMustHaveIntegerValue",()=>E({de:"Als Array-Index wird ein ganzzahliger Wert erwartet.",en:"Array-Index must have integer value.",fr:"L'indice de tableau doit avoir une valeur entière."})),r(v,"integerValueExpected",t=>E({de:"Hier wird eine Ganzzahl erwartet (Datentypen byte, short, int, long). Gefunden wurde "+t+".",en:`Integer value expected (type byte, short, int or long), but found: ${t}`,fr:`Valeur entière attendue (types byte, short, int ou long), mais trouvé : ${t}.`})),r(v,"declaredArrayDimensionDoesNotFitArrayLiteral",(t,e)=>E({de:`Die Dimension ${t} bei der Deklaration des Arrays stimmt nicht mit der des Array-Literals (${e} überein.)`,en:`Dimension ${t} does not match dimension of array literal (${e}).`,fr:`La dimension ${t} ne correspond pas à la dimension du littéral de tableau (${e}).`})),r(v,"arrayLiteralElementsNotSameDimension",()=>E({de:"Die Elemente des Array-Literals haben unterschiedliche Dimension.",en:"Elements of array literal don't have same dimension.",fr:"Les éléments du littéral de tableau n'ont pas la même dimension."})),r(v,"arrayLiteralElementDimensionWrong",()=>E({de:"Dieses Element des Array-Literals sollte kein Array sein.",en:"This particular element of the array literal must be no array itself.",fr:"Cet élément particulier du littéral de tableau ne doit pas être un tableau lui-même."})),r(v,"cantCastTermTo",t=>E({de:`Der Term kann nicht in den Typ ${t} umgewandelt werden.`,en:`Can't cast expression to type ${t}.`,fr:`Impossible de convertir l'expression en type ${t}.`})),r(v,"cantUseNonstaticFieldsToInitializeStaticOne",()=>E({de:"Zum Initialisieren eines statischen Attributs können keine nichtstatischen Attribute benutzt werden.",en:"Can't use non-static fields to initialize static field.",fr:"Impossible d'utiliser des champs non statiques pour initialiser un champ statique."})),r(v,"attributeHasWrongVisibility",(t,e)=>E({de:"Das Attribut "+t+" hat die Sichtbarkeit "+e+" und kann daher hier nicht verwendet werden.",en:"Field "+t+" has Visibility "+e+", therefore it is not visible here.",fr:`Le champ ${t} a la visibilité ${e}, il n'est donc pas visible ici.`})),r(v,"identifierNotKnown",t=>E({de:"Der Bezeichner "+t+" ist an dieser Stelle nicht definiert.",en:"Identifier "+t+" unknown.",fr:`L'identifiant ${t} est inconnu.`})),r(v,"plusPlusMinusMinusOnlyForVariables",()=>E({de:"Die Operatoren ++ und -- können nur bei Variablen benutzt werden, die veränderbar sind.",en:"Operators ++ and -- can only operate on variables.",fr:"Les opérateurs ++ et -- ne peuvent s'appliquer qu'aux variables."})),r(v,"colonExpectedAfterTernaryOperator",()=>E({de:"Nach dem Fragezeichenoperator ? ('ternary operator') wird ein : erwartet. Beispiel: Der Term a < b ? 10 : 12 hat den Wert 10, wenn a < b ist und 12 andernfalls.",en:"Colon (:) expected after ternary operator (?). Example: The value of a < b ? 10 : 12 is 10 if a < b and 12 otherwise.",fr:"Deux-points (:) attendus après l'opérateur ternaire (?). Exemple : La valeur de a < b ? 10 : 12 est 10 si a < b et 12 sinon."})),r(v,"booleanOperandOnTernaryOperatorLefthand",()=>E({de:"Der Term links vom Fragezeichenoperator ? (ternary operator) muss einen booleschen Wert besitzen.",en:"Boolean value expected on left side of ternary operator (?).",fr:"Valeur booléenne attendue à gauche de l'opérateur ternaire (?)."})),r(v,"ternaryOperatorTypesNotCompatible",()=>E({de:"Die Typen der Operanden b und c beim Ausdruck a ? b : c sind im gegebenen Fall zu unterschiedlich.",en:"Types b and c in expression a ? b : c are not compatible to each other.",fr:"Les types b et c dans l'expression a ? b : c ne sont pas compatibles entre eux."})),r(v,"plusPlusMinusMinusOnlyForTypes",()=>E({de:"Die Operatoren ++ und -- können nur bei Variablen mit den Datentypen byte, short, int, long, float und double benutzt werden.",en:"Operators ++ and -- can only operate on types byte, short, int, long, float and double.",fr:"Les opérateurs ++ et -- ne peuvent s'appliquer qu'aux variables de types byte, short, int, long, float et double."})),r(v,"arraysOnlyHaveLengthField",t=>E({de:"Arrays haben nur das Attribut length. Das Attribut "+t+" ist bei Arrays nicht vorhanden.",en:`Arrays don't have field ${t}. They have field length ...`,fr:`Les tableaux n'ont pas de champ ${t}. Ils ont un champ length...`})),r(v,"typeHasNoFields",t=>E({de:`Der Datentyp ${t} hat keine Attribute.`,en:`Type ${t} has no fields.`,fr:`Le type de données ${t} n'a pas de champs.`})),r(v,"fieldUnknown",t=>E({de:`Das Objekt hat kein Attribut mit dem Bezeichner ${t}.`,en:`Object has no field ${t}.`,fr:`L'objet n'a pas de champ avec l'identifiant ${t}.`})),r(v,"methodCallOutsideClassNeedsDotSyntax",()=>E({de:"Außerhalb einer Klasse kann eine Methode nur mit Punktschreibweise (Object.Methode(...)) aufgerufen werden.",en:"Method call outside class is only possible with dot syntax.",fr:"L'appel de méthode en dehors de la classe n'est possible qu'avec la syntaxe par points (Object.method(...))."})),r(v,"methodHasWrongVisibility",(t,e)=>E({de:"Die Methode "+t+" hat die Sichtbarkeit "+e+" und kann daher hier nicht aufgerufen werden.",en:"Method "+t+" has Visibility "+e+", therefore it is not visible here.",fr:`La méthode ${t} a la visibilité ${e}, elle n'est donc pas visible ici.`})),r(v,"cantFindMethod",()=>E({de:"Es konnte keine passende Methode mit diesem Bezeichner/mit dieser Signatur gefunden werden.",en:"Can't find method with this identifier and signature.",fr:"Impossible de trouver une méthode correspondant à cet identifiant et à cette signature."})),r(v,"assertCodeReachedNeedsStringParameter",()=>E({de:"Die Methode assertCodeReached benötigt genau einen konstanten Parameter vom Typ String.",en:"Method assertCodeReached needs parameter of type String.",fr:"La méthode assertCodeReached nécessite exactement un paramètre constant de type String."})),r(v,"expectingEndOfCharConstant",()=>E({de:"Das Ende der char-Konstante wird erwartet (').",en:"Expecting end of char literal (').",fr:"Fin du littéral de caractère (') attendue."})),r(v,"endOfLineInsideStringLiteral",()=>E({de:"Innerhalb einer String-Konstante wurde das Zeilenende erreicht.",en:"End of line inside String literal.",fr:"Fin de ligne atteinte à l'intérieur du littéral de chaîne."})),r(v,"endOfTextInsideStringLiteral",()=>E({de:"Innerhalb einer String-Konstante wurde das Textende erreicht.",en:"End of text inside String literal.",fr:"Fin du texte atteinte à l'intérieur du littéral de chaîne."})),r(v,"endOfTextInsideJavadocComment",()=>E({de:"Innerhalb eines Mehrzeilenkommentars (/*... */) wurde das Dateiende erreicht.",en:"End of text inside JavaDoc comment (/*... */).",fr:"Fin du texte atteinte à l'intérieur du commentaire JavaDoc (/*... */)."})),r(v,"charactersAfterMultilineStringLiteralStart",()=>E({de:'Eine Java-Multiline-Stringkonstante beginnt immer mit """ und einem nachfolgenden Zeilenumbruch. Alle nach """ folgenden Zeichen werden überlesen!',en:'A multiline String-literal starts with """ followed by a line braek. Characters in between """ and line break are discarded.',fr:`Un littéral de chaîne multiligne commence toujours par """ suivi d'un saut de ligne. Tous les caractères après """ et le saut de ligne sont ignorés !`})),r(v,"unknownEscapeSequence",t=>E({de:"Die Escape-Sequenz \\"+t+" gibt es nicht.",en:`Unknown escape sequence \\${t}`,fr:`Séquence d'échappement inconnue \\${t}.`})),r(v,"wrongFloatConstantBegin",()=>E({de:"Eine float/double-Konstante darf nicht mit 0, 0b oder 0x beginnen.",en:"Float literals must not start with 0, 0b or 0x.",fr:"Les littéraux float ne doivent pas commencer par 0, 0b ou 0x."})),r(v,"unexpectedToken",t=>E({de:"Mit dem Token "+t+" kann der Compiler nichts anfangen.",en:`Unexpected token: ${t}`,fr:`Jeton inattendu : ${t}.`})),r(v,"superCallInsideConstructorAfterFirstStatement",()=>E({de:"Der Aufruf des Konstruktors der Oberklasse mit super(...) kann nur als erste Anweisung im Konstruktor erfolgen.",en:"Call to constructors base class via super(...) must be first statement in constructor.",fr:"L'appel au constructeur de la classe de base via super(...) doit être la première instruction du constructeur."})),r(v,"fieldDefinitionDoesntStartWithGenericParamter",()=>E({de:"Vor Attributen kann keine Definition generischer Parameter stehen.",en:"Field definition mustn't start with generic parameter definition.",fr:"La définition de champ ne doit pas commencer par une définition de paramètre générique."})),r(v,"methodDeclarationWithoutReturnType",t=>E({de:`Bei der Deklaration der methode ${t} fehlt der Rückgabedatentyp. Falls die Methode keinen Wert zurückgibt, muss vor dem Bezeichner ${t} der Typ void stehen.`,en:`Declaration of method ${t} is missing a return type. If this method doesn't return a value then precede ${t} with type void.`,fr:`La déclaration de la méthode ${t} manque un type de retour. Si cette méthode ne retourne pas de valeur, le type void doit précéder l'identifiant ${t}.`})),r(v,"multipleVisibilityModifiers",t=>E({de:`Es ist nicht zulässig, mehrere visibility-modifiers gleichzeitig zu setzen (hier: ${t}).`,en:`More than one visibility modifier found: ${t}`,fr:`Plusieurs modificateurs de visibilité trouvés : ${t}.`})),r(v,"noSemicolonAsMethodBody",()=>E({de:"Diese Methode ist nicht abstrakt, daher ist ein Strichpunkt hier nicht zulässig.",en:"This method is not abstract, therefore no semicolon is expected here.",fr:"Cette méthode n'est pas abstraite, par conséquent aucun point-virgule n'est attendu ici."})),r(v,"abstractMethodOnlyInAbstractClass",()=>E({de:"Eine abstrakte Methode ist nur in einer abstrakten Klasse zulässig.",en:"You can't have abstract methods in non-abstract classes.",fr:"Vous ne pouvez pas avoir de méthodes abstraites dans des classes non abstraites."})),r(v,"methodNeedsMethodBody",t=>E({de:`Die Methode ${t} braucht hier noch einen Methodenrumpf, d.h. sie braucht Anweisungen, die in { ... } eingeschlossen sind.`,en:`Method ${t} needs a body here, i.e. it needs statements enclosed in { ... }.`})),r(v,"useOfStringWithSmallLetterAsIdentifier",()=>E({de:'Der Bezeichner String mit kleinem Anfangsbuchstaben ist nicht zulässig. Vermutlich wolltest du die Klasse "String" verwenden.',en:'Identifier String with small letter is not allowed. Probably you wanted to use String-class "String".',fr:`L'identifiant String avec une petite lettre n'est pas autorisé. Vous vouliez probablement utiliser la classe String "String".`})),r(v,"upperCaseStringQuickfixMessage",()=>d({de:"Ersetze string durch String",en:"Replace string with String",fr:"Remplacer string par String"})),r(v,"loopOverEmptyStatement",()=>E({de:"Hier wird eine leere Anweisung (; oder { }) wiederholt.",en:"Loop over empty statement (; or { }).",fr:"Boucle sur une instruction vide (; ou { })."})),r(v,"noMethodDeclarationAllowedHere",()=>E({de:"Hier ist keine Methodendeklaration möglich.",en:"No method declaration allowed here.",fr:"Aucune déclaration de méthode n'est autorisée ici."})),r(v,"constantMissingInCaseStatement",()=>E({de:"In diesem Case-Block fehlt zwischen case und dem Doppelpunkt die Konstante.",en:"Constant missing between case and colon.",fr:"Constante manquante entre case et le deux-points."})),r(v,"statementOrBlockExpected",()=>E({de:"Hier wird eine Anweisung oder ein Anweisungsblock (in geschweiften Klammern) erwartet.",en:"Statement or block-Statement in curly braces { ... } expected.",fr:"Instruction ou bloc d'instructions entre accolades { ... } attendu."})),r(v,"wrongSyntaxAfterKeywordNew",()=>E({de:"Es wird die Syntax new Klasse(Parameter...) oder new Typ[ArrayLänge]... erwartet.",en:"Keyword new has syntax new Class(parameters...) or new ArrayType[length].",fr:"Le mot-clé new a la syntaxe new Classe(paramètres...) ou new TypeTableau[longueur]."})),r(v,"secondOperandExpected",t=>E({de:"Rechts vom binären Operator "+t+" wird ein zweiter Operand erwartet.",en:`Expecting second Operand on right side of binary operator ${t}.`,fr:`Deuxième opérande attendue à droite de l'opérateur binaire ${t}.`})),r(v,"dotOperatorNotExpected",()=>E({de:"Der Punkt-Operator wird hier nicht erwartet.",en:"Dot operator (.) not expected",fr:"Opérateur point (.) non attendu."})),r(v,"squareBracketExpected",()=>E({de:"[ oder [] erwartet.",en:"[ or [] expected",fr:"[ ou [] attendu."})),r(v,"firstArrayDimensionMustNotBeZero",()=>E({de:"Die Länge der ersten Array-Dimension darf nicht 0 sein.",en:"Length of first array dimension must not be 0.",fr:"La longueur de la première dimension du tableau ne doit pas être 0."})),r(v,"expectedOtherToken",(t,e)=>E({de:`Erwartet wird: ${t} - Gefunden wurde: ${e}`,en:`Expected token: ${t} - Found: ${e}`,fr:`Jeton attendu : ${t} - Trouvé : ${e}`})),r(v,"expectedOtherTokens",(t,e)=>E({de:`Erwartet wird eines der Token: ${t} - Gefunden wurde: ${e}`,en:`Expected tokens: ${t} - Found: ${e}`,fr:`Jetons attendus : ${t} - Trouvé : ${e}`})),r(v,"insertSemicolonHere",()=>d({de:"Strichpunkt hier einfügen",en:"Insert semicolon here",fr:"Insérer un point-virgule ici"})),r(v,"semicolonExpected",t=>E({de:`Erwartet wird ein Strichpunkt (Semicolon). Gefunden wurde: ${t}`,en:`Semicolon (;) expected. Found: ${t}`,fr:`Point-virgule (;) attendu. Trouvé : ${t}.`})),r(v,"typeExpected",t=>E({de:`Erwartet wird ein Datentyp. Gefunden wurde: ${t}`,en:`Data type expected. Found: ${t}`,fr:`Type de données attendu. Trouvé : ${t}.`})),r(v,"identifierExpected",t=>E({de:`Erwartet wird ein Bezeichner (engl.: 'identifier'), d.h. der Name einer Klasse, Variable, ... . Gefunden wurde: ${t}`,en:`Identifier (that is: name of variable, class, ...) expected. Found: ${t}`,fr:`Identifiant (c'est-à-dire : nom de variable, de classe, ...) attendu. Trouvé : ${t}.`})),r(v,"multipleFieldsWithSameIdentifier",(t,e)=>E({de:`Es gibt in dieser Klasse/diesem enum ein weiteres Attribut mit dem Bezeichner ${t} in Zeile ${e}.`,en:`There's another field with signature ${t} in this class/this enum (line ${e}).`,fr:`Il existe un autre champ avec la signature ${t} dans cette classe/cet enum (ligne ${e}).`})),r(v,"multipleMethodsWithSameSignature",(t,e)=>E({de:`Es gibt in dieser Klasse/diesem Interface/diesem enum eine weitere Methode mit der Signatur ${t} in Zeile ${e}.`,en:`There's another method for this class/interface/enum with signature ${t} in line ${e}.`,fr:`Il existe une autre méthode pour cette classe/interface/enum avec la signature ${t} à la ligne ${e}.`})),r(v,"typenameAlreadyInUse",(t,e,i)=>E({de:`Es gibt einen weiteren Datentyp mit Bezeichner ${t}. Er findet sich in der Datei ${i} in Zeile ${e.startLineNumber}.`,en:`Identifier ${t} for this type is already in use. See File ${i}, line ${e.startLineNumber}.`,fr:`L'identifiant ${t} pour ce type est déjà utilisé. Voir le fichier ${i}, ligne ${e.startLineNumber}.`})),r(v,"typenameUsedInLibrary",t=>E({de:`Es gibt in der API bereits einen Typ (Klasse/Interface/Enum) mit dem Bezeichner ${t}.`,en:`Identifier ${t} is already used in the API.`,fr:`L'identifiant ${t} est déjà utilisé dans l'API.`})),r(v,"typeIsNotGeneric",t=>E({de:`Der Datentyp ${t} ist nicht generisch, daher können keine Typparameter in <...> angegeben werden.`,en:`Type ${t} is not generic, therefore type parameters in <...> are not possible.`,fr:`Le type de données ${t} n'est pas générique, par conséquent, les paramètres de type entre <...> ne sont pas possibles.`})),r(v,"genericTypeWithNonGenericReference",t=>E({de:`Der Datentyp ${t} ist generisch, wird hier aber in nicht-generischer Art gebraucht. Es sollten die Werte der generischen Typparameter in <...> angegeben werden.`,en:`Type ${t} is generic, but used in a non-generic way here. You should add type parameter values in <...>.`,fr:`Le type ${t} est générique, mais il est utilisé de manière non générique ici. Vous devriez ajouter les valeurs des paramètres de type entre <...>.`})),r(v,"wrongNumberOfGenericParameters",(t,e,i)=>E({de:`Der Datentyp ${t} hat ${e} generische Parameter, hier werden aber ${i} konkrete Datentypen dafür angegeben.`,en:`Type ${t} has ${e} generic parameters. Found: ${i} types.`,fr:`Le type ${t} a ${e} paramètres génériques, mais ${i} types concrets sont spécifiés ici.`})),r(v,"noPrimitiveTypeForGenericParameter",t=>E({de:`Als konkreter Typ für einen generischen Typparameter kann kein primitiver Datentyp (hier: ${t}) verwendet werden.`,en:`Can't use primitive Type ${t} for generic parameter.`,fr:`Un type de données primitif (ici : ${t}) ne peut pas être utilisé comme type concret pour un paramètre de type générique.`})),r(v,"actualGenericParameterNotSpecified",(t,e)=>E({de:`Für den generischen Parameter ${e} der Klasse/des Interfaces ${t} muss ein konkreter Typ angegeben werden.`,en:`Actual Type missing for generic Parameter ${e} of class/interface ${t}.`,fr:`Le type réel est manquant pour le paramètre générique ${e} de la classe/interface ${t}.`})),r(v,"cantReplaceGenericParamterBy",(t,e)=>E({de:`Der generische Typparameter ${t} kann nicht durch den Typ ${e} ersetzt werden.`,en:`Can't replace generic typeparameter ${t} with type ${e}.`,fr:`Impossible de remplacer le paramètre de type générique ${t} par le type ${e}.`})),r(v,"onlyClassesOrInterfacesAsUpperBounds",()=>E({de:"Nur Klassen und Interfaces können als upper bound für einen generischen Typparameter verwendet werden.",en:"Only classes and interfaces can be used as upper bound for generic parameter.",fr:"Seules les classes et les interfaces peuvent être utilisées comme borne supérieure pour un paramètre générique."})),r(v,"onlyClassesOrInterfacesAsLowerBounds",()=>E({de:"Nur Klassen und Interfaces können als lower bound für einen generischen Typparameter verwendet werden.",en:"Only classes and interfaces can be used as lower bound for generic parameter.",fr:"Seules les classes et les interfaces peuvent être utilisées comme borne inférieure pour un paramètre générique."})),r(v,"afterExtendsClassNeeded",()=>E({de:"Hinter extends muss eine Klasse stehen.",en:"After extends a class identifier is needed.",fr:"Un identifiant de classe est nécessaire après extends."})),r(v,"onlyInterfacesAfterImplements",()=>E({de:"Hinter implements können nur Interfaces stehen.",en:"Only interface identifiers are allowed after implements.",fr:"Seuls les identifiants d'interface sont autorisés après implements."})),r(v,"onlyInterfacesAfterExtends",()=>E({de:"Hinter extends können nur Interfaces stehen.",en:"Only interface identifiers are allowed after extends.",fr:"Seuls les identifiants d'interface sont autorisés après extends."})),r(v,"typeNotDefined",t=>E({de:`Der Datentyp ${t} ist hier nicht definiert.`,en:`Type ${t} is not defined here.`,fr:`Le type de données ${t} n'est pas défini ici.`})),r(v,"typeHasNoSubtype",(t,e)=>E({de:`Der Datentyp ${t} hat keinen Unterdatentyp ${e}.`,en:`Type ${t} has no subtype ${e}.`,fr:`Le type ${t} n'a pas de sous-type ${e}.`})),r(v,"typeIsNotVisible",t=>E({de:`Der Datentyp ${t} ist an dieser Stelle nicht sichtbar, da er nicht die Sichtbarkeit public besitzt.`,en:`Type ${t} is not visible here.`,fr:`Le type ${t} n'est pas visible ici.`})),r(v,"cantExtendFinalClass",()=>E({de:"Von einer final class können keine Unterklassen gebildet werden.",en:"You can't subclass a final class.",fr:"Vous ne pouvez pas créer de sous-classe à partir d'une classe finale."})),r(v,"abstractMethodsNotImplemented",(t,e)=>E({de:"Die Klasse "+t+" muss noch folgende Methoden ihrer abstrakten Oberklassen implementieren: "+e,en:"Class "+t+" has to implement methods of it's abstract base class: "+e,fr:`La classe ${t} doit encore implémenter les méthodes suivantes de ses classes de base abstraites : ${e}.`})),r(v,"interfaceMethodsNotImplemented",(t,e,i)=>E({de:"Die Klasse "+t+" muss noch folgende Methoden des Interfaces "+e+"implementieren: "+i,en:"Class "+t+" has to implement methods of interface "+e+": "+i,fr:`La classe ${t} doit encore implémenter les méthodes suivantes de l'interface ${e} : ${i}.`})),r(v,"methodOverridesFinalMethod",(t,e)=>E({de:`Die Methode ${t} überschreibt eine als final gekennzeichnete Methode der Oberklasse ${e}.`,en:`Method ${t} overrides final method of base class ${e}.`,fr:`La méthode ${t} surcharge une méthode marquée comme finale de la classe de base ${e}.`})),r(v,"overrideAnnotationNotNecessary",t=>E({de:`Die Methode ${t} überschreibt keine Methode mit gleicher Signatur einer Oberklasse, daher ist die @Override-Annotation unnötig.`,en:`Method ${t} doesn't override a method with identical signature in base class, therefore @Override is not necessary here.`,fr:`La méthode ${t} ne surcharge aucune méthode avec une signature identique dans une classe de base, par conséquent l'annotation @Override est inutile ici.`})),r(v,"parameterNotDefined",t=>E({de:`Der generische Parameter ${t} ist bei diesem Methodenaufruf unbestimmt.`,en:`Generic parameter ${t} is not bound in this method invocation.`,fr:`Le paramètre générique ${t} n'est pas lié dans cet appel de méthode.`})),r(v,"parameterContradictoryBound",(t,e)=>E({de:`Der generische Parameter ${t} hat bei diesem Methodenaufruf widersprüchliche Ausprägungen: ${e}`,en:`Generic parameter ${t} is bound in a contradictory way in this method call.`,fr:`Le paramètre générique ${t} est lié de manière contradictoire dans cet appel de méthode.`})),r(v,"cycleInInheritenceHierarchy",t=>E({de:`In der Vererbungshierarchie gibt es einen Zyklus: ${t} + " Daher kann leider nicht weiterkompiliert werden.`,en:`There's a inheritence-cycle: ${t} ... => compilation had to be cancelled.`,fr:`Il y a un cycle d'héritage : ${t} ... => la compilation a dû être annulée.`})),r(v,"internalError",()=>E({de:"Interner Fehler, siehe Konsolenausgabe des Browsers",en:"Internal error, see browser console output",fr:"Erreur interne, voir la sortie de la console du navigateur"})),r(v,"cyclicReferencesAmongStaticVariables",t=>E({de:`Die Initialisierung mehrerer statischer Attribute aus verschiedenen Klassen ist zyklisch: ${t}`,en:`Initialization of several static fields is cyclic: ${t}`,fr:`L'initialisation de plusieurs champs statiques est cyclique : ${t}.`})),r(v,"charIndexOutOfBounds",()=>d({de:"Zugriff auf Zeichen außerhalb des zulässingen Bereichs",en:"char index out of bounds",fr:"Index de caractère hors limites"})),r(v,"divideByZero",()=>d({de:"Teilen durch 0 nicht möglich",en:"division by zero not allowed",fr:"Division par zéro non autorisée"})),r(v,"threadWantsToWaitAndHasNoLockOnObject",()=>d({de:"Es wurde wait für ein Objekt aufgerufen, für das der aktuelle Thread kein Lock besitzt.",en:"Wait called on Object for which thread holds no lock.",fr:"Wait a été appelé sur un objet pour lequel le thread actuel ne possède aucun verrou."})),r(v,"threadWantsToNotifyAndHasNoLockOnObject",()=>d({de:"Es wurde notify für ein Objekt aufgerufen, für das der aktuelle Thread kein Lock besitzt.",en:"Notify called on Object for which thread holds no lock.",fr:"Notify a été appelé sur un objet pour lequel le thread actuel ne possède aucun verrou."})),r(v,"identifier",()=>d({de:"Bezeichner (engl.: identifier)",en:"identifier",fr:"identifiant"})),r(v,"floatingPointLiteral",()=>d({de:"Fließkomma-Konstante",en:"floating point literal",fr:"littéral à virgule flottante"})),r(v,"booleanLiteral",()=>d({de:"boolesche Konstante (d.h. true oder false)",en:"boolean literal (that is: true or false)",fr:"littéral booléen (c'est-à-dire : true ou false)"})),r(v,"stringLiteral",()=>d({de:"Zeichenketten-Konstante",en:"String literal",fr:"littéral de chaîne"})),r(v,"charLiteral",()=>d({de:"Char-Konstante",en:"char literal",fr:"littéral de caractère"})),r(v,"space",()=>d({de:"ein Leerzeichen",en:"space character",fr:"un caractère d'espace"})),r(v,"tab",()=>d({de:"ein Tabulatorzeichen",en:"tab character",fr:"un caractère de tabulation"})),r(v,"linebreak",()=>d({de:"ein Zeilenumbruch",en:"line break",fr:"un saut de ligne"})),r(v,"aToZ",()=>d({de:"eines der Zeichen a..z, A..Z, _",en:"one of a..z, A..Z, _",fr:"un des caractères a..z, A..Z, _"})),r(v,"comment",()=>d({de:"eine Kommentar",en:"a comment",fr:"un commentaire"})),r(v,"endOfText",()=>d({de:"das Ende des Programms",en:"end of sourcecode",fr:"fin du code source"})),r(v,"dd",()=>d({de:"",en:"",fr:""})),r(v,"primitiveType",()=>d({de:"Primitiver Datentyp",en:"primitive type",fr:"type primitif"})),r(v,"genericType",()=>d({de:"Generischer Datentyp",en:"generic type",fr:"type générique"})),r(v,"class",()=>d({de:"Klass",en:"class",fr:"classe"})),r(v,"enum",()=>d({de:"Enum",en:"enum",fr:"enum"})),r(v,"interface",()=>d({de:"Interface",en:"interface",fr:"interface"})),r(v,"nullType",()=>d({de:"Der Wert null",en:"null value",fr:"valeur nulle"})),r(v,"ReplaceTokenQuickfixDefaultMessage",(t,e)=>d({de:`Ersetze ${t} durch ${e}.`,en:`Replace ${t} by ${e}.`,fr:`Remplacez ${t} par ${e}.`}));var m=(p=>(p[p.identifier=0]="identifier",p[p.shortConstant=1]="shortConstant",p[p.integerLiteral=2]="integerLiteral",p[p.longConstant=3]="longConstant",p[p.floatLiteral=4]="floatLiteral",p[p.doubleConstant=5]="doubleConstant",p[p.booleanLiteral=6]="booleanLiteral",p[p.stringLiteral=7]="stringLiteral",p[p.charLiteral=8]="charLiteral",p[p.true=9]="true",p[p.false=10]="false",p[p.keywordPrint=11]="keywordPrint",p[p.keywordPrintln=12]="keywordPrintln",p[p.keywordClass=13]="keywordClass",p[p.keywordThis=14]="keywordThis",p[p.keywordSuper=15]="keywordSuper",p[p.keywordNew=16]="keywordNew",p[p.keywordInterface=17]="keywordInterface",p[p.keywordEnum=18]="keywordEnum",p[p.keywordVoid=19]="keywordVoid",p[p.keywordAbstract=20]="keywordAbstract",p[p.keywordPublic=21]="keywordPublic",p[p.keywordProtected=22]="keywordProtected",p[p.keywordPrivate=23]="keywordPrivate",p[p.keywordTransient=24]="keywordTransient",p[p.keywordStatic=25]="keywordStatic",p[p.keywordSynchronized=26]="keywordSynchronized",p[p.keywordExtends=27]="keywordExtends",p[p.keywordImplements=28]="keywordImplements",p[p.keywordWhile=29]="keywordWhile",p[p.keywordDo=30]="keywordDo",p[p.keywordFor=31]="keywordFor",p[p.keywordSwitch=32]="keywordSwitch",p[p.keywordCase=33]="keywordCase",p[p.keywordDefault=34]="keywordDefault",p[p.keywordIf=35]="keywordIf",p[p.keywordThen=36]="keywordThen",p[p.keywordElse=37]="keywordElse",p[p.keywordReturn=38]="keywordReturn",p[p.keywordBreak=39]="keywordBreak",p[p.keywordContinue=40]="keywordContinue",p[p.keywordNull=41]="keywordNull",p[p.keywordFinal=42]="keywordFinal",p[p.keywordInstanceof=43]="keywordInstanceof",p[p.keywordThrow=44]="keywordThrow",p[p.keywordTry=45]="keywordTry",p[p.keywordCatch=46]="keywordCatch",p[p.keywordFinally=47]="keywordFinally",p[p.keywordVar=48]="keywordVar",p[p.leftBracket=49]="leftBracket",p[p.rightBracket=50]="rightBracket",p[p.leftSquareBracket=51]="leftSquareBracket",p[p.rightSquareBracket=52]="rightSquareBracket",p[p.leftCurlyBracket=53]="leftCurlyBracket",p[p.rightCurlyBracket=54]="rightCurlyBracket",p[p.leftRightSquareBracket=55]="leftRightSquareBracket",p[p.minusMinus=56]="minusMinus",p[p.plusPlus=57]="plusPlus",p[p.dot=58]="dot",p[p.modulo=59]="modulo",p[p.minus=60]="minus",p[p.plus=61]="plus",p[p.multiplication=62]="multiplication",p[p.division=63]="division",p[p.lower=64]="lower",p[p.greater=65]="greater",p[p.lowerOrEqual=66]="lowerOrEqual",p[p.greaterOrEqual=67]="greaterOrEqual",p[p.equal=68]="equal",p[p.notEqual=69]="notEqual",p[p.assignment=70]="assignment",p[p.plusAssignment=71]="plusAssignment",p[p.minusAssignment=72]="minusAssignment",p[p.multiplicationAssignment=73]="multiplicationAssignment",p[p.divisionAssignment=74]="divisionAssignment",p[p.moduloAssignment=75]="moduloAssignment",p[p.and=76]="and",p[p.or=77]="or",p[p.ampersand=78]="ampersand",p[p.lambdaOperator=79]="lambdaOperator",p[p.singleQuote=80]="singleQuote",p[p.doubleQuote=81]="doubleQuote",p[p.ANDAssigment=82]="ANDAssigment",p[p.XORAssigment=83]="XORAssigment",p[p.ORAssigment=84]="ORAssigment",p[p.shiftLeftAssigment=85]="shiftLeftAssigment",p[p.shiftRightAssigment=86]="shiftRightAssigment",p[p.shiftRightUnsignedAssigment=87]="shiftRightUnsignedAssigment",p[p.OR=88]="OR",p[p.XOR=89]="XOR",p[p.tilde=90]="tilde",p[p.shiftRightUnsigned=91]="shiftRightUnsigned",p[p.shiftRight=92]="shiftRight",p[p.shiftLeft=93]="shiftLeft",p[p.ternaryOperator=94]="ternaryOperator",p[p.colon=95]="colon",p[p.ellipsis=96]="ellipsis",p[p.not=97]="not",p[p.semicolon=98]="semicolon",p[p.comma=99]="comma",p[p.backslash=100]="backslash",p[p.at=101]="at",p[p.space=102]="space",p[p.tab=103]="tab",p[p.newline=104]="newline",p[p.linefeed=105]="linefeed",p[p.identifierChar=106]="identifierChar",p[p.comment=107]="comment",p[p.endofSourcecode=108]="endofSourcecode",p[p.binaryOp=109]="binaryOp",p[p.unaryPrefixOp=110]="unaryPrefixOp",p[p.localVariableDeclaration=111]="localVariableDeclaration",p[p.localVariableDeclarations=112]="localVariableDeclarations",p[p.dereferenceAttribute=113]="dereferenceAttribute",p[p.literal=114]="literal",p[p.arrayLiteral=115]="arrayLiteral",p[p.castValue=116]="castValue",p[p.selectArrayElement=117]="selectArrayElement",p[p.methodCall=118]="methodCall",p[p.newObject=119]="newObject",p[p.initialFieldAssignementInMainProgram=120]="initialFieldAssignementInMainProgram",p[p.firstMainProgramStatement=121]="firstMainProgramStatement",p[p.global=122]="global",p[p.program=123]="program",p[p.block=124]="block",p[p.synchronizedBlock=125]="synchronizedBlock",p[p.multiNode=126]="multiNode",p[p.plusPlusMinusMinusSuffix=127]="plusPlusMinusMinusSuffix",p[p.genericParameterDefinition=128]="genericParameterDefinition",p[p.symbol=129]="symbol",p[p.annotation=130]="annotation",p[p.enhancedForLoop=131]="enhancedForLoop",p[p.astProgram=132]="astProgram",p[p.instanceInitializerBlock=133]="instanceInitializerBlock",p[p.staticInitializerBlock=134]="staticInitializerBlock",p[p.anonymousClass=135]="anonymousClass",p[p.fieldDeclaration=136]="fieldDeclaration",p[p.methodDeclaration=137]="methodDeclaration",p[p.parameterDeclaration=138]="parameterDeclaration",p[p.newArray=139]="newArray",p[p.print=140]="print",p[p.println=141]="println",p[p.initializeEnumValue=142]="initializeEnumValue",p[p.type=143]="type",p[p.baseType=144]="baseType",p[p.wildcardType=145]="wildcardType",p[p.voidType=146]="voidType",p[p.varType=147]="varType",p[p.arrayType=148]="arrayType",p[p.genericTypeInstantiation=149]="genericTypeInstantiation",p))(m||{}),we={0:"Bezeichner",2:v.identifier(),4:v.floatingPointLiteral(),6:v.booleanLiteral(),7:v.stringLiteral(),8:v.charLiteral(),9:"true",10:"false",13:"class",14:"this",15:"super",16:"new",17:"interface",18:"enum",19:"void",20:"abstract",21:"public",22:"protected",23:"private",24:"transient",25:"static",26:"synchronized",27:"extends",28:"implements",29:"while",30:"do",31:"for",32:"switch",33:"case",34:"default",35:"if",36:"then",37:"else",38:"return",39:"break",40:"continue",41:"null",42:"final",43:"instanceof",44:"throw",45:"try",46:"catch",47:"finally",48:"var",11:"print",12:"println",49:"(",50:")",51:"[",52:"]",53:"{",54:"}",55:"[]",58:".",60:"-",59:"%",61:"+",62:"*",63:"/",80:"'",81:'"',56:"--",57:"++",64:"<",65:">",66:"<=",67:">=",68:"==",69:"!=",70:"=",71:"+=",72:"-=",73:"*=",74:"/=",75:"%=",78:"&",79:"->",76:"&&",77:"||",97:"!",82:"&=",83:"^=",84:"|=",85:"<<=",86:">>=",87:">>>=",88:"|",89:"^",90:"~",93:"<<",92:">>",91:">>>",94:"?",98:";",95:":",96:"...",99:",",100:"\\",101:"@",102:v.space(),103:v.tab(),104:v.linebreak(),106:v.aToZ(),107:v.comment(),108:v.endOfText()},yh={"(":49,")":50,"[":51,"]":52,"{":53,"}":54,".":58,",":99,"-":60,"%":59,"+":61,"*":62,"/":63,"\\":100,"@":101,"'":80,'"':81,"<":64,">":65,"=":70,"&":76,"|":77,"!":97,"?":94,"^":89,"~":90,";":98,":":95,"...":96," ":102,슠:102," ":102," ":103,"\n":104,"\r":105},If={class:13,this:14,super:15,new:16,interface:17,enum:18,void:19,abstract:20,public:21,protected:22,private:23,transient:24,static:25,synchronized:26,extends:27,implements:28,while:29,do:30,for:31,switch:32,case:33,default:34,if:35,then:36,else:37,return:38,break:39,continue:40,null:41,final:42,instanceof:43,throw:44,try:45,catch:46,finally:47,var:48,true:9,false:10,print:11,println:12},vh={n:` `,r:"\r",t:" ",'"':'"',"'":"'","\\":"\\"};class Fr extends nh{constructor(t,e,i,n,s,a,l){super(t,e,i),this.type=n,this.isFinal=s,this.isEllipsis=a,this.trackMissingReadAccess=l}getCopyWithConcreteType(t){let e=this.type.getCopyWithConcreteType(t);return e==this.type?this:new Fr(this.identifier,this.identifierRange,this.module,e,this.isFinal,this.isEllipsis,this.trackMissingReadAccess)}getCopy(){return new Fr(this.identifier,this.identifierRange,this.module,this.type,this.isFinal,this.isEllipsis,this.trackMissingReadAccess)}getDeclaration(){return this.type.toString()+" "+this.identifier}getType(){return this.type}}class Df extends ih{constructor(t,e,i){super(t,e,i)}getType(){return this}}class xl extends Df{constructor(e,i,n){super(e,i,n);r(this,"isPrimitive");r(this,"genericTypeParameters");this.isPrimitive=!1}hasGenericParameters(){return this.isPrimitive||!this.genericTypeParameters?!1:this.genericTypeParameters.length>0}isUsableAsIndex(){return this.isPrimitive&&this.isUsableAsIndex()}registerExtendsImplementsOnAncestors(){}getInternalName(){return this.identifier}}class Nt extends xl{constructor(e){super(e.identifier,e.identifierRange,e.module);r(this,"isMainClass",!1);r(this,"innerTypes",[]);this.nonPrimitiveType=e}getAbsoluteName(){return this.nonPrimitiveType.getAbsoluteName()}getCompletionItemDetail(){return""}get runtimeClass(){return this.nonPrimitiveType.runtimeClass}get outerType(){return this.nonPrimitiveType.outerType}getCompletionItems(e,i,n,s,a){return this.nonPrimitiveType.getCompletionItems(e,i,n,s,a,!0)}fastExtendsImplements(e){return this.nonPrimitiveType.fastExtendsImplements(e)}getCopyWithConcreteType(e){return this}getDefaultValue(){return null}getPossibleMethods(e,i,n){return this.nonPrimitiveType.getPossibleMethods(e,i,n)}getField(e,i){return this.nonPrimitiveType.getField(e,i,!0)}canImplicitlyCastTo(e){return!1}toString(){return this.nonPrimitiveType.toString()}getDeclaration(){return this.nonPrimitiveType.getDeclaration()}getFields(){return this.nonPrimitiveType.getFields().filter(e=>e._isStatic)}}class Dr extends nh{constructor(t,e,i,n){super(t,e,n.module),this.identifierRange=e,this.type=i}getDeclaration(){var e;let t="";return this.isFinal&&(t+="final "),t+((e=this.type)==null?void 0:e.toString())+" "+this.identifier}getType(){return this.type}}class rh extends Tf{constructor(t,e,i,n,s,a){super(e,n),this.module=t,this.classContext=s,this.methodContext=a,n&&(s||(this.classContext=n.classContext),a||(this.methodContext=n.methodContext)),n||t.symbolTables.push(this),i&&(this.stackframe=new $f(s?1:0))}getSymbolsOnStackframeForDebugger(){var e;let t=[];if(this.identifierToSymbolMap.forEach((i,n)=>{t.push(i)}),this.classContext&&this.classContext!=((e=this.parent)==null?void 0:e.classContext)&&!(this.classContext instanceof Nt)){let i=new Dr("this",this.classContext.identifierRange,this.classContext,this);i.stackframePosition=0,t.push(i)}return t}findSymbolButNotInParentScopes(t){return this.identifierToSymbolMap.get(t)}findSymbol(t){return this.findSymbolIntern(t,m.keywordPrivate,!0,0)}findSymbolIntern(t,e,i,n){let s=this.identifierToSymbolMap.get(t);if(s)return{symbol:s,outerClassLevel:n,symbolTable:this};let a=this.methodContext;if(a!=null){let l=this.parent;for(;l&&l.methodContext==a;){if(s=l.identifierToSymbolMap.get(t),s)return{symbol:s,outerClassLevel:n,symbolTable:l};l=l.parent}}if(this.classContext&&i){let l=this.classContext.getField(t,m.keywordPrivate);if(l)return{symbol:l,outerClassLevel:n,symbolTable:null}}if(this.parent)return this.parent.classContext==this.classContext?this.parent.findSymbolIntern(t,e,!1,n):this.parent.findSymbolIntern(t,m.keywordProtected,!0,n+1)}addSymbol(t){var e;super.addSymbol(t),t instanceof nh&&((e=this.getStackFrame())==null||e.addSymbol(t,t instanceof Fr?"parameter":"localVariable"))}addSymbolWithoutAddingToStackframe(t){super.addSymbol(t)}insertInvisibleParameter(){var t;(t=this.getStackFrame())==null||t.insertInvisibleParameter()}getStackFrame(){let t=this;for(;!t.stackframe&&t.parent;)t=t.parent;return t.stackframe}getLocalVariableCompletionItems(t){let e=[];if(this.identifierToSymbolMap.forEach((i,n)=>{if(e.push({label:i.identifier,kind:O.CompletionItemKind.Variable,detail:i.getDeclaration(),insertText:i.identifier,filterText:i.identifier,range:t}),i.type&&i.type.dimension!==void 0){let s=i.type.dimension;e.push({label:i.identifier+"[]".repeat(s),kind:O.CompletionItemKind.Variable,insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,detail:i.getDeclaration(),insertText:i.identifier+this.getArraySnippetEnding(s),filterText:i.identifier,range:t})}}),this.parent){let i=this.parent.getLocalVariableCompletionItems(t).filter(n=>e.findIndex(s=>s.insertText==n.insertText)==-1);e=e.concat(i)}return e}getArraySnippetEnding(t){let e="";for(let i=0;i>16)+", "+((t&65280)>>8)+", "+(t&255)+")"}static parseColorToOpenGL(t){if(t==null)return{color:void 0,alpha:1};let e=this.predefinedColors[t];if(e!=null)return{color:e,alpha:1};let i=t.match(/^#([0-9a-f]{6})$/i);if(i&&i.length>1){let a=i[1];if(a)return{color:65536*parseInt(a.substr(0,2),16)+256*parseInt(a.substr(2,2),16)+parseInt(a.substr(4,2),16),alpha:1}}let n=t.match(/^#([0-9a-f]{8})$/i);if(n&&n.length>1){let a=n[1];if(a)return{color:65536*parseInt(a.substr(0,2),16)+256*parseInt(a.substr(2,2),16)+parseInt(a.substr(4,2),16),alpha:parseInt(a.substr(6,2),16)/255}}let s=t.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i);return s?{color:parseInt(s[1])*65536+parseInt(s[2])*256+parseInt(s[3]),alpha:1}:(s=t.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+\.?\d+)\s*\)$/i),s?{color:parseInt(s[1])*65536+parseInt(s[2])*256+parseInt(s[3]),alpha:parseFloat(s[4])}:{color:16711680,alpha:1})}}r(ze,"predefinedColors",{aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedAlmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgrey:11119017,darkgreen:25600,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,grau:8421504,green:32768,greenyellow:11403055,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgrey:13882323,lightgreen:9498256,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldLace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,sand:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});class bp{}r(bp,"staticInitializerComment",()=>d({de:"Code zum Initialisieren der statischen Attribute",en:"Code to initialize static fields"}));class ji extends Ef{constructor(e,i,n,s,a=m.keywordPublic){super(e,i,n);r(this,"_isStatic",!1);r(this,"_isFinal",!1);r(this,"_isTransient",!1);r(this,"classEnum");r(this,"internalName");r(this,"template");r(this,"initialValue");r(this,"initialValueIsConstant",!1);r(this,"initializedBeforeConstructor");r(this,"isInnerClassCopyOfOuterClassLocalVariable");this.module=n,this.type=s,this.visibility=a}getFieldIndentifier(){return this.getInternalName()}getCopyWithConcreteType(e){let i=this.type.getCopyWithConcreteType(e);if(i==this.type)return this;let n=new ji(this.identifier,this.identifierRange,this.module,i,this.visibility);return n.documentation=this.documentation,n.internalName=this.getInternalName(),n}getInternalName(){if(!this.internalName&&(this.internalName="$f_"+this.identifier,this.classEnum instanceof je)){let e=this.classEnum.getExtends();for(;e;)e.getFields().find(i=>i.identifier==this.identifier)&&(this.internalName="_"+this.internalName),e=e.getExtends()}return this.internalName}getValue(e,i){throw new Error("Method not implemented.")}getDeclaration(){var i,n;if((i=this.classEnum)!=null&&i.isMainClass)return this.toString();let e=we[this.visibility]+" ";return this._isStatic&&(e+="static "),this._isFinal&&(e+="final "),e+((n=this.type)==null?void 0:n.toString())+" "+this.identifier}toString(){var e;return((e=this.type)==null?void 0:e.toString())+" "+this.identifier}getType(){return this.type}isStatic(){return this._isStatic}isFinal(){return this._isFinal}isTransient(){return this._isTransient}}class o{}r(o,"objectConstructorComment",()=>d({de:"Erstellt ein neues Objekt.",en:"Creates a new object instance."})),r(o,"objectToStringComment",()=>d({de:"Wandelt das Objekt in eine Zeichenkette um und liefert diese zurück.",en:"Returns a String representation of this object."})),r(o,"objectEqualsComment",()=>d({de:"Gibt genau dann true zurück, wenn das Objekt und das übergebene Objekt 'gleich' sind.",en:'Indicates whether some other object is "equal to" this one.'})),r(o,"objectWaitComment",()=>d({de:"Bewirkt, dass der aktuelle Thread wartet bis in einem anderen Thread die Methode notify() oder notifyAll() dieses Objekts aufgerufen wird.",en:"Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object."})),r(o,"objectWaitWithTimeoutComment",()=>d({de:"Bewirkt, dass der aktuelle Thread wartet bis in einem anderen Thread die Methode notify() oder notifyAll() dieses Objekts aufgerufen wird oder das übergebene Timeout (in ms) abläuft.",en:"Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object or given timeout elapsed."})),r(o,"objectNotifyComment",()=>d({de:"Weckt einen der Threads auf, der auf den Monitor dieses Objektes wartet.",en:"Wakes up a single thread that is waiting on this object's monitor."})),r(o,"objectNotifyAllComment",()=>d({de:"Weckt alle Threads auf, die auf den Monitor dieses Objektes warten.",en:"Wakes up all threads that are waiting on this object's monitor."})),r(o,"objectGetClassComment",()=>d({de:"Gibt das Class-Objekt zurück, das der Klasse dieses Objekts zugeordnet ist.",en:"Returns the runtime class of this Object."})),r(o,"classFieldComment",()=>d({de:"Gibt das Class-Objekt zurück, das der Klasse dieses Objekts zugeordnet ist.",en:"Returns the runtime class of this Object."})),r(o,"classClassComment",()=>d({de:"Jeder Klasse/jedem enum ist ein Objekt der Klasse Class zugeordnet.",en:"To each class/enum belongs an object of class Class."})),r(o,"classGetNameComment",()=>d({de:"Gibt den Bezeichner der Klasse zurück.",en:"Returns the name of the class/enum."})),r(o,"stringClassComment",()=>d({de:"Ein String ist eine Zeichenkette.",en:"A String is a character sequence."})),r(o,"stringCompareToNullpointerException",()=>d({de:"Der Vergleich mit null ist nicht zulässig.",en:"Comparison with null is not possible."})),r(o,"stringConstructorComment",()=>d({de:"Erzeugt ein neues, leeres String-Objekt.",en:"Creates a new empty string object."})),r(o,"stringConstructorComment2",()=>d({de:"Erzeugt ein String-Objekt auf Grundlage des übergebenen.",en:"Initializes a newly created String object so that it represents the same sequence of characters as the argument; in other words, the newly created string is a copy of the argument string."})),r(o,"stringConstructorComment3",()=>d({de:"Erzeugt ein String-Objekt auf Grundlage des übergebenen char[].",en:"Initializes a newly created String object so that it represents the same sequence of characters as the argument; in other words, the newly created string is a copy of the argument string."})),r(o,"stringLengthComment",()=>d({de:"Gibt die Länge des Strings (== Anzahl an Zeichen) zurück.",en:"Returns the length of this string (number of characters)."})),r(o,"stringIndexOfComment1",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem der übergebene String zum ersten Mal auftritt. Gibt -1 zurück, falls dieser nicht im String enthalten ist.",en:"Returns the index within this string of the first occurrence of the specified substring. Returns -1 if String does not contain given String."})),r(o,"stringIndexOfComment2",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem der übergebene String NACH fromIndex zum ersten Mal auftritt. Gibt -1 zurück, falls dieser NACH fromIndex nicht im String enthalten ist.",en:"Returns the index within this string of the first occurrence of the specified substring, starting at the specified index. Returns -1 if String does not contain given String after given Index."})),r(o,"stringIndexOfComment3",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem das übergebene Zeichen zum ersten Mal auftritt. Gibt -1 zurück, falls dieses nicht im String enthalten ist.",en:"Returns the index within this string of the first occurrence of the specified character. Returns -1 if String does not contain given character."})),r(o,"stringIndexOfComment4",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem das übergebene Zeichen NACH fromIndex zum ersten Mal auftritt. Gibt -1 zurück, falls dieses NACH fromIndex nicht im String enthalten ist.",en:"Returns the index within this string of the first occurrence of the specified character, starting at the specified index. Returns -1 if String does not contain given character after given Index."})),r(o,"stringCharAtComment",()=>d({de:"Gibt das Zeichen an der angegebenen Position zurück. Das erste Zeichen im String hat Position 0.",en:"Returns the char value at the specified index. An index ranges from 0 to length() - 1. The first char value of the sequence is at index 0, the next at index 1, and so on, as for array indexing."})),r(o,"compareToIgnoreCaseComment",()=>d({de:"Vergleicht die beiden Zeichenketten lexikalisch ohne Berücksichtigung von Klein- und Großschreibung und gibt entsprechend -1, 0 oder 1 zurück.",en:"Compares two strings lexicographically, ignoring case differences. This method returns an integer whose sign is that of calling compareTo with normalized versions of the strings where case differences have been eliminated by calling Character.toLowerCase(Character.toUpperCase(character)) on each character."})),r(o,"stringConcatComment",()=>d({de:"Gibt einen String zurück, der entsteht, indem man den übergebenen String hinter diesen hängt. Verändert den String dabei aber nicht.",en:"Concatenates the specified string to the end of this string"})),r(o,"stringContainsComment",()=>d({de:"Gibt genau dann true zurück, wenn der String den übergebenen String enthält.",en:"Returns true if this String contains given String."})),r(o,"stringEndsWithComment",()=>d({de:"Gibt genau dann true zurück, wenn der String mit dem übergebenen String endet.",en:"Tests if this string ends with the specified suffix."})),r(o,"stringStartsWithComment",()=>d({de:"Gibt genau dann true zurück, wenn der String mit dem übergebenen String beginnt.",en:"Tests if this string starts with the specified praefix."})),r(o,"stringEqualsIgnoreCaseComment",()=>d({de:"Gibt genau dann true zurück, wenn der übergebene String diesem String bis auf Klein- und Großschreibung gleicht.",en:"Compares this String to another String, ignoring case considerations. Two strings are considered equal ignoring case if they are of the same length and corresponding characters in the two strings are equal ignoring case."})),r(o,"stringIsEmptyComment",()=>d({de:"Gibt genau dann true zurück, wenn der String leer ist, sich also keine Zeichen darin befinden. Das ist wiederum genau dann der Fall, wenn die Länge des Strings 0 beträgt.",en:"Returns true if, and only if, length() is 0."})),r(o,"stringLastIndexOfComment1",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem der übergebene String zum letzten Mal auftritt. Gibt -1 zurück, falls dieser nicht im String enthalten ist.",en:"Returns the index within this string of the last occurrence of the specified substring. Returns -1 if String does not contain given String."})),r(o,"stringLastIndexOfComment2",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem der übergebene String VOR fromIndex zum letzten Mal auftritt. Gibt -1 zurück, falls dieser VOR fromIndex nicht im String enthalten ist.",en:"Returns the index within this string of the last occurrence of the specified substring, starting at the specified index backwards. Returns -1 if String does not contain given String before given Index."})),r(o,"stringLastIndexOfComment3",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem das übergebene Zeichen zum letzten Mal auftritt. Gibt -1 zurück, falls dieses nicht im String enthalten ist.",en:"Returns the index within this string of the last occurrence of the specified character. Returns -1 if String does not contain given character."})),r(o,"stringLastIndexOfComment4",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem das übergebene Zeichen VOR fromIndex zum letzten Mal auftritt. Gibt -1 zurück, falls dieses VOR fromIndex nicht im String enthalten ist.",en:"Returns the index within this string of the last occurrence of the specified character, starting at the specified index backwards. Returns -1 if String does not contain given character before given Index."})),r(o,"stringToLowerCaseComment",()=>d({de:"Gibt einen String zurück, der den String in Kleinschreibung enthält.",en:"Converts all of the characters in this String to lower case using the rules of the default locale."})),r(o,"stringToUpperCaseComment",()=>d({de:"Gibt einen String zurück, der den String in Großschreibung enthält.",en:"Converts all of the characters in this String to upper case using the rules of the default locale."})),r(o,"stringSubstringComment1",()=>d({de:"Gibt den Teilstring ab der übergebenen Position zurück. Position 0 ist der Beginn des Strings.",en:"Returns a string that is a substring of this string from given position on. Position 0 is start of string."})),r(o,"stringSubstringComment2",()=>d({de:"Gibt den Teilstring zwischen den beiden übergebenen Positionen zurück. Position 0 ist der Beginn des Strings.",en:"Returns a string that is a substring of this string between given positions. Position 0 is start of string."})),r(o,"stringTrimComment",()=>d({de:"Gibt den String zurück, der entsteht, wenn man an Beginn und Ende alle unsichtbaren Zeichen (d.h. Leerzeichen, tabs und Zeilenumbrüche) entfernt.",en:"Returns a string whose value is this string, with any leading and trailing whitespace removed."})),r(o,"stringReplaceComment",()=>d({de:"Ersetzt alle Vorkommen von **target** durch **replacement** und gibt die entstandene Zeichenkette zurück. Die Zeichenkette selbst wird nicht verändert.",en:"Replaces each substring of this string that matches the literal target sequence with the specified literal replacement sequence."})),r(o,"stringReplaceAllComment",()=>d({de:"Durchsucht den String mit dem regulären Ausdruck (regex) und ersetzt **alle** Fundstellen durch **replacement**.",en:"Replaces each substring of this string that matches the given regular expression with the given replacement."})),r(o,"stringMatchesComment",()=>d({de:"Gibt genau dann true zurück, wenn der Wert der Zeichenkette dem regulären Ausdruck (regex) entspricht.",en:"Tells whether or not this string matches the given regular expression."})),r(o,"stringReplaceFirstComment",()=>d({de:"Durchsucht den String mit dem regulären Ausdruck (regex) und ersetzt **die erste** Fundstelle durch **replacement**.",en:"Replaces the first substring of this string that matches the given regular expression with the given replacement."})),r(o,"stringSplitComment",()=>d({de:"Teilt die Zeichenkette an den Stellen, die durch den regulären Ausdruck (regex) definiert sind, in Teile auf. Die Fundstellen des regex werden dabei weggelassen. Gibt die Teile als String-Array zurück.",en:"Splits this string around matches of the given regular expression."})),r(o,"hashCodeComment",()=>d({de:"Gibt den Hashcode des String zurück. Er wird wie folgt berechnet: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]. Dabei ist s[i] das i-te Zeichen des Strings.",en:"Returns a hash code for this string. The hash code for a String object is computed as s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]"})),r(o,"stringToCharArrayComment",()=>d({de:"Wandelt den String in ein char[] um.",en:"Converts given String to char[]."})),r(o,"stringValueOfComment",()=>d({de:"Wandelt den Parameterwert in eine Zeichenkette um.",en:"Returns the string representation of given value."})),r(o,"world3dSetBackgroundColorIntComment",()=>d({de:"Setzt die Hintergrundfarbe. Die Farbe wird als integer-Zahl erwartet. Am besten schreibt man sie als Hexadezimalzahl, also z.B. setBackgroundColor(0xff8080).",en:"Sets world's background color. Color is coded as integer number, e.g. in hexadecimal writing (setBackgroundColor(0xff8080))."})),r(o,"worldSetBackgroundColorColorComment",()=>d({de:"Setzt die Hintergrundfarbe. Die Farbe wird als Color-Objekt erwartet.",en:"Sets world's background color. Color is coded as color object."})),r(o,"world3dSetBackgroundColorStringComment",()=>d({de:'Setzt die Hintergrundfarbe. Die Farbe ist entweder eine vordefinierte Farbe ("schwarz", "rot", ...) oder eine css-Farbe der Art "#ffa7b3" (ohne alpha), "#ffa7b380" (mit alpha), "rgb(172, 22, 18)" oder "rgba(123, 22,18, 0.3)',en:`Sets world's background color. Color is coded as predefined color ("black", "red", ...) or css color like "#ffa7b3" (ohne alpha), "#ffa7b380" (mit alpha), "rgb(172, 22, 18)" oder "rgba(123, 22,18, 0.3).`})),r(o,"world3dAddMouseListenerComment",()=>d({de:"Fügt einen neuen MouseListener hinzu, dessen Methoden bei Mausereignissen aufgerufen werden.",en:"Adds a MouseLister object. It's methods are called every time a mouse event occurs."})),r(o,"worldGetLightsComment",()=>d({de:"Gibt ein Array mit allen Light3d-Objekten zurück.",en:"Returns an array containing all Light3d objects"})),r(o,"worldRemoveAllLightsComment",()=>d({de:"Entfernt alle Light3d-Objekte.",en:"Removes all Light3d objects."})),r(o,"worldRemoveLightComment",()=>d({de:"Entfernt das Light3d-Objekt. Die Lichtquelle ist dann nicht mehr aktiv.",en:"Removes given Light3d object."})),r(o,"worldAddLightComment",()=>d({de:"Fügt der Szene die gegebene Lichtquelle hinzu.",en:"Adds given Light3d object."})),r(o,"worldMoveComment",()=>d({de:`Verschiebt alle Objekte der Welt um dx nach rechts und dy nach unten. Tipp: Falls Objekte NICHT mitverschoben werden sollen, rufe die Methode setStatic(true) auf.`,en:`Moves all objects in this word by dx to the right and by dy down. Hint: If objects should NOT move with world, invoke method setStatic(true) for them.`})),r(o,"worldRotateComment",()=>d({de:`Rotiert die Welt um den angegebenen Winkel (in Grad!) im Urzeigersinn. Drehpunkt ist der Punkt (centerX, centerY). Tipp: Falls Objekte NICHT mitgedreht werden sollen, rufe die Methode setStatic(true) auf.`,en:`Rotates world by angleInDeg clockwise. Hint: If objects should NOT rotate with world, invoke method setStatic(true) for them.`})),r(o,"worldScaleComment",()=>d({de:`Streckt die Welt um den angegebenen Faktor. Zentrum der Streckung ist (CenterX, centerY). Drehpunkt ist der Punkt (centerX, centerY). Tipp: Falls Objekte NICHT mitgedreht werden sollen, rufe die Methode setStatic(true) auf.`,en:`Scales world by given factorr. Pivot of scaling is (centerX, centerY). Hint: If objects should NOT scale with world, invoke method setStatic(true) for them.`})),r(o,"worldFlipYComment",()=>d({de:"Spiegelt die Welt an der horizontalen Achse. Mit dieser Methode kann erreicht werden, dass der Ursprung (0,0) unten links ist und die Y-Koordinaten nach oben hin größer werden.",en:"Flips the world along the horizontal axis. With this method it is possible to have the origin (0,0) at bottom-left and Y-coordinates increasing upwards."})),r(o,"worldSetCoordinateSystemComment",()=>d({de:"Setzt das Koordinatensystem der Welt so, dass (left, top) die linke obere Ecke des sichtbaren Bereiches ist, width seine Breite und height seine Höhe.",en:"Sets coordinate system of world in a way so that (left, top) is top-left corner of visible view, width is it's width and height it's height."})),r(o,"world3dSetCursorComment",()=>d({de:"Ändert die Form des Mauscursors im gesamten Grafikbereich. Mögliche Werte: siehe https://developer.mozilla.org/en-US/docs/Web/CSS/cursor.",en:"Sets mouse cursor image inside graphic window. For valid values see: https://developer.mozilla.org/en-US/docs/Web/CSS/cursor"})),r(o,"world3dClearComment",()=>d({de:"Löscht alle Grafikobjekte in der Welt, indem es ihre destroy()-Methode aufruft.",en:"Clears all graphic objects inside this world by calling it's destroy() method."})),r(o,"worldGetWidthComment",()=>d({de:"Gibt die Breite des sichtbaren Bereichs der Welt zurück.",en:"Returns width of visible part of world."})),r(o,"worldGetHeightComment",()=>d({de:"Gibt die Höhe des sichtbaren Bereichs der Welt zurück.",en:"Returns height of visible part of world."})),r(o,"worldGetLeftComment",()=>d({de:"Gibt die X-Koordinate der linken oberen Ecke des sichtbaren Bereichs der Welt zurück.",en:"Returns x-coordinate of top-left corner of visible part of world."})),r(o,"worldGetTopComment",()=>d({de:"Gibt die Y-Koordinate der linken oberen Ecke des sichtbaren Bereichs der Welt zurück.",en:"Returns y-coordinate of top-left corner of visible part of world."})),r(o,"worldGetDefaultGroupComment",()=>d({de:"Gibt die Gruppe zurück, zu der aktuell alle neuen Objekte automatisch hinzugefügt werden. Falls gerade keine defaultGroup festgelegt ist, wird null zurückgegeben.",en:"Returns group to which all new graphic objects are added by default. If no default group is set, this method returns null."})),r(o,"worldFollowComment",()=>d({de:"Verschiebt die Welt so, dass das übergebene graphische Objekt (shape) sichtbar wird. Verschoben wird nur, wenn das Objekt weniger als frameWidth vom Rand entfernt ist und die Welt nicht über die gegebenen Koordinaten xMin, xMax, yMin und yMax hinausragt.",en:"Moves world coordinate system to make given shape visible again. It is only moved if the shape is less than frameWidth from the edge and the world does not extend beyond the given coordinates xMin, xMax, yMin and yMax."})),r(o,"worldSetDefaultGroupComment",()=>d({de:"Legt die Gruppe fest, zu der aktuell alle neuen Objekte automatisch hinzugefügt werden. Falls keine defaultGroup gewünscht ist, rufen Sie setDefaultGroup(null) auf.",en:"Sets group to which all new graphic objects are added by default. For 'no default group' call setDefaultGroup(null)."})),r(o,"actorWorld2dDoesntexistException",()=>d({de:"Es ist derzeit kein World-Objekt vorhanden. Diese wird automatisch erstellt, sobald ein Grafikobjekt erstellt wird.",en:"There is currently no World object. It will be automatically created once a graphics object is created."})),r(o,"actorWorld2dDoesntexistOn3dObjectException",()=>d({de:"Es ist derzeit kein World-Objekt vorhanden. Diese wird automatisch erstellt, sobald ein Grafikobjekt erstellt wird. Um das World3d-Objekt zu erhalten, nutze stattdessen .get3dWorld().",en:"There is currently no World object. It will be automatically created once a graphics object is created. To get the World3d object, use .getWorld3d() instead."})),r(o,"actorWorld3dDoesntexistException",()=>d({de:"Es ist derzeit kein World3d-Objekt vorhanden. Dieses wird automatisch erstellt, sobald ein 3d-Grafikobjekt erstellt wird.",en:"There is currently no World3d object. It will be automatically created once a 3d graphics object is created."})),r(o,"actorActMethodComment",()=>d({de:"Die Methode act wird 30-mal pro Sekunde aufgerufen. Wenn Sie sie in einer Unterklasse überschreiben, so wird Ihre Methode 30-mal pro Sekunde aufgerufen.",en:"Method act is called 30 times per second. Overwrite it to get your own method being called 30 times per second."})),r(o,"actorActMethodComment2",()=>d({de:"Die Methode act wird 30-mal pro Sekunde aufgerufen. Wenn Sie sie in einer Unterklasse überschreiben, so wird Ihre Methode 30-mal pro Sekunde aufgerufen. DletaTime ist die seit dem letzten Aufruf verstrichene Zeit in ms.",en:"Method act gets called 30 times per second. Overwrite it to get your own method being called 30 times per second. DeltaTime is time since last call in ms."})),r(o,"actorOnKeyTypedComment",()=>d({de:"onKeyTyped wird jedes Mal dann aufgerufen, wenn eine Taste heruntergedrückt und anschließend losgelassen wird. Der Parameter key enthält die gedrückte Taste. Im Fall von Sondertasten (Enter, Pfeiltasten...) wird eine der Konstanten Key.Enter, Key.ArrowUp, ... übergeben.",en:"onKeyTyped gets called after a key had been pressed and subsequently released. The key is stored in parameter key. For special keys (like enter, arrow keys, ...) use constants Key.Enter, Key.ArrowUp, ..."})),r(o,"actorOnKeyUpComment",()=>d({de:"onKeyUp wird jedes Mal dann aufgerufen, wenn eine Taste losgelassen wird. Der Parameter key enthält die gedrückte Taste. Im Fall von Sondertasten (Enter, Pfeiltasten...) wird eine der Konstanten Key.Enter, Key.ArrowUp, ... übergeben.",en:"onKeyUP gets called after a key had been released. The key is stored in parameter key. For special keys (like enter, arrow keys, ...) use constants Key.Enter, Key.ArrowUp, ..."})),r(o,"actorOnKeyDownComment",()=>d({de:"onKeyDown wird jedes Mal dann aufgerufen, wenn eine Taste gedrückt wird. Der Parameter key enthält die gedrückte Taste. Im Fall von Sondertasten (Enter, Pfeiltasten...) wird eine der Konstanten Key.Enter, Key.ArrowUp, ... übergeben.",en:"onKeyDown gets called after a key had been pressed down. The key is stored in parameter key. For special keys (like enter, arrow keys, ...) use constants Key.Enter, Key.ArrowUp, ..."})),r(o,"getWorldComment",()=>d({de:"Gibt das aktuelle World-Objekt zurück.",en:"Returns current World object."})),r(o,"getAllShapesComment",()=>d({de:"Gibt ein Array zurück, das alle graphischen Objekte der Welt enthält.",en:"Returns an array containing all objects in this world."})),r(o,"getWorld3dComment",()=>d({de:"Gibt das aktuelle World3d-Objekt zurück.",en:"Returns current World3d object."})),r(o,"actorIsActingComment",()=>d({de:"Gibt genau dann true zurück, wenn die act-Methode 30-mal pro Sekunden aufgerufen wird. Nutzen Sie die Methoden stopActing und restartActing um dies zu deaktivieren bzw. zu aktivieren.",en:"Returns true if act method is called regularly 30 time sper second. Use Methods stopActing and restartActing to disable/enable this behaviour."})),r(o,"actorIsDestroyedComment",()=>d({de:"Gibt genau dann true zurück, wenn das Objekt durch Aufruf der Methode destroy() zerstört worden ist.",en:"Returns true if object had been destroyed by calling method destroy()."})),r(o,"actorStopActingComment",()=>d({de:"Sorgt dafür, dass die act-Methode dieses Objekts zukünftig nicht mehr 30-mal pro Sekunde aufgerufen wird.",en:"Stops the act method of this object being called 30 times per second."})),r(o,"actorRestartActingComment",()=>d({de:"Sorgt dafür, dass die act-Methode dieses Objekts zukünftig wieder 30-mal pro Sekunde aufgerufen wird.",en:"Restarts the act method of this object being called 30 times per second."})),r(o,"actorIsGamepadConnectedComment",()=>d({de:"Gibt true zurück, falls das Gamepad mit dem übergebenen Index angeschlossen ist. VORSICHT: Das erste Gamepad hat Index 0.",en:"If it returns true, the gamepad is connected to the passed index. CAUTION: The first gamepad has index 0."})),r(o,"actorIsGamepadButtonDownComment",()=>d({de:"Gibt genau dann true zurück, wenn der Button buttonIndex des Gamepads GamepadIndex gedrückt ist.",en:"Returns true if button with given index is held down. Caution: First Gamepad has index 0!"})),r(o,"actorGetGamepadAxisValueComment",()=>d({de:"Gibt den Wert des Gamepad-Steuerknüppels mit Index axisIndex zurück.",en:"Returns value of Gamepad-stick with given index on given axis."})),r(o,"world3dColorNull",()=>d({de:"Null kann nicht als Farbe übergeben werden.",en:"Null cannot be used as a color."})),r(o,"shapeClassComment",()=>d({de:"Die Klasse Shape ist Oberklasse aller graphischen Objekte.",en:"Class Shape is base class of all graphical objects."})),r(o,"shapeOnMouseUpComment",()=>d({de:"Wird aufgerufen, wenn sich der Mauspfeil über dem Objekt befindet und der Benutzer eine Maustaste loslässt.",en:"Is called if mouse cursor is on object and user releases a mouse button."})),r(o,"shapeOnMouseDownComment",()=>d({de:"Wird aufgerufen, wenn sich der Mauspfeil über dem Objekt befindet und der Benutzer eine Maustaste drückt.",en:"Is called if mouse cursor is on object and user presses a mouse button."})),r(o,"shapeOnMouseMoveComment",()=>d({de:"Wird aufgerufen, wenn sich der Mauspfeil über dem Objekt befindet und der Benutzer die Maus bewegt.",en:"Is called if mouse cursor is on object and user moves mouse."})),r(o,"shapeStartTrackingEveryMouseMovementComment",()=>d({de:'Sorgt dafür, dass ab jetzt JEDE Bewegung des Mauszeigers (auch wenn sich dieser außerhalb des Objekts befindet) ein MouseMove-Ereignis für dieses Objekt auslöst. -> Praktisch zur Umsetzung des "Ziehens" von Objekten mit der Maus!',en:"Makes the object react to mouse move events even if it doesn't contain the mouse pointer. Hint: use this method to create drag/drop-functionality."})),r(o,"shapeCopyComment",()=>d({de:"Erstellt eine Kopie des Grafikobjekts und gibt sie zurück.",en:"Creates and returns a copy of this object."})),r(o,"shapeStopTrackingEveryMouseMovementComment",()=>d({de:'Sorgt dafür, dass ab jetzt nur noch dann Bewegungen des Mauszeigers ein MouseMove-Ereignis für dieses Objekt auslösen, wenn sich der Mauszeiger über dem Objekt befindet. -> Praktisch zur Umsetzung des "Ziehens" von Objekten mit der Maus!',en:"Makes the object react to mouse move events only if it contains the mouse pointer. Hint: use this method to create drag/drop-functionality."})),r(o,"shapeOnMouseEnterComment",()=>d({de:"Wird aufgerufen, wenn der Mauspfeil das Objekt betritt.",en:"Is called if mouse cursor enters object."})),r(o,"shapeOnMouseLeaveComment",()=>d({de:"Wird aufgerufen, wenn der Mauspfeil das Objekt verlässt.",en:"Is called if mouse cursor leaves object."})),r(o,"shapeMoveComment",()=>d({de:"Verschiebt das Grafikobjekt um dx Pixel nach rechts und um dy Pixel nach unten.",en:"Moves object dx pixels to the right and dy pixels down "})),r(o,"shapeRotateComment1",()=>d({de:"Dreht das Grafikobjekt um den angegebenen Winkel (in Grad!). Drehpunkt ist (centerX, centerY).",en:"Rotates object by given angle (in degrees!). Center of rotation is (centerX, centerY)"})),r(o,"shapeRotateComment2",()=>d({de:"Dreht das Grafikobjekt um den angegebenen Winkel (in Grad!). Der Drehpunkt ist die 'Mitte' des Objekts (abhängig von seiner Form).",en:"Rotates object by given angle (in degrees!). Pivot point is 'center' of object (depends on it's shape)."})),r(o,"shapeScaleComment1",()=>d({de:"Streckt das Grafikobjekt um den angegebenen Faktor. Das Zentrum der Streckung ist der Punkt (centerX, centerY)",en:"Scales object by given factor. Center of scaling is at (centerX, centerY)."})),r(o,"shapeSetScaleComment",()=>d({de:"Streckt das Grafikobjekt auf den angegebenen Faktor. Das Zentrum der Streckung ist die 'Mitte' des Objekts (abhängig von seiner Form).",en:"Scales object to given factor. Center of scaling is 'center' of object (depends on it's shape)."})),r(o,"shapeScaleComment2",()=>d({de:"Streckt das Grafikobjekt um den angegebenen Faktor. Das Zentrum der Streckung ist die 'Mitte' des Objekts (abhängig von seiner Form).",en:"Scales object by given factor. Center of scaling is 'center' of object (depends on it's shape)."})),r(o,"shapeMirrorXComment",()=>d({de:"Spiegelt das Objekt in X-Richtung",en:"Mirrors object in x-direction"})),r(o,"shapeMirrorYComment",()=>d({de:"Spiegelt das Objekt in Y-Richtung",en:"Mirrors object in y-direction"})),r(o,"shapeOutsideViewComment",()=>d({de:"Gibt genau dann true zurück, wenn sich die Bounding Box des Objekts außerhalb des sichtbaren Bereichs befindet.",en:"Returns true if and only if bounding box of object is outside world boundaries."})),r(o,"shapeDefineDirectionComment",()=>d({de:`Setzt die Blickrichtung des graphischen Objekts. Dies ist die Richtung, in die es durch Aufruf der Methode forward bewegt wird. Bemerkung: die Methode rotate ändert auch die Blickrichtung!`,en:"Defines direction of object. Direction is used when calling method 'forward'."})),r(o,"shapeDirectionRelativeToComment",()=>d({de:"Gibt die Richtung (top, right, bottom oder left) zurück, in der das graphische Objekt relativ zum übergebenen graphischen Objekt steht.",en:"Returns direction (top, right, bottom, left) of this shape's position relative to the other shape's position."})),r(o,"shapeAlreadyDestroyedError",()=>d({de:"Das im Parameter übergebene Shape wurde mit der Methode destroy() bereits zerstört.",en:"Shape given in parameter is already destroyed."})),r(o,"shapeNullError",()=>d({de:"Das im Parameter übergebene Shape hat den Wert null.",en:"Shape given in parameter has value null."})),r(o,"shapeMoveBackFromComment",()=>d({de:"Rückt das Objekt entlang der letzten durch Aufruf der Methode move() vorgegebenen Richtung zurück, bis es das übergebene Objekt gerade noch (keepColliding == true) bzw. gerade nicht mehr (keepColliding == false) berührt.",en:"Moves the object back along the last direction specified by calls to method move() until it just (keepColliding == true) or no longer touches the passed object (keepColliding == false)."})),r(o,"shapeForwardComment",()=>d({de:`Bewegt das Objekt um die angegebene Länge in Richtung seiner Blickrichtung. Bemerkung: Die Blickrichtung kann mit defineDirection gesetzt werden.`,en:`Moves object forward by given distance. Hint: Set forward direction with method 'defineDirection'.`})),r(o,"shapeAngleComment",()=>d({de:"Richtung des Objekts (in Grad)",en:"Angle of object (in degrees)"})),r(o,"shapeSetAngleComment",()=>d({de:"Dreht das Objekt hin zur angegebenen Richtung (in Grad)",en:"Rotates object to given angle."})),r(o,"shapeCenterXComment",()=>d({de:"X-Koordinate des Diagonalenschnittpunkts der BoundingBox des Objekts",en:"X coordinate of the diagonal intersection of the object's BoundingBox"})),r(o,"shapeCenterYComment",()=>d({de:"Y-Koordinate des Diagonalenschnittpunkts der BoundingBox des Objekts",en:"Y coordinate of the diagonal intersection of the object's BoundingBox"})),r(o,"shapeScaleFactorComment",()=>d({de:"Streckungsfaktor des Shapes",en:"Scale factor of this Shape object"})),r(o,"shapeContainsPointComment",()=>d({de:"Gibt genau dann true zurück, wenn die Figur den angegebenen Punkt enthält.",en:"Returns true if and only if this shape contains given point."})),r(o,"shapeMoveToComment",()=>d({de:"Verschiebt das Grafikobjekt so, dass sich sein 'Mittelpunkt' an den angegebenen Koordinaten befindet.",en:"Moves object in a way so that it's 'center' is at (x,y)."})),r(o,"shapeSetYComment",()=>d({de:"Setzt die Y-Koordinate des Objekts.",en:"Sets the Y coordinate of the object."})),r(o,"shapeSetXComment",()=>d({de:"Setzt die X-Koordinate des Objekts.",en:"Sets the X coordinate of the object."})),r(o,"shapeDefineCenterComment",()=>d({de:"Setzt fest, wo der 'Mittelpunkt' des Objekts liegen soll. Dieser Punkt wird als Drehpunkt der Methode rotate, als Zentrum der Methode Scale und als Referenzpunkt der Methode moveTo benutzt.",en:"Defines 'center' of object. This center is used in methods rotate, scale and moveTo."})),r(o,"shapeDefineCenterRelativeComment",()=>d({de:`Setzt fest, wo der 'Mittelpunkt' des Objekts liegen soll. Dabei bedeutet (XRel/YRel) = (0/0) die linke obere Ecke der Bounding Box des Objekts, (XRel/YRel) = (1/1) die rechte untere Ecke. Defaultwert ist (XRel/YRel) = (0.5/0.5), also der Diagonalenschnittpunkt der Bounding Box. Dieser Punkt wird als Drehpunkt der Methode rotate, als Zentrum der Methode Scale und als Referenzpunkt der Methode moveTo benutzt. VORSICHT: Diese Methode arbeitet nicht mehr korrekt, wenn das Objekt schon gedreht wurde!`,en:"Definec center of object relative to it's bounding box. (0,0) means: center at top left oft boundingbox, (1/1) means: center at bottom right of bounding box. Beware: this method doesn't work as expected if object had been rotated."})),r(o,"shapeSetDefaultVisibilityComment",()=>d({de:"Setzt den Standardwert für das Attribut 'visible'. Dieser wird nachfolgend immer dann verwendet, wenn ein neues grafisches Objekt instanziert wird.",en:"Sets default value for field 'visibility' for all subsequently instantiated graphic objects."})),r(o,"shapeSetVisibleComment",()=>d({de:"Macht das Grafikobjekt sichtbar (visible == true) bzw. unsichtbar (visible == false).",en:"Sets graphic object visible or invisible."})),r(o,"shapeSetStaticComment",()=>d({de:"setStatic(true) hat zur Folge, dass die Ansicht des Objekts durch Transformationen des World-Objekts nicht verändert wird.",en:"setStatic(true) makes the object not follow subsequent transformations of world object."})),r(o,"shapeCollidesWithComment",()=>d({de:"Gibt genau dann true zurück, wenn die Figur mit der anderen Figur überlappt.",en:"Returns true if graphic objects collide."})),r(o,"shapeCollidesWithAnyShapeComment",()=>d({de:"Gibt genau dann true zurück, wenn die Figur mit irgendeiner anderen Figur überlappt.",en:"Returns true if graphic object collides with any other graphic object."})),r(o,"shapeGetFirstCollidingShapeComment",()=>d({de:"Falls die Figur mit mindestens einer anderen Figur überlappt, wird die erste gefundene zurückgegeben. Ansonsten wird null zurückgegeben.",en:"If this graphic object collides with one/several other graphic objects then return the first one found. Otherwise return null."})),r(o,"shapeReactToMouseEventsWhenInvisibleComment",()=>d({de:"Legt fest, ob das Objekt auf Mausevents (buttondown, mouse move, ...) reagiert, wenn es unsichtbar ist.",en:"Defines whether object reacts to mouse events (buttondown, mouse move, ...) when it is invisible."})),r(o,"shapeCollidesWithFillColorComment",()=>d({de:"Gibt genau dann true zurück, wenn die Figur mit irgendeiner anderen Figur mit der angegebenen Füllfarbe überlappt.",en:"Returns true if graphic object collides with any other graphic object with given fillColor."})),r(o,"shapeGetFirstCollidingSpriteComment",()=>d({de:"Falls dieses Grafikobjekt gerade mindestens ein Sprite mit dem übergebenen Bildindex (-1 bedeutet: mit irgendeinem BildIndex) berührt, wird das erste dieser Sprites zurückgegeben.",en:"If this graphic object collides with any sprite with given imageIndex then this method returns the first one. Use imageIndex == -1 to search for ANY colliding Sprite."})),r(o,"shapeGetCollidingShapesComment",()=>d({de:"Gibt alle Elemente der Group zurück, die mit diesem graphischen Objekt kollidieren.",en:"Returns each element of given Group whicht collide with this object."})),r(o,"shapeBringToFrontComment",()=>d({de:"Setzt das Grafikobjekt vor alle anderen innerhalb der Gruppe.",en:"Displays this object in front of all others inside the same group."})),r(o,"shapeSendToBackComment",()=>d({de:"Setzt das Grafikobjekt hinter alle anderen innerhalb der Gruppe.",en:"Displays this object behind all others inside the same group."})),r(o,"shapeTintComment",()=>d({de:"Überzieht das Grafikobjekt mit der angegebenen Farbe. Diese Methode wirkt nur bei denjenigen Grafikobjekten, die die Methode tint unterstützen.",en:"Sets tint color of this object."})),r(o,"fsGetFillColorComment",()=>d({de:"Gibt die Füllfarbe dieses Objekts als Color-Objekt zurück.",en:"Returns fill color of this object as a Color object."})),r(o,"fsSetFillColorCommentInt",()=>d({de:`Setzt die Füllfarbe des Objekts. Die Farbe wird als integer-Wert angegeben. Tipp: Schreibe die Farbe in der Form 0xffffff, dann zeigt die IDE ein kleines Farbquadrat, mit dem Du einen Color Picker öffnen kannst.`,en:`Set fill color from int value. Hint: If you write fillcolor as hex value like 0xffffff then the IDE shows a little color patch. Hover over it to open a color picker.`})),r(o,"fsSetFillColorCommentColor",()=>d({de:"Setzt die Füllfarbe des Objekts. Die Farbe wird als Color-Objekt angegeben.",en:"Set fill color from Color object value."})),r(o,"fsColorIsNullException",()=>d({de:"Die angegebene Farbe ist null.",en:"Color is null."})),r(o,"fsSetFillColorCommentIntDouble",()=>d({de:`Setzt die Füllfarbe des Objekts. Die Farbe wird als integer-Wert angegeben, der alpha-Wert (Durchsichtigkeit) als double-Wert. 0.0 bedeutet komplett durchsichtig, 1.0 bedeutet kompett undurchsichtig. Tipp: Schreibe die Farbe in der Form 0xffffff, dann zeigt die IDE ein kleines Farbquadrat, mit dem Du einen Color Picker öffnen kannst.`,en:`Set fill color from int value. Alpha-value is given as double value: 0.0 means completely transparent, 1.0 means completely opaque. Hint: If you write fillcolor as hex value like 0xffffff then the IDE shows a little color patch. Hover over it to open a color picker.`})),r(o,"fsSetFillColorCommentString",()=>d({de:'Setzt die Füllfarbe des Objekts. Die Farbe wird als Zeichenkette angegeben. Möglich sind Farbkonstanten ("rot", "red", ...) oder css-Syntax wie "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)".',en:'Set fill color from string value. Possible values are color constants like "red", "green", "blue", ... and css syntax like "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)"'})),r(o,"fsSetFillColorCommentStringDouble",()=>d({de:'Setzt die Füllfarbe des Objekts. Die Farbe wird als Zeichenkette angegeben, der Alpha-Wert (Undurchsichtigkeit) als double-Wert zwischen 0.0 (komplett durchsichtig) und 1.0 (komplett undurchsichtig). Möglich sind Farbkonstanten ("rot", "red", ...) oder css-Syntax wie "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)".',en:'Set fill color from string value, alpha-Value (opacity between 0.0 and 1.0) as double value. Possible values are color constants like "red", "green", "blue", ... and css syntax like "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)"'})),r(o,"fsGetBorderColorComment",()=>d({de:"Gibt die Randfarbe dieses Objekts als Color-Objekt zurück.",en:"Returns border color of this object as "})),r(o,"fsSetBorderColorCommentInt",()=>d({de:`Setzt die Randfarbe des Objekts. Die Farbe wird als integer-Wert angegeben. Tipp: Schreibe die Farbe in der Form 0xffffff, dann zeigt die IDE ein kleines Farbquadrat, mit dem Du einen Color Picker öffnen kannst.`,en:`Set border color as int value. Hint: If you write BorderColor as hex value like 0xffffff then the IDE shows a little color patch. Hover over it to open a color picker.`})),r(o,"fsSetBorderColorCommentColor",()=>d({de:"Setzt die Randfarbe des Objekts. Die Farbe wird als Color-Objekt angegeben.",en:"Set border color from color object."})),r(o,"fsSetBorderColorCommentIntDouble",()=>d({de:`Setzt die Randfarbe des Objekts. Die Farbe wird als integer-Wert angegeben, der alpha-Wert (Durchsichtigkeit) als double-Wert. 0.0 bedeutet komplett durchsichtig, 1.0 bedeutet kompett undurchsichtig. Tipp: Schreibe die Farbe in der Form 0xffffff, dann zeigt die IDE ein kleines Farbquadrat, mit dem Du einen Color Picker öffnen kannst.`,en:`Set border color as int value. Alpha-value is given as double value: 0.0 means completely transparent, 1.0 means completely opaque. Hint: If you write BorderColor as hex value like 0xffffff then the IDE shows a little color patch. Hover over it to open a color picker.`})),r(o,"fsSetBorderColorCommentString",()=>d({de:'Setzt die Randfarbe des Objekts. Die Farbe wird als Zeichenkette angegeben. Möglich sind Farbkonstanten ("rot", "red", ...) oder css-Syntax wie "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)".',en:'Set border color as string value. Possible values are color constants like "red", "green", "blue", ... and css syntax like "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)"'})),r(o,"fsSetBorderColorCommentStringDouble",()=>d({de:'Setzt die Randfarbe des Objekts. Die Farbe wird als Zeichenkette angegeben, der Alpha-Wert (Undurchsichtigkeit) als double-Wert zwischen 0.0 (komplett durchsichtig) und 1.0 (komplett undurchsichtig). Möglich sind Farbkonstanten ("rot", "red", ...) oder css-Syntax wie "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)".',en:'Set border color as string value, alpha-Value (opacity between 0.0 and 1.0) as double value. Possible values are color constants like "red", "green", "blue", ... and css syntax like "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)"'})),r(o,"fsSetBorderWidthComment",()=>d({de:"Setzt die Randbreite des Objekts in Pixeln.",en:"Sets border width of this object in pixels."})),r(o,"fsGetBorderWidthComment",()=>d({de:"Gibt die Randbreite dieses Objekts in Pixeln zurück.",en:"Returns border width of this object in pixels."})),r(o,"fsSetAlphaComment",()=>d({de:"Setzt den Alpha-Wert des Objekts. Dabei bedeutet 0.0 ganz durchsichtig, 1.0 ganz undurchsichtig.",en:"Sets alpha value (opacity) of this object. 0.0 means completely transparent, 1.0 means completely opaque."})),r(o,"fsGetAlphaComment",()=>d({de:"Gibt den Alpha-Wert des Objekts zurück. Dabei bedeutet 0.0 ganz durchsichtig, 1.0 ganz undurchsichtig.",en:"Returns alpha value (opacity) of this object. 0.0 means completely transparent, 1.0 means completely opaque."})),r(o,"fsSetDefaultBorderComment1",()=>d({de:"Setzt die Default-Werte für Randbreite und Randfarbe. Allen danach neu erzeugten Objekten werden anfangs diese Eigenschaften zugewiesen.",en:"Sets default border width and border color. All subsequently created objects get these border width and border color."})),r(o,"fsSetDefaultBorderComment2",()=>d({de:"Setzt die Default-Werte für Randbreite, Randfarbe und alpha-Wert (Durchsichtigkeit). Allen danach neu erzeugten Objekten werden anfangs diese Eigenschaften zugewiesen.",en:"Sets default border width and border color and alpha value. All subsequently created objects get these border width and border color."})),r(o,"fsSetDefaultFillColor",()=>d({de:"Setzt den Defaultwert für die Füllfarbe. Allen danach neu erzeugten Objekten wird anfangs diese Eigenschaft zugewiesen.",en:"Sets default fill color. All subsequently created objects get this fill color."})),r(o,"groupClassComment",()=>d({de:"Eine Gruppe kann mehrere graphische Objekte (auch andere Gruppen) enthalten und miteinander verschieben, drehen, ...",en:"A group can contain several graphic objects (also other groups) and move, rotate, ... them together."})),r(o,"groupConstructorComment",()=>d({de:"Erstellt eine neue Gruppe",en:"Creates a new Group"})),r(o,"groupAddComment",()=>d({de:"Fügt der Gruppe graphische Elemente hinzu. Tipp: Diese Methode kann beliebig viele Parameter haben.",en:"Adds graphic elements to this group. Hint: This method can have multiple parameters. "})),r(o,"groupRemoveComment",()=>d({de:"Entfernt das übergebene Objekt aus der Gruppe. Das Objekt wird dadurch nicht verändert.",en:"Removes given object from this group."})),r(o,"groupRemoveWithIndexComment",()=>d({de:"Entfernt das Element mit dem gegebenen Index aus der Gruppe. Das erste Element hat Index 0.",en:"Removes element with given index from group. First element has index 0."})),r(o,"groupGetComment",()=>d({de:"Gibt das Element mit dem angegebenen Index zurück. Das erste Element der Gruppe hat Index 0.",en:"Returns element with given index. First element in group has index 0."})),r(o,"groupIndexOfComment",()=>d({de:"Gibt den Index des elements innerhalb der Gruppe zurück. Falls das Element nicht in der Gruppe enthalten ist, wird -1 zurückgegeben.",en:"Returns index of given element inside group. First element in group has index 0."})),r(o,"groupSizeComment",()=>d({de:"Gibt die Anzahl der Elemente in dieser Gruppe zurück.",en:"Returns the number of elements in this group."})),r(o,"groupEmptyComment",()=>d({de:"Leert die Gruppe. Die in der Gruppe enthaltenen Elemente werden dadurch nicht verändert.",en:"Removes all elements from this group. This operation doesn't affect the elements themselves."})),r(o,"groupDestroyAllChildrenComment",()=>d({de:"Zerstört alle Elemente der Gruppe, nicht aber die Gruppe selbst.",en:"Destroys all elements inside this group, but not this group itself."})),r(o,"groupRenderAsStaticBitmapComment",()=>d({de:"Erstellt eine Bitmap (Textur) und zeichnet alle in der Gruppe enthaltenen Elemente darauf. Zeichnet ab diesem Zeitpunkt statt der enthaltenen Elemente nur noch die Bitmap (=> schneller!). Alle enthaltenen Elemente werden bei dieser Operation zerstört.",en:"Creates a bitmap (texture) and draws all elements onto it. Then it uses this bitmap to draw to screen instead of the elements (=> faster!). All elements are destroyed afterwards."})),r(o,"groupCopyComment",()=>d({de:"Erstellt eine Kopie dieser Gruppe inclusive Kopien aller ihrer Elemente.",en:"Creates a copy of this group containing copies of it's elements."})),r(o,"groupGetCollidingShapesComment",()=>d({de:"Gibt die Elemente der Gruppe zurück, die mit dem übergebenen Shape kollidieren.",en:"Returns all elements of this group which collide with given Shape."})),r(o,"groupGetCollisionPairsComment",()=>d({de:"Überprüft, welche Objekte der Gruppe mit welchen der anderen kollidieren. Gibt für jede Kollision ein Collisionpair-Objekt zurück, das die beiden kollidierenden Objekte enthält. Falls maxOneCollisionPerShape == true ist jedes Objekt dabei aber nur in max. einem Collisionpair-Objekt enthalten.",en:"Checks which elements of this group collide with elements of the other one. For each detected collision it returns a Collisionpair-object that contains both elements. If maxOneCollisionPerShape == true then no shape of this group is contained two or more of the returned collisionpair-objects."})),r(o,"collisionPairClassComment",()=>d({de:"Speichert die Referenzen auf zwei Figuren, die gerade kollidiert sind. Diese Klasse von den Kollisionsmethden der Klasse Group benutzt.",en:"Saves pointers to two graphical objects which have collided. This class is used by Group.getCollisionPairs(Group otherGroup)."})),r(o,"collisionPairShapeAComment",()=>d({de:"Die erste der beiden kollidierenden Figuren. Sie gehört zu group1 des Methodenaufrufs group1.getCollisionPairs(group2).",en:"First colliding Shape. It belongs to group1 of method call group1.getCollisionPairs(group2)."})),r(o,"collisionPairShapeBComment",()=>d({de:"Die zweite der beiden kollidierenden Figuren. Sie gehört zu group2 des Methodenaufrufs group1.getCollisionPairs(group2).",en:"Second colliding Shape. It belongs to group2 of method call group1.getCollisionPairs(group2)."})),r(o,"collisionPairConstructorComment",()=>d({de:"Erzeugt ein paar zweier Shape-objekte.",en:"Creates a tuple of two shapes."})),r(o,"circleClassComment",()=>d({de:"Kreis",en:"Circle"})),r(o,"circleEmptyConstructorComment",()=>d({de:"Instanziert einen neuen Kreis mit Mittelpunkt (50, 50) und Radius 50.",en:"Creates a new Circle object with center at (50, 50) and radius 50."})),r(o,"circleConstructorComment",()=>d({de:"Instanziert einen neuen Kreis. (mx, my) ist der Mittelpunt, r sein Radius.",en:"Creates a new Circle object with center at (mx, my) and given radius."})),r(o,"circleSetRadiusComment",()=>d({de:"Setzt den Radius des Kreises.",en:"Set radius."})),r(o,"circleGetRadiusComment",()=>d({de:"Gibt den Radius des Kreises zurück.",en:"Gets radius."})),r(o,"circleCopyComment",()=>d({de:"Erstellt eine Kopie des Circle-Objekts und git sie zurück.",en:"Creates a exact copy of this circle object and returns it."})),r(o,"ArcClassComment",()=>d({de:"Kreisbogenumriss (wahlweise gefüllt)",en:"Arc (filled/not filled)"})),r(o,"ArcConstructorComment1",()=>d({de:"Instanziert einen neuen Kreisbogen.",en:"Creates a new Arc."})),r(o,"ArcConstructorComment",()=>d({de:"Instanziert einen neuen Kreisbogen. (mx, my) ist der Mittelpunt, ri sein Innenradius, ra sein Außenradius. Der Kreisbogen wird von startAngle bis endAngle (beides in Grad) gegen den Uhrzeigersinn gezogen.",en:"Creates a new Arc. (mx, my) is it's center, ri it's inner radius, ra it's outer radius. The arc will be drawn from startAngle up to endAngle (both in degrees) counterclockwise."})),r(o,"ArcSetInnerRadiusComment",()=>d({de:"Setzt den Innenradius des Kreisbogens.",en:"Sets inner radius of arc."})),r(o,"ArcSetOuterRadiusComment",()=>d({de:"Setzt den Außenradius des Kreisbogens.",en:"Sets outer radius of arc."})),r(o,"ArcSetStartAngleComment",()=>d({de:"Setzt den Startwinkel des Kreisbogens (in Grad).",en:"Sets start angle of arc (in degrees)."})),r(o,"ArcSetEndAngleComment",()=>d({de:"Setzt den Endwinkel des Kreisbogens (in Grad).",en:"Sets end angle of arc (in degrees)."})),r(o,"ArcGetInnerRadiusComment",()=>d({de:"Liefert den Innenradius des Kreisbogens.",en:"Gets inner radius of arc."})),r(o,"ArcGetOuterRadiusComment",()=>d({de:"Liefert den Außenradius des Kreisbogens.",en:"Gets outer radius of arc."})),r(o,"ArcGetStartAngleComment",()=>d({de:"Liefert den Startwinkel des Kreisbogens (in Grad).",en:"Gets start angle of arc (in degrees)."})),r(o,"ArcGetEndAngleComment",()=>d({de:"Liefert den Endwinkel des Kreisbogens (in Grad).",en:"Gets end angle of arc (in degrees)."})),r(o,"ArcCopyComment",()=>d({de:"Erstellt eine Kopie des arc-Objekts und git sie zurück.",en:"Creates a exact copy of this arc object and returns it."})),r(o,"TextClassComment",()=>d({de:"Text, der innerhalb der Grafikausgabe dargestellt werden kann",en:"Text inside graphic panel"})),r(o,"TextEmptyConstructorComment",()=>d({de:"Instanziert ein neues Textobjekt. Der Textanker (default: links oben) liegt bei (0, 0).",en:"Creates a new Text object. It's anchor (default: top left) is positioned at (0, 0)."})),r(o,"TextConstructorComment1",()=>d({de:"Instanziert ein neues Textobjekt. (x, y) sind die Koordinaten des Textankers (default: links oben), fontsize die Höhe des Textes in Pixeln.",en:"Creates a new Text object. (x, y) is it's anchor's position, fontSize it's height in pixels."})),r(o,"TextCopyComment",()=>d({de:"Erstellt eine Kopie dieses Text-Objekts",en:"Creates a copy of this text object"})),r(o,"TextSetFontsizeComment",()=>d({de:"Setzt die Schriftgröße des Textes (Einheit: Pixel).",en:"Sets fontsize of text (unit: pixels)."})),r(o,"TextSetAlignmentComment",()=>d({de:"Setzt die Ausrichtung des Textes, z.B. Alignment.center, Alignment.right.",en:"Sets Alignment of text, e.g. Alignment.center, Alignment.right."})),r(o,"TextSetTextComment",()=>d({de:"Setzt den Text dieses graphischen Text-Objektes.",en:"Sets text of this graphical Text object."})),r(o,"TextGetWidthComment",()=>d({de:"Gibt die Breite des Textes zurück.",en:"Returns width of this text."})),r(o,"TextGetHeightComment",()=>d({de:"Gibt die Höhe des Textes zurück.",en:"Returns height of this text."})),r(o,"TextGetFontsizeComment",()=>d({de:"Gibt die Schriftgröße zurück.",en:"Returns fontsize."})),r(o,"TextGetTextComment",()=>d({de:"Gibt den Textinhalt zurück.",en:"Returns text content (as string)."})),r(o,"TextSetStyleComment",()=>d({de:"Setzt den Stil des Textes: isBold (Fettschrift) und isItalic (Schrägschrift).",en:"Sets style of this text (bold, italic)."})),r(o,"TextMoveToComment",()=>d({de:"Verschiebt das Grafikobjekt so, dass sich sein 'Mittelpunkt' an den angegebenen Koordinaten befindet.",en:"Moves this text object. After moving it's 'center' lies at given coordinates."})),r(o,"DayOfWeekEnumComment",()=>d({de:"Wochentag",en:"day of week"})),r(o,"DayOfWeekMondayConst",()=>d({de:"Montag",en:"Monday"})),r(o,"DayOfWeekTuesdayConst",()=>d({de:"Dienstag",en:"Tuesday"})),r(o,"DayOfWeekWednesdayConst",()=>d({de:"Mittwoch",en:"Wednesday"})),r(o,"DayOfWeekThursdayConst",()=>d({de:"Donnerstag",en:"Thursday"})),r(o,"DayOfWeekFridayConst",()=>d({de:"Freitag",en:"Friday"})),r(o,"DayOfWeekSaturdayConst",()=>d({de:"Samstag",en:"Saturday"})),r(o,"DayOfWeekSundayConst",()=>d({de:"Sonntag",en:"Sunday"})),r(o,"LocalDateTimeClassComment",()=>d({de:"Ein LocalDate-Objekt speichert einen Zeitpunkt (Datum und Uhrzeit) und kann auch die Systemzeit auslesen.",en:"LocalDateTime is an immutable date-time object that represents a date-time, often viewed as year-month-day-hour-minute-second."})),r(o,"LocalDateTimeEmptyConstructorComment",()=>d({de:"Holt den aktuellen Zeitpunkt von der Systemuhr des Rechners und gibt ihn als LocalDateTime-Objekt zurück.",en:"Fetches current timestamp from system clock and returns it as LocalDateTime-Object"})),r(o,"LocalDateTimeNowComment",()=>d({de:"Holt den aktuellen Zeitpunkt von der Systemuhr des Rechners und gibt ihn als LocalDateTime-Objekt zurück.",en:"Fetches current timestamp from system clock and returns it as LocalDateTime-Object"})),r(o,"LocalDateTimeOfComment",()=>d({de:"Gibt ein LocalDateTime-Objekt zurück, das den durch year, month (1 - 12), dayOfMonth, hour, minute, second beschriebenen Zeitpunkt repräsentiert.",en:"Returns a new LocalDateTime-object given by year, month (1 - 12), dayOfMonth, hour, minute and second."})),r(o,"LocalDateTimePlusDaysComment",()=>d({de:"Gibt ein neues LocalDateTime-Objekt zurück, das einen Zeitpunkt repräsentiert, der um die übergebene Anzahl von Tagen später liegt.",en:"Returns a NEW LocalDateTime-object which timestamp is given days later than this one's."})),r(o,"LocalDateTimeMinusDaysComment",()=>d({de:"Gibt ein neues LocalDateTime-Objekt zurück, das einen Zeitpunkt repräsentiert, der um die übergebene Anzahl von Tagen früher liegt.",en:"Returns a NEW LocalDateTime-object which timestamp is given days prior to this one's."})),r(o,"LocalDateTimeUntilComment",()=>d({de:"Gibt zurück, wie viele Tage (gerundet) zwischen den beiden Zeitpunkten liegen.",en:""})),r(o,"LocalDateTimeGetYearComment",()=>d({de:"Jahr",en:"Year"})),r(o,"LocalDateTimeGetMonthComment",()=>d({de:"Gibt den Monat als Zahl zurück (Januar == 1, Februar == 2, ..., Dezember == 12).",en:"Month (January == 1, February == 2, ...)"})),r(o,"LocalDateTimeGetDayOfMonthComment",()=>d({de:"Gibt den Tag innerhalb des Monats zurück (Zahl von 1 bis 31).",en:"Day of month (1, ..., 31)"})),r(o,"LocalDateTimeGetHourComment",()=>d({de:"Stunde",en:"Hour"})),r(o,"LocalDateTimeGetMinuteComment",()=>d({de:"Minute",en:"Minute"})),r(o,"LocalDateTimeGetSecondComment",()=>d({de:"Sekunde",en:"Second"})),r(o,"AlignmentEnumComment",()=>d({de:"Ausrichtung",en:"Alignment"})),r(o,"SectorClassComment",()=>d({de:"Kreisbogen/Kreissektor",en:"Sector"})),r(o,"SectorConstructorComment1",()=>d({de:"Instanziert einen neuen Kreisbogen.",en:"Creates a new Sector. (mx, my) is it's center, ri it's inner radius, ra it's outer radius. The sector will be drawn from startAngle up to endAngle (both in degrees) counterclockwise."})),r(o,"SectorConstructorComment",()=>d({de:"Instanziert einen neuen Kreisbogen. (mx, my) ist der Mittelpunt, ri sein Innenradius, ra sein Außenradius. Der Kreisbogen wird von startAngle bis endAngle (beides in Grad) gegen den Uhrzeigersinn gezogen.",en:"Creates a new Sector. (mx, my) is it's center, ri it's inner radius, ra it's outer radius. The sector will be drawn from startAngle up to endAngle (both in degrees) counterclockwise."})),r(o,"SectorSetRadiusComment",()=>d({de:"Setzt den Innenradius des Kreisbogens.",en:"Sets inner radius of sector."})),r(o,"SectorSetOuterRadiusComment",()=>d({de:"Setzt den Außenradius des Kreisbogens.",en:"Sets outer radius of sector."})),r(o,"SectorSetStartAngleComment",()=>d({de:"Setzt den Startwinkel des Kreisbogens (in Grad).",en:"Sets start angle of sector (in degrees)."})),r(o,"SectorSetEndAngleComment",()=>d({de:"Setzt den Endwinkel des Kreisbogens (in Grad).",en:"Sets end angle of sector (in degrees)."})),r(o,"SectorGetRadiusComment",()=>d({de:"Liefert den Innenradius des Kreisbogens.",en:"Gets inner radius of sector."})),r(o,"SectorGetOuterRadiusComment",()=>d({de:"Liefert den Außenradius des Kreisbogens.",en:"Gets outer radius of sector."})),r(o,"SectorGetStartAngleComment",()=>d({de:"Liefert den Startwinkel des Kreisbogens (in Grad).",en:"Gets start angle of sector (in degrees)."})),r(o,"SectorGetEndAngleComment",()=>d({de:"Liefert den Endwinkel des Kreisbogens (in Grad).",en:"Gets end angle of sector (in degrees)."})),r(o,"SectorDrawRadiiComment",()=>d({de:"Legt fest, ob beim Zeichnen des Umrisses auch die beiden Radii ( = Strecken vom Mittelpunkt zur Kreislinie) mitgezeichnet werden sollen.",en:"Set to true if drawn border should also contain the radii ( = lines from center to the arc perimeter )"})),r(o,"SectorCopyComment",()=>d({de:"Erstellt eine Kopie des sector-Objekts und git sie zurück.",en:"Creates a exact copy of this sector object and returns it."})),r(o,"PolygonClassComment",()=>d({de:"Polygon",en:"polygon"})),r(o,"PolygonEmptyConstructorComment",()=>d({de:`Instanziert ein neues Polygon. Der Standardkonstruktor ohne Parameter instanziert ein regelmäßiges Sechseck. Tipp: Es gibt auch Konstruktoren, denen man ein Array von Koordinaten bzw. einzelne Koordinaten übergeben kann!`,en:`Creates a polygon. The parameterless constructor creates a regular hexagon. Hint: There are constructors that take (an array of) coordinates.`})),r(o,"PolygonConstructor1Comment",()=>d({de:"Instanziert ein neues Polygon. Die Punkte werden als Array von double-Werten der Form {x1, y1, x2, y2, ...} übergeben.",en:"Creates a polygon. Points are given as array of double-values in this order: {x1, y1, x2, y2, ...}"})),r(o,"PolygonConstructor2Comment",()=>d({de:"Instanziert ein neues Polygon. Die Punkte werden als double-Werte der Form x1, y1, x2, y2, ... übergeben.",en:"Creates a polygon. Points are given as double-values in this order: x1, y1, x2, y2, ..."})),r(o,"PolygonConstructorShapeComment",()=>d({de:"Instanziert ein neues Polygon. Seine Punkte sind die Punkte des Hitpolygons der übergebenen Figur.",en:"Creates a polygon based on given shape's hitpolygon."})),r(o,"PolygonCopyComment",()=>d({de:"Erstellt eine Kopie des polygon-Objekts und git sie zurück.",en:"Creates a exact copy of this polygon object and returns it."})),r(o,"PolygonAddPointComment",()=>d({de:"Fügt dem Polygon einen Punkt hinzu.",en:"Adds a point to the polygon."})),r(o,"PolygonSetPointsComment",()=>d({de:"Löscht alle Punkte des Polygons und setzt komplett neue. Diese werden in einem double[] übergeben, das abwechselnd die x- und y-Koordinaten enthält.",en:"Remove all points from polygon and replace them by given ones. Given double-array contains alternating x- and y-coordinates."})),r(o,"PolygonAddPointsComment",()=>d({de:"Fügt dem Polygon mehrere Punkte hinzu. Diese werden in einem double[] übergeben, das abwechselnd die x- und y-Koordinaten enthält.",en:"Add given points to polygon. Given double-array contains alternating x- and y-coordinates."})),r(o,"PolygonInsertPointComment",()=>d({de:"Fügt dem Polygon einen Punkt als 'index-ter' Punkt hinzu. index == 0 => ganz am Anfang; index == Anzahl der bisherigen Punkte => ganz am Ende;",en:"Insert point on given index into polygon. Index == 0 means 'at the beginning', index == number of points means 'at the end'."})),r(o,"PolygonMovePointToComment",()=>d({de:"Verschiebt Punkt mit dem angegebenen Index nach (x, y). Index == 0 => erster Punkt, index == 1 => zweiter Punkt usw.",en:"Moves point with given index to position (x, y). Index == 0 means 'at the beginning', index == number of points means 'at the end'."})),r(o,"PolygonCloseComment",()=>d({de:"Schließt das Polygon, indem es den ersten und letzten Punkt mit einer Strecke verbindet. Diese Methode hat bei gefüllten Polygonen keinen Effekt.",en:"Closes polygon by joining first and last point with a straight line. This method does nothing when polygon is filled."})),r(o,"PolygonOpenComment",()=>d({de:"Öffnet das Polygon, indem des die Strecke zwischen erstem und letzem Punkt entfernt. Diese Methode hat bei gefüllten Polygonen keinen Effekt.",en:"Opens polygon by removing the line between first and last point. This method does nothing when polygon is filled."})),r(o,"EllipseClassComment",()=>d({de:"Ellipse",en:"ellipse"})),r(o,"EllipseEmptyConstructorComment",()=>d({de:"Instanziert einen neuen Ellipse mit Mittelpunkt (200, 100) und den Radien 100 und 50.",en:"Creates a new ellipse object with center at (200, 100) and radii 100, 50."})),r(o,"EllipseConstructorComment",()=>d({de:"Instanziert eine neuen Ellipse. (mx, my) ist der Mittelpunt, rx ihr Radius in x-Richtung, ry ihr Radius in y-Richtung.",en:"Creates a new ellipse object with center at (mx, my) and given radii in rx, ry."})),r(o,"EllipseSetRadiusXComment",()=>d({de:"Setzt den Radius der Ellipse in X-Richtung.",en:"Set radius of ellipse in x-direction."})),r(o,"EllipseSetRadiusYComment",()=>d({de:"Setzt den Radius der Ellipse in Y-Richtung.",en:"Set radius of ellipse in y-direction."})),r(o,"EllipseGetRadiusXComment",()=>d({de:"Gibt den x-Radius der Ellipse zurück.",en:"Gets x-radius."})),r(o,"EllipseGetRadiusYComment",()=>d({de:"Gibt den y-Radius der Ellipse zurück.",en:"Gets y-radius."})),r(o,"EllipseCopyComment",()=>d({de:"Erstellt eine Kopie des ellipse-Objekts und git sie zurück.",en:"Creates a exact copy of this ellipse object and returns it."})),r(o,"TurtleClassComment",()=>d({de:"Turtle-Klasse zum Zeichnen von Streckenzügen oder gefüllten Figuren. Wichtig sind vor allem die Methoden forward(double length) und turn(double angleDeg), die die Turtle nach vorne bewegen bzw. ihre Blickrichtung ändern.",en:"Turtle class to draw straight lines or filled shapes. Most important methods are forward(double length) and turn(angleInDegrees)."})),r(o,"TurtleEmptyConstructorComment",()=>d({de:"Instanziert ein neues Turtle-Objekt ohne Punkte. Die Turtle blickt anfangs nach rechts. Am Ende des Streckenzugs wird eine 'Schildkröte' (kleines Dreieck) gezeichnet.",en:"Creates a new Turtle object without points/lines. Initially the turtle's viewing direction is to the right. A small red triangle shows the turtle's current position. "})),r(o,"TurtleConstructorComment1",()=>d({de:"Instanziert ein neues Turtle-Objekt ohne Punkte. (x, y) is die Startposition der Turtle. Die Turtle blickt anfangs nach rechts. Am Ende des Streckenzugs wird eine 'Schildkröte' (kleines Dreieck) gezeichnet.",en:"Creates a new Turtle object without points/lines at position (x, y). Initially the turtle's viewing direction is to the right. A small red triangle shows the turtle's current position. "})),r(o,"TurtleConstructorComment2",()=>d({de:"Instanziert ein neues Turtle-Objekt ohne Punkte. (x, y) is die Startposition der Turtle. Die Turtle blickt anfangs nach rechts. Falls showTurtle == true wird am Ende des Streckenzugs eine 'Schildkröte' (kleines Dreieck) gezeichnet.",en:"Creates a new Turtle object without points/lines at position (x, y). Initially the turtle's viewing direction is to the right. If showTurtle == true a small red triangle shows the turtle's current position. "})),r(o,"TurtleCopyComment",()=>d({de:"Erstellt eine Kopie der Turtle.",en:"Creates a copy of this turtle object."})),r(o,"TurtleForwardComment",()=>d({de:"Weist die Turtle an, die angegebene Länge vorwärts zu gehen. Ihr zurückgelegter Weg wird als gerade Strecke mit der aktuellen BorderColor gezeichnet. Mit setBorderColor(null) bewirkst Du, dass ein Stück ihres Weges nicht gezeichnet wird.",en:"Makes the turtle walk forward given length. While walking it draws a line with current BorderColor. Use setBorderColor(null) to get invisible lines."})),r(o,"TurtleTurnComment",()=>d({de:"Bewirkt, dass sich die Turtle um den angegebenen Winkel (in Grad!) dreht, d.h. ihre Blickrichtung ändert. Ein positiver Winkel bewirkt eine Drehung gegen den Uhrzeigersinn. Diese Methode wirkt sich NICHT auf die bisher gezeichneten Strecken aus. Willst Du alles bisher Gezeichnete inklusive Turtle drehen, so nutze die Methode rotate.",en:"Makes the turtle (NOT the lines drawn by it) turn counterclockwise by given angle in Degrees. If you want to rotate all lines drawn by the turtle, then use method rotate instead."})),r(o,"TurtlePenUpComment",()=>d({de:"Bewirkt, dass die Turtle beim Gehen ab jetzt nicht mehr zeichnet.",en:"After this method call the turtle will stop drawing when it walks."})),r(o,"TurtlePenDownComment",()=>d({de:"Bewirkt, dass die Turtle beim Gehen ab jetzt wieder zeichnet.",en:"After this method call the turtle will restart drawing when it walks."})),r(o,"TurtleCloseAndFillComment",()=>d({de:"closeAndFill == true bewirkt, dass das von der Turtlezeichnung umschlossene Gebiet gefüllt wird.",en:"If closeAndFill == true then the area surronded by the turtle's drawing is filled."})),r(o,"TurtleShowTurtleComment",()=>d({de:"showTurtle == true bewirkt, dass am Ort der Turtle ein rotes Dreieck gezeichnet wird.",en:"If showTurtle == true then a small triangle indicates the turtle's position."})),r(o,"TurtleClearComment",()=>d({de:"Löscht alle bis jetzt mit der Turtle gezeichneten Strecken.",en:"Erases all lines drawn previously."})),r(o,"TurtleCollidesWithBorderColorComment",()=>d({de:'Gibt genau dann true zurück, wenn sich der "Mittelpunkt" des Turtle-Dreiecks auf dem Rand eines anderen graphischen Objekts mit der angegebenen Farbe befindet.',en:"Returns true if and only if current position of turtle is on the border of another shape with given borderColor."})),r(o,"TurtleGetLastSegmentLengthComment",()=>d({de:"Gibt die Länge des letzten gezeichneten Streckenzugs zurück.",en:"Returns length of last drawn line segment."})),r(o,"TurtleGetXComment",()=>d({de:"Gibt die x-Koordinate der aktuellen Turtleposition zurück.",en:"Returns x-coordinate of current turtle position."})),r(o,"TurtleGetYComment",()=>d({de:"Gibt die y-Koordinate der aktuellen Turtleposition zurück.",en:"Returns y-coordinate of current turtle position."})),r(o,"TurtleMoveToComment",()=>d({de:"Bewirkt, dass die Turtle zum Punkt (x, y) geht.",en:"Makes Turtle walk to position (x, y)."})),r(o,"TurtleGetTurtleAngleComment",()=>d({de:"Gibt den Blickwinkel der Turtle in Grad zurück.",en:"Returns turtle's viewing angle in degrees."})),r(o,"mouseListenerInterfaceComment",()=>d({de:"Interface mit Methoden, die aufgerufen werden, wenn Maus-Ereignisse eintreten. Ein Objekt, das dieses Interface implementiert muss zuvor aber mit world.addMouseListener() registriert werden, wobei world das aktuelle World-Objekt ist.",en:"A MouseListener's methods are called whenever a mouse event occurs. Objects implementing this interface need registering at world by world.addMouseListener()."})),r(o,"mouseListenerOnMouseUpComment",()=>d({de:"Wird aufgerufen, wenn eine Maustaste über dem Grafikbereich losgelassen wird.",en:"This method gets called if user releases a mouse button."})),r(o,"mouseListenerOnMouseDownComment",()=>d({de:"Wird aufgerufen, wenn eine Maustaste über dem Grafikbereich gedrückt wird.",en:"This method gets called if user presses a mouse button."})),r(o,"mouseListenerOnMouseMoveComment",()=>d({de:"Wird aufgerufen, wenn der Mauszeiger über dem Grafikbereich bewegt wird.",en:"This method gets called if user moves mouse."})),r(o,"mouseListenerOnMouseEnterComment",()=>d({de:"Wird aufgerufen, wenn der Mauszeiger in den Grafikbereich hineinbewegt wird.",en:"This method gets called if mouse cursor enters graphic view."})),r(o,"mouseListenerOnMouseLeaveComment",()=>d({de:"Wird aufgerufen, wenn der Mauszeiger den Grafikbereich verlässt.",en:"This method gets called if mouse cursor leaves graphic view."})),r(o,"rectangleClassComment",()=>d({de:"Ein Objekt der Klasse Rectangle zeichnet ein Rechteck in den Grafikbereich.",en:"Objects of class Rectangle draw rectangles."})),r(o,"rectangleEmptyConstructorComment",()=>d({de:"Instanziert ein Retangle-Objekt mit Standardmaßen. Seine linke obere Ecke liegt bei (0/0). Breite und Höhe betragen jeweils 100. Die Rechteckseiten sind zunächst parallel zu den Koordinatenachsen.",en:"Instantiates a rectangle object with default geometry. It's left top edge is located at (0/0). Width and height are 100 each. Initial orientation is parallel to x- and y-axis."})),r(o,"rectangleConstructorComment",()=>d({de:"Instanziert ein Retangle-Objekt. Seine linke obere Ecke liegt bei (top/left). Width ist seine Breite, height seine Höhe. Das Rechteck ist zunächst achsenparallel.",en:"Instantiates a rectangle object with given width and height. It's left top edge is located at (top/left). Initial orientation is parallel to x- and y-axis."})),r(o,"rectangleSetWidthComment",()=>d({de:"setzt die Breite des Rechtecks.",en:"sets width of rectangle"})),r(o,"rectangleSetHeightComment",()=>d({de:"setzt die Höhe des Rechtecks.",en:"sets height of rectangle"})),r(o,"rectangleGetWidthComment",()=>d({de:"gibt die Breite des Rechtecks zurück",en:"gets rectangle width"})),r(o,"rectangleGetHeightComment",()=>d({de:"gibt die Höhe des Rechtecks zurück",en:"gets rectangle height"})),r(o,"rectangleCopyComment",()=>d({de:"Erstellt eine Kopie des Rectangle-Objekts und git sie zurück.",en:"returns a copy of this rectangle object"})),r(o,"rectangleMoveToComment",()=>d({de:"Verschiebt das Grafikobjekt so, dass sich seine linke obere Ecke an den angegebenen Koordinaten befindet.",en:"Moves the graphic object so that its top-left edge is at the specified coordinates"})),r(o,"RoundedRectangleClassComment",()=>d({de:"Ein Objekt der Klasse RoundedRectangle zeichnet ein Rechteck in den Grafikbereich.",en:"Objects of class RoundedRectangle draw RoundedRectangles."})),r(o,"RoundedRectangleEmptyConstructorComment",()=>d({de:"Instanziert ein Retangle-Objekt mit Standardmaßen. Seine linke obere Ecke liegt bei (0/0). Breite und Höhe betragen jeweils 100. Die Rechteckseiten sind zunächst parallel zu den Koordinatenachsen.",en:"Instantiates a RoundedRectangle object with default geometry. It's left top edge is located at (0/0). Width and height are 100 each. Initial orientation is parallel to x- and y-axis."})),r(o,"RoundedRectangleConstructorComment",()=>d({de:"Instanziert ein Retangle-Objekt. Seine linke obere Ecke liegt bei (top/left). Width ist seine Breite, height seine Höhe. Das Rechteck ist zunächst achsenparallel.",en:"Instantiates a RoundedRectangle object with given width and height. It's left top edge is located at (top/left). Initial orientation is parallel to x- and y-axis."})),r(o,"RoundedRectangleSetWidthComment",()=>d({de:"setzt die Breite des Rechtecks.",en:"sets width of RoundedRectangle"})),r(o,"RoundedRectangleSetHeightComment",()=>d({de:"setzt die Höhe des Rechtecks.",en:"sets height of RoundedRectangle"})),r(o,"RoundedRectangleGetWidthComment",()=>d({de:"gibt die Breite des Rechtecks zurück",en:"gets RoundedRectangle width"})),r(o,"RoundedRectangleGetHeightComment",()=>d({de:"gibt die Höhe des Rechtecks zurück",en:"gets RoundedRectangle height"})),r(o,"RoundedRectangleCopyComment",()=>d({de:"Erstellt eine Kopie des RoundedRectangle-Objekts und git sie zurück.",en:"returns a copy of this RoundedRectangle object"})),r(o,"RoundedRectangleMoveToComment",()=>d({de:"Verschiebt das Grafikobjekt so, dass sich sein Diagonalenschnittpunkt an den angegebenen Koordinaten befindet.",en:"Moves the graphic object so that its diagonal intersection is at the specified coordinates"})),r(o,"TriangleClassComment",()=>d({de:"Dreieck",en:"triangle"})),r(o,"TriangleConstructorComment",()=>d({de:"Erstellt ein Dreieck mit den gegebenen drei Eckpunkten.",en:"Creates a triangle from given points."})),r(o,"TriangleSetPointsComment",()=>d({de:"Setzt die Koordinaten der Eckpunkte des Dreiecks.",en:"Set coordinates of triangle-edges."})),r(o,"TriangleConstructorComment1",()=>d({de:"Erstellt ein Dreieck mit den Eckpunkten (0,0), (100, 0) und (0, 100).",en:"Creates a triangle from given points."})),r(o,"TriangleCopyComment",()=>d({de:"Erstellt eine Kopie des Dreiecks.",en:"Creates a copy of this triangle."})),r(o,"LineClassComment",()=>d({de:"Die Klasse Line repräsentiert eine Strecke",en:"Line"})),r(o,"LineEmptyConstructorComment",()=>d({de:"Erstellt eine gerade Strecke vom Punkt (0, 0) zum Punkt (100, 100).",en:"Creates a straight line from (0, 0) to (100, 100)."})),r(o,"LineConstructorComment1",()=>d({de:"Erstellt eine gerade Strecke von (x1, y1) nach (x2, y2).",en:"Creates a straight line from (x1, y1) to (x2, y2)."})),r(o,"LineSetPointsComment",()=>d({de:"Ändert Start- und Endpunkt der Linie.",en:"Sets start- and endpoint of this line."})),r(o,"LineCopyComment",()=>d({de:"Erstellt eine Kopie der Linie.",en:"Creates a copy of this line."})),r(o,"BitmapClassComment",()=>d({de:"Rechteckige Bitmap in der Grafikausgabe",en:"Rectangular Bitmap"})),r(o,"BitmapConstructorComment",()=>d({de:"Instanziert eine neue Bitmap. pointsX bzw. pointsY bezeichnet Anzahl der Bildpunkte in x bzw. y-Richtung, (left, top) sind die Koordinaten der linken oberen Ecke.",en:"Creates a new Bitmap. pointsX and pointsY are it's resolution, (left, top) is it's top-left corner."})),r(o,"BitmapCopyComment",()=>d({de:"Erzeugt eine Kopie dieser Bitmap.",en:"Creates a copy of this bitmap."})),r(o,"BitmapCoordinatesOutOfBoundsException",(t,e,i,n)=>d({de:`Die Koordinaten x: ${t}, y: ${e} liegen außerhalb der Bitmap mit der Auflösung ${i}, ${n}.`,en:`Coordinates x: ${t}, y: ${e} are out of bounds ${i}, ${n}.`})),r(o,"BitmapSetColorComment",()=>d({de:"Setzt die Farbe des angegebenen Bildpunkts auf der Bitmap.",en:"Sets color of given point on Bitmap."})),r(o,"BitmapGetResolutionXComment",()=>d({de:"Gibt die Auflösung ( = Anzahl an Punkten) der Bitmap in X-Richtung zurück.",en:"Returns resolution ( = number of pixels) in x-direction."})),r(o,"BitmapGetResolutionYComment",()=>d({de:"Gibt die Auflösung ( = Anzahl an Punkten) der Bitmap in y-Richtung zurück.",en:"Returns resolution ( = number of pixels) in y-direction."})),r(o,"BitmapGetPixelAlphaComment",()=>d({de:"Gibt die Transparenz des Pixels an der angegebenen Position innerhalb der Bitmap zurück.",en:"Returns alpha value of pixel at given position inside bitmap."})),r(o,"BitmapGetColorComment",()=>d({de:"Gibt die Farbe des angegebenen Punktes als Color-Objekt zurück.",en:"Returns color of given point as Color-object."})),r(o,"BitmapIsColorComment",()=>d({de:"Gibt genau dann true zurück, wenn die Farbe am angegebenen Punkt (x,y) mit der übergebenen Farbe übereinstimmt.",en:"Returns true if and only if color at point (x, y) matches given color."})),r(o,"BitmapWorldCoordinatesToBitmapCoordinatesComment",()=>d({de:"Wandelt die Weltkoordinaten (x,y) in Koordinaten innerhalb der Bitmap um.",en:"Converts world coordinates to coordinates inside this bitmap."})),r(o,"BitmapFillAllComment",()=>d({de:"Füllt die ganze Bitmap mit der angegebenen Farbe.",en:"Fills whole Bitmap with given color."})),r(o,"BitmapDownloadAsPngFileComment",()=>d({de:"Lädt die Bitmap als PNG-Datei mit dem angegebenen Dateinamen herunter.",en:"Downloads the bitmap as a PNG file with the given filename."})),r(o,"DirectionEnumComment",()=>d({de:"Richtung (top, right, bottom, left)",en:"Direction (top, right, bottom, left)"})),r(o,"spriteGetPixelColorOutOfBoundsError",(t,e,i,n)=>d({de:"Die Koordinaten ("+t+", "+e+") liegen außerhalb des Sprites mit der Breite "+i+" und der Höhe "+n,en:"Coordinates ("+t+", "+e+") are out of bounds of sprite with width "+i+" and height "+n})),r(o,"spriteClassComment",()=>d({de:"Ein Sprite ist eine kleine Pixelgrafik, die verschoben, gedreht und skaliert werden kann. Zudem besitzt es Methoden zum Erkennen von Kollisionen mit anderen grafischen Objekten.",en:"A sprite is a small image which may be moved, rotated or scaled. It is able to detect collisions with other graphic objects."})),r(o,"spriteConstructorComment1",()=>d({de:"Instanziert ein neues Sprite und stellt es an der Position (x, y) dar (== Diagonalenschnittpunkt der Boundingbox). SpriteLibrary ist ein Aufzählungstyp (enum). Gib einfach SpriteLibraryEntry gefolgt von einem Punkt ein, dann erhältst Du ein Auswahl von Bildern. Einen Überblick über die Bilder bekommst Du auch über den Menüpunkt Hilfe->Sprite-Bilderübersicht.",en:"Instantiate a new sprite object and move it to position (x,y) (== diagonal intersection of bounding box). SpriteLibrary is a enum. Just enter SpriteLibraryEntry followed by a dot to get a list of library identifiers. To view all sprite libraries got to Help->Sprite Libraries."})),r(o,"spriteConstructorComment2",()=>d({de:"Zeichnet das graphische Objekt (shape) in eine Bitmap und macht daraus ein Sprite. Dieses wird an der Position (0, 0) dargestellt.",en:"Renders given Shape object into a bitmap and creates a Sprite object from it. This Sprite object is shown at position (0, 0)."})),r(o,"spriteErrorImageNotFound",(t,e)=>d({de:"Das Spritesheet "+t+" hat kein Bild mit Index "+e,en:"Spritesheet "+t+" has no image with index "+e})),r(o,"tileClassComment",()=>d({de:"Eine Kachel in einem Sprite, das mithilfe der Methode makeTiling zu einer Kachelfläche gemacht wurde.",en:"A tile inside a sprite which had been converted to a tiled sprite with method makeTiling."})),r(o,"tileMoveComment",()=>d({de:"Verschiebt das Grafikobjekt um dx Pixel nach rechts und um dy Pixel nach unten.",en:"Moves tile by dx pixels right and dy pixels down."})),r(o,"tileScaleComment",()=>d({de:"Streckt das Grafikobjekt um den angegebenen Faktor. Das Zentrum der Streckung ist der 'Mittelpunkt' des Objekts.",en:"Scales tile by given factor. Scale origin is the diagonal intersection of this tile."})),r(o,"tileMirrorXComment",()=>d({de:"Spiegelt das Objekt in X-Richtung.",en:"Mirrors tile in x-direction."})),r(o,"tileMirrorYComment",()=>d({de:"Spiegelt das Objekt in Y-Richtung.",en:"Mirrors tile in y-direction."})),r(o,"spriteShapeIsNullError",()=>d({de:"Die übergebene Figur hat den Wert null.",en:"Given shape is null."})),r(o,"spriteSetImageComment",()=>d({de:"Ändert das Bild des Sprites. SpriteLibraryEntry ist ein Auzählungstyp (enum). Gib einfach SpriteLibraryEntry gefolgt von einem Punkt ein, dann erhältst Du ein Auswahl von Bildern. Einen Überblick über die Bilder bekommst Du auch über den Menüpunkt Hilfe->Sprite-Bilderübersicht.",en:"sets the image of this sprite. SpriteLibrary is a enum. Just enter SpriteLibraryEntry followed by a dot to get a list of library identifiers. To view all sprite libraries got to Help->Sprite Libraries."})),r(o,"spriteSetImageIndexComment",()=>d({de:"Ändert den Bildindex des Sprites, so dass ein anderes Bild der SpriteLibrary dargestellt wird.",en:"Changes image index of sprite. This makes the sprite show the corresponding image of current SpriteLibrary."})),r(o,"spritePlayAnimationComment",()=>d({de:"Spielt eine Animation ab.",en:"plays an animation"})),r(o,"spriteStopAnimationComment",()=>d({de:"Stoppt die gerade laufende Animation",en:"stops currently playing animation"})),r(o,"spritePauseAnimationComment",()=>d({de:"Pausiert die gerade laufende Animation",en:"pauses currently playing animation"})),r(o,"spriteResumeAnimationComment",()=>d({de:"Fährt mit einer pausierten Animation wieder fort.",en:"resumes currently paused animation"})),r(o,"spriteSetAsBackgroundImageComment",()=>d({de:"Streckt und verschiebt das Sprite so, dass es die gesamte Zeichenfläche überdeckt.",en:"Scale and move sprite to cover whole canvas."})),r(o,"spriteSetAlphaComment",()=>d({de:"Setzt die Durchsichtigkeit. 0.0 bedeutet vollkommen durchsichtig, 1.0 bedeutet vollkommen undurchsichtig.",en:"Sets alpha value of sprite. Alpha value of 0.0 makes sprite completely transparent, value of 1.0 makes it complete opaque."})),r(o,"spriteCopyComment",()=>d({de:"Erstellt eine Kopie des Sprite-Objekts und git sie zurück.",en:"Creates a copy of this Sprite object and returns it."})),r(o,"spriteGetWidthComment",()=>d({de:"Gibt die Breite des Sprites in Pixeln zurück.",en:"Returns width of sprite in pixels."})),r(o,"spriteGetHeightComment",()=>d({de:"Gibt die Höhe des Sprites in Pixeln zurück.",en:"Returns height of sprite in pixels."})),r(o,"spriteGetImageIndexComment",()=>d({de:"Gibt den Index des Bildes innerhalb der Sprite-Library zurück.",en:"Returns index of currently displayed image within sprite library."})),r(o,"spriteMakeTilingComment1",()=>d({de:`Fügt das identische Bild nach rechts und unten kachelartig ('tile'!) so oft hinzu, bis die angegebene Breite erreicht ist. TIPP: Mit der Methode getTileImage() erhält man ein Tile-Objekt, dessen Methoden move, scale, mirrorX und mirrorY sich gleichzeitig auf jede einzelne Kachel auswirken.`,en:`Adds the identical image (-> 'tiles') at right and bottom of image until given width and height is reached. HINT: Use method getTileImage() to obtain a tile object which can move, scale and mirror all the tiles at once.`})),r(o,"spriteMakeTilingComment2",()=>d({de:`Fügt das identische Bild nach rechts und unten kachelartig ('tile'!) so oft hinzu, bis die angegebene Breite erreicht ist. GapX und GapY sind die Abstände, die zwischen den einzelnen Kacheln eingehalten werden. TIPP: Mit der Methode getTileImage() erhält man ein Tile-Objekt, dessen Methoden move, scale, mirrorX und mirrorY sich gleichzeitig auf jede einzelne Kachel auswirken.`,en:`Adds the identical image (-> 'tiles') at right and bottom of image until given width and height is reached. GapX and GapY are distances between the tiles. HINT: Use method getTileImage() to obtain a tile object which can move, scale and mirror all the tiles at once.`})),r(o,"spriteGetTileImageComment",()=>d({de:"Nachdem das Sprite mittels der Methode 'makeTiling' zum TileSprite gemacht wurde, kann wirken die Methoden move, scale und rotate immer auf den ganzen gekachelten Bereich. Will man das verfielfachte Bild ändern, so bekommt man über diese Methode das Sprite-Objekt, das diesem Bild entspricht. Ruft man für dieses Objekt die Methoden move, rotate oder scale auf, so wirken sie auf jede der einzelnen Kacheln.",en:"After sprite is converted to tilesprite via method 'makeTiling' you can modify the tiles with the TileImage object returned by this method."})),r(o,"spriteSpriteIsNoTiledSpriteError",()=>d({de:"Das Sprite hat kein TileImage. Sie müssen es zuerst mit der Methode makeTiling in ein Kachel-Sprite umwandeln.",en:"This sprite has no tileImage as it had not beeen converted to a TileSprite via method 'makeTiling'."})),r(o,"spriteGetPixelColorComment",()=>d({de:"Gibt die Farbe des Pixels an der angegebenen Position innerhalb des Sprites zurück.",en:"Returns color of pixel at given position inside sprite."})),r(o,"spriteGetPixelAlphaComment",()=>d({de:"Gibt die Transparenz des Pixels an der angegebenen Position innerhalb des Sprites zurück.",en:"Returns alpha value of pixel at given position inside sprite."})),r(o,"scaleModeEnumComment",()=>d({de:"Art der Interpolation der Pixelfarben beim Skalieren von Sprites",en:"interpolation type used for scaling Sprites"})),r(o,"repeatTypeEnumComment",()=>d({de:"Gibt an, auf welche Art eine Sprite-Animation wiederholt werden soll. Wichtig: RepeatType.once zerstört das Sprite-Objekt nach Ausführung der Animation!",en:"Enumerates how a sprite animation may be repeated. RepeatType.once destroys Sprite after animation."})),r(o,"spriteLibraryComment",()=>d({de:"Aufzählung der Sprite-Grafikbibliotheken",en:"enum of sprite libraries"})),r(o,"collectionToArrayComment",()=>d({de:"Wandelt die Collection in ein Array um und gibt dieses zurück.",en:"Returns an array containing all of the elements in this list in proper sequence (from first to last element)."})),r(o,"collectionToArrayComment2",()=>d({de:"Wandelt die Collection in ein Array um und gibt dieses zurück. Als Parameter muss ein Muster-Array übergeben werden, das den Typ des zurückgegebenen Arrays bestimmt.",en:"Returns an array containing all of the elements in this list in proper sequence (from first to last element); the runtime type of the returned array is that of the specified array."})),r(o,"collectionStreamComment",()=>d({de:"Gibt einen Stream zurück, der diese Collection als Quelle hat.",en:"Returns a stream with this collection as source."})),r(o,"collectionAddElementComment",()=>d({de:"Fügt das übergebene Element ans Ende der Liste an.",en:"Appends the specified element to the end of this list."})),r(o,"collectionAddAllComment",()=>d({de:"Fügt alle Elemente der übergebenen Collection ans Ende der Liste an.",en:"Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's Iterator."})),r(o,"collectionClearComment",()=>d({de:"Entleert die Liste. Die Liste ist nach Aufruf dieser Methode leer. Die Elemente der Liste werden dadurch nicht beeinträchtigt.",en:"Removes all of the elements from this list. The list will be empty after this call returns."})),r(o,"collectionContainsComment",()=>d({de:"Gibt genau dann true zurück, wenn die Liste das angegebene Element enthält.",en:"Returns true if this list contains the specified element."})),r(o,"collectionContainsAllComment",()=>d({de:"Gibt genau dann true zurück, wenn die Liste alle Elemente der übergebenen Collection enthält.",en:"Returns true if this collection contains all of the elements in the specified collection."})),r(o,"collectionIsEmptyComment",()=>d({de:"Gibt genau dann true zurück, wenn die Liste leer ist, d.h. keine Elemente enthält.",en:"Returns true if this list contains no elements."})),r(o,"collectionRemoveObjectComment",()=>d({de:"Falls die Liste das übergebene Element enthält, entnimmt diese Methode der Liste das erste solche Element. Die Methode gibt genau dann true zurück, wenn die Liste das Element enthalten hat.",en:"Removes the first occurrence of the specified element from this list, if it is present. Returns true if element is found."})),r(o,"collectionRemoveAllComment",()=>d({de:"Entnimnt der Liste alle Vorkommen aller Elemente der übergebenen Collection.",en:"Removes from this list all of its elements that are contained in the specified collection."})),r(o,"collectionSizeComment",()=>d({de:"Gibt die Anzahl der in der Liste enthaltenen Elemente zurück. Ist ein Element mehrfach enthalten, so wird es dabei mehrfach gezählt.",en:"Returns the number of elements in this list."})),r(o,"collectionAddAllNullPointerException",()=>d({de:"addAll wurde mit null als Argument aufgerufen.",en:"addAll had been called with null as argument."})),r(o,"collectionContainsAllNullPointerException",()=>d({de:"containsAll wurde mit null als Argument aufgerufen.",en:"containsAll had been called with null as argument."})),r(o,"collectionRemoveAllNullPointerException",()=>d({de:"removeAll wurde mit null als Argument aufgerufen.",en:"removeAll had been called with null as argument."})),r(o,"listAddElementComment",()=>d({de:"Fügt das angegebene Element an der angegebenen Position in die Liste ein. Alle nachfolgendne Elemente werden um eine Position nach hinten verschoben.",en:"Inserts the specified element at the specified position in this list. Shifts the element currently at that position (if any) and any subsequent elements to the right (adds one to their indices)."})),r(o,"listAddAllElementsComment",()=>d({de:"Fügt alle Elemente der übergebenen Collection an der angegebenen Position in die Liste ein. Alle nachfolgendne Elemente werden entsprechend nach hinten verschoben.",en:"Inserts all of the elements in the specified collection into this list, starting at the specified position. Shifts the element currently at that position (if any) and any subsequent elements to the right (increases their indices). The new elements will appear in the list in the order that they are returned by the specified collection's iterator."})),r(o,"listGetComment",()=>d({de:`Gibt das Element an der angegebenen Position zurück. Das erste Element der Liste hat Position 0.`,en:"Returns the element at the specified position in this list. First element in list has position 0."})),r(o,"listIndexOfComment",()=>d({de:`Gibt den Index des angegebenen Elements in der Liste zurück. Falls das Element nicht in der Liste enthalten ist, wird -1 zurückgegeben. Tipp: Das erste Element der Liste hat Index 0.`,en:`Returns the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element. Hint: First element in List has index 0.`})),r(o,"listRemoveComment",()=>d({de:`Entfernt das Element mit dem angegebenen Index aus der Liste. Tipp: Das erste Element der Liste hat Index 0.`,en:`Removes the element at the specified position in this list. Hint: First element in list has index 0.`})),r(o,"listSetComment",()=>d({de:"Setzt das übergebene Element an der angegebenen Position in die Liste anstatt des bisher dort vorhandenen.",en:"Replaces the element at the specified position in this list with the specified element."})),r(o,"listSortComment",()=>d({de:"Sortiert die Liste anhand des übergebenen Comparator-Objekts.",en:"Sorts this list according to the order induced by the specified Comparator."})),r(o,"arrayListClassComment",()=>d({de:"Die Klasse ArrayList ist eine Liste, deren Elemente in einem Array gespeichert sind. Wird das Array zu klein, kopiert die ArrayList es automatisch in ein größeres Array.",en:"An ArrayList is a List backed by an array. If the array gets too small it's automatically copied into a larger one."})),r(o,"arrayListConstructorComment",()=>d({de:"Instanziert (d.h. erzeugt) eine neue, leere Liste.",en:"Constructs an empty list."})),r(o,"arrayListIteratorComment",()=>d({de:"Gibt ein Iterator-Objekt zurück, mit dem über alle Elemente der Liste in der gespeicherten Reihenfolge iteriert werden kann.",en:"Returns an iterator over the elements in this list in proper sequence."})),r(o,"arrayListForeachComment",()=>d({de:`Führt die angegebene Methode (Aktion) für jedes Element der ArrayList aus. Tipp: Die Aktion kann in Lambda-Schreibweise angegeben werden, z.B. foreach((element) -> {...})`,en:"Performs the given action for each element of the Iterable until all elements have been processed or the action throws an exception. Unless otherwise specified by the implementing class, actions are performed in the order of iteration (if an iteration order is specified)."})),r(o,"vectorConstructorComment",()=>d({de:"Instanziert (d.h. erzeugt) eine neue, leere Liste.",en:"Constructs an empty list."})),r(o,"vectorFirstElementComment",()=>d({de:"Gibt das erste Element der Liste zurück.",en:"Returns the first element of this list."})),r(o,"vectorLastElementComment",()=>d({de:"Gibt das letzte Element der Liste zurück.",en:"Returns the last element of this list."})),r(o,"vectorRemoveElementAtComment",()=>d({de:"Entfernt das Element an der angegebenen Position aus der Liste. index == 0 bedeutet das erste Element der Liste.",en:"Removes the element at the specified position in this list. index == 0 means first element of the list."})),r(o,"vectorIteratorComment",()=>d({de:"Gibt ein Iterator-Objekt zurück, mit dem über alle Elemente der Liste in der gespeicherten Reihenfolge iteriert werden kann.",en:"Returns an iterator over the elements in this list in proper sequence."})),r(o,"vectorForeachComment",()=>d({de:`Führt die angegebene Methode (Aktion) für jedes Element der ArrayList aus. Tipp: Die Aktion kann in Lambda-Schreibweise angegeben werden, z.B. foreach((element) -> {...})`,en:"Performs the given action for each element of the Iterable until all elements have been processed or the action throws an exception. Unless otherwise specified by the implementing class, actions are performed in the order of iteration (if an iteration order is specified)."})),r(o,"indexOutOfBoundsException",(t,e)=>d({de:`Der Index ${t} liegt außerhalb des zulässigen Bereichs (0 bis ${e})`,en:`Index ${t} is out of bounds (from 0 up to ${e})`})),r(o,"comparableInterfaceComment",()=>d({en:`This interface imposes a total ordering on the objects of each class that implements it. This ordering is referred to as the class's natural ordering, and the class's compareTo method is referred to as its natural comparison method. Lists (and arrays) of objects that implement this interface can be sorted automatically by Collections.sort (and Arrays.sort). Objects that implement this interface can be used as keys in a sorted map or as elements in a sorted set, without the need to specify a comparator.`,de:"Klassen, die dieses Interface implementieren, haben eine Methode compareTo, mit der sich zwei Objekte der Klasse vergleichen lassen."})),r(o,"comparableCompareToComment",()=>d({de:"Vergleicht das Objekt mit dem übergebenen Objekt. Liefert eine negative Zahl zurück, wenn das Objekt 'kleiner' ist als das übergebene, eine positive, falls es größer ist und 0, wenn beide Objekte gleich sind.",en:"Compares this object with the specified object for order. Returns a negative value if this object is 'smaller' than the specified object, a positive value if it is 'larger' and 0 if they are equal."})),r(o,"comparatorInterfaceComment",()=>d({de:"A Comparator is a object that can compare objects of class T.",en:"A comparison function, which imposes a total ordering on some collection of objects."})),r(o,"compataratorCompareComment",()=>d({de:"Vergleicht die zwei angegebenen Objekte. Gibt eine negative Zahl zurück, falls das erste 'kleiner' ist als das zweite, eine positive Zahl, falls es 'größer' ist und 0 falls die beiden Objekte 'gleich' sind.",en:"Compares its two arguments for order. Returns a negative value if the first object is 'smaller' than the second, a positive value if it is 'larger' than the second one and 0 if they are 'equal'."})),r(o,"iterableInterfaceComment",()=>d({de:"Objekte von Klassen, die dieses Interface implementieren, können in einer vereinfachten for-loop (for(object o: list){...}) verwendet werden.",en:"Implementing this interface allows an object to be the target of the 'for-each loop' statement. See For-each Loop"})),r(o,"iterableIteratorComment",()=>d({de:"Gibt ein Iterator-Objekt für dieses Iterable-Objekt zurück.",en:"Returns an iterator over elements of type T."})),r(o,"iterableForEachComment",()=>d({de:"Führt die angegebene Aktion für jedes Element dieses Iterable-Objekts aus.",en:"Performs the given action for each element of the Iterable until all elements have been processed."})),r(o,"iteratorInterfaceComment",()=>d({de:"Ein Iterator ist ein Objekt, das die Elemente einer Liste der Reihe nach einzeln liefern kann.",en:"An Iterator can return all objects of a list one at a time."})),r(o,"iteratorHasNextComment",()=>d({de:"Liefert true zurück falls es noch weitere Elemente gibt, die mit der Methoe next() abgerufen werden können.",en:"Returns true if the iteration has more elements."})),r(o,"iteratorNextComment",()=>d({de:"Liefert das nächste Element.",en:"Returns the next element of the iteration."})),r(o,"mathPIComment",()=>d({de:"Die Zahl Pi (3.14159...) in double-Genauigkeit (ca. 15 Nachkommastellen)",en:"Number Pi (3.14159...) in double precision (around 15 digits)"})),r(o,"mathEComment",()=>d({de:"Die Zahl e (2.718281828459045...) in double-Genauigkeit (ca. 15 Nachkommastellen)",en:"Number e (2.718281828459045...) in double precision (around 15 digits)"})),r(o,"mathAbsComment",()=>d({de:"Betrag der übergebenen Zahl",en:"Absolute value of given number"})),r(o,"mathSinComment",()=>d({de:"Sinus des übergebenen Winkels (im Bogenmaß)",en:"Sine of given angle (in radians)"})),r(o,"mathCosinComment",()=>d({de:"Cosinus des übergebenen Winkels (im Bogenmaß)",en:"Cosine of given angle (in radians)"})),r(o,"mathTanComment",()=>d({de:"Tangens des übergebenen Winkels (im Bogenmaß)",en:"Tangens of given angle (in radians)"})),r(o,"mathArcsinComment",()=>d({de:"Arcussinus der übergebenen Zahl",en:"Arc sine of given number"})),r(o,"mathArccosComment",()=>d({de:"Arcuscosinus der übergebenen Zahl",en:"Arc cosinus of given number"})),r(o,"mathArctanComment",()=>d({de:"Arcustangens der übergebenen Zahl",en:"Arc tan of given number"})),r(o,"mathAtan2Comment",()=>d({de:"Gibt den Winkel (im Bogenmaß) von der positiven x-Achse aus zum Vektor (x/y) zurück.",en:"Returns angle (in radians) from positive x-axis to vector (x/y)."})),r(o,"mathRoundComment",()=>d({de:"Rundet die übergebene Zahl auf eine ganze Zahl. Ab '...,5' wird aufgerundet.",en:"Rounds given number."})),r(o,"mathFloorComment",()=>d({de:"Rundet die übergebene Zahl auf eine ganze Zahl ab, d.h. aus 45.9 wird beispielsweise 45.",en:"Rounds given number down."})),r(o,"mathCeilComment",()=>d({de:"Rundet die übergebene Zahl auf eine ganze Zahl auf, d.h. aus 45.1 wird beispielsweise 46.",en:"Rounds given number up."})),r(o,"mathSignComment",()=>d({de:"Vorzeichen einer Zahl, d.h. -1 falls die Zahl negativ ist, +1 falls die Zahl positiv ist und 0, falls die Zahl 0 ist.",en:"Sign of the given number: -1 if number is less then 0, +1 if number is > 0 and 0 if number is 0."})),r(o,"mathSqrtComment",()=>d({de:"Quadratwurzel der Zahl",en:"Square root of given number"})),r(o,"mathRandomComment",()=>d({de:"Zufallszahl aus dem Bereich [0; 1[",en:"Random number out of [0; 1["})),r(o,"mathPowComment",()=>d({de:"Potenz 'Basis hoch Exponent'",en:"base to the power of exponent"})),r(o,"mathToDegreesComment",()=>d({de:"Wandelt den übergebenen Winkel vom Bogenmaß ins Gradmaß um, d.h. berechnet angle/pi * 180.",en:"Transforms given angle from radians to degrees."})),r(o,"mathToRadiansComment",()=>d({de:"Wandelt den übergebenen Winkel vom Gradmaß ins Bogenmaß um, d.h. berechnet angle/180 * pi.",en:"Transforms given angle from degrees to radians."})),r(o,"mathExpComment",()=>d({de:"Berechnet 'e hoch zahl'",en:"Calculates 'e to the power of given number'"})),r(o,"mathLogComment",()=>d({de:"Berechnet den natürlichen Logarithmus der Zahl",en:"Returns the natural logarithm (base e) of a double value."})),r(o,"mathLog10Comment",()=>d({de:"Berechnet den Logarithmus der Zahl zur Basis 10.",en:"Returns the base 10 logarithm of a double value."})),r(o,"mathMaxComment",()=>d({de:"Gibt die größere der beiden Zahlen zurück.",en:"Returns the greater of two values."})),r(o,"mathMinComment",()=>d({de:"Gibt die kleinere der beiden Zahlen zurück.",en:"Returns the smaller of two values."})),r(o,"RandomClassComment",()=>d({de:"Die Klasse Random stellt Methoden zur Erzeugung von Zufallszahlen zur Verfügung.",en:"Class Random provides methods to generate random numbers."})),r(o,"randomRandIntComment",()=>d({de:"Gibt eine ganze Zufallszahl aus dem Bereich {from, from + 1, ... , to} zurück.",en:"Returns a natural random value out of {from, from + 1, ... , to}."})),r(o,"randomRandDoubleComment",()=>d({de:"Gibt eine ganze Zufallszahl aus dem Bereich [from, to[ zurück.",en:"Returns a natural random value out of [from, to[."})),r(o,"randomNextIntComment",()=>d({de:"Gibt eine ganzzahlige Zufallszahl aus der Menge {0, 1, ..., bound - 1} zurück.",en:"Returns a natural number out of {0, 1, ..., bound - 1}."})),r(o,"DecimalFormatClassComment",()=>d({de:"Die Klasse DecimalFormat wird zum Formatieren von Zahlen genutzt.",en:"Class DecimalFormat provides methods to format numbers."})),r(o,"decimalFormatConstructorComment",()=>d({de:"Erzeugt ein neues DecimalFormat-Object. Zur Bedeutung von format siehe https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html",en:"Creates a new DecimalFormat object. For possible values for format see https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html"})),r(o,"decimalFormatFormatComment",()=>d({de:"Die Methode Format gibt die Zahl formatiert als String zurück.",en:"Formats a number to produce a string."})),r(o,"optionalClassComment",()=>d({de:"Ein Container-Objekt das einen Nicht-null-Wert enthalten kann oder auch nicht. Falls es eine Wert enthält liefert isPresent() true und get() den Wert.",en:"A container object which may or may not contain a non-null value. If a value is present, isPresent() will return true and get() will return the value."})),r(o,"optionalEmptyComment",()=>d({de:"Gibt ein leeres Optional-Objekt zurück.",en:"Returns an empty Optional instance."})),r(o,"optionalEqualsComment",()=>d({de:"Gibt genau dann true zurück, wenn beide Optional-Objekte leer sind oder wenn die enthaltenen Objekte gleich sind, ausgehend von deren equals-Funktion.",en:`Indicates whether some other object is "equal to" this Optional. The other object is considered equal if: it is also an Optional and; both instances have no value present or; the present values are "equal to" each other via equals().`})),r(o,"optionalIsEmptyComment",()=>d({de:"Gibt genau dann zurück, wenn im Optional-Objekt kein Wert enthalten ist.",en:"If a value is not present, returns true, otherwise false."})),r(o,"optionalMapComment",()=>d({de:"Wenn das Optional-Objekt einen Wert enthält liefert diese Methode Optional.of(f(Wert)) zurück, ansonsten ein leeres Optional-Objekt.",en:"If a value is present, returns an Optional describing (as if by ofNullable(T)) the result of applying the given mapping function to the value, otherwise returns an empty Optional."})),r(o,"optionalFlatMapComment",()=>d({de:"Wenn das Optional-Objekt einen Wert enthält liefert diese Methode f(Wert) zurück, ansonsten ein leeres Optional-Objekt.",en:"If a value is present, returns the result of applying the given Optional-bearing mapping function to the value, otherwise returns an empty Optional."})),r(o,"optionalOfComment",()=>d({de:"Gibt ein Optional-Objekt zurück das den gegebenen (von null verschiedenen) Wert enthält.",en:"Returns an Optional describing the given non-null value."})),r(o,"optionalOrElseComment",()=>d({de:"Wenn das Optional-Objekt einen Wert enthält liefert die Methode diesen zurück, ansonsten den übergebenen Wert t.",en:"If a value is present, returns the value, otherwise returns other."})),r(o,"optionalIfPresentComment",()=>d({de:"Wenn das Optional-Objekt einen Wert enthält wird damit die übergebene Aktion ausgeführt, ansonsten wird nichts gemacht.",en:"If a value is present, performs the given action with the value, otherwise does nothing."})),r(o,"optionalToStringComment",()=>d({de:"Gibt eine nichtleere String-Darstellung des Optional-Objekts zurück, passend zum Debuggen.",en:"Returns a non-empty string representation of this Optional suitable for debugging."})),r(o,"RunnableInterfaceComment",()=>d({de:"Das Runnable-Interface wird von Klassen implementiert, die eine Methode run() besitzen, die in einem neuen Thread ausgeführt werden soll.",en:"The Runnable interface should be implemented by any class whose instances are intended to be executed by a thread. The class must define a method of no arguments called run."})),r(o,"runnableRunComment",()=>d({de:"WEnn ein Objekt, das das Interface Runnable implementiert, benutzt wird, um einen Thread zu erstellen, bewirkt das Starten des Threads die Ausführung der run()-Methode in diesem Thread.",en:"When an object implementing interface Runnable is used to create a thread, starting the thread causes the object's run method to be called in that separately executing thread."})),r(o,"semaphoreClassComment",()=>d({de:"Ein zählender Semaphor",en:"A counting semaphore. Conceptually, a semaphore maintains a set of permits. Each acquire() blocks if necessary until a permit is available, and then takes it. Each release() adds a permit, potentially releasing a blocking acquirer. "})),r(o,"semaphoreConstructorComment",()=>d({de:"Erstellt einen Semaphor mit der angegebenen Zahl von Permits.",en:"Creates a Semaphore with the given number of permits."})),r(o,"semaphoreAvailablePermitsComment",()=>d({de:"Gibt die Anzahl an Permits zurück, die in diesem Semaphor aktuell vorhanden ist.",en:"Returns the current number of permits available in this semaphore."})),r(o,"semaphoreAcquireComment",()=>d({de:"Beschafft ein Permit. Falls keines vorhanden sind wird der Thread blockiert. Der Thread bleibt blockiert bis wieder ein Permit vorhanden ist oder der Thread unterbrochen (interrupted) wird.",en:"Acquires a permit from this semaphore, blocking until one is available, or the thread is interrupted."})),r(o,"semaphoreReleaseComment",()=>d({de:"Gibt ein Permit frei und führt es dem Semaphor wieder zu.",en:"Releases a permit, returning it to the semaphore."})),r(o,"threadClassComment",()=>d({de:"Ein Thread ist ein 'Ausführungsstrang' in einem Programm. Die Online IDE ermöglicht die gleichzeitige Ausführung mehrerer Threads.",en:"A thread is a thread of execution in a program. The Online IDE allows an application to have multiple threads of execution running concurrently."})),r(o,"threadConstructorComment",()=>d({de:"Erstellt ein neues Thread-Objekt, startet den Thread aber noch nicht.",en:"Creates a new Thread object."})),r(o,"threadConstructorRunnableComment",()=>d({de:"Erstellt ein neues Thread-Objekt. Wird der Thread gestartet, so wird die run()-Methode des übergebenen Runnable-Objekts ausgeführt.",en:"Creates a new Thread object. When starting this thread method run() of given Runnable-object ist called concurrently to the existing threads."})),r(o,"threadGetStateComment",()=>d({de:"Gibt den state des threads zurück.",en:"Returns the state of this thread."})),r(o,"threadRunComment",()=>d({de:"Führt die run()-Methode des bei diesem Thread gespeicherten Runnable-Objekts im AKTUELLEN thread aus. Die Wirkung ist dieselbe, als würde man die run()-Methode des Runnable-Objekts einfach aufrufen.",en:"Calls run()-Method of this thread's Runnable object in CURRENT thread."})),r(o,"threadStartComment",()=>d({de:"Führt die run()-Methode des bei diesem Thread gespeicherten Runnable-Objekts nebenläufig (parallel) zum aktuellen Thread aus.",en:"Runs the run()-Method of this thread's runnable object CONCURRENTLY to the current thread."})),r(o,"threadJoinComment",()=>d({de:"Wartet bis der Thread beendet (terminated) ist.",en:"Waits for this thread to die (state: terminated)."})),r(o,"threadJoinComment2",()=>d({de:"Wartet bis der Thread beendet (terminated) ist, längstens aber die übergebene Zahl an Millisekunden.",en:"Waits for this thread to die (state: terminated), at most given milliseconds."})),r(o,"threadGetNameComment",()=>d({de:"Gibt den Namen des Threads zurück.",en:"Returns the name of this thread."})),r(o,"threadSetNameComment",()=>d({de:"Ändert den Namen dieses Threads.",en:"Sets the name of this thread."})),r(o,"threadSetSpeedComment",()=>d({de:"Setzt die gewünschte Ausführungsgeschwindigkeit des Threads in Schritten/Sekunde. Werte <= 0 bewirken die Ausführung mit maximaler Geschwidigkeit.",en:"Sets speed of thread in steps/second. Values <= 0 mean 'maximum speed'."})),r(o,"threadSleepComment",()=>d({de:"Bewirkt, dass der gerade ausgeführte Thread für die angegebene Zeit (in Millisekunden) pausiert (schläft). Die genaue Länge des 'Schlafes' hängt von der Genauigkeit des Laufzeitsystems und vom Scheduler ab.",en:"Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers."})),r(o,"threadCurrentThreadComment",()=>d({de:"Gibt das Thread-Objekt für den gerade ausgeführten Thread zurück.",en:"Returns the Thread object for the current thread."})),r(o,"millisecondsNotPositiveError",()=>d({de:"Die angegebene Zeit in Millisekunden muss größer als 0 sein.",en:"Given time in milliseconds has to be positive."})),r(o,"PAppletClassComment",()=>d({de:"Wenn Du Deine Klasse von PApplet ableitest (class Test extends PApplet{...}), kannst Du auf diese Weise ein Processing-Applet erstellen (siehe https://processing.org), indem Du ihre Methoden draw(), mousePressed(), usw. überschreibst und mit Inhalt füllst. Du startest das Applet, indem Du ein Objekt Deiner Klasse instanzierst und davon die main-Methode aufrufst: new Test().main();",en:"You can create a processing-Applet by extending class PApplet (class Test extends PApplet{...}), see https://processing.org. Overwrite it's methods draw(), mousePressed(), ... to get graphic output and interaction."})),r(o,"PAppletConstructorComment",()=>d({de:"Legt eine neues Processing-Applet an.",en:"Creates a new processing Applet."})),r(o,"PAppletLoopComment",()=>d({de:"Startet nach noLoop() die Renderer-Loop wieder neu, so dass draw() wieder periodisch aufgerufen wird.",en:""})),r(o,"PAppletNoLoopComment",()=>d({de:"Stoppt die Render-Loop, so dass draw() nicht mehr aufgerufen wird. Kann mit loop() wieder gestartet werden.",en:""})),r(o,"PAppletSizeComment",()=>d({de:"Definiert die Abmessungen des Processing-Ausgabebereichs in Pixeln.",en:""})),r(o,"PAppletCreateCanvasComment",()=>d({de:"Definiert die Abmessungen des Processing-Ausgabebereichs in Pixeln.",en:""})),r(o,"PAppletSetupComment",()=>d({de:"Diese Methode wird nach Aufruf von main() genau ein Mal aufgerufen.",en:"This method is called once after main() had been called."})),r(o,"PAppletSettingsComment",()=>d({de:"Diese Methode wird nach Aufruf von main() genau ein Mal aufgerufen.",en:"This method is called once after main() had been called."})),r(o,"PAppletPreloadComment",()=>d({de:"Diese Methode wird nach Aufruf von main() genau ein Mal aufgerufen.",en:"This method is called once after main() had been called."})),r(o,"PAppletDrawComment",()=>d({de:"Diese Methode wird 60-mal pro Sekunde aufgerufen. Ihr Zweck ist es, die Grafikausgabe zu zeichnen.",en:"This method is called 60 times per second. It's purpose is to draw."})),r(o,"PAppletMousePressedComment",()=>d({de:"Die mousePressed-Methode wird immer dann aufgerufen, wenn gerade eine Maustaste heruntergedrückt wurde. Die aktuellen Koordinaten des Mauszeigers liegen in den Attributen mouseX und mouseY vor, die gerade heruntergedrückte Maustaste kann dem Attribut mouseButton entnommen werden.",en:""})),r(o,"PAppletMouseReleasedComment",()=>d({de:"Die mouseReleased-Methode wird immer dann aufgerufen, wenn gerade eine Maustaste losgelassen wurde. Die aktuellen Koordinaten des Mauszeigers liegen in den Attributen mouseX und mouseY vor, die gerade heruntergedrückte Maustaste kann dem Attribut mouseButton entnommen werden.",en:""})),r(o,"PAppletMouseClickedComment",()=>d({de:"Die mouseClicked-Methode wird immer dann aufgerufen, wenn gerade eine Maustaste auf dem Zeichenbereich gedrückt und anschließend losgelassen wurde. Die aktuellen Koordinaten des Mauszeigers liegen in den Attributen mouseX und mouseY vor, die gerade heruntergedrückte Maustaste kann dem Attribut mouseButton entnommen werden.",en:""})),r(o,"PAppletMouseDraggedComment",()=>d({de:"Die mouseDragged-Methode wird immer dann aufgerufen, wenn eine Maustaste gerade heruntergedrückt ist und die Position des Mauszeigers sich verändert hat. Die aktuellen Koordinaten des Mauszeigers liegen in den Attributen mouseX und mouseY vor, die zuletzt gedrückte Maustaste kann dem Attribut mouseButton entnommen werden.",en:""})),r(o,"PAppletMouseMovedComment",()=>d({de:"Die mouseMoved-Methode wird immer dann aufgerufen, wenn die Position des Mauszeigers sich verändert hat. Die aktuellen Koordinaten des Mauszeigers liegen in den Attributen mouseX und mouseY vor, die zuletzt gedrückte Maustaste kann dem Attribut mouseButton entnommen werden.",en:""})),r(o,"PAppletMouseEnteredComment",()=>d({de:"Die mouseEntered-Methode wird immer dann aufgerufen, wenn der Mauszeiger von außen neu in den Zeichenbereich hineinfährt.",en:""})),r(o,"PAppletMouseExitedComment",()=>d({de:"Die mouseExited-Methode wird immer dann aufgerufen, wenn der Mauszeiger den Zeichenbereich gerade verlassen hat.",en:""})),r(o,"PAppletKeyPressedComment",()=>d({de:"Die keyPressed-Methode wird immer dann aufgerufen, wenn eine Taste gerade heruntergedrückt wurde. Informationen zur Taste können den Attributen key (String) und keyCode (int) entnommen werden.",en:""})),r(o,"PAppletKeyReleasedComment",()=>d({de:"Die keyReleased-Methode wird immer dann aufgerufen, wenn eine Taste gerade losgelassen wurde. Informationen zur Taste können den Attributen key (String) und keyCode (int) entnommen werden.",en:""})),r(o,"PAppletMainComment",()=>d({de:"Rufen Sie die Methode main() auf, um das Processing-Applet zu starten.",en:"Call method main() to start this processing Applet."})),r(o,"PAppletMouseXComment",()=>d({de:"aktuelle x-Koordinate des Mauszeigers",en:"current x-coordinate of mouse pointer"})),r(o,"PAppletMouseYComment",()=>d({de:"aktuelle y-Koordinate des Mauszeigers",en:"current y-coordinate of mouse pointer"})),r(o,"PAppletPMouseXComment",()=>d({de:"x-Koordinate des Mauszeigers im vorherigen Frame",en:"x-coordinate of mouse pointer in previous frame"})),r(o,"PAppletPMouseYComment",()=>d({de:"y-Koordinate des Mauszeigers im vorherigen Frame",en:"y-coordinate of mouse pointer in previous frame"})),r(o,"PAppletLEFTComment",()=>d({de:"links",en:"left"})),r(o,"PAppletCENTERComment",()=>d({de:"Mitte",en:"center"})),r(o,"PAppletRIGHTComment",()=>d({de:"rechts",en:"right"})),r(o,"PAppletTOPComment",()=>d({de:"obenbündig",en:"top"})),r(o,"PAppletBASELINEComment",()=>d({de:"bündig auf der Grundlinie",en:"baseline"})),r(o,"PAppletBOTTOMComment",()=>d({de:"untenbündig",en:"bottom"})),r(o,"PAppletWidthComment",()=>d({de:"Breite des Zeichenbereichs",en:"width of canvas"})),r(o,"PAppletHeightComment",()=>d({de:"Höhe des Zeichenbereichs",en:"height of canvas"})),r(o,"PAppletKeyCodeComment",()=>d({de:"Zahlencode der zuletzt gedrückten Taste",en:"keycode of previously pressed key"})),r(o,"PAppletMouseButtonComment",()=>d({de:"Zuletzt gedrückte Maustaste, kann die Werte LEFT, RIGHT und CENTER annehmen.",en:"Previously pressed mouse button. Possible values are LEFT, RIGHT or CENTER."})),r(o,"PAppletCORNERComment",()=>d({de:"Modus zum Zeichnen von Rechtecken.",en:"Mode to draw rectangles."})),r(o,"PAppletCORNERSComment",()=>d({de:"Modus zum Zeichnen von Rechtecken.",en:"Mode to draw rectangles."})),r(o,"PAppletRADIUSComment",()=>d({de:"Modus zum Zeichnen von Rechtecken.",en:"Mode to draw rectangles."})),r(o,"PAppletPOINTSComment",()=>d({de:"zeichne nachfolgend Einzelpunkte",en:"draw points only"})),r(o,"PAppletLINESComment",()=>d({de:"zeichne nachfolgend einzelne Linien",en:"draw lines subsequently"})),r(o,"PAppletTRIANGLESComment",()=>d({de:"zeichne nachfolgend einzelne Dreiecke",en:"draw triangles subsequently"})),r(o,"PAppletTRIANGLE_STRIPComment",()=>d({de:"zeichne nachfolgend einen Triangle-Strip",en:"draw triangle-strip subesequently"})),r(o,"PAppletTRIANGLE_FANComment",()=>d({de:"zeichne nachfolgend einen Triangle-Fan",en:"draw triangle-fan subesequently"})),r(o,"PAppletQUADSComment",()=>d({de:"zeichne nachfolgend Vierecke",en:"draw quads subsequently"})),r(o,"PAppletQUAD_STRIPComment",()=>d({de:"zeichne nachfolgend einen Quad-Strip",en:"draw quad-strip subsequently"})),r(o,"PAppletTESSComment",()=>d({de:"zeichne nachfolgend ein TESS - geht nur bei createCanvas(width, height, WEBGL)",en:"draw TESS subsequently - only possible with createCanvas(width, height, WEBGL)"})),r(o,"PAppletCLOSEComment",()=>d({de:"endShape(CLOSE) schließt den Linienzug",en:"endShape(CLOSE) closes line-strip"})),r(o,"PAppletDEGREESComment",()=>d({de:"angleMode(DEGREES) sorgt dafür, dass nachfolgende Winkelangaben in Grad interpretiert werden.",en:"angleMode(DEGREES) makes processing interpret subsequent angle values as degrees"})),r(o,"PAppletRADIANSComment",()=>d({de:"angleMode(RADIANS) sorgt dafür, dass nachfolgende Winkelangaben im Bogenmaß interpretiert werden.",en:"angleMode(RADIANS) makes processing interpret subsequent angle values as radians"})),r(o,"PAppletWEBGLComment",()=>d({de:"WebGL-Renderer zur 3D-Ausgabe",en:"WebGL-Renderer for 3D-output"})),r(o,"PAppletP2DComment",()=>d({de:"Renderer zur zweidimensionalen Ausgabe",en:"Renderer for 2D-Output"})),r(o,"PAppletRGBComment",()=>d({de:"Color-Mode RGB (rot, grün, blau)",en:"color mode RGB (red, green, blue)"})),r(o,"PAppletHSLComment",()=>d({de:"Color-Mode HSL",en:"color mode HSL"})),r(o,"PAppletHSBComment",()=>d({de:"Color-Mode HSB",en:"color mode HSB"})),r(o,"PAppletKeyComment",()=>d({de:"Letzte gedrückte Taste",en:"previously pressed key"})),r(o,"PAppletClear0Comment",()=>d({de:"Löscht die Zeichenfläche.",en:"Clears the pixels on the canvas. clear() makes every pixel 100% transparent."})),r(o,"PAppletBackground1Comment",()=>d({de:"Übermalt die komplette Zeichenfläche mit der übergebenen Farbe.",en:"Sets the color used for the background of the canvas."})),r(o,"PAppletBackground2Comment",()=>d({de:"Übermalt die komplette Zeichenfläche mit der übergebenen Farbe. Übergeben wird eine Zeichenkette der Form 'rgb(0,0,255)' oder 'rgb(0%, 0%, 100%)' oder 'rgba(0, 0, 255, 1)' oder 'rgba(0%, 0%, 100%, 1)' und all diese Kombinationen statt rgb auch mit hsl und hsb.",en:"Sets the color used for the background of the canvas. Write color as 'rgb(0,0,255)' or 'rgb(0%, 0%, 100%)' or 'rgba(0, 0, 255, 1)' or 'rgba(0%, 0%, 100%, 1)' or use hsl or hsb instead of rgb."})),r(o,"PAppletBackground3Comment",()=>d({de:"Übermalt die komplette Zeichenfläche mit der übergebenen Farbe. v1, v2 und v3 sind - abhängig vom aktuellen color mode - rot, grün und blauwert oder Farbe, Sättigung und Helligkeit",en:"Sets the color used for the background of the canvas. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletFill1Comment",()=>d({de:"Setzt die Füllfarbe.",en:"Sets the color used to fill shapes."})),r(o,"PAppletFill1aComment",()=>d({de:"Setzt die Füllfarbe.",en:"Sets the color used to fill shapes."})),r(o,"PAppletFill2Comment",()=>d({de:"Setzt die Füllfarbe.",en:"Sets the color used to fill shapes."})),r(o,"PAppletFill3Comment",()=>d({de:"Setzt die Füllfarbe.",en:"Sets the color used to fill shapes."})),r(o,"PAppletFill4Comment",()=>d({de:"Setzt die Füllfarbe. v1, v2 und v3 sind - abhängig vom aktuellen color mode - rot, grün und blauwert oder Farbe, Sättigung und Helligkeit",en:"Sets the color used to fill shapes. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletFill5Comment",()=>d({de:"Setzt die Füllfarbe. v1, v2 und v3 sind - abhängig vom aktuellen color mode - rot, grün und blauwert oder Farbe, Sättigung und Helligkeit",en:"Sets the color used to fill shapes. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletNoFill0Comment",()=>d({de:"Die nachfolgend gezeichneten Figuren werden nicht gefüllt.",en:"Subsequently drawn shapes will not get filled."})),r(o,"PAppletStroke1Comment",()=>d({de:"Setzt die Linienfarbe.",en:"Sets the color used to draw points, lines, and the outlines of shapes."})),r(o,"PAppletStroke1aComment",()=>d({de:"Setzt die Linienfarbe.",en:"Sets the color used to draw points, lines, and the outlines of shapes."})),r(o,"PAppletStroke2Comment",()=>d({de:"Setzt die Linienfarbe.",en:"Sets the color used to draw points, lines, and the outlines of shapes."})),r(o,"PAppletStroke3Comment",()=>d({de:"Setzt die Linienfarbe.",en:"Sets the color used to draw points, lines, and the outlines of shapes."})),r(o,"PAppletStroke4Comment",()=>d({de:"Setzt die Linienfarbe. v1, v2 und v3 sind - abhängig vom aktuellen color mode - rot, grün und blauwert oder Farbe, Sättigung und Helligkeit",en:"Sets the color used to draw points, lines, and the outlines of shapes. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletStroke5Comment",()=>d({de:"Setzt die Linienfarbe. v1, v2 und v3 sind - abhängig vom aktuellen color mode - rot, grün und blauwert oder Farbe, Sättigung und Helligkeit",en:"Sets the color used to draw points, lines, and the outlines of shapes. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletStrokeWeight1Comment",()=>d({de:"Setzt die Linienbreite.",en:"Sets the width of the stroke used for points, lines, and the outlines of shapes."})),r(o,"PAppletNoStroke0Comment",()=>d({de:"Die nachfolgend gezeichneten Figuren werden ohne Rand gezeichnet.",en:""})),r(o,"PAppletColor1Comment",()=>d({de:"Gibt den Grauton als String-kodierte Farbe zurück.",en:"Disables drawing points, lines, and the outlines of shapes."})),r(o,"PAppletColor2Comment",()=>d({de:"Gibt die Farbe zurück. Übergeben kann eine Zeichenkette der Form 'rgb(0,0,255)' oder 'rgb(0%, 0%, 100%)' oder 'rgba(0, 0, 255, 1)' oder 'rgba(0%, 0%, 100%, 1)' und all diese Kombinationen statt rgb auch mit hsl und hsb.",en:"Converts string like 'rgb(0,0,255)' or 'rgb(0%, 0%, 100%)' or 'rgba(0, 0, 255, 1)' or 'rgba(0%, 0%, 100%, 1)' to a color."})),r(o,"PAppletColor3Comment",()=>d({de:"Gibt den Grauton als String-kodierte Farbe zurück.",en:"Returns gray value of given color"})),r(o,"PAppletColor4Comment",()=>d({de:"Gibt die aus v1, v2, v3 gebildete Farbe String-kodiert zurück.",en:"Returns color given by v1, v2 and v3. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletColor5Comment",()=>d({de:"Gibt die aus v1, v2, v3 und alpha gebildete Farbe String-kodiert zurück.",en:"Returns color given by v1, v2 and v3. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletLerpColor3Comment",()=>d({de:"Gibt eine Zwischenfarbe zwischen colorA und colorB zurück. t == 0 bedeutet: colorA, t == 1 bedeutet: colorB, t == 0.5 bedeutet: genau zwischen beiden, usw.",en:"Blends two colors to find a third color between them. The amt parameter specifies the amount to interpolate between the two values. 0 is equal to the first color, 0.1 is very near the first color, 0.5 is halfway between the two colors, and so on."})),r(o,"PAppletColorMode1Comment",()=>d({de:"Setzt den Modus, in dem nachfolgende Aufrufe von color(...) interpretiert werden. Möglich sind die Werte RGB, HSL und HSB.",en:`Changes the way color values are interpreted. By default, the Number parameters for fill(), stroke(), background(), and color() are defined by values between 0 and 255 using the RGB color model. This is equivalent to calling colorMode(RGB, 255). Pure red is color(255, 0, 0) in this model. Calling colorMode(RGB, 100) sets colors to use RGB color values between 0 and 100. Pure red is color(100, 0, 0) in this model. Calling colorMode(HSB) or colorMode(HSL) changes to HSB or HSL system instead of RGB. Pure red is color(0, 100, 100) in HSB and color(0, 100, 50) in HSL.`})),r(o,"PAppletColorMode2Comment",()=>d({de:"Setzt den Modus, in dem nachfolgende Aufrufe von color(...) interpretiert werden. Möglich sind die Werte RGB, HSL und HSB für Mode. Max ist der Maximalwert jeder Farbkomponente.",en:`Changes the way color values are interpreted. By default, the Number parameters for fill(), stroke(), background(), and color() are defined by values between 0 and 255 using the RGB color model. This is equivalent to calling colorMode(RGB, 255). Pure red is color(255, 0, 0) in this model. Calling colorMode(RGB, 100) sets colors to use RGB color values between 0 and 100. Pure red is color(100, 0, 0) in this model. Calling colorMode(HSB) or colorMode(HSL) changes to HSB or HSL system instead of RGB. Pure red is color(0, 100, 100) in HSB and color(0, 100, 50) in HSL.`})),r(o,"PAppletColorMode4Comment",()=>d({de:"Setzt den Modus, in dem nachfolgende Aufrufe von color(...) interpretiert werden. Möglich sind die Werte RGB, HSL und HSB für Mode. Max ist der Maximalwert jeder Farbkomponente.",en:`Changes the way color values are interpreted. By default, the Number parameters for fill(), stroke(), background(), and color() are defined by values between 0 and 255 using the RGB color model. This is equivalent to calling colorMode(RGB, 255). Pure red is color(255, 0, 0) in this model. Calling colorMode(RGB, 100) sets colors to use RGB color values between 0 and 100. Pure red is color(100, 0, 0) in this model. Calling colorMode(HSB) or colorMode(HSL) changes to HSB or HSL system instead of RGB. Pure red is color(0, 100, 100) in HSB and color(0, 100, 50) in HSL.`})),r(o,"PAppletColorMode5Comment",()=>d({de:"Setzt den Modus, in dem nachfolgende Aufrufe von color(...) interpretiert werden. Möglich sind die Werte RGB, HSL und HSB für Mode. Max ist der Maximalwert jeder Farbkomponente.",en:`Changes the way color values are interpreted. By default, the Number parameters for fill(), stroke(), background(), and color() are defined by values between 0 and 255 using the RGB color model. This is equivalent to calling colorMode(RGB, 255). Pure red is color(255, 0, 0) in this model. Calling colorMode(RGB, 100) sets colors to use RGB color values between 0 and 100. Pure red is color(100, 0, 0) in this model. Calling colorMode(HSB) or colorMode(HSL) changes to HSB or HSL system instead of RGB. Pure red is color(0, 100, 100) in HSB and color(0, 100, 50) in HSL.`})),r(o,"PAppletRectMode1Comment",()=>d({de:"Setzt den Modus, in dem nachfolgende Aufrufe von rect(...) interpretiert werden. Möglich sind die Werte CORNER, CORNERS, RADIUS und CENTER.",en:`Changes where rectangles and squares are drawn. By default, the first two parameters of rect() and square(), are the x- and y-coordinates of the shape's upper left corner. The next parameters set the shape's width and height. This is the same as calling rectMode(CORNER). rectMode(CORNERS) also uses the first two parameters as the location of one of the corners. The next parameters are the location of the opposite corner. This mode only works for rect(). rectMode(CENTER) uses the first two parameters as the x- and y-coordinates of the shape's center. The next parameters are its width and height. rectMode(RADIUS) also uses the first two parameters as the x- and y-coordinates of the shape's center. The next parameters are half of the shape's width and height.`})),r(o,"PAppletRect1Comment",()=>d({de:"Zeichnet ein Rechteck. (left, top) ist die linke obere Ecke, width die Breite und height die Höhe des Rechtecks.",en:"Draws a rectangle."})),r(o,"PAppletRect1aComment",()=>d({de:"Zeichnet ein Rechteck mit abgerundeten Ecken. (left, top) ist die linke obere Ecke, width die Breite und height die Höhe des Rechtecks.",en:"Draws a rectangle with rounded edges."})),r(o,"PAppletRect1bComment",()=>d({de:"Zeichnet ein Rechteck mit abgerundeten Ecken. (left, top) ist die linke obere Ecke, width die Breite und height die Höhe des Rechtecks.",en:"Draws a rectangle with rounded edges."})),r(o,"PAppletSquare1Comment",()=>d({de:"Zeichnet ein Quadrat. (left, top) ist die linke obere Ecke, width Seitenlänge des Quadrats.",en:"Draws a square."})),r(o,"PAppletSquare1aComment",()=>d({de:"Zeichnet ein Quadrat mit abgerundeten Ecken. (left, top) ist die linke obere Ecke, width Seitenlänge des Quadrats. Radius ist der Eckenradius.",en:"Draws a sqare with rounded eges."})),r(o,"PAppletSquare1bComment",()=>d({de:"Zeichnet ein Quadrat mit abgerundeten Ecken. (left, top) ist die linke obere Ecke, width Seitenlänge des Quadrats. Radius ist der Eckenradius.",en:"Draws a sqare with rounded eges."})),r(o,"PAppletRect1cComment",()=>d({de:"Zeichnet ein Rechteck. (left, top) ist die linke obere Ecke, width die Breite und height die Höhe des Rechtecks. Radius ist der Eckenradius",en:"Draws a rectangle with rounded edges."})),r(o,"PAppletEllipse1Comment",()=>d({de:"Zeichnet eine Ellipse. (left, top) ist die linke obere Ecke der Boundingbox der Ellipse, width ihre Breite und height ihre Höhe. Das lässt sich aber mit ellipseMode(...) ändern!",en:"Draws an ellipse."})),r(o,"PAppletCircle1Comment",()=>d({de:"Zeichnet einen Kreis. (x, y) ist der Mittelpunkt des Kreises, extent der doppelte Radius.",en:"Draws a circle with center at (x, y). Extent is it's double radius."})),r(o,"PAppletEllipseMode1Comment",()=>d({de:"Setzt den Modus, in dem nachfolgende Aufrufe von ellipse(...) interpretiert werden. Möglich sind die Werte CORNER, CORNERS, RADIUS und CENTER.",en:""})),r(o,"PAppletLine1Comment",()=>d({de:"Zeichnet eine Strecke von (x1, y1) nach (x2, y2).",en:""})),r(o,"PAppletLine1aComment",()=>d({de:"Zeichnet eine Strecke von (x1, y1, z1) nach (x2, y2, z2).",en:""})),r(o,"PAppletTriangle1Comment",()=>d({de:"Zeichnet eine Dreieck mit den Eckpunkten (x1, y1), (x2, y2) und (x3, y3).",en:""})),r(o,"PAppletQuad1Comment",()=>d({de:"Zeichnet eine Viereck mit den Eckpunkten (x1, y1), (x2, y2), (x3, y3) und (x4, y4).",en:""})),r(o,"PAppletBezier1Comment",()=>d({de:"Zeichnet eine kubische Bezierkurve mit den Ankerpunkten (x1, y1), (x4, y4) und den Kontrollpunkten (x2, y2), (x3, y3).",en:""})),r(o,"PAppletCurve1Comment",()=>d({de:"Zeichnet eine Catmull-Rom-Kurve vom Punkt (x2, y2) nach (x3, y3) so, als würde sie von (x1, x2) kommen und es am Ende zu (x4, y4) weitergehen.",en:""})),r(o,"PAppletCurvePoint1Comment",()=>d({de:"Will man die Zwischenpunkte einer Curve erhalten (Beginn b, Ende c, als würde sie von a kommen und nach d gehen), so verwendet man sowohl für die x- als auch für die y-Koordinate diese Funktion. t gibt an, welchen Punkt der Kurve man haben möchte. t hat Werte zwischen 0 (Startpunkt) und 1 (Endpunkt).",en:""})),r(o,"PAppletCurveTangent1Comment",()=>d({de:"Will man die Zwischentangenten einer Curve erhalten (Beginn b, Ende c, als würde sie von a kommen und nach d gehen), so verwendet man sowohl für die x- als auch für die y-Koordinate diese Funktion. t gibt an, welchen Punkt der Kurve man haben möchte. t hat Werte zwischen 0 (Startpunkt) und 1 (Endpunkt).",en:""})),r(o,"PAppletBezierPoint1Comment",()=>d({de:"Will man die Zwischenpunkte einer Bezierkurve erhalten (Ankerkoordinaten x1, x4 und Stützkoordinaten x2, x3), so nutzt man - einzeln sowohl für die x- also auch für die y-Koordinate - diese Funktion. t gibt an, welchen Punkt der Kurve man haben möchte. t hat Werte zwischen 0 (Startpunkt) und 1 (Endpunkt).",en:""})),r(o,"PAppletBezierTangent1Comment",()=>d({de:"Will man die Zwischentangenten einer Bezierkurve erhalten (Ankerkoordinaten x1, x4 und Stützkoordinaten x2, x3), so nutzt man - einzeln sowohl für die x- also auch für die y-Koordinate - diese Funktion. t gibt an, welchen Punkt der Kurve man haben möchte. t hat Werte zwischen 0 (Startpunkt) und 1 (Endpunkt).",en:""})),r(o,"PAppletBeginShape0Comment",()=>d({de:"Beginnt mit dem Zeichnen eines Polygons. Die einzelnen Punkte werden mit der Methode vertex(x, y) gesetzt.",en:""})),r(o,"PAppletEndShape0Comment",()=>d({de:"Endet das Zeichnen eines Polygons.",en:""})),r(o,"PAppletBeginShape1Comment",()=>d({de:"Beginnt mit dem Zeichnen eines Polygons. Die einzelnen Punkte werden mit der Methode vertex(x, y) gesetzt. Mögliche Werte für kind sind: POINTS, LINES, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN, QUADS, QUAD_STRIP",en:""})),r(o,"PAppletEndShape1Comment",()=>d({de:"endShape(CLOSE) schließt den Linienzug.",en:""})),r(o,"PAppletVertex1Comment",()=>d({de:"Setzt zwischen beginShape() und endShape() einen Punkt.",en:""})),r(o,"PAppletPoint1Comment",()=>d({de:"Zeichnet einen Punkt.",en:""})),r(o,"PAppletSet3Comment",()=>d({de:"Setzt die Farbe des Pixels bei (x, y).",en:""})),r(o,"PAppletVertex1aComment",()=>d({de:"Setzt zwischen beginShape() und endShape() einen Punkt.",en:""})),r(o,"PAppletPoint1aComment",()=>d({de:"Zeichnet einen Punkt.",en:""})),r(o,"PAppletCurveVertex1Comment",()=>d({de:"Setzt zwischen beginShape() und endShape() einen Punkt. Processing zeichnet damit eine Kurve nach dem Catmull-Rom-Algorithmus.",en:""})),r(o,"PAppletCurvevertex1Comment",()=>d({de:"Setzt zwischen beginShape() und endShape() einen Punkt. Processing zeichnet damit eine Kurve nach dem Catmull-Rom-Algorithmus.",en:""})),r(o,"PAppletBox1Comment",()=>d({de:"Zeichnet einen 3D-Würfel mit der Seitenlänge size.",en:""})),r(o,"PAppletBox1aComment",()=>d({de:"Zeichnet einen 3D-Würfel mit den angegebenen Seitenlängen.",en:""})),r(o,"PAppletResetMatrix0Comment",()=>d({de:"Setzt alle erfolgten Transformationen zurück.",en:""})),r(o,"PAppletPush0Comment",()=>d({de:"Sichert den aktuellen Zeichenzustand, d.h. die Farben und Transformationen, auf einen Stack.",en:""})),r(o,"PAppletPop0Comment",()=>d({de:"Holt den obersten Zeichenzustand, d.h. die Farben und Transformationen, vom Stack.",en:""})),r(o,"PAppletScale1Comment",()=>d({de:"Streckt die nachfolgend gezeichneten Figuren.",en:""})),r(o,"PAppletScale1aComment",()=>d({de:"Streckt die nachfolgend gezeichneten Figuren.",en:""})),r(o,"PAppletScale1bComment",()=>d({de:"Streckt die nachfolgend gezeichneten Figuren.",en:""})),r(o,"PAppletTranslate1Comment",()=>d({de:"Verschiebt die nachfolgend gezeichneten Figuren.",en:""})),r(o,"PAppletTranslate1aComment",()=>d({de:"Verschiebt die nachfolgend gezeichneten Figuren.",en:""})),r(o,"PAppletRotate1Comment",()=>d({de:"Rotiert die nachfolgend gezeichneten Figuren. Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie angle interpretiert wird. Default ist RADIANS.",en:""})),r(o,"PAppletRotateX1Comment",()=>d({de:"Rotiert die nachfolgend gezeichneten Figuren um die X-Achse. Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie angle interpretiert wird. Default ist RADIANS.",en:""})),r(o,"PAppletRotateY1Comment",()=>d({de:"Rotiert die nachfolgend gezeichneten Figuren um die Y-Achse. Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie angle interpretiert wird. Default ist RADIANS.",en:""})),r(o,"PAppletShearX1Comment",()=>d({de:"Schert die nachfolgend gezeichneten Figuren in Richtung derX-Achse. Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie angle interpretiert wird. Default ist RADIANS.",en:""})),r(o,"PAppletShearY1Comment",()=>d({de:"Schert die nachfolgend gezeichneten Figuren in Richtung der Y-Achse. Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie angle interpretiert wird. Default ist RADIANS.",en:""})),r(o,"PAppletRotateZ1Comment",()=>d({de:"Rotiert die nachfolgend gezeichneten Figuren um die Z-Achse. Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie angle interpretiert wird. Default ist RADIANS.",en:""})),r(o,"PAppletAngleMode1Comment",()=>d({de:"Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie winkel bei Rotationen interpretiert werden. Default ist RADIANS.",en:""})),r(o,"PAppletTextSize1Comment",()=>d({de:"Setzt die Schriftgröße in Pixel.",en:""})),r(o,"PAppletTextAlign1Comment",()=>d({de:"Setzt die Ausrichtung des nächsten ausgegebenen Textes in x-Richtung. Mögliche Werte sind CENTER, LEFT, RIGHT",en:""})),r(o,"PAppletTextAlign1aComment",()=>d({de:"Setzt die Ausrichtung des nächsten ausgegebenen Textes. Mögliche Werte für alignX sind CENTER, LEFT, RIGHT, mögliche Werte für alignY sind TOP, CENTER, BASELINE, BOTTOM",en:""})),r(o,"PAppletText3Comment",()=>d({de:"Gibt Text aus.",en:""})),r(o,"PAppletText5Comment",()=>d({de:"Gibt Text aus. x2 und y2 sind die Breite und Höhe des Textausgabebereichs. Hat der Text horizontal nicht Platz, so wird er entsprechend umgebrochen.",en:""})),r(o,"PAppletRandom1Comment",()=>d({de:"Gibt eine Zufallszahl zwischen low und high zurück.",en:""})),r(o,"PAppletRandom1aComment",()=>d({de:"Gibt eine Zufallszahl zwischen 0 und high zurück.",en:""})),r(o,"PAppletSqrt1Comment",()=>d({de:"Gibt die Quadratwurzel von n zurück.",en:""})),r(o,"PAppletPow1Comment",()=>d({de:'Gibt die den Wert der Potenz ("basis hoch exponent") zurück.',en:""})),r(o,"PAppletMax1Comment",()=>d({de:"Gibt den größeren der beiden Werte zurück.",en:""})),r(o,"PAppletMin1Comment",()=>d({de:"Gibt den kleineren der beiden Werte zurück.",en:""})),r(o,"PAppletAbs1Comment",()=>d({de:"Gibt den Betrag des Wertes zurück.",en:""})),r(o,"PAppletSin1Comment",()=>d({de:"Gibt den Sinus des Wertes zurück.",en:""})),r(o,"PAppletCos1Comment",()=>d({de:"Gibt den Cosinus des Wertes zurück.",en:""})),r(o,"PAppletTan1Comment",()=>d({de:"Gibt den Tangens des Wertes zurück.",en:""})),r(o,"PAppletAsin1Comment",()=>d({de:"Gibt den Arcussinus des Wertes zurück.",en:""})),r(o,"PAppletAcos1Comment",()=>d({de:"Gibt den Arcussosinus des Wertes zurück.",en:""})),r(o,"PAppletRadians1Comment",()=>d({de:"Wandelt einen Winkel vom Gradmaß ins Bogenmaß um.",en:""})),r(o,"PAppletDegrees1Comment",()=>d({de:"Wandelt einen Winkel vom Bogenmaß ins Gradmaß um.",en:""})),r(o,"PAppletAtan1Comment",()=>d({de:"Gibt den Arcussangens des Wertes zurück.",en:""})),r(o,"PAppletAtan21Comment",()=>d({de:"Gibt den Arcussangens des Wertes zurück.",en:""})),r(o,"PAppletSqrt1aComment",()=>d({de:"Gibt die Quadratwurzel des Wertes zurück.",en:""})),r(o,"PAppletSq1Comment",()=>d({de:"Gibt das Quadrat des Wertes zurück.",en:""})),r(o,"PAppletAbs1aComment",()=>d({de:"Gibt den Betrag des Wertes zurück.",en:""})),r(o,"PAppletRound1Comment",()=>d({de:"Rundet den Wert auf eine ganze Zahl.",en:""})),r(o,"PAppletCeil1Comment",()=>d({de:"Rundet den Wert auf eine ganze Zahl (Aufrunden!).",en:""})),r(o,"PAppletFloor1Comment",()=>d({de:"Rundet den Wert auf eine ganze Zahl (Abfrunden!).",en:""})),r(o,"PAppletDist1Comment",()=>d({de:"Berechnet den Abstand der Punkte (x1, y1) und (x2, y2).",en:""})),r(o,"PAppletLerp1Comment",()=>d({de:"Berechnet den a + (b - a)*t. Wählt man t zwischen 0 und 1, so kann man damit die Zwischenwerte zwischen a und b errechnen.",en:""})),r(o,"PAppletConstrain1Comment",()=>d({de:"Beschränkt value auf den Bereich [min, max], genauer: Ist value < min, so wird min zurückgegeben. Ist value > max, so wird max zurückgegeben. Ansonsten wird value zurückgegeben.",en:""})),r(o,"PAppletYear0Comment",()=>d({de:"Aktuelle Jahreszahl",en:""})),r(o,"PAppletMonth0Comment",()=>d({de:"Monat: 1 == Januar, 12 == Dezember",en:""})),r(o,"PAppletDay0Comment",()=>d({de:"Tag (innerhalb des Monats) des aktuellen Datums",en:""})),r(o,"PAppletHour0Comment",()=>d({de:"Stundenzahl der aktuellen Uhrzeit",en:""})),r(o,"PAppletMinute0Comment",()=>d({de:"Minutenzahl der aktuellen Uhrzeit",en:""})),r(o,"PAppletSecond0Comment",()=>d({de:"Sekundenzahl der aktuellen Uhrzeit",en:""})),r(o,"PAppletFrameRate1Comment",()=>d({de:"Setzt die Framerate (Anzahl der Aufrufe von draw() pro Sekunde)",en:""})),r(o,"PAppletTextWidth1Comment",()=>d({de:"Gibt die Breite des Texts zurück.",en:""})),r(o,"PAppletTextAscent1Comment",()=>d({de:"Gibt den Ascent Textes zurück ( = Höhe des größten Zeichens über der Grundlinie).",en:""})),r(o,"PAppletTextDescent1Comment",()=>d({de:"Gibt den Descent Textes zurück ( = Tiefe des tiefsten Zeichens unter der Grundlinie).",en:""})),r(o,"PAppletTextLeading1Comment",()=>d({de:"Setzt den Abstand zweier aufeinanderfolgender Textzeilen.",en:""})),r(o,"PAppletCursor1Comment",()=>d({de:'Ändert das Aussehen des Mauscursors. Type ist einer der Werte "arrow", "cross", "text", "move", "hand", "wait", "progress".',en:""})),r(o,"PAppletNoCursor1Comment",()=>d({de:"Hat zur Folge, dass der Mauscursor über dem Zeichenbereich unsichtbar ist.",en:""})),r(o,"PAppletCopy1Comment",()=>d({de:"Kopiert den rechteckigen Bereich mit der linken oberen Ecke (sx, sy) sowie der Breite sw und der Höhe sh in den Bereich mit der linken oberen Ecke (dx, dy), der Breite dw und der Höhe dh.",en:""})),r(o,"PAppletMillis0Comment",()=>d({de:"Gibt die Millisekunden zurück, die vergangen sind, seit setup() aufgerufen wurde.",en:""})),r(o,"PAppletRedraw0Comment",()=>d({de:"Führt draw() genau ein Mal aus. Macht ggf. Sinn, wenn die Render-Loop zuvor mit noLoop() gestoppt wurde.",en:""})),r(o,"JavaKaraWorldClassComment",()=>d({de:"JavaKara-Welt",en:"JavaKara-World"})),r(o,"JavaKaraWorldConstructorComment",()=>d({de:"",en:""})),r(o,"JavaKaraWorldGetSizeXComment",()=>d({de:"Gibt zurück, wie viele Felder breit die Welt ist.",en:"Returns number of tiles in x-direction."})),r(o,"JavaKaraWorldGetSizeYComment",()=>d({de:"Gibt zurück, wie viele Felder hoch die Welt ist.",en:"Returns number of tiles in y-direction."})),r(o,"JavaKaraWorldClearAllComment",()=>d({de:"Löscht alles aus der Welt bis auf Kara.",en:"Removes everything except Kara the beatle."})),r(o,"JavaKaraWorldSetLeafComment",()=>d({de:"Setzt oder entfernt an der Position (x, y) ein Kleeblatt.",en:"Adds or removes a leaf at position (x, y)."})),r(o,"JavaKaraWorldSetTreeComment",()=>d({de:"Setzt oder entfernt an der Position (x, y) einen Baumstumpf.",en:"Adds or removes a tree stump at position (x, y)."})),r(o,"JavaKaraWorldSetMushroomComment",()=>d({de:"Setzt oder entfernt an der Position (x, y) einen Pilz.",en:"Adds or removes a mushroom at position (x, y)."})),r(o,"JavaKaraWorldIsEmptyComment",()=>d({de:"Gibt genau dann true zurück, wenn sich auf dem angegebenen Feld nichts befindet (auch nicht Kara).",en:"Returns true if and only if there's nothing at position (x, y)."})),r(o,"JavaKaraWorldInitComment",()=>d({de:"Baut die Welt mithilfe eines mehrzeiligen Strings. Dabei bedeutet \\n einen Zeilenumbruch, l ein Kleeblatt, t einen Baumstumpf und m einen Pilz.",en:"Creates world based on a multiline string. \\n is a line break, l a leaf, t a tree stump and m a Mushroom."})),r(o,"KaraClassComment",()=>d({de:"JavaKara-Marienkäfer",en:"Kara, the beatle"})),r(o,"KaraConstructorComment",()=>d({de:"Instanziert ein neues Kara-Objekt.",en:"Creates a new Kara beatle."})),r(o,"KaraGetPositionComment",()=>d({de:"Gibt Karas Position zurück. Dabei ist (0/0) die Position der linken oberen Ecke.",en:"Returns Kara's position. (0/0) is position at top left corner."})),r(o,"KaraMoveComment",()=>d({de:"Bewegt Kara um ein Feld nach vorne.",en:"Moves Kara one tile forward."})),r(o,"KaraGetWorldComment",()=>d({de:"Gibt das JavaKaraWorld-Objekt zurück, in dem sich Kara befindet.",en:"Returns world-object."})),r(o,"KaraGetDirectionComment",()=>d({de:"Gibt die Blickrichtung von Kara zurück: 0 == Norden, 1 == Westen, 2 == Süden, 3 == Osten",en:"Returns direction of beatle Kara. 0 == north, 1 == west, 2 == south, 3 == east."})),r(o,"KaraOnLeafComment",()=>d({de:"Gibt genau dann true zurück, wenn sich Kara auf einem Kleeblatt befindet.",en:"Returns true if and only if Kara is located on a leaf."})),r(o,"KaraTreeFrontComment",()=>d({de:"Gibt genau dann true zurück, wenn sich vor Kara ein Baumstumpf befindet.",en:"Returns true if and only if on the tile IN FRONT OF Kara there is a tree stump."})),r(o,"KaraTreeLeftComment",()=>d({de:"Gibt genau dann true zurück, wenn sich auf dem Feld unmmittelbar links von Kara ein Baumstumpf befindet.",en:"Returns true if and only if directly left of Kara there is a tree stump."})),r(o,"KaraTreeRightComment",()=>d({de:"Gibt genau dann true zurück, wenn sich auf dem Feld unmmittelbar rechts von Kara ein Baumstumpf befindet.",en:"Returns true if and only if directly right of Kara there is a tree stump."})),r(o,"KaraMushroomFrontComment",()=>d({de:"Gibt genau dann true zurück, wenn sich vor Kara ein Pilz befindet.",en:"Returns true if and only if on the tile IN FRONT OF Kara there is a mushroom."})),r(o,"KaraTurnLeftComment",()=>d({de:"Dreht Kara um 90° nach links (d.h. gegen den Uhrzeigersinn).",en:"Turns Kara 90° leftwards (that is: counterclockwise)."})),r(o,"KaraTurnRightComment",()=>d({de:"Dreht Kara um 90° nach rechts (d.h. im Uhrzeigersinn).",en:"Turns Kara 90° rightwards (that is: clockwise)."})),r(o,"KaraPutLeafComment",()=>d({de:"Legt ein Kleeblatt auf die Position, an der Kara gerade steht.",en:"Deposits a leaf beneath Kara."})),r(o,"KaraRemoveLeafComment",()=>d({de:"Kara nimmt das Kleeblatt, das sich auf seiner aktuellen Position befindet.",en:"Removes a leaf beneath Kara."})),r(o,"HamsterWorldClassComment",()=>d({de:"JavaHamster-Welt"})),r(o,"HamsterWorldConstructorComment",()=>d({de:"Instanziert eine neue JavaHamster-Welt"})),r(o,"HamsterWorldGetBreiteComment",()=>d({de:"Gibt zurück, wie viele Felder breit die Welt ist.",en:""})),r(o,"HamsterWorldGetHoeheComment",()=>d({de:"Gibt zurück, wie viele Felder hoch die Welt ist.",en:""})),r(o,"HamsterWorldLoescheAllesComment",()=>d({de:"Löscht alles aus der Welt bis auf den Hamster.",en:""})),r(o,"HamsterWorldSetzeMauerComment",()=>d({de:"Setzt oder entfernt an der Position (x, y) eine Mauer.",en:""})),r(o,"HamsterWorldSetzeGetreideComment",()=>d({de:"Setzt an der Position (x, y) die Anzahl der Getreidekörner.",en:""})),r(o,"HamsterWorldInitComment",()=>d({de:"Baut die Welt mithilfe eines mehrzeiligen Strings. Dabei bedeutet \\n einen Zeilenumbruch, m eine Mauer und 1 ... 9, a ... f die entsprechende Anzahl an Getreidekörnern.",en:""})),r(o,"HamsterClassComment",()=>d({de:"JavaHamster-Hamster"})),r(o,"HamsterConstructorComment",()=>d({de:"Instanziert ein neues Hamster-Objekt",en:""})),r(o,"HamsterVorComment",()=>d({de:"Bewegt den Hamster um ein Feld nach vorne.",en:""})),r(o,"HamsterGetWorldComment",()=>d({de:"Gibt das JavaHamsterWorld-Objekt zurück, in dem sich Hamster befindet.",en:""})),r(o,"HamsterGetBlickrichtungComment",()=>d({de:"Gibt die Blickrichtung von Hamster zurück: 0 == Norden, 1 == Osten, 2 == Süden, 3 == Westen",en:""})),r(o,"HamsterGetReiheComment",()=>d({de:"Gibt die Reihe zurück, in der sich der Hamster gerade befindet. Reihe 0 ist ganz oben.",en:""})),r(o,"HamsterGetSpalteComment",()=>d({de:"Gibt die Spalte zurück, in der sich der Hamster gerade befindet. Reihe 0 ist ganz links.",en:""})),r(o,"HamsterGetKoernerComment",()=>d({de:"Gibt die Anzahl der Körner zurück, die der Hamster gerade im Mund hat.",en:""})),r(o,"HamsterLinksUmComment",()=>d({de:"Dreht Hamster um 90° nach links",en:""})),r(o,"HamsterRechtsUmComment",()=>d({de:"Dreht Hamster um 90° nach rechts",en:""})),r(o,"HamsterGibComment",()=>d({de:"Der Hamster legt ein Korn in der Zelle ab, in der er sich gerade befindet.",en:""})),r(o,"HamsterNimmComment",()=>d({de:"Der Hamster nimmt ein Korn aus der Zelle, in der er sich gerade befindet.",en:""})),r(o,"HamsterVornFreiComment",()=>d({de:"Liefert genau dann true, wenn sich in Blickrichtung vor dem aufgerufenen Hamster keine Mauer befindet (wenn sich der Hamster in Blickrichtung am Rand des Territoriums befindet, wird false geliefert)",en:""})),r(o,"HamsterMaulLeerComment",()=>d({de:"Liefert genau dann true, wenn der Hamster keine Körner im Mund hat.",en:""})),r(o,"HamsterKornDaComment",()=>d({de:"Liefert genau dann true, wenn sich in der Zelle, auf der der Hamster sich befindet, mindestens ein Korn befindet.",en:""})),r(o,"HamsterSchreibComment",()=>d({de:"Gibt den Text auf dem Bildschirm aus.",en:""})),r(o,"PositionClassComment",()=>d({de:"Repräsentiert einen Position auf einem Gitternetz (nur ganzzahlige Koordinaten)",en:"Position inside a grid (only integer coordinates)"})),r(o,"PositionXComment",()=>d({de:"x-Komponente der Position",en:"x-component of Position"})),r(o,"PositionYComment",()=>d({de:"y-Komponente der Position",en:"y-component of Position"})),r(o,"PositionConstructorComment",()=>d({de:"Instanziert eine neue Position den Komponenten x und y.",en:"Creates a new Position object with components x and y"})),r(o,"BigIntegerClassComment",()=>d({de:"Repräsentiert eine ganze Zahl mit 'beliebig' vielen Stellen.",en:"Integer number with arbitrary number of digits."})),r(o,"BigIntegerConstructorComment",()=>d({de:"Instanziert ein neues BigInteger-Objekt.",en:"Creates a new BigInteger-object."})),r(o,"BigIntegerAddComment",()=>d({de:"Addiert das übergebene BigInteger-Objekt zum aktuellen BigInteger-Objekt und gibt ein neues BigInteger-Objekt zurück, dessen Wert die errechnete Summe ist. Die Methode add ändert nicht das aktuelle BigInteger-Objekt!",en:"Adds given BigInteger-object to this BigInteger-object and returns a NEW BigInteger-object whose value is the sum of the two."})),r(o,"BigIntegerSubtractComment",()=>d({de:"Subtrahiert das übergebene BigInteger-Objekt vom aktuellen BigInteger-Objekt und gibt ein neues BigInteger-Objekt zurück, dessen Wert die errechnete Differenz ist. Die Methode add ändert nicht das aktuelle BigInteger-Objekt!",en:"Subtracts given BigInteger-object from this BigInteger-object and returns a NEW BigInteger-object whose value is the difference of the two."})),r(o,"BigIntegerDivideComment",()=>d({de:"Dividiert das BigInteger-Objekt durch das übergebene undd gibt ein neues BigInteger-Objekt zurück, dessen Wert der errechnete Quotient ist. Die Methode add ändert nicht das aktuelle BigInteger-Objekt!",en:"Divides this BigInteger-object by given one and returns a NEW BigInteger-object whose value is the quotient of the two."})),r(o,"BigIntegerRemainderComment",()=>d({de:"Dividiert das BigInteger-Objekt durch das übergebene undd gibt ein neues BigInteger-Objekt zurück, dessen Wert der Rest der Division ist. Die Methode add ändert nicht das aktuelle BigInteger-Objekt!",en:"Divides this BigInteger-object by given one and returns a NEW BigInteger-object whose value is the remainder of this division."})),r(o,"BigIntegerMultiplyComment",()=>d({de:"Multipliziert das aktuelle Objekt mit dem übergebenen BigInteger-Objekt und gibt ein neues BigInteger-Objekt zurück, dessen Wert das Produkt der beiden Zahlen ist. Die Methode multiply ändert nicht das aktuelle BigInteger-Objekt!",en:"Multiplies this BigInteger-object by given one and returns a NEW BigInteger-object whose value is the product of the two."})),r(o,"BigIntegerToStringComment",()=>d({de:"Gibt das BigInteger-Objekt als Zeichenkette (dezimal!) zurück.",en:"Returns this BigInteger-object as string in decimal representation."})),r(o,"BigIntegerIntValueComment",()=>d({de:"Gibt das BigInteger-Objekt mod (2^53) als int-Wert zurück.",en:"Returns this BigInteger-object mod (2^53) as int-value."})),r(o,"ConsoleClassComment",()=>d({de:"Klasse zur Ausgabe von Objekten in der Konsole des Browsers.",en:"Class to Output text in console."})),r(o,"ConsoleLogComment",()=>d({de:"Gibt das in die Konsole des Browsers.",en:"Writes Object to Console."})),r(o,"Vector2ClassComment",()=>d({de:"Ein zweidimensionaler Vektor mit double-Koordinaten.",en:"2-dimensional vector with double-precision."})),r(o,"Vector2ConstructorComment",()=>d({de:"Erstellt einen neuen Vektor mit den Koordinaten (x, y).",en:"Creates a new vector with given coordinates."})),r(o,"Vector2ToStringComment",()=>d({de:"Wandelt den Vektor in einen String der Form (x, y) um.",en:"Transforms vector into String (x, y)."})),r(o,"Vector2FromPolarCoordinatesComment",()=>d({de:"Gibt einen neuen zweidimensionalen Vektor zurück, der mit den Polarkoordinaten (r/alphaDeg) gebildet wird. Datei ist r (Abstand zum Ursprung des Koordinatensystems) und alphaDeg (Winkel zur positiven x-Achse in Grad).",en:"Creates a new Vector2-object from given polar coordinates r, alphaDeg. r is it's length, alphaDeg it's angle towards the positive x-axis."})),r(o,"Vector2GetAngleDegComment",()=>d({de:"Gibt den Winkel zur positiven x-Achse in Grad zurück.",en:"Returns angle towards positive x-axis in degrees."})),r(o,"Vector2GetAngleRadComment",()=>d({de:"Gibt den Winkel zur positiven x-Achse im Bogenmaß (rad) zurück.",en:"Returns angle towards positive x-axis in radians."})),r(o,"Vector2GetLengthComment",()=>d({de:"Gibt die Länge des Vektors zurück.",en:"Returns length of this vector."})),r(o,"Vector2GetUnitVectorComment",()=>d({de:"Gibt einen NEUEN Vektor zurück, der parallel zu diesem ist aber die Länge 1 besitzt.",en:"Returns a NEW Vector parallel to this one but with length 1."})),r(o,"Vector2CloneComment",()=>d({de:"Gibt eine identische Kopie dieses Vektors zurück.",en:"Returns an identical copy of this Vector2 object."})),r(o,"Vector2SetLengthComment",()=>d({de:"Streckt/staucht das Vector2-Objekt auf die angegebene Länge und gibt es zurück (für Method-Chaining!). Das Vector2-Objekt wird dabei verändert!",en:"Scales this Vector2-object to given length and returns it for method chaining."})),r(o,"Vector2ScaledByComment",()=>d({de:"Gibt ein NEUES Vector2-Objekt zurück, das parallel zu diesem ist aber um den angegebenen Faktor gestreckt ist.",en:"Returns a NEW Vector2-object parallel to this one but with given length."})),r(o,"Vector2ScaleComment",()=>d({de:"Streckt das Vector2-Objekt um den angegebenen Faktor und gibt es zurück (für Method-Chaining!). Diese Methode VERÄNDERT dieses Objekt!",en:"Scales Vector2-object by given factor and returns it (for method chaining). This method ALTERS this object!"})),r(o,"Vector2RotateComment",()=>d({de:"Rotiert das Vector2-Objekt um den angegebenen Winkel (in Grad) und gibt es zurück (für Method-Chaining!). Positive Winkel bedeuten eine Drehung ENTGEGEN dem Uhrzeigersinn.",en:"Rotates this Vector2-object by given angle (in degrees) and returns it for method chaining. Positve angles lead to COUNTERCLOCKWISE rotation."})),r(o,"Vector2RotatedByComment",()=>d({de:"Gibt ein NEUES Vector2-Objekt zurück, das um den angegebenen Winkel (in Grad) gedreht ist. Positive Winkel bedeuten eine Drehung ENTGEGEN dem Uhrzeigersinn.",en:"Returns a NEW Vector2-object rotated by given angle (in degrees). Positve angles lead to COUNTERCLOCKWISE rotation."})),r(o,"Vector2PlusComment",()=>d({de:"Gibt ein NEUES Vector2-Objekt zurück, das aus Addition der beiden Vektoren entsteht.",en:"Returns a NEW Vector2-object which is the sum of the two vectors."})),r(o,"Vector2MinusComment",()=>d({de:"Gibt ein NEUES Vector2-Objekt zurück, das aus Subtraktion der beiden Vektoren entsteht.",en:"Returns a NEW Vector2-object which is the difference of the two vectors."})),r(o,"Vector2AddComment",()=>d({de:"Addiert den übergebenen Vektor zu diesem und gibt diesen zurück (für Method-Chaining!). Diese Methode VERÄNDERT dieses Objekt!",en:"Adds given vector to this one and returns this one. This Method ALTERS this object!"})),r(o,"Vector2SubComment",()=>d({de:"Subtrahiert den übergebenen Vektor von diesem und gibt diesen zurück (für Method-Chaining!). Diese Methode VERÄNDERT dieses Objekt!",en:"Subtracts given vector from this one and returns this one. This Method ALTERS this object!"})),r(o,"Vector2ScalarProductComment",()=>d({de:"Gibt das Skalarprodukt der beiden Vektoren zurück.",en:"Returns scalar product of vectors."})),r(o,"Vector2DistanceComment",()=>d({de:"Berechnet den Abstand der beiden Punkte (x1, y1) und (x2, y2).",en:"Returns distance of given points (x1, y1) and (x2, y2)."})),r(o,"Vector2DistanceToComment",()=>d({de:"Berechnet die Länge der Differenz der beiden Vektoren.",en:"Returns the length of the difference of both vectors."})),r(o,"Vector2XComment",()=>d({de:"X-Komponente des Vektors",en:"x-component"})),r(o,"Vector2YComment",()=>d({de:"Y-Komponente des Vektors",en:"y-component"})),r(o,"Matrix4ClassComment",()=>d({de:"Eine 4x4-Matrix, die insbesondere verwendet werden kann, um eine affine Abbildung im R³ zu beschreiben und räumliche Körper zu transformieren.",en:"Matrix4 represents a 4x4-Matrix. It may be used to describe affine mappings in R³ and to transform bodys in 3d."})),r(o,"Matrix4ConstructorIdentityComment",()=>d({de:"Erstellt eine 4x4-Einheitsmatrix, d.h. eine Matrix mit 1-sen in der Diagonalen und ansonsten 0-en.",en:"Creates a 4x4 identity matrix."})),r(o,"Matrix4ConstructorTupleComment",()=>d({de:"Erstellt eine 4x4-Matrix mit den gegebenen Komponenten (zeilenweise).",en:"Creates a 4x4 matrix with the given arguments in row-major order."})),r(o,"Matrix4ConstructorOtherMatrixComment",()=>d({de:"Erstellt eine Kopie der übergebenen Matrix.",en:"Creates a copy of given Matrix."})),r(o,"Matrix4MakeRotationXComment",()=>d({de:"Ersetzt diese Matrix durch eine, die eine Rotation um die X-Achse mit gegebenem Winkel (in Grad) repräsentiert.",en:"Sets this matrix as a rotational transformation around the X axis by angle degrees."})),r(o,"Matrix4MakeRotationYComment",()=>d({de:"Ersetzt diese Matrix durch eine, die eine Rotation um die Y-Achse mit gegebenem Winkel (in Grad) repräsentiert.",en:"Sets this matrix as a rotational transformation around the Y axis by angle degrees."})),r(o,"Matrix4MakeRotationZComment",()=>d({de:"Ersetzt diese Matrix durch eine, die eine Rotation um die Z-Achse mit gegebenem Winkel (in Grad) repräsentiert.",en:"Sets this matrix as a rotational transformation around the Z axis by angle degrees."})),r(o,"Matrix4MakeRotationAxisComment",()=>d({de:"Ersetzt diese Matrix durch eine, die eine Rotation um die gegebene mit gegebenem Winkel (in Grad) repräsentiert.",en:"Sets this matrix as a rotational transformation around the given axis by angle degrees."})),r(o,"Matrix4MakeScaleComment",()=>d({de:"Ersetzt diese Matrix durch eine, die die Streckung um die gegebenen Faktoren in x-, y- und z-Richtung repräsentiert.",en:"Sets this matrix as scale transform with given factors in x-, y- and z-diretion."})),r(o,"Matrix4MakeTranslationComment",()=>d({de:"Ersetzt diese Matrix durch eine, die die Verschiebung um den gegebenen Vektor repräsentiert.",en:"Sets this matrix as scale transform with given vector."})),r(o,"Matrix4MultiplyScalarComment",()=>d({de:"Multipliziert die Matrix mit dem gegebenen Faktor (Skalarmultiplikation).",en:"Multiplies every component of the matrix by given scalar value."})),r(o,"Matrix4InvertComment",()=>d({de:"Invertiert diese Matrix. Is sie nicht invertierbar, so wird sie auf die Nullmatrix gesetzt.",en:"Inverts this matrix, using the analytic method. You can not invert with a determinant of zero. If you attempt this, the method produces a zero matrix instead."})),r(o,"Matrix4DeterminantComment",()=>d({de:"Berechnet die Determinante dieser Matrix.",en:"Computes and returns the determinant of this matrix."})),r(o,"Matrix4CloneComment",()=>d({de:"Erzeugt eine Kopie dieser Matrix.",en:"Creates a clone of this matrix."})),r(o,"Matrix4CopyFromComment",()=>d({de:"Kopiert die gegebene Matrix in diese hinein.",en:"Copies the elements of matrix m into this matrix."})),r(o,"Matrix4MultiplyComment",()=>d({de:"Multipliziert diese Matrix von rechts mit der gegebene Matrix und schreibt das Ergebnis in diese Matrix.",en:"Post-multiplies this matrix by m."})),r(o,"Matrix4preMultiplyComment",()=>d({de:"Multipliziert diese Matrix von links mit der gegebene Matrix und schreibt das Ergebnis in diese Matrix.",en:"Pre-multiplies this matrix by m."})),r(o,"Vector3ClassComment",()=>d({de:"Ein zweidimensionaler Vektor mit double-Koordinaten.",en:"2-dimensional vector with double-precision."})),r(o,"Vector3ConstructorComment",()=>d({de:"Erstellt einen neuen Vektor mit den Koordinaten (x, y).",en:"Creates a new vector with given coordinates."})),r(o,"Vector3ToStringComment",()=>d({de:"Wandelt den Vektor in einen String der Form (x, y) um.",en:"Transforms vector into String (x, y)."})),r(o,"Vector3FromPolarCoordinatesComment",()=>d({de:"Gibt einen neuen zweidimensionalen Vektor zurück, der mit den Polarkoordinaten (r/alphaDeg) gebildet wird. Datei ist r (Abstand zum Ursprung des Koordinatensystems) und alphaDeg (Winkel zur positiven x-Achse in Grad).",en:"Creates a new Vector3-object from given polar coordinates r, alphaDeg. r is it's length, alphaDeg it's angle towards the positive x-axis."})),r(o,"Vector3GetAngleDegComment",()=>d({de:"Gibt den Winkel zur positiven x-Achse in Grad zurück.",en:"Returns angle towards positive x-axis in degrees."})),r(o,"Vector3GetAngleRadComment",()=>d({de:"Gibt den Winkel zur positiven x-Achse im Bogenmaß (rad) zurück.",en:"Returns angle towards positive x-axis in radians."})),r(o,"Vector3GetLengthComment",()=>d({de:"Gibt die Länge des Vektors zurück.",en:"Returns length of this vector."})),r(o,"Vector3GetUnitVectorComment",()=>d({de:"Gibt einen NEUEN Vektor zurück, der parallel zu diesem ist aber die Länge 1 besitzt.",en:"Returns a NEW Vector parallel to this one but with length 1."})),r(o,"Vector3CloneComment",()=>d({de:"Gibt eine identische Kopie dieses Vector3-Objekts zurück.",en:"Returns an identical copy of this Vector3-object."})),r(o,"Vector3SetLengthComment",()=>d({de:"Streckt/staucht das Vector3-Objekt auf die angegebene Länge und gibt es zurück (für Method-Chaining!). Das Vector3-Objekt wird dabei verändert!",en:"Scales this Vector3-object to given length and returns it for method chaining."})),r(o,"Vector3ScaledByComment",()=>d({de:"Gibt ein NEUES Vector3-Objekt zurück, das parallel zu diesem ist aber um den angegebenen Faktor gestreckt ist.",en:"Returns a NEW Vector3-object parallel to this one but with given length."})),r(o,"Vector3ScaleComment",()=>d({de:"Streckt das Vector3-Objekt um den angegebenen Faktor und gibt es zurück (für Method-Chaining!). Diese Methode VERÄNDERT dieses Objekt!",en:"Scales Vector3-object by given factor and returns it (for method chaining). This method ALTERS this object!"})),r(o,"Vector3RotateComment",()=>d({de:"Rotiert das Vector3-Objekt um den angegebenen Winkel (in Grad) und gibt es zurück (für Method-Chaining!). Positive Winkel bedeuten eine Drehung ENTGEGEN dem Uhrzeigersinn.",en:"Rotates this Vector3-object by given angle (in degrees) and returns it for method chaining. Positve angles lead to COUNTERCLOCKWISE rotation."})),r(o,"Vector3RotatedByComment",()=>d({de:"Gibt ein NEUES Vector3-Objekt zurück, das um den angegebenen Winkel (in Grad) gedreht ist. Positive Winkel bedeuten eine Drehung ENTGEGEN dem Uhrzeigersinn.",en:"Returns a NEW Vector3-object rotated by given angle (in degrees). Positve angles lead to COUNTERCLOCKWISE rotation."})),r(o,"Vector3PlusComment",()=>d({de:"Gibt ein NEUES Vector3-Objekt zurück, das aus Addition der beiden Vektoren entsteht.",en:"Returns a NEW Vector3-object which is the sum of the two vectors."})),r(o,"Vector3MinusComment",()=>d({de:"Gibt ein NEUES Vector3-Objekt zurück, das aus Subtraktion der beiden Vektoren entsteht.",en:"Returns a NEW Vector3-object which is the difference of the two vectors."})),r(o,"Vector3AddComment",()=>d({de:"Addiert den übergebenen Vektor zu diesem und gibt diesen zurück (für Method-Chaining!). Diese Methode VERÄNDERT dieses Objekt!",en:"Adds given vector to this one and returns this one. This Method ALTERS this object!"})),r(o,"Vector3SubComment",()=>d({de:"Subtrahiert den übergebenen Vektor von diesem und gibt diesen zurück (für Method-Chaining!). Diese Methode VERÄNDERT dieses Objekt!",en:"Subtracts given vector from this one and returns this one. This Method ALTERS this object!"})),r(o,"Vector3ScalarProductComment",()=>d({de:"Gibt das Skalarprodukt der beiden Vektoren zurück.",en:"Returns scalar product of vectors."})),r(o,"Vector3DistanceComment",()=>d({de:"Berechnet den Abstand der beiden Punkte (x1, y1) und (x2, y2).",en:"Returns distance of given points (x1, y1) and (x2, y2)."})),r(o,"Vector3DistanceToComment",()=>d({de:"Berechnet die Länge der Differenz der beiden Vektoren.",en:"Returns the length of the difference of both vectors."})),r(o,"Vector3XComment",()=>d({de:"X-Komponente des Vektors",en:"x-component"})),r(o,"Vector3YComment",()=>d({de:"Y-Komponente des Vektors",en:"y-component"})),r(o,"Vector3ApplyMatrix4Comment",()=>d({de:"Multipliziert diesen Vektor (von links) mit der gegebenen Matrix (mit ergänzter 1 in der 4. Dimension) und teilt durch den perspektivischen Faktor.",en:"Multiplies this vector (with an implicit 1 in the 4th dimension) by m, and divides by perspective."})),r(o,"Vector3xyNullPointerComment",t=>d({de:`Der Parameter ${t} darf nicht null sein!`,en:`The parameter ${t} must not be null!`})),r(o,"Group3dAddComment",()=>d({de:"Fügt der Gruppe ein 3d-Objekt hinzu.",en:"Adds a 3d-object to this group."})),r(o,"Group3dRemoveComment",()=>d({de:"Entfernt ein 3d-Objekt aus dieser Gruppe.",en:"Removes a 3d-object from this group."})),r(o,"Group3dSizeComment",()=>d({de:"Gibt die Anzahl der 3d-Objekte in dieser Gruppe zurück.",en:"Returns the size of this group."})),r(o,"Group3dGetComment",()=>d({de:"Gibt das Element mit dem gegebenen Index zurück. Das erste Element hat Index 0.",en:"Returns element with given index. First element has index 0."})),r(o,"Group3dClassComment",()=>d({de:"Ein Group3d-Objekt gruppiert mehrere 3d-Objekte zusammen, so dass sie miteinander gedreht verschoben, ... werden können.",en:"A Group of 3d objects."})),r(o,"Comment",()=>d({de:"",en:""})),r(o,"MathToolsClassComment",()=>d({de:"Klasse mit mathematischen Hilfsfunktionen als statische Methoden",en:"Class with mathematical/geometrical tools."})),r(o,"MathToolsIntersectCircleWithPolygonComment",()=>d({de:"Zu einem gegebenen Kreis werden die Punkte berechnet, die auf den Seiten eines gegebenen Polygons liegen.",en:"Intersects given circle with given polygon."})),r(o,"MathToolsIntersectLineSegmentsComment",()=>d({de:"Berechnet den Schnittpunkt der Strecken [p0, p1] und [p2, p3]. Gibt null zurück, wenn sich die Strecken nicht schneiden oder wenn sie parallel sind und teilweise aufeinander liegen.",en:"Calculates intersection of Line segments [p0, p1] and [p2, p3]. Returns null if line segments don't intersect."})),r(o,"MathToolsPolygonContainsPointComment",()=>d({de:"Gibt genau dann true zurück, wenn das Polygon den Punkt enthält.",en:"Returns true if and only if given Polygon contains given point."})),r(o,"MathToolsDistancePointToLineComment",()=>d({de:"Berechnet den Abstand des Punktes P zur Gerade AB.",en:"Calculates distance from point P to line AB."})),r(o,"MathToolsDistancePointToLineSegmentComment",()=>d({de:"Berechnet den Abstand des Punktes P zur Gerade AB.",en:"Calculates distance from point P to line segment [AB]."})),r(o,"SystemClassComment",()=>d({de:"Klasse mit statischen Methoden für Systemfunktionen.",en:"Class with static methods for system function."})),r(o,"SystemExitComment",()=>d({de:"Beendet das Programm und gibt den übergebenen Wert in der Konsole aus.",en:"Exits program and prints given value to console."})),r(o,"SystemCurrentTimeMillisComment",()=>d({de:"Gibt die Anzahl der Millisekunden, die seit dem 01.01.1970 00:00:00 UTC vergangen sind, zurück.",en:"Milliseconds since 1970-01-01 00:00:00 UTC."})),r(o,"SystemNanoTimeComment",()=>d({de:"Gibt die Anzahl an Nanosekunden seit einem nicht näher definierten Startzeitpunkt zurück.",en:"Nanoseconds since arbitrary start timestamp."})),r(o,"SystemOutComment",()=>d({de:"PrintStream-Objekt, mit dem Text ausgegeben werden kann.",en:"PrintStream-object to print text."})),r(o,"PrintStreamClassComment",()=>d({de:"Interne Hilfsklasse, um System.out.println zu ermöglichen. Das Objekt System.out ist von der Klasse PrintStream.",en:"Internal auxiliary class to make System.out.println possible. Object System.out is of class PrintStream."})),r(o,"PrintStreamPrintComment",()=>d({de:"Gibt den Text aus.",en:"Prints Text."})),r(o,"PrintStreamPrintlnComment",()=>d({de:"Gibt den Text aus, gefolgt von einem Zeilenumbruch.",en:"Prints Text followed by a line break."})),r(o,"PrintStreamPrintlnComment2",()=>d({de:"Gibt einen Zeilenumbruch aus.",en:"Prints a line break."})),r(o,"GamepadClassComment",()=>d({de:"Klasse mit statischen Methoden zur Abfrage der Gamepads.",en:"class with static methods to get gamepad state."})),r(o,"GamepadIsButtonDownComment",()=>d({de:"Gibt genau dann true zurück, wenn der Button buttonIndex des Gamepads GamepadIndex gedrückt ist. VORSICHT: Das erste Gamepad hat Index 0.",en:"Returns true if and only if button buttonIndex is pressed on gamepad with index gamepadIndex. BEWARE: First gamepad has index 0."})),r(o,"GamepadIsConnectedComment",()=>d({de:"Gibt true zurück, falls das Gamepad mit dem übergebenen Index angeschlossen ist. VORSICHT: Das erste Gamepad hat Index 0.",en:"Returns true if gamepad with given index is connected. BEWARE: First gamepad has index 0."})),r(o,"GamepadGetAxisValueComment",()=>d({de:"Gibt den Wert des Gamepad-Steuerknüppels mit Index axisIndex zurück.",en:"Returns value of gamepad-stick with given index"})),r(o,"SystemToolsClassComment",()=>d({de:"Klasse mit statischen Methoden für Systemfunktionen, z.B. Löschen der Ausgabe, Registrieren eines Tastaturlisteners usw.",en:"Class with static system Methods, e.g. clear text output, register keyboard listener"})),r(o,"SystemToolsClearScreenComment",()=>d({de:"Löscht den Textausgabe-Bildschirm",en:"Clears text output."})),r(o,"SystemToolsSetSpeedComment",()=>d({de:"Setzt die Ausführungsgeschwindigkeit. Der Parameter speed wir in Steps/Sekunde angegeben. Eine negative Zahl bedeutet: 'maximal'.",en:"Sets speed in which program is executed. Parameter speed is given in steps/second. A negative value for speed means: maximum speed."})),r(o,"SystemToolsGetSpeedComment",()=>d({de:"Gibt die Ausführungsgeschwindigkeit in Steps pro Sekunde zurück.",en:"Returns execution speed in steps/second."})),r(o,"SystemToolsGetNumberOfProcessorCoresComment",()=>d({de:"Gibt die Anzahl der Prozessorkerne des Systems zurück.",en:"Returns the number of logical processors available to run threads on the user's computer."})),r(o,"SystemToolsSetCallActMethodFrequency",()=>d({de:"Legt fest, wie oft pro Sekunde die Methode act() von Actor-Objekten aufgerufen wird. Der Parameter frequency wird in Aufrufen pro Sekunde angegeben. Die Frequenz ist für alle Actor-Objekte gleich.",en:"Sets how often per second the method act() of Actor-objects is called. Parameter frequency is given in calls/second. Frequency is the same for all Actor-objects."})),r(o,"SystemToolsPauseComment",()=>d({de:"Pausiert das Programm für die angegebene Zeit in ms.",en:"Makes current thread pause execution for given time in ms."})),r(o,"SystemToolsGetStepCountComment",()=>d({de:"Gibt die Anzahl der seit dem Start des Programms ausgeführten Steps (== Programmschritte) zurück.",en:"Gets number of steps since program start."})),r(o,"SystemToolsAddKeyListenerComment",()=>d({de:"Fügt einen KeyListener hinzu, dessen Methode keyTyped immer dann aufgerufen wird, wenn eine Taste gedrückt und anschließend losgelassen wird.",en:"Adds a KeyListener whose method keyTyped is called every time a key was pressed and subsequently released."})),r(o,"SystemToolsPauseTimeLower0",()=>d({de:"Der Parameter milliseconds der Methode SystemTools.pause muss >= 0 sein.",en:"Parameter milliseconds of method SystemTools.pause has to be >= 0."})),r(o,"KeyListenerInterfaceComment",()=>d({de:"Interface mit Methode onKeyTyped. Eine Klasse, die dieses Interface implementiert, kann auf Tastatureingaben reagieren. Ein Objekt dieser Klasse muss zuvor aber mit System.addKeyListener() registriert werden.",en:"Interface with method onKeyTyped. Register a KeyListener with SystemTools.addKeyListener()."})),r(o,"KeyListenerOnKeyTypedComment",()=>d({de:"Wird aufgerufen, nachdem eine Taste gedrückt und wieder losgelassen wurde.",en:"Is called if a key was pressed and then released."})),r(o,"TimerClassComment",()=>d({de:"Timer Klasse zur periodischen Ausführung von Methoden",en:"Class Timer to execute methods periodically"})),r(o,"TimerClassRepeatComment",()=>d({de:"Fügt ein neues Runnable-Objekt hinzu und ruft dessen tick-Methode immer wieder auf.",en:"Adds a new Runnable object and call it's run-method periodically."})),r(o,"TimerClassPauseComment",()=>d({de:"Hält den Timer an. Er kann später mit der Methode restart() wieder gestartet werden.",en:"Pauses timer. Use method restart() to restart it later."})),r(o,"TimerClassRestartComment",()=>d({de:"Startet den Timer erneut, nachdem er mit pause() pausiert wurde.",en:"Restart timer if it had been paused with pause()-method."})),r(o,"TimerClassExecuteLaterComment",()=>d({de:"Führt die übergebene Methode nach dt millisekunden ein Mal aus.",en:"Waits dt milliseconds and then executes given method once."})),r(o,"InputClassComment",()=>d({de:"Klasse mit statischen Methoden zur Eingabe von Text per Tastatur",en:"Class with static Method to retrieve input from keyboard."})),r(o,"InputClassReadCharComment",()=>d({de:"Erwartet vom Benutzer die Eingabe eines Wertes vom Datentyp char",en:"Takes char-input from user."})),r(o,"InputWaitForKeyComment",()=>d({de:"Wartet, bis die Benutzerin/der Benutzer eine der angegebenen Tasten gedrückt hat.",en:"Waits until the user presses one of given keys."})),r(o,"InputWaitForAnyKeyComment",()=>d({de:"Wartet, bis die Benutzerin/der Benutzer eine beliebige Taste gedrückt hat.",en:"Waits until the user presses any key."})),r(o,"InputIsKeyDownComment",()=>d({de:"Gibt genau dann true zurück, wenn die angegebene Taste gerade heruntergedrückt ist. N.B.: Für Sondertasten gibt es die vordefinierten statische Konstanten der Klasse Key, z.B. prüft Input.isKeyDown(Key.ArrowLeft), ob gerade die Pfeil-nach-links-Taste heruntergedrückt ist. ",en:"Returns true if and only if given key is pressed down currently. N.B.: There are predefined static constants in Klass Key for special key, e.g. Input.isKeyDown(Key.ArrowLeft)"})),r(o,"InputClassReadIntComment",()=>d({de:"Erwartet vom Benutzer die Eingabe eines Wertes vom Datentyp int",en:"Takes int-input from user."})),r(o,"InputClassReadDoubleComment",()=>d({de:"Erwartet vom Benutzer die Eingabe eines Wertes vom Datentyp double",en:"Takes double-input from user."})),r(o,"InputClassReadFloatComment",()=>d({de:"Erwartet vom Benutzer die Eingabe eines Wertes vom Datentyp float",en:"Takes float-input from user."})),r(o,"InputClassReadBooleanComment",()=>d({de:"Erwartet vom Benutzer die Eingabe eines Wertes vom Datentyp boolean",en:"Takes boolean-input from user."})),r(o,"InputClassReadStringComment",()=>d({de:"Erwartet vom Benutzer die Eingabe eines Wertes vom Datentyp String",en:"Takes String-input from user."})),r(o,"InputClassBooleanError",()=>d({de:"Erwartet wird true oder false.",en:"true or false expected."})),r(o,"InputClassFloatError",()=>d({de:"Erwartet wird eine Fließkommazahl mit Dezimalpunkt, z.B. 1.2 oder 1.34e-10 oder -3e-10.",en:"Floating point value with decimal point expected, e.g. 1.2 or 1.34e-10 or -3e-10."})),r(o,"InputClassCharError",()=>d({de:"Erwartet wird ein einzelnes Zeichen.",en:"Single character expected."})),r(o,"InputClassIntError",()=>d({de:"Erwartet wird eine ganze Zahl.",en:"Integer value expected."})),r(o,"GUIComponentClassComment",()=>d({de:"Oberklasse für alle GUI-Komponenten",en:"Base class of all GUI components"})),r(o,"GUIComponentOnChangeComment",()=>d({de:"Wird aufgerufen, wenn sich der Wert der GUI-Komponente aufgrund von Benutzeraktionen ändert.",en:"Gets called whenever this GUI-Component changes it's value."})),r(o,"GUIComponentAddChangeListenerComment",()=>d({de:"Fügt einen ChangeListener hinzu, dessen onChange-Methode immer dann aufgerufen wird, wenn sich der Wert der GUI-Komponente aufgrund von Benutzeraktionen ändert.",en:"Adds a ChangeListener whose onChange-method gets called whenever this component's value changes."})),r(o,"GUIComponentGetWidthComment",()=>d({de:"Gibt die Breite des GUI-Objekts zurück.",en:"Returns width of this GUI object."})),r(o,"GUIComponentGetHeightComment",()=>d({de:"Gibt die Höhe des GUI-Objekts zurück.",en:"Returns height of this GUI object."})),r(o,"GuiTextComponentClassComment",()=>d({de:"Abstrakte Oberklasse für alle Gui-Komponenten mit Textanteil",en:"Abstract base class for all GUI components that display text"})),r(o,"GuiTextComponentSetFontsizeComment",()=>d({de:"Setzt die Schriftgröße des Textes (Einheit: Pixel).",en:"Set fontsize in pixels."})),r(o,"GuiTextComponentGetFontsizeComment",()=>d({de:"Gibt die Schriftgröße zurück.",en:"Returns fontsize."})),r(o,"GuiTextComponentSetTextComment",()=>d({de:"Setzt den Text.",en:"Set text of this component."})),r(o,"GuiTextComponentGetTextComment",()=>d({de:"Gibt den Text zurück.",en:"Returns text of this component."})),r(o,"GuiTextComponentSetStyleComment",()=>d({de:"Setzt die Eigenschaften Fettdruck (bold) und Schrägschrift (italic).",en:"Set style of text (bold, italic)."})),r(o,"GuiTextComponentSetTextColor",()=>d({de:"Setzt die Textfarbe. Die Farbe wird als int-Wert gegeben, wobei farbe == 256*256*rot + 256*grün + blau",en:"Set text color. Color is given as int value: color == 256*256*red + 256*green + blue"})),r(o,"ChangeListenerInterfaceComment",()=>d({de:"Listener-Interface für GUI-Klassen (Button, TextField, Checkbox, Radiobutton)",en:"Listener interface for GUI classes (Button, TextField, Checkbox, Radiobutton)"})),r(o,"ChangeListenerOnChangeComment",()=>d({de:"Wird immer dann aufgerufen, wenn sich das GUI-Objekt verändert hat.",en:"Gets called whenever the GUI-object has changed."})),r(o,"ButtonClassComment",()=>d({de:"Button, der innerhalb der Grafikausgabe dargestellt werden kann",en:"Button inside graphics pane"})),r(o,"ButtonConstructorComment",()=>d({de:"Instanziert ein neues Button-Objekt. (x, y) sind die Koordinaten der linken oberen Ecke, fontsize die Höhe des Textes in Pixeln.",en:"Creates a new Button object. (x,y) is it's top left corner, fontsize the height of it's caption in pixels."})),r(o,"ButtonCopyComment",()=>d({de:"Erstellt eine Kopie des Button-Objekts und git sie zurück.",en:"Creates a copy of this button and returns it."})),r(o,"ButtonIsDownComment",()=>d({de:"Gibt genau dann true zurück, wenn der Button gerade heruntergedrückt ist.",en:"Returns true if and only if button currently is pressed down."})),r(o,"CheckBoxClassComment",()=>d({de:"Checkbox, die innerhalb der Grafikausgabe dargestellt werden kann",en:"Checkbox inside graphics pane"})),r(o,"CheckBoxConstructorComment",()=>d({de:"Instanziert ein neues CheckBox-Objekt. (x, y) sind die Koordinaten der linken oberen Ecke, fontsize die Höhe des Textes in Pixeln.",en:"Creates a new CheckBox object. (x,y) is it's top left corner, fontsize the height of it's caption in pixels."})),r(o,"CheckBoxCopyComment",()=>d({de:"Erstellt eine Kopie der CheckBox.",en:"Creates a copy of this CheckBox."})),r(o,"CheckBoxSetCrossColorComment",()=>d({de:"Setzt die Farbe des Kreuzchens. Die Farbe wird als int-Wert gegeben, wobei farbe == 256*256*rot + 256*grün + blau",en:"Sets color of cross. Color is given as int value: color = 256<*256*red + 256*green + blue."})),r(o,"CheckBoxSetCheckedComment",()=>d({de:"Setzt den Zustand der Checkbox: angekreuzt bzw. nicht angekreuzt",en:"Sets state checked/unchecked of this checkbox."})),r(o,"CheckBoxIsCheckedComment",()=>d({de:"Gibt genau dann true zurück, falls die Checkbox angekreuzt ist.",en:"Returns true if and only if this checkbox is checked."})),r(o,"RadiobuttonClassComment",()=>d({de:"Radiobutton, der innerhalb der Grafikausgabe dargestellt werden kann",en:"Radiobutton inside graphics pane"})),r(o,"RadiobuttonConstructorComment",()=>d({de:"Instanziert ein neues Radiobutton-Objekt. (x, y) sind die Koordinaten der linken oberen Ecke, fontsize die Höhe des Textes in Pixeln.",en:"Creates a new Radiobutton object. (x,y) is it's top left corner, fontsize the height of it's caption in pixels."})),r(o,"RadiobuttonCopyComment",()=>d({de:"Erstellt eine Kopie des Radiobutton.",en:"Creates a copy of this Radiobutton."})),r(o,"RadiobuttonGetIndexComment",()=>d({de:"Gibt den Index des Radiobuttons zurück.",en:"Returns this radiobutton's index."})),r(o,"RadiobuttonGetIndexOfSelectedRadiobuttonComment",()=>d({de:"Sind mehrere Radiobuttons mittels connectTo mit dieserm logisch verbunden, so ist genau einer davon selektiert. Diese Methode gibt den Index dieses selektierten Radiobuttons zurück.",en:"If threre are several radiobuttons grouped together via method connectTo then this method returns the selected radiobutton's index."})),r(o,"RadiobuttonGetTextOfSelectedRadiobuttonComment",()=>d({de:"Sind mehrere Radiobuttons mittels connectTo mit dieserm logisch verbunden, so ist genau einer davon selektiert. Diese Methode gibt den Text dieses selektierten Radiobuttons zurück.",en:"If threre are several radiobuttons grouped together via method connectTo then this method returns the selected radiobutton's text."})),r(o,"RadiobuttonSetIndexComment",()=>d({de:"Setzt den Index des Radiobuttons.",en:"Set this radiobutton's index."})),r(o,"RadiobuttonSetDotColorComment",()=>d({de:"Setzt die Farbe des Punktes. Die Farbe wird als int-Wert gegeben, wobei farbe == 256*256*rot + 256*grün + blau",en:"Sets dot color of this radiobutton. Color is given as int-value: color = 256*256*red + 256*green + blue"})),r(o,"RadiobuttonConnectToComment",()=>d({de:"Verbindet diesen Radiobutton logisch mit den anderen Radiobuttons. Wird anschließend auf einen davon geklickt, so wird dieser selektiert, die anderen deselektiert.",en:"Connects this radiobutton with given radiobuttons to a radiobutton group. If you click at one of them subsequently then all others get deselected so that only one of them is selected at any given time."})),r(o,"RadiobuttonIsSelectedComment",()=>d({de:"Gibt genau dann true zurück, falls die RadioButton selektiert ist.",en:"Returns true if and only if this radiobutton is selected."})),r(o,"RadiobuttonSelectComment",()=>d({de:"Selektiert diesen Radiobutton und deselektiert alle via connectTo mit ihm verbundenen Radiobuttons.",en:"Selects this Radiobutton and deselects all Radiobuttons in same group as this one."})),r(o,"TextfieldClassComment",()=>d({de:"Textfeld, das innerhalb der Grafikausgabe dargestellt werden kann",en:"Textfield inside graphic panel"})),r(o,"TextfieldConstructorComment",()=>d({de:"Instanziert ein neues TextField-Objekt. (x, y) sind die Koordinaten der linken oberen Ecke, fontsize die Höhe des Textes in Pixeln.",en:"Creates a new Textfield. (x, y) is it's top left edge, fontsize it's text height in pixels."})),r(o,"TextfieldCopyComment",()=>d({de:"Erzeugt eine Kopie des Textfield-Objekts",en:"Creates a clone of this Textfield object"})),r(o,"TextfieldSetPaddingComment",()=>d({de:"'Setzt den Innenabstand (padding) des Textes zum umgebenden Rechteck.",en:"Sets the padding between text and surrounding rectangle."})),r(o,"TextfieldGetTextComment",()=>d({de:"Gibt den Inhalt des Textfeldes zurück.",en:"Returns content of this Textfield object."})),r(o,"SoundClassComment",()=>d({de:"Klasse mit statischen Methoden und statischen Konstanten zur Ausgabe von Sound",en:"Class with static methods and static constants to play sound."})),r(o,"SoundGetVolumeComment",()=>d({de:"Gibt die aktuelle Mikrofonlautstärke zurück. Beim ersten Aufruf muss der Benutzer dem Browser die Erlaubnis zur Benutzung des Mikrofons geben. Solange dies noch nicht erfolgt ist, gibt die Funktion den Wert -1 zurück.",en:"Returns current microphone level."})),r(o,"SoundPlaySoundComment",()=>d({de:"Spielt einen Sound ab. Die Möglichen Sounds sind als statische Variablen der Klasse Sound hinterlegt. Tippe als Parameter also Sound gefolgt von einem Punkt ein, um eine Auswahl zu sehen!",en:"Plays given sound. Possible sounds are given by static fields of Sound class."})),r(o,"FileNotFoundExceptionComment",t=>d({de:"Konnte die Datei '"+t+"' nicht finden.",en:"File not found: '"+t+"'"})),r(o,"FilesClassComment",()=>d({de:"Klasse mit statischen Methoden zum Lesen/Schreiben von Dateien.",en:"Class with static methods to read/write files."})),r(o,"FilesReadComment",()=>d({de:"Gibt den Inhalt der Workspacedatei zurück.",en:"Returns content of workspace file with given filename."})),r(o,"FilesWriteComment",()=>d({de:"Schreibt den Text in die Workspacedatei.",en:"Erases workspace file and then writes given text into it."})),r(o,"FilesAppendComment",()=>d({de:"Fügt den Text hinten an die Workspacedatei an.",en:"Appends given text to workspace file."})),r(o,"JsonElementClassComment",()=>d({de:"Repräsentiert einen Knoten in einem Json-Objektbaum.",en:"Represents a single node inside a json object tree."})),r(o,"JsonElementGetTypeComment",()=>d({de:'Gibt den Typ des Json-Elements zurück. Mögliche Werte sind "string", "number", "array", "boolean" und "object".',en:'Returns the type of this Json-Element. Possible values are "string", "number", "array", "boolean" and "object".'})),r(o,"JsonElementGetArrayValuesComment",()=>d({de:"Falls das Json-Element ein Array ist, gibt diese Funktion es als Array von Json-Elementen zurück, andernfalls wirft sie eine Exception.",en:"If this Json element is an array, this method returns the corresponding array of json elements, otherwise it throws an Exception."})),r(o,"JsonElementNoArrayException",()=>d({de:"Das Json-Element ist kein Array, daher kann getArrayValues() kein Array zurückgeben.",en:"This json element is no array, therefore getArrayValues() cannot return an array of json elements."})),r(o,"JsonElementNoObjectException",()=>d({de:"Das Json-Element ist kein Objekt, daher kann getAttributeValue() keinen Attributwert zurückgeben.",en:"This json element is no object, therefore getAttributeValue() cannot return an attribute value."})),r(o,"JsonElementGetAttributeValueComment",()=>d({de:"Falls das Json-Element ein Objekt ist, gibt diese Funktion den Wert seines Attributs mit dem übergebenen Bezeichner als JsonElement zurück.",en:"If this json element is an object, this method returns the value of it's field with given identifier."})),r(o,"JsonElementGetAsStringComment",()=>d({de:"Gibt den String-Wert des JSon-Elements zurück.",en:"Returns string-value of this json element."})),r(o,"JsonElementNoStringExceptionComment",()=>d({de:"Das Json-Element ist kein String, daher kann getAsString() keinen Wert zurückgeben.",en:"This json element is no string, therefore method getAsString() cannot return a string value."})),r(o,"JsonElementGetAsIntComment",()=>d({de:"Gibt den int-Wert des JSon-Elements zurück.",en:"Returns int value of this json element."})),r(o,"JsonElementNoIntValueException",()=>d({de:"Das Json-Element ist keine Zahl, daher kann getAsInt() keinen Wert zurückgeben.",en:"This json element is no number, therefore getAsInt() cannot return an int value."})),r(o,"JsonElementToJsonComment",()=>d({de:"Gibt den Wert des Json-Elements als Json-codierten String zurück.",en:"Returns value of this json element as json encoded string."})),r(o,"JsonElementGetAsDoubleComment",()=>d({de:"Gibt den double-Wert des JSon-Elements zurück.",en:"Returns double value of this json element."})),r(o,"JsonElementNoDoubleException",()=>d({de:"Das Json-Element ist keine Zahl, daher kann getAsDouble() keinen Wert zurückgeben.",en:"This json element is no number, therefore method getAsDouble() cannot return a double value."})),r(o,"JsonElementGetAsBooleanComment",()=>d({de:"Gibt den boolean-Wert des JSon-Elements zurück.",en:"Returns boolean value of this json element."})),r(o,"JsonElementNoBooleanException",()=>d({de:"Das Json-Element ist kein boolescher Wert, daher kann getAsBoolean() keinen Wert zurückgeben.",en:"This json element is no boolean value, therefore method getAsBoolean() cannot return a boolean value."})),r(o,"JsonElementGetAttributeIdentifiersComment",()=>d({de:"Falls das Json-Element ein Objekt ist, gibt diese Funktion ein Array mit seinen Attributbezeichnern zurück.",en:"If this json element is an object, this method returns an array with it's field identifiers."})),r(o,"JsonElementGetAttributeIdentifiersException",()=>d({de:"Das Json-Element ist kein Objekt, daher kann diese Methode kein Array von Attributbzeichnern liefern.",en:"This json element is no object, therefore this method cannot return an array with field identifiers."})),r(o,"HttpHeaderComment",()=>d({de:"Ein Http-Header ist ein Schlüssel-Wert-Paar (key-value-pair).",en:"A Http-header is a key-value-pair."})),r(o,"HttpHeaderKeyComment",()=>d({de:"Schlüssel (key) des Http-Headers",en:"key of this header"})),r(o,"HttpHeaderValueComment",()=>d({de:"Wert (value) des Http-Headers",en:"value of this header"})),r(o,"JsonParserClassComment",()=>d({de:"Parst Json-Code und gibt ihn als Objektbaum zurück.",en:"Parses Json-code and builds object tree."})),r(o,"JsonParserParseComment",()=>d({de:"Wandelt einen Json-String in einen Objektbaum um.",en:"Transforms Json-string to object tree."})),r(o,"JsonParserParseException",t=>d({de:"Fehler beim Parsen des Json-Strings: "+t,en:"Error parsing json-string: "+t})),r(o,"HttpRequestClassComment",()=>d({de:"Ein Objekt der Klasse HttpRequest umfasst die URI, den Header und die Daten eines Http-Requests.",en:"An object of class HttpRequest consists of URI, Header and data (body)."})),r(o,"HttpRequestConstructorComment",()=>d({de:"Instanziert ein neues HttpRequest-Objekt.",en:"Creates a new HttpRequest-object."})),r(o,"HttpRequestUriComment",()=>d({de:"Legt die URI des Requests fest. Gibt ein HttpRequest-Objekt zurück (zum method-chaining).",en:"Sets the URI of this request. Returns a HttpRequest-object for method chaining."})),r(o,"HttpRequestHeaderComment",()=>d({de:"Fügt dem Request einen Header hinzu.",en:"Adds a header to this request."})),r(o,"HttpRequestPOSTComment",()=>d({de:"Setzt die Request-Methode auf POST und fügt dem Request die übergebenen Daten hinzu.",en:"Sets request method to POST and adds given data to this request."})),r(o,"HttpRequestGETComment",()=>d({de:"Setzt die Request-Methode auf GET.",en:"Sets request method to GET."})),r(o,"HttpResponseClassComment",()=>d({de:"Ein Objekt der Klasse HttpResponse umfasst den Statuscode, die Header und den Body (d.h. die Daten) eines http-Response.",en:"An object of class HttpResponse consists of status code, headers and body (that is: data) of an http-response."})),r(o,"HttpResponseUriComment",()=>d({de:"Gibt die URI des Responses zurück.",en:"Returns the URI of this response."})),r(o,"HttpResponseBodyComment",()=>d({de:"Gibt den Body dieses Responses zurück.",en:"Returns the body of this response."})),r(o,"HttpResponseStatusCodeComment",()=>d({de:"Gibt den Statuscode dieses Responses zurück.",en:"Returns the status code of this response."})),r(o,"HttpResponseStatusTextComment",()=>d({de:"Gibt den den http-Status dieses Responses in Textform zurück.",en:"Returns the status of this response as text (string)."})),r(o,"HttpResponseRequestComment",()=>d({de:"Gibt das Request-Objekt zurück, das diesen Response zur Folge hatte.",en:"Returns the request-object whicht lead to this response."})),r(o,"HttpResponseHeadersComment",()=>d({de:"Gibt die Header dieses Responses zurück.",en:"Returns the headers of this response."})),r(o,"HttpClientComment",()=>d({de:"Ein Objekt der Klasse HttpClient kann Http-Requests senden.",en:"An object of class HttpClient can send HTTP-requests."})),r(o,"HttpClientSendComment",()=>d({de:"Sendet den Request an den Server.",en:"Sends request to server."})),r(o,"HttpClientConstructorComment",()=>d({de:"Instanziert ein neues HttpClient-Objekt.",en:"Creates a new HttpClient-object."})),r(o,"URLEncoderClassComment",()=>d({de:"Klasse mit einer statischen Methode zum Encodieren von URLs.",en:"Class with static methods to encode URLs"})),r(o,"URLEncoderEncodeComment",()=>d({de:"Encodiert eine URL gemäß RFC3986.",en:"Encodes URL as described in RFC3986."})),r(o,"WebSocketClassComment",()=>d({de:"Ein Objekt der Klasse WebSocket kann Daten über das Internet senden und empfangen. Um die Klasse benutzen zu können, musst Du eine eigene Klasse schreiben, die die Klasse WebSocket erweitert und die Methoden onConnect, onMessage, onOtherClientConnected und onOtherClientDisconnected überschreibt.",en:"An Object of class WebSocket can send/receive data over the internet. To use this class you have to write your own class extending this one. By overwriting methods onConnect, onMessage, onOtherClientConnected and onOtherclientDisconnected you can react to these events."})),r(o,"WebSocketConstructorComment",()=>d({de:"Instanziert ein neues WebSocket-Objekt.",en:"Creates a new WebSocket object."})),r(o,"WebSocketOpenComment",()=>d({de:"Startet die Verbindung mit dem Server. Den SessionCode kannst Du frei wählen. Mit allen anderen Clients, die eine Verbindung mit demselben SessionCode aufbauen, kannst Du anschließend Daten austauschen. Auch der Nickname ist frei wählbar. Er ist für alle anderen Clients sichtbar.",en:"Starts the connection to the server. You can freely choose the session code. You can then exchange data with all other clients that establish a connection with the same session code. The nickname can also be freely chosen. It is visible to all other clients."})),r(o,"WebSocketSendToAllComment",()=>d({de:"Sendet Daten (message) an alle anderen Clients. Den messageType kannst Du frei wählen. Die empfangenden Clients bekommen ihn zusammen mit den Daten übermittelt. Tipp: Du kannst auch Objekte senden, musst sie dazu aber vorher serialisieren, d.h. mithilfe der Methode toJson in eine Zeichenkette verwandeln.",en:"Sends data (message) to all other clients. You can freely choose the message type. The receiving clients receive it together with the data. Tip: You can also send objects, but you have to serialize them first, i.e. convert them into a string using the toJson method."})),r(o,"WebSocketFindClientsComment",()=>d({de:'Sucht die übergebene Anzahl von "kontaktbereiten" Clients, d.h. solchen Clients, die exakt dieselbe Suchanfrage abgegeben haben. Findet der Server die Clients, so ruft er bei allen beteiligten Clients onClientsFound auf.',en:'Searches for the number of "ready to contact" clients, i.e. those clients that have submitted exactly the same search query. If the server finds the clients, it calls onClientsFound for all clients involved.'})),r(o,"WebSocketFindClientsByNicknamesComment",()=>d({de:"Sucht die Clients mit den angegebenen Nicknames. Haben sie eine entsprechende Suchanfrage (d.h. dieselben Nicknames) abgegeben, so so ruft der Server bei allen beteiligten Clients onClientsFound auf.",en:"Searches for the clients with the specified nicknames. If you have submitted a corresponding search query (i.e. the same nickname), the server calls onClientsFound for all clients involved."})),r(o,"WebSocketFindClientComment",()=>d({de:"Sucht den Client mit dem angegebenen Nickname. Hat er eine entsprechende Suchanfrage (d.h. mit dem Nickname DIESES clients) abgegeben, so so ruft der Server bei beiden Clients onClientsFound auf.",en:"Searches for the client with the specified nickname. If he has submitted a corresponding search query (i.e. with the nickname THIS client), the server calls onClientsFound for both clients."})),r(o,"WebSocketCloseComment",()=>d({de:"Beendet die Verbindung. Bei allen anderen Clients, die sich mit derselben sessionId verbunden haben, wird daraufhin die Methode onOtherClientDisconnected aufgerufen.",en:"Terminates the connection. The onOtherClientDisconnected method is then called for all other clients that have connected with the same sessionId."})),r(o,"WebSocketGetOtherClientsComment",()=>d({de:"Gibt alle bisher bei der selben Session angemeldeten Clients zurück.",en:"Returns an Array of all clients connected to the same session."})),r(o,"WebSocketOnOpenComment",()=>d({de:"Wird aufgerufen, sobald die Verbindung mit dem Server zustandegekommen ist.",en:"Is called as soon as the connection to the server has been established."})),r(o,"WebSocketOnCloseComment",()=>d({de:"Wird aufgerufen, nachdem die Verbindung geschlossen wurde.",en:"This method is called after connection had been closed."})),r(o,"WebSocketOnMessageComment",()=>d({de:"Wird immer dann aufgerufen, wenn eine Nachricht eines anderen Clients empfangen wurde.",en:"Called whenever a message from another client has been received."})),r(o,"WebSocketOnOtherClientDisconnectedComment",()=>d({de:"Wird immer dann aufgerufen, wenn ein anderer Client unter Nutzung desselben sessionCodes die Verbindung mit dem Server beendet hat.",en:"Is always called when another client using the same sessionCode has terminated the connection to the server."})),r(o,"WebSocketOnOtherClientConnectedComment",()=>d({de:"Wird immer dann aufgerufen, wenn ein anderer Client unter Nutzung desselben sessionCodes die Verbindung mit dem Server öffnet.",en:"Is always called when another client using the same sessionCode connects to the server."})),r(o,"WebSocketOnClientsFoundComment",()=>d({de:"Wird aufgerufen, wenn die durch die Methoden findClient bzw. findClients zuvor gesuchten Clients gefunden wurden.",en:"Called when the clients previously searched for by the findClient or findClients methods have been found."})),r(o,"WebSocketFunctionalityNotInEmbeddedModeException",()=>d({de:"Die Netzwerkfunktionalitäten stehen nur eingeloggten Nutzern in der Entwicklungsumgebung zur Verfügung und können daher leider hier nicht ausprobiert werden.",en:"The network functionalities are only available to logged in users at www.online-ide.de and therefore unfortunately cannot be tried out here."})),r(o,"WebSocketCommunicationError",()=>d({de:"Kommunikationsfehler beim WebSocket: ",en:"The WebSocket object had a communication error: "})),r(o,"WebSocketClientClassComment",()=>d({de:"Ein Objekt der Klasse WebSocketClient repräsentiert einen anderen Rechner, mit dem dieser Rechner über den WebSocket in Kontakt steht.",en:"An Object of class WebSocketClient represents an other "})),r(o,"WebSocketClientSendComment",()=>d({de:"Sendet Daten (message) an diesen Client. Den messageType kannst Du frei wählen. Die client bekommt ihn zusammen mit den Daten übermittelt. Tipp: Du kannst auch Objekte senden, musst sie dazu aber vorher serialisieren, d.h. mithilfe der Methode toJson in eine Zeichenkette verwandeln.",en:"Sends data (message) to this client. You may choose messageType freely. Receiving client gets it along with the sent data. Hint: You may send objects if you serialize them beforehand by calling toJSon on them. This creates a string representing this object."})),r(o,"WebSocketClientSetUserDataComment",()=>d({de:"Mit dieser Methode kannst Du beliebige Objektreferenzen in diesem WebSocketClient-Objekt speichern. Den Schlüssel kannst Du dabei frei wählen und später nutzen, um den Wert durch die Methode getUserData wieder zu holen.",en:"This method lets you save arbitrary object references alongside this WebSocketClient-object. You may choose the key freely and use it later on to retreive the value by calling getUserData."})),r(o,"WebSocketClientGetUserDataComment",()=>d({de:"Mit dieser Methode kannst Du eine Objektreferenz erhalten, die Du zuvor mit der Methode setUserData gespeichert hast. Bemerkung1: Diese Methode entfernt die Objekreferenz nicht aus dem WebSocketClient-Objekt. Bemerkung2: Damit Du alle Methoden des erhaltenen Objekts aufrufen kannst, musst Du dem Computer mitteilen, von welcher Klasse es ist ('casten'). Das geht für die Klasse MeineNutzerDaten bspw. so: MeineNutzerDaten mnd = (MeineNutzerDaten)client.getUserData('schlüssel');",en:`Method GetUserData lets you retrieve object references you stored beforehand with method setUserData. Hint: you can cast the object to it's proper data type like so: (String) getUserData("key")`})),r(o,"WebSocketClientGetNumberComment",()=>d({de:"Gehört ein Client zu einer mit findClient bzw. findClients gefundenen Gruppe, so erhältst Du mit dieser Methode die 'Rangfolge' dieses Clients in dieser Gruppe. Allen Clients wird dieselbe Rangfolgeordnung vom Server mitgeteilt. So lässt sich bspw. einfach festlegen, welcher Client eine besondere Rolle (Server) in der Gruppe erhalten soll (z.B. Client mit Nummer 1). Bemerkung: Die Nummer ist eine Zahl zwischen 1 und der Anzahl der Clients in der Gruppe.",en:"If this client belongs to a group obtained by method findClient or findClients then you get this client's order with this method. This order is given each client by the server so you get the identical value on every computer."})),r(o,"WebSocketClientGetIndexComment",()=>d({de:"Diese Methode ist veraltet. Benutze stattdessen getNumber.",en:"This method is deprecated. Use getNumber instead."})),r(o,"WebSocketNotInEmbeddedException",()=>d({de:"Die Netzwerkfunktionalitäten stehen nur eingeloggten Nutzern in der Entwicklungsumgebung zur Verfügung und können daher leider hier nicht ausprobiert werden.",en:"Network functionality doesn't run in embedded mode."})),r(o,"CollectionsClassComment",()=>d({de:"Diese Klasse besteht aus Methoden, die auf Collections operieren oder Collections zurückgeben.",en:"This class consists exclusively of static methods that operate on or return collections. It contains polymorphic algorithms that operate on collections, 'wrappers', which return a new collection backed by a specified collection, and a few other odds and ends."})),r(o,"CollectionsShuffleComment",()=>d({de:"Vertauscht die Elemente der Liste in zufälliger Weise.",en:"Randomly permutes the specified list."})),r(o,"CollectionsSortComparableListComment",()=>d({de:"Sortiert eine Liste von Elementen, die das Interface Comparable implementieren.",en:"Sorts a List of Comparable elements."})),r(o,"queueInterfaceComment",()=>d({de:"",en:""})),r(o,"queueRemoveComment",()=>d({de:"Entfernt das Element am Kopf der Liste und gibt es zurück. Führt zum Fehler, wenn die Liste leer ist.",en:"Retrieves and removes the head of this queue."})),r(o,"queuePollComment",()=>d({de:"Entfernt das Element am Kopf der Liste und gibt es zurück. Gibt null zurück, wenn die Liste leer ist.",en:"Retrieves and removes the head of this queue, or returns null if this queue is empty."})),r(o,"queuePeekComment",()=>d({de:"Gibt das Element am Kopf der Liste zurück, entfernt es aber nicht. Gib null zurück, wenn die Liste leer ist.",en:"Retrieves, but does not remove, the head of this queue, or returns null if this queue is empty."})),r(o,"queueOfferComment",()=>d({de:"Fügt ein Element hinten an die Liste an. Gibt true zurück, wenn das Element eingefügt werden konnte, ansonsten false.",en:"Inserts the specified element into this queue if it is possible to do so immediately without violating capacity restrictions. When using a capacity-restricted queue, this method is generally preferable to add(E), which can fail to insert an element only by throwing an exception."})),r(o,"dequeInterfaceComment",()=>d({de:"Interface für Liste mit zweiseitigem Zugriff (insbesondere Anfügen an beiden Enden). Der Name steht für 'double ended queue' und wird meist 'deck' ausgesprochen.",en:'A linear collection that supports element insertion and removal at both ends. The name deque is short for "double ended queue" and is usually pronounced "deck"'})),r(o,"dequeRemoveFirstOccurrenceComment",()=>d({de:"Löscht das erste Vorkommen des Objekts. Gibt true zurück, wenn die Liste dadurch verändert wurde.",en:"Removes the first occurrence of the specified element from this deque."})),r(o,"dequeRemoveLastOccurrenceComment",()=>d({de:"Löscht das letzte Vorkommen des Objekts. Gibt true zurück, wenn die Liste dadurch verändert wurde.",en:"Removes the last occurrence of the specified element from this deque."})),r(o,"dequeAddFirstComment",()=>d({de:"Fügt das Element am Anfang der Liste ein.",en:"Inserts the specified element at the front of this deque."})),r(o,"dequeAddLastComment",()=>d({de:"Fügt das Element am Ende der Liste ein.",en:"Inserts the specified element at the end of this deque."})),r(o,"dequeRemoveFirstComment",()=>d({de:"Entfernt das Element am Anfang der Liste und gibt es zurück. Führt zum Fehler, wenn die Liste leer ist.",en:"Retrieves and removes the first element of this deque."})),r(o,"dequeRemoveLastComment",()=>d({de:"Entfernt das Element am Ende der Liste und gibt es zurück. Führt zum Fehler, wenn die Liste leer ist.",en:"Retrieves and removes the last element of this deque."})),r(o,"dequePeekFirstComment",()=>d({de:"Gibt das Element am Anfang der Liste zurück, entfernt es aber nicht. Gib null zurück, wenn die Liste leer ist.",en:"Retrieves, but does not remove, the first element of this deque, or returns null if this deque is empty."})),r(o,"dequePeekLastComment",()=>d({de:"Gibt das Element am Ende der Liste zurück, entfernt es aber nicht. Gib null zurück, wenn die Liste leer ist.",en:"Retrieves, but does not remove, the last element of this deque, or returns null if this deque is empty."})),r(o,"dequePushComment",()=>d({de:"Fügt das Element am Ende der Liste hinzu.",en:"Pushes an element onto the stack represented by this deque (in other words, at the head of this deque)."})),r(o,"dequePopComment",()=>d({de:"Gibt das Element am Ende der Liste zurück und entfernt es von der Liste. Erzeugt einen Fehler, wenn die Liste leer ist.",en:"Pops an element from the stack represented by this deque."})),r(o,"dequeDescendingIteratorComment",()=>d({de:"Gibt einen Iterator über die Elemente dieser Collection zurück, der die Liste in umgekehrter Reihenfolge (Ende -> Anfang) durchläuft.",en:"Returns an iterator over the elements in this deque in reverse sequential order."})),r(o,"linkedListConstructorComment",()=>d({de:"Erzeugt eine neue, leere LinkedList.",en:"Creates a new empty LinkedList."})),r(o,"linkedListIsEmptyError",()=>d({de:"Die Liste ist leer, daher kann kein Element entnommen werden.",en:"Empty list, therefore you can't remove an element from it."})),r(o,"mapInterfaceComment",()=>d({de:"Eine Map ist ein Schlüssel-Wert-Speicher (key-value store). Eine Map kann keinen Schlüssel mehrfach enthalten.",en:"An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value."})),r(o,"mapSizeComment",()=>d({de:"Gibt die Anzahl der Schlüssel-Wert-Paare der Map zurück.",en:"Returns the number of key-value mappings in this map."})),r(o,"mapIsEmptyComment",()=>d({de:"Gibt genau dann true zurück, wenn die Map keine Schlüssel-Wert-Paare enthält.",en:"Returns true if this map contains no key-value mappings."})),r(o,"mapContainsValueComment",()=>d({de:"Gibt genau dann true zurück, wenn die Map den Wert enthält.",en:"Returns true if this map maps one or more keys to the specified value. More formally, returns true if and only if this map contains at least one mapping to a value v such that Objects.equals(value, v). This operation will probably require time linear in the map size for most implementations of the Map interface."})),r(o,"mapContainsKeyComment",()=>d({de:"Gibt genau dann true zurück, wenn die Map zum Schlüssel key einen Wert enthält.",en:"Returns true if this map contains a mapping for the specified key."})),r(o,"mapGetComment",()=>d({de:"Gibt den Wert zum Schlüssel key zurück. Gibt null zurück, falls die Map zum Schlüssel key keinen Wert enthält.",en:`Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. More formally, if this map contains a mapping from a key k to a value v such that Objects.equals(key, k), then this method returns v; otherwise it returns null.`})),r(o,"mapPutComment",()=>d({de:"Speichert das key-value pair in der Map. Falls zum key vorher schon ein Value gespeichert war, wird dieser zurückgegeben. In der Map wird er dann durch den neuen Value überschrieben. Falls es zum key noch keinen value in der Map gab, wird null zurückgegeben.",en:"Associates the specified value with the specified key in this map (optional operation). If the map previously contained a mapping for the key, the old value is replaced by the specified value. Returns the previous value associated with key, or null if there was no mapping for key."})),r(o,"mapClearComment",()=>d({de:"Entfernt alle Schlüssel-Wert-Paare aus der Map.",en:"Removes all of the mappings from this map"})),r(o,"mapForeachComment",()=>d({de:"Führt die angegebene Aktion für jedes Schlüssel-Wert-Paar dieser Map aus.",en:"Performs the given action for each key-value pair in this map until all entries have been processed."})),r(o,"mapValuesComment",()=>d({de:"Gibt eine Collection zurück, die alle Werte der Map enthält (ggf. auch mehrfach).",en:"Returns a Collection containing all values of this map."})),r(o,"mapKeySetComment",()=>d({en:"Returns a Set containing all keys of this map.",de:"Gibt ein Set zurück, das alle Schlüssel dieser Map enthält."})),r(o,"mapRemoveComment1",()=>d({en:"Removes the mapping for a key from this map if it is present (optional operation). Returns the previous value associated with key, or null if there was no mapping for key.",de:"Entfernt das Mapping für den gegebenen Schlüssel (falls vorhanden). Gibt ggf. den zu diesem Schlüssel gespeicherten Wert zurück oder null, falls zum Schlüssel kein Wert gespeichert war."})),r(o,"mapRemoveComment2",()=>d({en:"Removes the entry for the specified key only if it is currently mapped to the specified value. Returns true if the value was removed.",de:"Entfernt das Mapping für den gegebenen Schlüssel falls es vorhanden ist und zum Schlüssel der gegebenen Wert gehört. Gibt genau dann true zurück, wenn ein Schlüssel-Wert-Paar ('Mapping') entfernt wurde."})),r(o,"hashMapClassComment",()=>d({de:"Map-Klasse mit Zugriffszeit proportional zu log(Anzahl der Elemente)",en:"A mutable hash map providing O(1) lookup."})),r(o,"hashMapConstructorComment",()=>d({de:"Erstellt ein neues HashMap-Objekt",en:"Creates a new HashMap-object."})),r(o,"setInterfaceComment",()=>d({de:"Interface mit Methoden eines Set, d.h. einer Menge, die jedes Element maximal einmal enthält",en:"A collection that contains no duplicate elements."})),r(o,"setContainsComment",()=>d({de:"Gibt genau dann true zurück, wenn das Set das Element enthält.",en:"Returns true if this set contains the specified element."})),r(o,"setContainsAllComment",()=>d({de:"Gibt genau dann true zurück, wenn das Set alle Elemente der übergebenen Collection enthält.",en:"Returns true if this set contains all of the elements of the specified collection."})),r(o,"hashSetClassComment",()=>d({de:"Set mit konstanter Zugriffszeit",en:"This class implements the Set interface, backed by a hash table (actually a HashMap instance). It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time. This class permits the null element."})),r(o,"hashSetConstructorComment",()=>d({de:"Erstellt ein neues HashSet-Objekt.",en:"Creates a new HashSet object."})),r(o,"stackClassComment",()=>d({de:"Stack (Stapelspeicher/Kellerspeicher)",en:"Stack implementation using Javascript array"})),r(o,"stackConstructorComment",()=>d({de:"Erstellt ein neues, leeres Stack-Objekt.",en:"Creates a new, empty stack object."})),r(o,"stackPushComment",()=>d({de:"Legt ein Element 'oben' auf den Stack.",en:"Pushes an element on top of this stack."})),r(o,"stackPopComment",()=>d({de:"Nimmt ein Element 'von oben' vom Stack.",en:"Pops an element from the top of this stack."})),r(o,"stackPeekComment",()=>d({de:"Gibt das oberste Elements des Stacks zurück ohne es vom Stack zu nehmen.",en:"Returns element at top of this stack without removing it from this stack."})),r(o,"stackEmptyComment",()=>d({de:"Gibt genau dann true zurück, wenn der Stack leer ist.",en:"Returns true if and only if this stack is empty."})),r(o,"stackSearchComment",()=>d({de:"Sucht das Element vom 'Boden' des Stack aus und gibt seinen Index zurück, falls das Element gefunden wurde. Das unterste Element hat Index 0. Falls das Element nicht gefunden wurde, wird -1 zurückgegeben.",en:"Returns the index of the first occurrence of the specified element in this vector, or -1 if this vector does not contain the element."})),r(o,"emptyStackException",()=>d({de:"Der Stack ist leer, daher kann diese Methode nicht aufgerufen werden.",en:"This stack is empty."})),r(o,"Object3dClassComment",()=>d({de:"Basisklasse für alle 3d-Objekte",en:"Base class of all 3d objects"})),r(o,"Mesh3dClassComment",()=>d({de:"Basisklasse für alle 3d-Meshes, d.h. Objekte, die aus Dreicken bestehen.",en:"Base class of all 3d meshes (objects consisting of triangles)"})),r(o,"GraphicSystemNotAvailableError",(t,e)=>d({de:"Die Grafikausgabe ist schon in Gebrauch durch "+t+", daher kann das Graphiksystem "+e+" nicht gestartet werden.",en:"Graphic output is in use by "+t+", therefore it is not available for "+e+"."})),r(o,"databaseManagerClassComment",()=>d({de:"Über die statische Methode DatabaseManager.getConnection(String code) kann die Verbindung zu einer Datenbank auf www.sql-ide.de aufgebaut werden.",en:"A connection to a database on www.sql-ide.de can be established using the static method DatabaseManager.getConnection(String code)."})),r(o,"databaseManagerNotInEmbeddedVersionException",()=>d({de:"Verbindung zu einer Datenbank kann nur von www.online-ide.de aus aufgebaut werden.",en:"You can reach databases at www.sql-ide.de only from the ide in www.online-ide.de."})),r(o,"databaseManagerGetConnectionComment",()=>d({de:"Baut eine Verbindung mit einer Datenbank auf www.sql-ide.de auf. Gibt ein Connection-Objekt zurück, das diese Verbindung repräsentiert.",en:"Sets up a connection to a database on www.sql-ide.de. Returns a Connection object representing this connection."})),r(o,"connectionClassComment",()=>d({de:"Ein Connection-Objekt repräsentiert die Verbindung zu einer Datenbank auf www.sql-ide.de",en:"A connection object represents the connection to a database on www.sql-ide.de"})),r(o,"connectionCreateStatementComment",()=>d({de:"Erstellt ein Statement-Objekt, mit dem Statements zur Datenbank geschickt werden können.",en:"Creates a Statement object that can be used to send statements to the database."})),r(o,"connectionPrepareStatementComment",()=>d({de:"Erstellt ein PreparedStatement-Objekt, mit dem Anweisungen zur Datenbank geschickt werden können.",en:"Creates a PreparedStatement object that can be used to send statements to the database."})),r(o,"connectionCloseComment",()=>d({de:"Schließt die Verbindung zur Datenbank.",en:"Closes connection to the database."})),r(o,"connectionDatabaseConnectionError",()=>d({de:"Es besteht keine Verbindung zur Datenbank.",en:"Connection to database lost."})),r(o,"connectionAlreadyClosedError",()=>d({de:"Die Verbindung wurde bereits mit der Methode close() geschlossen.",en:"Connection has already been closed with method close()."})),r(o,"statementClassComment",()=>d({de:"Ein Statement-Objekt repräsentiert eine Anweisung an die Datenbank.",en:"A Statement object represents a statement to the database."})),r(o,"statementOnlySelectionStatementsWithQueryException",()=>d({de:"Mit der Methode executeQuery können nur select-Anweisungen ausgeführt werden. Benutze für datenverändernde Anweisungen die Methode executeUpdate.",en:"The executeQuery method can only execute select statements. For data changing statements, use the executeUpdate method."})),r(o,"statementExecuteQueryComment",()=>d({de:"Führt ein SQL-Statement aus, das eine selcet-Anweisung enthält.",en:"Executes a SQL-statement containing a select-query."})),r(o,"statementExecuteUpdateException",()=>d({de:"Mit der Methode executeUpdate können nur datenverändernde Anweisungen ausgeführt werden. Benutze für select-Anweisungen die Methode executeQuery.",en:"Only statements that change data can be executed with the executeUpdate method. Use the executeQuery method for select statements."})),r(o,"statementExecuteUpdateComment",()=>d({de:"Führt ein SQL-Statement aus, das eine datenverändernde Anweisung enthält.",en:"Executes a SQL-statement which manipulates data."})),r(o,"resultSetClassComment",()=>d({de:"Ein ResultSet-Objekt speichert das Ergebnis einer Abfrage an die Datenbank.",en:"A ResulSet object contains the result of a database query."})),r(o,"resultSetNextComment",()=>d({de:'Bewegt den "Cursor" zum nächsten Datensatz und gibt genau dann true zurück, wenn noch ein Datensatz da ist.',en:'Moves the "cursor" to the next record and returns true if there is another record.'})),r(o,"resultSetSizeComment",()=>d({de:"Gibt die Anzahl der Zeilen der Ergebnistabelle zurück.",en:"Returns number of rows of result table."})),r(o,"resultSetGetIndexComment",()=>d({de:'Gibt den Index zurück, auf dem der "Cursor" in der Liste der Zeilen der Ergebnistabelle steht. Vor dem ersten Aufruf von next() wird -1 zurückgegeben.',en:'Returns the index where the "cursor" is located in the list of rows of the result table. -1 is returned before the first call to next().'})),r(o,"resultSetWasNullComment",()=>d({de:"Gibt genau dann true zurück, wenn der zuletzt gelesene Wert null war.",en:"Returns true if and only if the last value read was null."})),r(o,"resultSetGetByIndexComment",t=>d({de:`Gibt den Wert der Spalte mit dem angegebenen Spaltenindex als ${t} zurück.`,en:`Returns value of column with given index as ${t}.`})),r(o,"resultSetGetByLabelComment",t=>d({de:`Gibt den Wert der Spalte mit dem angegebenen Spaltenlabel als ${t} zurück.`,en:`Returns value of column with given label as ${t}.`})),r(o,"resultHasNoColumnWithGivenIndexException",()=>d({de:"Die Ergebnistabelle hat keine Spalte mit dem angegebenen Index.",en:"Resultset-table has no column with given index."})),r(o,"cursorAfterLastRecordException",()=>d({de:"Der Cursor befindet sich hinter dem letzten Datensatz der Ergebnistabelle.",en:"Cursor is located after last record of resultset table."})),r(o,"preparedStatementClassComment",()=>d({de:"Ein PreparedStatement-Objekt repräsentiert eine parametrisierte Anweisung an die Datenbank.",en:"A SQL statement is precompiled and stored in a PreparedStatement object. This object can then be used to efficiently execute this statement multiple times."})),r(o,"preparedStatementSetComment",t=>d({de:`Ersetzt den Parameter mit dem angegebenen Index durch den ${t}-Wert.`,en:`Replaces parameter with given index with given ${t}-value.`})),r(o,"preparedStatementParametersMissingException",()=>d({de:"Es gibt keine Parameter (mit ? besetzte Stellen) in dieser Anweisung.",en:"There are no parameters (given as ?) in this statement."})),r(o,"preparedStatementWrongParameterIndex",(t,e)=>d({de:"Es gibt nur die Parameterpositionen 1 bis "+t+" in der SQL-Anweisung, keine Position "+e+".",en:`In this statement parameter positions are numbered 1 ... ${t}. There's no parameter with position ${e}.`})),r(o,"robotClassComment",()=>d({de:"Robot Karol",en:"Carol the robot"})),r(o,"robotEmptyConstructorComment",()=>d({de:"Instanziert ein neues Robot-Objekt. Der Roboter steht anfangs an der Stelle (1/1)'",en:"Creates a new Robot object. Start position is at (1, 1)."})),r(o,"robotConstructorStartXStartY",()=>d({de:"Instanziert ein neues Robot-Objekt. Der Roboter wird anfangs an die Stelle (startX/startY) gesetzt.",en:"Creates a new Robot object. Start position is at (startX, startY)."})),r(o,"robotConstructorStartXStartYWorldXWorldY",()=>d({de:"Instanziert ein neues Robot-Objekt. Der Roboter wird anfangs an die Stelle (startX/startY) gesetzt. WorldX und WorldY sind die Ausmaße der Welt.",en:"Creates a new Robot object. Start position is at (startX, startY). WorldX and WorldY define the extent of the world."})),r(o,"robotConstructorStartXStartYinitialWorld",()=>d({de:"Instanziert ein neues Robot-Objekt. Der Roboter wird anfangs an die Stelle (startX/startY) gesetzt. Wenn die RobotWorld noch nicht instanziert ist, wird sie auf Grundlage des Strings initialeWelt erstellt.",en:"Creates a new Robot object. Start position is at (startX, startY). World is generated from string initialWorld."})),r(o,"robotGetWelt",()=>d({de:"Gibt das RobotWorld-Objekt zurück"})),r(o,"robotRechtsDrehen",()=>d({de:"Dreht den Roboter um 90° nach rechts."})),r(o,"robotLinksDrehen",()=>d({de:"Dreht den Roboter um 90° nach links."})),r(o,"robotSchritt",()=>d({de:"Lässt den Roboter einen Schritt nach vorne gehen."})),r(o,"robotHitWall",()=>d({de:"Der Roboter ist gegen eine Wand geprallt.",en:""})),r(o,"robotMaximumJumpHeightUp",()=>d({de:"Der Roboter kann maximal einen Ziegel hoch springen.",en:""})),r(o,"robotMaximumJumpHeightDown",()=>d({de:"Der Roboter kann maximal einen Ziegel nach unten springen.",en:""})),r(o,"robotCantPlaceBricksIntoWall",()=>d({de:"Der Roboter steht direkt vor einer Wand. Da kann er keine Ziegel hinlegen.",en:""})),r(o,"robotPickUpBricksFromWall",()=>d({de:"Der Roboter steht direkt vor einer Wand. Da kann er keine Ziegel aufheben.",en:""})),r(o,"robotColorUnknown",()=>d({de:"Es gibt nur Ziegel der Farben rot, gelb, blau und grün.",en:""})),r(o,"robotOutOfBricks",()=>d({de:"Der Roboter hat keine Ziegel mehr bei sich und kann daher keinen mehr hinlegen.",en:""})),r(o,"robotNoBricksToPickUp",()=>d({de:"Vor dem Roboter liegt kein Ziegel, er kann daher keinen aufheben.",en:""})),r(o,"robotCapacityExceeded",()=>d({de:"Der Roboter kann nicht mehr Steine aufheben, da er keinen Platz mehr in seinem Rucksack hat.",en:""})),r(o,"robotMaximumHeightExceeded",t=>d({de:`Der Ziegelstapel darfd die maximale Höhe von ${t} nicht überschreiten.`,en:""})),r(o,"robotStoppedProgram",()=>d({de:"Das Programm wurde durch einen Roboter angehalten.",en:""})),r(o,"robotSchrittAnzahl",()=>d({de:"Lässt den Roboter anzahl Schritte nach vorne gehen."})),r(o,"robotHinlegen",()=>d({de:"Lässt den Roboter einen roten Ziegel vor sich hinlegen."})),r(o,"robotMarkeLöschen",()=>d({de:"Lässt den Roboter eine Marke, die direkt unter ihm liegt, löschen."})),r(o,"robotMarkeSetzen",()=>d({de:"Lässt den Roboter eine gelbe Marke direkt unter sich setzen."})),r(o,"robotMarkeSetzenFarbe",()=>d({de:"Lässt den Roboter eine Marke der angegebenen Farbe direkt unter sich setzen."})),r(o,"robotHinlegenAnzahl",()=>d({de:"Lässt den Roboter Anzahl rote Ziegel vor sich hinlegen."})),r(o,"robotHinlegenFarbe",()=>d({de:"Lässt den Roboter einen Ziegel der angegebenen Farbe vor sich hinlegen."})),r(o,"robotAufheben",()=>d({de:"Lässt den Roboter einen roten Ziegel vor sich aufheben."})),r(o,"robotAufhebenAnzahl",()=>d({de:"Lässt den Roboter Anzahl rote Ziegel vor sich aufheben."})),r(o,"robotWarten",()=>d({de:"Pausiert das Programm für die angegebene Zeit in ms."})),r(o,"robotSchnell",()=>d({de:"Setzt die Ausführungsgeschwindigkeit auf 'maximal'."})),r(o,"robotBeenden",()=>d({de:"Beendet das Programm"})),r(o,"robotIstWand",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter direkt vor einer Wand steht."})),r(o,"robotNichtIstWand",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter nicht direkt vor einer Wand steht."})),r(o,"robotIstZiegel",()=>d({de:"Gibt genau dann true zurück, wenn direkt vor dem Roboter mindestens ein Ziegel liegt."})),r(o,"robotIstZiegelAnzahl",()=>d({de:"Gibt genau dann true zurück, wenn direkt vor dem Roboter genau Anzahl Ziegel liegen."})),r(o,"robotIstZiegelFarbe",()=>d({de:"Gibt genau dann true zurück, wenn auf dem Ziegelstapel direkt vor dem Roboter mindestens ein Ziegel mit der angegebenen Farbe liegt."})),r(o,"robotNichtIstZiegel",()=>d({de:"Gibt genau dann true zurück, wenn direkt vor dem Roboter kein Ziegel liegt."})),r(o,"robotNichtIstZiegelAnzahl",()=>d({de:"Gibt genau dann true zurück, wenn direkt vor dem Roboter nicht genau Anzahl Ziegel liegen."})),r(o,"robotNichtIstZiegelFarbe",()=>d({de:"Gibt genau dann true zurück, wenn auf dem Ziegelstapel direkt vor dem Roboter kein Ziegel mit der angegebenen Farbe liegt."})),r(o,"robotIstMarke",()=>d({de:"Gibt genau dann true zurück, wenn unter dem Roboter eine Marke (egal in welcher Farbe) liegt."})),r(o,"robotIstMarkeFarbe",()=>d({de:"Gibt genau dann true zurück, wenn unter dem Roboter eine Marke in der angegebenen Farbe liegt."})),r(o,"robotNichtIstMarkeFarbe",()=>d({de:"Gibt genau dann true zurück, wenn unter dem Roboter keine Marke in der angegebenen Farbe liegt."})),r(o,"robotNichtIstMarke",()=>d({de:"Gibt genau dann true zurück, wenn unter dem Roboter keine Marke (egal in welcher Farbe) liegt."})),r(o,"robotIstNorden",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter nach Norden blickt."})),r(o,"robotIstWesten",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter nach Westen blickt."})),r(o,"robotIstSueden",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter nach Süden blickt."})),r(o,"robotIstOsten",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter nach Osten blickt."})),r(o,"robotIstLeer",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter keinen Stein mit sich trägt."})),r(o,"robotIstVoll",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter die maximale Anzahl von Steinen mit sich trägt."})),r(o,"robotNichtIstLeer",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter mindestens einen Stein mit sich trägt."})),r(o,"robotHatZiegel",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter mindestens einen Stein mit sich trägt."})),r(o,"robotHatZiegelAnzahl",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter mindestens Anzahl Steine mit sich trägt."})),r(o,"robotNichtIstVoll",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter weniger als die maximale Anzahl von Steinen mit sich trägt."})),r(o,"robotSetzeAnzahlSteine",()=>d({de:"Befüllt den Rucksack des Roboters mit genau Anzahl Steinen."})),r(o,"robotSetzeRucksackGroesse",()=>d({de:"Gibt dem Roboter einen Rucksack, der maximal Anzahl Steine fasst."})),r(o,"robotWorldClassComment",()=>d({de:"Welt für Robot Karol"})),r(o,"robotWorldConstructorWorldXWorldY",()=>d({de:"Instanziert eine neue Robot-Welt"})),r(o,"robotWorldConstructorInitialWorld",()=>d({de:"Instanziert eine neue Robot-Welt"})),r(o,"robotWorldSetzeMaximalHoehe",()=>d({de:"Ändert die maximale Höhe der Ziegelstapel."})),r(o,"robotWorldSetzeZiegel",()=>d({de:"Setzt Anzahl Ziegel an der angegebenen Position mit der angegebenen Farbe. Die x- und y-Koordinaten beginnen bei 1."})),r(o,"robotWorldSetzeMarke",()=>d({de:"Setzt einen Marker an der angegebenen Position mit der angegebenen Farbe. Die x- und y-Koordinaten beginnen bei 1."})),r(o,"robotWorldPositionOutsideWorldError",(t,e)=>d({de:`Die Position (${t}/${e}) ist außerhalb der Weltgrenzen.`,en:""})),r(o,"box3dClassComment",()=>d({de:"Würfel (3D)",en:"Box (3D)"})),r(o,"box3dConstructorXYZComment",()=>d({de:"Erzeugt einen neuen Würfel mit der Kantenlänge 1. (x, y, z) ist der Ort seines Mittelpunkts (genauer: seines Diagonalenschnittpunkts).",en:"Creates a new Box with edge length 1. (x, y, z) is it's center."})),r(o,"box3dConstructorComment",()=>d({de:"Erzeugt einen neuen Würfel mit der Kantenlänge 1. Sein Mittelpunkt befindet sich bei (0, 0, 0)",en:"Creates a new Box with edge length 1 and center (0, 0, 0)."})),r(o,"box3dYouNeedSixTexturesError",()=>d({de:"Es ist ein Array mit exakt sechs Indices für diese Art von Methodenaufruf nötig.",en:"You need an array with exactly six indices for this method call."})),r(o,"textureNotFoundError",(t,e)=>d({de:`Die Textur mit Identifier ${t} und Index ${e} konnte nicht gefunden werden.`,en:`Can't find texture with identifier ${t} and index ${e}.`})),r(o,"material3dClassComment",()=>d({de:"Oberklasse aller Material3d-Klassen",en:"Base class of all Material3d classes"})),r(o,"material3dSetColorComment",()=>d({de:"Setzt die Farbe des Materials. Zum Setzen der Durchsichtigkeit (Alpha-Value) benutze setAlpha.",en:"Set material color. To set alpha-value (transparency) use setAlpha."})),r(o,"material3dGetColorComment",()=>d({de:"Gibt die Farbe als int-Wert zurück.",en:"Returns the color of this material as int-value."})),r(o,"material3dIsTransparentComment",()=>d({de:"Gibt true zurück, falls transparente Teile des Körpers auch transparent gezeichnet werden sollen.",en:"Returns true if transparent parts of the 3d-object get rendered transparent."})),r(o,"material3dSetTransparentComment",()=>d({de:"Falls der Wert true ist, werden transparente Teile des 3d-Körpers auch transparent gezeichnet. Nachteil ist eine etwas geringere Performance.",en:"If this value is true, then transparent parts of the 3d object get rendered transparent. Setting 'true' is less performant than setting 'false'."})),r(o,"material3dAlphaComment",()=>d({de:"Der Alphawert (0 ... 1) bestimmt die Durchsichtigkeit des Objekts. Tipp: Damit die Durchsichtigkeit sichtbar wird, musst Du noch setTransparent(true) aufrufen.",en:"The alpha value (0 ... 1) determines the transparency of the object. Hint: To make the transparency visible, you have to call setTransparent(true)."})),r(o,"material3dFlatShadingComment",()=>d({de:"Wenn flatShading == true ist, wird der Farbwert nur jeweils pro gerendertem Dreieck berechnet, nicht per Fragment (Pixel). Das hat eine etwas höhere Performance zur Folge.",en:"If flatShading == true then color is calculated for each triangle, not for each fragment (pixel). This leads to increased performance."})),r(o,"basicMaterial3dClassComment",()=>d({de:"Ein Material, das keine Lichtquelle berücksichtigt, sondern jede Fläche einfach nur mit ihrer Farbe füllt. Geeignet vor allem für Wireframe-Darstellung. Im Vergleich zu den anderen Materialien bietet es die beste Performance.",en:"This material doesn't take light into account but fills every surface with it's given color. Usesful for drawing wireframes. Compared to all other materials this one has best performance."})),r(o,"basicMaterial3dConstructorComment",()=>d({de:"Erzeugt ein BasicMaterial-Objekt. Wireframe == true bewirkt, dass nur die Kanten gezeichnet werden.",en:"Creates a BasicMaterial object. Wireframe == true leads to surfaces not being filled."})),r(o,"basicMaterial3dConstructorTextureComment",()=>d({de:"Erzeugt ein BasicMaterial-Objekt mit einer Textur, z.B. new BasicMaterial(Texture.earth2k).",en:"Creates a BasicMaterial object with a texture, e.g. new BasicMaterial(Texture.earth2k)."})),r(o,"basicMaterial3dConstructorSpriteLibraryComment",()=>d({de:"Erzeugt ein BasicMaterial-Objekt mit einer Textur, z.B. new BasicMaterial(SpriteLibrary.plattforms, 20).",en:"Creates a BasicMaterial object with a texture, e.g. new BasicMaterial(SpriteLibrary.plattforms, 20)."})),r(o,"lambertMaterial3dConstructorTextureComment",()=>d({de:"Erzeugt ein LambertMaterial-Objekt mit einer Textur, z.B. new LambertMaterial(Texture.earth2k).",en:"Creates a LambertMaterial object with a texture, e.g. new LambertMaterial(Texture.earth2k)."})),r(o,"lambertMaterial3dConstructorSpriteLibraryComment",()=>d({de:"Erzeugt ein LambertMaterial-Objekt mit einer Textur, z.B. new LambertMaterial(SpriteLibrary.plattforms, 20).",en:"Creates a LambertMaterial object with a texture, e.g. new LambertMaterial(SpriteLibrary.plattforms, 20)."})),r(o,"phongMaterial3dConstructorTextureComment",()=>d({de:"Erzeugt ein PhongMaterial-Objekt mit einer Textur, z.B. new PhongMaterial(Texture.earth2k).",en:"Creates a PhongMaterial object with a texture, e.g. new PhongMaterial(Texture.earth2k)."})),r(o,"phongMaterial3dConstructorSpriteLibraryComment",()=>d({de:"Erzeugt ein PhongMaterial-Objekt mit einer Textur, z.B. new PhongMaterial(SpriteLibrary.plattforms, 20).",en:"Creates a PhongMaterial object with a texture, e.g. new PhongMaterial(SpriteLibrary.plattforms, 20)."})),r(o,"physicallyBasedMaterial3dConstructorTextureComment",()=>d({de:"Erzeugt ein PhysicallyBasedMaterial-Objekt mit einer Textur, z.B. new PhysicallyBasedMaterial(Texture.earth2k).",en:"Creates a PhysicallyBasedMaterial object with a texture, e.g. new PhysicallyBasedMaterial(Texture.earth2k)."})),r(o,"physicallyBasedMaterial3dConstructorSpriteLibraryComment",()=>d({de:"Erzeugt ein PhysicallyBasedMaterial-Objekt mit einer Textur, z.B. new PhysicallyBasedMaterial(SpriteLibrary.plattforms, 20).",en:"Creates a PhysicallyBasedMaterial object with a texture, e.g. new PhysicallyBasedMaterial(SpriteLibrary.plattforms, 20)."})),r(o,"colorMustNotBeNull",()=>d({de:"Der Wert null ist als Farbe hier nicht möglich.",en:"color must not be null."})),r(o,"spriteMaterial3dClassComment",()=>d({de:"Ein Material, das mit Hilfe eines Sprite dargestellt werden kann.",en:"A material used for sprites."})),r(o,"spriteMaterial3dConstructorSpriteLibraryComment",()=>d({de:"Erzeugt ein Sprite3dMaterial-Objekt mithilfe einer Grafik aus der Sprite Library, z.B. new SpriteMaterial3d(SpriteLibrary.plattforms, 20)",en:"Creates a Sprite3dMaterial using a texture from sprite libary, e.g. new SpriteMaterial3d(SpriteLibrary.plattforms, 20)"})),r(o,"spriteMaterial3dConstructorTextureComment",()=>d({de:"Erzeugt ein Sprite3dMaterial-Objekt mithilfe einer Textur-Grafik, z.B. new SpriteMaterial3d(Texture.2kmoon)",en:"Creates a Sprite3dMaterial using a texture, e.g. new SpriteMaterial3d(Texture.2kmoon)"})),r(o,"phongMaterial3dClassComment",()=>d({de:"Dieses Material verwendet ein nichtphysikalisches Blinn-Phong-Modell zur Berechnung des Reflexionsgrads. kann glänzende Oberflächen mit spiegelnden Glanzlichtern simulieren (z. B. lackiertes Holz). MeshPhongMaterial berechnet die Schattierung je Fragment (entspricht ca. einem Bildschirmpixel). Der Parameter Shininess (0...1000) definiert die Intensität dieser Glanzlichter.",en:"This material uses a non-physically based Blinn-Phong model for calculating reflectance. can simulate shiny surfaces with specular highlights (such as varnished wood). MeshPhongMaterial uses per-fragment shading. Parameter shininess (0...1000) defines the intensity of these specular highlights."})),r(o,"phongMaterial3dConstructorComment",()=>d({de:"Erzeugt ein PhongMaterial-Objekt. Der Parameter Shininess (0...1000) definiert die Intensität der Glanzlichter.",en:"Creates a PhongMaterial object. The Shininess parameter (0...1000) defines the intensity of the highlights."})),r(o,"phongMaterial3dShininessComment",()=>d({de:"Die Shininess (0...1000) des Materials definiert die Intensität der Glanzlichter.",en:"The shininess value (0...1000) defines the intensity of the highlights."})),r(o,"phongMaterial3dSpecularComment",()=>d({de:"Farbe der Glanzlichter",en:"Color of specular highlights"})),r(o,"material3dEmissiveComment",()=>d({de:"Farbe, mit der das Objekt selbst leuchtet.",en:"Color with which the object itself emits light."})),r(o,"materialWireframeComment",()=>d({de:"Legt fest, ob das Objekt ungefüllt (nur als Gitter) gezeichnet werden soll.",en:"If true, then the object is renderd as wireframe (without filling)."})),r(o,"toonMaterialClassComment",()=>d({de:"Comic-ähnliches Material",en:"A material implementing toon shading."})),r(o,"toonMaterialConstructorComment",()=>d({de:"",en:""})),r(o,"lambertMaterial3dClassComment",()=>d({de:`Das Material verwendet ein nichtphysikalisches Lambertmodell zur Berechnung des Reflexionsgrads. Dadurch können einige Oberflächen (z. B. unbehandeltes Holz oder Stein) gut simuliert werden. Glänzende Oberflächen mit Glanzlichtern (z. B. lackiertes Holz) können jedoch nicht simuliert werden. MeshLambertMaterial berechnet die Schattierung je Fragment (d.h. ca. je Bildschirmpixel). Aufgrund der Einfachheit der Reflexions- und Beleuchtungsmodelle ist die Performance bei Verwendung dieses Materials höher als bei PhongMaterial oder StandardMaterial, allerdings auf Kosten einer gewissen grafischen Genauigkeit. `,en:`The material uses a non-physically based Lambertian model for calculating reflectance. This can simulate some surfaces (such as untreated wood or stone) well, but cannot simulate shiny surfaces with specular highlights (such as varnished wood). MeshLambertMaterial uses per-fragment shading. Due to the simplicity of the reflectance and illumination models, performance will be greater when using this material over the PhongMaterial or StandardMaterial, at the cost of some graphical accuracy.`})),r(o,"lambertMaterial3dConstructorComment",()=>d({de:"Erzeugt ein neues LambertMaterial-Objekt",en:"Creates a new LambertMaterial object."})),r(o,"physicallyBasedMaterial3dClassComment",()=>d({de:`in Standardmaterial auf physikalischer Basis. Physically Based Rendering (PBR) ist in vielen 3D-Anwendungen wie Unity, Unreal und 3D Studio Max in letzter Zeit zum Standard geworden. Dieser Ansatz unterscheidet sich von älteren Ansätzen dadurch, dass statt Näherungen für die Art und Weise, wie Licht mit einer Oberfläche interagiert, ein physikalisch korrektes Modell verwendet wird. In der Praxis liefert dies ein genaueres und realistischeres Ergebnis als LambertMaterial oder PhongMaterial, allerdings ist der Rechenaufwand etwas höher.`,en:`A standard physically based material, using Metallic-Roughness workflow. Physically based rendering (PBR) has recently become the standard in many 3D applications, such as Unity, Unreal and 3D Studio Max. This approach differs from older approaches in that instead of using approximations for the way in which light interacts with a surface, a physically correct model is used. In practice this gives a more accurate and realistic looking result than the LambertMaterial or PhongMaterial, at the cost of being somewhat more computationally expensive.`})),r(o,"physicallyBasedMaterial3dConstructorComment",()=>d({de:"Erzeugt ein neues PhysicallyBasedMaterial-Objekt",en:"Creates a new PhysicallyBasedMaterial object."})),r(o,"physicallyBasedMaterial3dRoughnessComment",()=>d({de:"Rauheit des Materials (Wert zwischen 0 und 1)",en:"Roughness value between 0 and 1"})),r(o,"physicallyBasedMaterial3dMetalnessComment",()=>d({de:"Metallisches Reflektieren des Materials (Wert zwischen 0 und 1)",en:"Metalness value between 0 and 1"})),r(o,"TexturesEnumComment",()=>d({de:"Texturen, die mit den 3d-Klassen (z.B. Sphere3d, Box3d) genutzt werden können, z.B. new Spere3d().setTexture(Textures.earth)",en:"You may use these textures with 3d classes (Sphere3d, Box3d, ...), e.g. new Spere3d().setTexture(Textures.earth)"})),r(o,"Sprite3dClassComment",()=>d({de:"Ein 3d-Sprite ist ein Rechteck mit Textur, das immer automatisch zur Kamera hingewandt ist.",en:"A sprite is a plane that always faces towards the camera, generally with a partially transparent texture applied."})),r(o,"Sprite3dConstructorComment",()=>d({de:"Erzeugt ein neues 3d-Sprite am gegebenen Ort mit der gegebenen Textur.",en:"Creates a new 3d sprite at given position with given texture."})),r(o,"RedValueOutOfBoundsException",()=>d({de:"Der Rotwert muss sich zwischen 0 und 255 befinden.",en:"Red component has to be from 0 to 255."})),r(o,"GreenValueOutOfBoundsException",()=>d({de:"Der Grünwert muss sich zwischen 0 und 255 befinden.",en:"Green component has to be from 0 to 255."})),r(o,"BlueValueOutOfBoundsException",()=>d({de:"Der Blauwert muss sich zwischen 0 und 255 befinden.",en:"Blue component has to be from 0 to 255."})),r(o,"AlphaValueOutOfBoundsException",()=>d({de:'Der Alphawert ("Undurchsichtigkeit") muss sich zwischen 0 und 1 befinden.',en:"Alpha component (opacity) has to be from 0 to 1."})),r(o,"ColorFromRGB",()=>d({de:"Erzeugt aus den Werten für Rot, Grün und Blau (jeweils zwischen 0 und 255) ein Color-Objekt.",en:"Creates a Color object from red, green and blue value. Values between 0 and 255."})),r(o,"ColorConstructorFromRGB",()=>d({de:"Erzeugt aus den Werten für Rot, Grün und Blau (jeweils zwischen 0 und 255) ein Color-Objekt.",en:"Creates a Color object from red, green and blue value. Values between 0 and 255."})),r(o,"ColorFromRGBA",()=>d({de:"Erzeugt aus den Werten für Rot, Grün, Blau (jeweils zwischen 0 und 255) und Alpha (zwischen 0 und 1) ein Color-Objekt.",en:"Creates a Color object from red, green, blue (0...255) and alpha (0 - 1) value."})),r(o,"ColorConstructorFromRGBA",()=>d({de:"Erzeugt aus den Werten für Rot, Grün, Blau (jeweils zwischen 0 und 255) und Alpha (zwischen 0 und 1) ein Color-Objekt.",en:"Creates a Color object from red, green, blue (0...255) and alpha (0 - 1) value."})),r(o,"ColorFromHSLA",()=>d({de:"Erzeugt aus den Werten für hue (Farbton, zwischen 0 und 360), saturation (Sättigung, zwischen 0 und 100), luminescence (Helligkeit, zwischen 0 und 100) und alpha (zwischen 0 und 1) ein Color-Objekt.",en:"Creates a Color object from values for hue (between 0 and 360), saturation (between 0 and 100), luminescence (between 0 and 100) and alpha (between 0 and 1) value."})),r(o,"ColorFromHSL",()=>d({de:"Erzeugt aus den Werten für hue (Farbton, zwischen 0 und 360), saturation (Sättigung, zwischen 0 und 100) und luminescence (Helligkeit, zwischen 0 und 100) ein Color-Objekt.",en:"Creates a Color object from values for hue (between 0 and 360), saturation (between 0 and 100) and luminescence (between 0 and 100) value."})),r(o,"ColorGetRed",()=>d({de:"Gibt den Rotwert der Farbe zurück (zwischen 0 und 255).",en:"Returns this color's red component (between 0 and 255)."})),r(o,"ColorGetGreen",()=>d({de:"Gibt den Grünwert der Farbe zurück (zwischen 0 und 255).",en:"Returns this color's green component (between 0 and 255)."})),r(o,"ColorGetBlue",()=>d({de:"Gibt den Blauwert der Farbe zurück (zwischen 0 und 255).",en:"Returns this color's blue component (between 0 and 255)."})),r(o,"ColorToInt",()=>d({de:"Gibt die Farbe (ohne Berücksichtigung des Alpha-Wertes) als int-Zahl zurück.",en:"Returns this color as int value (without alpha)."})),r(o,"ColorToString",()=>d({de:"Gibt die Farbe als Zeichenkette zurück.",en:"Returns this color as String value."})),r(o,"ColorRandomColor0",()=>d({de:"Erzeugt eine zufällige Farbe.",en:"Returns a random color."})),r(o,"ColorRandomColor1",()=>d({de:"Erzeugt eine zufällige Farbe mit der angegebenen Maximalhelligkeit (zwischen 0 und 255).",en:"Returns a random color with given maximum brightness (between 0 and 255)."})),r(o,"ColorRandomColor2",()=>d({de:"Erzeugt eine zufällige Farbe mit der angegebenen Minimal- und Maximalhelligkeit (zwischen 0 und 255).",en:"Returns a random color with given minimum and maximum brightness (between 0 and 255)."}));class Wa{}r(Wa,"fullspeed",()=>d({de:"Zeigt an, dass die annotierte Methode oder alle Methoden der annotierten Klasse mit voller Geschwindigkeit ausgeführt werden sollen.",en:"Indicates that the annotated method or all methods of the annotated class should be executed in full speed mode, ignoring any speed settings."})),r(Wa,"override",()=>d({de:"Zeigt an, dass eine Methode eine Methode in einer Superklasse überschreiben soll.",en:"Indicates that a method is intended to override a method in a superclass."})),r(Wa,"test",()=>d({de:"Zeigt an, dass eine Methode eine Testmethode ist oder eine Klasse Testmethoden enthält.",en:"Indicates that a method is a test method or that a class contains test methods."}));var om={Fullspeed:{identifier:"Fullspeed",description:Wa.fullspeed(),beforeClass:!0,beforeMethod:!0,beforeMethodOfMainClass:!0},Override:{identifier:"Override",description:Wa.override(),beforeClass:!1,beforeMethod:!0,beforeMethodOfMainClass:!1},Test:{identifier:"Test",description:Wa.test(),beforeClass:!0,beforeMethod:!0,beforeMethodOfMainClass:!0}},Ah=Object.values(om);class xe extends xl{constructor(e,i,n,s){super(e,i,s);r(this,"_isMainClass");r(this,"visibility",m.keywordPublic);r(this,"isStatic",!1);r(this,"isFinal",!1);r(this,"_outerType");r(this,"isPrimitiveTypeWrapper",!1);r(this,"innerTypes",[]);r(this,"runtimeClass_");r(this,"isLibraryType",!1);r(this,"extendsImplements",{});r(this,"staticInitializer");r(this,"staticConstructorsDependOn",new Map);r(this,"pathAndIdentifier");r(this,"staticType");r(this,"annotations",[]);this.isPrimitive=!1,this.pathAndIdentifier=n||e,this.extendsImplements[this.pathAndIdentifier]=!0,this.extendsImplements.Object=!0,this.staticType=new Nt(this)}set isMainClass(e){this._isMainClass=!0}get isMainClass(){return this._isMainClass!=null}getOwnAndInheritedFields(){return this.getFields()}set outerType(e){this._outerType=e,e.innerTypes.push(this)}get outerType(){return this._outerType}get runtimeClass(){return this.runtimeClass_}set runtimeClass(e){this.runtimeClass_=e}getExtendedImplementedIdentifiers(){return Object.getOwnPropertyNames(this.extendsImplements)}fastExtendsImplements(e){return!!this.extendsImplements[e]}registerChildType(e){e.extendsImplements[this.pathAndIdentifier]=!0}getDefaultValue(){return null}initRuntimeClass(e){var n;let i=this;this.runtimeClass=(n=class extends e{constructor(){super()}},r(n,"type",i),n)}getPossibleMethods(e,i,n){let s=[];if(i){let a=this;for(;a;){let l=a.getOwnMethods().filter(h=>h.isConstructor);if(s=s.concat(l),a.getExtends&&l.length==0)a=a.getExtends();else break}}else{s=this.getOwnMethods().filter(l=>!l.isConstructor&&l.identifier==e&&(!n||l.isStatic));let a=this.getExtends();if(a){Array.isArray(a)||(a=[a]);for(let l of a)s=s.concat(l.getPossibleMethods(e,i,n))}}return s}isVisibleFrom(e){return!!(this.visibility==m.keywordPublic||!e||this.outerType==e||this.innerTypes.includes(e)||this.visibility==m.keywordProtected&&this.outerType&&e.extendsImplements[this.outerType.pathAndIdentifier])}hasFullSpeedMethods(){return this.hasAnnotation(om.Fullspeed.identifier)}hasAnnotation(e){return this.annotations.find(i=>i.identifier==e)!=null}getAnnotation(e){return this.annotations.find(i=>i.identifier==e)}setAnnotations(e){this.annotations=e}createClassField(e){const i=new ji("class",re.instance,this.module,this,m.keywordPublic);i._isStatic=!0,i.template="§1.type.getClassObject()",i.classEnum=this,i.documentation=o.classFieldComment,i.hiddenWhenDebugging=!0;let n=new Map;return n.set(e.genericTypeParameters[0],this),i.type=new Xt(e,n),i}getArraySnippetEnding(e){let i="";for(let n=0;n0&&this.upperBounds[0].identifier!="Object"?" extends "+this.upperBounds.filter(i=>i.identifier!="Object").map(i=>i.toString()).join(" & "):"")}toString(){return this.identifier}getAbsoluteName(){var e;return this.pathAndIdentifier+(this.lowerBound?" super "+((e=this.lowerBound)==null?void 0:e.pathAndIdentifier):"")+(this.upperBounds.length>0?" extends "+this.upperBounds.map(i=>i.pathAndIdentifier).join(" & "):"")}isGenericVariant(){return!1}isGenericTypeParameter(){return!0}getFile(){return this.module.file}getFields(){return this.fieldCache||(this.upperBounds.length==0?this.fieldCache=[]:this.fieldCache=this.upperBounds[0].getFields()),this.fieldCache}getOwnMethods(){if(!this.methodCache){this.methodCache=[];for(let e of this.upperBounds)this.methodCache=this.methodCache.concat(e.getAllMethods())}return this.methodCache}getAllMethods(){return this.getOwnMethods()}getPossibleMethods(e,i,n){return this.getAllMethods().filter(s=>s.identifier==e&&s.isConstructor==i&&(s.isStatic||!n))}getCopyWithConcreteType(e){let i=e.get(this);if(i)return i;let n=new xs(this.identifier,this.module,this.identifierRange);e.set(this,n),n.catches=this.catches,this.lowerBound&&(n.lowerBound=this.lowerBound.getCopyWithConcreteType(e));for(let s of this.upperBounds)n.upperBounds.push(s.getCopyWithConcreteType(e));return e.delete(this),n}canBeReplacedByConcreteType(e){if(!(e instanceof xe))return!1;for(let i of this.upperBounds)if(!e.fastExtendsImplements(i.identifier))return!1;return!(this.lowerBound&&!this.lowerBound.fastExtendsImplements(e.identifier))}canImplicitlyCastTo(e){if(e.isPrimitive)return!1;if(e==this)return!0;if(e instanceof xs){if(!e.lowerBound)return!1;for(let i of this.upperBounds)if(i.canImplicitlyCastTo(e.lowerBound))return!0;return!1}for(let i of this.upperBounds)if(i.canImplicitlyCastTo(e))return!0;return!1}canExplicitlyCastTo(e){if(e.isPrimitive)return!1;if(e==this)return!0;if(e instanceof xs){if(!e.lowerBound)return!1;for(let i of this.upperBounds)if(i.canExplicitlyCastTo(e.lowerBound))return!0;return!1}for(let i of this.upperBounds)if(i.canExplicitlyCastTo(e))return!0;return!1}initCatches(){this.catches=[]}checkCatches(e,i){if(!this.catches||this.catches.length==0){let a=v.parameterNotDefined(this.identifier);e.push({message:a.message,id:a.id,level:"error",range:i});return}let n=this.catches.map(a=>a.toString()),s=!0;for(let a=0;as.identifier==t&&s.visibility<=e&&(s._isStatic||!i));if(n)return n;e==m.keywordPrivate&&(e=m.keywordProtected);for(let s of this.getExtends())if(n=s.getField(t,e,i),n)return n}toString(){let t=this.identifier;return this.genericTypeParameters&&this.genericTypeParameters.length>0&&(t+="<"+this.genericTypeParameters.map(e=>e.toString()).join(", ")+">"),t}getAbsoluteName(){let t=this.pathAndIdentifier;return this.genericTypeParameters&&this.genericTypeParameters.length>0&&(t+="<"+this.genericTypeParameters.map(e=>e.getAbsoluteName()).join(", ")+">"),t}getCompletionItems(t,e,i,n,s,a){let l=[];for(let h of this.getAllMethods().filter(c=>(c.classEnumInterface==this||c.visibility!=m.keywordPrivate)&&(c.isStatic||!a)))l.push({label:h.getCompletionLabel(),filterText:h.identifier,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]},kind:O.CompletionItemKind.Method,insertText:h.getCompletionSnippet(e),detail:h.returnParameterType?h.returnParameterType.getDeclaration():"void",range:n,insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,documentation:h.documentation==null?void 0:{value:typeof h.documentation=="string"?h.documentation:h.documentation()}});return l}}class Dt extends vi{constructor(e,i,n,s){super(e,i,n,s);r(this,"methods",[]);r(this,"fields",[]);r(this,"extends",[]);r(this,"cachedAllImplementedInterfaces");this.genericTypeParameters=[]}isFunctionalInterface(){return this.methods.length==1}getFields(){return this.fields}isGenericVariant(){return!1}isGenericTypeParameter(){return!1}addExtends(e){Array.isArray(e)||(e=[e]),this.extends=this.extends.concat(e)}registerExtendsImplementsOnAncestors(e){e&&this.registerChildType(e),e=e||this;for(let i of this.extends)i.registerExtendsImplementsOnAncestors(e)}getCopyWithConcreteType(e){return this.genericTypeParameters.length==0?this:new Fn(this,e)}getExtends(){return this.extends}getAllImplementedInterfaces(){var e;if(!this.cachedAllImplementedInterfaces){this.cachedAllImplementedInterfaces=[];for(let i of this.getExtends())this.cachedAllImplementedInterfaces.push(i),this.cachedAllImplementedInterfaces=(e=this.cachedAllImplementedInterfaces)==null?void 0:e.concat(i.getAllImplementedInterfaces())}return this.cachedAllImplementedInterfaces}getOwnMethods(){return this.methods}getAllMethods(){let e=this.methods;for(let i of this.extends)e=e.concat(i.getAllMethods());return e}getAllInheritedMethodsHelper(e){for(let i of this.methods){let n=i.getInternalName("java");e.get(n)||e.set(n,i)}for(let i of this.extends)i.getAllInheritedMethodsHelper(e)}getAllInheritedMethods(){let e=new Map;this.getAllInheritedMethodsHelper(e);let i=[];return e.forEach((n,s)=>i.push(n)),i}canImplicitlyCastTo(e){if(e instanceof it){for(let i of e.upperBounds)if(!this.canImplicitlyCastTo(i))return!1;return e.catches&&e.catches.push(this),!0}if(!(e instanceof Dt))return!1;if(e==this)return!0;for(let i of this.extends)if(i.canImplicitlyCastTo(e))return!0;return e.identifier=="Object"}canExplicitlyCastTo(e){return this.canImplicitlyCastTo(e)?!0:e instanceof xe?e.canImplicitlyCastTo(this):!1}getDeclaration(){let e=we[this.visibility]+" ";return e+="interface "+this.identifier,this.genericTypeParameters&&this.genericTypeParameters.length>0&&(e+="<"+this.genericTypeParameters.map(i=>i.getDeclaration()).join(", ")+">"),this.getExtends().length>0&&(e+=" extends "+this.getExtends().map(i=>i.toString()).join(", ")),e}getCompletionItems(e,i,n,s,a,l){const h=super.getCompletionItems(e,i,n,s,a,l);for(let c of this.genericTypeParameters)h.push({label:c.identifier,detail:c.getDeclaration(),kind:O.CompletionItemKind.TypeParameter,range:s,insertText:c.identifier});return h}}class Fn extends vi{constructor(e,i){super(e.identifier,e.identifierRange,e.pathAndIdentifier,e.module);r(this,"cachedMethods");r(this,"cachedExtends");r(this,"cachedAllImplementedInterfaces");this.isGenericVariantOf=e,this.typeMap=i,this.runtimeClass=e.runtimeClass}getFirstTypeParametersType(){let e=this.isGenericVariantOf.genericTypeParameters;if(e&&e.length>0)return this.typeMap.get(e[0])}isFunctionalInterface(){return this.isGenericVariantOf.isFunctionalInterface()}toString(){let e=this.identifier,i=this.isGenericVariantOf.genericTypeParameters;return i&&i.length>0&&(e+="<"+i.map(n=>{let s=this.typeMap.get(n);return s==null?void 0:s.toString()}).join(", ")+">"),e}getAbsoluteName(){let e=this.pathAndIdentifier,i=this.isGenericVariantOf.genericTypeParameters;return i&&i.length>0&&(e+="<"+i.map(n=>{let s=this.typeMap.get(n);return s==null?void 0:s.getAbsoluteName()}).join(", ")+">"),e}getDeclaration(){let e=we[this.visibility]+" ";this.isStatic&&(e+="static "),e+="interface "+this.identifier;let i=this.isGenericVariantOf.genericTypeParameters;return i&&i.length>0&&(e+="<"+i.map(n=>{let s=this.typeMap.get(n);return s==null?void 0:s.getDeclaration()}).join(", ")+">"),this.getExtends().length>0&&(e+=" extends "+this.getExtends().map(n=>n.toString()).join(", ")),e}isGenericVariant(){return!0}isGenericTypeParameter(){return!1}getCopyWithConcreteType(e){let i=new Map,n=!1;return this.typeMap.forEach((s,a)=>{let l=s.getCopyWithConcreteType(e);s!=l&&(n=!0),i.set(a,l)}),n?new Fn(this.isGenericVariantOf,i):this}getOwnMethods(){if(!this.cachedMethods){this.cachedMethods=[];for(let e of this.isGenericVariantOf.getOwnMethods())this.cachedMethods.push(e.getCopyWithConcreteType(this.typeMap,this))}return this.cachedMethods}getAllMethods(){let e=this.getOwnMethods();for(let i of this.getExtends())e=e.concat(i.getAllMethods());return e}getExtends(){return this.cachedExtends||(this.cachedExtends=this.isGenericVariantOf.getExtends().map(e=>e.getCopyWithConcreteType(this.typeMap))),this.cachedExtends}getAllImplementedInterfaces(){return this.cachedAllImplementedInterfaces||(this.cachedAllImplementedInterfaces=this.isGenericVariantOf.getAllImplementedInterfaces().map(e=>e.getCopyWithConcreteType(this.typeMap))),this.cachedAllImplementedInterfaces}canExplicitlyCastTo(e){return this.canImplicitlyCastTo(e)?!0:e instanceof xe?e.canImplicitlyCastTo(this):!1}canImplicitlyCastTo(e){if(e instanceof it){for(let s of e.upperBounds)if(!this.canImplicitlyCastTo(s))return!1;return e.catches&&e.catches.push(this),!0}if(!(e instanceof vi))return!1;if(e instanceof Dt)return!!this.isGenericVariantOf.canImplicitlyCastTo(e);let i=e;if(!this.isGenericVariantOf.canImplicitlyCastTo(i.isGenericVariantOf))return!1;let n=this.findSuperTypeOfMeWhichIsGenericVariantOf(i);if(n==null)return!1;for(let s of n.isGenericVariantOf.genericTypeParameters){let a=n.typeMap.get(s),l=i.typeMap.get(s);if(!a||!l)return!1;let h=l instanceof it&&l.isWildcard;if(!(a.canImplicitlyCastTo(l)&&(h||l.canImplicitlyCastTo(a))))return!1}return!0}findSuperTypeOfMeWhichIsGenericVariantOf(e){if(e.isGenericVariantOf==this.isGenericVariantOf)return this;for(let n of this.getExtends())if(n instanceof Fn){let s=n.findSuperTypeOfMeWhichIsGenericVariantOf(e);if(s!=null)return s}return null}registerExtendsImplementsOnAncestors(e){this.isGenericVariantOf.registerExtendsImplementsOnAncestors(e)}}class ke extends xl{constructor(t,e,i,n){for(super(t.identifier+"[]".repeat(e),n,i),this.elementType=t,this.dimension=e;this.elementType instanceof ke;)this.dimension+=this.elementType.dimension,this.elementType=this.elementType.elementType;this.isPrimitive=!1,this.genericTypeParameters=void 0}getCompletionItemDetail(){return""}getDefaultValue(){return null}getCastFunction(t){}getCopyWithConcreteType(t){let e;return(this.elementType instanceof Xt||this.elementType instanceof Fn)&&(e=this.elementType.getCopyWithConcreteType(t)),this.elementType instanceof it&&(e=t.get(this.elementType)),e?new ke(e,this.dimension,this.module,this.identifierRange):this}getFile(){throw new Error("Method not implemented.")}getBinaryResultType(t,e,i){}getBinaryOperation(t,e){}getUnaryResultType(t){}getUnaryOperation(t){}toString(){let t=this.elementType.toString();for(let e=0;e{this.addAll(e.codeReachedAssertions)})}addAll(t){t.assertions.forEach((e,i)=>this.assertions.set(i,e))}registerAssertion(t){this.assertions.set(t.key,t)}registerAssertionReached(t){let e=this.assertions.get(t);e&&(e.reached=!0)}getUnreachedAssertions(){let t=[];return this.assertions.forEach((e,i)=>{e.reached||t.push(e)}),t}}const Ur=class Ur extends xe{constructor(){super("This",re.instance,"This",null)}static this(){return Ur._this||(Ur._this=new Ur),Ur._this}isGenericVariant(){return!1}isGenericTypeParameter(){return!1}canExplicitlyCastTo(t){return!1}canImplicitlyCastTo(t){return!1}getFields(){return[]}getOwnMethods(){return[]}getAllMethods(){return[]}getField(t,e,i){}getCompletionItems(t,e,i,n,s,a){return[]}getCopyWithConcreteType(t){return this}toString(){return"This"}getAbsoluteName(){return"This"}getCompletionItemDetail(){return"This"}getDeclaration(){return"This"}};r(Ur,"_this"),r(Ur,"identifier","This");let aa=Ur;class Bi extends ih{constructor(e,i,n,s=m.keywordPublic){super(e,i,n);r(this,"isStatic",!1);r(this,"isFinal",!1);r(this,"isAbstract",!1);r(this,"isConstructor",!1);r(this,"isDefault",!1);r(this,"isSynchronized",!1);r(this,"annotations",[]);r(this,"program");r(this,"parameters",[]);r(this,"hasOuterClassParameter",!1);r(this,"template");r(this,"constantFoldingFunction");r(this,"returnParameterType");r(this,"implementedMethod");r(this,"internalNameCache",{});r(this,"internalNameCacheWithGenericParameterIdentifiers",{});r(this,"hasImplementationWithNativeCallingConvention",!1);r(this,"classEnumInterface");r(this,"programStub");r(this,"callbackAfterCodeGeneration",[]);r(this,"isCopyOf");this.visibility=s}canTakeNumberOfParameters(e){return this.parameters.length==0?e==0:this.parameters[this.parameters.length-1].isEllipsis?e>=this.parameters.length-1:e==this.parameters.length}getCopyWithConcreteType(e,i){let n=!1,s=[];for(let h of this.parameters){let c=h.getCopyWithConcreteType(e);s.push(c),c!=h&&(n=!0)}let a=this.returnParameterType;if(this.returnParameterType&&!this.returnParameterType.isPrimitive&&(a=this.returnParameterType.getCopyWithConcreteType(e)),a!=this.returnParameterType&&(n=!0),!n)return this;let l=new Bi(this.identifier,this.identifierRange,this.module,this.visibility);return l.isConstructor=this.isConstructor,l.isFinal=this.isFinal,l.isAbstract=this.isAbstract,l.isDefault=this.isDefault,l.hasOuterClassParameter=this.hasOuterClassParameter,l.parameters=s,l.returnParameterType=a,l.hasImplementationWithNativeCallingConvention=this.hasImplementationWithNativeCallingConvention,l.template=this.template,l.classEnumInterface=i,l.isCopyOf=this,l.documentation=this.documentation,l.isStatic=this.isStatic,this.getInternalName("java"),this.getInternalName("native"),l.internalNameCacheWithGenericParameterIdentifiers=this.internalNameCache,l}getCopy(){let e=[];for(let n of this.parameters)e.push(n.getCopy());let i=new Bi(this.identifier,this.identifierRange,this.module,this.visibility);return i.isConstructor=this.isConstructor,i.isFinal=this.isFinal,i.isAbstract=this.isAbstract,i.returnParameterType=this.returnParameterType,i.parameters=e,i.isCopyOf=this,i.classEnumInterface=this.classEnumInterface,i.isStatic=this.isStatic,i}getInternalName(e){if(!this.internalNameCache[e]){let i=e=="java"?"j":"n",s=`_${this.isConstructor?"c":"m"}${i}$${this.isConstructor?"_constructor_":this.identifier.replace(/\./g,"_")}$${this.returnParameterType?this.returnParameterType.getInternalName():"void"}$`;s+=this.parameters.map(a=>a.type.getInternalName()).join("$"),this.internalNameCache[e]=s}return this.internalNameCache[e]}getInternalNameWithGenericParameterIdentifiers(e){return this.internalNameCacheWithGenericParameterIdentifiers[e]||(this.internalNameCacheWithGenericParameterIdentifiers[e]=this.getInternalName(e)),this.internalNameCacheWithGenericParameterIdentifiers[e]}takeInternalJavaNameWithGenericParamterIdentifiersFrom(e){this.internalNameCacheWithGenericParameterIdentifiers.java=e.getInternalNameWithGenericParameterIdentifiers("java")}getSignature(){var e;if(this.isConstructor)return this.identifier+"("+this.parameters.map(i=>i.type.identifier).join(", ")+")";{let i=(e=this.returnParameterType)==null?void 0:e.identifier;return this.returnParameterType==aa.this()&&(i=this.classEnumInterface.identifier),i+" "+this.identifier+"("+this.parameters.map(n=>n.type.identifier).join(", ")+")"}}getSignatureWithoutReturnParameter(){return this.isConstructor?this.identifier+"("+this.parameters.map(e=>e.type.identifier).join(", ")+")":this.identifier+"("+this.parameters.map(e=>e.type.identifier).join(", ")+")"}getDeclaration(e){var n;let i=we[this.visibility]+" ";if(this.isStatic&&(i+="static "),this.isFinal&&(i+="final "),!this.isConstructor){let s=(n=this.returnParameterType)==null?void 0:n.toString();this.returnParameterType==aa.this()&&(s=e||this.classEnumInterface.identifier),i+=s+" "}return i+=this.identifier,i+"("+this.parameters.map(s=>s.getDeclaration()).join(", ")+")"}getPathWithMethodIdentifier(){return this.classEnumInterface.pathAndIdentifier+"."+this.getInternalNameWithGenericParameterIdentifiers("java")}getCompletionLabel(e=!0){let i="";i+=this.identifier+"(";let n=this.parameters;for(let s=0;si.identifier==e)!=null}getAnnotation(e){return this.annotations.find(i=>i.identifier==e)}setAnnotations(e){this.annotations=e}getType(){return this.returnParameterType}isMainMethod(){return this.identifier.startsWith(_r.mainMethodIdentifier)}}class na extends Bi{constructor(t,e,i,n=m.keywordPublic,s){super(t,e,i,n),this.genericTypeParameters=s}initCatches(){for(let t of this.genericTypeParameters)t.catches=[]}checkCatches(t){let e=[];for(let i of this.genericTypeParameters)i.checkCatches(e,t);return e}getNonGenericCopyWithConcreteTypes(){let t=new Map,e=!1;for(let i of this.genericTypeParameters)i.catches[0]?t.set(i,i.catches[0]):e=!0;return e?this.getCopyWithConcreteType(t,this.classEnumInterface):super.getCopyWithConcreteType(t,this.classEnumInterface)}getNonGenericCopyOfReturnParameterType(){if(!this.returnParameterType)return;if(this.returnParameterType.isPrimitive)return this.returnParameterType;let t=new Map;for(let e of this.genericTypeParameters)e.catches[0]&&t.set(e,e.catches[0]);return this.returnParameterType.getCopyWithConcreteType(t)}getCopyWithConcreteType(t,e){let i=[];for(let h of this.genericTypeParameters){let c=h.getCopyWithConcreteType(t);i.push(c),t.set(h,c)}let n=!1,s=[];for(let h of this.parameters){let c=h.getCopyWithConcreteType(t);s.push(c),c!=h&&(n=!0)}let a=this.returnParameterType;if(this.returnParameterType&&!this.returnParameterType.isPrimitive&&(a=this.returnParameterType.getCopyWithConcreteType(t)),a!=this.returnParameterType&&(n=!0),!n)return this;let l=new na(this.identifier,this.identifierRange,this.module,this.visibility,i);return l.isConstructor=this.isConstructor,l.isFinal=this.isFinal,l.isAbstract=this.isAbstract,l.isDefault=this.isDefault,l.hasOuterClassParameter=this.hasOuterClassParameter,l.parameters=s,l.returnParameterType=a,l.hasImplementationWithNativeCallingConvention=this.hasImplementationWithNativeCallingConvention,l.template=this.template,l.classEnumInterface=e,l.isCopyOf=this,l.documentation=this.documentation,l.isStatic=this.isStatic,this.getInternalName("java"),this.getInternalName("native"),l.internalNameCacheWithGenericParameterIdentifiers=this.internalNameCache,l}getDeclaration(){var e;let t=we[this.visibility]+" ";return this.isStatic&&(t+="static "),this.isFinal&&(t+="final "),t+="<"+this.genericTypeParameters.map(i=>i.identifier).join(", ")+"> ",t+=((e=this.returnParameterType)==null?void 0:e.toString())+" "+this.identifier,t+"("+this.parameters.map(i=>i.getDeclaration()).join(", ")+")"}}class Mf{constructor(t,e,i){this.symbol=t,this.file=e,this.range=i}}class Bm{constructor(t){r(this,"lineToUsagePositionListMap",new Map);r(this,"symbolToUsagePositionListMap",new Map);r(this,"dependsOnModules",new Map);this.module=t}clear(){this.lineToUsagePositionListMap.clear(),this.symbolToUsagePositionListMap.clear(),this.dependsOnModules.clear()}registerUsagePosition(t,e,i){if(!i)return;if(t instanceof Bi&&t.implementedMethod){t.implementedMethod.module.prepareSystemModule?this.module.systemSymbolsUsageTracker.registerUsagePosition(t.implementedMethod,this.module.file,i):this.module.compiledSymbolsUsageTracker.registerUsagePosition(t.implementedMethod,this.module.file,i);return}let n=new Mf(t,e,i);for(let a=i.startLineNumber;a<=i.endLineNumber;a++){let l=this.lineToUsagePositionListMap.get(a);l||(l=[],this.lineToUsagePositionListMap.set(a,l)),l.push(n)}let s=this.symbolToUsagePositionListMap.get(t);s||(s=[],this.symbolToUsagePositionListMap.set(t,s)),s.push(n),t.module.isLibraryModule||this.dependsOnModules.set(t.module,!0)}findSymbolAtPosition(t){let e=this.lineToUsagePositionListMap.get(t.lineNumber);if(!e)return;let i;for(let n of e)ee.containsPosition(n.range,t)&&(i==null||n.range.endColumn-n.range.startColumn<=i.range.endColumn-i.range.startColumn)&&(i=n);return i}getUsagePositionsForSymbol(t){return this.symbolToUsagePositionListMap.get(t)}getModulesWhichThisModuleDependsOn(){let t=[];return this.dependsOnModules.forEach((e,i)=>{t.push(i)}),t}getDependsOnModulesDebugInformation(){let t="";return this.dependsOnModules.forEach((e,i)=>{e.toString().length>0&&(t+="Depends on module "+i.file.name+`: `,t+=e.toString())}),t}existsDependencyToOtherDirtyModule(){for(let t of this.dependsOnModules.entries())if(t[0].isDirty())return!0;return!1}existsDependencyToOtherModuleWithErrors(){for(let t of this.dependsOnModules.entries())if(t[0].dependsOnModuleWithErrorsFlag)return!0;return!1}existsDependencyToModule(t){return this.dependsOnModules.get(t)==!0}}class vp{constructor(t,e){r(this,"errors",[]);r(this,"bracketError");r(this,"colorInformation",[]);r(this,"quickfixes",[]);r(this,"lastCompiledMonacoVersion",-2);r(this,"programsToCompileToFunctions",[]);r(this,"compiledSymbolsUsageTracker",new Bm(this));r(this,"systemSymbolsUsageTracker",new Bm(this));r(this,"returnType");r(this,"dependsOnModuleWithErrorsFlag",!1);this.file=t,this.isLibraryModule=e}isStartable(){return this.hasMainProgram()?!this.hasErrors()&&!this.isDirty()&&!this.dependsOnModuleWithErrorsFlag:!1}hasErrors(){return!!this.errors.find(t=>t.level=="error")}getLastCompiledMonacoVersion(){return this.lastCompiledMonacoVersion}findSymbolAtPosition(t){let e=this.compiledSymbolsUsageTracker.findSymbolAtPosition(t);return e||this.systemSymbolsUsageTracker.findSymbolAtPosition(t)}registerTypeUsage(t,e){t.module.isLibraryModule?this.systemSymbolsUsageTracker.registerUsagePosition(t,this.file,e):this.compiledSymbolsUsageTracker.registerUsagePosition(t,this.file,e)}findStep(t){let e;for(let i of this.programsToCompileToFunctions){let n=i.findStep(t);n&&(e?Math.abs(n.range.startLineNumber-t)1}setDirty(t){t?this.lastCompiledMonacoVersion=this.file.getLocalVersion()-1:this.lastCompiledMonacoVersion=this.file.getLocalVersion()}}class lm extends vp{constructor(){super(...arguments);r(this,"types",[]);r(this,"codeReachedAssertions",new yp)}registerTypesAtTypestore(e){for(let i of this.types)e.addType(i)}hasMainProgram(){return!1}startMainProgram(e,i){return!1}}class Ho extends lm{constructor(e,i){super(e,!1);r(this,"tokens");r(this,"ast");r(this,"mainClass");r(this,"errors",[]);r(this,"symbolTables",[]);r(this,"typePositions",{});r(this,"methodCallPositions",{});r(this,"methodDeclarationRanges",[]);r(this,"inlayHints",[]);this.moduleManager=i}getCodeFragments(){var n;let e=[],i=(n=this.mainClass)==null?void 0:n.resolvedType;i&&this.types.indexOf(i)<0&&this.getCodeFragmentsForType(i,e);for(let s of this.types)s instanceof xe&&this.getCodeFragmentsForType(s,e);return e}getCodeFragmentsForType(e,i){e.staticInitializer&&e.staticInitializer.stepsSingle.length>0&&i.push({type:e,signature:bp.staticInitializerComment(),program:e.staticInitializer,methodDeclarationRange:e.identifierRange});for(let n of e.getOwnMethods())n.program&&i.push({type:e,signature:n.getSignature(),program:n.program,methodDeclarationRange:n.identifierRange})}isReplModule(){return!1}storeLexerOutput(e){this.tokens=e.tokens,this.errors=e.errors,this.colorInformation=e.colorInformation}addTypePosition(e,i){if(i instanceof xe||i instanceof Nt||i instanceof ke){let n=this.typePositions[e.lineNumber];n==null&&(n=[],this.typePositions[e.lineNumber]=n),n.push({type:i,position:e})}}getTypeAtPosition(e,i){var n,s;return(s=(n=this.typePositions[e])==null?void 0:n.find(a=>a.position.column==i))==null?void 0:s.type}setBreakpoint(e){this.findSteps(e).forEach(n=>n.setBreakpoint())}clearBreakpoint(e){this.findSteps(e).forEach(n=>n.clearBreakpoint())}findSteps(e){let i=this.types;this.mainClass&&(i=this.types.slice(),i.push(this.mainClass.resolvedType));for(let n of i)if(n instanceof xe){if(n.staticInitializer){let a=n.staticInitializer.findStep(e);if(a)return[a]}let s=[];for(let a of n.getOwnMethods())if(a.program){let l=a.program.findStep(e);l&&s.push(l)}return s}return[]}resetBeforeCompilation(){this.tokens=void 0,this.ast=void 0,this.types=[],this.errors=[],this.compiledSymbolsUsageTracker.clear(),this.systemSymbolsUsageTracker.clear(),this.typePositions={},this.methodCallPositions={},this.symbolTables=[],this.methodDeclarationRanges=[],this.quickfixes=[],this.inlayHints=[]}hasMainProgram(){return this.getClassWithStartableMainMethod()!=null}getClassWithStartableMainMethod(){if(this.mainClass){let e=this.mainClass.methods.find(i=>i.identifier==_r.mainMethodIdentifier);if(e&&e.statement.statements.length>1)return this.mainClass.resolvedType}if(this.ast){for(let e of this.ast.innerTypes)if(!(e.kind!=m.keywordClass||e.isMainClass||!e.resolvedType)&&e.resolvedType.getMainMethod())return e.resolvedType}}startMainProgram(e,i){let n=this.getClassWithStartableMainMethod();if(!n)return!1;let s=n.runtimeClass;if(!s)return!1;let a=n.getMainMethod();if(!a)return!1;let l=s[a.getInternalNameWithGenericParameterIdentifiers("java")];if(!l)return!1;let h=s;if(l.call(h,e,e.s),i){let c=e.programStack[e.programStack.length-1];if(c){let u=c.currentStepList.find(g=>g.range.startLineNumber>=0);u&&u.setBreakpoint(!0)}}return!0}dependsOnOtherDirtyModule(){return this.compiledSymbolsUsageTracker.existsDependencyToOtherDirtyModule()}dependsOnModuleWithErrors(){return this.compiledSymbolsUsageTracker.existsDependencyToOtherModuleWithErrors()}dependsOnModule(e){return this.compiledSymbolsUsageTracker.existsDependencyToModule(e)}findSymbolTableAtPosition(e){let i,n=Number.MAX_SAFE_INTEGER;for(let s of this.symbolTables){let a=s.findSymbolTableAtPosition(e);if(a){let l=a.range.endLineNumber-a.range.startLineNumber+1;l" "+n.getDeclaration()+`{ //TODO! } `).join(` `)},versionId:t.getVersionId()}]}}}}const Xi=class Xi{constructor(){r(this,"runnableOrWaitingThreads");r(this,"threadHoldingLockToThisObject");r(this,"reentranceCounter")}_mj$wait$void$(t,e,i){this.threadHoldingLockToThisObject!=t&&this.throwIllegalMonitorException(t,v.threadWantsToWaitAndHasNoLockOnObject());let n=this;i?(t.state=B.timedWaiting,setTimeout(()=>{t.state==B.timedWaiting&&(t.state=B.runnable),this.threadHoldingLockToThisObject||this.restoreOneRunnalbeThreadToRunning()},i)):t.state=B.waiting,n.runnableOrWaitingThreads||(n.runnableOrWaitingThreads=[]),n.runnableOrWaitingThreads.indexOf(t)<0&&n.runnableOrWaitingThreads.push(t),this.threadHoldingLockToThisObject=void 0,t.lastReentrenceCounter=this.reentranceCounter,this.reentranceCounter=void 0,t.scheduler.suspendThread(t),this.restoreOneRunnalbeThreadToRunning(),e&&e()}_mj$notify$void$(t,e){if(this.threadHoldingLockToThisObject!=t&&this.throwIllegalMonitorException(t,v.threadWantsToNotifyAndHasNoLockOnObject()),this.runnableOrWaitingThreads){for(let i=0;i=0){this.runnableOrWaitingThreads[i].state=B.runnable;break}}e&&e()}_mj$notifyAll$void$(t,e){if(this.threadHoldingLockToThisObject!=t&&this.throwIllegalMonitorException(t,v.threadWantsToNotifyAndHasNoLockOnObject()),this.runnableOrWaitingThreads)for(let i of this.runnableOrWaitingThreads)i.state=B.runnable;e&&e()}restoreOneRunnalbeThreadToRunning(){if(this.runnableOrWaitingThreads)for(let t=0;t0,this.reentranceCounter++,t.registerEnteringSynchronizedBlock(this),1)}leaveSynchronizedBlock(t,e=!0){this.reentranceCounter--,this.reentranceCounter==0&&(e&&t.registerLeavingSynchronizedBlock(),this.threadHoldingLockToThisObject=void 0,this.reentranceCounter=void 0,t.lastReentrenceCounter=void 0,this.restoreOneRunnalbeThreadToRunning())}__internalHashCode(){return this}};r(Xi,"__javaDeclarations",[{type:"declaration",signature:"class Object"},{type:"method",signature:"public Object()",native:Xi.prototype._constructor},{type:"method",signature:"public String toString()",java:Xi.prototype._mj$toString$String$,comment:o.objectToStringComment},{type:"method",signature:"public boolean equals(Object otherObject)",java:Xi.prototype._mj$equals$boolean$Object,comment:o.objectEqualsComment},{type:"method",signature:"public final void wait()",java:Xi.prototype._mj$wait$void$,comment:o.objectWaitComment},{type:"method",signature:"public final void wait(long milliseconds)",java:Xi.prototype._mj$wait$void$,comment:o.objectWaitWithTimeoutComment},{type:"method",signature:"public final void notify()",java:Xi.prototype._mj$notify$void$,comment:o.objectNotifyComment},{type:"method",signature:"public final void notifyAll()",java:Xi.prototype._mj$notifyAll$void$,comment:o.objectNotifyAllComment},{type:"method",signature:"public final Class getClass()",native:Xi.prototype._getClass,comment:o.objectGetClassComment}]),r(Xi,"type");let z=Xi;const ie=class ie extends z{constructor(e){super();r(this,"value");this.value=e||""}debugOutput(){return JSON.stringify(this.value)}__internalHashCode(){return this.value}_emptyConstructor(){return this}_constructor2(e){return this.value=e,this}_constructor3(e){return this.value=e.join(""),this}_nSplit(e){return this.value.split(new RegExp(e,""))}_nToString(){return this}_nLength(){return this.value.length}_nIndexOf1(e){return this.value.indexOf(e)}_nIndexOf2(e,i){return this.value.indexOf(e,i)}_nLastIndexOf1(e){return this.value.lastIndexOf(e)}_nLastIndexOf2(e,i){return this.value.lastIndexOf(e,i)}_nCharAt(e){return e<0||e>this.value.length-1?"":this.value.charAt(e)}_nConcat(e){return this.value.concat(e)}_nContains(e){return this.value.indexOf(e)>=0}_nEndsWith(e){return this.value.endsWith(e)}_nStartsWith(e){return this.value.startsWith(e)}_nEqualsIgnoreCase(e){return e==null?!1:this.value.toLocaleUpperCase()==e.toLocaleUpperCase()}_nIsEmpty(){return this.value.length==0}_nToLowerCase(){return this.value.toLocaleLowerCase()}_nToUpperCase(){return this.value.toLocaleUpperCase()}_nSubstring1(e){return this.value.substring(e)}_nSubstring2(e,i){return this.value.substring(e,i)}_nTrim(){return this.value.trim()}_nReplace(e,i){return this.value.replace(e,()=>i)}_nReplaceAll(e,i){return this.value.replace(new RegExp(e,"g"),()=>i)}_nReplaceFirst(e,i){return this.value.replace(new RegExp(e,""),()=>i)}_nMatches(e){return this.value.match(new RegExp(e,"g"))!=null}add(e){return new ie(this.value+e)}_mj$equals$boolean$Object(e,i,n){let s=!1;n instanceof ie&&(s=this.value==n.value),e.s.push(s),i&&i()}_mj$compareTo$int$T(e,i,n){if(n===null)throw new e.classes.NullPointerException(o.stringCompareToNullpointerException());e.s.push(this.value.localeCompare(n.value)),i&&i()}_mj$compareToIgnoreCase$int$T(e,i,n){if(n===null)throw new e.classes.NullPointerException(o.stringCompareToNullpointerException());e.s.push(this.value.localeCompare(n.value,void 0,{sensitivity:"accent"})),i&&i()}_nHashCode(){return Array.from(this.value).reduce((e,i)=>Math.imul(31,e)+i.charCodeAt(0)|0,0)}_nToCharArray(){return Array.from(this.value)}_valueOf(e){return""+e}_valueOfCharArray(e){return e==null?"":e.join("")}_mj$valueOfObject$String$Object(e,i){if(i==null)return"null";i._mj$toString$String$(e,()=>{})}};r(ie,"isPrimitiveTypeWrapper",!0),r(ie,"__javaDeclarations",[{type:"declaration",signature:"final class String extends Object implements Comparable",comment:o.stringClassComment},{type:"method",signature:"public String()",native:ie.prototype._emptyConstructor,comment:o.stringConstructorComment},{type:"method",signature:"public String(String original)",native:ie.prototype._constructor2,comment:o.stringConstructorComment2},{type:"method",signature:"public String(char[] value)",native:ie.prototype._constructor3,comment:o.stringConstructorComment3},{type:"method",signature:"public final String toString()",native:ie.prototype._nToString,template:"§1",comment:o.objectToStringComment},{type:"method",signature:"public final int length()",native:ie.prototype._nLength,template:"§1.value.length",comment:o.stringLengthComment},{type:"method",signature:"public final int indexOf(string str)",native:ie.prototype._nIndexOf1,template:"§1.value.indexOf(§2)",comment:o.stringIndexOfComment1},{type:"method",signature:"public final int indexOf(string str, int fromIndex)",native:ie.prototype._nIndexOf2,template:"§1.value.indexOf(§2, §3)",comment:o.stringIndexOfComment2},{type:"method",signature:"public final int indexOf(char c)",native:ie.prototype._nIndexOf1,template:"§1.value.indexOf(§2)",comment:o.stringIndexOfComment3},{type:"method",signature:"public final int indexOf(char c, int fromIndex)",native:ie.prototype._nIndexOf2,template:"§1.value.indexOf(§2, §3)",comment:o.stringIndexOfComment4},{type:"method",signature:"public final char charAt(int index)",native:ie.prototype._nCharAt,template:`(§1.value.charAt(§2) || __t.IOBE("String charAt: ${v.charIndexOutOfBounds()}."))`,comment:o.stringCharAtComment},{type:"method",signature:"public final int compareTo(String otherString)",java:ie.prototype._mj$compareTo$int$T,comment:o.comparableCompareToComment},{type:"method",signature:"public final int compareToIgnoreCase(String otherString)",java:ie.prototype._mj$compareToIgnoreCase$int$T,comment:o.compareToIgnoreCaseComment},{type:"method",signature:"public final string concat(string otherString)",native:ie.prototype._nConcat,template:"§1.value.concat(§2)",comment:o.stringConcatComment},{type:"method",signature:"public final boolean contains(string otherString)",native:ie.prototype._nContains,template:"(§1.value.indexOf(§2) >= 0)",comment:o.stringContainsComment},{type:"method",signature:"public final boolean endsWith(string otherString)",native:ie.prototype._nEndsWith,template:"§1.value.endsWith(§2)",comment:o.stringEndsWithComment},{type:"method",signature:"public final boolean startsWith(string otherString)",native:ie.prototype._nStartsWith,template:"§1.value.startsWith(§2)",comment:o.stringStartsWithComment},{type:"method",signature:"public boolean equals(Object otherObject)",java:ie.prototype._mj$equals$boolean$Object,comment:o.objectEqualsComment},{type:"method",signature:"public boolean equals(String otherObject)",java:ie.prototype._mj$equals$boolean$Object,comment:o.objectEqualsComment},{type:"method",signature:"public final boolean equalsIgnoreCase(string otherString)",native:ie.prototype._nEqualsIgnoreCase,template:"§1.value.toLocaleUpperCase() == §2.toLocaleUpperCase()",comment:o.stringEqualsIgnoreCaseComment},{type:"method",signature:"public final boolean isEmpty()",native:ie.prototype._nIsEmpty,template:"(§1.value.length == 0)",comment:o.stringIsEmptyComment},{type:"method",signature:"public final int lastIndexOf(string str)",native:ie.prototype._nLastIndexOf1,template:"§1.value.lastIndexOf(§2)",comment:o.stringLastIndexOfComment1},{type:"method",signature:"public final int lastIndexOf(string str, int fromIndex)",native:ie.prototype._nLastIndexOf2,template:"§1.value.lastIndexOf(§2, §3)",comment:o.stringLastIndexOfComment2},{type:"method",signature:"public final int lastIndexOf(char c)",native:ie.prototype._nLastIndexOf1,template:"§1.value.lastIndexOf(§2)",comment:o.stringLastIndexOfComment3},{type:"method",signature:"public final int lastIndexOf(char c, int fromIndex)",native:ie.prototype._nLastIndexOf2,template:"§1.value.lastIndexOf(§2, §3)",comment:o.stringLastIndexOfComment4},{type:"method",signature:"public final string toLowerCase()",native:ie.prototype._nToLowerCase,template:"§1.value.toLocaleLowerCase()",comment:o.stringToLowerCaseComment},{type:"method",signature:"public final string toUpperCase()",native:ie.prototype._nToUpperCase,template:"§1.value.toLocaleUpperCase()",comment:o.stringToUpperCaseComment},{type:"method",signature:"public final string substring(int beginIndex)",native:ie.prototype._nSubstring1,template:"§1.value.substring(§2)",comment:o.stringSubstringComment1},{type:"method",signature:"public final string substring(int beginIndex, int endIndex)",native:ie.prototype._nSubstring2,template:"§1.value.substring(§2, §3)",comment:o.stringSubstringComment2},{type:"method",signature:"public final string trim()",native:ie.prototype._nTrim,template:"§1.value.trim()",comment:o.stringTrimComment},{type:"method",signature:"public final string replace(string target, string replacement)",native:ie.prototype._nReplace,template:"§1.value.replace(§2, §3)",comment:o.stringReplaceComment},{type:"method",signature:"public final string replaceAll(string regex, string replacement)",native:ie.prototype._nReplaceAll,template:"§1.value.replace(new RegExp(§2, 'g'), §3)",comment:o.stringReplaceAllComment},{type:"method",signature:"public final string matches(string regex)",native:ie.prototype._nMatches,template:"(§1.value.match(new RegExp(§2, 'g')) != null)",comment:o.stringMatchesComment},{type:"method",signature:"public final string replaceFirst(string regex, string replacement)",native:ie.prototype._nReplaceFirst,template:"§1.value.replace(new RegExp(§2, ''), §3)",comment:o.stringReplaceFirstComment},{type:"method",signature:"public final string[] split(string regex)",native:ie.prototype._nSplit,comment:o.stringSplitComment},{type:"method",signature:"public final int hashCode()",native:ie.prototype._nHashCode,template:"Array.from(§1.value).reduce((s, c) => Math.imul(31, s) + c.charCodeAt(0) | 0, 0)",comment:o.hashCodeComment},{type:"method",signature:"public final char[] toCharArray()",native:ie.prototype._nToCharArray,template:"Array.from(§1.value)",comment:o.stringToCharArrayComment},{type:"method",signature:"public static string valueOf(boolean b)",native:ie.prototype._valueOf,template:'("" + §1)',comment:o.stringValueOfComment},{type:"method",signature:"public static string valueOf(char c)",native:ie.prototype._valueOf,template:'("" + §1)',comment:o.stringValueOfComment},{type:"method",signature:"public static string valueOf(int i)",native:ie.prototype._valueOf,template:'("" + §1)',comment:o.stringValueOfComment},{type:"method",signature:"public static string valueOf(long l)",native:ie.prototype._valueOf,template:'("" + §1)',comment:o.stringValueOfComment},{type:"method",signature:"public static string valueOf(float f)",native:ie.prototype._valueOf,template:'("" + §1)',comment:o.stringValueOfComment},{type:"method",signature:"public static string valueOf(double d)",native:ie.prototype._valueOf,template:'("" + §1)',comment:o.stringValueOfComment},{type:"method",signature:"public static string valueOf(char[] data)",native:ie.prototype._valueOfCharArray,comment:o.stringValueOfComment},{type:"method",signature:"public static String valueOf(Object o)",java:ie.prototype._mj$valueOfObject$String$Object,comment:o.stringValueOfComment}]),r(ie,"type"),r(ie,"null",new ie("null"));let G=ie;const So=class So extends z{constructor(t){super(),this.type=t}_getName(){return this.type.identifier}};r(So,"__javaDeclarations",[{type:"declaration",signature:"class Class",comment:o.classClassComment},{type:"method",signature:"string getName()",native:So.prototype._getName,comment:o.classGetNameComment}]),r(So,"type");let Xl=So;class hm extends xe{constructor(e,i,n,s){super(e,i,n,s);r(this,"instanceInitializer",[]);r(this,"classObject");this.initClassObject()}initClassObject(){this.classObject=new Xl(this)}getClassObject(){return this.classObject}}class Gt extends hm{constructor(t,e,i,n){super(t,e,i,n),this.isPrimitive=!1}getOwnAndInheritedFields(){let t=this.getFields(),e=this.getExtends();return e&&(t=t.concat(e.getOwnAndInheritedFields())),t}getCompletionItemDetail(){return v.class()}getCompletionItems(t,e,i,n,s,a){let l=[];for(let h of this.getFields().filter(c=>c.visibility<=t&&(c._isStatic||!a))){let c=this.identifier=="Color"&&h._isStatic;if(l.push({label:h.identifier,kind:c?O.CompletionItemKind.Color:O.CompletionItemKind.Field,detail:c?ze.intColorToHexRGB(ze.predefinedColors[h.identifier]):h.type?h.type.toString():"",insertText:h.identifier,range:n,documentation:h.documentation==null?void 0:{value:typeof h.documentation=="string"?h.documentation:h.documentation()},signature:h.toString()}),h.type.dimension!==void 0){let u=h.type.dimension;l.push({label:h.identifier+"[]".repeat(u),kind:O.CompletionItemKind.Field,insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,detail:h.getDeclaration(),insertText:h.identifier+this.getArraySnippetEnding(u),filterText:h.identifier,range:n})}}for(let h of this.getOwnMethods().filter(c=>(c.classEnumInterface==this||c.visibility!=m.keywordPrivate)&&(c.isStatic||!a))){if(h.isConstructor)if(s!=null&&s.isConstructor&&s!=h&&h.classEnumInterface==this.getExtends()){this.pushSuperCompletionItem(l,h,e,n);continue}else continue;l.push({label:h.getCompletionLabel(),filterText:h.identifier,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]},detail:h.returnParameterType?h.returnParameterType.getDeclaration():"void",kind:O.CompletionItemKind.Method,insertText:h.getCompletionSnippet(e),range:n,insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,documentation:h.documentation==null?void 0:{value:typeof h.documentation=="string"?h.documentation:h.documentation()},sortText:h.identifier,signature:h.getSignature()})}if(this.getExtends()&&(t==m.keywordPrivate&&(t=m.keywordProtected),l=l.concat(this.getExtends().getCompletionItems(t,e,i,n,s,a))),this.isMainClass){let h=["args","$main","fromJson","class"];l=l.filter(c=>!(h.indexOf(c.filterText)>=0||h.indexOf(c.insertText)>=0))}return l}pushSuperCompletionItem(t,e,i,n){t.push({label:e.getCompletionLabel().replace(e.identifier,"super"),filterText:"super",command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]},kind:O.CompletionItemKind.Method,insertText:e.getCompletionSnippet(i).replace(e.identifier,"super"),range:n,insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,documentation:e.documentation==null?void 0:{value:typeof e.documentation=="string"?e.documentation:e.documentation()}})}findImplementedInterface(t){var e;for(let i of this.getImplements()){let n=i.findImplementedInterface(t);if(n)return n}if(this.getExtends())return(e=this.getExtends())==null?void 0:e.findImplementedInterface(t)}getField(t,e,i=!1){let n=this.getFields().find(a=>a.identifier==t&&a.visibility<=e&&(a._isStatic||!i));if(n)return n;e==m.keywordPrivate&&(e=m.keywordProtected);let s=this.getExtends();if(s)return s.getField(t,e,i)}toString(){let t=this.identifier;return this.genericTypeParameters&&this.genericTypeParameters.length>0&&(t+="<"+this.genericTypeParameters.map(e=>e.toString()).join(", ")+">"),t}getAbsoluteName(){let t=this.pathAndIdentifier;return this.genericTypeParameters&&this.genericTypeParameters.length>0&&(t+="<"+this.genericTypeParameters.map(e=>e.getAbsoluteName()).join(", ")+">"),t}hasAncestorOrIs(t){if(this==t)return!0;let e=this.getExtends();return e==null?!1:e==t?!0:e.hasAncestorOrIs(t)}findMethodWithSignature(t){let e=t.identifier,i=t.parameters.length;for(let n of this.getOwnMethods())if(n.identifier==e&&n.parameters.length==i){let s=!0;for(let a=0;a0){let i=v.abstractMethodsNotImplemented(this.identifier,e.map(s=>s.getSignature()).join(", ")),n={message:i.message,id:i.id,level:"error",range:this.identifierRange};this.module.errors.push(n),this.module instanceof Ho&&this.module.quickfixes.push(new Om(this,e,this.extends,n))}}}takeSignaturesFromOverriddenMethods(e){let i=this.getExtends(),n=i==null?void 0:i.getAllMethods();if(n)for(let s of this.methods){let a=s.getInternalName("java"),l=n==null?void 0:n.filter(c=>c.getInternalName("java")==a);if(l.length>0){let c=l[0];if(s.takeInternalJavaNameWithGenericParamterIdentifiersFrom(c),c.isFinal){let u=v.methodOverridesFinalMethod(s.getSignature(),c.classEnumInterface.identifier);s.classEnumInterface.module.errors.push({message:u.message,id:u.id,level:"error",range:s.identifierRange})}}l.forEach(c=>e[c.getPathWithMethodIdentifier()]=!0);let h=s.annotations.find(c=>c.identifier=="Override");if(h&&l.length==0){let c=v.overrideAnnotationNotNecessary(s.getSignature());s.classEnumInterface.module.errors.push({message:c.message,id:c.id,level:"warning",range:h.range})}}}checkIfInterfacesAreImplementedAndSupplementDefaultMethods(){for(let e of this.getImplements()){let i=e,n=[];for(let s of i.getOwnMethods()){let a=this.findMethodWithSignature(s);if(a)a.takeInternalJavaNameWithGenericParamterIdentifiersFrom(s),a.implementedMethod=s;else if(s.isDefault){let l=s.getCopy();this.methods.push(l);let h=()=>{let c=this.runtimeClass,u=i.runtimeClass,g=l.getInternalNameWithGenericParameterIdentifiers("java");c.prototype[g]=u.prototype[g]};this.isLibraryType?h():s.callbackAfterCodeGeneration.push(h)}else n.push(s)}if(n.length>0){let s=v.interfaceMethodsNotImplemented(this.identifier,i.identifier,n.map(l=>l.getSignature()).join(", ")),a={message:s.message,id:s.id,level:"error",range:this.identifierRange};this.module.errors.push(a),this.module instanceof Ho&&this.module.quickfixes.push(new Om(this,n,i,a))}}}isGenericVariant(){return!1}isGenericTypeParameter(){return!1}setExtends(e){this.extends=e}addImplements(e){Array.isArray(e)||(e=[e]),this.implements=this.implements.concat(e)}getCopyWithConcreteType(e){return this.genericTypeParameters.length==0?this:new Xt(this,e)}getExtends(){return this.extends}getImplements(){return this.implements}getAllImplementedInterfaces(){if(!this.cachedAllImplementedInterfaces){this.cachedAllImplementedInterfaces=[];for(let i of this.getImplements())this.cachedAllImplementedInterfaces.push(i),this.cachedAllImplementedInterfaces=this.cachedAllImplementedInterfaces.concat(i.getAllImplementedInterfaces());let e=this.getExtends();e&&(this.cachedAllImplementedInterfaces=this.cachedAllImplementedInterfaces.concat(e.getAllImplementedInterfaces()))}return this.cachedAllImplementedInterfaces}isAbstract(){return this._isAbstract}getFields(){return this.fields}getOwnMethods(){return this.methods}getAllMethods(){var e;return this.extends?this.methods.concat((e=this.extends)==null?void 0:e.getAllMethods()):this.methods}registerExtendsImplementsOnAncestors(e){var i;e&&this.registerChildType(e),e=e||this,(i=this.extends)==null||i.registerExtendsImplementsOnAncestors(e);for(let n of this.implements)n.registerExtendsImplementsOnAncestors(e)}canImplicitlyCastTo(e){if(e==this||e.identifier==this.identifier)return!0;if(e instanceof it){if(e.isWildcard){for(let i of e.upperBounds)if(!this.canImplicitlyCastTo(i))return!1;return e.lowerBound?this.canImplicitlyCastTo(e.lowerBound):!0}return e.catches?(e.catches.push(this),!0):!1}if(e instanceof vi){for(let i of this.implements)if(i.canImplicitlyCastTo(e))return!0;return this.extends?this.extends.canImplicitlyCastTo(e):!1}if(e instanceof je)return e==this?!0:this.extends?this.extends.canImplicitlyCastTo(e):!1;if(e instanceof Xt)return this.canImplicitlyCastTo(e.isGenericVariantOf);if(e instanceof it){for(let i of e.upperBounds)if(!this.canImplicitlyCastTo(i))return!1;return!(e.lowerBound&&!e.lowerBound.canImplicitlyCastTo(this))}return!1}canExplicitlyCastTo(e){return e.isPrimitive?!1:e==this||this.canImplicitlyCastTo(e)?!0:e instanceof xe?e.canImplicitlyCastTo(this):!1}getDeclaration(){let e=we[this.visibility]+" ";return this.isStatic&&(e+="static "),this.isAbstract()&&(e+="abstract "),e+="class "+this.identifier,this.genericTypeParameters&&this.genericTypeParameters.length>0&&(e+="<"+this.genericTypeParameters.map(i=>i.getDeclaration())+">"),this.extends&&this.extends.identifier!="Object"&&(e+=" extends "+this.extends.toString()),this.implements.length>0&&(e+=" implements "+this.implements.map(i=>i.toString()).join(", ")),e}getMinimumConcreteGenericType(e){var n;let i=new Map;if(!(((n=this.genericTypeParameters)==null?void 0:n.length)>0))return this;for(let s of this.genericTypeParameters)s.upperBounds.length>0?i.set(s,s.upperBounds[0]):i.set(s,e.getType("Object"));return new Xt(this,i)}getMainMethod(){let e=this.methods.find(i=>i.identifier==_r.mainMethodIdentifier);return e||this.methods.find(i=>i.isStatic&&i.identifier=="main"&&i.getSignature().toLocaleLowerCase()=="void main(string[])")}getCompletionItems(e,i,n,s,a,l){const h=super.getCompletionItems(e,i,n,s,a,l);for(let c of this.genericTypeParameters)h.push({label:c.identifier,detail:c.getDeclaration(),kind:O.CompletionItemKind.TypeParameter,range:s,insertText:c.identifier});return h}}class Xt extends Gt{constructor(e,i){super(e.identifier,e.identifierRange,e.pathAndIdentifier,e.module);r(this,"cachedFields");r(this,"cachedMethods");r(this,"cachedExtends");r(this,"cachedImplements");r(this,"cachedAllImplementedInterfaces");this.isGenericVariantOf=e,this.typeMap=i,this.isFinal=this.isGenericVariantOf.isFinal,this.documentation=this.isGenericVariantOf.documentation}get runtimeClass(){var e;return(e=this.isGenericVariantOf)==null?void 0:e.runtimeClass}getClassObject(){return this.isGenericVariantOf.getClassObject()}toString(){let e=this.identifier,i=this.isGenericVariantOf.genericTypeParameters;return i&&i.length>0&&(e+="<"+i.map(n=>{let s=this.typeMap.get(n);return s==null?void 0:s.toString()}).join(", ")+">"),e}getAbsoluteName(){let e=this.pathAndIdentifier,i=this.isGenericVariantOf.genericTypeParameters;return i&&i.length>0&&(e+="<"+i.map(n=>{let s=this.typeMap.get(n);return s==null?void 0:s.getAbsoluteName()}).join(", ")+">"),e}getDeclaration(){let e=we[this.visibility]+" ";this.isStatic&&(e+="static "),this.isAbstract()&&(e+="abstract "),e+="class "+this.identifier;let i=this.isGenericVariantOf.genericTypeParameters;return i&&i.length>0&&(e+="<"+i.map(n=>{let s=this.typeMap.get(n);return s==null?void 0:s.toString()}).join(", ")+">"),this.getExtends()&&(e+=" extends "+this.getExtends().toString()),this.getImplements().length>0&&(e+=" implements "+this.getImplements().map(n=>n.toString()).join(", ")),e}registerExtendsImplementsOnAncestors(e){this.isGenericVariantOf.registerExtendsImplementsOnAncestors(e)}getFirstTypeParametersType(){let e=this.isGenericVariantOf.genericTypeParameters;if(e&&e.length>0)return this.typeMap.get(e[0])}isAbstract(){return this.isGenericVariantOf.isAbstract()}isGenericVariant(){return!0}isGenericTypeParameter(){return!1}getCopyWithConcreteType(e){let i=new Map,n=!1;return this.typeMap.forEach((s,a)=>{let l=s.getCopyWithConcreteType(e);s!=l&&(n=!0),i.set(a,l)}),n?new Xt(this.isGenericVariantOf,i):this}getFields(){if(!this.cachedFields){this.cachedFields=[];for(let e of this.isGenericVariantOf.getFields())this.cachedFields.push(e.getCopyWithConcreteType(this.typeMap))}return this.cachedFields}getOwnMethods(){if(!this.cachedMethods){this.cachedMethods=[];for(let e of this.isGenericVariantOf.getOwnMethods())this.cachedMethods.push(e.getCopyWithConcreteType(this.typeMap,this))}return this.cachedMethods}getAllMethods(){let e=this.getExtends();return e?this.getOwnMethods().concat(e.getAllMethods()):this.getOwnMethods()}getExtends(){let e=this.isGenericVariantOf.getExtends();return!this.cachedExtends&&e&&(this.cachedExtends=e.getCopyWithConcreteType(this.typeMap)),this.cachedExtends}getImplements(){return this.cachedImplements||(this.cachedImplements=this.isGenericVariantOf.getImplements().map(e=>e.getCopyWithConcreteType(this.typeMap))),this.cachedImplements}getAllImplementedInterfaces(){return this.cachedAllImplementedInterfaces||(this.cachedAllImplementedInterfaces=this.isGenericVariantOf.getAllImplementedInterfaces().map(e=>e.getCopyWithConcreteType(this.typeMap))),this.cachedAllImplementedInterfaces}canImplicitlyCastTo(e){if(e instanceof it){for(let i of e.upperBounds)if(!this.canImplicitlyCastTo(i))return!1;return e.catches&&e.catches.push(this),!0}if(!(e instanceof xe))return!1;if(e instanceof Dt||e instanceof je)return!!(e.toString()=="Object"||this.isGenericVariantOf.canExplicitlyCastTo(e));if(e instanceof Fn){let i=e;if(!this.isGenericVariantOf.canImplicitlyCastTo(i.isGenericVariantOf))return!1;let n=this.findInterfaceImplementedByMeWhichIsGenericVariantOf(i);if(n==null)return!1;for(let s of n.isGenericVariantOf.genericTypeParameters){let a=n.typeMap.get(s),l=i.typeMap.get(s);if((a==null?void 0:a.toString())!=(l==null?void 0:l.toString())&&l instanceof it)if(l.isWildcard){for(let h of l.upperBounds)if(a!=null&&a.canImplicitlyCastTo(h))return!0}else l.catches&&l.catches.push(a)}return!0}if(e instanceof Xt){let i=e;if(!this.isGenericVariantOf.canImplicitlyCastTo(i.isGenericVariantOf))return!1;let n=this.findSuperTypeOfMeWhichIsGenericVariantOf(i);if(n==null)return!1;for(let s of n.isGenericVariantOf.genericTypeParameters){let a=n.typeMap.get(s),l=i.typeMap.get(s);if((a==null?void 0:a.toString())!=(l==null?void 0:l.toString())){if(l instanceof it&&l.isWildcard){for(let h of l.upperBounds)if(a!=null&&a.canImplicitlyCastTo(h))return!0}l instanceof it&&l.catches&&l.catches.push(a)}}return!0}return!1}canExplicitlyCastTo(e){return this.canImplicitlyCastTo(e)?!0:e instanceof xe?e.canImplicitlyCastTo(this):!1}findInterfaceImplementedByMeWhichIsGenericVariantOf(e){for(let i of this.getAllImplementedInterfaces())if(i instanceof Fn){let n=i.findSuperTypeOfMeWhichIsGenericVariantOf(e);if(n!=null)return n}return null}findSuperTypeOfMeWhichIsGenericVariantOf(e){if(e.isGenericVariantOf==this.isGenericVariantOf)return this;let n=this.getExtends();return n&&n instanceof Xt?n.findSuperTypeOfMeWhichIsGenericVariantOf(e):null}}const cr=class cr{constructor(t,e,i,n){r(this,"treeViewNode");r(this,"children",[]);r(this,"oldValue");r(this,"oldLength");r(this,"isLocalVariable",!0);this.symbolTableSection=t,this.type=i,this.identifier=n,this.treeViewNode=new Zl(t.treeview,!1,"",void 0,this,e,!0),n=="this"&&this.treeViewNode.expandCollapseComponent.setState("expanded")}render(t,e){t==null?(this.setCaption(" = ","null","jo_debugger_value"),this.removeChildren()):Array.isArray(t)?this.renderArray(t,cr.quickArrayOutputMaxLength):typeof t=="object"?(t.constructor.name=="StringClass"&&this.renderStringClass(t,e),this.renderObject(t)):this.renderPrimitiveValue(t,e)}attachNodesToTreeview(){this.treeViewNode.attachAfterDetaching(),this.children.forEach(t=>t.attachNodesToTreeview())}removeChildren(){this.children.forEach(t=>t.treeViewNode.destroy()),this.children=[]}setCaption(t,e,i,n=!0,s=!1,a){s||(e=e.replaceAll("<","<"),e=e.replaceAll(">",">"));let l=this.isLocalVariable?"jo_debugger_localVariableIdentifier":"jo_debugger_fieldIdentifier";try{typeof this.oldValue<"u"&&e!=this.oldValue&&n&&(i+=" jo_debugger_pulse")}catch{}this.oldValue=e;let h="";e&&typeof e=="string"&&e.startsWith('"')&&e.endsWith('"')&&e.length>=2&&(h='"',e=e.substring(1,e.length-1));let c=`${this.identifier}${t}${h}${e}${h}`;this.treeViewNode.caption=c,a&&setTimeout(()=>{let u=this.treeViewNode.captionDiv.getElementsByClassName("jo_valueSpan")[0];y(u).addClass("jo_valueSpanEditable");let g=y(u).text(),f=function(){y(this).attr("contentEditable","false");let b=y(this).text();g!=b&&a(b)};u.onfocus=function(){window.setTimeout(function(){var b,A;window.getSelection&&document.createRange&&(A=document.createRange(),A.selectNodeContents(u),b=window.getSelection(),b.removeAllRanges(),b.addRange(A))},1)},this.treeViewNode.onClickHandler=()=>{y(u).attr("contentEditable","true"),u.focus()},y(u).on("blur",f).on("keydown",function(b){switch(b.key){case"Enter":f.call(this),b.preventDefault();break;case"Escape":y(this).attr("contentEditable","false"),y(this).text(g);break}})},10)}renderStringClass(t,e){let i=t==null?"null":`"${t.value}"`;this.setCaption(" = ",i,"jo_debugger_value",!0,!1,n=>{if(n=="null"){e&&e(null);return}else e&&(n=""+n,n.startsWith('"')&&(n=n.substring(1)),n.endsWith('"')&&(n=n.substring(0,n.length-1)),t==null?t=new G(n):t.value=n,e(t))})}renderPrimitiveValue(t,e){typeof t=="string"?this.setCaption(" = ",`"${t}"`,"jo_debugger_value",!0,!1,i=>{e&&e(i)}):this.setCaption(" = ",""+t,"jo_debugger_value",!0,!1,i=>{if(e){if(typeof t=="boolean")e(i=="true");else if(typeof t=="number")try{let n=Number.parseFloat(i);e(n)}catch{}}}),this.removeChildren()}renderObject(t){let e=t.getType();if(e.identifier=="String"){this.setCaption(" = ",'"'+(""+t.value)+'"',"jo_debugger_value");return}if(["Double","Boolean","Integer","Float","Character"].indexOf(e.identifier)>=0){this.renderPrimitiveValue(t.value);return}let i=!1;if(e!=this.type&&(i=!0,e instanceof je&&this.type instanceof Xt&&this.type.isGenericVariantOf==e&&(i=!1)),(i||!this.type)&&(this.type=e),t.getElements){this.renderList(t);return}let n;if(t._debugOutput?n=t._debugOutput():n=Ri.renderValue(t,cr.quickArrayOutputMaxLength),this.identifier=="this"){n="";let s=this.treeViewNode.getMainDiv().style;s.borderBottomStyle="dashed",s.borderBottomColor="#808080",s.borderBottomWidth="1px"}if(this.treeViewNode.iconClass="img_debugger-object",this.setCaption(": "+this.type.toString()," "+n,"jo_debugger_value"),i||this.children.length==0){this.removeChildren();let s=e.getOwnAndInheritedFields().filter(a=>!a.hiddenWhenDebugging);this.treeViewNode.isFolder=s.length>0,this.treeViewNode.removeAllExpandListeners(),this.treeViewNode.addExpandListener(a=>{if(a!="collapsed"){for(let l of s){let h=new Of(this.symbolTableSection,this,l);this.children.push(h)}this.children.forEach(l=>l.fetchValueFromObjectAndRender(t))}},!0),this.treeViewNode.expandCollapseComponent.setState(this.identifier=="this"?"expanded":"collapsed")}this.children.forEach(s=>s.fetchValueFromObjectAndRender(t))}renderList(t){this.setCaption(": ",this.type.toString()+"-"+hi.object(),"jo_debugger_type");let e=t.getElements();if(e.length!=this.oldLength){this.removeChildren(),this.oldLength=e.length;for(let i=0;i0}this.children.forEach(i=>i.fetchValueFromArrayAndRender(e))}renderArray(t,e){if(t==null||!this.type)return;this.treeViewNode.isFolder=t.length>0,typeof this.oldLength>"u"&&this.treeViewNode.expandCollapseComponent.setState("collapsed");let i=this.type.getElementType();for(this.setCaption(": "+i.toString()+"["+t.length+"] ",Ri.quickArrayOutput(t,cr.quickArrayOutputMaxLength,this.oldValue,"jo_debugger_pulse"),"jo_debugger_value",!1,!0),t.length<1e4&&(this.oldValue=t.slice());(this.children.length||0)>t.length;)this.children.pop().treeViewNode.destroy();if(t.length!=this.oldLength||this.children.length==0){let n=()=>{if(t.length>cr.MAXARRAYSECTIONLENGTH){let s=this.getSubintervalLength(t.length);for(let a=0;as.fetchValueFromArrayAndRender(t))};this.treeViewNode.expandCollapseComponent.state=="expanded"?n():(this.treeViewNode.removeAllExpandListeners(),this.treeViewNode.addExpandListener(s=>{n()}))}else this.children.forEach(n=>n.fetchValueFromArrayAndRender(t))}getSubintervalLength(t){let e=Math.trunc(Math.log10(t));return Math.max(Math.trunc(Math.pow(10,e-2)),100)}};r(cr,"MAXCHILDREN",30),r(cr,"MAXARRAYSECTIONLENGTH",100),r(cr,"quickArrayOutputMaxLength",100);let zr=cr;class Pf extends zr{constructor(t,e){super(t,void 0,e.getType(),e.identifier),this.symbol=e,this.symbol instanceof nh||(this.treeViewNode.getMainDiv().style.display="none")}fetchValueFromStackAndRender(t,e,i){let n=!0,s=this.symbol.identifierRange;if((s.endLineNumber{t[e+this.symbol.stackframePosition]=l})}}}class Bf extends zr{constructor(t,e){super(t,void 0,e.getType(),e.identifier),this.field=e}fetchValueAndRender(t,e){let i=!0,n=this.field.identifierRange;if((n.endLineNumber{s[this.field.getInternalName()]=l})}}}class Of extends zr{constructor(t,e,i){super(t,e,i.getType(),i.identifier),this.field=i,this.isLocalVariable=!1}fetchValueFromObjectAndRender(t){let e,i=this.field.getFieldIndentifier();this.field.isStatic()?(e=t.getType().runtimeClass[i],this.render(e,n=>{t.getType().runtimeClass[i]=n})):(e=t[i],this.render(e,n=>{t[i]=n}))}}class Ap extends zr{constructor(t,e,i,n){super(t,e,n,e.identifier+'['+i+"]"),this.index=i}fetchValueFromArrayAndRender(t){let e=t[this.index];this.render(e,i=>{t[this.index]=i})}}class cm extends zr{constructor(t,e,i,n,s){super(t,e,s,e.identifier),this.indexFrom=i,this.indexTo=n,this.setCaption("","["+this.indexFrom+" ... "+this.indexTo+"]","jo_debugger_index")}fetchValueFromArrayAndRender(t){this.treeViewNode.isFolder=!0,typeof this.oldLength>"u"&&(this.treeViewNode.expandCollapseComponent.setState("collapsed"),this.treeViewNode.removeAllExpandListeners(),this.oldLength=this.indexTo-this.indexFrom+1,this.treeViewNode.addExpandListener(e=>{if(this.oldLength>zr.MAXARRAYSECTIONLENGTH){let i=this.getSubintervalLength(this.oldLength);for(let n=this.indexFrom;n<=this.indexTo;n+=i)this.children.push(new cm(this.symbolTableSection,this,n,Math.min(n+i-1,this.indexTo),this.type))}else for(let i=this.indexFrom||0;i<=this.indexTo;i++)this.children.push(new Ap(this.symbolTableSection,this,i,this.type));this.children.forEach(i=>i.fetchValueFromArrayAndRender(t))},!0),this.children.forEach(e=>e.fetchValueFromArrayAndRender(t))),(t.length!=this.oldLength||this.children.length==0)&&this.treeViewNode.expandCollapseComponent.state=="expanded";for(let e of this.children)e.fetchValueFromArrayAndRender(t)}}class Vf extends zr{constructor(t,e,i){super(t,e,void 0,e.identifier+'['+i+"]"),this.index=i}fetchValueFromArrayAndRender(t){let e=t[this.index];this.render(e,i=>{t[this.index]=i})}}class Vm{constructor(t,e,i){r(this,"children",[]);r(this,"staticFieldChildren",[]);this.treeview=t,this.symbolTable=e,this.debugger1=i,this.reReadSymbolTable()}reReadSymbolTable(){var n,s;let t=this.children.slice();this.children=[];let e=0,i=this.symbolTable.getSymbolsOnStackframeForDebugger();for(let a of i)if(!a.hiddenWhenDebugging){if(t.length>e){let l=t[e++];if(l.identifier==a.identifier){this.children.push(l);continue}}this.children.push(new Pf(this,a))}if(this.symbolTable instanceof rh&&((n=this.symbolTable.classContext)!=null&&n.isMainClass)&&this.symbolTable.classContext!=((s=this.symbolTable.parent)==null?void 0:s.classContext))for(let a of this.symbolTable.classContext.getFields().filter(l=>l.isStatic()&&!l.hiddenWhenDebugging))this.staticFieldChildren.push(new Bf(this,a))}renewValues(t,e,i){this.children.forEach(n=>n.fetchValueFromStackAndRender(t,e,i)),this.staticFieldChildren.forEach(n=>n.fetchValueAndRender(i,this.debugger1.main.getInterpreter()))}attachNodesToTreeview(){for(let t of this.children)t.attachNodesToTreeview();for(let t of this.staticFieldChildren)t.attachNodesToTreeview()}}class wp{constructor(t,e,i){r(this,"treeviewAccordion");r(this,"currentlyVisibleSymbolTableSections",[]);r(this,"showVariablesTreeview");r(this,"callstackTreeview");r(this,"threadsTreeview");r(this,"watchTreeview");r(this,"fileTreeview");r(this,"maxCallstackEntries",15);r(this,"lastThread");r(this,"watchSection");this.debuggerDiv=t,this.withFileTreeview=e,this.main=i,this.treeviewAccordion=new sm(t,t.parentElement.parentElement),this.initShowVariablesTreeview(),this.initWatchTreeview(),e&&this.initFileTreeview(),this.initCallstackTreeview(),this.initThreadsTreeview(),this.watchSection=new xf(this.watchTreeview,this),setTimeout(()=>{this.treeviewAccordion.onResize(!0)},100)}hide(){var t;this.debuggerDiv.style.display="none",(t=this.fileTreeview)==null||t.clear()}show(){if(this.withFileTreeview){let t=this.main.getCurrentWorkspace();if(this.fileTreeview.clear(),t){let e=t.getFiles().slice();for(let i of e)this.fileTreeview.addNode(i.isFolder,i.name,i.isFolder?void 0:Ai.filenameToFileType(i.name).iconclass,i);this.fileTreeview.sort()}}this.debuggerDiv.style.display="block"}initFileTreeview(){this.fileTreeview=new Zt(this.treeviewAccordion,{captionLine:{enabled:!0,text:hi.files()},buttonAddElements:!1,flexWeight:"1",withDeleteButtons:!1,isDragAndDropSource:!1,buttonAddFolders:!1,withSelection:!0,minHeight:50,defaultIconClass:"img_file-dark-java",comparator:(t,e)=>t.name>e.name?1:t.namet.id,parentKeyExtractor:t=>t.parent_folder_id,orderExtractor:t=>(t==null?void 0:t.sorting_order)||0,orderSetter(t,e){t.sorting_order=e},orderBy:this.main.getSettings().getValue("explorer.fileOrder")}),this.fileTreeview.nodeClickedCallback=t=>{var e,i;if(!t.isFolder){let n=this.main.getMainEditor();(e=this.main.projectExplorer.lastOpenFile)==null||e.saveViewState(n),n.updateOptions({readOnly:(i=this.main.getCurrentWorkspace())==null?void 0:i.readonly}),n.setModel(t.getMonacoModel()),t.restoreViewState(n)}}}initWatchTreeview(){this.watchTreeview=new Zt(this.treeviewAccordion,{captionLine:{enabled:!0,text:hi.watch()},flexWeight:"1",withDeleteButtons:!0,isDragAndDropSource:!1,buttonAddFolders:!1,withSelection:!1,minHeight:50,orderBy:"comparator"})}initThreadsTreeview(){this.threadsTreeview=new Zt(this.treeviewAccordion,{captionLine:{enabled:!0,text:hi.threads()},flexWeight:"1",withDeleteButtons:!1,isDragAndDropSource:!1,buttonAddFolders:!1,buttonAddElements:!1,withSelection:!0,minHeight:50,orderBy:"comparator",initialExpandCollapseState:"collapsed"})}initCallstackTreeview(){this.callstackTreeview=new Zt(this.treeviewAccordion,{captionLine:{enabled:!0,text:hi.callStack()},flexWeight:"1",withDeleteButtons:!1,isDragAndDropSource:!1,buttonAddFolders:!1,buttonAddElements:!1,withSelection:!0,minHeight:50,orderBy:"comparator",initialExpandCollapseState:"collapsed"})}initShowVariablesTreeview(){this.showVariablesTreeview=new Zt(this.treeviewAccordion,{captionLine:{enabled:!0,text:hi.variables()},flexWeight:"3",withDeleteButtons:!1,isDragAndDropSource:!1,buttonAddFolders:!1,buttonAddElements:!1,withSelection:!1,minHeight:200,orderBy:"comparator"})}showThreads(t){let e=t.getCurrentThread();this.threadsTreeview.clear();let i=t.getAllThreads();i.length==0&&this.lastThread&&(i=[this.lastThread]);for(let n of i){let s=n.name,a="img_thread-"+B[n.state],l=this.threadsTreeview.addNode(!1,s,a,n,void 0);l.setTooltip(s+"("+B[n.state]+")"),n==e&&l.setSelected(!0),l.onClickHandler=h=>{if(!h)return;this.showCallstack(h),this.showVariablesOfProgramState(h);let c=this.callstackTreeview.nodes[0];c&&c.select()}}}showCurrentThreadState(){var n;let t=this.main.getRepl(),e=this.main.getInterpreter().scheduler.getCurrentThread();if((n=e==null?void 0:e.currentProgramState)!=null&&n.program&&!e.currentProgramState.program.isReplProgram||t.state!="standalone"){this.showThreadState(this.main.getInterpreter().scheduler.getCurrentThread());return}let i=this.main.getRepl().standaloneThread;this.showVariablesOfStandaloneRepl(i,t.standaloneSymbolTable),this.showCallstack(i),this.showThreads(i.scheduler),this.watchSection.update(i.scheduler.interpreter)}showThreadState(t){t||this.lastThread&&(t=this.lastThread),this.lastThread=t,t&&(this.showVariablesOfProgramState(t),this.showCallstack(t),this.showThreads(t.scheduler),this.watchSection.update(t.scheduler.interpreter))}showCallstack(t){this.callstackTreeview.clear();let e=t.programStack;if(e.length==0)return;let i=Math.min(e.length,this.maxCallstackEntries);for(let n=e.length-1;n>=e.length-i;n--){let s=e[n],a=new Ph(s),l=this.callstackTreeview.addNode(!1,a.getCaption(),void 0,a,void 0);l.onClickHandler=h=>{this.showVariablesOfProgramState(t,h==null?void 0:h.programState),this.showCallstackPositionInsideProgram(t,h)},n==e.length-1&&l.setSelected(!0)}i=0&&(n=ee.getStartPosition(s)),this.showVariablesTreeview.detachAllNodes();for(let a of this.currentlyVisibleSymbolTableSections)a.attachNodesToTreeview(),a.renewValues(t.s,0,n)}showVariablesOfProgramState(t,e){var u;if(e||t.programStack.length>0&&(e=t.programStack[t.programStack.length-1]),!e){this.showVariablesTreeview.clear(),this.currentlyVisibleSymbolTableSections=[];return}let i=new Ph(e);if(!i.symbolTable)return;let n=[],s=i.symbolTable;for(;s;)s.hiddenWhenDebugging||n.unshift(s),s=s.parent;let a=[],l=!1;for(let g=0;gn.length||f.symbolTable!=n[g]||l?l=!0:a.push(f)}for(;a.length=0&&(h=ee.getStartPosition(c)),this.showVariablesTreeview.detachAllNodes();for(let g of this.currentlyVisibleSymbolTableSections)g.attachNodesToTreeview(),g.renewValues(t.s,e.stackBase,h)}}const Lf=""+new URL("assets/nearby_explosion-CBRHJi0z.mp3",import.meta.url).href,Ff=""+new URL("assets/nearby_explosion-CBRHJi0z.mp3",import.meta.url).href,_f=""+new URL("assets/far_bomb-BLxJuQK3.mp3",import.meta.url).href,zf=""+new URL("assets/cannon_boom-CSFCP929.mp3",import.meta.url).href,qf=""+new URL("assets/far_explosion-DsmCe43l.mp3",import.meta.url).href,Wf="data:audio/mpeg;base64,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FVqGAoxgMzHq2//9//uQxP8AEiDbVZW1gAwbM2t/N4AAIVGYvumEl6YfLxmUFGfG+ZmXJmAVf//8ASR7muujDg8CjAYSGQGShhrpd7///+H3KdF/JbD0AggNhYBpYgEFAkEJhsE////+OwLLoaj8OP7HpWymDFs5u6X2Wk87Df/////84diU1PzkMzEvl0pYC/kbcKCVFolAylLSYE///////5JhFqsppKOGq8osxqS53nKZVDcARmJLAwDCWBNKi7+tJiH//////////5d5vW+4/rvP/////////2w9jK8olImAtJhyffaStiVMQU1FMy45OVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjk5VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//twxPkAJhHrkfnuPgAAADSDgAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuOTlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjk5VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7EMTWA8AAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sQxNYDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+xDE1gPAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7EMTWA8AAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sQxNYDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUQUczNDQzMTBfX211c2ljbGVnZW5kc19fbGFzZXItc2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATg==",Nf=""+new URL("assets/short_bell-Bb-qOKg0.mp3",import.meta.url).href,Rf=""+new URL("assets/flamethrower-BXqNKyZC.mp3",import.meta.url).href,Gf=""+new URL("assets/digging-DcKxpXZS.mp3",import.meta.url).href,Kf=""+new URL("assets/short_digging-fTvW-CdM.mp3",import.meta.url).href,Hf="data:audio/mpeg;base64,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",Uf="data:audio/mpeg;base64,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tuy7scASQkAoEY2WJaai6tSP/pSkKCkNCQdnTpF3Zc5vt2G31WsVtay/rVVTVVVOr762yMFsnxm580RT0TqNHMYhi5MSnXuWZn7R2r7LC+zb1X157bVZu7U1bSkBbcUxX7rUQab5qT15NBFo7/bliyNIzE2XBG8PWHNHgoNrKoa1sNILVE80GHbFXSuYONBFf0R2ghexn18nVmAAAACh/ZGHCl8Rmf/iifV6/eh/Z/IX/5/X//7dP1bvLtMzEzUS/+jiaVXnCANYZnVYoyHx4cxDQcALKK4gLwkNC8cuJPO3mKMlVevYX7CSnefJns49cJyR6mNo4xqjnJ/cVFR6r14X1Fo457nOSIukd1KFBez0isk3Q1siiwULQx6fbe26mfzhO/Vbe/7///0qKZmYiXdvZEiSkJT6g7xMxAOhgqmtJdLQRkPBGJykdw8BcglI5PjVWsb4UocisrrQVtMAqvH+wuC46WxZiaM4c01LecbNbc/mna4eEgMVBkSDn88dOuiYFiK90CrYOJC1+jrmen0fat3NVNTM6/WxKGEjghsg8gRcu43d9ntaAu9ljRX0iLvQc959K2kCMgOjUXLjB5RtZFw8o7FnlF5CTPNZ3RJdZHNdt//7gGT8gAJ7G1D7BhwobaipnzDDx0Q8AzHsgAAhwhol/MMLHQlRu+cZ4p6+biwmchJ2apsjmxbPRvOqqrc1kWJeSkU543cjZ6n3q9P/q3sloA44AAHASkAExI9wgkIzLvrb5p93////////xZjvoCtlrkoAlAAm3AKMI2BxhQCKB40PFf8WEZnb////ijdf+LMd+Ki2sU/xfqZVTEFNRTMuOTlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//twRPkAAzUsSnsMMkhsJ3l/YSZ1BEQPIaYkIGCpAiP0kQhEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRBR3Nob290X3Nob3J0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABO",Qf="data:audio/mpeg;base64,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",Yf="data:audio/mpeg;base64,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",Zf="data:audio/wav;base64,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xgDnAAsBtAC6APQA3ACzANMAzADwAM8ArgDlAO4AEAHlANMA5wDgAAYB7AAGAeUA4gALAesA7gArAfQAygCcAPIAGAH9APgAGQHgAH4AuwDJANEA3ACyAOUA6QD4AMQAvwDkANEA1gDEAJkAsADWAOQA+wAIAQoB/wDNALoA6ADjAMYA7QD2ANYA6ADaANsA9gD1AA0B2gDWAPoA4wDNANUA8QDPAL8AjwCPALoAuACrAKoAzwDfAMwA6wDjAK4AoQCuALMArgC8ALwAoQDEAPAAwACdAMEAwwDKAIEArgC4AI4AqgDOAOQA0wD0ANsA8gCyAOkA4ADTANcA4ADAAKkAjgDXAK0A4ACkAKQArgCpALYAsgCVAIcA6ACkAJkAfwB5ANEAlQB6ANEArQCtAIMAogC6AN8AtgDEALoApwDGAMgApwCUAKIA4wDRAN4AqwB9ALQA1QDVAJQAugCwAK8AfACYAMwAvQChAIEAhgCLALQA7AC9ANUAjwCPAKYAvADGAKAAwQChALgA0wCXAM4ArwCuAGgAhQCIALMA1QCuAMoAqgDKAOkAxADJAIMAdQBtAIgApQCkAJcArQCXAKQAqQCeAKAAoACRAJ4AogCpAO0A3wDtANYApACwALQA0gDAAJAAvwC7AJ4AggCiAHkAjwCCAHQAlACHAL0AfQCLAMgAugCHAIYAugB5ALgAkACrAMMAqwDMANkA0wCZAKIAmACqAKoAnQCdAKEAygChALgA+QDMAMEAswDPAMUAwQClAMUACwGXAK4AyQC7ANcA0wCqAIUAqQDJAKoAmwDlAPQAygDEAM4A0gDNAL8AxADOAKQAkQCOAG0AwABwAJAAjACQAK0AdQCDAIMAoACDAHAAlACZAIsAlQCvALAAxACeAJQAyADxAK0ArQDxAJQArwCrAMMAnQCUAMYAiwCwALoAggChAIsAqwCTAG8AgQCPALgArwDGAK4ArwDGAKYAqwCYALQArwCBAKEAzgCPAHwAgQBvAKoAeACFAGAAWwCFAKcAaABEAF8AXwBEAFcAhQCBAKEATQByAGQAbQB8AG0AkwBfAIsAfADMAOIAnADKAG0AaQCPAGQAcQCgAJcAUgCFAKQAfwCIAJMAoACuAJwAsgCMAHIAdgB1AGQAkQCIAIMAqQCTAIcAswCDAG0AegCpAJwAegCMAIMAVQBVAHoAxAC8AH8AhwBnAJEAiAB6AJkAlwCyANEArQBjAIYAngBZAIIAmwBBAFAAKgBeAHkAVQBMAGcApwBnADgARQCZAHAAZwBQAFUAWQA+AH4AYwCMAGsAOABHAGcAXgBQAFkAUwBKAHAAeQBZAHAAkABnAF0AgQBmAFMAYgA8AGYAYgCkAGIAZgBmAGYApgCZAIoAlACYAFIAawBmACUARQBdAD8AVwBOAIYAeABkAFsAZwCLACQALgB4AFcAZAByAG0ANgBgAHIAeAB9AFMAYABmAHIAhgB8AKEAtwC9AK8ArwCqAK4AhQBtAE0AaACFAFsAQwBHAE0ATABfAG0ATQBtAGMAkQBIAGMAgwA2AGgAgwB/AEQANgBZACUAWQBRAEgAKABKAH4AVQBfAGcAWQBeAFUAfwCLAF4AUACbAGsAdQBnAEwAUABQAEoAPgBiAJUAhwBiAHkAdQCHAFAAGAA3AFkAMwBBAE4AiACHAGcASgAqAFUAYgBOAFUAXgBnAE4AVQBiAC4AKwBTADgAOABdABwAMwAlABwASgBQAF4AdAB+AGcAYgBdAHUAawA4AFkASgBiAEoARQB9AHQAfQBnAFkAbwB0AGIAKQBSAHQAbwBbAEUAfgBXAGcAVwBSAJwAawBtAGYAXQCdAGsAUgBvAGkAPABAAIEAbwBNAF0AUgBmAIEAYAB9AGAAXwB0AHgAcgBJAE4APwBmAFIANgByAD8AUgB8AHwAbQCFAIEAcgB8AGkAYwBjAJsAegBoADsAcgBoAFcARABWAF8AdgBtAHYAcQCBAEMATQCOAEgAngBVAGcAVgBoAJcAWQB1AGgAPgBMAF8AbABfAD8AVgBHAHoATABIAIMAQwBaAF4AawBfADYAkQBIAFAAdQBHAJsAWQCHAGwAlQBsAFkAgwBZAHkAawAzADsAMwBTAB0A6/8TAB8AKQAlAEAAFwDl//3/xf/p/3NtcGw8AAAAAAAAAAAAAACTWAAAPAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAVQgAAAAAAAAAAAAA",Xf="data:audio/wav;base64,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HfTO733qSOqt7qryIfJm7m/sk+4N8kfzLfEK71jv0/HP8xnzefGo8DXyQPSE9IfzcPJL88z05PVr9UD0ZvSM9aL2pvYd9tL1k/ZC98j3qvdi99P3gvgn+UP5Evkg+WT5TPq0+q/6p/re+8P+GwM3B0YJgghJBpcEtwTfBbAG8QWZBPkDJASDBEAEqwMLA/0C9AL9ArkCIALsAeMB1wE+AUcBYgE0AUsBDQFCAVMBPQFrAW8BXAFcAScBQQFPAUYBQQFGAZABdgFuAXYBTQFSAV8BSgFnATwBKAGIAUMBNwFaATcBOwFHAVIBXwE7AT4BcgEyAVEBIwEVATYBPgGFAZgBWgFVAWEBIwESAWUBQgFlAU8BNAFGAUEBSwFCAWoBYQFbAR4BPAFLAW4BRQFNAUEBKQFAATcBcQGPAUgBQAGNAUABMQE+AV0BLAEsATsBXQFMATsBQgFwAVABHwE7AQkBPQFlAWEBTAEsAUMBEAEsAS8BRwF8AUcBaQE9AT0BOAE4AYQBewFPATIBNwFKAU0BWwFIAS8BQAGGAYYBYgFnAXEBSAEjAVYBawFAAS0BSAFVAUwBQgE2AU0BUwEjASQBGgESARUBCAHbAOkADQEjAfYA5AD7AA0BGgEeARIBKwEdARUB9QD5AOgA9QAHARkBHQH+AC4BPAHfAOgA2gDHANYAAgEHAeMA9AD5ABgBGAEdAUABNgE7ASkBGgHmAAUBMgETAQoB2QAtASEB5gDGAL0A5gC1AMIA5QDpAMoA0gD2AMYA/wDfAMEA8wDcANcA7gD6ABIBJwEtARUBEAHUANsA9QDsABABHgEQAfEA9QBuASkBDAEdAfAA7ADEAOMA6QD/AN8A0QChAKkAqADHABMBvwDNALsArQD9AOEAsQDQAOsA4QDoAOMAywDAAPMA1QCWAOYA0ADhANQAywDPAMsACQHhABcB7wDLAO4A1AASARcB8QDbABcB5QCsAM0A4AC1AL0ABwHcAO4A0gC8AJ4AzwChAIcAjACMAMoAzQDpANYAnQCdANsA+gDKAOQA7ADEALwAqQC7ANIA2wC/AL8AzQCOALIAzQCtALIApQClAJMAxwClAH0AtgCtALEAxwCjAKUA1QC7AIgAkwDJAMQA0ADRAMsA4QDqAMcAsQAOAcsAmQDlAOsADgHKAMIAowDKALUAxgCwALgAxgDhAOUA6gAeAcEA2wDoAL0AzwDJAN8AqwDSALcAzwDoAMkArgCpAKkA1gCgAKAA0gCyAMkAswDNAOQAoQDQANoA6wDEAMkAxADMAN4A6wC6ALsAuwCbANAA6gDEAMsA0AC/ALIAywDHALEAtQCyAMIA4QCjAIwAmwC1AL0AlACsAKcAxgDUAKsAzwDLALwAvwBtAH4AwQCRAIwAfwCZAJ4ApwCWAHoAzwCZAGgApwCRAMUAwQDpALwAzQCuALIAvADpAMUAvwDJAKkAwQDMAJwA6QCdAJwA5AC/AK0ArgCyALcA2gD1ANkAuwAKAfUA0QDMAKAAlwCgAK0ArQCxALUAuwC2ALYAxgCnAIgAmwCnAMIA0ACoAJkArQC1ALEAlgCSAKwAlgDHAKMAlgCgAKwAsACsALEAmQCeANwArACDALgA1wDWAJQAogCzAKwApgChAMsAlACiALwAnQCZAIgAxQDNANIAyQDGAOUAtwDFABAB9gDxAPUA0gCuANsA0gDNANYAxQDaAPUA0QDEANsA1gCsAMkA2gDJAPAAsgC/ALsAuwCxAIkAvAC2AIQAoACXAJwAoACXAKgAvwCGAJsAfwCbAMQAnACNAIkAiQC6AMcAzACeAMQA3AC/AKwAqACbAJ4AsQCWAKAAeACWAJ4AowC9AKsAzwCNANQAkQCjALgAtgDjALEA0ACwAKwAxgC6AJQAcgCMAKgAtQCiAJkAngCWAKcAvQCzALMAkQCrAKsAxgDKAMoA1AC8AM0A+gDgAKsApgC9ANwA5ADuAOAA1wD/AP8AzwDaANIAvACmAKkAoADNALwA3wDpAMkA9QDJAMAAqQCYAMQAwADVAKUAtwCtAMwA8ADUALIAnADRAJsAuwDQAMsAsgC6AKcAgQCgAKwAowCsAMIAkgB6ALUA1QCIAKMAsQCRAKcAvQCiALUAxgC4ALoAwgCwAI8A1ACZAIgAsACRAJEAdQCPAKcAuACZALgAxQDKAO4AjADBANcAzwAIAYoAcACYAFYAqwDFAMoAzQCzAJMAkwCKAJgAqQDPAMUArQChAFQArgC3AIoAmACKAIIAkwCGAIIAvwCBAIQAzQCYAKAAmwCGAKAAJwCYAMwAgQCSAKMAlgCOAL8AkwClAKAAmwDHAJsAxACoAKMAowC7ANQArACXAIMApwCjAJsAfwB8AHIAugCwAIgAzwCZAIMArACIAJEAngCdAJQAogC8AIgAogC1AKIAfwDKAMoAwQC4AKYAvADRALgAswC3AMAAwADFAMwAvADJAKEAgQB8AK0AxQCHAKEAzQDRAK0AtgCbAK0AtgC2AN4AvwCTAI0AsQDCANEAlwByAMcAxADMANAAuwDZALoAfwCSAKMAhgDPAMsAsAC6AKIAvQCoAH8AgwCbAKMAxgDjANQAvQC9AKgAiQCUAJ0AmQC1ALgAngCmAKIAugCzALgApwB6AKsAvACdAJ0AmACdAIoArgCuAMEAnQCpAKsAUQCgAMEAswC3AJgAqQB5AKEAnACPAMkAuwDVAIkAjgCOAH8AoQCBAIYAmwCBAK0ArgCXAJcAwAC9AI4AoADMAIoAkwDMANUArQC6ANcA0QDcAMIAiABuALUAsACMAL0ApwDLAJEAggDBAJ0AmQB1AG0AfgCNAJQAvQCmAMUAxQDFAMAA7ADbAKIAGQHAALcAnQBrAKkAqQDRALsAyQCpALYAkwCSALYArQClAIkAiQB8AI4ApQCcALsApQCIAIYAoQDcALUAxwDLAJ4AiACSAIQAqACeAG0AwgC6AMsAjQCbAM8ApgDHAHkAtQCzAJYApgCUAJ4AqwCUAIIAhwCrAJwAoQCZAJMAmAB+AKAAmACmAI8AdQChAKEAmADAAKkApQDjAN4ApgCcAMIArQDHAMAAxACoAJcAqACGAI4AjQCSAMcAuwDGAJYAlwCJAF0AmQCjANkAxgDHANQAuAC6AKwAegCeANQAsACnAKIAlAC1AM0AlAB1AHkAfgCUALMAaABjAHAAjwCGAIoAjwBjAJMAfgBMAF4AkwCOAIEAlwB0AHgAggB9AGYAbgCGALcAuwCgAJcAlwCXAKkAjQCgAI0AowCJAIkAvwCWAKgAmQByAMsAxADcAAQBqACWAIMAbQCwAI0AowC9AHoAogB/AJYAswDNALgAlACeAM8AtQCdAIoAfgChAKkApgDAALIAqQDAAIoAuwChAIYAoQCGAJgApQCcAHMAfQBvAJcAqACbAJcAjgCEAFQAZgCIAKwAcwBzAKMAjgBqAGAAPgBYAG8AWQBtAG4AoABlAGkAkQCbAHwAZACMAG0AagB/AJEAhwCDAGkAcgBOAFUAmABkAJEAnQCHAJQAVgCIAHkAmAB9AHIAZABaAHUAXwBwAJkAfQB1AFoAaABmAHoAeQCHAHAAVQBrAI4AhwCBAHQAYgCPAHQAWgClAKEAWQBvAIQAqACjAGoAmwB8AF0AiQCGAGoApQDZALUAxwCyAJsAogCxALYAvQCeAJEAogCzAHIAdwBpAJ4A4QC3AKIAZACzAI0AnQBkAGQAswCCAIoAmADAAKEAqQCMAF4AfQCKAJMAggCOAN8AoACcAKEAdACCAK0AnACGAIkAagB9AI4ApQCoAIIAZQBVAGAAaQCSAIEAgQClAJIAcgBKAGoAugCNAH8AoABzAHIAaQCDAG4AYABOAE4ARQBgAE4ANABgAJYAZABwAHoAmQBtAHIAWABdAH8AXwBMAEkAXwBWAHUAlABbAFYAcAAqAGMAbwBwAH4AYwBWAC0AMgAxACUATABOABwAMQBMAFoARAAyADsAOwAoABYALAAoAFUAUQBRAH0AYgBVADYAdAB+ADEAWABrAJMAQwBUAKEARABgAG8AdACBAFQAPgAoADYAbwBGAFQANQBmACcAFgBgAEYAQwBYAEsAYABgAEcA6P8XANH/yf9zbXBsPAAAAAAAAAAAAAAAk1gAADwAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAHcJAAAAAAAAAAAAAA==",Jt=class Jt{static init(){if(!Jt.isInitialized){Jt.isInitialized=!0;for(let t of Jt.sounds)t.player=new _g.Howl({src:[t.url],preload:!0}),Jt.soundMap.set(t.name,t)}}static play(t){let e=Jt.soundMap.get(t);e&&e.player.play()}static startDetectingVolume(){Jt.volumeDetectionRunning||(Jt.volumeDetectionRunning=!0,console.log("starting..."),navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia,navigator.getUserMedia?navigator.getUserMedia({audio:!0},function(t){let e=new AudioContext,i=e.createAnalyser(),n=e.createMediaStreamSource(t);i.smoothingTimeConstant=.8,i.fftSize=1024,n.connect(i),Jt.getVolume=()=>{if(!Jt.volumeDetectionRunning)return 0;var s=new Float32Array(i.frequencyBinCount);i.getFloatTimeDomainData(s);let a=0;for(let l=0;l-1),r(Jt,"isInitialized",!1),r(Jt,"volumeDetectionRunning",!1);let Br=Jt;class kp{constructor(t){r(this,"actions",{});r(this,"keyEntries",{});r(this,"buttons",{});r(this,"editorContextKeys",new Map);this.$mainElement=t}init(){let t=this.$mainElement;t||(t=y(document));let e=this;t.on("keydown",function(i){i!=null&&e.executeKeyDownEvent(i)})}trigger(t){let e=this.actions[t];e!=null&&e.actionListeners.forEach(i=>i(t,void 0,""))}registerActionListener(t,e){let i=this.actions[t];if(!i){console.trace("ActionManager.registerActionListener: ActionEntry "+t+" not registered yet.");return}i.actionListeners.push(e)}registerAction(t,e,i="",n){let s={actionListeners:[],identifier:t,keys:e,text:i,active:!0};this.actions[t]=s;for(let l of e)this.keyEntries[l.toLowerCase()]==null&&(this.keyEntries[l.toLowerCase()]=[]),this.keyEntries[l.toLowerCase()].push(s);let a=this.buttons[t];if(a!=null)for(let l of a)this.setButtonTitle(l,s);n&&this.registerActionListener(t,n)}registerButton(t,e){this.buttons[t]==null&&(this.buttons[t]=[]),this.buttons[t].push(e);let i=this.actions[t];i&&this.setButtonTitle(e,i);let n=window.PointerEvent?"pointer":"mouse";e.on(n+"down",()=>{let s=this.actions[t];s&&(s.active&&s.actionListeners.forEach(a=>a(t,void 0,"mousedown")),t=="interpreter.start"&&Br.init())})}setButtonTitle(t,e){let i=e.text;i||(i=""),e.keys.length>0&&(i+=" ["+e.keys.join(", ")+"]"),t.attr("title",i)}isActive(t){let e=this.actions[t];return e==null?!1:e.active}setActive(t,e){let i=this.actions[t];i!=null&&(i.active=e);let n=this.buttons[t];if(n!=null)for(let s of n)e?s.addClass("jo_active"):s.removeClass("jo_active")}executeKeyDownEvent(t){var n;if(((n=document.activeElement)==null?void 0:n.tagName.toLowerCase())=="input"||t.keyCode<=18&&t.keyCode>=16)return;let e="";t.ctrlKey&&(e+="ctrl+"),t.shiftKey&&(e+="shift+"),t.altKey&&(e+="alt+"),t.key!=null&&(e+=t.key.toLowerCase());let i=this.keyEntries[e];if(i!=null){for(let s of i)if(s.active){t.stopPropagation(),t.preventDefault(),s.actionListeners.forEach(a=>a(s.identifier,void 0,e));break}}}hideButtons(t){let e=this.buttons[t];e&&e.forEach(i=>i.hide())}showHideButtons(t,e){let i=this.buttons[t];i&&i.forEach(n=>{e?n.show():n.hide()})}registerEditorContextKey(t,e){this.editorContextKeys.set(t,e)}setEditorContext(t,e){var i;(i=this.editorContextKeys.get(t))==null||i.set(e)}}class Cp{constructor(t,e){r(this,"pixiSpritesheetData");r(this,"pngImageData");r(this,"pixiUserSpritesheet");r(this,"graphicSystems",[]);r(this,"interpreter");this.graphicsDiv=t,this.coordinatesDiv=e}registerGraphicSystem(t){this.graphicSystems.push(t)}setInterpreter(t){this.interpreter=t,t.eventManager.on("resetRuntime",()=>{this.graphicSystems=[],this.graphicsDiv.style.height="0px"})}setUserData(t,e){this.pixiSpritesheetData=t,this.pngImageData=e,this.pixiUserSpritesheet&&(this.pixiUserSpritesheet.destroy(),this.pixiUserSpritesheet=void 0)}async initPixiUserSpritesheet(){if(!this.pixiUserSpritesheet&&this.pixiSpritesheetData&&this.pngImageData){let t=Jm.from(new ep({resource:this.pngImageData,width:this.pixiSpritesheetData.meta.size.w,height:this.pixiSpritesheetData.meta.size.h,alphaMode:"no-premultiply-alpha"}));this.pixiUserSpritesheet=new tp(t,this.pixiSpritesheetData),await this.pixiUserSpritesheet.parse()}return this.pixiUserSpritesheet}resizeGraphicsDivHeight(){let t=this.graphicsDiv.getElementsByTagName("canvas"),e=0;for(let i=0;ie&&(e=s)}this.graphicsDiv.style.height=e+"px"}shrinkGraphicsDiv(){this.graphicsDiv.style.height="0px"}}const wh=["act","actWithTime","keyPressed","keyUp","keyDown"];var xn;let bt=(xn=class{},r(xn,"ArrayLengthNegative",()=>d({de:"Negative Array-Längen sind nicht möglich.",en:"Negative array length is not feasible."})),r(xn,"SystemException",()=>d({de:"Interner Fehler: ",en:"System exception: "})),r(xn,"NullPointerException",()=>d({de:"Auf ein Attribut/eine Methode von null kann nicht zugegriffen werden.",en:"Can't access field/method of null."})),r(xn,"ClassCastException",(t,e)=>d({de:`Ein Objekt der Klasse ${t} ist kein Objekt der Klasse ${e} und kann daher nicht in diesen Typ gecastet werden.`,en:`An object of class ${t} is no object of class ${e}, therefore casting ist not possible.`})),r(xn,"CastToArrayException",t=>d({de:`Ein Objekt der Klasse ${t} ist kein Array und kann daher nicht in einen Array-Typ gecastet werden.`,en:`An object of class ${t} is no array, therefore casting to an array type is not possible.`})),r(xn,"SimpleArrayIndexOutOfBoundsException",()=>d({de:"Zugriff auf ein Element außerhalb des Arrays (d.h. index < 0 oder >= Anzahl der Elemente)",en:"The index is out of bounds of this array."})),r(xn,"ArrayIndexOutOfBoundsException",(t,e,i)=>d({de:`Der Index ${t}${i>1?" ("+i+". Dimension)":""} liegt außerhalb der Grenzen des Arrays. Mögliche Werte für den Index sind 0 ... ${e-1}.`,en:`Index ${t}${i>1?" (dimension "+i+")":""} is out of bounds of this array. Possible values for this index are 0 ... ${e-1}.`})),r(xn,"MethodOfDestroyedGraphicObjectCalled",()=>d({de:"Es wurde eine Methode eines schon mittels destroy() zerstörten Grafikobjekts aufgerufen.",en:"A method of an already destroyed graphical object has been called."})),r(xn,"ExecutionTime",()=>d({de:"Ausführungszeit",en:"Execution time"})),xn);const Tn=class Tn extends z{constructor(e,i){super();r(this,"stacktrace",[]);r(this,"range");r(this,"file");r(this,"thread");this.message=e,this.cause=i,this.message=this.message||""}getThread(){return this.thread}getFile(){return this.file}getIdentifier(){return this.getClassName()}getExtendedImplementedIdentifiers(){return Tn.type.getExtendedImplementedIdentifiers()}getMessage(){return this.message||""}_constructor_m(e){return this.message=e.value,this}_constructor_c(e){return this.cause=e,this}_constructor_m_c(e,i){return this.message=e.value,this.cause=i,this}_toString(){return new G(this.getClassName()+": "+this.message?this.message:"")}_getMessage(){return new G(this.message?this.message:"")}};r(Tn,"__javaDeclarations",[{type:"declaration",signature:"class Throwable extends Object"},{type:"method",signature:"public Throwable()",native:Tn.prototype._constructor},{type:"method",signature:"public Throwable(String message)",native:Tn.prototype._constructor_m},{type:"method",signature:"public Throwable(Throwable cause)",native:Tn.prototype._constructor_c},{type:"method",signature:"public Throwable(String message, Throwable cause)",native:Tn.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:Tn.prototype._toString},{type:"method",signature:"public String getMessage()",native:Tn.prototype._getMessage}]),r(Tn,"type");let Te=Tn;const xo=class xo extends Te{constructor(e,i){super();r(this,"stacktrace",[]);this.cause=i}};r(xo,"__javaDeclarations",[{type:"declaration",signature:"class Exception extends Throwable"},{type:"method",signature:"public Exception()",native:xo.prototype._constructor},{type:"method",signature:"public Exception(String message)",native:Te.prototype._constructor_m},{type:"method",signature:"public Exception(Throwable cause)",native:Te.prototype._constructor_c},{type:"method",signature:"public Exception(String message, Throwable cause)",native:Te.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:Te.prototype._toString}]),r(xo,"type");let Oi=xo;class F extends Oi{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(F,"__javaDeclarations",[{type:"declaration",signature:"class RuntimeException extends Exception"},{type:"method",signature:"public RuntimeException()",native:Oi.prototype._constructor},{type:"method",signature:"public RuntimeException(String message)",native:Te.prototype._constructor_m},{type:"method",signature:"public RuntimeException(Throwable cause)",native:Te.prototype._constructor_c},{type:"method",signature:"public RuntimeException(String message, Throwable cause)",native:Te.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:Te.prototype._toString}]),r(F,"type");class Jl extends F{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(Jl,"__javaDeclarations",[{type:"declaration",signature:"class MethodOfDestroyedObjectCalledException extends RuntimeException"}]),r(Jl,"type");const Nd=class Nd{constructor(){}static getInstance(){const t={get(e,i,n){if(i=="getWorldTransform")return Ki.IDENTITY;throw new Jl(bt.MethodOfDestroyedGraphicObjectCalled())}};return new Proxy({},t)}};r(Nd,"instance",Nd.getInstance());let Bh=Nd;var Qs,ul,Oh;class Sp{constructor(t){Z(this,ul);r(this,"is30HzFrequency",!0);Z(this,Qs,null);r(this,"timerFrequency",30);r(this,"actors",{act:[],actWithTime:[],keyDown:[],keyUp:[],keyPressed:[]});r(this,"keyDownListener",(t,e,i,n)=>{this.onKeyDown(t,e,i,n)});r(this,"keyUpListener",t=>{this.onKeyUp(t)});r(this,"keyTypedListener",t=>{this.onKeyPressed(t)});r(this,"shapesToDestroySafely",[]);r(this,"runningactThread");r(this,"tickHappenedWhenThreadNotEmpty",!1);this.interpreter=t,this.clear(),this.registerKeyboardListeners(t),t.eventManager.on("stop",()=>{this.setTimerFrequency(30)})}registerKeyboardListeners(t){t.keyboardManager&&(t.keyboardManager.addKeyDownListener(this.keyDownListener),t.keyboardManager.addKeyUpListener(this.keyUpListener),t.keyboardManager.addKeyPressedListener(this.keyTypedListener))}destroy(){this.interpreter.keyboardManager&&(this.interpreter.keyboardManager.removeKeyDownListener(this.keyDownListener),this.interpreter.keyboardManager.removeKeyUpListener(this.keyUpListener),this.interpreter.keyboardManager.removeKeyPressedListener(this.keyTypedListener))}registerActor(t,e){this.actors[e].push(t)}callActMethods(t){this.is30HzFrequency&&ne(this,ul,Oh).call(this,t)}setTimerFrequency(t){if(j(this,Qs)&&(clearInterval(j(this,Qs)),J(this,Qs,null)),this.timerFrequency=t,t==30){this.is30HzFrequency=!0;return}this.is30HzFrequency=!1,J(this,Qs,setInterval(()=>{ne(this,ul,Oh).call(this,1e3/t)},1e3/t))}clear(){wh.forEach(t=>this.actors[t]=[])}unregisterActor(t){wh.forEach(e=>{let i=this.actors[e],n=i.indexOf(t);n>=0&&i.splice(n,1)})}hasActors(){for(let t of wh)if(this.actors[t].length>0)return!0;return!1}onKeyPressed(t){if(this.actors.keyPressed.length==0)return;let e=this.interpreter.scheduler.createThread("key pressed event thread");for(let i of this.actors.keyPressed)i._mj$onKeyTyped$void$String(e,void 0,new G(t));e.state=B.running}onKeyUp(t){if(this.actors.keyUp.length==0)return;let e=this.interpreter.scheduler.createThread("key up event thread");for(let i of this.actors.keyUp)i._mj$onKeyUp$void$String(e,void 0,new G(t));e.state=B.running}onKeyDown(t,e,i,n){if(this.actors.keyDown.length==0)return;let s=this.interpreter.scheduler.createThread("key down event thread");for(let a of this.actors.keyDown)a._mj$onKeyDown$void$String(s,void 0,new G(t));s.state=B.running}}Qs=new WeakMap,ul=new WeakSet,Oh=function(t){if(this.runningactThread&&[B.running,B.waiting].indexOf(this.runningactThread.state)>=0){this.tickHappenedWhenThreadNotEmpty=!0;return}if(this.shapesToDestroySafely.forEach(e=>{e.container.destroy(),e.container=Bh.instance}),this.shapesToDestroySafely=[],this.tickHappenedWhenThreadNotEmpty=!1,!(this.actors.act.length==0&&this.actors.actWithTime.length==0)){this.runningactThread=this.interpreter.scheduler.createThread("act method-thread");for(let e of this.actors.act)e.isActing&&e._mj$act$void$(this.runningactThread,void 0);for(let e of this.actors.actWithTime)e.isActing&&e._mj$act$void$double(this.runningactThread,void 0,t);this.runningactThread.programStack.length>0?(this.runningactThread.state=B.running,this.runningactThread.callbackAfterTerminated=()=>{this.tickHappenedWhenThreadNotEmpty&&this.callActMethods(t)}):(this.interpreter.scheduler.removeThread(this.runningactThread),this.runningactThread=void 0)}};class xp{constructor(){r(this,"eventTypeToCallbackMap",new Map);r(this,"callbackToEventTypeMap",new Map);r(this,"onceMap",new Map)}async waitFor(t){return new Promise((i,n)=>{this.on(t,()=>{i()})})}on(t,e,i){let n=this.eventTypeToCallbackMap.get(t);n||(n=[],this.eventTypeToCallbackMap.set(t,n)),n.push({f:e,thisArg:i}),this.callbackToEventTypeMap.set(e,t)}off(t){let e=this.callbackToEventTypeMap.get(t);if(!e)return;this.callbackToEventTypeMap.delete(t),this.onceMap.delete(t);let i=this.eventTypeToCallbackMap.get(e);if(!i)return;let n=i.findIndex(s=>s.f==t);n>=0&&i.splice(n,1),i.length==0&&this.eventTypeToCallbackMap.delete(e)}once(t,e,i){this.on(t,e,i),this.onceMap.set(e,!0)}fire(t,...e){let i=this.eventTypeToCallbackMap.get(t);if(!i)return;let n=[];for(let s of i.slice())s.f.call(s.thisArg,...e),this.onceMap.get(s.f)&&(n.push(s),this.onceMap.delete(s.f));n.forEach(s=>this.off(s.f))}}class Tp{printHtmlElement(t){throw new Error("Method not implemented.")}print(t,e,i){}flush(){}clear(){}isTestPrintManager(){return!1}}var Pn=(p=>(p[p.nothingMoreToDo=0]="nothingMoreToDo",p[p.giveMeAdditionalTime=1]="giveMeAdditionalTime",p))(Pn||{}),Q=(p=>(p[p.not_initialized=0]="not_initialized",p[p.running=1]="running",p[p.paused=2]="paused",p[p.stopped=3]="stopped",p[p.error=4]="error",p))(Q||{});class Jf{constructor(t,e){r(this,"maxLoadFactor",.8);r(this,"numberOfStepsPerBatch",1e4);r(this,"lastTickTime");this.scheduler=t,this.interpreter=e}tick(t){let e=performance.now();this.lastTickTime&&(e-this.lastTickTime>t+20&&(t=t*.8),t=Math.min(t,40)),this.lastTickTime=e;let i=0;for(;(performance.now()-e)/t2&&this.scheduler.stepCountSinceStartOfProgram>1e4&&(this.numberOfStepsPerBatch+=1e4)}}class eb{printProgram(t){if(!t)return v.missingProgram().message;let e="";for(let i=0;i" * "+i).join(` `),e+=` */ `,e}}class Uo extends F{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(Uo,"__javaDeclarations",[{type:"declaration",signature:"class ArithmeticException extends RuntimeException"},{type:"method",signature:"public ArithmeticException()",native:Oi.prototype._constructor},{type:"method",signature:"public ArithmeticException(String message)",native:Te.prototype._constructor_m},{type:"method",signature:"public ArithmeticException(Throwable cause)",native:Te.prototype._constructor_c},{type:"method",signature:"public ArithmeticException(String message, Throwable cause)",native:Te.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:Te.prototype._toString}]),r(Uo,"type");class Qo extends F{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(Qo,"__javaDeclarations",[{type:"declaration",signature:"class ClassCastException extends RuntimeException"}]),r(Qo,"type");class Pe extends F{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(Pe,"__javaDeclarations",[{type:"declaration",signature:"class IndexOutOfBoundsException extends RuntimeException"}]),r(Pe,"type");class Kt extends F{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(Kt,"__javaDeclarations",[{type:"declaration",signature:"class NullPointerException extends RuntimeException"}]),r(Kt,"type");class tb{static arrayOfObjectsToString(t,e,i,n,s=200){if(i==null){e.s.push("null"),n&&n();return}if(i.length==0){t.text+="[ ]",n&&n();return}t.text+="[";let a=i.slice();e.s.push(a);let l=h=>{let c=e.s.pop();if(t.text.length>s){h&&h();return}if(c.length>0){let u=c.shift();if(u==null)if(t.text+="null",c.length>0){t.text+=", ",e.s.push(c),l(h);return}else{t.text+="]",h&&h();return}else if(Array.isArray(u)){e.s.push(u),this.arrayOfObjectsToString(t,e,u,()=>{if(c.length>0){t.text+=", ",e.s.push(c),l(h);return}else{t.text+="]",h&&h();return}},s);return}else if(typeof u=="object")u._mj$toString$String$(e,()=>{var f,b;let g=e.s.pop().value;if(((b=(f=u.constructor)==null?void 0:f.type)==null?void 0:b.identifier)=="String"&&(g='"'+g+'"'),t.text+=g,c.length>0){t.text+=", ",e.s.push(c),l(h);return}else{t.text+="]",h&&h();return}});else if(typeof u=="string"?t.text+='"'+u+'"':t.text+=""+u,c.length>0){t.text+=", ",e.s.push(c),l(h);return}else{t.text+="]",h&&h();return}}};l(()=>{n&&n()})}}class um{static printWithLinks(t,e,i,n){if(!i||!n)return;let s=this.getHtmlWithLinks(t,e,n);s.style.marginTop="10px",i.printHtmlElement(s)}static getHtmlWithLinks(t,e,i){let n=R.makeDiv(void 0,"jo_exceptionPrinter_outer"),s=R.makeDiv(n,"jo_exceptionPrinter_heading");if(!t.getThread){console.error(t);return}let a=t.getThread()?" in thread "+t.getThread().name:"";s.textContent=`${t.getIdentifier()}${a}: ${t.getMessage()}`;for(let l of e){if(!l.range)continue;let h=R.makeDiv(n,"jo_exceptionPrinter_stacktrace");l.methodIdentifierWithClass.endsWith("."+_r.mainMethodIdentifier)?h.innerHTML=`in main program (File ${l.file.name} ${l.range.startLineNumber}:${l.range.startColumn})`:l.methodIdentifierWithClass.startsWith("$MainClass")?h.innerHTML=`in ${l.methodIdentifierWithClass.split(".")[1]} (File ${l.file.name} ${l.range.startLineNumber}:${l.range.startColumn})`:h.innerHTML=`at ${l.methodIdentifierWithClass} (File ${l.file.name} ${l.range.startLineNumber}:${l.range.startColumn})`,h.getElementsByClassName("jo_stacktraceLink")[0].addEventListener("click",()=>{i==null||i.showProgramPosition(l.file,l.range)})}return n}}class ib{constructor(t,e){r(this,"cause");r(this,"stacktrace",[]);r(this,"file");r(this,"range");r(this,"thread");this.identifier=t,this.message=e}getIdentifier(){return this.identifier}getExtendedImplementedIdentifiers(){return[]}getMessage(){return this.message}getFile(){return this.file}getThread(){return this.thread}}var Ys,ls,pn,Ga,Ka,Ha,Zs,ds,Pi,$p,Vh,Nl,Lh;class ge{constructor(t,e,i){Z(this,Pi);r(this,"s",[]);r(this,"programStack",[]);r(this,"currentProgramState");Z(this,Ys);Z(this,ls,B.new);r(this,"exception");r(this,"stackTrace");Z(this,pn,-1);Z(this,Ga,Number.MAX_SAFE_INTEGER);r(this,"haltAtNextBreakpoint",!0);Z(this,Ka);r(this,"classes");r(this,"maxStepsPerSecond");r(this,"lastTimeThreadWasRun",performance.now());Z(this,Ha,!1);Z(this,Zs,0);r(this,"replReturnValue");r(this,"numberOfSteps",0);Z(this,ds,[]);r(this,"callbackAfterTerminated");r(this,"threadObject");r(this,"lastReentrenceCounter");r(this,"fullspeedCounter",0);this.scheduler=t,this.name=e,this.s=i,this.classes=t.classObjectRegistry}get state(){return j(this,ls)}get assertionObservers(){return this.scheduler.interpreter.assertionObserverList}run(t){this.numberOfSteps=0;let e=this.s,i,n,s;if(!this.currentProgramState)return this.state=B.terminated,{state:this.state,stepsExecuted:0};try{for(;this.numberOfSteps=0){for(;this.numberOfSteps{J(this,pn,-1),t()})}unmarkStep(){J(this,pn,-1)}markStepOut(t){J(this,pn,this.programStack.length-1),J(this,Ga,-1),J(this,Ka,()=>{J(this,pn,-1),t()})}startIfNotEmptyOrDestroy(){this.programStack.length==0&&(this.scheduler.removeThread(this),this.return),[B.new,B.runnable].indexOf(this.state)>=0&&(this.state=B.running)}getExceptionAndTrimStack(t){let e=this.currentProgramState.recentlyThrownException;if(e)return t&&(this.currentProgramState.recentlyThrownException=void 0),this.s.length=this.currentProgramState.afterExceptionTrimStackToSize,e}beginTryBlock(t){t.stackSize=this.s.length,this.currentProgramState.exceptionInfoList.push(t)}endCatchTryBlock(){this.currentProgramState.exceptionInfoList.pop()}return(t){var i;for(;this.s.length>this.currentProgramState.stackBase;)this.s.pop();let e=(i=this.programStack.pop())==null?void 0:i.callbackAfterFinished;typeof t<"u"&&this.s.push(t),e!=null&&e(),this.programStack.length>0?this.currentProgramState=this.programStack[this.programStack.length-1]:this.state=B.terminated}startREPLProgram(){J(this,Zs,this.s.length),J(this,Ha,!0)}returnFromREPLProgram(t,e){J(this,Ha,!1);let i=this.programStack.pop();for(;i&&!i.program.isReplProgram;)i=this.programStack.pop();this.replReturnValue=void 0;let n=this.s.length>j(this,Zs)+1?this.s.pop():void 0,s=this.s.length>j(this,Zs)?this.s.pop():void 0;for(this.replReturnValue={value:s,text:n,type:i==null?void 0:i.program.module.returnType};this.s.length>j(this,Zs);)this.s.pop();i!=null&&i.callbackAfterFinished&&i.callbackAfterFinished(),this.currentProgramState=this.programStack[this.programStack.length-1],this.state=B.immediatelyAfterReplStatement,this.currentProgramState||(this.currentProgramState={currentStepList:[],stepIndex:0,exceptionInfoList:[],program:void 0,stackBase:0})}pushProgram(t,e){let i={program:t,currentStepList:t.stepsSingle,stackBase:this.s.length-t.numberOfParameters-t.numberOfThisObjects,stepIndex:0,callbackAfterFinished:e,exceptionInfoList:[]};for(let n=0;n{this.s.push(new G(this.s.pop())),e&&e()},n);return}if(typeof i=="object"){i._mj$toString$String$(t,e);return}t.s.push(""+i),e&&e()}NullstringIfNull(t){return t==null?"null":t.value}EnterFullspeedMode(){this.fullspeedCounter++}ExitFullspeedMode(){this.fullspeedCounter--,this.fullspeedCounter==0&&(this.state=B.changeSpeedRequested)}exit(){this.state=B.terminated}registerCodeReached(t){this.scheduler.interpreter.registerCodeReached(t)}registerEnteringSynchronizedBlock(t){let e=this.programStack[this.programStack.length-1];if(e.exceptionInfoList.length>0){let i=e.exceptionInfoList[e.exceptionInfoList.length-1];i.aquiredObjectLocks||(i.aquiredObjectLocks=[]),i.aquiredObjectLocks.push(t)}else e.aquiredObjectLocks||(e.aquiredObjectLocks=[]),e.aquiredObjectLocks.push(t)}registerLeavingSynchronizedBlock(){let t=this.programStack[this.programStack.length-1];if(t.exceptionInfoList.length>0){let e=t.exceptionInfoList[t.exceptionInfoList.length-1];e.aquiredObjectLocks&&e.aquiredObjectLocks.length>0&&e.aquiredObjectLocks.pop()}else t.aquiredObjectLocks&&t.aquiredObjectLocks.length>0&&t.aquiredObjectLocks.pop()}leaveAllSynchronizedBlocksInCurrentMethod(){let t=this.programStack[this.programStack.length-1];for(;(t==null?void 0:t.exceptionInfoList.length)>0;){let e=t.exceptionInfoList.pop();if(e.aquiredObjectLocks)for(;e.aquiredObjectLocks.length>0;)e.aquiredObjectLocks.pop().leaveSynchronizedBlock(this,!1)}if(t.aquiredObjectLocks)for(;t.aquiredObjectLocks.length>0;)t.aquiredObjectLocks.pop().leaveSynchronizedBlock(this,!1)}_arrayOfObjectsToString(t,e,i=200){let n={text:""};tb.arrayOfObjectsToString(n,this,t,()=>{this.s.push(n.text),e&&e()},i)}_primitiveElementOrArrayToString(t){return Array.isArray(t)?"["+t.map(e=>this._primitiveElementOrArrayToString(e)).join(", ")+"]":typeof t=="string"?'"'+t+'"':""+t}IOBE(t,e,i,n){let s={startLineNumber:t,startColumn:e,endLineNumber:i,endColumn:n},a=new Pe(bt.SimpleArrayIndexOutOfBoundsException());throw a.range=s,a}ArrayValue1(t,e){if(e<0||e>=t.length)throw new Pe(bt.ArrayIndexOutOfBoundsException(e,t.length,1));return t[e]}ArrayValue2(t,e,i){if(e<0||e>=t.length)throw new Pe(bt.ArrayIndexOutOfBoundsException(e,t.length,1));let n=t[e];if(i<0||i>=n.length)throw new Pe(bt.ArrayIndexOutOfBoundsException(i,n.length,2));return n[i]}ArrayValue3(t,e,i,n){if(e<0||e>=t.length)throw new Pe(bt.ArrayIndexOutOfBoundsException(e,t.length,1));let s=t[e];if(i<0||i>=s.length)throw new Pe(bt.ArrayIndexOutOfBoundsException(i,s.length,2));if(s=s[i],n<0||n>=s.length)throw new Pe(bt.ArrayIndexOutOfBoundsException(n,s.length,3));return s[n]}ArrayValueN(t,...e){for(let i=0;i=t.length)throw new Pe(bt.ArrayIndexOutOfBoundsException(n,t.length,i+1));t=t[n]}return t}Array0(t){return j(this,ds).push(t),t}Array1(t,e){if(e<0||e>=t.length)throw new Pe(bt.ArrayIndexOutOfBoundsException(e,t.length,1));let i=t[e];return j(this,ds).push(i),i}Array2(t,e,i){if(e<0||e>=t.length)throw new Pe(bt.ArrayIndexOutOfBoundsException(e,t.length,1));let n=t[e];if(i<0||i>=n.length)throw new Pe(bt.ArrayIndexOutOfBoundsException(i,n.length,2));let s=n[i];return j(this,ds).push(s),s}ArrayN(t,...e){for(let n=0;n=t.length)throw new Pe(bt.ArrayIndexOutOfBoundsException(s,t.length,n+1));t=t[s]}let i=t;return j(this,ds).push(i),i}primitiveStringToStringObject(t){return t==null?null:new G(t)}CheckLastIndex(t,e){let i=j(this,ds).pop();if(t<0||t>=i.length)throw new Pe(bt.ArrayIndexOutOfBoundsException(t,i.length,e));return t}}Ys=new WeakMap,ls=new WeakMap,pn=new WeakMap,Ga=new WeakMap,Ka=new WeakMap,Ha=new WeakMap,Zs=new WeakMap,ds=new WeakMap,Pi=new WeakSet,$p=function(t,e,i){console.log(t),console.log(e.codeAsString),ne(this,Pi,Nl).call(this,new ib("SystemException",bt.SystemException()+t),e)},Vh=function(){if(this.programStack.length==j(this,pn)){let t=this.currentProgramState.program.stepsSingle[this.currentProgramState.stepIndex];if(t&&t.range&&j(this,Ys)&&j(this,Ys).startLineNumber==t.range.startLineNumber&&j(this,Ys).startColumn==t.range.startColumn)return!1}return this.programStack.length0;){let u=c.exceptionInfoList.pop();if(u.aquiredObjectLocks)for(;u.aquiredObjectLocks.length>0;)ne(this,Pi,Lh).call(this,u.aquiredObjectLocks.pop());for(let g of i){for(let f of u.catchBlockInfos)if(f.exceptionTypes[g]){a=f;break}if(a)break}if(a){n.push(Object.assign({},c)),t.stacktrace=n.map(f=>({methodIdentifierWithClass:f.program.methodIdentifierWithClass,range:f.currentStepList[f.stepIndex].range,file:f.program.module.file}));let g=Object.assign({},c);g.stepIndex=a.catchBlockBeginsWithStepIndex,g.recentlyThrownException=t,g.afterExceptionTrimStackToSize=u.stackSize,s.push(g);break}else if(u.finallyBlockIndex){let g=Object.assign({},c);g.stepIndex=u.finallyBlockIndex,g.recentlyThrownException=t,g.afterExceptionTrimStackToSize=u.stackSize,s.push(g)}}if(c!=null&&c.aquiredObjectLocks)for(;c.aquiredObjectLocks.length>0;)ne(this,Pi,Lh).call(this,c.aquiredObjectLocks.pop());n.push(c),this.programStack.pop()}while(this.programStack.length>0&&!a);if(this.programStack.length==0&&!a)this.stackTrace=n.filter(c=>c!=null).map(c=>({range:c.lastExecutedStep?c.lastExecutedStep.getValidRangeOrUndefined():c.currentStepList[c.stepIndex].getValidRangeOrUndefined(),methodIdentifierWithClass:c.program.methodIdentifierWithClass,file:c.program.module.file})),this.stackTrace.length>0&&(this.stackTrace[0].range=t.range),this.exception=t,um.printWithLinks(t,this.stackTrace,this.scheduler.interpreter.printManager,(l=this.scheduler.interpreter.breakpointManager)==null?void 0:l.main),(h=this.scheduler.interpreter.exceptionMarker)==null||h.markException(t,e),this.state=B.terminatedWithException,this.currentProgramState=void 0;else{for(;s.length>0;)this.programStack.push(s.pop());this.currentProgramState=this.programStack[this.programStack.length-1]}j(this,Ha)&&this.returnFromREPLProgram(t,e)},Lh=function(t){t.leaveSynchronizedBlock(this)};class L{}r(L,"thread","__t"),r(L,"stack","__s"),r(L,"stackBase","__sb");const de=class de{static elementRelativeToStackbase(t){return L.stack+"["+L.stackBase+(t!=0?" + "+t:"")+"]"}static checkNPE(t,e){return`(${t} ?? ${de.throwNPE}(${e.startLineNumber}, ${e.startColumn}, ${e.endLineNumber}, ${e.endColumn}))`}};r(de,"classes",L.thread+".classes"),r(de,"newArray",L.thread+"."+ge.prototype.newArray.name),r(de,"print",L.thread+"."+ge.prototype.print.name),r(de,"println",L.thread+"."+ge.prototype.println.name),r(de,"return",L.thread+"."+ge.prototype.return.name),r(de,"threadStack",L.thread+".s"),r(de,"pushProgram",L.thread+"."+ge.prototype.pushProgram.name),r(de,"getExceptionAndTrimStack",L.thread+"."+ge.prototype.getExceptionAndTrimStack.name),r(de,"beginTryBlock",L.thread+"."+ge.prototype.beginTryBlock.name),r(de,"endTryBlock",L.thread+"."+ge.prototype.endCatchTryBlock.name),r(de,"throwArithmeticException",L.thread+"."+ge.prototype.AE.name),r(de,"IOBE",L.thread+"."+ge.prototype.IOBE.name),r(de,"arrayValue1",L.thread+"."+ge.prototype.ArrayValue1.name),r(de,"arrayValue2",L.thread+"."+ge.prototype.ArrayValue2.name),r(de,"arrayValue3",L.thread+"."+ge.prototype.ArrayValue3.name),r(de,"arrayValueN",L.thread+"."+ge.prototype.ArrayValueN.name),r(de,"array0",L.thread+"."+ge.prototype.Array0.name),r(de,"array1",L.thread+"."+ge.prototype.Array1.name),r(de,"array2",L.thread+"."+ge.prototype.Array2.name),r(de,"arrayN",L.thread+"."+ge.prototype.ArrayN.name),r(de,"primitiveStringToStringObject",L.thread+"."+ge.prototype.primitiveStringToStringObject.name),r(de,"checkLastIndex",L.thread+"."+ge.prototype.CheckLastIndex.name),r(de,"throwNPE",L.thread+"."+ge.prototype.NPE.name),r(de,"checkCast",L.thread+"."+ge.prototype.CheckCast.name),r(de,"checkCastToArray",L.thread+"."+ge.prototype.CheckCastToArray.name),r(de,"instanceof",L.thread+"."+ge.prototype.Instanceof.name),r(de,"toString",L.thread+"."+ge.prototype.ToString.name),r(de,"exit",L.thread+"."+ge.prototype.exit.name),r(de,"enterFullspeedMode",L.thread+"."+ge.prototype.EnterFullspeedMode.name),r(de,"exitFullspeedMode",L.thread+"."+ge.prototype.ExitFullspeedMode.name),r(de,"assertionObservers",L.thread+".assertionObservers"),r(de,"registerCodeReached",L.thread+"."+ge.prototype.registerCodeReached.name),r(de,"nullstringIfNull",L.thread+"."+ge.prototype.NullstringIfNull.name),r(de,"primitiveArrayToString",L.thread+"."+ge.prototype._primitiveElementOrArrayToString.name),r(de,"objectArrayToString",L.thread+"."+ge.prototype._arrayOfObjectsToString.name),r(de,"startReplProgram",L.thread+"."+ge.prototype.startREPLProgram.name),r(de,"returnFromReplProgram",L.thread+"."+ge.prototype.returnFromREPLProgram.name),r(de,"leaveAllSynchronizedBlocksInCurrentMethod",L.thread+"."+ge.prototype.leaveAllSynchronizedBlocksInCurrentMethod.name),r(de,"callbackParameter","callback"),r(de,"outerClassAttributeIdentifier","__outerClass");let $=de;var nr;class ed{constructor(t,e){r(this,"run");Z(this,nr);r(this,"range");r(this,"codeAsString","");r(this,"catchBlockInfoList");r(this,"finallyBlockIndex");r(this,"innerClass");r(this,"lambdaObject");this.index=t,this.module=e,this.range={startLineNumber:void 0,startColumn:void 0,endLineNumber:void 0,endColumn:void 0}}getValidRangeOrUndefined(){const t=this.range;if(t&&typeof t.startLineNumber<"u"&&t.startLineNumber>=0)return t}setBreakpoint(t=!1){const e=(i,n,s)=>i.haltAtNextBreakpoint?(i.state=B.stoppedAtBreakpoint,i.haltAtNextBreakpoint=!1,t&&this.clearBreakpoint(),this.index):(i.haltAtNextBreakpoint=!0,j(this,nr).call(this,i,n,s));j(this,nr)||(J(this,nr,this.run),this.run=e)}clearBreakpoint(){j(this,nr)&&(this.run=j(this,nr),J(this,nr,void 0))}isEmpty(){return this.codeAsString.trim()==""}setRangeStartIfUndefined(t){var e;!((e=this.range)!=null&&e.startLineNumber)&&t&&t!=re.instance&&(this.range={startLineNumber:t.startLineNumber,startColumn:t.startColumn,endLineNumber:t.endLineNumber,endColumn:t.endColumn})}adaptRangeEnd(t){t&&t!=re.instance&&(this.range.endLineNumber?this.range.endLineNumber=t.length||(n==0?i+=xt.white("Step ")+xt.blue(Bl(s)+": ")+xt.italic.white(t[s].codeAsString)+` `:i+=xt.white("Step ")+xt.blue(Bl(s)+": ")+xt.gray(t[s].codeAsString)+` `)}return i},nb=function(){return new eb().printProgram(this)};var gn,Ua,Ne,pl,Rd,nm,rm,Xs,Cn,Dp,jp,Mp,Fh,sb;class rb{constructor(t){Z(this,Cn);r(this,"runningThreads",[]);Z(this,gn,[]);Z(this,Ua);Z(this,Ne,0);r(this,"state");r(this,"keepThread",!1);r(this,"classObjectRegistry",{});Z(this,pl,0);r(this,"stepCountSinceStartOfProgram",0);Z(this,Rd);Z(this,nm,0);Z(this,rm,1e3);r(this,"onStartingNextThreadCallback");Z(this,Xs);r(this,"callbackAfterReplProgramFinished");r(this,"runsSynchronously",!1);this.interpreter=t,this.setState(Q.not_initialized)}run(t){if(this.state!=Q.running)return Pn.nothingMoreToDo;if(this.onStartingNextThreadCallback&&this.getNextStepPosition())return this.onStartingNextThreadCallback(),this.onStartingNextThreadCallback=void 0,Pn.nothingMoreToDo;let e=Math.ceil(t/this.runningThreads.length),i=0;if(this.runningThreads.length==0)return Pn.nothingMoreToDo;let n=-1,s={state:B.running,stepsExecuted:0};for(;i0)J(this,Ne,0),a=this.runningThreads[0],n=-1;else return Pn.nothingMoreToDo;if(a.maxStepsPerSecond&&a.fullspeedCounter==0){let l=performance.now(),h=1e3/a.maxStepsPerSecond,c=l-a.lastTimeThreadWasRun,u=Math.min(c/h,e);if(u>0)s=a.run(u),a.lastTimeThreadWasRun=a.lastTimeThreadWasRun+s.stepsExecuted*h,a.maxStepsPerSecond<20?(this.interpreter.showProgramPointer(this.getNextStepPosition(a)),this.interpreter.updateDebugger()):this.state==Q.running&&this.interpreter.hideProgrampointerPosition();else if(s.state=a.state,s.stepsExecuted=0,this.runningThreads.length==1)return Pn.nothingMoreToDo}else s=a.run(e);if(i+=s.stepsExecuted,s.state!=B.running)switch(s.state){case B.terminated:case B.terminatedWithException:if(this.runningThreads.splice(j(this,Ne),1),j(this,Ne)>this.runningThreads.length-1&&(J(this,Ne,-1),this.keepThread=!1),!this.hasRunningOrWaitingThreads()&&!this.interpreter.hasActorsOrPAppletOrRunningTimers()||s.state==B.terminatedWithException){if(a.maxStepsPerSecond&&this.interpreter.hideProgrampointerPosition(),this.stepCountSinceStartOfProgram+=i,this.interpreter.setState(Q.stopped),s.state==B.terminatedWithException&&this.interpreter.setState(Q.error),j(this,Xs)){let l=j(this,Xs);J(this,Xs,void 0),l()}return Pn.nothingMoreToDo}break;case B.stoppedAtBreakpoint:a.state=B.running,this.interpreter.pause();break;case B.immediatelyAfterReplStatement:if(a.programStack.length==0&&this.runningThreads.splice(this.runningThreads.indexOf(a),1),this.callbackAfterReplProgramFinished){let l=this.callbackAfterReplProgramFinished;this.callbackAfterReplProgramFinished=void 0,l()}break;case B.changeSpeedRequested:return a.state=B.running,this.stepCountSinceStartOfProgram+=i,Pn.nothingMoreToDo}this.keepThread||(El(this,Ne)._++,j(this,Ne)>=this.runningThreads.length&&J(this,Ne,0))}return this.stepCountSinceStartOfProgram+=i,Pn.giveMeAdditionalTime}hasRunningOrWaitingThreads(){if(this.runningThreads.length>0)return!0;for(let t of j(this,gn))if(t.state==B.timedWaiting)return!0;return!1}setState(t){switch(t){case Q.running:J(this,pl,performance.now()),this.stepCountSinceStartOfProgram=0;break;case Q.stopped:case Q.error:if(this.state==Q.running&&!this.interpreter.printManager.isTestPrintManager()){let i=performance.now()-j(this,pl),n=Math.round(this.stepCountSinceStartOfProgram/i*1e3);this.interpreter.printManager.print("",!0,void 0),this.interpreter.printManager.print(bt.ExecutionTime()+": "+Math.round(i*100)/100+" ms, "+this.stepCountSinceStartOfProgram+" steps, "+ne(this,Cn,Dp).call(this,n)+" steps/s",!0,void 0)}ne(this,Cn,jp).call(this);break}this.state=t}runSingleStepKeepingThread(t,e){this.keepThread=!0,ne(this,Cn,Mp).call(this);let i=this.getCurrentThread();if(i!=null)if(t){if(this.state==Q.paused){this.setState(Q.running);let n=!1;do{this.run(1);let s=this.getNextStep();n=!(s&&!s.getValidRangeOrUndefined()&&i.state==B.running)}while(!n);this.setState(Q.paused)}e()}else i.markSingleStepOver(()=>{e()}),this.interpreter.setState(Q.running)}stepOut(t){this.keepThread=!0;const e=this.runningThreads[j(this,Ne)];e!=null&&e.markStepOut(()=>{t()})}unmarkCurrentlyExecutedSingleStep(){let t=this.runningThreads[j(this,Ne)];t&&t.unmarkStep()}createThread(t,e=[],i=!1){let n=new ge(this,t,e);return i?this.runningThreads.splice(Math.floor(Math.random()*this.runningThreads.length+1),0,n):this.runningThreads.push(n),n.name!="act method-thread"&&(this.interpreter.isMaxSpeed||(n.maxStepsPerSecond=this.interpreter.stepsPerSecondGoal)),n}removeThread(t){this.runningThreads.splice(this.runningThreads.indexOf(t),1)}suspendThread(t){let e=this.runningThreads.indexOf(t);e>=0&&(this.runningThreads.splice(e,1),j(this,Ne)>e&&El(this,Ne)._--),j(this,gn).push(t)}restoreThread(t){if(t.state>=B.terminated)return;t.state=B.running;let e=j(this,gn).indexOf(t);e>=0&&j(this,gn).splice(e,1),this.runningThreads.push(t)}getNextStep(t){if(t=t||this.runningThreads[j(this,Ne)],!t)return;let e=t.currentProgramState;return(e==null?void 0:e.currentStepList[e.stepIndex])||void 0}getNextStepPosition(t){if(t=t||this.runningThreads[j(this,Ne)],!t)return;let e=t.currentProgramState,i=e==null?void 0:e.currentStepList[e.stepIndex];if(i)return{programOrmoduleOrFile:e.program,range:i.range}}init(t,e,i){var s;ne(this,Cn,Fh).call(this,t),t.initializeClassObjects();const n=this.createThread("main thread");if(!(e&&!(e!=null&&e.startMainProgram(n,i=="stepOver")))){for(const a of t.staticInitializationSequence)n.pushProgram(a.program);if(i=="stepInto")for(let a=n.programStack.length-1;a>=0;a--){let l=n.programStack[a];for(let h of l.currentStepList)if(((s=h.range)==null?void 0:s.startLineNumber)>=0){h.setBreakpoint(!0),a=-1;break}}return n}}initJUnitTestMethodAndReturnMainThread(t,e,i){if(!t)return;ne(this,Cn,Fh).call(this,t);let n=this.createThread("main thread"),s=e.classEnumInterface,a=new qr(s.module,void 0,s.identifier+".testStub_"+e.identifier),l=s.getAllMethods().filter(f=>f.isConstructor&&f.parameters.length==0);if(l.length==0){console.log("Couldn't find parameterless constrructor for class "+s.identifier+".");return}let h=l[0],c=`new ${$.classes}["${s.identifier}"]().${h.getInternalName("java")}(${L.thread}, () => {}); return 1; `;a.addStep(c);let u=`${$.elementRelativeToStackbase(0)}.${e.getInternalName("java")}(${L.thread}, undefined); return 2; `;a.addStep(u);let g=`${$.return}(); `;if(a.addStep(g),a.compileToJavascriptFunctions()!=null){console.log("TestManager.executeSingleTest: Error compiling test method stub.");return}n.pushProgram(a),J(this,Xs,i);for(let f of t.staticInitializationSequence)n.pushProgram(f.program);return n}getCurrentThread(){return this.runningThreads[j(this,Ne)]}resetLastTimeExecutedTimestamps(){this.runningThreads.filter(t=>t.maxStepsPerSecond).forEach(t=>t.lastTimeThreadWasRun=performance.now())}setMaxSpeed(t,e){this.runningThreads.filter(i=>i.name!="act method-thread").forEach(i=>i.maxStepsPerSecond=e?void 0:t)}setAsCurrentThread(t){let e=this.runningThreads.indexOf(t);e>=0?J(this,Ne,e):(this.runningThreads.push(t),J(this,Ne,this.runningThreads.length-1)),t.state=B.running}saveAllThreadsBut(t){J(this,Ua,this.runningThreads.filter(e=>e!=t)),this.runningThreads=[t],J(this,Ne,0)}retrieveThreads(){j(this,Ua)&&(this.runningThreads=this.runningThreads.concat(j(this,Ua)),J(this,Ne,0))}exit(t){var e;console.log("Exited with status "+t),(e=this.interpreter.printManager)==null||e.print("Exited with status "+t,!0,16777215),this.interpreter.stop(!1)}getAllThreads(){return this.runningThreads.concat(j(this,gn))}}gn=new WeakMap,Ua=new WeakMap,Ne=new WeakMap,pl=new WeakMap,Rd=new WeakMap,nm=new WeakMap,rm=new WeakMap,Xs=new WeakMap,Cn=new WeakSet,Dp=function(t){return t<1e6?""+Math.trunc(t):(t=Math.trunc(t/1e3)*1e3/1e6,t+" million")},jp=function(){this.runningThreads.forEach(t=>t.state=B.terminated),j(this,gn).forEach(t=>t.state=B.terminated),this.runningThreads.length=0,j(this,gn).length=0},Mp=function(){let t=this.runningThreads[j(this,Ne)];if(t){let e=t.currentProgramState,i=e==null?void 0:e.currentStepList[e.stepIndex];i!=null&&i.isBreakpoint()&&(t.haltAtNextBreakpoint=!1)}},Fh=function(t){this.classObjectRegistry=t.classObjectRegistry,J(this,Rd,t.libraryModuleManager.typestore),this.runningThreads=[],J(this,gn,[]),J(this,Ne,0),this.keepThread=!1},sb=function(){this.runningThreads=[],J(this,gn,[])};class pt{}r(pt,"CantJumpToLine",()=>d({de:"Das Programm kann die Ausführung nicht in dieser Zeile fortsetzen, da sie nicht innerhalb der aktuellen Methode liegt.",en:"You can't continue program execution in this line as it's outside scope of the current method."})),r(pt,"runProgram",()=>d({de:"Programm starten",en:"Run program"})),r(pt,"pause",()=>d({de:"Pause",en:"Pause"})),r(pt,"stop",()=>d({de:"Programm anhalten",en:"Stop program"})),r(pt,"toggleBreakpoint",()=>d({de:"Haltepunkt ein/aus",en:"Toggle breakpoint"})),r(pt,"stepOver",()=>d({de:"Einzelschritt (step over)",en:"Step over"})),r(pt,"stepInto",()=>d({de:"Einzelschritt (step into)",en:"Step into"})),r(pt,"stepOut",()=>d({de:"Step out",en:"Step out"})),r(pt,"restart",()=>d({de:"Neu starten",en:"Restart"})),r(pt,"goto",()=>d({de:"Goto",en:"Goto"}));class T{}r(T,"NewFileName",()=>d({de:"Datei",en:"File",fr:"Fichier"})),r(T,"NewWorkspaceName",()=>d({de:"Workspace",en:"Workspace",fr:"Espace de travail"})),r(T,"FilenameHasBeenTruncated",t=>d({de:`Der Dateiname wurde auf ${t} Zeichen gekürzt.`,en:`Filename has been truncated to ${t} characters.`,fr:`Le nom du fichier a été tronqué à ${t} caractères.`})),r(T,"SynchronizeWorkspace",()=>d({de:"Workspace mit Repository synchronisieren",en:"Synchronize workspace with repository",fr:"Synchroniser workspace avec repository"})),r(T,"cantMoveFilesToWorkspaceFolder",()=>d({de:"Dateien können nicht in einen Workspace-Ordner verschoben/kopiert werden.",en:"Cannot move/copy files to workspace folder.",fr:"Impossible de déplacer/copier des fichiers vers le dossier de l'espace de travail."})),r(T,"startMainProgram",()=>d({de:"Starte das in dieser Datei enthaltene Hauptprogramm",en:"Start main program contained in this file",fr:"Démarrer le programme principal contenu dans ce fichier"})),r(T,"File",()=>d({de:"Datei",en:"File",fr:"Fichier"})),r(T,"ImportWorkspace",()=>d({de:"Workspace importieren",en:"Import workspace",fr:"Importer un espace de travail"})),r(T,"ExportCurrentWorkspace",()=>d({de:"Aktuellen Workspace exportieren",en:"Export current workspace",fr:"Exporter l'espace de travail actuel"})),r(T,"NoWorkspaceSelected",()=>d({de:"Kein Workspace ausgewählt.",en:"No workspace selected",fr:"Aucun espace de travail sélectionné."})),r(T,"ExportAllWorkspaces",()=>d({de:"Alle Workspaces exportieren",en:"Export all workspaces",fr:"Exporter tous les espaces de travail"})),r(T,"Settings",()=>d({de:"Einstellungen",en:"Settings",fr:"Paramètres"})),r(T,"SaveAndExit",()=>d({de:"Speichern und beenden",en:"Save and exit",fr:"Enregistrer et quitter"})),r(T,"Edit",()=>d({de:"Bearbeiten",en:"Edit",fr:"Modifier"})),r(T,"Undo",()=>d({de:"Rückgängig (Strg + z)",en:"Undo (Ctrl + z)",fr:"Annuler (Ctrl + z)"})),r(T,"Redo",()=>d({de:"Wiederholen (Strg + y)",en:"Redo (Ctrl + y)",fr:"Rétablir (Ctrl + y)"})),r(T,"Copy",()=>d({de:"Kopieren (Strg + c)",en:"Copy (Ctrl + c)",fr:"Copier (Ctrl + c)"})),r(T,"Cut",()=>d({de:"Ausschneiden (Strg + x)",en:"Cut (Ctrl + x)",fr:"Couper (Ctrl + x)"})),r(T,"CopyToTop",()=>d({de:"Nach oben kopieren (Alt + Shift + Pfeil rauf)",en:"Copy to top (Alt + Shift + Arrow up)",fr:"Copier vers le haut (Alt + Maj + Flèche haut)"})),r(T,"CopyToBottom",()=>d({de:"Nach unten kopieren (Alt + Shift + Pfeil runter)",en:"Copy to Bottom (Alt + Shift + Arrow down)",fr:"Copier vers le bas (Alt + Maj + Flèche bas)"})),r(T,"MoveToTop",()=>d({de:"Nach oben verschieben (Alt + Pfeil rauf)",en:"Move to top (Alt + Arrow up)",fr:"Déplacer vers le haut (Alt + Flèche haut)"})),r(T,"MoveToBottom",()=>d({de:"Nach unten verschieben (Alt + Pfeil runter)",en:"Move to Bottom (Alt + Arrow down)",fr:"Déplacer vers le bas (Alt + Flèche bas)"})),r(T,"Find",()=>d({de:"Suchen... (Strg + f)",en:"Find... (Ctrl + f)",fr:"Rechercher... (Ctrl + f)"})),r(T,"Replace",()=>d({de:"Ersetzen... (Strg + h)",en:"Replace... (Ctrl + h)",fr:"Remplacer... (Ctrl + h)"})),r(T,"ToggleComment",()=>d({de:"Aus-/Einkommentieren (Strg + ,)",en:"Toggle comment (Ctrl + ,)",fr:"Activer/Désactiver le commentaire (Ctrl + ,)"})),r(T,"AutoFormat",()=>d({de:"Dokument automatisch formatieren (Alt + Shift + f)",en:"Auto format (Alt + Shift + f)",fr:"Formater automatiquement (Alt + Maj + f)"})),r(T,"FindCorrespondingBracket",()=>d({de:"Finde zugehörige Klammer (Strg + k)",en:"Find corresponding bracket (Ctrl + k)",fr:"Trouver la parenthèse correspondante (Ctrl + k)"})),r(T,"FoldAll",()=>d({de:"Alles zusammenfalten",en:"Fold all",fr:"Tout replier"})),r(T,"UnfoldAll",()=>d({de:"Alles auffalten",en:"Unfold all",fr:"Tout déplier"})),r(T,"TriggerSuggest",()=>d({de:"Vorschlag auslösen (Strg + Leertaste)",en:"Trigger suggestion (Ctrl + Space)",fr:"Déclencher la suggestion (Ctrl + Espace)"})),r(T,"TriggerParameterHint",()=>d({de:"Parameterhilfe (Strg + Shift + Leertaste)",en:"Trigger parameter hint (Ctrl + Shift + Space)",fr:"Déclencher l'aide aux paramètres (Ctrl + Maj + Espace)"})),r(T,"GoToDefinition",()=>d({de:"Gehe zur Definition (Strg + Click)",en:"Got to definition (Ctrl + click)",fr:"Aller à la définition (Ctrl + Clic)"})),r(T,"View",()=>d({de:"Ansicht",en:"View",fr:"Affichage"})),r(T,"Theme",()=>d({de:"Theme",en:"Theme",fr:"Thème"})),r(T,"Dark",()=>d({de:"Dark",en:"Dark",fr:"Sombre"})),r(T,"Light",()=>d({de:"Light",en:"Light",fr:"Clair"})),r(T,"SetDefaultFontSize",()=>d({de:"Schriftgröße zurücksetzen",en:"Reset font size",fr:"Réinitialiser la taille de la police"})),r(T,"HighContrastOnOff",()=>d({de:"Hoher Kontrast im Editor ein/aus",en:"High contrast on/off",fr:"Contraste élevé dans l'éditeur activé/désactivé"})),r(T,"ZoomOut",()=>d({de:"Zoom out (Strg + Mausrad)",en:"Zoom out (Ctrl + mouse wheel)",fr:"Dézoomer (Ctrl + molette de la souris)"})),r(T,"ZoomNormal",()=>d({de:"Zoom normal",en:"Zoom normal",fr:"Zoom normal"})),r(T,"ZoomIn",()=>d({de:"Zoom in (Strg + Mausrad)",en:"Zoom in (Ctrl + mouse wheel)",fr:"Zoomer (Ctrl + molette de la souris)"})),r(T,"LinebreakOnOff",()=>d({de:"Automatischer Zeilenumbruch ein/aus",en:"Automatic line break on/off",fr:"Retour à la ligne automatique activé/désactivé"})),r(T,"Repository",()=>d({de:"Repository",en:"Repository",fr:"Dépôt"})),r(T,"ConfigureOwnRepositories",()=>d({de:"Eigene Repositories verwalten ...",en:"Configure own repositories ...",fr:"Gérer vos propres dépôts ..."})),r(T,"Checkout",()=>d({de:"Workspace mit Repository verbinden (checkout) ...",en:"Connect workspace to repository (checkout) ...",fr:"Connecter l'espace de travail au dépôt (checkout) ..."})),r(T,"importRepository",()=>d({de:"Repository aus Datei importieren ...",en:"Import repository from file ..."})),r(T,"Sprites",()=>d({de:"Sprites",en:"Sprites",fr:"Sprites"})),r(T,"AddOwnSprites",()=>d({de:"Spritesheet ergänzen ...",en:"Add own sprites to spritesheet ...",fr:"Ajouter vos propres sprites à la feuille de sprites ..."})),r(T,"SpriteCatalogue",()=>d({de:"Sprite-Bilderübersicht ...",en:"Sprite catalog",fr:"Catalogue de sprites ..."})),r(T,"Help",()=>d({de:"Hilfe",en:"Help",fr:"Aide"})),r(T,"VideoTutorials",()=>d({de:"Kurze Video-Tutorials zur Bedienung dieser IDE",en:"Short video tutorials about this IDE",fr:"Courts tutoriels vidéo sur l'utilisation de cet IDE"})),r(T,"JavaTutorial",()=>d({de:"Interaktives Java-Tutorial mit vielen Beispielen",en:"Interactive Java tutorial",fr:"Tutoriel Java interactif avec de nombreux exemples"})),r(T,"APIDoc",()=>d({de:"API-Dokumentation",en:"API documentation",fr:"Documentation API"})),r(T,"APIReference",()=>d({de:"API-Verzeichnis",en:"API reference",fr:"Référence API"})),r(T,"Shortcuts",()=>d({de:"Tastaturkommandos (shortcuts)",en:"Shortcuts",fr:"Raccourcis clavier"})),r(T,"Changelog",()=>d({de:"Online-IDE Changelog",en:"Online-IDE changelog",fr:"Journal des modifications de l'IDE en ligne"})),r(T,"Roadmap",()=>d({de:"Online-IDE Roadmap",en:"Online-IDE roadmap",fr:"Feuille de route de l'IDE en ligne"})),r(T,"EditorCommandPalette",()=>d({de:"Befehlspalette (F1)",en:"Editor commands (F1)",fr:"Palette de commandes de l'éditeur (F1)"})),r(T,"ChangePassword",()=>d({de:"Passwort ändern ...",en:"Change password ...",fr:"Changer le mot de passe ..."})),r(T,"BugReport",()=>d({de:"Fehler melden ...",en:"Report bug ...",fr:"Signaler un bug ..."})),r(T,"About",()=>d({de:"Über die Online-IDE ...",en:"About Online-IDE",fr:"À propos de l'IDE en ligne ..."})),r(T,"Imprint",()=>d({de:"Impressum",en:"Imprint",fr:"Mentions légales"})),r(T,"PrivacyPolicy",()=>d({de:"Datenschutzerklärung ...",en:"Privacy policy ...",fr:"Politique de confidentialité ..."})),r(T,"Version",()=>d({de:"Version",en:"Version",fr:"Version"})),r(T,"ClassesUserTests",()=>d({de:"Klassen/Benutzer/Prüfungen ...",en:"Classes/Users/Tests ...",fr:"Classes/Utilisateurs/Tests ..."})),r(T,"ServerStatistics",()=>d({de:"Serverauslastung ...",en:"Server statistics ...",fr:"Statistiques du serveur ..."})),r(T,"ShutdownServer",()=>d({de:"Shutdown server ...",en:"Shutdown server",fr:"Arrêter le serveur ..."})),r(T,"ReallyShutdownServer",()=>d({de:"Server wirklich herunterfahren?",en:"Are you sure to shutdown server?",fr:"Voulez-vous vraiment arrêter le serveur ?"})),r(T,"ServerShutdownDone",()=>d({de:"Server erfolgreich heruntergefahren.",en:"Server shutdown complete.",fr:"Arrêt du serveur terminé avec succès."})),r(T,"ProgramRun",()=>d({de:"Start",en:"Run",fr:"Exécuter"})),r(T,"ProgramPause",()=>d({de:"Pause",en:"Pause",fr:"Pause"})),r(T,"ProgramStop",()=>d({de:"Stop",en:"Stop",fr:"Arrêter"})),r(T,"ProgramStepOver",()=>d({de:"Step over",en:"Step over",fr:"Pas à pas (passer)"})),r(T,"ProgramStepInto",()=>d({de:"Step into",en:"Step into",fr:"Pas à pas (entrer)"})),r(T,"ProgramStepOut",()=>d({de:"Step out",en:"Step out",fr:"Pas à pas (sortir)"})),r(T,"ProgramGotoCursor",()=>d({de:"Goto cursor",en:"Goto cursor",fr:"Aller au curseur"})),r(T,"ProgramRestart",()=>d({de:"Restart",en:"Restart",fr:"Redémarrer"})),r(T,"ProgramExecuteAllTests",()=>d({de:"Alle JUnit-Tests im Workspace ausführen",en:"Start all JUnit tests in current workspace",fr:"Exécuter tous les tests JUnit dans l'espace de travail actuel"})),r(T,"HelperFolder",()=>d({de:`Mit diesem Button können Sie in der Liste der Workspaces Ordner anlegen.
  • Bestehende Workspaces lassen sich mit der Maus in Ordner ziehen.
  • Wollen Sie einen Workspace in die oberste Ordnerebene bringen, so ziehen Sie ihn einfach auf den "Workspaces"-Balken.
  • Über das Kontextmenü der Ordner lassen sich Workspaces und Unterordner anlegen.
`,en:`Use this button to create new folders in workspace list.
  • Use mouse to drag/drop workspaces from folder to folder.
  • Move workspace to topmost folder by dragging it to "Workspaces" heading.
  • Create subfolders by right-click -> context menu
`,fr:`Avec ce bouton, vous pouvez créer des dossiers dans la liste des espaces de travail.
  • Les espaces de travail existants peuvent être déplacés par glisser-déposer vers des dossiers.
  • Si vous souhaitez placer un espace de travail au niveau supérieur, faites-le simplement glisser sur la barre "Espaces de travail".
  • Via le menu contextuel des dossiers, vous pouvez créer des espaces de travail et des sous-dossiers.
`})),r(T,"HelperRepositoryButton",()=>d({de:'Wenn der aktuelle Workspace mit einem Repository verknüft ist, erscheint hier der "Synchronisieren-Button". Ein Klick darauf öffnet einen Dialog, in dem die Dateien des Workspace mit denen des Repositorys abgeglichen werden können.',en:"If current workspace is connected to repository then use synchronize-button to synchronize from/to repository.",fr:`Si l'espace de travail actuel est lié à un dépôt, le bouton "Synchroniser" apparaît ici. Un clic dessus ouvre une boîte de dialogue permettant de synchroniser les fichiers de l'espace de travail avec ceux du dépôt.`})),r(T,"HelperSpeedControl",()=>d({de:`Mit dem Geschwindigkeitsregler können Sie einstellen, wie schnell das Programm abläuft. Bei Geschwindigkeiten bis 10 Steps/s wird während des Programmablaufs der Programzeiger gezeigt und die Anzeige der Variablen auf der linken Seite stets aktualisiert.`,en:"Use speed control to adjust program execution speed. If speed is lower than 10 steps/s, then program pointer live view is enabled.",fr:"Le régulateur de vitesse vous permet de régler la rapidité d'exécution du programme. Pour des vitesses allant jusqu'à 10 étapes/s, le pointeur de programme est affiché pendant l'exécution et l'affichage des variables sur le côté gauche est toujours mis à jour."})),r(T,"HelperNewFile",()=>d({de:`Es gibt noch keine Programmdatei im Workspace.
Nutzen Sie den Button um eine Programmdatei anzulegen. `,en:`There's no file inside workspace yet.
Use button to create file. `,fr:`Il n'y a pas encore de fichier programme dans l'espace de travail.
Utilisez le bouton pour créer un fichier programme. `})),r(T,"HelperNewWorkspace",()=>d({de:`Es gibt noch keinen Workspace.
Nutzen Sie den Button um einen Workspace anzulegen. `,en:`There's no workspace yet.
Use button to create one. `,fr:`Il n'y a pas encore d'espace de travail.
Utilisez le bouton pour en créer un. `})),r(T,"HelperHome",()=>d({de:"Mit dem Home-Button können Sie wieder zu Ihren eigenen Workspaces wechseln.",en:"Use home button to switch back to your own workspaces.",fr:"Avec le bouton Accueil , vous pouvez revenir à vos propres espaces de travail."})),r(T,"HelperStepButtons",()=>d({de:`Mit den Buttons "Step over" (, Taste F8), "Step into" (, Taste F7) und "Step out" (, Taste F9) können Sie das Programm schrittweise ausführen und sich nach jedem Schritt die Belegung der Variablen ansehen.
  • Step over führt den nächsten Schritt aus, insbesondere werden Methodenaufrufe in einem Schritt durchgeführt.
  • Step into führt auch den nächsten Schritt aus, geht bei Methodenaufrufen aber in die Methode hinein und führt auch die Anweisungen innerhalb der Methode schrittweise aus.
  • Befindet sich die Programmausführung innerhalb einer Methode, so bewirkt ein Klick auf Step out, dass der Rest der Methode ausgeführt wird und die Programmausführung erst nach der Aufrufstelle der Methode anhält.
`,en:`Use buttons "Step over" (, F8), "Step into" (, F7) and "Step out" (, F9) to execute stepwise and inspect variables after each step.
  • Step over executes next step and doesn't step into method calls.
  • Step into executes next step and steps into method calls.
  • Step out continues execution until return from current method.
`,fr:`Avec les boutons "Pas à pas (passer)" (, Touche F8), "Pas à pas (entrer)" (, Touche F7) et "Pas à pas (sortir)" (, Touche F9) vous pouvez exécuter le programme pas à pas et visualiser l'affectation des variables après chaque étape.
  • "Pas à pas (passer)" exécute l'étape suivante, en particulier les appels de méthode sont effectués en une seule étape.
  • "Pas à pas (entrer)" exécute également l'étape suivante, mais lors d'appels de méthode, il entre dans la méthode et exécute également les instructions à l'intérieur de la méthode pas à pas.
  • Si l'exécution du programme se trouve à l'intérieur d'une méthode, un clic sur "Pas à pas (sortir)" fait en sorte que le reste de la méthode soit exécuté et que l'exécution du programme ne s'arrête qu'après le point d'appel de la méthode.
`})),r(T,"HelperConsole",()=>d({de:` Hier können Sie Anweisungen oder Terme eingeben, die nach Bestätigung mit der Enter-Taste ausgeführt/ausgewertet werden. Das Ergebnis sehen Sie im Bereich über der Eingabezeile.
Falls das Programm gerade pausiert (z.B. bei Ausführung in Einzelschritten) können Sie auch auf die Variablen des aktuellen Sichtbarkeitsbereiches zugreifen.`,en:"You can type statements and expressions into the console. Use enter key to execute them. Expression values are shown above edit-line. Use debugger view to inspect variables.",fr:` Ici, vous pouvez saisir des instructions ou des expressions qui seront exécutées/évaluées après confirmation avec la touche Entrée. Le résultat s'affiche dans la zone au-dessus de la ligne de saisie.
Si le programme est en pause (par exemple, lors d'une exécution pas à pas), vous pouvez également accéder aux variables de la portée actuelle.`})),r(T,"HelperSpritesheet",()=>d({de:`Unter "Sprites -> Spritesheet ergänzen" können Sie eigene png-Grafikdateien hochladen und dann als Sprites verwenden. Die Sprites werden je Workspace bzw. je Repository gespeichert.

Die Übersicht der fest in die Online-IDE integrierten Sprites finden Sie jetzt nicht mehr im Hilfe-Menü, sondern auch hier unter "Sprites->Sprite-Bilderübersicht".`,en:'With "Sprites -> Add own sprites to spritesheet" you may upload png files to complement system spritesheet.',fr:`Sous "Sprites -> Ajouter à la feuille de sprites", vous pouvez télécharger vos propres fichiers graphiques png et les utiliser comme sprites. Les sprites sont enregistrés par espace de travail ou par dépôt.

L'aperçu des sprites intégrés à l'IDE en ligne ne se trouve plus dans le menu d'aide, mais ici aussi sous "Sprites -> Catalogue de sprites".`}));class ab{static prepareArrayPrototype(){new Array(0),Object.defineProperty(Array.prototype,"_mj$toString$String$",{value:function(t,e){t.ToString(t,e,this)},writable:!1,configurable:!0})}}var gl,Gd,fl,Qa,Kd,jr,bl,Mr,Me,ob,lb,Pp,_h,Bp,Op,Vp,Lp,Fp,zh,qh,yo;const Ts=class Ts{constructor(t,e,i,n,s,a,l,h,c,u,g){Z(this,Me);Z(this,gl);r(this,"scheduler");r(this,"isExternalTimer",!1);Z(this,Gd);Z(this,fl,33);r(this,"executable");r(this,"assertionObserverList",[]);r(this,"codeReachedAssertions",new yp);r(this,"printManager");r(this,"eventManager",new xp);r(this,"actorManager");Z(this,Qa,new Map);Z(this,Kd,["start","pause","stop","stepOver","stepInto","stepOut","restart"]);Z(this,jr,{start:[!1,!1,!0,!0,!0],pause:[!1,!0,!1,!1,!1],stop:[!1,!0,!0,!1,!1],stepOver:[!1,!1,!0,!0,!0],stepInto:[!1,!1,!0,!0,!0],gotoCursor:[!1,!1,!0,!0,!0],stepOut:[!1,!1,!0,!1,!1],restart:[!1,!0,!0,!1,!1]});Z(this,Mr);r(this,"stepsPerSecondGoal",1e8);r(this,"isMaxSpeed",!0);r(this,"speedBeforeProgramStart");var f;this.actionManager=e,this.graphicsManager=i,this.keyboardManager=n,this.breakpointManager=s,this._debugger=a,this.programPointerManager=l,this.inputManager=h,this.fileManager=c,this.exceptionMarker=u,this.main=g,ab.prepareArrayPrototype(),this.printManager=t||new Tp,(f=this.graphicsManager)==null||f.setInterpreter(this),ne(this,Me,Lp).call(this),this.actorManager=new Sp(this),s&&s.attachToInterpreter(this),this.scheduler=new rb(this),J(this,gl,new Jf(this.scheduler,this)),ne(this,Me,Pp).call(this),this.setStepsPerSecond(1e8,!0),this.setState(Q.not_initialized)}setExecutable(t){t&&(this.executable=t,t.compileToJavascript(),t.isCompiledToJavascript?(ne(this,Me,yo).call(this,t),this.setState(Q.stopped),this.eventManager.fire("afterExcecutableInitialized",t)):this.setState(Q.not_initialized))}attachAssertionObserver(t){this.assertionObserverList.push(t)}timerFunction(t){this.actorManager.callActMethods(33),j(this,gl).tick(t)}executeOneStep(t){if(this.scheduler.state!=Q.paused){if(this.scheduler.state==Q.not_initialized)return;this.printManager.clear(),this.resetRuntime(),ne(this,Me,yo).call(this,this.executable,void 0,t?"stepInto":"stepOver"),this.start(void 0,!1);return}this.scheduler.runSingleStepKeepingThread(t,()=>{this.pause(),this.showProgramPointer(this.scheduler.getNextStepPosition())})}showProgramPointer(t,e){var i;this.programPointerManager&&(t||(t=this.scheduler.getNextStepPosition(),this.programPointerManager.fileIsCurrentlyShownInEditor((i=t==null?void 0:t.programOrmoduleOrFile)==null?void 0:i.file)||(t=void 0)),t!=null&&t.range?(this.eventManager.fire("showProgramPointer"),t.range.startLineNumber>=0&&this.programPointerManager.show(t,{key:e||j(Ts,bl),isWholeLine:!0,className:"jo_revealProgramPointer",rulerColor:"#6fd61b",minimapColor:"#6fd61b",beforeContentClassName:"jo_revealProgramPointerBefore"})):this.programPointerManager.hide(e||j(Ts,bl)))}pause(){this.scheduler.getNextStepPosition()?ne(this,Me,_h).call(this):this.hasActorsOrPAppletOrRunningTimers()&&(this.scheduler.onStartingNextThreadCallback=()=>{ne(this,Me,_h).call(this)})}updateDebugger(){var t;(t=this._debugger)==null||t.showCurrentThreadState()}stop(t){var e;this.hideProgrampointerPosition(),(e=this.inputManager)==null||e.hide(),this.setState(Q.stopped),this.scheduler.unmarkCurrentlyExecutedSingleStep(),setTimeout(()=>{this.hideProgrampointerPosition(),t&&this.start()},500)}start(t,e=!0){var i,n,s,a,l;(s=(n=(i=this.main)==null?void 0:i.getBottomDiv())==null?void 0:n.errorManager)==null||s.hideAllErrorDecorations(),(a=this.keyboardManager)==null||a.clearPressedKeys(),this.scheduler.state!=Q.paused&&this.executable&&e&&((l=this.graphicsManager)==null||l.shrinkGraphicsDiv(),this.printManager.clear(),ne(this,Me,yo).call(this,this.executable,t),this.resetRuntime()),this.speedBeforeProgramStart={stepsPerSecond:this.stepsPerSecondGoal,isMaxSpeed:this.isMaxSpeed},this.hideProgrampointerPosition(),this.scheduler.keepThread=!1,this.scheduler.resetLastTimeExecutedTimestamps(),this.setState(Q.running)}runMainProgramSynchronously(){this.start(),this.runREPLSynchronously()}runREPLSynchronously(){this.scheduler.runsSynchronously=!0,this.scheduler.setState(Q.running);try{for(;this.scheduler.state==Q.running&&this.scheduler.run(100)!=Pn.nothingMoreToDo;);}finally{this.scheduler.runsSynchronously=!1}}onFileSelected(){ne(this,Me,qh).call(this,this.scheduler.state)}setState(t){var i,n,s,a,l,h,c;t==Q.running&&((i=this.exceptionMarker)==null||i.removeExceptionMarker(),this.main&&!this.main.isEmbedded()&&((n=document.getElementById("jo_runtab"))==null||n.focus())),t==Q.stopped&&(this.hideProgrampointerPosition(),this.eventManager.fire("stop"),(s=this.keyboardManager)==null||s.unsubscribeAllListeners(),this.actorManager.clear(),this.actorManager.registerKeyboardListeners(this)),ne(this,Me,qh).call(this,t),t==Q.stopped&&this.eventManager.fire("done");let e=[Q.paused,Q.running];e.indexOf(this.scheduler.state)>=0&&e.indexOf(t)<0&&((a=this.keyboardManager)==null||a.unsubscribeAllListeners(),((l=this.main)==null?void 0:l.getRepl().state)!="standalone"&&((h=this.main)==null||h.hideDebugger())),e.indexOf(this.scheduler.state)<0&&e.indexOf(t)>=0&&((c=this.main)==null||c.showDebugger()),this.eventManager.fire("stateChanged",this.scheduler.state,t),this.scheduler.setState(t)}resetRuntime(){var t,e,i,n;this.eventManager.fire("resetRuntime"),typeof this.speedBeforeProgramStart<"u"&&(this.setStepsPerSecond(this.speedBeforeProgramStart.stepsPerSecond,this.speedBeforeProgramStart.isMaxSpeed),this.speedBeforeProgramStart=void 0),(i=(e=(t=this.main)==null?void 0:t.getBottomDiv())==null?void 0:e.console)==null||i.detachValues(),(n=this.printManager)==null||n.clear()}hideProgrampointerPosition(t){var e;(e=this.programPointerManager)==null||e.hideAll(),this.eventManager.fire("hideProgramPointer")}registerCodeReached(t){this.codeReachedAssertions.registerAssertionReached(t)}isRunningOrPaused(){return this.scheduler.state==Q.running||this.scheduler.state==Q.paused}hasActorsOrPAppletOrRunningTimers(){if(this.retrieveObject("PAppletClass"))return!0;let t=this.retrieveObject("WorldClass");return this.actorManager.hasActors()||t!=null&&t.hasActors()?!0:(this.retrieveObject(Ts.TimerCountIndentifier)||0)>0}setStepsPerSecondPerSpeedControl(t,e){this.speedBeforeProgramStart=void 0,this.setStepsPerSecond(t,e)}setStepsPerSecond(t,e){this.stepsPerSecondGoal=e?void 0:t,this.isMaxSpeed=e,j(this,Mr)&&(j(this,Mr).maxStepsPerSecond=e?void 0:t),this.scheduler.setMaxSpeed(t,e),!e&&this.stepsPerSecondGoal>20&&this.hideProgrampointerPosition()}getStepsPerSecond(){return this.isMaxSpeed?-1:this.stepsPerSecondGoal}runsEmbedded(){return!1}storeObject(t,e){j(this,Qa).set(t,e)}retrieveObject(t){return j(this,Qa).get(t)}deleteObject(t){j(this,Qa).delete(t)}getMain(){return this.main}};gl=new WeakMap,Gd=new WeakMap,fl=new WeakMap,Qa=new WeakMap,Kd=new WeakMap,jr=new WeakMap,bl=new WeakMap,Mr=new WeakMap,Me=new WeakSet,ob=function(t){let e=this.assertionObserverList.indexOf(t);e>=0&&this.assertionObserverList.splice(e,1)},lb=function(){this.assertionObserverList=[]},Pp=function(){let t=this;J(this,Gd,setInterval(()=>{t.isExternalTimer||t.timerFunction(j(t,fl))},j(this,fl)))},_h=function(){this.setState(Q.paused),this.scheduler.keepThread=!0,this.scheduler.unmarkCurrentlyExecutedSingleStep(),this.showProgramPointer(this.scheduler.getNextStepPosition()),this.updateDebugger()},Bp=function(t){var s;const e=this.scheduler.getCurrentThread(),i=e.currentProgramState;if(this.main.getCurrentWorkspace().getCurrentlyEditedModule()!=i.program.module){alert(pt.CantJumpToLine());return}const n=(s=i.currentStepList.find(a=>a.range.startLineNumber<=t&&a.range.endLineNumber>=t))==null?void 0:s.index;if(!n){alert(pt.CantJumpToLine());return}i.stepIndex=n,this.showProgramPointer(this.scheduler.getNextStepPosition(e))},Op=function(){let t=this.main.getCurrentWorkspace().getCurrentlyEditedModule(),e=this.main.getMainEditor().getSelection().startLineNumber,i=t.findStep(e);if(!i){alert("Es gibt keinen ausführbaren Code an der Zeile des Cursors.");return}if(this.scheduler.state!=Q.paused){if(this.scheduler.state==Q.not_initialized)return;this.printManager.clear(),ne(this,Me,yo).call(this,this.executable),this.resetRuntime()}i.setBreakpoint(!0),this.start(void 0,!1)},Vp=function(){this.scheduler.stepOut(()=>{this.pause()}),this.setState(Q.running)},Lp=function(){this.actionManager&&(this.actionManager.registerAction("interpreter.start",["F5"],pt.runProgram(),()=>{this.actionManager.isActive("interpreter.start")?this.start():this.pause()}),this.actionManager.registerAction("interpreter.pause",["F5"],pt.pause(),()=>{this.actionManager.isActive("interpreter.start")?this.start():this.pause()}),this.actionManager.registerAction("interpreter.stop",[],pt.stop(),()=>{var t,e;((t=this.main)==null?void 0:t.getRepl().state)=="standalone"?((e=this.main)==null||e.getRepl().init(this.executable),this.setState(Q.stopped)):this.stop(!1)}),this.actionManager.registerAction("interpreter.toggleBreakpoint",["F9"],pt.toggleBreakpoint(),()=>{this.breakpointManager.toggleBreakpoint(this.main.getMainEditor().getSelection().startLineNumber)}),this.actionManager.registerAction("interpreter.stepOver",["F10"],pt.stepOver(),()=>{this.executeOneStep(!1)}),this.actionManager.registerAction("interpreter.stepInto",["F11"],pt.stepInto(),()=>{this.executeOneStep(!0)}),this.actionManager.registerAction("interpreter.stepOut",[],pt.stepOut(),()=>{ne(this,Me,Vp).call(this)}),this.actionManager.registerAction("interpreter.restart",[],pt.restart(),()=>{var t,e,i;this.stop(!0),(i=(e=(t=this.main)==null?void 0:t.getBottomDiv())==null?void 0:e.console)==null||i.clear()}),this.actionManager.registerAction("interpreter.goto",[],pt.goto(),()=>{ne(this,Me,Bp).call(this,this.main.getMainEditor().getSelection().startLineNumber)}),this.actionManager.registerAction("interpreter.gotoCursor",[],T.ProgramGotoCursor(),()=>{ne(this,Me,Op).call(this)}))},Fp=function(){return this.executable!=null&&this.executable.hasTests()},zh=function(){var t,e,i;return(i=this.executable)==null?void 0:i.findStartableModule((e=(t=this.main)==null?void 0:t.getCurrentWorkspace())==null?void 0:e.getCurrentlyEditedModule())},qh=function(t){var i,n,s;if(this.actionManager){for(let A of j(this,Kd))this.actionManager.setActive("interpreter."+A,j(this,jr)[A][t]);((n=(i=this.main)==null?void 0:i.getRepl())==null?void 0:n.state)=="standalone"&&this.actionManager.setActive("interpreter.stop",!0);const l=ne(this,Me,zh).call(this)!=null;let h=l||t==2&&this.scheduler.state<=2,c=j(this,jr).start[t];c=c&&h;let u=j(this,jr).restart[t];u=u&&l;let g=j(this,jr).stepOver[t];g=g&&h;let f=j(this,jr).stepInto[t];f=f&&h;let b=j(this,jr).gotoCursor[t];b=b&&h,this.actionManager.showHideButtons("interpreter.start",c),this.actionManager.showHideButtons("interpreter.pause",!c),this.actionManager.setActive("interpreter.restart",u),this.actionManager.setActive("interpreter.stepOver",g),this.actionManager.setActive("interpreter.stepInto",f),this.actionManager.setActive("interpreter.gotoCursor",b),this.actionManager.setActive("interpreter.startTests",ne(this,Me,Fp).call(this)&&t==Q.stopped),Object.values(Q).filter(A=>typeof A=="string").forEach(A=>{this.actionManager.setEditorContext("Scheduler_"+A,Q[A]==t)})}let e=[];if(this.executable)for(let a of this.executable.moduleManager.modules)a.isStartable()&&e.push(a.file);(s=this.main)==null||s.markFilesAsStartable(e,t>=3)},yo=function(t,e,i="run"){let n=ne(this,Me,zh).call(this);if(e)for(let s of t.moduleManager.modules)s.file==e&&(n=s);this.setState(Q.stopped),J(this,Mr,this.scheduler.init(t,n,i)),j(this,Mr)&&(this.codeReachedAssertions.init(t.moduleManager),j(this,Mr).maxStepsPerSecond=this.stepsPerSecondGoal,j(this,Mr).state=B.running)},Z(Ts,bl,"ProgramPointer"),r(Ts,"TimerCountIndentifier","TimerCount");let ra=Ts;class _p{constructor(t,e){r(this,"pressedKeysLowerCase",new Map);r(this,"pressedKeys",new Map);r(this,"keyPressedCallbacks",[]);r(this,"keyUpCallbacks",[]);r(this,"keyDownCallbacks",[]);r(this,"internalKeyboardListeners",[]);this.element=t,this.main=e,this.registerListeners(t)}destroy(){this.element.off("keydown"),this.element.off("keyup"),this.element.off("keypressed")}registerListeners(t){this.element=t;let e=this;t.on("keydown",i=>{let n=i.key;if(n==null)return!0;e.pressedKeysLowerCase.set(n.toLowerCase(),!0),e.pressedKeys.set(n,!0);for(let s of e.keyDownCallbacks)s(n,i.shiftKey,i.ctrlKey,i.altKey);return this.main.isEmbedded()&&this.main.getInterpreter().scheduler.state==Q.running&&!this.main.getMainEditor().hasTextFocus()&&["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"," "].indexOf(i.key)>=0?(i.preventDefault(),!1):!0}),t.on("keyup",i=>{let n=i.key;if(n==null)return!0;if(!(typeof n>"u")){e.pressedKeysLowerCase.set(n.toLowerCase(),!1),e.pressedKeys.set(n,!1);for(let s of e.keyUpCallbacks)s(n);return!0}}),t.on("keyup",i=>{let n=i.key;i.shiftKey&&n.length>1&&(n="[shift]+"+n),i.ctrlKey&&n.length>1&&(n="[ctrl]+"+n),i.altKey&&n.length>1&&(n="[alt]+"+n);for(let s of e.keyPressedCallbacks)s(n);return!0}),t.on("keydown",i=>{let n=i.key;for(let s of e.internalKeyboardListeners)s.onKeyDown(n,i.shiftKey,i.ctrlKey,i.altKey);return!0})}isPressed(t){return t==null?null:this.pressedKeysLowerCase.get(t.toLowerCase())==!0}isAnyKeyPressed(){return this.pressedKeysLowerCase.size>0}clearPressedKeys(){this.pressedKeysLowerCase.clear(),this.pressedKeys.clear()}getAnyPressedKey(){return this.pressedKeysLowerCase.size==0?"":this.pressedKeys.keys().next().value}unsubscribeAllListeners(){this.keyPressedCallbacks=[],this.keyDownCallbacks=[],this.keyUpCallbacks=[],this.internalKeyboardListeners=[]}addKeyPressedListener(t){this.keyPressedCallbacks.push(t)}addKeyUpListener(t){this.keyUpCallbacks.push(t)}addKeyDownListener(t){this.keyDownCallbacks.push(t)}addInternalKeyboardListener(t){this.internalKeyboardListeners.push(t)}removeInternalKeyboardListener(t){let e=this.internalKeyboardListeners.indexOf(t);e>=0&&this.internalKeyboardListeners.splice(e,1)}removeKeyPressedListener(t){this.keyPressedCallbacks.splice(this.keyPressedCallbacks.indexOf(t),1)}removeKeyUpListener(t){this.keyUpCallbacks.splice(this.keyUpCallbacks.indexOf(t),1)}removeKeyDownListener(t){this.keyDownCallbacks.splice(this.keyDownCallbacks.indexOf(t),1)}}class zp{constructor(t){this.main=t,H.registerEditorOpener(this)}openCodeEditor(t,e,i){var l;let n=this.main.getMainEditor(),s=(l=this.main.getCurrentWorkspace())==null?void 0:l.getFiles().find(h=>{var c;return((c=h.getMonacoModel())==null?void 0:c.uri)==e}),a=s==null?void 0:s.getMonacoModel();if(a){if(n.setModel(a),!i)return!1;let h=i.startLineNumber?ee.getStartPosition(i):i;return n.setPosition(h),n.revealLineInCenterIfOutsideViewport(h.lineNumber),!0}return!1}}class mm{constructor(){r(this,"monacoModelToDeltaDecorationsMap",new Map)}markErrors(t,e){let i=t.map(a=>({startLineNumber:a.range.startLineNumber,startColumn:a.range.startColumn,endLineNumber:a.range.endLineNumber,endColumn:a.range.endColumn,message:a.message,severity:this.errorLevelToMarkerSeverity(a.level)}));H.setModelMarkers(e,"martin",i);let n=t.map(a=>({range:a.range,options:{linesDecorationsClassName:this.getLinesDecorationsClassName(a.level),minimap:{position:H.MinimapPosition.Inline,color:this.getMinimapColor(a.level),darkColor:this.getMinimapColor(a.level)}}})),s=this.monacoModelToDeltaDecorationsMap.get(e)||[];e.isDisposed()||this.monacoModelToDeltaDecorationsMap.set(e,e.deltaDecorations(s,n))}markErrorsOfModule(t){t.file instanceof Ge&&this.markErrors(t.errors,t.file.getMonacoModel())}errorLevelToMarkerSeverity(t){switch(t){case"info":return hh.Info;case"warning":return hh.Warning;case"error":return hh.Error}}getLinesDecorationsClassName(t){switch(t){case"error":return"jo_revealErrorLine";case"warning":return"jo_revealWarningLine";case"info":return"jo_revealInfoLine"}}getBorderLeftClassName(t){switch(t){case"error":return"jo_borderLeftError";case"warning":return"jo_borderLeftWarning";case"info":return"jo_borderLeftInfo"}}getMinimapColor(t){switch(t){case"error":return"#bc1616";case"warning":return"#cca700";case"info":return"#75beff"}}}class qp{constructor(t){r(this,"editor");r(this,"keyToDecorationsMap",new Map);this.main=t,this.editor=t.getMainEditor()}fileIsCurrentlyShownInEditor(t){var e;return t?((e=this.main.getCurrentWorkspace())==null?void 0:e.getCurrentlyEditedFile())==t:!1}show(t,e){t.range.endLineNumber>t.range.startLineNumber&&(t.range={startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:t.range.startLineNumber,endColumn:1e3});let i;t.programOrmoduleOrFile instanceof qr?i=t.programOrmoduleOrFile.module.file:t.programOrmoduleOrFile instanceof vp?i=t.programOrmoduleOrFile.file:i=t.programOrmoduleOrFile,i instanceof Ge&&i.getMonacoModel()&&this.main.showProgramPosition(i,t.range,!1);let n=this.keyToDecorationsMap.get(e.key);n==null||n.clear();let s=[];s.push({range:t.range,options:{isWholeLine:e.isWholeLine,className:e.className,overviewRuler:{color:e.rulerColor,position:H.OverviewRulerLane.Center},minimap:{color:e.minimapColor,position:H.MinimapPosition.Inline}}}),e.beforeContentClassName&&s.push({range:t.range,options:{beforeContentClassName:e.beforeContentClassName}});let a=this.editor.createDecorationsCollection(s);this.keyToDecorationsMap.set(e.key,a)}hide(t){var e;(e=this.keyToDecorationsMap.get(t))==null||e.clear(),this.keyToDecorationsMap.delete(t)}hideAll(){this.keyToDecorationsMap.forEach((t,e)=>{t==null||t.clear()}),this.keyToDecorationsMap.clear()}}var yl,vl,Al;class db{constructor(t,e,i){Z(this,yl,new Map);Z(this,vl,new Map);Z(this,Al,new Map);r(this,"mains",new Set);this.name=t,this.fileEndingWithDot=e,this.monacoLanguageSelector=i}getCompiler(t){return j(this,yl).get(t)}getRepl(t){return j(this,vl).get(t)}getSettings(t){return j(this,Al).get(t)}registerCompiler(t,e){j(this,yl).set(t,e),this.mains.add(t)}registerRepl(t,e){j(this,vl).set(t,e),this.mains.add(t)}registerSettings(t,e){j(this,Al).set(t,e),this.mains.add(t)}}yl=new WeakMap,vl=new WeakMap,Al=new WeakMap;class or{constructor(t){this.language=t}findMainForModel(t){let e=H.getEditors().find(i=>i.getModel()==t);for(let i of this.language.mains)if(i.getMainEditor()==e||i.getReplEditor()==e)return i}}class hb extends or{constructor(t){super(t),O.registerColorProvider(t.monacoLanguageSelector,this)}async provideDocumentColors(t,e){var l,h;let i=this.findMainForModel(t);if(!i)return;let n=(l=i.getCurrentWorkspace())==null?void 0:l.getFileForMonacoModel(t);if(!n)return;let s=i.getCompiler();s.findModuleByFile(n)||await s.eventManager.waitFor("compilationFinishedWithNewExecutable");let a=(h=i.getCurrentWorkspace())==null?void 0:h.getModuleForMonacoModel(t);if(a)return a.isDirty()&&await i.getCompiler().waitTillCompilationFinished(),a.colorInformation}provideColorPresentations(t,e,i){var n=e.color,s=t.getValueInRange(e.range),a=Math.round(n.red*255),l=Math.round(n.green*255),h=Math.round(n.blue*255),c;let u=this.toHex2Digits(a)+this.toHex2Digits(l)+this.toHex2Digits(h),g=a+", "+l+", "+h;return s.startsWith("#")?c="#"+u:s.startsWith("0x")?c="0x"+u:s.startsWith("rgb")?n.alpha<.999?c="rgba("+g+", "+n.alpha+")":c="rgb("+g+")":(s.startsWith("new")||s.startsWith("Color"))&&(c="new Color("+g+")"),[{label:c}]}toHex2Digits(t){let e=t.toString(16);for(;e.length<2;)e="0"+e;return e}}var On,Hd,Np;class Wp{constructor(t,e,i,n,s){Z(this,Hd);r(this,"staticInitializationSequence",[]);Z(this,On);r(this,"isCompiledToJavascript",!1);this.classObjectRegistry=t,this.moduleManager=e,this.libraryModuleManager=i,this.globalErrors=n,this.exceptionTree=s,ne(this,Hd,Np).call(this,n)}compileToJavascript(){this.isCompiledToJavascript||this.moduleManager.compileModulesToJavascript()&&(this.isCompiledToJavascript=!0)}initializeClassObjects(){for(const[t,e]of Object.entries(this.classObjectRegistry)){let i=e.type;i instanceof hm&&i.initClassObject()}}hasTests(){return j(this,On)||this.getTestMethods(),j(this,On).size>0}getTestMethods(){if(j(this,On))return j(this,On);J(this,On,new Map);for(const t of this.moduleManager.modules)for(const e of t.types)if(e instanceof je){const i=e.getOwnMethods().filter(s=>{var a;return!s.isConstructor&&s.hasAnnotation("Test")&&((a=s.returnParameterType)==null?void 0:a.identifier)=="void"&&s.parameters.length==0});if(i.length==0)continue;let n=j(this,On).get(e);n||(n=[],j(this,On).set(e,n)),n.push(...i)}return j(this,On)}findStartableModule(t){if(t!=null&&t.isStartable())return t;if(!(t!=null&&t.hasErrors())){const e=this.moduleManager.modules.filter(i=>i.isStartable());if(e.length===1)return e[0]}return null}getAllErrors(){let t=this.globalErrors;for(const e of this.moduleManager.modules)t=t.concat(e.errors);return t}}On=new WeakMap,Hd=new WeakSet,Np=function(t){const e=[];this.staticInitializationSequence=[];for(const n of this.moduleManager.modules.filter(s=>!s.hasErrors()))if(n.ast)for(const s of n.ast.innerTypes)s.resolvedType&&e.push(s.resolvedType);let i=!1;for(;!i&&e.length>0;){i=!0;for(let n=0;n0&&this.staticInitializationSequence.push({klass:s.runtimeClass,program:s.staticInitializer});const l=e.indexOf(s);l>=0&&e.splice(l,1),n--,i=!1}}}if(e.length>0){const n=v.cyclicReferencesAmongStaticVariables(e.map(s=>s.identifier).join(", "));t.push({message:n.message,id:n.id,level:"error",range:re.instance})}};class mi{}class ui extends hm{constructor(e,i,n,s,a){super(e,i,n,s);r(this,"fields",[]);r(this,"methods",[]);r(this,"id");r(this,"implements",[]);this.baseEnumClass=a,this.id=Math.trunc(Math.random()*Number.MAX_SAFE_INTEGER)}getCompletionItemDetail(){return v.enum()}getField(e,i,n=!1){let s=this.getFields().find(a=>a.identifier==e&&a.visibility<=i&&(a._isStatic||!n));return s||(i==m.keywordPrivate&&(i=m.keywordProtected),this.baseEnumClass.getField(e,i,n))}removeField(e){let i=this.fields.findIndex(n=>n.identifier==e);i>=0&&this.fields.splice(i,1)}initRuntimeClass(e){var n;let i=this;this.runtimeClass=(n=class extends e{constructor(s,a){super(s,a)}},r(n,"type",i),n)}getExtends(){return this.baseEnumClass}isGenericTypeParameter(){return!1}isGenericVariant(){return!1}getFile(){return this.module.file}getCopyWithConcreteType(e){return this}getImplements(){return this.implements}getFields(){return this.fields}getOwnMethods(){return this.methods}getAllMethods(){return this.getOwnMethods().concat(this.baseEnumClass.getAllMethods())}canImplicitlyCastTo(e){if(e.isPrimitive)return!1;if(e instanceof Dt){for(let i of this.implements)if(i.canExplicitlyCastTo(e))return!0;return!1}return e instanceof ui?e==this:e instanceof je?e.identifier=="Object":!1}canExplicitlyCastTo(e){return this.canImplicitlyCastTo(e)}toString(){return this.identifier}getAbsoluteName(){return this.pathAndIdentifier}getDeclaration(){let e=we[this.visibility]+" ";return this.isStatic&&(e+="static "),e+="enum "+this.identifier,e}getCompletionItems(e,i,n,s,a,l){let h=[];for(let c of this.getFields().filter(u=>u.visibility<=e&&(u._isStatic||!l)))h.push({label:c.toString(),kind:O.CompletionItemKind.Field,insertText:c.identifier,range:s,documentation:c.documentation==null?void 0:{value:typeof c.documentation=="string"?c.documentation:c.documentation()}});for(let c of this.getAllMethods().filter(u=>(u.classEnumInterface==this||u.visibility!=m.keywordPrivate)&&(u.isStatic||!l)))h.push({label:c.getCompletionLabel(),filterText:c.identifier,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]},kind:O.CompletionItemKind.Method,insertText:c.getCompletionSnippet(i),range:s,detail:c.returnParameterType?c.returnParameterType.getDeclaration():"void",insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,documentation:c.documentation==null?void 0:{value:typeof c.documentation=="string"?c.documentation:c.documentation()}});return h}addValuesMethod(e,i){e._values=e["_mn$values$"+this.identifier+"_I$"]=()=>e.values;let n=new Bi("values",re.instance,this.module,m.keywordPublic);n.returnParameterType=new ke(this,1,this.module,re.instance),n.isStatic=!0,n.hasImplementationWithNativeCallingConvention=!0,this.methods.push(n),e._valueOf=e["_mn$valueOf$"+this.identifier+"$string"]=a=>{let l=e[a];return l||null};let s=new Bi("valueOf",re.instance,this.module,m.keywordPublic);s.returnParameterType=this,s.parameters.push(new Fr("name",re.instance,this.module,i,!0,!1,!1)),s.isStatic=!0,s.hasImplementationWithNativeCallingConvention=!0,this.methods.push(s)}}class ba{static findCycle(t){for(let e of t.typestore.getNonPrimitiveTypes()){if(e instanceof je){let i=ba.classHelper(e,[]);if(i)return ba.reportError(i,"extends"),!0}if(e instanceof Dt){let i=ba.interfaceHelper(e,[]);if(i)return ba.reportError(i,"implements"),!0}}return!1}static reportError(t,e){t.push(t[0]);let i=v.cycleInInheritenceHierarchy(t.map(n=>n.identifier).join(" "+e+" "));for(let n of t){let s=n.module;s instanceof lm&&s.errors.push({message:i.message,id:i.id,level:"error",range:n.identifierRange})}}static classHelper(t,e){if(e.includes(t))return e;if(e.push(t),t.getExtends()){let i=this.classHelper(t.getExtends(),e);if(i)return i}e.pop()}static interfaceHelper(t,e){if(e.includes(t))return e;e.push(t);for(let i of t.getExtends()){let n=this.interfaceHelper(i,e);if(n)return n}e.pop()}}class Wh{constructor(t,e){r(this,"dirtyModules");r(this,"classDeclarationNodes",[]);r(this,"interfaceDeclarationNodes",[]);r(this,"enumDeclarationNodes",[]);r(this,"absoluteNameToResolvedTypeMap",new Map);this.moduleManager=t,this.libraryModuleManager=e,this.dirtyModules=this.moduleManager.getNewOrDirtyModules()}resolve(){return this.gatherTypeDefinitionNodes(),this.generateNewTypesWithGenericsButWithoutFieldsAndMethodsAndResolveOuterTypes(),this.resolveTypeReferences(),this.resolveGenericParameterTypesAndExtendsImplements(),this.moduleManager.typestore.initFastExtendsImplementsLookup(),this.checkGenericTypeInstantiationNodes(),ba.findCycle(this.moduleManager)?!1:(this.buildAllMethods(),this.buildRuntimeClassesAndTheirFields(),!0)}gatherTypeDefinitionNodes(){let t=new Map;for(let e of this.dirtyModules)e.ast&&this.gatherTypeDefinitionNodesRecursively(e.ast,t)}gatherTypeDefinitionNodesRecursively(t,e){for(let i of t.innerTypes){let n=e.get(i.identifier);if(n){this.pushError(v.typenameAlreadyInUse(i.identifier,n.range,n.module.file.name),i.range,i.module,"error");continue}else{let s=this.moduleManager.typestore.getType(i.identifier);if(s){this.pushError(v.typenameAlreadyInUse(i.identifier,s.identifierRange,s.module.file.name),i.range,i.module,"error");continue}if(s=this.libraryModuleManager.typestore.getType(i.identifier),s){this.pushError(v.typenameUsedInLibrary(i.identifier),i.range,i.module,"error");continue}}switch(e.set(i.identifier,i),i.kind){case m.keywordClass:this.classDeclarationNodes.push(i);break;case m.keywordInterface:this.interfaceDeclarationNodes.push(i);break;case m.keywordEnum:this.enumDeclarationNodes.push(i);break}i.innerTypes.length>0&&this.gatherTypeDefinitionNodesRecursively(i,new Map)}}generateNewTypesWithGenericsButWithoutFieldsAndMethodsAndResolveOuterTypes(){var i,n,s;let t=[];for(let a of this.classDeclarationNodes){let l=a.module,h=new je(a.identifier,a.identifierRange,a.path,a.module,a.range);this.generateGenericParameters(a,h,l),a.resolvedType=h,h.visibility=a.visibility,h.isStatic=a.isStatic,h._isAbstract=a.isAbstract,h.documentation=a.documentation,a.isMainClass&&(h.isMainClass=!0,h.staticType.isMainClass=!0),a.identifier!=""&&(this.moduleManager.typestore.addType(h),l.types.push(a.resolvedType)),((i=a.parent)==null?void 0:i.kind)!=m.global&&t.push(a),l.compiledSymbolsUsageTracker.registerUsagePosition(h,l.file,a.identifierRange),this.generateMethodGenerics(a.methods,l)}for(let a of this.interfaceDeclarationNodes){let l=new Dt(a.identifier,a.identifierRange,a.path,a.module),h=a.module;this.generateGenericParameters(a,l,h),a.resolvedType=l,l.visibility=a.visibility,l.documentation=a.documentation,this.moduleManager.typestore.addType(l),h.types.push(a.resolvedType),((n=a.parent)==null?void 0:n.kind)!=m.global&&t.push(a),h.compiledSymbolsUsageTracker.registerUsagePosition(l,h.file,a.identifierRange),this.generateMethodGenerics(a.methods,h)}let e=this.libraryModuleManager.typestore.getType("Enum");for(let a of this.enumDeclarationNodes){let l=new ui(a.identifier,a.identifierRange,a.path,a.module,e),h=a.module;a.resolvedType=l,l.visibility=a.visibility,l.documentation=a.documentation,l.isStatic=!0,this.moduleManager.typestore.addType(l),h.types.push(a.resolvedType),((s=a.parent)==null?void 0:s.kind)!=m.global&&t.push(a),h.compiledSymbolsUsageTracker.registerUsagePosition(l,h.file,a.identifierRange),this.generateMethodGenerics(a.methods,h)}for(let a of t)a.resolvedType.outerType=a.parent.resolvedType}generateMethodGenerics(t,e){for(let i of t)for(let n of i.genericParameterDeclarations){let s=new it(n.identifier,e,n.identifierRange);n.resolvedType=s}}generateGenericParameters(t,e,i){for(let n of t.genericParameterDeclarations){let s=new it(n.identifier,e.module,n.identifierRange);n.resolvedType=s,e.genericTypeParameters.push(s),i.registerTypeUsage(s,s.identifierRange)}}resolveTypeReferences(){for(let t of this.dirtyModules)if(t.ast)for(let e of t.ast.collectedTypeNodes)this.resolveTypeNode(e,t)}checkGenericTypeInstantiationNodes(){for(let t of this.dirtyModules)if(t.ast)for(let e of t.ast.collectedTypeNodes.filter(i=>i.kind==m.genericTypeInstantiation))this.checkGenericTypeInstantiation(e,t)}resolveTypeNode(t,e,i=!1){if(t.resolvedType)return t.resolvedType;switch(t.kind){case m.baseType:{let C=this.findPrimaryTypeByIdentifier(t,e);if(C){if(t.resolvedType=C,C.hasGenericParameters()&&!i){let q=Object.assign({},t),I=t;I.kind=m.genericTypeInstantiation,I.actualTypeArguments=[],I.baseType=q,I.resolvedType=void 0,C=this.resolveTypeNode(I,e,!0)}e.registerTypeUsage(C,t.range)}return C}case m.genericTypeInstantiation:let n=t;this.resolveTypeNode(n.baseType,e,!0);let s=n.baseType.resolvedType;if(!s)return;if(!s.hasGenericParameters()){this.pushError(v.typeIsNotGeneric(s.toString()),t.range,e);return}if(n.actualTypeArguments.length>s.genericTypeParameters.length){this.pushError(v.wrongNumberOfGenericParameters(s.toString(),s.genericTypeParameters.length,n.actualTypeArguments.length),n.range,e);return}let a=new Map;for(let C=0;C=0){let l=a;for(let h of l.genericParameterDeclarations){let c=h.resolvedType;if(c&&c.identifier==i)return c}for(let h of l.innerTypes)h.identifier==i&&h.resolvedType&&(n=h.resolvedType)}}n||(n=this.moduleManager.typestore.getType(i),n||(n=this.libraryModuleManager.typestore.getType(i)));let s=1;for(;sh.identifier==a.identifier);if(l)e.registerTypeUsage(l,a.identifierRange),l.visibility!=m.keywordPublic&&this.pushError(v.typeIsNotVisible(l.identifier),a.identifierRange,e,"error"),n=l;else{this.pushError(v.typeNotDefined(a.identifier),t.range,e);return}}else{this.pushError(v.typeHasNoSubtype(n.identifier,a.identifier),a.identifierRange,e,"error");return}s++}return n||this.pushError(v.typeNotDefined(i),t.range,e),n}resolveGenericParameterTypesAndExtendsImplements(){for(let t of this.classDeclarationNodes){let e=t.resolvedType.module,i=t.resolvedType;this.resolveGenericParameters(t,e),this.resolveClassExtendsImplements(t,i,e);for(let n of t.methods)this.resolveGenericParameters(n,e)}for(let t of this.interfaceDeclarationNodes){let e=t.resolvedType.module,i=t.resolvedType;this.resolveGenericParameters(t,e),this.resolveInterfaceExtends(t,i,e);for(let n of t.methods)this.resolveGenericParameters(n,e)}}resolveClassExtendsImplements(t,e,i){if(t.extends){let n=this.resolveTypeNode(t.extends,i);n instanceof xe&&n.isFinal&&this.pushError(v.cantExtendFinalClass(),t.extends.range,i,"error"),n instanceof Gt?e.setExtends(n):t.identifier==""&&n instanceof vi?(t.implements.push(t.extends),t.extends=void 0):this.pushError(v.afterExtendsClassNeeded(),t.extends.range,i)}e.getExtends()||e.setExtends(this.libraryModuleManager.typestore.getType("Object"));for(let n of t.implements){let s=this.resolveTypeNode(n,i);s instanceof vi?e.addImplements(s):this.pushError(v.onlyInterfacesAfterImplements(),n.range,i)}}resolveInterfaceExtends(t,e,i){for(let n of t.implements){let s=this.resolveTypeNode(n,i);s instanceof vi?e.addExtends(s):this.pushError(v.onlyInterfacesAfterExtends(),n.range,i)}}resolveGenericParameters(t,e){let i=this.libraryModuleManager.typestore.getType("Object");for(let n of t.genericParameterDeclarations){let s=n.resolvedType;if(!s)continue;let a=!0;if(n.extends)for(let l of n.extends){let h=this.resolveTypeNode(l,e);h&&(h instanceof Gt||h instanceof vi?(s.upperBounds.push(h),h instanceof Gt&&(a=!1)):this.pushError(v.onlyClassesOrInterfacesAsUpperBounds(),l.range,e))}if(a&&s.upperBounds.push(i),n.super){let l=this.resolveTypeNode(n.super,e);l&&(l instanceof Gt?s.lowerBound=l:this.pushError(v.onlyClassesOrInterfacesAsLowerBounds(),n.super.range,e))}}}pushError(t,e,i,n="error"){i.errors.push({message:t.message,id:t.id,range:e,level:n})}buildAllMethods(){for(let e of this.classDeclarationNodes)this.buildMethods(e);for(let e of this.enumDeclarationNodes)this.buildMethods(e);for(let e of this.interfaceDeclarationNodes)this.buildMethods(e);let t=this.classDeclarationNodes.filter(e=>e.resolvedType).map(e=>e.resolvedType);this.moduleManager.overriddenOrImplementedMethodPaths={};for(let e of t)e.checkIfInterfacesAreImplementedAndSupplementDefaultMethods(),e.takeSignaturesFromOverriddenMethods(this.moduleManager.overriddenOrImplementedMethodPaths),e.checkIfAbstractParentsAreImplemented()}buildMethods(t){var s,a;let e=t.resolvedType,i=e.module,n=new Map;for(let l of t.methods){let h;if(l.genericParameterDeclarations.length>0){let u=l.genericParameterDeclarations.map(g=>g.resolvedType);h=new na(l.identifier,l.identifierRange,i,l.visibility,u)}else h=new Bi(l.identifier,l.identifierRange,i,l.visibility);l.method=h,h.isAbstract=l.isAbstract,h.isFinal=l.isFinal,h.isStatic=l.isStatic,h.classEnumInterface=e,h.isConstructor=l.isConstructor,h.isDefault=l.isDefault,h.isSynchronized=l.isSynchronized,h.documentation=l.documentation,h.annotations=l.annotations,h.returnParameterType=l.isConstructor?e:(s=l.returnParameterType)==null?void 0:s.resolvedType;for(let u of l.parameters)if((a=u.type)!=null&&a.resolvedType){let g=u.isEllipsis?new ke(u.type.resolvedType,1,i,u.type.range):u.type.resolvedType,f=new Fr(u.identifier,u.identifierRange,i,g,u.isFinal,u.isEllipsis,u.trackMissingReadAccess);t.isMainClass&&l.identifier==_r.mainMethodIdentifier&&f.identifier=="args"&&(f.hiddenWhenDebugging=!0),i.compiledSymbolsUsageTracker.registerUsagePosition(f,i.file,u.identifierRange),h.parameters.push(f)}e.methods.push(h);let c=h.getSignature();n.get(c)?this.pushError(v.multipleMethodsWithSameSignature(c,n.get(c).identifierRange.startLineNumber),h.identifierRange,i,"error"):n.set(c,h)}}buildRuntimeClassesAndTheirFields(){let t=this.libraryModuleManager.typestore.getType("Enum").runtimeClass,e=mi;for(let s of this.enumDeclarationNodes){let a=s.resolvedType;a.initRuntimeClass(t),a.addValuesMethod(a.runtimeClass,this.libraryModuleManager.typestore.getType("string"));for(let l of s.fieldsOrInstanceInitializers)if(l.kind==m.fieldDeclaration){let h=new ji(l.identifier,l.range,a.module,l.type.resolvedType,l.visibility);h._isStatic=l.isStatic,h._isFinal=l.isFinal,h.classEnum=a,h.documentation=l.documentation,a.fields.push(h)}for(let l of s.valueNodes){let h=new ji(l.identifier,l.identifierRange,a.module,a,m.keywordPublic);h._isStatic=!0,h._isFinal=!0,h.classEnum=a,h.documentation=l.documentation,a.fields.push(h)}a.fields.push(a.createClassField(this.libraryModuleManager.typestore.getType("Class")))}for(let s of this.interfaceDeclarationNodes){let a=s.resolvedType;a.initRuntimeClass(e);for(let l of s.fieldsOrInstanceInitializers)if(l.kind==m.fieldDeclaration){let h=new ji(l.identifier,l.range,a.module,l.type.resolvedType,l.visibility);h._isStatic=l.isStatic,h._isFinal=l.isFinal,h.classEnum=a,a.fields.push(h)}}let i=this.libraryModuleManager.typestore.getType("Object"),n=!1;for(;!n;){n=!0;for(let s of this.classDeclarationNodes){let a=s.resolvedType;if(!a.runtimeClass){let l=a.getExtends();if(l||(l=i),l.runtimeClass){a.initRuntimeClass(l.runtimeClass);const h=new Map,c=new Map;for(let u of s.fieldsOrInstanceInitializers)if(u.kind==m.fieldDeclaration){if(u.isStatic){const f=c.get(u.identifier);if(f){this.pushError(v.multipleFieldsWithSameIdentifier(u.identifier,f.identifierRange.startLineNumber),u.identifierRange,s.module,"error");continue}c.set(u.identifier,u)}else{const f=h.get(u.identifier);if(f){this.pushError(v.multipleFieldsWithSameIdentifier(u.identifier,f.identifierRange.startLineNumber),u.identifierRange,s.module,"error");continue}h.set(u.identifier,u)}let g=new ji(u.identifier,u.range,a.module,u.type.resolvedType,u.visibility);g._isStatic=u.isStatic,g._isFinal=u.isFinal,g.classEnum=a,a.fields.push(g),u.resolvedField=g}a.fields.push(a.createClassField(this.libraryModuleManager.typestore.getType("Class"))),n=!1}}}}}}const Qr=class Qr extends z{constructor(e,i){super();r(this,"name");r(this,"ordinal");this.name=e,this.ordinal=i}_name(){return new G(this.name)}_ordinal(){return this.ordinal}_mj$toString$String$(e,i){e.s.push(new G(this.name)),i&&i()}};r(Qr,"__javaDeclarations",[{type:"declaration",signature:"class Enum extends Object"},{type:"method",signature:"public String name()",native:Qr.prototype._name},{type:"method",signature:"public int ordinal()",native:Qr.prototype._ordinal},{type:"method",signature:"public String toString()",java:Qr.prototype._mj$toString$String$}]),r(Qr,"type"),r(Qr,"values",[]);let Vi=Qr;class Lm{constructor(){r(this,"indexToObjectMap");r(this,"arrayElementsToResolve");r(this,"fieldsToResolve");r(this,"objectToIndexMap");r(this,"nextIndex",-1);r(this,"wrapperTypes",["String","Integer","Double","Boolean","Float","Character","Short","Long"])}toJson(t){return this.objectToIndexMap=new Map,this.nextIndex=0,JSON.stringify(this.anyToJson(t))}anyToJson(t){if(Array.isArray(t))return t.map(e=>this.anyToJson(e));if(typeof t=="object"){if(t==null)return null;if(t instanceof Vi)return t.ordinal;if(t instanceof z)return this.objectToJson(t)}else return t}objectToJson(t){let e=t.getType();if(this.wrapperTypes.indexOf(e.identifier)>=0)return t.value;let i=this.objectToIndexMap.get(t);if(i!=null)return{"!i":i};i=this.nextIndex++,this.objectToIndexMap.set(t,i);let n={"!k":e.identifier,"!i":i};if(e.module.isLibraryModule)return null;for(;e!=null;){let s=!0,a;for(let l of e.getFields())!l.isStatic()&&!l.isTransient()&&(s&&(s=!1,a={},n[e.identifier]=a),a[l.getInternalName()]=this.anyToJson(t[l.getInternalName()]));e=e.getExtends()}return n}fromJson(t,e){this.indexToObjectMap=new Map,this.arrayElementsToResolve=[],this.fieldsToResolve=[];let i=JSON.parse(t),n=this.fromJsonObj(i,e,()=>{});for(let s of this.fieldsToResolve){let a=this.indexToObjectMap.get(s.objectToResolveIndex);a!=null&&(s.objectHoldingField[s.fieldIdentifier]=a)}for(let s of this.arrayElementsToResolve){let a=this.indexToObjectMap.get(s.objectToResolveIndex);a!=null&&(s.array[s.arrayIndex]=a)}return n}fromJsonObj(t,e,i){if(t==null)return null;if(this.wrapperTypes.indexOf(e.identifier)>=0)return new e.runtimeClass(t);let n=t["!k"],s=t["!i"];if(n!=null){let a=new e.runtimeClass,l=t[e.identifier];if(l)for(;e!=null;){for(let h of e.getFields()){let c=h.getInternalName(),u=h.type;u instanceof je?a[c]=this.fromJsonObj(l[c],u,g=>{this.fieldsToResolve.push({objectHoldingField:a,fieldIdentifier:c,objectToResolveIndex:g})}):a[c]=this.fromJsonAny(l[c],u)}e=e.getExtends()}return this.indexToObjectMap.set(s,a),a}else{let a=this.indexToObjectMap.get(s);return a??(i(s),null)}}fromJsonAny(t,e){if(e instanceof ui){let i=t;return e.runtimeClass.values.find(n=>n.ordinal==i)}else{if(e instanceof ke&&Array.isArray(t))return this.fromJsonArray(t,e.elementType,e.dimension);if(e.isPrimitive)return t}}fromJsonArray(t,e,i){if(i>1)return t.map(n=>this.fromJsonArray(n,e,i-1));{let n=[];for(let s=0;s{this.arrayElementsToResolve.push({array:t,arrayIndex:s,objectToResolveIndex:l})})):n.push(this.fromJsonAny(a,e))}return n}}}class mo extends lm{constructor(){super(new th("Library file"),!0);r(this,"classesInterfacesEnums",[]);this.setDirty(!1)}prepareSystemModule(e){}getName(e){let i=e.__javaDeclarations.find(a=>a.type=="declaration");if(!i)return"";let s=i.signature.match(/^(class|enum|interface)\s([\wöäüßÖÄÜ]*)[<\s].*$/);return s&&s[2]?s[2]:""}}class Rp{constructor(){r(this,"gamepads",[]);let t=this;window.addEventListener("gamepadconnected",function(e){console.log("Gamepad connected at index %d: %s. %d buttons, %d axes.",e.gamepad.index,e.gamepad.id,e.gamepad.buttons.length,e.gamepad.axes.length),t.gamepads.indexOf(e.gamepad)<0&&t.gamepads.push(e.gamepad)}),window.addEventListener("gamepaddisconnected",function(e){console.log("Gamepad disconnected from index %d: %s",e.gamepad.index,e.gamepad.id);let i=t.gamepads.indexOf(e.gamepad);i>=0&&t.gamepads.splice(i,1)})}isGamepadButtonPressed(t,e){let i=navigator.getGamepads()[t];if(i==null)return!1;let n=i.buttons[e];return n?n.pressed:!1}getGamepadAxisValue(t,e){let i=navigator.getGamepads()[t];return i==null?0:i.axes[e]}isGamepadConnected(t){return navigator.getGamepads()[t]!=null}}const Ce=class Ce extends z{constructor(){super(...arguments);r(this,"isActing",!0);r(this,"isDestroyed",!1);r(this,"actorManager")}copyFrom(e){this.isActing=e.isActing,this.isDestroyed=e.isDestroyed}_registerListeners(e){this.actorManager=e.scheduler.interpreter.actorManager,this._mj$act$void$!=Ce.prototype._mj$act$void$&&this.actorManager.registerActor(this,"act"),this._mj$act$void$double!=Ce.prototype._mj$act$void$double&&this.actorManager.registerActor(this,"actWithTime"),this._mj$onKeyDown$void$String!=Ce.prototype._mj$onKeyDown$void$String&&this.actorManager.registerActor(this,"keyDown"),this._mj$onKeyTyped$void$String!=Ce.prototype._mj$onKeyTyped$void$String&&this.actorManager.registerActor(this,"keyPressed"),this._mj$onKeyUp$void$String!=Ce.prototype._mj$onKeyUp$void$String&&this.actorManager.registerActor(this,"keyUp")}_cj$_constructor_$Actor$(e,i){e.s.push(this),i&&i()}_mj$act$void$(e,i){}_mj$act$void$double(e,i,n){}_mj$onKeyTyped$void$String(e,i,n){}_mj$onKeyUp$void$String(e,i,n){}_mj$onKeyDown$void$String(e,i,n){}_mj$destroy$void$(e){this.destroy()}_mj$isKeyUp$boolean$string(e,i,n){let s=e.scheduler.interpreter.keyboardManager;if(!s){e.s.push(!0);return}e.s.push(!s.isPressed(n))}_mj$isKeyDown$boolean$string(e,i,n){let s=e.scheduler.interpreter.keyboardManager;if(!s){e.s.push(!1);return}e.s.push(s.isPressed(n))}_isDestroyed(){return this.isDestroyed}_isActing(){return this.isActing}_stopActing(){this.isActing=!1}_restartActing(){this.isActing=!0}destroy(){var e;(e=this.actorManager)==null||e.unregisterActor(this),this.isDestroyed=!0}_isGamepadButtonDown(e,i){return Ce.gamepadTool?Ce.gamepadTool.isGamepadButtonPressed(e,i):!1}_isGamepadConnected(e){return Ce.gamepadTool?Ce.gamepadTool.isGamepadConnected(e):!1}_getGamepadAxisValue(e,i){return Ce.gamepadTool?Ce.gamepadTool.getGamepadAxisValue(e,i):0}static _mj$setCallActMethodFrequency$void$int$(e,i){e.scheduler.interpreter.actorManager.setTimerFrequency(i)}};r(Ce,"__javaDeclarations",[{type:"declaration",signature:"abstract class Actor extends Object"},{type:"method",signature:"Actor()",java:Ce.prototype._cj$_constructor_$Actor$},{type:"method",signature:"void act()",java:Ce.prototype._mj$act$void$,comment:o.actorActMethodComment},{type:"method",signature:"void act(double deltaTime)",java:Ce.prototype._mj$act$void$double,comment:o.actorActMethodComment2},{type:"method",signature:"void onKeyTyped(String key)",java:Ce.prototype._mj$onKeyTyped$void$String,comment:o.actorOnKeyTypedComment},{type:"method",signature:"void onKeyUp(String key)",java:Ce.prototype._mj$onKeyUp$void$String},{type:"method",signature:"void onKeyDown(String key)",java:Ce.prototype._mj$onKeyDown$void$String},{type:"method",signature:"void destroy()",java:Ce.prototype._mj$destroy$void$},{type:"method",signature:"final boolean isKeyUp(string key)",java:Ce.prototype._mj$isKeyUp$boolean$string,comment:o.actorOnKeyUpComment},{type:"method",signature:"final boolean isKeyDown(string key)",java:Ce.prototype._mj$isKeyDown$boolean$string,comment:o.actorOnKeyDownComment},{type:"method",signature:"final boolean isActing()",native:Ce.prototype._isActing,comment:o.actorIsActingComment},{type:"method",signature:"final boolean isDestroyed()",native:Ce.prototype._isDestroyed,comment:o.actorIsDestroyedComment},{type:"method",signature:"final void stopActing()",native:Ce.prototype._stopActing,comment:o.actorStopActingComment},{type:"method",signature:"final void restartActing()",native:Ce.prototype._restartActing,comment:o.actorRestartActingComment},{type:"method",signature:"final boolean isGamepadButtonDown(int gamepadIndex, int buttonIndex)",native:Ce.prototype._isGamepadButtonDown,comment:o.actorIsGamepadButtonDownComment},{type:"method",signature:"final boolean isGamepadConnected(int gamepadIndex)",native:Ce.prototype._isGamepadConnected,comment:o.actorIsGamepadConnectedComment},{type:"method",signature:"final double getGamepadAxisValue(int gamepadIndex, int axisIndex)",native:Ce.prototype._getGamepadAxisValue,comment:o.actorGetGamepadAxisValueComment},{type:"method",signature:"static void setActFrequency(int frequencyInHz)",java:Ce._mj$setCallActMethodFrequency$void$int$,comment:o.SystemToolsSetCallActMethodFrequency}]),r(Ce,"type"),r(Ce,"gamepadTool",typeof window>"u"?void 0:new Rp);let Yo=Ce;const Gp=""+new URL("assets/spritesheet.json-UMkCP08N.txt",import.meta.url).href,pm=""+new URL("assets/spritesheet-BWt2A0xs.png",import.meta.url).href;class cb{constructor(){r(this,"systemSpritesheetData");r(this,"systemTexture");r(this,"userSpritesheetData");r(this,"userTexture");r(this,"textureCache",new Map)}async init(t){this.systemTexture=await new Sl().loadAsync(pm),this.systemTexture.colorSpace=Il,this.systemTexture.magFilter=ma,this.systemTexture.needsUpdate=!0,this.systemSpritesheetData=await(await fetch(Gp)).json();let e=t.graphicsManager;e&&e.pixiSpritesheetData&&(this.userSpritesheetData=e.pixiSpritesheetData,this.userTexture=new zg(e.pngImageData,this.userSpritesheetData.meta.size.w,this.userSpritesheetData.meta.size.h,Tm,qg,void 0,void 0,void 0,ma,ma,void 0,Il),this.userTexture.needsUpdate=!0)}getFrame(t,e){var s;let i=t+"#"+e,n=this.systemSpritesheetData.frames[i];return n?n.isSystemSpritesheet=!0:(n=(s=this.userSpritesheetData)==null?void 0:s.frames[i],n&&(n.isSystemSpritesheet=!1)),n}getSpritesheetBasedTexture(t,e){var h;let i=t+"#"+e,n=this.systemSpritesheetData.frames[i],s,a=!1;if(n)s=this.systemTexture.clone();else{if(n=(h=this.userSpritesheetData)==null?void 0:h.frames[i],!n)throw new F(o.textureNotFoundError(t,e));s=this.userTexture.clone(),s.flipY=!0,a=!0}let l=n.frame;return s.userData.isPartOfSpritesheet=!0,s.userData.width=l.w,s.userData.height=l.h,s.userData.key=i,a?(s.repeat.set(l.w/this.userTexture.image.width,l.h/this.userTexture.image.height),s.offset.x=l.x/this.userTexture.image.width,s.offset.y=1-(l.h/this.userTexture.image.height+l.y/this.userTexture.image.height)):(s.repeat.set(l.w/this.systemTexture.image.width,l.h/this.systemTexture.image.height),s.offset.x=l.x/this.systemTexture.image.width,s.offset.y=1-l.h/this.systemTexture.image.height-l.y/this.systemTexture.image.height),s.colorSpace=Il,s.magFilter=ma,s}getTextureWithOwnData(t,e){var u;let i=this.systemSpritesheetData.frames[t],n;if(i)n=this.systemTexture;else{if(i=(u=this.userSpritesheetData)==null?void 0:u.frames[t],!i)throw new F(o.textureNotFoundError(t,0));n=this.userTexture}let s=i.frame,a=new Wg(s.x,n.image.height-s.y-s.h),l=a.clone();l.x+=s.w,l.y+=s.h;let h=new Ng(s.w,s.h,{minFilter:ma,magFilter:ma,format:Tm,colorSpace:Il}),c=h.texture;return c.wrapS=$m,c.wrapT=$m,c.flipY=!0,e.initRenderTarget(h),e.copyTextureToTexture(n,c,new Rg(a,l)),c.userData.width=s.w,c.userData.height=s.h,c.userData.key=t,c.userData.renderTarget=h,c}destroy(){var t,e;(t=this.systemTexture)==null||t.dispose(),(e=this.userTexture)==null||e.dispose(),this.systemTexture=null,this.userTexture=null}}class ub{constructor(t){r(this,"axes",[{vector:new It(1,0,0),vector2:new It(0,-1,0),color:16711680,caption:"x",textureIndex:0},{vector:new It(0,1,0),vector2:new It(-1,0,0),color:65280,caption:"y",textureIndex:1},{vector:new It(0,0,1),vector2:new It(-1,0,0),color:2105599,caption:"z",textureIndex:2}]);this.world3d=t}show(){let t=new It(0,0,0);if(!this.axes[0].arrowHelper)for(let e of this.axes){const i=this.world3d.textureManager3d.getSpritesheetBasedTexture("standard_textures",e.textureIndex),n=new Gg({map:i,color:16777215,transparent:!0});e.sprite=new Kg(n),e.sprite.scale.set(.2,.2,.2),e.sprite.position.add(e.vector.clone().multiplyScalar(.8)),e.sprite.position.add(e.vector2.clone().multiplyScalar(.25)),e.arrowHelper=new Hg(e.vector,t,1,e.color,void 0,.08),this.world3d.scene.add(e.sprite,e.arrowHelper)}for(let e of this.axes)this.world3d.scene.add(e.arrowHelper);return this}hide(){for(let t of this.axes)this.world3d.scene.remove(t.sprite,t.arrowHelper)}}class mb{constructor(t,e){r(this,"texture");r(this,"mesh");r(this,"geometry");r(this,"material");r(this,"maxCount",60);r(this,"iOffset",0);r(this,"iSize",this.iOffset+3);r(this,"iUvBox",this.iSize+2);r(this,"iRotation",this.iUvBox+4);r(this,"iColor",this.iRotation+1);r(this,"iAlpha",this.iColor+3);r(this,"bufferElementSize",this.iAlpha+1);r(this,"interleavedBuffer",new Float32Array(this.maxCount*this.bufferElementSize));r(this,"instanceInterleavedBuffer");r(this,"fastsprites",[]);r(this,"dirty",!1);r(this,"oldCameraPos",new It);r(this,"intervalID");r(this,"indicesToRemove",[]);if(this.world3d=t,this.world3d.textureManager3d.userTexture){let i=this.world3d.textureManager3d.userSpritesheetData.frames,n=Object.getOwnPropertyNames(i);if(n.length>0){let s=n[0],a=s.substring(0,s.indexOf("#")),l=this.createSprite(1e-6,a,0);this.moveSprite(l,1e6,1e6,1e6)}}this.intervalID=setInterval(()=>{this.sortByDistanceToCamera()},10),e.eventManager.once("resetRuntime",()=>{this.intervalID&&clearInterval(this.intervalID),this.intervalID=null})}initMesh(t){this.geometry=new Ug;const e=[.5,.5,0,-.5,.5,0,-.5,-.5,0,.5,.5,0,-.5,-.5,0,.5,-.5,0],i=[1,1,0,1,0,0,1,1,0,0,1,0];this.geometry.setAttribute("position",new Em(e,3)),this.geometry.setAttribute("rawUV",new Em(i,2)),this.instanceInterleavedBuffer=new Qg(this.interleavedBuffer,this.bufferElementSize,1),this.geometry.setAttribute("offset",new pa(this.instanceInterleavedBuffer,3,this.iOffset)),this.geometry.setAttribute("size",new pa(this.instanceInterleavedBuffer,2,this.iSize)),this.geometry.setAttribute("uvBox",new pa(this.instanceInterleavedBuffer,4,this.iUvBox)),this.geometry.setAttribute("rotation",new pa(this.instanceInterleavedBuffer,1,this.iRotation)),this.geometry.setAttribute("color",new pa(this.instanceInterleavedBuffer,3,this.iColor)),this.geometry.setAttribute("alpha",new pa(this.instanceInterleavedBuffer,1,this.iAlpha)),this.geometry.instanceCount=t;var n=new Yg({uniforms:{systemTexture:{value:this.world3d.textureManager3d.systemTexture},userTexture:{value:this.world3d.textureManager3d.userTexture}},vertexShader:this.getVertexShader(),fragmentShader:this.getFragmentShader(),side:Eh,transparent:!0});n.needsUpdate=!0,this.mesh=new me(this.geometry,n),this.world3d.scene.add(this.mesh)}getVertexShader(){return` uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; attribute vec3 position; attribute vec2 rawUV; attribute vec3 offset; attribute vec2 size; attribute vec4 uvBox; attribute float rotation; attribute vec3 color; attribute float alpha; varying vec2 vUV; varying vec3 vColor; varying float vAlpha; varying float vIsUserTexture; void main() { vColor = color; vAlpha = alpha; if(size.x < 0.0){ vIsUserTexture = 1.0; } else { vIsUserTexture = 0.0; } vUV = uvBox.xy + rawUV * vec2(uvBox.z, uvBox.w); // uvBox.zw; vec4 mvPosition = modelViewMatrix[ 3 ]; vec2 rotatedPosition; rotatedPosition.x = cos( rotation ) * position.x - sin( rotation ) * position.y; rotatedPosition.y = sin( rotation ) * position.x + cos( rotation ) * position.y; mvPosition.xy = mvPosition.xy + rotatedPosition.xy * vec2(abs(size.x), size.y); gl_Position = projectionMatrix * (mvPosition + modelViewMatrix * vec4(offset, 0.0)); // vec4 mvPosition = modelViewMatrix * vec4(position * size, 1.0); //gl_Position = projectionMatrix * modelViewMatrix * vec4( offset + position * size, 1.0 ); } `}getFragmentShader(){return` precision mediump float; uniform sampler2D systemTexture; uniform sampler2D userTexture; //attribute vec3 color; //attribute float alpha; varying vec2 vUV; varying vec3 vColor; varying float vAlpha; varying float vIsUserTexture; void main() { if(vIsUserTexture > 0.5){ gl_FragColor = texture2D(userTexture, vUV) * vec4(vColor, vAlpha); } else { gl_FragColor = texture2D(systemTexture, vUV) * vec4(vColor, vAlpha); } } `}createSprite(t,e,i){let n=typeof e=="string"?e:e.name,s=this.world3d.textureManager3d.getFrame(n,i);if(!s)throw new F("Didn't find sprite "+i+" in library "+n+".");let a=s.frame,l=1024,h=1024,c=s.isSystemSpritesheet?this.world3d.textureManager3d.systemTexture:this.world3d.textureManager3d.userTexture;c.flipY=!0,l=c.image.width,h=c.image.height;let u=a.w/l,g=a.h/h,f=a.x/l,b=1-a.y/h-g;(this.geometry==null||this.geometry.instanceCount>=this.maxCount)&&(this.resizeBuffers(),this.sortByDistanceToCamera());let A=this.geometry.instanceCount,S={index:A};this.geometry.instanceCount++;let w=A*this.bufferElementSize;return this.interleavedBuffer[w+0]=0,this.interleavedBuffer[w+1]=0,this.interleavedBuffer[w+2]=0,this.interleavedBuffer[w+3]=s.isSystemSpritesheet?t:-t,this.interleavedBuffer[w+4]=a.h/a.w*t,this.interleavedBuffer[w+5]=f,this.interleavedBuffer[w+6]=b,this.interleavedBuffer[w+7]=u,this.interleavedBuffer[w+8]=g,this.interleavedBuffer[w+9]=0,this.interleavedBuffer[w+10]=1,this.interleavedBuffer[w+11]=1,this.interleavedBuffer[w+12]=1,this.interleavedBuffer[w+13]=1,this.fastsprites.push(S),this.dirty=!0,S}resizeBuffers(){console.log("resizeBuffers"),this.maxCount*=3;const t=new Float32Array(this.maxCount*this.bufferElementSize);t.set(this.interleavedBuffer),this.interleavedBuffer=t;let e=0;this.mesh&&(e=this.geometry.instanceCount,this.world3d.scene.remove(this.mesh),this.mesh.material.dispose(),this.mesh.geometry.dispose()),this.initMesh(e)}destroy(){this.mesh&&(this.world3d.scene.remove(this.mesh),this.mesh.material.dispose(),this.mesh.geometry.dispose())}removeSprite(t){this.indicesToRemove.push(t.index),this.dirty=!0}removeIntern(){for(;this.indicesToRemove.length>0;){let t=this.indicesToRemove.pop();const e=this.fastsprites.pop();if(t>16)/255,n=((e&65280)>>8)/255,s=(e&255)/255,a=t.index*this.bufferElementSize+this.iColor;this.interleavedBuffer[a]=i,this.interleavedBuffer[a+1]=n,this.interleavedBuffer[a+2]=s,this.dirty=!0}setAlpha(t,e){let i=t.index*this.bufferElementSize+this.iAlpha;this.interleavedBuffer[i]=e}moveSpriteTo(t,e,i,n){let s=t.index*this.bufferElementSize+this.iOffset;this.interleavedBuffer[s]=e,this.interleavedBuffer[s+1]=i,this.interleavedBuffer[s+2]=n,this.dirty=!0}getX(t){return this.interleavedBuffer[t.index*this.bufferElementSize+this.iOffset]}getY(t){return this.interleavedBuffer[t.index*this.bufferElementSize+this.iOffset+1]}getZ(t){return this.interleavedBuffer[t.index*this.bufferElementSize+this.iOffset+2]}sortByDistanceToCamera(){if(!this.mesh)return;this.instanceInterleavedBuffer.needsUpdate=!0;let t=this.world3d.currentCamera.camera3d,e=t.position;if(!this.dirty&&e.distanceTo(this.oldCameraPos)<.01)return;this.removeIntern();let i=this.geometry.instanceCount;if(i<2)return;this.oldCameraPos=e.clone(),this.dirty=!1;let n=t.getWorldDirection(new It).normalize(),s=new Float32Array(i);for(let a=0;as;)l--;if(a<=l){let h=t[a];t[a]=t[l],t[l]=h;let c=a*this.bufferElementSize,u=l*this.bufferElementSize;for(let f=0;f{this.destroyWorld(n)}),(b=n.graphicsManager)==null||b.registerGraphicSystem(this);let s=n.retrieveObject("World3dClass");if(s)return e.s.push(s),i&&i(),s;let a=e.state;e.state=B.waiting,n.storeObject("World3dClass",this),this.actorManager=new Sp(n);let l=(A=n.graphicsManager)==null?void 0:A.graphicsDiv,h=l.getElementsByClassName("world3d");for(let S=0;S0&&(c[0].style.pointerEvents="none"),this.graphicsDiv.style.overflow="hidden",this.graphicsDiv.innerHTML="",this.scene=new Zg;let u=new Hl(75,this.width/this.height,.1,1e3);this.currentCamera=new e.classes.PerspectiveCamera3d,this.currentCamera.camera3d=u,this.changeResolution(n,this.width,this.height),this.renderer=new Xg({antialias:!0}),this.renderer.setSize(this.width,this.height),this.graphicsDiv.appendChild(this.renderer.domElement),this.renderer.domElement.style.width="100%",this.renderer.domElement.style.height="100%",u.position.set(2,2,2),u.lookAt(new It(0,0,0)),this.startAnimationLoop(n),this.resizeObserver=new ResizeObserver(()=>{this.changeResolution(n,this.width,this.height)}),this.resizeObserver.observe(this.graphicsDiv.parentElement.parentElement),this.orbitControls=new rp(this.currentCamera.camera3d,this.renderer.domElement);const g=new e.classes.DirectionalLight3d;g.world3d=this,g.light.position.set(10,5,3),g.light.intensity=1.5,this.scene.add(g.light),this.lights.push(g);const f=new e.classes.AmbientLight3d;f.world3d=this,f.light.intensity=.5,this.scene.add(f.light),this.lights.push(f),this.scene.background=new zs(0,0,0),this.addCallbacks(n),this.textureManager3d=new cb,this.textureManager3d.init(n).then(()=>{this.coordinateSystemHelper=new ub(this).show(),this.fastSpriteManager=new mb(this,n),e.state=a,e.state=a,e.s.push(this),i&&i()})}startAnimationLoop(e){let i=()=>{this.renderer.render(this.scene,this.currentCamera.camera3d)};this.renderer.setAnimationLoop(i)}tick(e,i){i.timerFunction(e)}addCallbacks(e){let i=()=>{e.deleteObject("World3dClass"),e.eventManager.off(i),e.eventManager.off(n),this.destroyWorld(e)},n=()=>{this.onProgramStopped(),e.eventManager.off(n)};e.eventManager.on("resetRuntime",i),e.eventManager.on("stop",n)}destroyWorld(e){var i,n,s,a,l;for(;this.objects.length>0;)this.objects.pop().destroy();(i=this.resizeObserver)==null||i.disconnect(),(n=this.renderer)==null||n.dispose(),this.renderer=void 0,(s=this.graphicsDiv)==null||s.remove(),e.deleteObject("World3dClass"),e.deleteObject("robotWorldClass"),e.isExternalTimer=!1,(a=this.fastSpriteManager)==null||a.destroy(),(l=this.textureManager3d)==null||l.destroy()}changeResolution(e,i,n){var h,c,u;this.width=i,this.height=n;let s=this.graphicsDiv.parentElement.parentElement.getBoundingClientRect();(s.width==0||s.height==0)&&(s=this.graphicsDiv.parentElement.getBoundingClientRect());let a,l;i/n>s.width/s.height?(a=s.width,l=s.width/i*n):(l=s.height,a=s.height/n*i),l=Math.min(l,s.height),a=Math.min(a,s.width),((h=this.currentCamera)==null?void 0:h.camera3d)instanceof Hl&&(this.currentCamera.camera3d.aspect=a/l,this.currentCamera.camera3d.updateProjectionMatrix()),this.currentCamera.updateViewport(),(c=this.renderer)==null||c.setSize(a,l),(u=e.graphicsManager)==null||u.resizeGraphicsDivHeight()}onProgramStopped(){}registerActor(e,i){this.actorManager.registerActor(e,i)}unregisterActor(e){this.actorManager.unregisterActor(e)}hasActors(){return this.actorManager.hasActors()}_setBackgroundColor(e){if(e===null)throw new Kt(o.world3dColorNull());if(typeof e=="number"&&(this.scene.background=new zs(e)),typeof e=="string"){let i=ze.parseColorToOpenGL(e);this.scene.background=new zs(i.color)}typeof e=="object"&&(this.scene.background=new zs(e.red,e.green,e.blue))}_setCursor(e){this.graphicsDiv.style.cursor=e}_clear(){this.objects.forEach(e=>{e.destroy()}),this.scene.clear()}getIdentifier(){return"World3d"}addLight(e){this.lights.push(e),this.scene.add(e.light)}removeLight(e){this.scene.remove(e.light);let i=this.lights.indexOf(e);i>=0&&this.lights.splice(i,1)}_removeAllLights(){for(;this.lights.length>0;)this.scene.remove(this.lights.pop().light)}_removeLight(e){let i=this.lights.indexOf(e);i<0||(this.scene.remove(e.light),this.lights.splice(i,1))}_addLight(e){this.lights.push(e),this.scene.add(e.light)}_setCamera(e){if(e==null)throw new F("Camera must not be null.");this._removeOrbitControls(),this.currentCamera=e}_getCamera(){return this.currentCamera}_removeCoordinateAxes(){this.coordinateSystemHelper.hide()}_removeOrbitControls(){this.orbitControls.dispose(),this.orbitControls=null}static _getWorld3d(e){const i=e.scheduler.interpreter.retrieveObject("World3dClass");if(i==null)throw new F(o.actorWorld3dDoesntexistException());e.s.push(i)}};r(Pt,"__javaDeclarations",[{type:"declaration",signature:"class World3d"},{type:"method",signature:"World3d()",java:Pt.prototype._cj$_constructor_$World3d$},{type:"method",signature:"void setBackgroundColor(int colorAsRGBInt)",native:Pt.prototype._setBackgroundColor,comment:o.world3dSetBackgroundColorIntComment},{type:"method",signature:"void setBackgroundColor(String colorAsString)",native:Pt.prototype._setBackgroundColor,comment:o.world3dSetBackgroundColorStringComment},{type:"method",signature:"void setBackgroundColor(Color colorObject)",native:Pt.prototype._setBackgroundColor,comment:o.world3dSetBackgroundColorStringComment},{type:"method",signature:"void setCursor(string cursor)",native:Pt.prototype._setCursor,comment:o.world3dSetCursorComment},{type:"method",signature:"void clear()",native:Pt.prototype._clear,comment:o.world3dClearComment},{type:"method",signature:"void addMouseListener(MouseListener mouseListener)",template:"§1.mouseListener.addMouseListener(§2);",comment:o.world3dAddMouseListenerComment},{type:"method",signature:"Light3d[] getLights()",template:"§1.lights.slice()",comment:o.worldGetLightsComment},{type:"method",signature:"void removeAllLights()",native:Pt.prototype._removeAllLights,comment:o.worldRemoveAllLightsComment},{type:"method",signature:"void removeLight(Light3d light)",native:Pt.prototype._removeLight,comment:o.worldRemoveLightComment},{type:"method",signature:"void addLight(Light3d light)",native:Pt.prototype._addLight,comment:o.worldAddLightComment},{type:"method",signature:"void setCamera(Camera3d camera)",native:Pt.prototype._setCamera},{type:"method",signature:"Camera3d getCamera()",native:Pt.prototype._getCamera},{type:"method",signature:"void removeCoordinateAxes()",native:Pt.prototype._removeCoordinateAxes},{type:"method",signature:"void removeOrbitControls()",native:Pt.prototype._removeOrbitControls},{type:"method",signature:"static World3d getWorld3d()",java:Pt._getWorld3d,comment:o.getWorld3dComment}]),r(Pt,"type");let Wr=Pt;const nt=class nt extends Yo{constructor(){super(...arguments);r(this,"world3d");r(this,"cameraLookingAtThisObject")}getObject3d(){return null}_cj$_constructor_$Object3d$(e,i){if(e.s.push(this),this.world3d=e.scheduler.interpreter.retrieveObject("World3dClass"),!this.world3d){this.world3d=new Wr,this.world3d._cj$_constructor_$World3d$(e,()=>{e.s.pop(),this.world3d.objects.push(this),i&&i()});return}this.world3d.objects.push(this),i&&i()}constructorHelper(){}setVisible(e){this.getObject3d().visible=e}rotateX(e){}rotateY(e){}rotateZ(e){}scaleX(e){}scaleY(e){}scaleZ(e){}scaleDouble(e){}vscale(e){this.scaleX(e.v.x),this.scaleY(e.v.y),this.scaleZ(e.v.z)}move(e,i,n){}lookAt(e,i,n,s){let a=this.getObject3d();a.up=s.v.clone(),a.lookAt(new It(e,i,n))}lookAtTarget(e,i){let n=this.getObject3d();n.up=i.v.clone(),n.lookAt(e.getObject3d().position)}moveTo(e,i,n){}vmove(e){this.move(e.v.x,e.v.y,e.v.z)}vmoveTo(e){this.moveTo(e.v.x,e.v.y,e.v.z)}destroy(){super.destroy(),this.world3d.objects.splice(this.world3d.objects.indexOf(this),1)}_mj$getWorld3d$World3d(e,i){const n=e.scheduler.interpreter.retrieveObject("World3dClass");if(n==null)throw new F(o.actorWorld3dDoesntexistException());e.s.push(n)}};r(nt,"__javaDeclarations",[{type:"declaration",signature:"abstract final class Object3d extends Actor",comment:o.Object3dClassComment},{type:"method",signature:"Object3d()",java:nt.prototype._cj$_constructor_$Object3d$},{type:"method",signature:"abstract void move(double x,double y,double z)",native:nt.prototype.move},{type:"method",signature:"final void move(Vector3 v)",native:nt.prototype.vmove},{type:"method",signature:"abstract void moveTo(double x,double y,double z)",native:nt.prototype.moveTo},{type:"method",signature:"final void moveTo(Vector3 p)",native:nt.prototype.vmoveTo},{type:"method",signature:"void lookAt(double xTarget, double yTarget, double zTarget, Vector3 up)",native:nt.prototype.lookAt},{type:"method",signature:"void lookAt(Object3d target, Vector3 up)",native:nt.prototype.lookAtTarget},{type:"method",signature:"abstract void rotateX(double angleDeg)",native:nt.prototype.rotateX},{type:"method",signature:"abstract void rotateY(double angleDeg)",native:nt.prototype.rotateY},{type:"method",signature:"abstract void rotateZ(double angleDeg)",native:nt.prototype.rotateZ},{type:"method",signature:"abstract void scaleX(double angleDeg)",native:nt.prototype.scaleX},{type:"method",signature:"abstract void scaleY(double angleDeg)",native:nt.prototype.scaleY},{type:"method",signature:"abstract void scaleZ(double angleDeg)",native:nt.prototype.scaleZ},{type:"method",signature:"abstract void scale(Vector3 v)",native:nt.prototype.vscale},{type:"method",signature:"abstract void scale(double d)",native:nt.prototype.scaleDouble},{type:"method",signature:"double getX()",template:"§1.getObject3d().position.x"},{type:"method",signature:"double getY()",template:"§1.getObject3d().position.y"},{type:"method",signature:"double getZ()",template:"§1.getObject3d().position.z"},{type:"method",signature:"final World3d getWorld3d()",java:nt.prototype._mj$getWorld3d$World3d,comment:o.getWorld3dComment},{type:"method",signature:"final void setVisible(boolean isVisible)",native:nt.prototype.setVisible},{type:"method",signature:"abstract void destroy()",native:nt.prototype.destroy}]),r(nt,"type");let bs=nt;const Se=class Se extends z{constructor(e,i){super();r(this,"x");r(this,"y");this.x=e,this.y=i}_constructor2(e,i){return this.x=e,this.y=i,this}_equals(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)<1e-14}_plus(e){return new Se(this.x+e.x,this.y+e.y)}_minus(e){return new Se(this.x-e.x,this.y-e.y)}static _fromPolarCoordinates(e,i){let n=i/180*Math.PI;return new Se(e*Math.cos(n),e*Math.sin(n))}_getAngleDeg(){let e=Math.atan2(this.y,this.x)/Math.PI*180;return e>=0?e:360+e}_getAngleRad(){let e=Math.atan2(this.y,this.x);return e>=0?e:Math.PI*2+e}_getLength(){return Math.sqrt(this.x*this.x+this.y*this.y)}_getUnitVector(){let e=this.x*this.x+this.y*this.y;if(e<1e-14)return new Se(0,0);let i=Math.sqrt(e);return new Se(this.x/i,this.y/i)}_clone(){return new Se(this.x,this.y)}_setLength(e){let i=Math.sqrt(this.x*this.x+this.y*this.y);if(i>0){let n=e/i;this.x*=n,this.y*=n}return this}_add(e){return this.x+=e.x,this.y+=e.y,this}_sub(e){return this.x-=e.x,this.y-=e.y,this}_scalarProduct(e){return this.x*e.x+this.y*e.y}_scaledBy(e){return new Se(this.x*e,this.y*e)}_rotatedBy(e){let i=e/180*Math.PI,n=Math.sin(i),s=Math.cos(i);return new Se(this.x*s-this.y*n,this.x*n+this.y*s)}_rotate(e){let i=e/180*Math.PI,n=Math.sin(i),s=Math.cos(i),a=this.x*s-this.y*n,l=this.x*n+this.y*s;return this.x=a,this.y=l,this}_scale(e){return this.x*=e,this.y*=e,this}_distanceTo(e){let i=e.x-this.x,n=e.y-this.y;return Math.sqrt(i*i+n*n)}static _distance(e,i,n,s){let a=n-e,l=s-i;return Math.sqrt(a*a+l*l)}_mj$toString$String$(e,i){e.s.push(new G("("+this.x+", "+this.y+")")),i&&i()}_debugOutput(){return`{x = ${this.x}, y = ${this.y}}`}};r(Se,"__javaDeclarations",[{type:"declaration",signature:"class Vector2 extends Object",comment:o.Vector2ClassComment},{type:"field",signature:"public double x",comment:o.Vector2XComment},{type:"field",signature:"public double y",comment:o.Vector2YComment},{type:"method",signature:"Vector2(double x, double y)",native:Se.prototype._constructor2,comment:o.Vector2ConstructorComment},{type:"method",signature:"static Vector2 fromPolarCoordinates(double r, double angle)",native:Se._fromPolarCoordinates,comment:o.Vector2ToStringComment},{type:"method",signature:"final double getAngleDeg()",native:Se.prototype._getAngleDeg,comment:o.Vector2GetAngleDegComment},{type:"method",signature:"final double getAngleRad()",native:Se.prototype._getAngleRad,comment:o.Vector2GetAngleRadComment},{type:"method",signature:"final double getLength()",native:Se.prototype._getLength,comment:o.Vector2GetLengthComment},{type:"method",signature:"final Vector2 getUnitVector()",native:Se.prototype._getUnitVector,comment:o.Vector2GetUnitVectorComment},{type:"method",signature:"final Vector2 clone()",native:Se.prototype._clone,comment:o.Vector2CloneComment},{type:"method",signature:"final Vector2 setLength(double newLength)",native:Se.prototype._setLength,comment:o.Vector2SetLengthComment},{type:"method",signature:"final Vector2 scaledBy(double factor)",native:Se.prototype._scaledBy,comment:o.Vector2ScaledByComment},{type:"method",signature:"final Vector2 scale(double factor)",native:Se.prototype._scale,comment:o.Vector2ScaleComment},{type:"method",signature:"final Vector2 rotatedBy(double angleDeg)",native:Se.prototype._rotatedBy,comment:o.Vector2RotatedByComment},{type:"method",signature:"final Vector2 rotate(double angleDeg)",native:Se.prototype._rotate,comment:o.Vector2RotateComment},{type:"method",signature:"final Vector2 plus(Vector2 otherVector)",native:Se.prototype._plus,comment:o.Vector2PlusComment},{type:"method",signature:"final Vector2 minus(Vector2 otherVector)",native:Se.prototype._minus,comment:o.Vector2MinusComment},{type:"method",signature:"final Vector2 add(Vector2 otherVector)",native:Se.prototype._add,comment:o.Vector2AddComment},{type:"method",signature:"final Vector2 sub(Vector2 otherVector)",native:Se.prototype._sub,comment:o.Vector2SubComment},{type:"method",signature:"final double scalarProduct(Vector2 otherVector)",native:Se.prototype._scalarProduct,comment:o.Vector2ScalarProductComment},{type:"method",signature:"final double distanceTo(Vector2 otherVector)",native:Se.prototype._distanceTo,comment:o.Vector2DistanceToComment},{type:"method",signature:"final static double distance(double x1, double y1, double x2, double y2)",native:Se._distance,comment:o.Vector2DistanceComment},{type:"method",signature:"public boolean equals(Vector2 otherVector)",native:Se.prototype._equals,comment:o.objectEqualsComment},{type:"method",signature:"String toString()",java:Se.prototype._mj$toString$String$,comment:o.Vector2ToStringComment}]),r(Se,"type");let gs=Se;const $e=class $e extends z{constructor(e,i,n){super();r(this,"v");this.v=new It(e,i,n)}_constructor2(e,i,n){return this.v=new It(e,i,n),this}_constructor2xy(e,i){if(e===null)throw new Kt(o.Vector3xyNullPointerComment("xy"));return this.v=new It(e.x,e.y,i),this}_constructor2yz(e,i){if(i===null)throw new Kt(o.Vector3xyNullPointerComment("yz"));return this.v=new It(e,i.x,i.y),this}_equals(e){return Math.abs(this.v.x-e.v.x)+Math.abs(this.v.y-e.v.y)+Math.abs(this.v.z-e.v.z)<1e-14}_plus(e){return new $e(this.v.x+e.v.x,this.v.y+e.v.y,this.v.z+e.v.z)}_minus(e){return new $e(this.v.x-e.v.x,this.v.y-e.v.y,this.v.z-e.v.z)}_getLength(){return Math.sqrt(this.v.x*this.v.x+this.v.y*this.v.y+this.v.z*this.v.z)}_getUnitVector(){let e=this.v.x*this.v.x+this.v.y*this.v.y+this.v.z*this.v.z;if(e<1e-14)return new $e(0,0,0);let i=Math.sqrt(e);return new $e(this.v.x/i,this.v.y/i,this.v.z/i)}_clone(){return new $e(this.v.x,this.v.y,this.v.z)}_xy(){return new gs(this.v.x,this.v.y)}_xz(){return new gs(this.v.x,this.v.z)}_yz(){return new gs(this.v.y,this.v.z)}_setLength(e){let i=Math.sqrt(this.v.x*this.v.x+this.v.y*this.v.y+this.v.z*this.v.z);if(i>0){let n=e/i;this.v.x*=n,this.v.y*=n,this.v.z*=n}return this}_add(e){return this.v.x+=e.v.x,this.v.y+=e.v.y,this.v.z+=e.v.z,this}_sub(e){return this.v.x-=e.v.x,this.v.y-=e.v.y,this.v.z-=e.v.z,this}_scalarProduct(e){return this.v.x*e.v.x+this.v.y*e.v.y+this.v.z*e.v.z}_scaledBy(e){return new $e(this.v.x*e,this.v.y*e,this.v.z*e)}_scale(e){return this.v.x*=e,this.v.y*=e,this.v.z*=e,this}_distanceTo(e){let i=e.v.x-this.v.x,n=e.v.y-this.v.y,s=e.v.z-this.v.z;return Math.sqrt(i*i+n*n+s*s)}static _distance(e,i,n,s,a,l){let h=s-e,c=a-i,u=l-n;return Math.sqrt(h*h+c*c+u*u)}_mj$toString$String$(e,i){e.s.push(new G("("+this.v.x+", "+this.v.y+", "+this.v.z+")")),i&&i()}_debugOutput(){return`{x = ${this.v.x}, y = ${this.v.y}, z = ${this.v.z}}`}_applyMatrix4(e){return this.v.applyMatrix4(e.m),this}};r($e,"__javaDeclarations",[{type:"declaration",signature:"class Vector3 extends Object",comment:o.Vector3ClassComment},{type:"field",signature:"public double x",nativeIdentifier:"v.x",comment:o.Vector3XComment},{type:"field",signature:"public double y",nativeIdentifier:"v.y",comment:o.Vector3YComment},{type:"field",signature:"public double z",nativeIdentifier:"v.z",comment:o.Vector3YComment},{type:"method",signature:"Vector3(double x, double y, double z)",native:$e.prototype._constructor2,comment:o.Vector3ConstructorComment},{type:"method",signature:"Vector3(Vector2 xy, double z)",native:$e.prototype._constructor2xy,comment:o.Vector3ConstructorComment},{type:"method",signature:"Vector3(double x, Vector2 yz)",native:$e.prototype._constructor2yz,comment:o.Vector3ConstructorComment},{type:"method",signature:"final double getLength()",native:$e.prototype._getLength,comment:o.Vector3GetLengthComment},{type:"method",signature:"final Vector3 getUnitVector()",native:$e.prototype._getUnitVector,comment:o.Vector3GetUnitVectorComment},{type:"method",signature:"final Vector3 clone()",native:$e.prototype._clone,comment:o.Vector3CloneComment},{type:"method",signature:"final Vector2 xy()",native:$e.prototype._xy},{type:"method",signature:"final Vector2 xz()",native:$e.prototype._xz},{type:"method",signature:"final Vector2 yz()",native:$e.prototype._yz},{type:"method",signature:"final Vector3 setLength(double newLength)",native:$e.prototype._setLength,comment:o.Vector3SetLengthComment},{type:"method",signature:"final Vector3 scaledBy(double factor)",native:$e.prototype._scaledBy,comment:o.Vector3ScaledByComment},{type:"method",signature:"final Vector3 scale(double factor)",native:$e.prototype._scale,comment:o.Vector3ScaleComment},{type:"method",signature:"final Vector3 plus(Vector3 otherVector)",native:$e.prototype._plus,comment:o.Vector3PlusComment},{type:"method",signature:"final Vector3 minus(Vector3 otherVector)",native:$e.prototype._minus,comment:o.Vector3MinusComment},{type:"method",signature:"final Vector3 add(Vector3 otherVector)",native:$e.prototype._add,comment:o.Vector3AddComment},{type:"method",signature:"final Vector3 sub(Vector3 otherVector)",native:$e.prototype._sub,comment:o.Vector3SubComment},{type:"method",signature:"final double scalarProduct(Vector3 otherVector)",native:$e.prototype._scalarProduct,comment:o.Vector3ScalarProductComment},{type:"method",signature:"final double distanceTo(Vector3 otherVector)",native:$e.prototype._distanceTo,comment:o.Vector3DistanceToComment},{type:"method",signature:"final static double distance(double x1, double y1, double z1, double x2, double y2, double z2)",native:$e._distance,comment:o.Vector3DistanceComment},{type:"method",signature:"final Vector3 applyMatrix4(Matrix4 m)",native:$e.prototype._applyMatrix4,comment:o.Vector3ApplyMatrix4Comment},{type:"method",signature:"public boolean equals(Vector3 otherVector)",native:$e.prototype._equals,comment:o.objectEqualsComment},{type:"method",signature:"String toString()",java:$e.prototype._mj$toString$String$,comment:o.Vector3ToStringComment}]),r($e,"type");let td=$e;const yt=class yt extends bs{constructor(){super(...arguments);r(this,"camera3d");r(this,"target");r(this,"targetPosition");r(this,"up")}getObject3d(){return this.camera3d}_cj$_constructor_$Camera3d$(e,i){super._cj$_constructor_$Object3d$(e,()=>{this.world3d.scene.add(this.camera3d),i&&i()})}clookAt(e,i,n,s,a){let l=this.getObject3d(),h=new It(e,i,n);l.up=s.v.clone(),l.lookAt(h),a&&(this.targetPosition=h,this.target&&(this.target.cameraLookingAtThisObject=void 0),this.target=void 0,this.up=s.v.clone())}getViewingDirection(){let e=this.camera3d.getWorldDirection(new It);return new td(e.x,e.y,e.z)}clookAtTarget(e,i,n){let s=this.getObject3d();s.up=i.v.clone(),s.lookAt(e.getObject3d().position),n&&(this.targetPosition=void 0,this.target&&(this.target.cameraLookingAtThisObject=void 0),this.target=e,this.target.cameraLookingAtThisObject=this,this.up=i.v.clone())}move(e,i,n){this.camera3d.position.set(this.camera3d.position.x+e,this.camera3d.position.y+i,this.camera3d.position.z+n),this.adjustViewingDirection()}moveTo(e,i,n){this.camera3d.position.set(e,i,n),this.adjustViewingDirection()}adjustViewingDirection(){if(this.target&&!this.target.isDestroyed){this.camera3d.up=this.up,this.camera3d.lookAt(this.target.getObject3d().position);return}this.targetPosition&&(this.camera3d.up=this.up,this.camera3d.lookAt(this.targetPosition))}rotateX(e){this.camera3d.rotateX(e/180*Math.PI)}rotateY(e){this.camera3d.rotateY(e/180*Math.PI)}rotateZ(e){this.camera3d.rotateZ(e/180*Math.PI)}rotateOnWorldAxis(e,i){this.camera3d.rotateOnWorldAxis(e.v,i/180*Math.PI)}scaleX(e){this.camera3d.scale.setX(this.camera3d.scale.x*e)}scaleY(e){this.camera3d.scale.setY(this.camera3d.scale.y*e)}scaleZ(e){this.camera3d.scale.setZ(this.camera3d.scale.z*e)}applyMatrix4(e){if(this.camera3d.parent){const i=this.camera3d.parent.matrixWorld.clone().invert();i.multiply(e.m),i.multiply(this.camera3d.parent.matrixWorld),this.camera3d.applyMatrix4(i)}else this.camera3d.applyMatrix4(e.m)}vscale(e){let i=this.camera3d.scale;i.setX(i.x*e.v.x),i.setY(i.y*e.v.y),i.setZ(i.z*e.v.z)}scaleDouble(e){let i=this.camera3d.scale;i.setX(i.x*e),i.setY(i.y*e),i.setZ(i.z*e)}destroy(){super.destroy(),this.world3d.scene.remove(this.camera3d)}updateViewport(){}};r(yt,"__javaDeclarations",[{type:"declaration",signature:"abstract class Camera3d extends Object3d"},{type:"method",signature:"Camera3d()",java:yt.prototype._cj$_constructor_$Camera3d$},{type:"method",signature:"void move(double x,double y,double z)"},{type:"method",signature:"final void move(Vector3 v)",native:yt.prototype.vmove},{type:"method",signature:"void moveTo(double x,double y,double z)"},{type:"method",signature:"final void moveTo(Vector3 p)",native:yt.prototype.vmoveTo},{type:"method",signature:"void lookAt(double xTarget, double yTarget, double zTarget, Vector3 up, boolean keepTarget)",native:yt.prototype.clookAt},{type:"method",signature:"void lookAt(Object3d target, Vector3 up, boolean keepTarget)",native:yt.prototype.clookAtTarget},{type:"method",signature:"Vector3 getViewingDirection()",native:yt.prototype.getViewingDirection},{type:"method",signature:"void rotateX(double angleDeg)",native:yt.prototype.rotateX},{type:"method",signature:"void rotateY(double angleDeg)",native:yt.prototype.rotateY},{type:"method",signature:"void rotateZ(double angleDeg)",native:yt.prototype.rotateZ},{type:"method",signature:"final void scaleX(double angleDeg)",native:yt.prototype.scaleX},{type:"method",signature:"final void scaleY(double angleDeg)",native:yt.prototype.scaleY},{type:"method",signature:"final void scaleZ(double angleDeg)",native:yt.prototype.scaleZ},{type:"method",signature:"final void scale(Vector3 v)",native:yt.prototype.vscale},{type:"method",signature:"final void scale(double d)",native:yt.prototype.scaleDouble},{type:"method",signature:"final void applyMatrix4(Matrix4 matrix)",native:yt.prototype.applyMatrix4},{type:"method",signature:"void destroy()",java:yt.prototype.destroy}]),r(yt,"type");let oo=yt;const To=class To extends oo{constructor(){super(...arguments);r(this,"cameras")}getObject3d(){return this.camera3d}_cj$_constructor_$ArrayCamera3d$PerspectiveCamera3dII(e,i,n){this.cameras=n,this.camera3d=new Jg(n.map(l=>l.camera3d));let s=new Hl(75,1,.1,2e6);s.position.set(0,0,1e3),s.lookAt(new It(0,0,0));let a=this.camera3d;a.position.copy(s.position),a.projectionMatrix.copy(s.projectionMatrix),super._cj$_constructor_$Camera3d$(e,i)}updateViewport(){this.cameras.forEach(e=>e.updateViewport())}};r(To,"__javaDeclarations",[{type:"declaration",signature:"class ArrayCamera3d extends Camera3d"},{type:"method",signature:"ArrayCamera3d(PerspectiveCamera3d[] cameras)",java:To.prototype._cj$_constructor_$ArrayCamera3d$PerspectiveCamera3dII}]),r(To,"type");let Nh=To;class Qi{static convertToInt(t,e=!1){if(t==null){if(e)return null;throw new F(o.colorMustNotBeNull())}return typeof t=="number"?t:typeof t=="string"?ze.parseColorToOpenGL(t).color||16777215:t.red*65536+t.green*256+t.blue}static convertToThreeJsColor(t){return new zs(Qi.convertToInt(t,!1))}}const Ji=class Ji extends z{constructor(){super(...arguments);r(this,"material");r(this,"usageCounter",0)}set alpha(e){e>1&&(e=1),e<0&&(e=0),this.material.opacity=1-e,this.material.transparent=this.material.opacity<.99999999}get transparent(){return this.material.transparent}set transparent(e){this.material.transparent=e}get flatShading(){return this.material.flatShading||!1}set flatShading(e){this.material.flatShading=e}get alpha(){return 1-this.material.opacity}_setFlatShading(e){return this.material.flatShading=e,this}_setTransparent(e){return this.material.transparent=e,this}_setWireframe(e){return this.material.wireframe=e,this}_setAlpha(e){return this.alpha=e,this}_setColor(e){var i;return this.material.color!==void 0&&((i=this.material.color)==null||i.set(Qi.convertToThreeJsColor(e))),this}getMaterialAndIncreaseUsageCounter(){return this.usageCounter++,this.material}getMaterialWithoutIncreasingUsageCounter(){return this.usageCounter++,this.material}getColor(){let e=this.material.color;return e?Math.round(e.r*16711680+e.g*65280+e.b*255):0}destroyIfNotUsedByOtherMesh(){if(--this.usageCounter==0){let e=this.material.map;if(e){if(e.isPartOfSpritesheet)return;let i=e.renderTarget;i&&i.dispose(),e.dispose()}this.material.dispose()}}};r(Ji,"__javaDeclarations",[{type:"declaration",signature:"abstract final class Material3d extends Object",comment:o.material3dClassComment},{type:"method",signature:"Material3d setColor(Color color)",native:Ji.prototype._setColor,comment:o.material3dSetColorComment},{type:"method",signature:"Material3d setColor(int color)",native:Ji.prototype._setColor,comment:o.material3dSetColorComment},{type:"method",signature:"Material3d setColor(String color)",native:Ji.prototype._setColor,comment:o.material3dSetColorComment},{type:"method",signature:"int getColor()",native:Ji.prototype.getColor,comment:o.material3dGetColorComment},{type:"field",signature:"private boolean transparent",comment:o.material3dSetTransparentComment},{type:"method",signature:"boolean isTransparent()",template:"§1.material.transparent",comment:o.material3dIsTransparentComment},{type:"method",signature:"Material3d setTransparent(boolean value)",native:Ji.prototype._setTransparent,comment:o.material3dSetTransparentComment},{type:"field",signature:"private boolean flatShading",comment:o.material3dFlatShadingComment},{type:"method",signature:"boolean isFlatShading()",template:"§1.material.flatShading",comment:o.material3dFlatShadingComment},{type:"method",signature:"Material3d setFlatShading(boolean value)",native:Ji.prototype._setFlatShading,comment:o.material3dFlatShadingComment},{type:"field",signature:"private double alpha",comment:o.material3dAlphaComment},{type:"method",signature:"Material3d setAlpha(double value)",native:Ji.prototype._setAlpha,comment:o.material3dAlphaComment},{type:"method",signature:"double getAlpha(double value)",template:"§1.alpha",comment:o.material3dAlphaComment},{type:"field",signature:"private boolean wireframe",comment:o.materialWireframeComment},{type:"method",signature:"Material3d setWireframe(boolean value)",native:Ji.prototype._setWireframe,comment:o.materialWireframeComment},{type:"method",signature:"boolean isWireframe()",template:"§1.material.wireframe",comment:o.materialWireframeComment}]),r(Ji,"type");let oa=Ji;const pi=class pi extends oa{get wireframe(){return this.material.wireframe}get emissive(){let t=this.material.emissive;return t?Math.round(t.r*16711680+t.g*65280+t.b*255):0}_setEmissive(t){this.material.emissive=Qi.convertToThreeJsColor(t)}get specular(){let t=this.material.specular;return t?Math.round(t.r*16711680+t.g*65280+t.b*255):0}_setSpecular(t){this.material.specular=Qi.convertToThreeJsColor(t)}_phongMaterialConstructor(t,e=30){return this.material=new ch({color:Qi.convertToThreeJsColor(t),shininess:e}),this}_phongMaterialConstructorTexture(t){const e=new Sl;return this.material=new ch({map:e.load(t.path)}),this}_cj$_constructor_$PhongMaterial3d$SpriteLibrary$int(t,e,i,n){t.s.push(this);let s=t.scheduler.interpreter.retrieveObject("World3dClass");if(!s){s=new Wr,s._cj$_constructor_$World3d$(t,()=>{t.s.pop(),this.createMaterialWithTexture(s,i.name,n),e&&e()});return}this.createMaterialWithTexture(s,i.name,n),e&&e()}createMaterialWithTexture(t,e,i){let n=t.textureManager3d.getSpritesheetBasedTexture(e,i);this.material=new ch({map:n})}};r(pi,"__javaDeclarations",[{type:"declaration",signature:"final class PhongMaterial3d extends Material3d",comment:o.phongMaterial3dClassComment},{type:"method",signature:"PhongMaterial3d(int color)",native:pi.prototype._phongMaterialConstructor,comment:o.phongMaterial3dConstructorComment},{type:"method",signature:"PhongMaterial3d(int color, double shininess)",native:pi.prototype._phongMaterialConstructor,comment:o.phongMaterial3dConstructorComment},{type:"method",signature:"PhongMaterial3d(string color, double shininess)",native:pi.prototype._phongMaterialConstructor,comment:o.phongMaterial3dConstructorComment},{type:"method",signature:"PhongMaterial3d(Color color, double shininess)",native:pi.prototype._phongMaterialConstructor,comment:o.phongMaterial3dConstructorComment},{type:"method",signature:"PhongMaterial3d(Texture texture)",native:pi.prototype._phongMaterialConstructorTexture,comment:o.phongMaterial3dConstructorTextureComment},{type:"method",signature:"PhongMaterial3d(SpriteLibrary spriteLibrary, int imageIndex)",java:pi.prototype._cj$_constructor_$PhongMaterial3d$SpriteLibrary$int,comment:o.phongMaterial3dConstructorSpriteLibraryComment},{type:"field",signature:"private double shininess",template:"§1.material.shininess",comment:o.phongMaterial3dShininessComment},{type:"method",signature:"void setShininess(double shininess)",template:"§1.material.shininess = §2",comment:o.phongMaterial3dShininessComment},{type:"method",signature:"double getShininess()",template:"§1.materialshininess",comment:o.phongMaterial3dShininessComment},{type:"field",signature:"private int specular",comment:o.phongMaterial3dSpecularComment},{type:"method",signature:"void setSpecular(int color)",native:pi.prototype._setSpecular,comment:o.phongMaterial3dSpecularComment},{type:"method",signature:"void setSpecular(string color)",native:pi.prototype._setSpecular,comment:o.phongMaterial3dSpecularComment},{type:"method",signature:"void setSpecular(Color color)",native:pi.prototype._setSpecular,comment:o.phongMaterial3dSpecularComment},{type:"method",signature:"int getSpecular()",template:"§1.specular",comment:o.phongMaterial3dSpecularComment},{type:"field",signature:"private int emissive",comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(int color)",native:pi.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(string color)",native:pi.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(Color color)",native:pi.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"int getEmissive()",template:"§1.emissive",comment:o.material3dEmissiveComment},{type:"field",signature:"boolean wireframe",comment:o.materialWireframeComment},{type:"method",signature:"boolean isWireframe()",template:"§1.material.wireframe",comment:o.materialWireframeComment},{type:"method",signature:"void setWireframe(boolean value)",template:"§1.material.wireframe = §2",comment:o.materialWireframeComment}]);let id=pi;const rt=class rt extends bs{constructor(){super(...arguments);r(this,"mesh");r(this,"_material");r(this,"side",Eh)}set material(e){var i;this._material!==e&&((i=this.material)==null||i.destroyIfNotUsedByOtherMesh(),this._material=e,this.mesh.material=this._material.getMaterialAndIncreaseUsageCounter())}get material(){return this._material}_getMaterial(){return this._material}_setMaterial(e){this.material=e}getObject3d(){return this.mesh}_cj$_constructor_$Mesh3d$(e,i){super._cj$_constructor_$Object3d$(e,i)}move(e,i,n){this.mesh.position.set(this.mesh.position.x+e,this.mesh.position.y+i,this.mesh.position.z+n),this.cameraLookingAtThisObject&&this.cameraLookingAtThisObject.adjustViewingDirection()}moveTo(e,i,n){this.mesh.position.set(e,i,n),this.cameraLookingAtThisObject&&this.cameraLookingAtThisObject.adjustViewingDirection()}rotateX(e){this.mesh.rotateX(e/180*Math.PI)}rotateY(e){this.mesh.rotateY(e/180*Math.PI)}rotateZ(e){this.mesh.rotateZ(e/180*Math.PI)}scaleX(e){this.mesh.scale.setX(this.mesh.scale.x*e)}scaleY(e){this.mesh.scale.setY(this.mesh.scale.y*e)}scaleZ(e){this.mesh.scale.setZ(this.mesh.scale.z*e)}applyMatrix4(e){if(this.mesh.parent){const i=this.mesh.parent.matrixWorld.clone().invert();i.multiply(e.m),i.multiply(this.mesh.parent.matrixWorld),this.mesh.applyMatrix4(i)}else this.mesh.applyMatrix4(e.m)}vscale(e){let i=this.mesh.scale;i.setX(i.x*e.v.x),i.setY(i.y*e.v.y),i.setZ(i.z*e.v.z)}scaleDouble(e){let i=this.mesh.scale;i.setX(i.x*e),i.setY(i.y*e),i.setZ(i.z*e)}getInitialMaterial(){let e=new id()._phongMaterialConstructor(65280,100);return e.getMaterialAndIncreaseUsageCounter(),this._material=e,e}enableFrontBackSide(e,i){e?(this.side=Eh,i&&(this.side=Fl)):this.side=ef;let n=this.mesh.material;Array.isArray(n)||(n=[n]);for(let s of n)s.side=this.side,s.needsUpdate=!0}repeatTexture(e,i){let n=this.mesh.material;Array.isArray(n)||(n=[n]);for(let s of n)if(s.map){let a=s.map;a.userData.key!==void 0&&(a=this.world3d.textureManager3d.getTextureWithOwnData(a.userData.key,this.world3d.renderer),s.map=a,s.needsUpdate=!0),a.repeat.set(e,i)}}renderTransparent(e){let i=this.mesh.material;Array.isArray(i)||(i=[i]);for(let n of i)n.transparent=e,n.needsUpdate=!0}destroy(){var e;super.destroy(),this.world3d.scene.remove(this.mesh),this.mesh.geometry.dispose(),(e=this._material)==null||e.destroyIfNotUsedByOtherMesh()}};r(rt,"__javaDeclarations",[{type:"declaration",signature:"class Mesh3d extends Object3d",comment:o.Mesh3dClassComment},{type:"method",signature:"Mesh3d()",java:rt.prototype._cj$_constructor_$Mesh3d$},{type:"field",signature:"private Material3d material"},{type:"method",signature:"Material3d getMaterial()",native:rt.prototype._getMaterial},{type:"method",signature:"void setMaterial(Material3d material)",native:rt.prototype._setMaterial},{type:"method",signature:"void move(double x,double y,double z)"},{type:"method",signature:"final void move(Vector3 v)",native:rt.prototype.vmove},{type:"method",signature:"void moveTo(double x,double y,double z)"},{type:"method",signature:"final void moveTo(Vector3 p)",native:rt.prototype.vmoveTo},{type:"method",signature:"void rotateX(double angleDeg)",native:rt.prototype.rotateX},{type:"method",signature:"void rotateY(double angleDeg)",native:rt.prototype.rotateY},{type:"method",signature:"void rotateZ(double angleDeg)",native:rt.prototype.rotateZ},{type:"method",signature:"final void scaleX(double scale)",native:rt.prototype.scaleX},{type:"method",signature:"final void scaleY(double scale)",native:rt.prototype.scaleY},{type:"method",signature:"final void scaleZ(double scale)",native:rt.prototype.scaleZ},{type:"method",signature:"final void scale(Vector3 v)",native:rt.prototype.vscale},{type:"method",signature:"final void scale(double d)",native:rt.prototype.scaleDouble},{type:"method",signature:"final void applyMatrix4(Matrix4 matrix)",native:rt.prototype.applyMatrix4},{type:"method",signature:"final void enableFrontBackSide(boolean frontSideVisible, boolean backSideVisible)",native:rt.prototype.enableFrontBackSide},{type:"method",signature:"final void repeatTexture(int repeatX, int repeatY)",native:rt.prototype.repeatTexture},{type:"method",signature:"final void renderTransparent(boolean transparent)",native:rt.prototype.renderTransparent},{type:"method",signature:"void destroy()",java:rt.prototype.destroy}]),r(rt,"type");let kn=rt;const Ci=class Ci extends kn{_cj$_constructor_$Box3d$double$double$double$int$int$int(t,e,i,n,s,a,l,h){super._cj$_constructor_$Mesh3d$(t,()=>{const c=new za(i,n,s,a,l,h);this.mesh=new me(c,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Box3d$double$double$double(t,e,i,n,s){super._cj$_constructor_$Mesh3d$(t,()=>{const a=new za(i,n,s);this.mesh=new me(a,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Box3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{const i=new za;this.mesh=new me(i,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_setCubemapTexture(t,e){let i=this.world3d.textureManager3d.getSpritesheetBasedTexture(t.name,e);this.mesh.geometry.attributes.uv=new uh(Ci.cubemapUvCoordinates,2),this.mesh.geometry.attributes.uv.needsUpdate=!0,this.mesh.material=new ms({map:i})}_setSingleTextureForAllSides(t,e){let i=this.world3d.textureManager3d.getSpritesheetBasedTexture(t.name,e);this.mesh.geometry.attributes.uv=new uh(Ci.singleTextureUvCoordinates,2),this.mesh.geometry.attributes.uv.needsUpdate=!0,this.mesh.material=new ms({map:i})}_setTextures(t,e){if((e==null?void 0:e.length)!=6)throw new F(o.box3dYouNeedSixTexturesError());let i=[];for(let n=0;n<6;n++)i[n]=this.world3d.textureManager3d.getSpritesheetBasedTexture(t.name,e[n]);this.mesh.geometry.attributes.uv=new uh(Ci.singleTextureUvCoordinates,2),this.mesh.geometry.attributes.uv.needsUpdate=!0,this.mesh.material=i.map(n=>new ms({map:n}))}};r(Ci,"__javaDeclarations",[{type:"declaration",signature:"class Box3d extends Mesh3d",comment:o.box3dClassComment},{type:"method",signature:"Box3d(double width, double height, double depth, int widthSegments, int heightSegments, int depthSegments)",java:Ci.prototype._cj$_constructor_$Box3d$double$double$double$int$int$int,comment:o.box3dConstructorXYZComment},{type:"method",signature:"Box3d(double width, double height, double depth)",java:Ci.prototype._cj$_constructor_$Box3d$double$double$double,comment:o.box3dConstructorXYZComment},{type:"method",signature:"Box3d()",java:Ci.prototype._cj$_constructor_$Box3d$,comment:o.box3dConstructorComment},{type:"method",signature:"void setCubemapTexture(SpriteLibrary spriteLibrary, int imageIndex)",native:Ci.prototype._setCubemapTexture},{type:"method",signature:"void setSingleTextureForAllSides(SpriteLibrary spriteLibrary, int imageIndex)",native:Ci.prototype._setSingleTextureForAllSides},{type:"method",signature:"void setTextures(SpriteLibrary spriteLibrary, int[] imageIndices)",native:Ci.prototype._setTextures}]),r(Ci,"cubemapUvCoordinates",new Float32Array([2/4,2/3,3/4,2/3,2/4,1/3,3/4,1/3,0/4,2/3,1/4,2/3,0/4,1/3,1/4,1/3,1/4,3/3,2/4,3/3,1/4,2/3,2/4,2/3,1/4,1/3,2/4,1/3,1/4,0/3,2/4,0/3,1/4,2/3,2/4,2/3,1/4,1/3,2/4,1/3,3/4,2/3,4/4,2/3,3/4,1/3,4/4,1/3])),r(Ci,"singleTextureUvCoordinates",new Float32Array([0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0]));let Rh=Ci;const $s=class $s extends kn{_cj$_constructor_$Circle3d$double$int$double$double(t,e,i,n,s,a){s*=Math.PI/180,a*=Math.PI/180,super._cj$_constructor_$Mesh3d$(t,()=>{const l=new Dl(i,n,s,a);this.mesh=new me(l,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Circle3d$double$int(t,e,i,n){super._cj$_constructor_$Mesh3d$(t,()=>{const s=new Dl(i,n);this.mesh=new me(s,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Circle3d$double(t,e,i){super._cj$_constructor_$Mesh3d$(t,()=>{const n=new Dl(i);this.mesh=new me(n,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Circle3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{const i=new Dl(.5);this.mesh=new me(i,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r($s,"__javaDeclarations",[{type:"declaration",signature:"class Circle3d extends Mesh3d"},{type:"method",signature:"Circle3d(double radius, int segments, double thetaStart, double thetaLength)",java:$s.prototype._cj$_constructor_$Circle3d$double$int$double$double},{type:"method",signature:"Circle3d(double radius, int segments)",java:$s.prototype._cj$_constructor_$Circle3d$double$int},{type:"method",signature:"Circle3d(double radius)",java:$s.prototype._cj$_constructor_$Circle3d$double},{type:"method",signature:"Circle3d()",java:$s.prototype._cj$_constructor_$Circle3d$}]);let Gh=$s;const Es=class Es extends kn{_cj$_constructor_$Cone3d$double$double$int$int$boolean$double$double(t,e,i,n,s,a,l,h,c){h*=Math.PI/180,c*=Math.PI/180,super._cj$_constructor_$Mesh3d$(t,()=>{const u=new jl(i,n,s,a,l,h,c);this.mesh=new me(u,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cone3d$double$double$int$int$boolean(t,e,i,n,s,a,l){super._cj$_constructor_$Mesh3d$(t,()=>{const h=new jl(i,n,s,a,l);this.mesh=new me(h,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cone3d$double$double(t,e,i,n){super._cj$_constructor_$Mesh3d$(t,()=>{const s=new jl(i,n);this.mesh=new me(s,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cone3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{const i=new jl(.5,1);this.mesh=new me(i,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(Es,"__javaDeclarations",[{type:"declaration",signature:"class Cone3d extends Mesh3d"},{type:"method",signature:"Cone3d(double radius, double height, int radialSegments, int heightSegments, boolean openEnded, double thetaStart, double thetaLength)",java:Es.prototype._cj$_constructor_$Cone3d$double$double$int$int$boolean$double$double},{type:"method",signature:"Cone3d(double radius, double height, int radialSegments, int heightSegments, boolean openEnded)",java:Es.prototype._cj$_constructor_$Cone3d$double$double$int$int$boolean},{type:"method",signature:"Cone3d(double radius, double height)",java:Es.prototype._cj$_constructor_$Cone3d$double$double},{type:"method",signature:"Cone3d()",java:Es.prototype._cj$_constructor_$Cone3d$}]);let Kh=Es;const Yr=class Yr extends kn{_cj$_constructor_$Cylinder3d$double$double$double$int$int$boolean$double$double(t,e,i,n,s,a,l,h,c,u){c*=Math.PI/180,u*=Math.PI/180,super._cj$_constructor_$Mesh3d$(t,()=>{const g=new fo(i,n,s,a,l,h,c,u);this.mesh=new me(g,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cylinder3d$double$double$double$int$int$boolean(t,e,i,n,s,a,l,h){super._cj$_constructor_$Mesh3d$(t,()=>{const c=new fo(i,n,s,a,l,h);this.mesh=new me(c,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cylinder3d$double$double$double(t,e,i,n,s){super._cj$_constructor_$Mesh3d$(t,()=>{const a=new fo(i,n,s);this.mesh=new me(a,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cylinder3d$double$double(t,e,i,n){super._cj$_constructor_$Mesh3d$(t,()=>{const s=new fo(i,i,n);this.mesh=new me(s,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cylinder3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{const i=new fo(.5,.5,1);this.mesh=new me(i,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(Yr,"__javaDeclarations",[{type:"declaration",signature:"class Cylinder3d extends Mesh3d"},{type:"method",signature:"Cylinder3d(double radiusTop, double radiusBottom, double height, int radialSegments, int heightSegments, boolean openEnded, double thetaStart, double thetaLength)",java:Yr.prototype._cj$_constructor_$Cylinder3d$double$double$double$int$int$boolean$double$double},{type:"method",signature:"Cylinder3d(double radiusTop, double radiusBottom, double height, int radialSegments, int heightSegments, boolean openEnded)",java:Yr.prototype._cj$_constructor_$Cylinder3d$double$double$double$int$int$boolean},{type:"method",signature:"Cylinder3d(double radiusTop, double radiusBottom, double height)",java:Yr.prototype._cj$_constructor_$Cylinder3d$double$double$double},{type:"method",signature:"Cylinder3d(double radius, double height)",java:Yr.prototype._cj$_constructor_$Cylinder3d$double$double},{type:"method",signature:"Cylinder3d()",java:Yr.prototype._cj$_constructor_$Cylinder3d$}]);let Hh=Yr;const ut=class ut extends bs{constructor(){super(...arguments);r(this,"group3d");r(this,"children",[])}getObject3d(){return this.group3d}_cj$_constructor_$Group3d$(e,i){super._cj$_constructor_$Object3d$(e,()=>{this.group3d=new tf,this.world3d.scene.add(this.group3d),i&&i()})}move(e,i,n){this.group3d.position.set(this.group3d.position.x+e,this.group3d.position.y+i,this.group3d.position.z+n)}moveTo(e,i,n){this.group3d.position.set(e,i,n)}rotateX(e){this.group3d.rotateX(e/180*Math.PI)}rotateY(e){this.group3d.rotateY(e/180*Math.PI)}rotateZ(e){this.group3d.rotateZ(e/180*Math.PI)}rotateOnWorldAxis(e,i){this.group3d.rotateOnWorldAxis(e.v,i/180*Math.PI)}scaleX(e){this.group3d.scale.setX(this.group3d.scale.x*e)}scaleY(e){this.group3d.scale.setY(this.group3d.scale.y*e)}scaleZ(e){this.group3d.scale.setZ(this.group3d.scale.z*e)}applyMatrix4(e){if(this.group3d.parent){const i=this.group3d.parent.matrixWorld.clone().invert();i.multiply(e.m),i.multiply(this.group3d.parent.matrixWorld),this.group3d.applyMatrix4(i)}else this.group3d.applyMatrix4(e.m)}vscale(e){let i=this.group3d.scale;i.setX(i.x*e.v.x),i.setY(i.y*e.v.y),i.setZ(i.z*e.v.z)}scaleDouble(e){let i=this.group3d.scale;i.setX(i.x*e),i.setY(i.y*e),i.setZ(i.z*e)}destroy(){super.destroy(),this.world3d.scene.remove(this.group3d);for(let e of this.children)e.destroy();this.world3d.scene.remove(this.group3d)}getElements(){return this.children}_add(e){this.children.indexOf(e)<0&&(this.children.push(e),this.group3d.add(e.getObject3d()))}_remove(e){let i=this.children.indexOf(e);i>=0&&(this.children.splice(i,1),this.group3d.remove(e.getObject3d()))}_size(){return this.children.length}_get(e){let i=this.children[e];return i||null}};r(ut,"__javaDeclarations",[{type:"declaration",signature:"class Group3d extends Object3d",comment:o.Group3dClassComment},{type:"method",signature:"Group3d()",java:ut.prototype._cj$_constructor_$Group3d$},{type:"method",signature:"void move(double x,double y,double z)"},{type:"method",signature:"final void move(Vector3 v)",native:ut.prototype.vmove},{type:"method",signature:"void moveTo(double x,double y,double z)"},{type:"method",signature:"final void moveTo(Vector3 p)",native:ut.prototype.vmoveTo},{type:"method",signature:"void rotateX(double angleDeg)",native:ut.prototype.rotateX},{type:"method",signature:"void rotateY(double angleDeg)",native:ut.prototype.rotateY},{type:"method",signature:"void rotateZ(double angleDeg)",native:ut.prototype.rotateZ},{type:"method",signature:"final void scaleX(double angleDeg)",native:ut.prototype.scaleX},{type:"method",signature:"final void scaleY(double angleDeg)",native:ut.prototype.scaleY},{type:"method",signature:"final void scaleZ(double angleDeg)",native:ut.prototype.scaleZ},{type:"method",signature:"final void scale(Vector3 v)",native:ut.prototype.vscale},{type:"method",signature:"final void scale(double d)",native:ut.prototype.scaleDouble},{type:"method",signature:"final void applyMatrix4(Matrix4 matrix)",native:ut.prototype.applyMatrix4},{type:"method",signature:"final void add(O3d object)",native:ut.prototype._add,comment:o.Group3dAddComment},{type:"method",signature:"final void remove(O3d object)",native:ut.prototype._remove,comment:o.Group3dRemoveComment},{type:"method",signature:"final int size()",native:ut.prototype._size,comment:o.Group3dSizeComment},{type:"method",signature:"final O3d get(int index)",native:ut.prototype._get,comment:o.Group3dGetComment},{type:"method",signature:"void destroy()",java:ut.prototype.destroy}]),r(ut,"type");let Uh=ut;const ei=class ei extends bs{constructor(){super(...arguments);r(this,"light")}getObject3d(){return this.light}get color(){let e=this.light.color;return e?Math.round(e.r*16711680+e.g*65280+e.b*255):0}get intensity(){return this.light.intensity}_cj$_constructor_$Light3d$(e,i){super._cj$_constructor_$Object3d$(e,()=>{i(),this.world3d.addLight(this)})}move(e,i,n){this.light.position.set(this.light.position.x+e,this.light.position.y+i,this.light.position.z+n)}moveTo(e,i,n){this.light.position.set(e,i,n)}rotateX(e){this.light.rotateX(e/180*Math.PI)}rotateY(e){this.light.rotateY(e/180*Math.PI)}rotateZ(e){this.light.rotateZ(e/180*Math.PI)}setIntensity(e){this.light.intensity=e}getIntensity(){return this.light.intensity}setColor(e){switch(typeof e){case"number":this.light.color.set(e);break;case"string":this.light.color.set(ze.parseColorToOpenGL(e).color);break;case"object":if(e==null)throw new F(o.fsColorIsNullException());this.light.color.set(e.red/255,e.green/255,e.blue/255);break}}destroy(){super.destroy(),this.world3d.removeLight(this),this.light.dispose()}};r(ei,"__javaDeclarations",[{type:"declaration",signature:"class Light3d extends Object3d"},{type:"method",signature:"Light3d()",java:ei.prototype._cj$_constructor_$Light3d$},{type:"field",signature:"public Material3d material"},{type:"method",signature:"void move(double x,double y,double z)"},{type:"method",signature:"final void move(Vector3 v)",native:ei.prototype.vmove},{type:"method",signature:"void moveTo(double x,double y,double z)"},{type:"method",signature:"final void moveTo(Vector3 p)",native:ei.prototype.vmoveTo},{type:"method",signature:"void destroy()",java:ei.prototype.destroy},{type:"method",signature:"void rotateX(double angleDeg)",native:ei.prototype.rotateX},{type:"method",signature:"void rotateY(double angleDeg)",native:ei.prototype.rotateY},{type:"method",signature:"void rotateZ(double angleDeg)",native:ei.prototype.rotateZ},{type:"field",signature:"private double intensity"},{type:"method",signature:"void setIntensity(double intensity)",native:ei.prototype.setIntensity},{type:"method",signature:"double getIntensity()",native:ei.prototype.getIntensity},{type:"field",signature:"private int color"},{type:"method",signature:"void setColor(int color)",native:ei.prototype.setColor},{type:"method",signature:"void setColor(String color)",native:ei.prototype.setColor},{type:"method",signature:"void setColor(Color color)",native:ei.prototype.setColor}]),r(ei,"type");let lo=ei;const wa=class wa extends lo{constructor(){super(),this.light=new sp}_cj$_constructor_$AmbientLight3d$(t,e){super._cj$_constructor_$Light3d$(t,()=>{e&&e()})}_cj$_constructor_$AmbientLight3d$double(t,e,i){super._cj$_constructor_$Light3d$(t,()=>{this.light.intensity=i,e&&e()})}};r(wa,"__javaDeclarations",[{type:"declaration",signature:"class AmbientLight3d extends Light3d"},{type:"method",signature:"AmbientLight3d()",java:wa.prototype._cj$_constructor_$AmbientLight3d$},{type:"method",signature:"AmbientLight3d(double intensity)",java:wa.prototype._cj$_constructor_$AmbientLight3d$double}]),r(wa,"type");let Qh=wa;const Zr=class Zr extends lo{constructor(){super(),this.light=new nf}_cj$_constructor_$DirectionalLight3d$(t,e){super._cj$_constructor_$Light3d$(t,()=>{e&&e()})}_cj$_constructor_$DirectionalLight3d$double$double$double$(t,e,i,n,s){this._cj$_constructor_$DirectionalLight3d$(t,()=>{this.light.position.set(i,n,s),e&&e()})}_cj$_constructor_$DirectionalLight3d$Vector3$(t,e,i){this._cj$_constructor_$DirectionalLight3d$(t,()=>{this.light.position.set(i.v.x,i.v.y,i.v.z),e&&e()})}_setTarget(t){const e=this.light;return e.target=t.getObject3d(),this}};r(Zr,"__javaDeclarations",[{type:"declaration",signature:"class DirectionalLight3d extends Light3d"},{type:"method",signature:"DirectionalLight3d()",java:Zr.prototype._cj$_constructor_$DirectionalLight3d$},{type:"method",signature:"DirectionalLight3d(double x,double y,double z)",java:Zr.prototype._cj$_constructor_$DirectionalLight3d$double$double$double$},{type:"method",signature:"DirectionalLight3d(Vector3 position)",java:Zr.prototype._cj$_constructor_$DirectionalLight3d$double$double$double$},{type:"method",signature:"DirectionalLight3d setTarget(Object3d object3d)",native:Zr.prototype._setTarget}]),r(Zr,"type");let Yh=Zr;const Is=class Is extends lo{constructor(){super(),this.light=new rf}_cj$_constructor_$PointLight3d$(t,e){super._cj$_constructor_$Light3d$(t,()=>{e&&e()})}_cj$_constructor_$PointLight3d$double$double$double$(t,e,i,n,s){this._cj$_constructor_$PointLight3d$(t,()=>{this.light.position.set(i,n,s),e&&e()})}_cj$_constructor_$PointLight3d$Vector3$(t,e,i){this._cj$_constructor_$PointLight3d$(t,()=>{this.light.position.set(i.v.x,i.v.y,i.v.z),e&&e()})}};r(Is,"__javaDeclarations",[{type:"declaration",signature:"class PointLight3d extends Light3d"},{type:"method",signature:"PointLight3d()",java:Is.prototype._cj$_constructor_$PointLight3d$},{type:"method",signature:"PointLight3d(double x,double y,double z)",java:Is.prototype._cj$_constructor_$PointLight3d$double$double$double$},{type:"method",signature:"PointLight3d(Vector3 position)",java:Is.prototype._cj$_constructor_$PointLight3d$double$double$double$}]),r(Is,"type");let Zh=Is;const ur=class ur extends oa{get wireframe(){return this.material.wireframe}_basicMaterialConstructor(t,e=!1){return this.material=new ap({color:Qi.convertToThreeJsColor(t),wireframe:e}),this}_basicMaterialConstructorTexture(t){const e=new Sl;return this.material=new Ih({map:e.load(t.path)}),this}_cj$_constructor_$BasicMaterial3d$SpriteLibrary$int(t,e,i,n){t.s.push(this);let s=t.scheduler.interpreter.retrieveObject("World3dClass");if(!s){s=new Wr,s._cj$_constructor_$World3d$(t,()=>{t.s.pop(),this.createMaterialWithTexture(s,i.name,n),e&&e()});return}this.createMaterialWithTexture(s,i.name,n),e&&e()}createMaterialWithTexture(t,e,i){let n=t.textureManager3d.getSpritesheetBasedTexture(e,i);this.material=new Ih({map:n})}};r(ur,"__javaDeclarations",[{type:"declaration",signature:"final class BasicMaterial3d extends Material3d",comment:o.basicMaterial3dClassComment},{type:"method",signature:"BasicMaterial3d(int color)",native:ur.prototype._basicMaterialConstructor,comment:o.basicMaterial3dConstructorComment},{type:"method",signature:"BasicMaterial3d(int color, boolean wireframe)",native:ur.prototype._basicMaterialConstructor,comment:o.basicMaterial3dConstructorComment},{type:"method",signature:"BasicMaterial3d(string color, boolean wireframe)",native:ur.prototype._basicMaterialConstructor,comment:o.basicMaterial3dConstructorComment},{type:"method",signature:"BasicMaterial3d(Color color, boolean wireframe)",native:ur.prototype._basicMaterialConstructor,comment:o.basicMaterial3dConstructorComment},{type:"method",signature:"BasicMaterial3d(Texture texture)",native:ur.prototype._basicMaterialConstructorTexture,comment:o.basicMaterial3dConstructorTextureComment},{type:"method",signature:"BasicMaterial3d(SpriteLibrary spriteLibrary, int imageIndex)",java:ur.prototype._cj$_constructor_$BasicMaterial3d$SpriteLibrary$int,comment:o.basicMaterial3dConstructorSpriteLibraryComment},{type:"field",signature:"boolean wireframe",comment:o.materialWireframeComment},{type:"method",signature:"boolean isWireframe()",template:"§1.material.wireframe",comment:o.materialWireframeComment},{type:"method",signature:"void setWireframe(boolean value)",template:"§1.material.wireframe = §2",comment:o.materialWireframeComment}]);let Xh=ur;const $n=class $n extends oa{get wireframe(){return this.material.wireframe}get emissive(){let t=this.material.emissive;return t?Math.round(t.r*16711680+t.g*65280+t.b*255):0}_lambertMaterialConstructorTexture(t){const e=new Sl;return this.material=new ms({map:e.load(t.path)}),this}_cj$_constructor_$LambertMaterial3d$SpriteLibrary$int(t,e,i,n){t.s.push(this);let s=t.scheduler.interpreter.retrieveObject("World3dClass");if(!s){s=new Wr,s._cj$_constructor_$World3d$(t,()=>{t.s.pop(),this.createMaterialWithTexture(s,i.name,n),e&&e()});return}this.createMaterialWithTexture(s,i.name,n),e&&e()}createMaterialWithTexture(t,e,i){let n=t.textureManager3d.getSpritesheetBasedTexture(e,i);this.material=new ms({map:n})}_setEmissive(t){this.material.emissive=Qi.convertToThreeJsColor(t)}_lambertMaterialConstructor(t){return this.material=new ms({color:Qi.convertToThreeJsColor(t)}),this}};r($n,"__javaDeclarations",[{type:"declaration",signature:"final class LambertMaterial3d extends Material3d",comment:o.lambertMaterial3dClassComment},{type:"method",signature:"LambertMaterial3d(int color)",native:$n.prototype._lambertMaterialConstructor,comment:o.lambertMaterial3dConstructorComment},{type:"method",signature:"LambertMaterial3d(string color)",native:$n.prototype._lambertMaterialConstructor,comment:o.lambertMaterial3dConstructorComment},{type:"method",signature:"LambertMaterial3d(Color color)",native:$n.prototype._lambertMaterialConstructor,comment:o.lambertMaterial3dConstructorComment},{type:"method",signature:"LambertMaterial3d(Texture texture)",native:$n.prototype._lambertMaterialConstructorTexture,comment:o.lambertMaterial3dConstructorTextureComment},{type:"method",signature:"LambertMaterial3d(SpriteLibrary spriteLibrary, int imageIndex)",java:$n.prototype._cj$_constructor_$LambertMaterial3d$SpriteLibrary$int,comment:o.lambertMaterial3dConstructorSpriteLibraryComment},{type:"field",signature:"private int emissive",comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(int color)",native:$n.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(string color)",native:$n.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(Color color)",native:$n.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"int getEmissive()",template:"§1.emissive",comment:o.material3dEmissiveComment},{type:"field",signature:"boolean wireframe",comment:o.materialWireframeComment},{type:"method",signature:"boolean isWireframe()",template:"§1.material.wireframe",comment:o.materialWireframeComment},{type:"method",signature:"void setWireframe(boolean value)",template:"§1.material.wireframe = §2",comment:o.materialWireframeComment}]);let Jh=$n;const En=class En extends oa{get wireframe(){return this.material.wireframe}get roughness(){return this.material.roughness}get metalness(){return this.material.metalness}get emissive(){let t=this.material.emissive;return t?Math.round(t.r*16711680+t.g*65280+t.b*255):0}_setEmissive(t){this.material.emissive=Qi.convertToThreeJsColor(t)}_physicallyBasedMaterialConstructor(t,e,i){return this.material=new mh({color:Qi.convertToThreeJsColor(t),roughness:e,metalness:i}),this}_physicallyBasedMaterialConstructorTexture(t){const e=new Sl;return this.material=new mh({map:e.load(t.path)}),this}_cj$_constructor_$PhysicallyBasedMaterial3d$SpriteLibrary$int(t,e,i,n){t.s.push(this);let s=t.scheduler.interpreter.retrieveObject("World3dClass");if(!s){s=new Wr,s._cj$_constructor_$World3d$(t,()=>{t.s.pop(),this.createMaterialWithTexture(s,i.name,n),e&&e()});return}this.createMaterialWithTexture(s,i.name,n),e&&e()}createMaterialWithTexture(t,e,i){let n=t.textureManager3d.getSpritesheetBasedTexture(e,i);this.material=new mh({map:n})}};r(En,"__javaDeclarations",[{type:"declaration",signature:"final class PhysicallyBasedMaterial3d extends Material3d",comment:o.physicallyBasedMaterial3dClassComment},{type:"method",signature:"PhysicallyBasedMaterial3d(int color, double routhness, double metalness)",native:En.prototype._physicallyBasedMaterialConstructor,comment:o.physicallyBasedMaterial3dConstructorComment},{type:"method",signature:"PhysicallyBasedMaterial3d(string color, double routhness, double metalness)",native:En.prototype._physicallyBasedMaterialConstructor,comment:o.physicallyBasedMaterial3dConstructorComment},{type:"method",signature:"PhysicallyBasedMaterial3d(Color color, double routhness, double metalness)",native:En.prototype._physicallyBasedMaterialConstructor,comment:o.physicallyBasedMaterial3dConstructorComment},{type:"method",signature:"PhysicallyBasedMaterial3d(Texture texture)",native:En.prototype._physicallyBasedMaterialConstructorTexture,comment:o.physicallyBasedMaterial3dConstructorTextureComment},{type:"method",signature:"PhysicallyBasedMaterial3d(SpriteLibrary spriteLibrary, int imageIndex)",java:En.prototype._cj$_constructor_$PhysicallyBasedMaterial3d$SpriteLibrary$int,comment:o.physicallyBasedMaterial3dConstructorSpriteLibraryComment},{type:"field",signature:"private int emissive",template:"§1.emissive",comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(int color)",native:En.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(string color)",native:En.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(Color color)",native:En.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"int getEmissive()",template:"§1.emissive",comment:o.material3dEmissiveComment},{type:"field",signature:"boolean wireframe",comment:o.materialWireframeComment},{type:"method",signature:"boolean isWireframe()",template:"§1.material.wireframe",comment:o.materialWireframeComment},{type:"method",signature:"void setWireframe(boolean value)",template:"§1.material.wireframe = §2",comment:o.materialWireframeComment},{type:"field",signature:"private double roughness",template:"§1.roughness",comment:o.physicallyBasedMaterial3dRoughnessComment},{type:"method",signature:"void setRoughness(double value)",template:"§1.material.roughness = §2",comment:o.physicallyBasedMaterial3dRoughnessComment},{type:"method",signature:"double getRoughness(double value)",template:"§1.material.roughness",comment:o.physicallyBasedMaterial3dRoughnessComment},{type:"field",signature:"private double metalness",template:"§1.metalness",comment:o.physicallyBasedMaterial3dMetalnessComment},{type:"method",signature:"void setMetalness(double value)",template:"§1.material.metalness = §2",comment:o.physicallyBasedMaterial3dMetalnessComment},{type:"method",signature:"double getMetalness(double value)",template:"§1.material.metalness",comment:o.physicallyBasedMaterial3dMetalnessComment}]);let ec=En;const pb=""+new URL("assets/2k_earth_daymap-DKLT2WuX.jpg",import.meta.url).href,gb=""+new URL("assets/2k_jupiter-CEiO5JSj.jpg",import.meta.url).href,fb=""+new URL("assets/2k_mars-BX2JGd6W.jpg",import.meta.url).href,bb=""+new URL("assets/2k_mercury-lhhbYhEJ.jpg",import.meta.url).href,yb=""+new URL("assets/2k_moon-BMpRMzYO.jpg",import.meta.url).href,vb=""+new URL("assets/2k_neptune-CRPHsRry.jpg",import.meta.url).href,Ab=""+new URL("assets/2k_saturn-BOztX_Vf.jpg",import.meta.url).href,wb=""+new URL("assets/2k_stars-DTLDDGUj.jpg",import.meta.url).href,kb=""+new URL("assets/8k_stars-DJay3VbR.jpg",import.meta.url).href,Cb=""+new URL("assets/2k_stars_milky_way-uZVdu_2I.jpg",import.meta.url).href,Sb=""+new URL("assets/8k_stars_milky_way-CQzodXnZ.jpg",import.meta.url).href,xb=""+new URL("assets/2k_sun-BfaUCBxs.jpg",import.meta.url).href,Tb=""+new URL("assets/2k_uranus-QU9XKwEw.jpg",import.meta.url).href,$b=""+new URL("assets/2k_venus_atmosphere-gS8AudbJ.jpg",import.meta.url).href,ve=class ve extends Vi{constructor(t,e,i){super(t,e),this.path=i}};r(ve,"__javaDeclarations",[{type:"declaration",signature:"enum Texture",comment:o.TexturesEnumComment}]),r(ve,"type"),r(ve,"count",0),r(ve,"values",[new ve("earth2k",ve.count++,pb),new ve("jupiter2k",ve.count++,gb),new ve("mars2k",ve.count++,fb),new ve("mercury2k",ve.count++,bb),new ve("moon2k",ve.count++,yb),new ve("neptune2k",ve.count++,vb),new ve("saturn2k",ve.count++,Ab),new ve("stars2k",ve.count++,wb),new ve("stars8k",ve.count++,kb),new ve("stars_milky_way2k",ve.count++,Cb),new ve("stars_milky_way8k",ve.count++,Sb),new ve("sun2k",ve.count++,xb),new ve("uranus2k",ve.count++,Tb),new ve("venus_atmosphere2k",ve.count++,$b)]);let tc=ve;const st=class st extends z{constructor(e){super();r(this,"m");this.m=e}_constructorIdentity(){return this.m=new ph,this}_constructorTuples(e,i,n,s,a,l,h,c,u,g,f,b,A,S,w,C){return this.m=new ph(e,i,n,s,a,l,h,c,u,g,f,b,A,S,w,C),this}_constructorOtherMatrix(e){return this.m=new ph().copy(e),this}_makeRotationX(e){return this.m.makeRotationX(e/180*Math.PI),this}_makeRotationY(e){return this.m.makeRotationY(e/180*Math.PI),this}_makeRotationZ(e){return this.m.makeRotationZ(e/180*Math.PI),this}_makeRotationAxis(e,i){return this.m.makeRotationAxis(e.v,i/180*Math.PI),this}_makeScale(e,i,n){return this.m.makeScale(e,i,n),this}_makeTranslation(e){return this.m.makeTranslation(e.v),this}_makeTranslationXYZ(e,i,n){return this.m.makeTranslation(e,i,n),this}_multiplyScalar(e){return this.m.multiplyScalar(e),this}_invert(){return this.m.invert(),this}_determinant(){return this.m.determinant()}_clone(){return new st(this.m.clone())}_copyFrom(e){return this.m.copy(e.m),this}_multiply(e){return this.m.multiply(e.m),this}_premultiply(e){return this.m.premultiply(e.m),this}};r(st,"__javaDeclarations",[{type:"declaration",signature:"class Matrix4 extends Object",comment:o.Matrix4ClassComment},{type:"method",signature:"Matrix4()",native:st.prototype._constructorIdentity,comment:o.Matrix4ConstructorIdentityComment},{type:"method",signature:"Matrix4( double n11, double n12, double n13, double n14, double n21, double n22, double n23, double n24, double n31, double n32, double n33, double n34, double n41, double n42, double n43, double n44)",native:st.prototype._constructorTuples,comment:o.Matrix4ConstructorTupleComment},{type:"method",signature:"Matrix4( Matrix4 otherMatrix)",native:st.prototype._constructorOtherMatrix,comment:o.Matrix4ConstructorOtherMatrixComment},{type:"method",signature:"Matrix4 makeRotationX(double angleInDegrees)",native:st.prototype._makeRotationX,comment:o.Matrix4MakeRotationXComment},{type:"method",signature:"Matrix4 makeRotationY(double angleInDegrees)",native:st.prototype._makeRotationY,comment:o.Matrix4MakeRotationYComment},{type:"method",signature:"Matrix4 makeRotationZ(double angleInDegrees)",native:st.prototype._makeRotationZ,comment:o.Matrix4MakeRotationZComment},{type:"method",signature:"Matrix4 makeRotationAxis(Vector3 axis)",native:st.prototype._makeRotationAxis,comment:o.Matrix4MakeRotationAxisComment},{type:"method",signature:"Matrix4 makeScale(double x, double y, double z)",native:st.prototype._makeScale,comment:o.Matrix4MakeScaleComment},{type:"method",signature:"Matrix4 makeTranslation(Vector3 v)",native:st.prototype._makeTranslation,comment:o.Matrix4MakeTranslationComment},{type:"method",signature:"Matrix4 makeTranslation(double x, double y, double z)",native:st.prototype._makeTranslationXYZ,comment:o.Matrix4MakeTranslationComment},{type:"method",signature:"Matrix4 multiplyScalar(double factor)",native:st.prototype._multiplyScalar,comment:o.Matrix4MultiplyScalarComment},{type:"method",signature:"Matrix4 invert()",native:st.prototype._invert,comment:o.Matrix4InvertComment},{type:"method",signature:"double determinant()",native:st.prototype._determinant,comment:o.Matrix4DeterminantComment},{type:"method",signature:"Matrix4 clone()",native:st.prototype._clone,comment:o.Matrix4CloneComment},{type:"method",signature:"Matrix4 copyFropm(Matrix4 m)",native:st.prototype._copyFrom,comment:o.Matrix4CopyFromComment},{type:"method",signature:"Matrix4 multiply(Matrix4 m)",native:st.prototype._multiply,comment:o.Matrix4MultiplyComment},{type:"method",signature:"Matrix4 premultiply(Matrix4 m)",native:st.prototype._premultiply,comment:o.Matrix4preMultiplyComment}]),r(st,"type");let ic=st;const $o=class $o extends oo{getObject3d(){return this.camera3d}_cj$_constructor_$OrthographicCamera3d$double$double$double$double$double$double(t,e,i,n,s,a,l,h){this.camera3d=new sf(i,n,s,a,l,h),super._cj$_constructor_$Camera3d$(t,e)}};r($o,"__javaDeclarations",[{type:"declaration",signature:"class OrthographicCamera3d extends Camera3d"},{type:"method",signature:"OrthographicCamera3d(double left, double right, double top, double bottom, double near, double far)",java:$o.prototype._cj$_constructor_$OrthographicCamera3d$double$double$double$double$double$double}]),r($o,"type");let nc=$o;const ka=class ka extends oo{constructor(){super(...arguments);r(this,"viewportRelativeCoordinates")}getObject3d(){return this.camera3d}_cj$_constructor_$PerspectiveCamera3d$double$double$double$double(e,i,n,s,a,l){this.camera3d=new Hl(n,s,a,l),super._cj$_constructor_$Camera3d$(e,i)}_setViewport(e,i,n,s){this.viewportRelativeCoordinates=[e,i,n,s];let a=this.world3d.graphicsDiv.getBoundingClientRect();e*=a.width,i*=a.height,n*=a.width,s*=a.height,this.camera3d.viewport=new af(e,i,n,s),this.camera3d.aspect=n/s,this.camera3d.updateProjectionMatrix(),this.camera3d.updateMatrixWorld()}updateViewport(){this.viewportRelativeCoordinates&&this._setViewport(this.viewportRelativeCoordinates[0],this.viewportRelativeCoordinates[1],this.viewportRelativeCoordinates[2],this.viewportRelativeCoordinates[3])}};r(ka,"__javaDeclarations",[{type:"declaration",signature:"class PerspectiveCamera3d extends Camera3d"},{type:"method",signature:"PerspectiveCamera3d(double fov, double aspect, double near, double far)",java:ka.prototype._cj$_constructor_$PerspectiveCamera3d$double$double$double$double},{type:"method",signature:"void setViewport(double xRel, double yRel, double widthRel, double heightRel)",native:ka.prototype._setViewport}]),r(ka,"type");let rc=ka;const Ca=class Ca extends kn{_cj$_constructor_$Plane3d$double$double$int$int(t,e,i,n,s,a){super._cj$_constructor_$Mesh3d$(t,()=>{const l=new _l(i,n,s,a);this.mesh=new me(l,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Plane3d$double$double(t,e,i,n){super._cj$_constructor_$Mesh3d$(t,()=>{const s=new _l(i,n);this.mesh=new me(s,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Plane3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{const i=new _l(1,1);this.mesh=new me(i,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(Ca,"__javaDeclarations",[{type:"declaration",signature:"class Plane3d extends Mesh3d"},{type:"method",signature:"Plane3d(double width, double height, int widthSegments, int heightSegments)",java:Ca.prototype._cj$_constructor_$Plane3d$double$double$int$int},{type:"method",signature:"Plane3d(double width, double height)",java:Ca.prototype._cj$_constructor_$Plane3d$double$double},{type:"method",signature:"Plane3d()",java:Ca.prototype._cj$_constructor_$Plane3d$}]);let sc=Ca;const Ds=class Ds extends kn{_cj$_constructor_$Ring3d$double$double$int$int$double$double(t,e,i,n,s,a,l,h){l*=Math.PI/180,h*=Math.PI/180,super._cj$_constructor_$Mesh3d$(t,()=>{const c=new Ml(i,n,s,a,l,h);this.mesh=new me(c,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Ring3d$double$double$int$int(t,e,i,n,s,a){super._cj$_constructor_$Mesh3d$(t,()=>{const l=new Ml(i,n,s,a);this.mesh=new me(l,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Ring3d$double$double(t,e,i,n){super._cj$_constructor_$Mesh3d$(t,()=>{const s=new Ml(i,n);this.mesh=new me(s,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Ring3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{const i=new Ml(1,2);this.mesh=new me(i,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(Ds,"__javaDeclarations",[{type:"declaration",signature:"class Ring3d extends Mesh3d"},{type:"method",signature:"Ring3d(double innerRadius, double outerRadius, int thetaSegments, int phiSegments, double thetaStart, double thetaLength)",java:Ds.prototype._cj$_constructor_$Ring3d$double$double$int$int$double$double},{type:"method",signature:"Ring3d(double innerRadius, double outerRadius, int thetaSegments, int phiSegments)",java:Ds.prototype._cj$_constructor_$Ring3d$double$double$int$int},{type:"method",signature:"Ring3d(double innerRadius, double outerRadius)",java:Ds.prototype._cj$_constructor_$Ring3d$double$double},{type:"method",signature:"Ring3d()",java:Ds.prototype._cj$_constructor_$Ring3d$}]);let ac=Ds;const js=class js extends kn{_cj$_constructor_$Sphere3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{const i=new Pl(.5);this.mesh=new me(i,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Sphere3d$double(t,e,i){super._cj$_constructor_$Mesh3d$(t,()=>{const n=new Pl(i);this.mesh=new me(n,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Sphere3d$double$int$int(t,e,i,n,s){super._cj$_constructor_$Mesh3d$(t,()=>{const a=new Pl(i,n,s);this.mesh=new me(a,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Sphere3d$double$int$int$double$double$double$double(t,e,i,n,s,a,l,h,c){super._cj$_constructor_$Mesh3d$(t,()=>{a=a/180*Math.PI,l=l/180*Math.PI,h=h/180*Math.PI,c=c/180*Math.PI;const u=new Pl(i,n,s,a,l,h,c);this.mesh=new me(u,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(js,"__javaDeclarations",[{type:"declaration",signature:"class Sphere3d extends Mesh3d"},{type:"method",signature:"Sphere3d(double radius, int widthSegments, int heightSegments, double phiStart, double phiLength, double thetastart, double thetaLength)",java:js.prototype._cj$_constructor_$Sphere3d$double$int$int$double$double$double$double},{type:"method",signature:"Sphere3d(double radius, int widthSegments, int heightSegments)",java:js.prototype._cj$_constructor_$Sphere3d$double$int$int},{type:"method",signature:"Sphere3d(double radius)",java:js.prototype._cj$_constructor_$Sphere3d$double},{type:"method",signature:"Sphere3d()",java:js.prototype._cj$_constructor_$Sphere3d$}]);let oc=js;const Sa=class Sa extends kn{_cj$_constructor_$Torus3d$double$double$int$int$double(t,e,i,n,s,a,l){l*=Math.PI/180,super._cj$_constructor_$Mesh3d$(t,()=>{const h=new gh(i,n,s,a,l);this.mesh=new me(h,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Torus3d$double$double$int$int(t,e,i,n,s,a){super._cj$_constructor_$Mesh3d$(t,()=>{const l=new gh(i,n,s,a);this.mesh=new me(l,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Torus3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{const i=new gh(2,.5,20,32);this.mesh=new me(i,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(Sa,"__javaDeclarations",[{type:"declaration",signature:"class Torus3d extends Mesh3d"},{type:"method",signature:"Torus3d(double radius, double tube, int radialSegments, int tubularSegments, double arc)",java:Sa.prototype._cj$_constructor_$Torus3d$double$double$int$int$double},{type:"method",signature:"Torus3d(double radius, double tube, int radialSegments, int tubularSegments)",java:Sa.prototype._cj$_constructor_$Torus3d$double$double$int$int},{type:"method",signature:"Torus3d()",java:Sa.prototype._cj$_constructor_$Torus3d$}]);let lc=Sa;const Nn=class Nn extends Vi{};r(Nn,"__javaDeclarations",[{type:"declaration",signature:"enum Alignment",comment:o.AlignmentEnumComment}]),r(Nn,"type"),r(Nn,"values",[new Nn("left",0),new Nn("center",1),new Nn("right",2),new Nn("top",3),new Nn("bottom",4)]);let dc=Nn;function gm(p,t,e,i,n){let s=t.x-p.x,a=t.y-p.y,l=e.x-i.x,h=e.y-i.y,c=e.x-p.x,u=e.y-p.y,g=s*h-a*l;if(g*g<1e-6)return!1;let f=c*h-u*l,b=s*u-a*c,A=f/g,S=b/g,w=A>=0&&A<=1&&S>=0&&S<=1;return w&&n!=null&&(n.x=p.x+A*(t.x-p.x),n.y=p.y+A*(t.y-p.y)),w}function nd(p,t){let e=t.x-p.x,i=t.y-p.y;return Math.sqrt(e*e+i*i)}function Kp(p,t,e=1e-6){for(let i=0;it.y!=p[a].y>t.y&&t.x<(p[a].x-p[s].x)*(t.y-p[s].y)/(p[a].y-p[s].y)+p[s].x&&(e=!e)}return e}function Ib(p,t,e,i,n){let s=e.x,a=e.y,l=i.x,h=i.y,c=(l-s)*(l-s)+(h-a)*(h-a),u=2*(s-p.x)*(l-s)+2*(a-p.y)*(h-a),g=(s-p.x)*(s-p.x)+(a-p.y)*(a-p.y)-t*t,f=u*u-4*c*g;if(f<0)return;let b=Math.sqrt(f),A=(-u+b)/(2*c),S=(-u-b)/(2*c);A>=0&&A<=1&&n.push({x:s+A*(l-s),y:a+A*(h-a)}),S>=0&&S<=1&&n.push({x:s+S*(l-s),y:a+S*(h-a)})}function Db(p,t){for(let e=0;e1)return nd(t,e);let l=p.x+a*(t.x-p.x),h=p.y+a*(t.y-p.y),c=e.x-l,u=e.y-h;return Math.sqrt(c*c+u*u)}function Hp(p,t,e){let i=t.x-p.x,n=t.y-p.y,s=Math.sqrt(n*n+i*i);return s<1e-9?nd(p,e):Math.abs(n*e.x-i*e.y+t.x*p.y-t.y*p.x)/s}function kh(p,t,e=!1,i=!1,n){if(p.length==0||t.length==0)return!1;let s=p.length+(e?0:-1),a=t.length+(i?0:-1);if(e&&ys(p,t[0])||e&&ys(t,p[0]))return!0;for(let l=0;l>16,n.green=(i&65280)>>8,n.blue=i&255,at.__javaDeclarations.push({type:"field",signature:"final static Color "+e});let s=at;s[e]=n}}_constructorColorClass(e,i,n){if(this.red=e,this.green=i,this.blue=n,e<0||e>255)throw new F(o.RedValueOutOfBoundsException());if(i<0||i>255)throw new F(o.GreenValueOutOfBoundsException());if(n<0||n>255)throw new F(o.BlueValueOutOfBoundsException());return this}_constructorColorClass1(e,i,n,s){if(this.red=e,this.green=i,this.blue=n,e<0||e>255)throw new F(o.RedValueOutOfBoundsException());if(i<0||i>255)throw new F(o.GreenValueOutOfBoundsException());if(n<0||n>255)throw new F(o.BlueValueOutOfBoundsException());if(this.alpha=s,s<0||s>1)throw new F(o.AlphaValueOutOfBoundsException());return this}static _randomColor(){return Math.floor(Math.random()*16777215)}static _randomColorMin(e){return this._randomColorMinMax(e,255)}static _randomColorMinMax(e,i){e<0&&(e=0),i<0&&(i=0);let n=(Math.random()*(i-e)+e)*Math.sqrt(3),s=Math.random(),a=Math.random(),l=Math.random(),h=Math.sqrt(s*s+a*a+l*l);return h<1e-10&&(h=1e-10),s=Math.floor(s/h*n),a=Math.floor(a/h*n),l=Math.floor(l/h*n),s>255&&(s=255),a>255&&(a=255),l>255&&(l=255),65536*s+256*a+l}_toString(){return new G(ze.rgbColorToHexRGB(this.red,this.green,this.blue))}static _fromRGB(e,i,n){return e=Math.min(e,255),e=Math.max(0,e),i=Math.min(i,255),i=Math.max(0,i),n=Math.min(n,255),n=Math.max(0,n),e*65536+i*256+n}static _fromRGBA(e,i,n,s){e=Math.min(e,255),e=Math.max(0,e),i=Math.min(i,255),i=Math.max(0,i),n=Math.min(n,255),n=Math.max(0,n),s=Math.min(s,1),s=Math.max(0,s);let a=(e*16777216+i*65536+n*256+Math.floor(s*255)).toString(16);for(;a.length<8;)a="0"+a;return"#"+a}static _fromHSLA(e,i,n,s){e=Math.min(e,360),e=Math.max(0,e),i=Math.min(i,100),i=Math.max(0,i),n=Math.min(n,100),n=Math.max(0,n),s=Math.min(s,1),s=Math.max(0,s);let a=at.hslToRgb(e,i,n),l=(a.r*16777216+a.g*65536+a.b*256+Math.floor(s*255)).toString(16);for(;l.length<8;)l="0"+l;return"#"+l}static _fromHSL(e,i,n){e=Math.min(e,360),e=Math.max(0,e),i=Math.min(i,100),i=Math.max(0,i),n=Math.min(n,100),n=Math.max(0,n);let s=at.hslToRgb(e,i,n);return s.r*65536+s.g*256+s.b}static hslToRgb(e,i,n){i/=100,n/=100;let s=(1-Math.abs(2*n-1))*i,a=s*(1-Math.abs(e/60%2-1)),l=n-s/2,h=0,c=0,u=0;return 0<=e&&e<60?(h=s,c=a,u=0):60<=e&&e<120?(h=a,c=s,u=0):120<=e&&e<180?(h=0,c=s,u=a):180<=e&&e<240?(h=0,c=a,u=s):240<=e&&e<300?(h=a,c=0,u=s):300<=e&&e<360&&(h=s,c=0,u=a),h=Math.round((h+l)*255),c=Math.round((c+l)*255),u=Math.round((u+l)*255),{r:h,g:c,b:u}}fromIntAndAlpha(e,i){e&&(this.red=(e&16711680)/65536,this.green=(e&65280)/256,this.blue=e&255),this.alpha=i}_toInt(){return this.red*65536+this.green*256+this.blue}_mj$equals$boolean$Object(e,i,n){if(n instanceof at){if(n==null){e.s.push(!1),i&&i();return}e.s.push(this.red==n.red&&this.green==n.green&&this.blue==n.blue),i&&i()}else super._mj$equals$boolean$Object(e,i,n)}};r(at,"__javaDeclarations",[{type:"declaration",signature:"class Color extends Object"},{type:"field",signature:"int red"},{type:"field",signature:"int green"},{type:"field",signature:"int blue"},{type:"field",signature:"double alpha"},{type:"method",signature:"Color(int red, int green, int blue)",native:at.prototype._constructorColorClass,comment:o.ColorConstructorFromRGB},{type:"method",signature:"Color(int red, int green, int blue, double alpha)",native:at.prototype._constructorColorClass1,comment:o.ColorConstructorFromRGBA},{type:"method",signature:"static int randomColor()",native:at._randomColor,comment:o.ColorRandomColor0},{type:"method",signature:"static int randomColor(int minimumBrightness)",native:at._randomColorMin,comment:o.ColorRandomColor1},{type:"method",signature:"static int randomColor(int minimumBrightness, int maximumBrightness)",native:at._randomColorMinMax,comment:o.ColorRandomColor2},{type:"method",signature:"final String toString()",native:at.prototype._toString,comment:o.ColorToString},{type:"method",signature:"final int toInt()",native:at.prototype._toInt,comment:o.ColorToInt},{type:"method",signature:"final boolean equals(Color otherColor)",java:at.prototype._mj$equals$boolean$Object},{type:"method",signature:"final int getRed()",template:"(§1.red)",comment:o.ColorGetRed},{type:"method",signature:"final int getGreen()",template:"(§1.green)",comment:o.ColorGetGreen},{type:"method",signature:"final int getBlue()",template:"(§1.blue)",comment:o.ColorGetBlue},{type:"method",signature:"static int fromRGB(int red, int green, int blue)",native:at._fromRGB,comment:o.ColorFromRGB},{type:"method",signature:"static string fromRGBA(int red, int green, int blue, double alpha)",native:at._fromRGBA,comment:o.ColorFromRGBA},{type:"method",signature:"static string fromHSLA(double hue, double saturation, double luminance, double alpha)",native:at._fromHSLA,comment:o.ColorFromHSLA},{type:"method",signature:"static int fromHSL(double hue, double saturation, double luminance)",native:at._fromHSL,comment:o.ColorFromHSL}]),r(at,"type");let Nr=at;const mr=class mr extends Vi{};r(mr,"__javaDeclarations",[{type:"declaration",signature:"enum Direction",comment:o.DirectionEnumComment}]),r(mr,"type"),r(mr,"values",[new mr("top",0),new mr("right",1),new mr("bottom",2),new mr("left",3)]);let Bn=mr;const Qe=class Qe{static initDefaultValues(){Qe.defaultFillColor=8421631,Qe.defaultFillAlpha=1,Qe.defaultBorderAlpha=1,Qe.defaultBorderWidth=10,Qe.defaultVisibility=!0}static setDefaultVisibility(t){Qe.defaultVisibility=t}static setDefaultBorder(t,e,i){if(Qe.defaultBorderWidth=t,typeof e=="string"){let n=ze.parseColorToOpenGL(e);Qe.defaultBorderColor=n.color,Qe.defaultBorderAlpha=i??n.alpha}else Qe.defaultBorderColor=e,i!=null&&(Qe.defaultBorderAlpha=i)}static setDefaultFillColor(t,e){if(typeof t=="string"){let i=ze.parseColorToOpenGL(t);Qe.defaultFillColor=i.color||3158064,Qe.defaultFillAlpha=e??i.alpha}else Qe.defaultFillColor=t,e!=null&&(Qe.defaultFillAlpha=e)}};r(Qe,"defaultFillColor",8421631),r(Qe,"defaultFillAlpha",1),r(Qe,"defaultBorderColor"),r(Qe,"defaultBorderAlpha",1),r(Qe,"defaultBorderWidth",5),r(Qe,"defaultVisibility",!0);let Et=Qe;function Up(p,t){let e=p.parent;e&&(Up(e),ip(p.localTransform,e.worldTransform,p.worldTransform))}const X=class X extends Yo{constructor(){super(...arguments);r(this,"container");r(this,"belongsToGroup");r(this,"centerXInitial",0);r(this,"centerYInitial",0);r(this,"angle",0);r(this,"hitPolygonInitial",[]);r(this,"hitPolygonTransformed",[]);r(this,"hitPolygonDirty",!0);r(this,"reactToMouseEventsWhenInvisible",!1);r(this,"mouseLastSeenInsideObject",!1);r(this,"trackMouseMove",!1);r(this,"scaleFactor",1);r(this,"directionRad",0);r(this,"lastMoveDx",0);r(this,"lastMoveDy",0);r(this,"world");r(this,"mouseEventsImplemented");r(this,"worldTransformDirty",!0)}get _centerX(){return this._getCenterX()}get _centerY(){return this._getCenterY()}set _centerX(e){this._moveTo(e,this._centerY)}set _centerY(e){this._moveTo(this._centerX,e)}get _angle(){return this.angle}set _angle(e){this._setAngle(e)}get _scaleFactor(){return this.scaleFactor}set _scaleFactor(e){this._scale(e/this.scaleFactor)}copyFrom(e){super.copyFrom(e),this.centerXInitial=e.centerXInitial,this.centerYInitial=e.centerYInitial,this.angle=e.angle,this.hitPolygonInitial=e.hitPolygonInitial.slice(),this.hitPolygonTransformed=e.hitPolygonTransformed.slice(),this.hitPolygonDirty=e.hitPolygonDirty,this.reactToMouseEventsWhenInvisible=e.reactToMouseEventsWhenInvisible,this.mouseLastSeenInsideObject=e.mouseLastSeenInsideObject,this.trackMouseMove=e.trackMouseMove,this.scaleFactor=e.scaleFactor,this.directionRad=e.directionRad,this.lastMoveDx=e.lastMoveDx,this.lastMoveDy=e.lastMoveDy,this.container.localTransform.copyFrom(e.container.localTransform),this.container.setFromMatrix(e.container.localTransform),Up(e.container)}render(){}_mj$copy$Shape$(e,i){}_registerListeners(e){super._registerListeners(e);let i=!1;this._mj$onMouseDown$void$double$double$int!=X.prototype._mj$onMouseDown$void$double$double$int&&(i=!0,this.mouseEventsImplemented||(this.mouseEventsImplemented={}),this.mouseEventsImplemented.mousedown=this._mj$onMouseDown$void$double$double$int),this._mj$onMouseUp$void$double$double$int!=X.prototype._mj$onMouseUp$void$double$double$int&&(i=!0,this.mouseEventsImplemented||(this.mouseEventsImplemented={}),this.mouseEventsImplemented.mouseup=this._mj$onMouseUp$void$double$double$int),this._mj$onMouseMove$void$double$double!=X.prototype._mj$onMouseMove$void$double$double&&(i=!0,this.mouseEventsImplemented||(this.mouseEventsImplemented={}),this.mouseEventsImplemented.mousemove=this._mj$onMouseMove$void$double$double),this._mj$onMouseEnter$void$double$double!=X.prototype._mj$onMouseEnter$void$double$double&&(i=!0,this.mouseEventsImplemented||(this.mouseEventsImplemented={}),this.mouseEventsImplemented.mouseenter=this._mj$onMouseEnter$void$double$double),this._mj$onMouseLeave$void$double$double!=X.prototype._mj$onMouseLeave$void$double$double&&(i=!0,this.mouseEventsImplemented||(this.mouseEventsImplemented={}),this.mouseEventsImplemented.mouseleave=this._mj$onMouseLeave$void$double$double),i&&this.world.mouseManager.addShapeWithImplementedMouseMethods(this)}_cj$_constructor_$Shape$(e,i){this.world=e.scheduler.interpreter.retrieveObject("WorldClass"),e.s.push(this),this.world?(this.world.defaultGroup||this.world.shapesWhichBelongToNoGroup.push(this),i&&i()):new e.classes.World()._cj$_constructor_$World$(e,()=>{this.world=e.s.pop(),this.world.defaultGroup||this.world.shapesWhichBelongToNoGroup.push(this),i&&i()})}_isOutsideView(){let e=this.container.getBounds(!0),i=this.world;return e.righti.currentLeft+i.currentWidth||e.bottomi.currentTop+i.currentHeight}_move(e,i){return(e!=0||i!=0)&&(this.lastMoveDx=e,this.lastMoveDy=i),this.container.setFromMatrix(this.container.localTransform.translate(e,i)),this.container.updateLocalTransform(),this.container._didLocalTransformChangeId=this.container._didChangeId,this.setWorldTransformAndHitPolygonDirty(),this}_rotate(e,i,n){if(typeof i>"u"){let s=new ue(this.centerXInitial,this.centerYInitial);this.container.localTransform.apply(s,s),i=s.x,n=s.y}else{let s=new ue(i,n);this.getWorldTransform().applyInverse(s,s),this.container.localTransform.apply(s,s),i=s.x,n=s.y}return this.container.localTransform.translate(-i,-n),this.container.localTransform.rotate(-e/180*Math.PI),this.container.localTransform.translate(i,n),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.container._didLocalTransformChangeId=this.container._didChangeId,this.setWorldTransformAndHitPolygonDirty(),this.angle+=e,this.directionRad+=e/180*Math.PI,this}_setScale(e){return this._scale(e/this.scaleFactor),this}_scale(e,i,n){if(typeof i>"u"){let s=new ue(this.centerXInitial,this.centerYInitial);this.container.localTransform.apply(s,s),i=s.x,n=s.y}else{let s=new ue(i,n);this.getWorldTransform().applyInverse(s,s),this.container.localTransform.apply(s,s),i=s.x,n=s.y}return this.container.localTransform.translate(-i,-n),this.container.localTransform.scale(e,e),this.container.localTransform.translate(i,n),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.container._didLocalTransformChangeId=this.container._didChangeId,this.setWorldTransformAndHitPolygonDirty(),this.scaleFactor*=e,this}_mirrorX(){return this._mirrorXY(-1,1),this}_mirrorY(){return this._mirrorXY(1,-1),this}_mirrorXY(e,i){let n,s,a=new ue(this.centerXInitial,this.centerYInitial);this.container.localTransform.apply(a,a),n=a.x,s=a.y,this.container.localTransform.translate(-n,-s),this.container.localTransform.scale(e,i),this.container.localTransform.translate(n,s),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.container._didLocalTransformChangeId=this.container._didChangeId,this.setWorldTransformAndHitPolygonDirty()}_forward(e){let i=e*Math.cos(this.directionRad),n=-e*Math.sin(this.directionRad);return this._move(i,n),this}_defineDirection(e){return this.directionRad=e/180*Math.PI,this}bringOnePlaneFurtherToFront(){let e=this.container.parent,i=e.children.length-1,n=e.getChildIndex(this.container);n0&&e.setChildIndex(this.container,i-1)}bringToFront(){let e=this.container.parent,i=e.children.length-1;this.belongsToGroup?this.belongsToGroup.setChildIndex(this,i):e.setChildIndex(this.container,i)}sendToBack(){this.belongsToGroup?this.belongsToGroup.setChildIndex(this,0):this.container.parent.setChildIndex(this.container,0)}addToDefaultGroupAndSetDefaultVisibility(){this.container.visible=Et.defaultVisibility,this.world.defaultGroup&&this.world.defaultGroup.add(this)}tint(e){let i;typeof e=="string"?i=ze.parseColorToOpenGL(e).color||3158064:i=e,this.container.tint&&(this.container.tint=i)}_getCenterX(){let e=new ue(this.centerXInitial,this.centerYInitial);return this.container&&this.getWorldTransform().apply(e,e),e.x}_getCenterY(){let e=new ue(this.centerXInitial,this.centerYInitial);return this.container&&this.getWorldTransform().apply(e,e),e.y}getCenter(){let e=new ue(this.centerXInitial,this.centerYInitial);return this.getWorldTransform().apply(e,e)}destroy(){if(this.isDestroyed)return;let e=this.world;if(this.belongsToGroup){let n=this.belongsToGroup.shapes.indexOf(this);n>=0&&this.belongsToGroup.shapes.splice(n,1),this.belongsToGroup.container.removeChildAt(this.belongsToGroup.container.getChildIndex(this.container))}else{let n=e.shapesWhichBelongToNoGroup.indexOf(this);n>=0&&e.shapesWhichBelongToNoGroup.splice(n,1)}let i=e.shapesNotAffectedByWorldTransforms.indexOf(this);i>=0&&e.shapesNotAffectedByWorldTransforms.splice(i,1),this.world.interpreter.actorManager.shapesToDestroySafely.push(this),this.mouseEventsImplemented&&this.world.mouseManager.removeShapeWithImplementedMouseMethods(this),super.destroy()}transformHitPolygon(){if(!this.hitPolygonDirty)return;this.hitPolygonTransformed=[];let e=this.getWorldTransform();for(let i of this.hitPolygonInitial)this.hitPolygonTransformed.push({x:e.a*i.x+e.c*i.y+e.tx,y:e.b*i.x+e.d*i.y+e.ty});this.hitPolygonDirty=!1}_containsPoint(e,i){return this.container.getBounds().containsPoint(e,i)?this.hitPolygonInitial==null?!0:(this.hitPolygonDirty&&this.transformHitPolygon(),ys(this.hitPolygonTransformed,{x:e,y:i})):!1}_moveTo(e,i){return this._move(e-this._getCenterX(),i-this._getCenterY()),this}_setX(e){this._move(e-this._getCenterX(),0)}_setY(e){return this._move(0,e-this._getCenterY()),this}_defineCenter(e,i){let n=new ue(e,i);return this.getWorldTransform().applyInverse(n,n),this.centerXInitial=n.x,this.centerYInitial=n.y,this}_defineCenterRelative(e,i){let n=this.container.getBounds(!1),s=new ue(n.left,n.top),a=new ue(n.right,n.bottom);return s=this.world.app.stage.localTransform.applyInverse(s),a=this.world.app.stage.localTransform.applyInverse(a),this._defineCenter(s.x+(a.x-s.x)*e,s.y+(a.y-s.y)*i),this}static _setDefaultVisibility(e){Et.setDefaultVisibility(e)}_setVisible(e){return this.container.visible=e,this}_setStatic(e){let i=this.world.shapesNotAffectedByWorldTransforms;if(e)i.push(this);else{let n=i.indexOf(this);n>=0&&i.splice(n,1)}return this}_mj$onMouseUp$void$double$double$int(e,i,n,s,a){}_mj$onMouseDown$void$double$double$int(e,i,n,s,a){}_mj$onMouseEnter$void$double$double(e,i,n,s){}_mj$onMouseLeave$void$double$double(e,i,n,s){}_mj$onMouseMove$void$double$double(e,i,n,s){}_collidesWith(e){return!this.turtle&&e.turtle?e._collidesWith(this):e.shapes?e._collidesWith(this):this.isDestroyed==null||e.isDestroyed==null||!this.hasOverlappingBoundingBoxWith(e)?!1:this.hitPolygonInitial==null||e.hitPolygonInitial==null?!0:(this.hitPolygonDirty&&this.transformHitPolygon(),e.hitPolygonDirty&&e.transformHitPolygon(),kh(this.hitPolygonTransformed,e.hitPolygonTransformed,!0,!0))}hasOverlappingBoundingBoxWith(e,i){i||(i=this.container.getBounds());let n=e.container.getBounds();return!(i.left>n.right||n.left>i.right||i.top>n.bottom||n.top>i.bottom)}getFirstCollidingSpriteHelper(e,i,n){let s=null;for(let a of i)if(a!=this&&!a.isDestroyed)if(a.shapes){if(s=this.getFirstCollidingSpriteHelper(e,a.shapes,n),s)break}else{let l=a.imageIndex;if(!l||e!=-1&&l!=e||!this.hasOverlappingBoundingBoxWith(a,n))continue;if(this.hitPolygonInitial==null||a.hitPolygonInitial==null){s=a;break}if(a.hitPolygonDirty&&a.transformHitPolygon(),kh(this.hitPolygonTransformed,a.hitPolygonTransformed,!0,!0)){s=a;break}}return s}_getFirstCollidingSprite(e){return this.hitPolygonDirty&&this.transformHitPolygon(),this.getFirstCollidingSpriteHelper(e,this.world.shapesWhichBelongToNoGroup,this.container.getBounds())}_getCollidingShapes(e){if(e==null)return[];if(!this.hasOverlappingBoundingBoxWith(e))return[];let i=[];for(let n of e.shapes)this._collidesWith(n)&&i.push(n);return i}collidesWithAnyShapeHelper(e,i,n){this.hitPolygonDirty&&this.transformHitPolygon();let s=null;for(let a of i)if(a!=this&&!a.isDestroyed&&!(e!=null&&!a.shapes&&a.fillColor!=e)&&this.hasOverlappingBoundingBoxWith(a,n)){if(a.shapes&&!this.shapes&&(s=this.collidesWithAnyShapeHelper(e,a.shapes,n)))break;if(this.shapes){let l=!1;for(let h of this.shapes)if(s=h.collidesWithAnyShapeHelper(e,[a],n)){l=!0;break}if(l)break}if(this.hitPolygonInitial==null||a.hitPolygonInitial==null){s=null;break}if(this.hitPolygonTransformed.length==0){s=null;break}if(a.hitPolygonDirty&&a.transformHitPolygon(),kh(this.hitPolygonTransformed,a.hitPolygonTransformed,!0,!0)){s=a;break}}return s}_collidesWithAnyShape(e){if(e&&(typeof e=="string"?e=ze.parseColorToOpenGL(e).color:e instanceof Nr&&(e=e._toInt())),this.isDestroyed)return!1;let i=this.container.getBounds();return this.hitPolygonDirty&&this.transformHitPolygon(),this.collidesWithAnyShapeHelper(e,this.world.shapesWhichBelongToNoGroup,i)!=null}_getFirstCollidingShape(){if(this.isDestroyed)return null;let e=this.container.getBounds();return this.hitPolygonDirty&&this.transformHitPolygon(),this.collidesWithAnyShapeHelper(void 0,this.world.shapesWhichBelongToNoGroup,e)}setWorldTransformAndHitPolygonDirty(){this.worldTransformDirty=!0,this.hitPolygonDirty=!0}getWorldTransform(){var i;if(!this.worldTransformDirty)return this.container._worldTransform||Ki.IDENTITY;this.belongsToGroup!=null&&this.belongsToGroup.getWorldTransform();let e=this.container.parent;return(i=this.container)._worldTransform||(i._worldTransform=new Ki),this.belongsToGroup!=null?ip(this.container.localTransform,e._worldTransform,this.container._worldTransform):this.container._worldTransform.copyFrom(this.container.localTransform),this.worldTransformDirty=!1,this.container._worldTransform}borderContainsPoint(e,i,n=-1){return!1}_setAngle(e){return this._rotate(e-this.angle),this}_bringToFront(){if(this.belongsToGroup)return this.belongsToGroup.setChildIndex(this,this.belongsToGroup.shapes.length-1),this;let e=this.world.app.stage,i=e.children.length-1;return e.setChildIndex(this.container,i),this}_sendToBack(){return this.belongsToGroup?(this.belongsToGroup.setChildIndex(this,0),this):(this.world.app.stage.setChildIndex(this.container,0),this)}_setTintInt(e){return typeof this.container.tint<"u"&&(this.container.tint=e%16777216),this}_setTintString(e){let i=ze.parseColorToOpenGL(e);return typeof this.container.tint<"u"&&(this.container.tint=i.color),this}_setTintColor(e){return e==null?this.container.tint=16777215:this.container.tint=e._toInt(),this}_startTrackingEveryMouseMovement(){this.trackMouseMove=!0}_stopTrackingEveryMouseMovement(){this.trackMouseMove=!1}_directionRelativeTo(e){if(e==null)throw new F(o.shapeNullError());if(e.isDestroyed)throw new F(o.shapeAlreadyDestroyedError());let i=this.container.getBounds(),n=e.container.getBounds(),s=n.left-i.right,a=i.left-n.right,l=n.top-i.bottom,h=i.top-n.bottom,c=[];this.lastMoveDx>0?c.push({distance:s,ei:Bn.values[3]}):this.lastMoveDx<0&&c.push({distance:a,ei:Bn.values[1]}),this.lastMoveDy>0?c.push({distance:l,ei:Bn.values[0]}):this.lastMoveDy<0&&c.push({distance:h,ei:Bn.values[2]}),c.length==0&&(c=[{distance:s,ei:Bn.values[3]},{distance:a,ei:Bn.values[1]},{distance:l,ei:Bn.values[0]},{distance:h,ei:Bn.values[2]}]);let u=c[0].distance,g=c[0].ei;for(let f=1;fu&&(u=c[f].distance,g=c[f].ei);return g}_moveBackFrom(e,i){if(e==null)throw new F(o.shapeNullError());if(e.isDestroyed)throw new F(o.shapeAlreadyDestroyedError());let n=this.lastMoveDx,s=this.lastMoveDy,a=Math.sqrt(n*n+s*s);if(a<.001||!this._collidesWith(e))return;let l=0;this._move(-n,-s);let h=-1;for(;this._collidesWith(e);){l=h;let g=h*2;if(this._move(n*(g-h),s*(g-h)),h=g,(h+1)*a<-100){this._move(n*(-1-h),s*(-1-h));return}}let c=h,u=!1;for(;(l-c)*a>1;){let g=(l+c)/2;this._move(n*(g-h),s*(g-h)),(u=this._collidesWith(e))?l=g:c=g,h=g}return i&&!u?this._move(n*(l-h),s*(l-h)):u&&!i&&this._move(n*(c-h),s*(c-h)),this.lastMoveDx=n,this.lastMoveDy=s,this}_mj$getWorld$World(e,i){const n=e.scheduler.interpreter.retrieveObject("WorldClass");if(n==null)throw this.world3d!=null?new F(o.actorWorld2dDoesntexistOn3dObjectException()):new F(o.actorWorld2dDoesntexistException());e.s.push(n)}_reactToMouseEventsWhenInvisible(e){this.reactToMouseEventsWhenInvisible=e}};r(X,"__javaDeclarations",[{type:"declaration",signature:"abstract class Shape extends Actor",comment:o.shapeClassComment},{type:"field",signature:"private double angle",nativeIdentifier:"_angle",comment:o.shapeAngleComment},{type:"field",signature:"protected double centerX",nativeIdentifier:"_centerX",comment:o.shapeCenterXComment},{type:"field",signature:"protected double centerY",nativeIdentifier:"_centerY",comment:o.shapeCenterYComment},{type:"field",signature:"private double scaleFactor",nativeIdentifier:"_scaleFactor",comment:o.shapeScaleFactorComment},{type:"method",signature:"Shape()",java:X.prototype._cj$_constructor_$Shape$},{type:"method",signature:"final This move(double dx, double dy)",native:X.prototype._move,comment:o.shapeMoveComment},{type:"method",signature:"final This rotate(double angleInDeg, double centerX, double centerY)",native:X.prototype._rotate,comment:o.shapeRotateComment1},{type:"method",signature:"final This rotate(double angleInDeg)",native:X.prototype._rotate,comment:o.shapeRotateComment2},{type:"method",signature:"final This scale(double factor, double centerX, double centerY)",native:X.prototype._scale,comment:o.shapeScaleComment1},{type:"method",signature:"final This setScale(double newScale)",native:X.prototype._setScale,comment:o.shapeSetScaleComment},{type:"method",signature:"final This scale(double factor)",native:X.prototype._scale,comment:o.shapeScaleComment2},{type:"method",signature:"final This mirrorX()",native:X.prototype._mirrorX,comment:o.shapeMirrorXComment},{type:"method",signature:"final This mirrorY()",native:X.prototype._mirrorY,comment:o.shapeMirrorYComment},{type:"method",signature:"final This defineDirection(double angleInDeg)",native:X.prototype._defineDirection,comment:o.shapeDefineDirectionComment},{type:"method",signature:"final This forward(double distance)",native:X.prototype._forward,comment:o.shapeForwardComment},{type:"method",signature:"final boolean isOutsideView()",native:X.prototype._isOutsideView,comment:o.shapeOutsideViewComment},{type:"method",signature:"final double getCenterX()",native:X.prototype._getCenterX,comment:o.shapeCenterXComment},{type:"method",signature:"final double getCenterY()",native:X.prototype._getCenterY,comment:o.shapeCenterYComment},{type:"method",signature:"final double getAngle()",template:"(§1.angle)",comment:o.shapeAngleComment},{type:"method",signature:"final This setAngle(double newAngle)",native:X.prototype._setAngle,comment:o.shapeSetAngleComment},{type:"method",signature:"final boolean containsPoint(double x, double y)",native:X.prototype._containsPoint,comment:o.shapeContainsPointComment},{type:"method",signature:"final This moveTo(double x, double y)",native:X.prototype._moveTo,comment:o.shapeMoveToComment},{type:"method",signature:"final This setX(double x)",native:X.prototype._setX,comment:o.shapeSetXComment},{type:"method",signature:"final This setY(double y)",native:X.prototype._setY,comment:o.shapeSetYComment},{type:"method",signature:"final This defineCenter(double x, double y)",native:X.prototype._defineCenter,comment:o.shapeDefineCenterComment},{type:"method",signature:"final This defineCenterRelative(double x, double y)",native:X.prototype._defineCenterRelative,comment:o.shapeDefineCenterRelativeComment},{type:"method",signature:"final This tint(int color)",native:X.prototype._setTintInt,comment:o.shapeTintComment},{type:"method",signature:"final This tint(string color)",native:X.prototype._setTintString,comment:o.shapeTintComment},{type:"method",signature:"final This tint(Color color)",native:X.prototype._setTintColor,comment:o.shapeTintComment},{type:"method",signature:"final Direction directionRelativeTo(Shape otherShape)",native:X.prototype._directionRelativeTo,comment:o.shapeDirectionRelativeToComment},{type:"method",signature:"final This moveBackFrom(Shape otherShape, boolean keepColliding)",native:X.prototype._moveBackFrom,comment:o.shapeMoveBackFromComment},{type:"method",signature:"static void setDefaultVisibility(boolean isVisible)",native:X._setDefaultVisibility,comment:o.shapeSetDefaultVisibilityComment},{type:"method",signature:"final This setVisible(boolean isVisible)",native:X.prototype._setVisible,comment:o.shapeSetVisibleComment},{type:"method",signature:"final boolean isVisible()",template:"§1.container.visible",comment:o.shapeSetVisibleComment},{type:"method",signature:"final This setStatic(boolean isStatic)",native:X.prototype._setStatic,comment:o.shapeSetStaticComment},{type:"method",signature:"final This bringToFront()",native:X.prototype._bringToFront,comment:o.shapeBringToFrontComment},{type:"method",signature:"final This sendToBack()",native:X.prototype._sendToBack,comment:o.shapeSendToBackComment},{type:"method",signature:"final boolean collidesWith(Shape otherShape)",native:X.prototype._collidesWith,comment:o.shapeCollidesWithComment},{type:"method",signature:"final boolean collidesWithAnyShape()",native:X.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithAnyShapeComment},{type:"method",signature:"final boolean collidesWithFillColor(int color)",native:X.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithFillColorComment},{type:"method",signature:"final boolean collidesWithFillColor(string color)",native:X.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithFillColorComment},{type:"method",signature:"final boolean collidesWithFillColor(Color color)",native:X.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithFillColorComment},{type:"method",signature:"final Sprite getFirstCollidingSprite(int imageIndex)",native:X.prototype._getFirstCollidingSprite,comment:o.shapeGetFirstCollidingSpriteComment},{type:"method",signature:"final Shape getFirstCollidingShape()",native:X.prototype._getFirstCollidingShape,comment:o.shapeGetFirstCollidingShapeComment},{type:"method",signature:"final T[] getCollidingShapes(Group group)",native:X.prototype._getCollidingShapes,comment:o.shapeGetCollidingShapesComment},{type:"method",signature:"final void reactToMouseEventsWhenInvisible(boolean b)",native:X.prototype._reactToMouseEventsWhenInvisible,comment:o.shapeReactToMouseEventsWhenInvisibleComment},{type:"method",signature:"void onMouseUp(double x, double y, int button)",java:X.prototype._mj$onMouseUp$void$double$double$int,comment:o.shapeOnMouseUpComment},{type:"method",signature:"void onMouseDown(double x, double y, int button)",java:X.prototype._mj$onMouseDown$void$double$double$int,comment:o.shapeOnMouseDownComment},{type:"method",signature:"void onMouseEnter(double x, double y)",java:X.prototype._mj$onMouseEnter$void$double$double,comment:o.shapeOnMouseEnterComment},{type:"method",signature:"void onMouseLeave(double x, double y)",java:X.prototype._mj$onMouseLeave$void$double$double,comment:o.shapeOnMouseLeaveComment},{type:"method",signature:"void onMouseMove(double x, double y)",java:X.prototype._mj$onMouseMove$void$double$double,comment:o.shapeOnMouseMoveComment},{type:"method",signature:"void startTrackingEveryMouseMovement()",native:X.prototype._startTrackingEveryMouseMovement,comment:o.shapeStartTrackingEveryMouseMovementComment},{type:"method",signature:"void stopTrackingEveryMouseMovement()",native:X.prototype._stopTrackingEveryMouseMovement,comment:o.shapeStartTrackingEveryMouseMovementComment},{type:"method",signature:"abstract Shape copy()",java:X.prototype._mj$copy$Shape$,comment:o.shapeCopyComment},{type:"method",signature:"final World getWorld()",java:X.prototype._mj$getWorld$World,comment:o.getWorldComment}]),r(X,"type");let Hi=X;const Ee=class Ee extends Hi{constructor(){super(...arguments);r(this,"fillColor",Et.defaultFillColor);r(this,"fillAlpha",Et.defaultFillAlpha);r(this,"borderColor",Et.defaultBorderColor);r(this,"borderAlpha",Et.defaultBorderAlpha);r(this,"borderWidth",Et.defaultBorderWidth)}_cj$_constructor_$FilledShape$(e,i){this._cj$_constructor_$Shape$(e,i)}render(){}copyFrom(e){super.copyFrom(e),this.fillColor=e.fillColor,this.fillAlpha=e.fillAlpha,this.borderColor=e.borderColor,this.borderAlpha=e.borderAlpha,this.borderWidth=e.borderWidth}_getFillColor(){if(this.fillColor==null)return null;let e=new Nr;return e.fromIntAndAlpha(this.fillColor,this.fillAlpha),e}_getFillColorAsInt(){return this.fillColor||0}_getBorderColor(){if(this.borderColor==null)return null;let e=new Nr;return e.fromIntAndAlpha(this.borderColor,this.borderAlpha),e}_getBorderColorAsInt(){return this.borderColor||0}_setBorderWidth(e){return this.borderWidth=e,this.render(),this}_getBorderWidth(){return this.borderWidth}_setAlpha(e){return this.fillAlpha=e,this.borderAlpha=e,this.render(),this}_getAlpha(){return this.fillAlpha}_setFillColorInt(e){return this.fillColor=e%16777216,this.render(),this}_setFillColorColor(e,i){return e==null?this.fillColor=null:(this.fillColor=e.red*65536+e.green*256+e.blue,i&&(this.fillAlpha=i)),this.render(),this}_setBorderColorColor(e,i){return e==null?this.borderColor=null:(this.borderColor=e.red*65536+e.green*256+e.blue,i&&(this.borderAlpha=i)),this.render(),this}_setFillColorIntDouble(e,i){return this.fillColor=e%16777216,this.fillAlpha=i,this.render(),this}_setFillColorString(e){let i=ze.parseColorToOpenGL(e);return this.fillColor=i.color,this.fillAlpha=i.alpha,this.render(),this}_setFillColorStringDouble(e,i){let n=ze.parseColorToOpenGL(e);return this.fillColor=n.color,this.fillAlpha=i,this.render(),this}_setBorderColorInt(e){return this.borderColor=e%16777216,this.render(),this}_setBorderColorIntDouble(e,i){return this.borderColor=e%16777216,this.borderAlpha=e,this.render(),this}_setBorderColorString(e){let i=ze.parseColorToOpenGL(e);return this.borderColor=i.color,this.borderAlpha=i.alpha,this.render(),this}_setBorderColorStringDouble(e,i){let n=ze.parseColorToOpenGL(e);return this.borderColor=n.color,this.borderAlpha=i,this.render(),this}static _setDefaultBorder(e,i,n){if(Et.defaultBorderWidth=e,typeof i=="string"){let s=ze.parseColorToOpenGL(i);Et.defaultBorderColor=s.color,Et.defaultBorderAlpha=n??s.alpha}else Et.defaultBorderColor=i,n!=null&&(Et.defaultBorderAlpha=n)}static _setDefaultFillColor(e,i){if(typeof e=="string"){let n=ze.parseColorToOpenGL(e);Et.defaultFillColor=n.color||3158064,Et.defaultFillAlpha=i??n.alpha}else Et.defaultFillColor=e,i!=null?Et.defaultFillAlpha=i:Et.defaultFillAlpha=1}borderContainsPoint(e,i,n=-1){return typeof this.borderColor>"u"||n!=-1&&n!=this.borderColor||!this.container.getBounds().containsPoint(e,i)?!1:this.hitPolygonInitial==null?!0:(this.hitPolygonDirty&&this.transformHitPolygon(),Eb(this.hitPolygonTransformed,{x:e,y:i},this.borderWidth/2))}};r(Ee,"__javaDeclarations",[{type:"declaration",signature:"abstract class FilledShape extends Shape"},{type:"method",signature:"FilledShape()",java:Ee.prototype._cj$_constructor_$FilledShape$},{type:"method",signature:"Color getFillColor()",native:Ee.prototype._getFillColor,comment:o.fsGetFillColorComment},{type:"method",signature:"int getFillColorAsInt()",native:Ee.prototype._getFillColorAsInt,comment:o.fsGetFillColorComment},{type:"method",signature:"final This setFillColor(Color color)",native:Ee.prototype._setFillColorColor,comment:o.fsSetFillColorCommentColor},{type:"method",signature:"final This setFillColor(Color color, double alpha)",native:Ee.prototype._setFillColorColor,comment:o.fsSetFillColorCommentColor},{type:"method",signature:"final This setFillColor(int color)",native:Ee.prototype._setFillColorInt,comment:o.fsSetFillColorCommentInt},{type:"method",signature:"final This setFillColor(int color, double alpha)",native:Ee.prototype._setFillColorIntDouble,comment:o.fsSetFillColorCommentIntDouble},{type:"method",signature:"final This setFillColor(string color)",native:Ee.prototype._setFillColorString,comment:o.fsSetFillColorCommentString},{type:"method",signature:"final This setFillColor(string color, double alpha)",native:Ee.prototype._setFillColorStringDouble,comment:o.fsSetFillColorCommentStringDouble},{type:"method",signature:"Color getBorderColor()",native:Ee.prototype._getBorderColor,comment:o.fsGetBorderColorComment},{type:"method",signature:"int getBorderColorAsInt()",native:Ee.prototype._getBorderColorAsInt,comment:o.fsGetBorderColorComment},{type:"method",signature:"final This setBorderColor(Color color)",native:Ee.prototype._setBorderColorColor,comment:o.fsSetBorderColorCommentColor},{type:"method",signature:"final This setBorderColor(Color color, double alpha)",native:Ee.prototype._setBorderColorColor,comment:o.fsSetBorderColorCommentColor},{type:"method",signature:"final This setBorderColor(int color)",native:Ee.prototype._setBorderColorInt,comment:o.fsSetBorderColorCommentInt},{type:"method",signature:"final This setBorderColor(int color, double alpha)",native:Ee.prototype._setBorderColorIntDouble,comment:o.fsSetBorderColorCommentIntDouble},{type:"method",signature:"final This setBorderColor(string color)",native:Ee.prototype._setBorderColorString,comment:o.fsSetBorderColorCommentString},{type:"method",signature:"final This setBorderColor(string color, double alpha)",native:Ee.prototype._setBorderColorStringDouble,comment:o.fsSetBorderColorCommentStringDouble},{type:"method",signature:"final This setBorderWidth(double width)",native:Ee.prototype._setBorderWidth,comment:o.fsSetBorderWidthComment},{type:"method",signature:"double getBorderWidth()",native:Ee.prototype._getBorderWidth,comment:o.fsGetBorderWidthComment},{type:"method",signature:"final This setAlpha(double alpha)",native:Ee.prototype._setAlpha,comment:o.fsSetAlphaComment},{type:"method",signature:"double getAlpha()",native:Ee.prototype._getAlpha,comment:o.fsGetAlphaComment},{type:"method",signature:"static void setDefaultBorder(double width, string color)",native:Ee._setDefaultBorder,comment:o.fsSetDefaultBorderComment1},{type:"method",signature:"static void setDefaultBorder(double width, int color, double alpha)",native:Ee._setDefaultBorder,comment:o.fsSetDefaultBorderComment2},{type:"method",signature:"static void setDefaultFillColor(string color)",native:Ee._setDefaultFillColor,comment:o.fsSetDefaultFillColor},{type:"method",signature:"static void setDefaultFillColor(int color, double alpha)",native:Ee._setDefaultFillColor,comment:o.fsSetDefaultFillColor},{type:"method",signature:"static void setDefaultFillColor(int color)",native:Ee._setDefaultFillColor,comment:o.fsSetDefaultFillColor}]),r(Ee,"type");let jt=Ee;const Si=class Si extends jt{constructor(){super(...arguments);r(this,"mx");r(this,"my");r(this,"innerRadius");r(this,"outerRadius");r(this,"startAngleRad");r(this,"endAngleRad")}_cj$_constructor_$Arc$(e,i){this._cj$_constructor_$Arc$double$double$double$double$double$double(e,i,200,200,100,200,0,180)}_cj$_constructor_$Arc$double$double$double$double$double$double(e,i,n,s,a,l,h,c){this._cj$_constructor_$FilledShape$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.mx=n,this.my=s,this.innerRadius=a,this.outerRadius=l,this.startAngleRad=h/180*Math.PI,this.endAngleRad=c/180*Math.PI,this.render()})}_mj$copy$Shape$(e,i){this._mj$copy$Arc$(e,i)}_mj$copy$Arc$(e,i){let n=new Si;n._cj$_constructor_$Arc$double$double$double$double$double$double(e,i,this.mx,this.my,this.innerRadius,this.outerRadius,this.startAngleRad,this.endAngleRad),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){this.hitPolygonInitial=[];let e=this.endAngleRad-this.startAngleRad;for(let n=0;n<16;n++){let s=this.startAngleRad+e*n;this.hitPolygonInitial.push({x:this.mx+this.outerRadius*Math.cos(s),y:this.my+this.outerRadius*Math.sin(s)})}for(let n=0;n<16;n++){let s=this.endAngleRad-e*n;this.hitPolygonInitial.push({x:this.mx+this.innerRadius*Math.cos(s),y:this.my+this.innerRadius*Math.sin(s)})}this.hitPolygonDirty=!0;let i=this.container;i==null?(i=new He,this.container=i,this.world.app.stage.addChild(i)):i.clear(),this.startAngleRad===void 0&&(this.startAngleRad=0),this.endAngleRad===void 0&&(this.endAngleRad=Math.PI*2),Math.abs(this.endAngleRad-this.startAngleRad)>=Math.PI*2?(i.circle(this.mx,this.my,this.outerRadius),this.fillColor!=null&&(i.fill(this.fillColor),i.alpha=this.fillAlpha),i.circle(this.mx,this.my,this.innerRadius),i.cut()):(i.moveTo(this.mx+this.outerRadius*Math.cos(this.startAngleRad),this.my-this.outerRadius*Math.sin(this.startAngleRad)),i.lineTo(this.mx+this.innerRadius*Math.cos(this.startAngleRad),this.my-this.innerRadius*Math.sin(this.startAngleRad)),i.arc(this.mx,this.my,this.innerRadius,-this.startAngleRad,-this.endAngleRad,!0).arc(this.mx,this.my,this.outerRadius,-this.endAngleRad,-this.startAngleRad,!1),this.fillColor!=null&&(i.fill(this.fillColor),i.alpha=this.fillAlpha)),this.borderColor!=null&&i.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5}),i.closePath()}_setInnerRadius(e){this.innerRadius=e/this.container.scale.x,this.render()}_setOuterRadius(e){this.outerRadius=e/this.container.scale.x,this.render()}_setStartAngle(e){this.startAngleRad=e/180*Math.PI,this.render()}_setEndAngle(e){this.endAngleRad=e/180*Math.PI,this.render()}containsPoint(e,i){if(!this.container.getBounds().containsPoint(e,i))return!1;let n=new ue(e,i);this.container.worldTransform.applyInverse(n,n);let a=n.x-this.mx,l=n.y-this.my,h=Math.atan2(-l,a),c=a*a+l*l;if(c<=this.outerRadius*this.outerRadius&&c>=this.innerRadius*this.innerRadius){let u=2*Math.PI,g=this.startAngleRad<0?u+this.startAngleRad:this.startAngleRad,f=this.endAngleRad<0?u+this.endAngleRad:this.endAngleRad,A=(h<0?u+h:h)>=g&&g<=f;return g<=f?A:!A}else return!1}_mj$toString$String$(e,i){e.s.push(new G(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{startAngle: ${this.startAngleRad/Math.PI*180*this.scaleFactor}, endAngle: ${this.endAngleRad/Math.PI*180*this.scaleFactor}, innerRadius: ${this.innerRadius*this.scaleFactor}, outerRadius: ${this.outerRadius*this.scaleFactor}, mx: ${this._getCenterX()}, my: ${this._getCenterY()} }`}};r(Si,"__javaDeclarations",[{type:"declaration",signature:"class Arc extends FilledShape",comment:o.ArcClassComment},{type:"method",signature:"Arc(double mx, double my, double innerRadius, double outerRadius, double startAngle, double endAngle)",java:Si.prototype._cj$_constructor_$Arc$double$double$double$double$double$double,comment:o.ArcConstructorComment},{type:"method",signature:"Arc()",java:Si.prototype._cj$_constructor_$Arc$,comment:o.ArcConstructorComment1},{type:"method",signature:"final void setInnerRadius(double innerRadius)",native:Si.prototype._setInnerRadius,comment:o.ArcSetInnerRadiusComment},{type:"method",signature:"final double getInnerRadiusX()",template:"(§1.innerRadius*§1.scaleFactor)",comment:o.ArcGetInnerRadiusComment},{type:"method",signature:"final void setOuterRadius(double outerRadius)",native:Si.prototype._setOuterRadius,comment:o.ArcSetOuterRadiusComment},{type:"method",signature:"final double getOuterRadiusX()",template:"(§1.outerRadius*§1.scaleFactor)",comment:o.ArcGetOuterRadiusComment},{type:"method",signature:"final void setStartAngle(double startAngle)",native:Si.prototype._setStartAngle,comment:o.ArcSetStartAngleComment},{type:"method",signature:"final double getStartAngleX()",template:"(§1.startAngle/180*Math.PI)",comment:o.ArcGetStartAngleComment},{type:"method",signature:"final void setEndAngle(double endAngle)",native:Si.prototype._setEndAngle,comment:o.ArcSetEndAngleComment},{type:"method",signature:"final double getEndAngleX()",template:"(§1.endAngle/180*Math.PI)",comment:o.ArcGetEndAngleComment},{type:"method",signature:"final Arc copy()",java:Si.prototype._mj$copy$Arc$,comment:o.ArcCopyComment},{type:"method",signature:"final boolean containsPoint(double x, double y)",native:Si.prototype._containsPoint,comment:o.shapeContainsPointComment},{type:"method",signature:"String toString()",java:Si.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Si,"type");let hc=Si;const xa=class xa extends z{constructor(e,i){super();r(this,"x");r(this,"y");this.x=e||0,this.y=i||0}_cj$_constructor_$Position$int$int(e,i,n,s){this.x=n,this.y=s,e.s.push(this),i&&i()}_mj$toString$String$(e,i){e.s.push(new G(`(${this.x}, ${this.y})`)),i&&i()}};r(xa,"__javaDeclarations",[{type:"declaration",signature:"class Position extends Object",comment:o.PositionClassComment},{type:"field",signature:"int x",comment:o.PositionXComment},{type:"field",signature:"int y",comment:o.PositionYComment},{type:"method",signature:"Position(int x, int y)",java:xa.prototype._cj$_constructor_$Position$int$int,comment:o.PositionConstructorComment},{type:"method",signature:"String toString()",java:xa.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(xa,"type");let Zo=xa;function kA(p){throw new Error('Could not dynamically require "'+p+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}const Ye=class Ye extends Hi{constructor(){super(...arguments);r(this,"left");r(this,"top");r(this,"width");r(this,"height");r(this,"anzahlX");r(this,"anzahlY");r(this,"texture");r(this,"ts");r(this,"data");r(this,"isBigEndian",!0);r(this,"timerID")}_cj$_constructor_$Bitmap$int$int$double$double$double$double(e,i,n,s,a,l,h,c,u,g=!1){this._cj$_constructor_$Shape$(e,()=>{this.centerXInitial=a+h/2,this.centerYInitial=l+c/2,this.left=a,this.top=l,this.width=h,this.height=c,this.anzahlX=n,this.anzahlY=s,this.initBitmap(u,g)})}initBitmap(e,i=!1){let n=new Uint32Array([287454020]),s=new Uint8Array(n.buffer);s[0]===68?this.isBigEndian=!1:s[0]===17&&(this.isBigEndian=!0),this.centerXInitial=this.left+this.width/2,this.centerYInitial=this.top+this.height/2,this.hitPolygonInitial=[{x:this.left,y:this.top},{x:this.left,y:this.top+this.height},{x:this.left+this.width,y:this.top+this.height},{x:this.left+this.width,y:this.top}],this.initGraphics(e,i);let a=this.container;a.localTransform.scale(this.width/this.anzahlX,this.height/this.anzahlY),a.localTransform.translate(this.left,this.top),a.setFromMatrix(a.localTransform),a.updateLocalTransform(),a._didLocalTransformChangeId=a._didChangeId,this.setWorldTransformAndHitPolygonDirty();let l=new ue(this.centerXInitial,this.centerYInitial);a.localTransform.applyInverse(l,l),this.centerXInitial=l.x,this.centerYInitial=l.y}initGraphics(e,i=!1){e==null?this.data=new Uint32Array(this.anzahlX*this.anzahlY):i?this.data=e.data:this.data=new Uint32Array(e.data);let n=new Uint8Array(this.data.buffer);i?this.texture=e.texture:this.texture=Jm.from(new ep({resource:n,width:this.anzahlX,height:this.anzahlY,scaleMode:"nearest",format:"rgba8unorm",alphaMode:"premultiplied-alpha"})),this.container=new Vn(this.texture),this.world.app.stage.addChild(this.container)}_mj$copy$Shape$(e,i){this._mj$copy$Bitmap$(e,i)}_mj$copy$Bitmap$(e,i){let n=new Ye;n._cj$_constructor_$Bitmap$int$int$double$double$double$double(e,i,this.anzahlX,this.anzahlY,this.left,this.top,this.width,this.height,this,!0),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){}uploadData(){this.timerID||(this.timerID=setTimeout(()=>{this.texture.source.update(),this.timerID=void 0},100))}_getColor(e,i){let n=e+i*this.anzahlX,s=this.data[n],a=new Nr;return a.red=s&255,a.green=(s&65280)>>8,a.blue=(s&16711680)>>16,a.alpha=1,a}_getColorAsInt(e,i){let n=e+i*this.anzahlX,s=this.data[n];return((s&255)<<16)+(s&65280)+((s&16711680)>>16)}_getAlpha(e,i){let n=e+i*this.anzahlX;return((this.data[n]&4278190080)>>>24)/255}_isColor(e,i,n,s){let a=e+i*this.anzahlX,l;if(typeof n=="string"){let f=ze.parseColorToOpenGL(n);l=f.color,f.alpha}else l=n;let h=this.data[a],c=h&255,u=(h&65280)>>8,g=(h&16711680)>>16;return l==c*65536+u*256+g}_setColor(e,i,n,s){if(e<0||e>this.anzahlX||i<0||i>this.anzahlY)throw new F(o.BitmapCoordinatesOutOfBoundsException(e,i,this.anzahlX,this.anzahlY));let a=e+i*this.anzahlX,l;if(typeof n=="string"){let h=ze.parseColorToOpenGL(n);l=h.color,s==null&&(s=h.alpha)}else l=n,s==null&&(s=1);l&&(this.data[a]=Math.round(s*255)*16777216+((l&255)<<16)+(l&65280)+((l&16711680)>>16),this.uploadData())}_fillAll(e,i){let n;if(typeof e=="string"){let s=ze.parseColorToOpenGL(e);n=s.color,i=s.alpha}else n=e;n&&i&&(this.data.fill(Math.round(i*255)*16777216+((n&255)<<16)+(n&65280)+((n&16711680)>>16)),this.uploadData())}_downloadAsPngFile(e){let i=no.encode([this.data.buffer],this.anzahlX,this.anzahlY,0),n=new Uint8Array(i);if(window.navigator&&window.navigator.msSaveOrOpenBlob)window.navigator.msSaveOrOpenBlob(blob,e);else{var s=document.createEvent("MouseEvents"),a=document.createElement("a");a.download=e,a.href=window.URL.createObjectURL(new Blob([n],{type:"application/octet-stream"})),a.dataset.downloadurl=["image/png",a.download,a.href].join(":"),s.initEvent("click",!0,!1,window,0,0,0,0,0,!1,!1,!1,!1,0,null),a.dispatchEvent(s),a.remove()}}setzeFarbeRGBA(e,i,n,s,a,l){let h=l*4278190080+a*65536+s*256+n,c=e+i*this.anzahlX;this.data[c]=h,this.uploadData()}getFarbe(e,i){let n=this.data[e+i*this.anzahlX]&16777215;return(n&255)<<16+(n&65280)+(n&16711680)>>16}getAlpha(e,i){return(this.data[e+i*this.anzahlX]&4278190080)>>24/255}_mj$toString$String$(e,i){e.s.push(new G(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{width: ${this.width*this.scaleFactor}, height: ${this.height*this.scaleFactor}, centerX: ${this._getCenterX()}, centerY: ${this._getCenterY()} }`}_worldCoordinatesToBitmapCoordinates(e,i){let n=Math.trunc((e-this.top)/this.width*this.anzahlX),s=Math.trunc((i-this.top)/this.width*this.anzahlY);return new Zo(n,s)}_getResolutionX(){return this.anzahlX}_getResolutionY(){return this.anzahlY}};r(Ye,"__javaDeclarations",[{type:"declaration",signature:"class Bitmap extends Shape",comment:o.BitmapClassComment},{type:"method",signature:"Bitmap(int resolutionX, int resolutionY, double left, double top, double displayWidth, double displayHeight)",java:Ye.prototype._cj$_constructor_$Bitmap$int$int$double$double$double$double,comment:o.BitmapConstructorComment},{type:"method",signature:"final int getResolutionX()",native:Ye.prototype._getResolutionX,comment:o.BitmapGetResolutionXComment},{type:"method",signature:"final int getResolutionY()",native:Ye.prototype._getResolutionY,comment:o.BitmapGetResolutionYComment},{type:"method",signature:"final void setColor(int x, int y, int color, double alpha)",native:Ye.prototype._setColor,comment:o.BitmapSetColorComment},{type:"method",signature:"final void setColor(int x, int y, string color, double alpha)",native:Ye.prototype._setColor,comment:o.BitmapSetColorComment},{type:"method",signature:"final void setColor(int x, int y, int color)",native:Ye.prototype._setColor,comment:o.BitmapSetColorComment},{type:"method",signature:"final void setColor(int x, int y, string color)",native:Ye.prototype._setColor,comment:o.BitmapSetColorComment},{type:"method",signature:"final Color getColor(int x, int y)",native:Ye.prototype._getColor,comment:o.BitmapGetColorComment},{type:"method",signature:"final int getColorAsInt(int x, int y)",native:Ye.prototype._getColorAsInt,comment:o.BitmapGetColorComment},{type:"method",signature:"double getAlpha(int x, int y)",native:Ye.prototype._getAlpha,comment:o.BitmapGetPixelAlphaComment},{type:"method",signature:"final boolean isColor(int x, int y, string colorAsRGBString)",native:Ye.prototype._isColor,comment:o.BitmapIsColorComment},{type:"method",signature:"final boolean isColor(int x, int y, int color)",native:Ye.prototype._isColor,comment:o.BitmapIsColorComment},{type:"method",signature:"final Position screenCoordinatesToBitmapCoordinates(double x, double y)",native:Ye.prototype._worldCoordinatesToBitmapCoordinates,comment:o.BitmapWorldCoordinatesToBitmapCoordinatesComment},{type:"method",signature:"final void fillAll(int color, double alpha)",native:Ye.prototype._fillAll,comment:o.BitmapFillAllComment},{type:"method",signature:"final void fillAll(string colorAsRGBString, double alpha)",native:Ye.prototype._fillAll,comment:o.BitmapFillAllComment},{type:"method",signature:"final void downloadAsPngFile(string filename)",native:Ye.prototype._downloadAsPngFile,comment:o.BitmapDownloadAsPngFileComment},{type:"method",signature:"final Bitmap copy()",java:Ye.prototype._mj$copy$Bitmap$,comment:o.BitmapCopyComment},{type:"method",signature:"String toString()",java:Ye.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Ye,"type");let cc=Ye;const en=class en extends jt{constructor(){super(...arguments);r(this,"mx");r(this,"my");r(this,"radius")}get scaledRadius(){return this.scaleFactor*this.radius}_cj$_constructor_$Circle$(e,i){this._cj$_constructor_$Circle$double$double$double(e,i,50,50,50)}_cj$_constructor_$Circle$double$double$double(e,i,n,s,a){this._cj$_constructor_$FilledShape$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.mx=n,this.my=s,this.radius=a,this.render(),i&&i()})}_mj$copy$Shape$(e,i){this._mj$copy$Circle$(e,i)}_mj$copy$Circle$(e,i){let n=new en;n._cj$_constructor_$Circle$double$double$double(e,i,this.mx,this.my,this.radius),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){this.hitPolygonInitial=[];let e=Math.PI/8;for(let n=0;n<16;n++){let s=e*n;this.hitPolygonInitial.push({x:this.mx+this.radius*Math.cos(s),y:this.my+this.radius*Math.sin(s)})}this.hitPolygonDirty=!0;let i=this.container;i==null?(i=new He,this.container=i,this.world.app.stage.addChild(i)):i.clear(),i.circle(this.mx,this.my,this.radius),this.fillColor!=null&&(i.fill(this.fillColor),i.alpha=this.fillAlpha),this.borderColor!=null&&i.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5}),i.closePath()}_setRadius(e){this.radius=e/this.container.scale.x,this.render()}containsPoint(e,i){if(!this.container.getBounds().containsPoint(e,i))return!1;let n=new ue(e,i);this.container.worldTransform.applyInverse(n,n);let a=n.x-this.mx,l=n.y-this.my;return a*a+l*l<=this.radius*this.radius}_collidesWith(e){if(e instanceof en){let i=new ue(this.centerXInitial,this.centerYInitial);this.container.worldTransform.apply(i,i);let n=this.radius*this.container.scale.x,s=new ue(e.centerXInitial,e.centerYInitial);e.container.worldTransform.apply(s,s);let a=e.radius*e.container.scale.x,l=i.x-s.x,h=i.y-s.y;return l*l+h*h<=(n+a)*(n+a)}else return super._collidesWith(e)}_mj$toString$String$(e,i){e.s.push(new G(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{r: ${this.radius*this.scaleFactor}, mx: ${this._getCenterX()}, my: ${this._getCenterY()} }`}};r(en,"__javaDeclarations",[{type:"declaration",signature:"class Circle extends FilledShape",comment:o.circleClassComment},{type:"field",signature:"private double radius",nativeIdentifier:"scaledRadius"},{type:"method",signature:"Circle()",java:en.prototype._cj$_constructor_$Circle$,comment:o.circleEmptyConstructorComment},{type:"method",signature:"Circle(double mx, double my, double r)",java:en.prototype._cj$_constructor_$Circle$double$double$double,comment:o.circleConstructorComment},{type:"method",signature:"final void setRadius(double radius)",native:en.prototype._setRadius,comment:o.circleSetRadiusComment},{type:"method",signature:"final double getRadius()",template:"(§1.radius*§1.scaleFactor)",comment:o.circleGetRadiusComment},{type:"method",signature:"final Circle copy()",java:en.prototype._mj$copy$Circle$,comment:o.circleCopyComment},{type:"method",signature:"final boolean containsPoint(double x, double y)",native:en.prototype._containsPoint,comment:o.shapeContainsPointComment},{type:"method",signature:"String toString()",java:en.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(en,"type");let Xo=en;const Eo=class Eo extends z{constructor(t,e){super(),this.shapeA=t,this.shapeB=e}_collisionPairConstructor(t,e){return super._constructor(),this.shapeA=t,this.shapeB=e,this}};r(Eo,"__javaDeclarations",[{type:"declaration",signature:"class CollisionPair extends Object",comment:o.collisionPairClassComment},{type:"method",signature:"CollisionPair(U ShapeA, V shapeB)",native:Eo.prototype._collisionPairConstructor,comment:o.collisionPairConstructorComment},{type:"field",signature:"public U shapeA",comment:o.collisionPairShapeAComment},{type:"field",signature:"public V shapeB",comment:o.collisionPairShapeBComment}]),r(Eo,"type");let rd=Eo;const tn=class tn extends jt{constructor(){super(...arguments);r(this,"mx");r(this,"my");r(this,"radiusX");r(this,"radiusY")}get scaledRadiusX(){return this.scaleFactor*this.radiusX}get scaledRadiusY(){return this.scaleFactor*this.radiusY}_cj$_constructor_$Ellipse$(e,i){this._cj$_constructor_$Ellipse$double$double$double$double(e,i,200,100,100,50)}_cj$_constructor_$Ellipse$double$double$double$double(e,i,n,s,a,l){this._cj$_constructor_$FilledShape$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.mx=n,this.my=s,this.radiusX=a,this.radiusY=l,this.render(),i&&i()})}_mj$copy$Shape$(e,i){this._mj$copy$Ellipse$(e,i)}_mj$copy$Ellipse$(e,i){let n=new tn;n._cj$_constructor_$Ellipse$double$double$double$double(e,i,this.mx,this.my,this.radiusX,this.radiusY),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){this.hitPolygonInitial=[];let e=Math.PI/8;for(let n=0;n<16;n++){let s=e*n;this.hitPolygonInitial.push({x:this.mx+this.radiusX*Math.cos(s),y:this.my+this.radiusY*Math.sin(s)})}this.hitPolygonDirty=!0;let i=this.container;i==null?(i=new He,this.container=i,this.world.app.stage.addChild(i)):i.clear(),i.ellipse(this.mx,this.my,this.radiusX,this.radiusY),this.fillColor!=null&&(i.fill(this.fillColor),i.alpha=this.fillAlpha),this.borderColor!=null&&i.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5}),i.closePath()}_setRadiusX(e){this.radiusX=e/this.container.scale.x,this.render()}_setRadiusY(e){this.radiusY=e/this.container.scale.y,this.render()}containsPoint(e,i){if(!this.container.getBounds().containsPoint(e,i))return!1;let n=new ue(e,i);this.container.worldTransform.applyInverse(n,n);let a=n.x-this.mx,l=n.y-this.my;return a*a/(this.radiusX*this.radiusX)+l*l/(this.radiusY*this.radiusY)<=1}_mj$toString$String$(e,i){e.s.push(new G(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{rx: ${this.radiusX*this.scaleFactor}, ry: ${this.radiusY*this.scaleFactor}, mx: ${this._getCenterX()}, my: ${this._getCenterY()} }`}};r(tn,"__javaDeclarations",[{type:"declaration",signature:"class Ellipse extends FilledShape",comment:o.EllipseClassComment},{type:"field",signature:"private double radiusX",nativeIdentifier:"scaledRadiusX"},{type:"field",signature:"private double radiusY",nativeIdentifier:"scaledRadiusY"},{type:"method",signature:"Ellipse()",java:tn.prototype._cj$_constructor_$Ellipse$,comment:o.EllipseEmptyConstructorComment},{type:"method",signature:"Ellipse(double mx, double my, double rx, double ry)",java:tn.prototype._cj$_constructor_$Ellipse$double$double$double$double,comment:o.EllipseConstructorComment},{type:"method",signature:"final void setRadiusX(double radiusX)",native:tn.prototype._setRadiusX,comment:o.EllipseSetRadiusXComment},{type:"method",signature:"final double getRadiusX()",template:"(§1.radiusX*§1.scaleFactor)",comment:o.EllipseGetRadiusXComment},{type:"method",signature:"final void setRadiusY(double radiusY)",native:tn.prototype._setRadiusY,comment:o.EllipseSetRadiusYComment},{type:"method",signature:"final double getRadiusY()",template:"(§1.radiusY*§1.scaleFactor)",comment:o.EllipseGetRadiusYComment},{type:"method",signature:"final Ellipse copy()",java:tn.prototype._mj$copy$Ellipse$,comment:o.EllipseCopyComment},{type:"method",signature:"final boolean containsPoint(double x, double y)",native:tn.prototype._containsPoint,comment:o.shapeContainsPointComment},{type:"method",signature:"String toString()",java:tn.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(tn,"type");let sd=tn;var ad;(p=>{function t(n){let s=n.slice();return s.sort(p.POINT_COMPARATOR),p.makeHullPresorted(s)}p.makeHull=t;function e(n){if(n.length<=1)return n.slice();let s=[];for(let l=0;l=2;){const c=s[s.length-1],u=s[s.length-2];if((c.x-u.x)*(h.y-u.y)>=(c.y-u.y)*(h.x-u.x))s.pop();else break}s.push(h)}s.pop();let a=[];for(let l=n.length-1;l>=0;l--){const h=n[l];for(;a.length>=2;){const c=a[a.length-1],u=a[a.length-2];if((c.x-u.x)*(h.y-u.y)>=(c.y-u.y)*(h.x-u.x))a.pop();else break}a.push(h)}return a.pop(),s.length==1&&a.length==1&&s[0].x==a[0].x&&s[0].y==a[0].y?s:s.concat(a)}p.makeHullPresorted=e;function i(n,s){return n.xs.x?1:n.ys.y?1:0}p.POINT_COMPARATOR=i})(ad||(ad={}));const nn=class nn{static getPolygonForTexture(t,e,i,n){e==null&&(e=0),t+="#"+e;let s=nn.polygonStore[t];return s==null&&(s=nn.getPolygon(n,i.world),nn.polygonStore[t]=s),s}static getPolygon(t,e){let n=e.app.renderer.extract.pixels(t).pixels,s=t.width,a=t.height;if(n.length!==4*s*a)return[{x:0,y:0},{x:s,y:0},{x:s,y:a},{x:0,y:a}];let l=[],c=3*2+3,u=[];nn.addPointsOnLine({x:0,y:0},{x:s-1,y:0},c,u),nn.addPointsOnLine({x:s-1,y:0},{x:s-1,y:a-1},c,u),nn.addPointsOnLine({x:s-1,y:a-1},{x:0,y:a-1},c,u),nn.addPointsOnLine({x:0,y:a-1},{x:0,y:0},c,u);let g={x:s/2,y:a/2};for(let b of u)nn.probe(l,b,g,s,a,n);let f=!1;for(;!f;){f=!0;for(let b=0;bi||e>n?!0:s[4*Math.round(t)+4*i*Math.round(e)+3]==0}};r(nn,"polygonStore",{});let uc=nn;var Ss=(p=>(p[p.once=0]="once",p[p.onceWithoutDestroying=1]="onceWithoutDestroying",p[p.loop=2]="loop",p[p.backAndForth=3]="backAndForth",p))(Ss||{});const pr=class pr extends Vi{};r(pr,"__javaDeclarations",[{type:"declaration",signature:"enum RepeatType",comment:o.repeatTypeEnumComment}]),r(pr,"type"),r(pr,"values",[new pr("once",0),new pr("onceWithoutDestroying",1),new pr("loop",2),new pr("backAndForth",3)]);let mc=pr;var Rl=(p=>(p[p.linear=0]="linear",p[p.nearest_neighbour=1]="nearest_neighbour",p))(Rl||{});const Ms=class Ms extends Vi{};r(Ms,"__javaDeclarations",[{type:"declaration",signature:"enum ScaleMode",comment:o.scaleModeEnumComment}]),r(Ms,"type"),r(Ms,"values",[new Ms("linear",0),new Ms("nearest_neighbour",1)]);let od=Ms;var Jo=[{filename:"ship_1.png",name:"Ship_1",index:0,scale:.8},{filename:"ship_2.png",name:"Ship_1",index:1,scale:.8},{filename:"ship_3.png",name:"Ship_1",index:2,scale:.8},{filename:"Schaufel.png",name:"Werkzeug",index:0,scale:1},{filename:"minesweeper/minesweeper.png",name:"Minesweeper",tilesX:20,tilesY:1,spacingX:1,scale:1,index:0},{filename:"minesweeper/minesweeper-numbers.png",name:"Minesweeper",tilesX:10,tilesY:1,scale:1,index:22},{filename:"Sleepy_Blocks/sleepy_blocks.png",name:"Sleepy_Blocks",tilesX:8,tilesY:1,spacingX:2,spacingY:2,scale:1,index:0,extrudeMarginWidth:1},{filename:"flappy_bird/bird1.png",name:"Bird",index:0,indexName:"Bird"},{filename:"flappy_bird/bird2.png",name:"Bird",index:1,indexName:"Bird"},{filename:"flappy_bird/bird3.png",name:"Bird",index:2,indexName:"Bird"},{filename:"flappy_bird/Baeume.png",name:"Bird",index:3,indexName:"Bird"},{filename:"flappy_bird/houses.png",name:"Bird",index:4,indexName:"Bird"},{filename:"flappy_bird/Leiste.png",name:"Bird",index:5,indexName:"Bird"},{filename:"flappy_bird/Saeule.png",name:"Bird",index:6,indexName:"Bird"},{filename:"flappy_bird/Wolken.png",name:"Bird",index:7,indexName:"Bird"},{filename:"Raumschiff_Adrian/NeuesRaumschiff/raumschiff_0004_geradeaus.png",name:"Space_Shooter_1",index:0},{filename:"Raumschiff_Adrian/NeuesRaumschiff/raumschiff_0001_runter1.png",name:"Space_Shooter_1",index:1},{filename:"Raumschiff_Adrian/NeuesRaumschiff/raumschiff_0000_runter2.png",name:"Space_Shooter_1",index:2},{filename:"Raumschiff_Adrian/NeuesRaumschiff/raumschiff_0003_hoch1.png",name:"Space_Shooter_1",index:3},{filename:"Raumschiff_Adrian/NeuesRaumschiff/raumschiff_0002_hoch2.png",name:"Space_Shooter_1",index:4},{filename:"Raumschiff_Adrian/NeuerSchuss.png",name:"Space_Shooter_1",index:5},{filename:"Raumschiff_Adrian/Schussanimation/schuss_0000.png",name:"Space_Shooter_1",index:6},{filename:"Raumschiff_Adrian/Schussanimation/schuss_0001.png",name:"Space_Shooter_1",index:7},{filename:"Raumschiff_Adrian/Schussanimation/schuss_0002.png",name:"Space_Shooter_1",index:8},{filename:"Raumschiff_Adrian/Schussanimation/schuss_0003.png",name:"Space_Shooter_1",index:9},{filename:"Raumschiff_Adrian/Asteroid.png",name:"Space_Shooter_1",index:10},{filename:"Raumschiff_Adrian/Gegner.png",name:"Space_Shooter_1",index:11},{filename:"Raumschiff_Adrian/Explosion/explosion_0000_..png",name:"Space_Shooter_1",index:12},{filename:"Raumschiff_Adrian/Explosion/explosion_0001_..png",name:"Space_Shooter_1",index:13},{filename:"Raumschiff_Adrian/Explosion/explosion_0002_..png",name:"Space_Shooter_1",index:14},{filename:"Raumschiff_Adrian/Explosion/explosion_0003_..png",name:"Space_Shooter_1",index:15},{filename:"Raumschiff_Adrian/Explosion/explosion_0004_..png",name:"Space_Shooter_1",index:16},{filename:"Raumschiff_Adrian/Explosion/explosion_0005_..png",name:"Space_Shooter_1",index:17},{filename:"Raumschiff_Adrian/Explosion/explosion_0006_..png",name:"Space_Shooter_1",index:18},{filename:"Raumschiff_Adrian/Explosion/explosion_0007_..png",name:"Space_Shooter_1",index:19},{filename:"Raumschiff_Adrian/Explosion/explosion_0008_..png",name:"Space_Shooter_1",index:20},{filename:"Raumschiff_Adrian/Explosion/explosion_0009_..png",name:"Space_Shooter_1",index:21},{filename:"Raumschiff_Adrian/Explosion/explosion_0010_..png",name:"Space_Shooter_1",index:22},{filename:"Raumschiff_Adrian/Explosion/explosion_0011_..png",name:"Space_Shooter_1",index:23},{filename:"classics/spaceship_1.png",name:"Space_Shooter_2",index:0},{filename:"classics/spaceship_2.png",name:"Space_Shooter_2",index:1},{filename:"classics/spaceship_3.png",name:"Space_Shooter_2",index:2},{filename:"classics/spaceship_4.png",name:"Space_Shooter_2",index:3},{filename:"classics/spaceship_5.png",name:"Space_Shooter_2",index:4},{filename:"classics/spaceship_6.png",name:"Space_Shooter_2",index:5},{filename:"classics/spaceship_7.png",name:"Space_Shooter_2",index:6},{filename:"classics/spaceship_8.png",name:"Space_Shooter_2",index:7},{filename:"classics/spaceship_9.png",name:"Space_Shooter_2",index:8},{filename:"classics/missile_1.png",name:"Space_Shooter_2",index:9},{filename:"classics/missile_2.png",name:"Space_Shooter_2",index:10},{filename:"classics/missile_3.png",name:"Space_Shooter_2",index:11},{filename:"classics/missile_4.png",name:"Space_Shooter_2",index:12},{filename:"classics/missile_5.png",name:"Space_Shooter_2",index:13},{filename:"classics/missile_6.png",name:"Space_Shooter_2",index:14},{filename:"classics/missile_7.png",name:"Space_Shooter_2",index:15},{filename:"classics/missile_8.png",name:"Space_Shooter_2",index:16},{filename:"classics/missile_9.png",name:"Space_Shooter_2",index:17},{filename:"classics/missile_10.png",name:"Space_Shooter_2",index:18},{filename:"classics/missile_11.png",name:"Space_Shooter_2",index:19},{filename:"classics/missile_12.png",name:"Space_Shooter_2",index:20},{filename:"classics/satellite_1.png",name:"Space_Shooter_2",index:21},{filename:"classics/satellite_2.png",name:"Space_Shooter_2",index:22},{filename:"particles/Flare_1.png",name:"Particles",index:0},{filename:"particles/orb.png",name:"Particles",index:1},{filename:"particles/white.png",name:"Particles",index:2},{filename:"particles/ring.png",name:"Particles",index:3},{filename:"particles/soft5.png",name:"Particles",index:4},{filename:"particles/soft9.png",name:"Particles",index:5},{filename:"particles/smoke0.png",name:"Particles",index:6},{filename:"particles/soft1.png",name:"Particles",index:7},{filename:"particles/soft7.png",name:"Particles",index:8},{filename:"particles/soft2.png",name:"Particles",index:9},{filename:"particles/smoke-puff.png",name:"Particles",index:10},{filename:"particles/white-smoke.png",name:"Particles",index:11},{filename:"classics/sokoban_man_horizontal.png",name:"Soko",tilesX:3,tilesY:1,spacingX:2,spacingY:0,scale:1,index:0,extrudeMarginWidth:1},{filename:"classics/sokoban_man_vertical.png",name:"Soko",tilesX:6,tilesY:1,spacingX:2,spacingY:0,scale:1,index:3,extrudeMarginWidth:1},{filename:"classics/sokoban_box_1.png",name:"Soko",index:9,extrudeMarginWidth:1},{filename:"classics/sokoban_box_2.png",name:"Soko",index:10,extrudeMarginWidth:1},{filename:"classics/sokoban_empty.png",name:"Soko",index:11,extrudeMarginWidth:1},{filename:"classics/sokoban_wall.png",name:"Soko",index:12,extrudeMarginWidth:1},{filename:"classics/sokoban_target.png",name:"Soko",index:13,extrudeMarginWidth:1},{filename:"classics/pacman_characters.png",name:"PMan",tilesX:22,tilesY:1,spacingX:2,spacingY:0,scale:1,index:0},{filename:"classics/pacman_maze.png",name:"PMan",tilesX:15,tilesY:1,spacingX:2,spacingY:0,scale:1,index:22},{filename:"classics/bo_bat_long.png",name:"Breakin",index:0},{filename:"classics/bo_bat_short.png",name:"Breakin",index:1},{filename:"classics/bo_ball_blue.png",name:"Breakin",index:2},{filename:"classics/bo_ball_gray.png",name:"Breakin",index:3},{filename:"classics/bo_rechteck.png",name:"Breakin",index:4},{filename:"classics/bo_rechteck_active.png",name:"Breakin",index:5},{filename:"classics/bo_quadrat.png",name:"Breakin",index:6},{filename:"classics/bo_quadrat_active.png",name:"Breakin",index:7},{filename:"classics/bo_fuenfeck.png",name:"Breakin",index:8},{filename:"classics/bo_fuenfeck_active.png",name:"Breakin",index:9},{filename:"classics/bo_raute.png",name:"Breakin",index:10},{filename:"classics/bo_raute_active.png",name:"Breakin",index:11},{filename:"classics/bo_star1.png",name:"Breakin",index:12},{filename:"classics/bo_star2.png",name:"Breakin",index:13},{filename:"classics/Chess.png",name:"Boardgames",tilesX:6,tilesY:2,spacingX:2,spacingY:2,scale:1,index:0},{filename:"classics/Spielstein.png",name:"Boardgames",index:12},{filename:"classics/wuerfel_1.png",name:"Boardgames",index:13},{filename:"classics/wuerfel_2.png",name:"Boardgames",index:14},{filename:"classics/wuerfel_3.png",name:"Boardgames",index:15},{filename:"classics/wuerfel_4.png",name:"Boardgames",index:16},{filename:"classics/wuerfel_5.png",name:"Boardgames",index:17},{filename:"classics/wuerfel_6.png",name:"Boardgames",index:18},{filename:"plattformer/Tiles_and_enemies_64x64.png",name:"Plattforms",tilesX:22,tilesY:16,spacingX:2,spacingY:2,scale:1,index:0,extrudeMarginWidth:1},{filename:"tower-defense/tower-defense.png",name:"TowerDefense",tilesX:18,tilesY:10,spacingX:2,spacingY:2,scale:1,index:0,extrudeMarginWidth:1},{filename:"plattformer/male.png",name:"Characters_1",tilesX:6,tilesY:2,spacingX:0,spacingY:0,scale:1,index:0},{filename:"plattformer/background_grass.png",name:"Background",index:0,scale:.2},{filename:"plattformer/background_mountains.png",name:"Background",index:1,scale:.2},{filename:"plattformer/background_sky.png",name:"Background",index:2,scale:.2},{filename:"plattformer/cloud1.png",name:"Background",index:3,scale:.5},{filename:"plattformer/cloud2.png",name:"Background",index:4,scale:.5},{filename:"plattformer/cloud3.png",name:"Background",index:5,scale:.5},{filename:"plattformer/cloud4.png",name:"Background",index:6,scale:.5},{filename:"plattformer/grass1.png",name:"Background",index:7},{filename:"plattformer/grass2.png",name:"Background",index:8},{filename:"plattformer/grass3.png",name:"Background",index:9},{filename:"plattformer/tree1.png",name:"Background",index:10,scale:.5},{filename:"plattformer/tree2.png",name:"Background",index:11,scale:.5},{filename:"plattformer/tree3.png",name:"Background",index:12,scale:.5},{filename:"frogger/Frogger_1.png",name:"Frogger",tilesX:3,tilesY:1,spacingX:2,spacingY:0,scale:1,index:0,extrudeMarginWidth:1},{filename:"frogger/Frogger_car.png",name:"Frogger",tilesX:2,tilesY:1,spacingX:2,spacingY:0,scale:1,index:3,extrudeMarginWidth:1},{filename:"3d/minecraft_grass.png",name:"robot",tilesX:1,tilesY:1,index:0},{filename:"3d/tiled_grass.png",name:"robot",tilesX:1,tilesY:1,index:2},{filename:"3d/grass_side.png",name:"robot",tilesX:1,tilesY:1,index:3},{filename:"3d/brick3d_red.png",name:"robot",tilesX:1,tilesY:1,index:4},{filename:"3d/brick3d_yellow.png",name:"robot",tilesX:1,tilesY:1,index:5},{filename:"3d/brick3d_green.png",name:"robot",tilesX:1,tilesY:1,index:6},{filename:"3d/brick3d_blue.png",name:"robot",tilesX:1,tilesY:1,index:7},{filename:"3d/rock.png",name:"robot",tilesX:1,tilesY:1,index:8},{filename:"3d/bedrock.png",name:"robot",tilesX:1,tilesY:1,index:9},{filename:"3d/earth.png",name:"robot",tilesX:1,tilesY:1,index:10},{filename:"3d/north.png",name:"robot",tilesX:1,tilesY:1,index:11},{filename:"3d/axis_x.png",name:"standard_textures",tilesX:1,tilesY:1,index:0},{filename:"3d/axis_y.png",name:"standard_textures",tilesX:1,tilesY:1,index:1},{filename:"3d/axis_z.png",name:"standard_textures",tilesX:1,tilesY:1,index:2},{filename:"pixelmon/creature1.png",name:"pixelmon",index:0},{filename:"pixelmon/creature2.png",name:"pixelmon",index:1},{filename:"pixelmon/creature3.png",name:"pixelmon",index:2},{filename:"pixelmon/flowersblue.png",name:"pixelmon",index:3},{filename:"pixelmon/flowersred.png",name:"pixelmon",index:4},{filename:"pixelmon/flowerswhite.png",name:"pixelmon",index:5},{filename:"pixelmon/tree.png",name:"pixelmon",index:6},{filename:"pixelmon/grass.png",name:"pixelmon",index:7},{filename:"pixelmon/highgrass.png",name:"pixelmon",index:8},{filename:"pixelmon/highgrassoverlay.png",name:"pixelmon",index:9},{filename:"pixelmon/itembucket.png",name:"pixelmon",index:10},{filename:"pixelmon/plattform.png",name:"pixelmon",index:11},{filename:"pixelmon/player1back.png",name:"pixelmon",index:12},{filename:"pixelmon/player1backwalk1.png",name:"pixelmon",index:13},{filename:"pixelmon/player1backwalk2.png",name:"pixelmon",index:14},{filename:"pixelmon/player1front.png",name:"pixelmon",index:15},{filename:"pixelmon/player1frontwalk1.png",name:"pixelmon",index:16},{filename:"pixelmon/player1frontwalk2.png",name:"pixelmon",index:17},{filename:"pixelmon/player1side.png",name:"pixelmon",index:18},{filename:"pixelmon/player1sidewalk1.png",name:"pixelmon",index:19},{filename:"pixelmon/player1sidewalk2.png",name:"pixelmon",index:20},{filename:"pixelmon/wall1.png",name:"pixelmon",index:21},{filename:"pixelmon/wall2.png",name:"pixelmon",index:22},{filename:"pixelmon/wall3.png",name:"pixelmon",index:23},{filename:"pixelmon/wall4.png",name:"pixelmon",index:24},{filename:"pixelmon/wallstairs1.png",name:"pixelmon",index:25},{filename:"pixelmon/wallstairs2.png",name:"pixelmon",index:26},{filename:"pixelmon/wallstairs3.png",name:"pixelmon",index:27},{filename:"pixelmon/wallstairs4.png",name:"pixelmon",index:28},{filename:"pixelmon/water1.png",name:"pixelmon",index:29},{filename:"pixelmon/water2.png",name:"pixelmon",index:30},{filename:"pixelmon/water3.png",name:"pixelmon",index:31},{filename:"pixelmon/water4.png",name:"pixelmon",index:32},{filename:"pixelmon/way1.png",name:"pixelmon",index:33},{filename:"pixelmon/way2.png",name:"pixelmon",index:34},{filename:"pixelmon/way3.png",name:"pixelmon",index:35},{filename:"pixelmon/way4.png",name:"pixelmon",index:36},{filename:"pixelmon/way5.png",name:"pixelmon",index:37},{filename:"pixelmon/way6.png",name:"pixelmon",index:38},{filename:"pixelmon/way7.png",name:"pixelmon",index:39},{filename:"pixelmon/way8.png",name:"pixelmon",index:40},{filename:"pixelmon/whitefence1.png",name:"pixelmon",index:41},{filename:"pixelmon/whitefence2.png",name:"pixelmon",index:42},{filename:"pixelmon/woodfence1.png",name:"pixelmon",index:43},{filename:"pixelmon/woodfence2.png",name:"pixelmon",index:44},{filename:"little_figure/Animation_Run/Run0.png",name:"Sneaker",index:0},{filename:"little_figure/Animation_Run/Run1.png",name:"Sneaker",index:1},{filename:"little_figure/Animation_Run/Run2.png",name:"Sneaker",index:2},{filename:"little_figure/Animation_Sneak/Sneak0.png",name:"Sneaker",index:3},{filename:"little_figure/Animation_Sneak/Sneak1.png",name:"Sneaker",index:4},{filename:"little_figure/Animation_Sneak/Sneak2.png",name:"Sneaker",index:5},{filename:"javakara/bugeast_r.gif",name:"Kara",index:0},{filename:"javakara/object_leaf.gif",name:"Kara",index:1},{filename:"javakara/object_mushroom.gif",name:"Kara",index:2},{filename:"javakara/object_tree.gif",name:"Kara",index:3},{filename:"javahamster/hamster_bottom.png",name:"Hamster",index:0},{filename:"javahamster/grain.png",name:"Hamster",index:1},{filename:"javahamster/wall.png",name:"Hamster",index:2}];function Fm(p,t){let e=""+p;for(;e.length{for(let p=0;p<56;p++)Jo.push({filename:"explosion-images/explosion"+Fm(p,4)+".png",name:"Explosion_1",index:p});for(let p=1;p<=10;p++)Jo.push({filename:"boulders/image_part_"+Fm(p,3)+".png",name:"Boulders",index:p-1})};Mb();typeof module<"u"&&(module.exports=Jo);const Fi=class Fi extends Vi{constructor(t,e,i=!1){super(t,e)}static initValues(){let t=0;return Jo.filter(e=>e.index==null||e.index==0).map(e=>new Fi(e.name,t++))}static getUserSpritesheetsForTypeId(t){let e=this.typeIdToUserSpritesheetsMap.get(t);return e||(e=new Map,this.typeIdToUserSpritesheetsMap.set(t,e)),e}static addEntry(t,e){let i=Fi.getUserSpritesheetsForTypeId(e.id),n=new Fi(t,Fi.values.length+i.size);i.set(t,n);let s=new ji(t,re.instance,e.module,e,m.keywordPublic);s._isStatic=!0,s._isFinal=!0,s.type=e,s.classEnum=e,e.fields.push(s)}static removeUserSpritesheets(t){Fi.getUserSpritesheetsForTypeId(t.id).forEach((i,n)=>{t.removeField(n)}),this.typeIdToUserSpritesheetsMap.delete(t.id)}static getSpriteLibrary(t,e){let i=Fi[e];return i||this.getUserSpritesheetsForTypeId(t).get(e)||null}};r(Fi,"__javaDeclarations",[{type:"declaration",signature:"enum SpriteLibrary",comment:o.spriteLibraryComment}]),r(Fi,"type"),r(Fi,"values",Fi.initValues()),r(Fi,"typeIdToUserSpritesheetsMap",new Map);let ld=Fi;var wl,pc;const Be=class Be extends Hi{constructor(){super(...arguments);Z(this,wl);r(this,"animationIndices",[]);r(this,"animationRuns",!1);r(this,"imagesPerMillisecond",1);r(this,"animationTime",0);r(this,"animationPaused",!1);r(this,"repeatTypeOrdinal",Ss.once);r(this,"scaleModeOrdinal");r(this,"textureName","");r(this,"isTileSprite",!1);r(this,"x");r(this,"y");r(this,"spriteLibrary");r(this,"imageIndex",0);r(this,"pixels");r(this,"oldTexture",null)}_cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode(e,i,n,s,a,l,h,c){this._cj$_constructor_$Shape$(e,async()=>{if(this.x=n,this.y=s,this.scaleModeOrdinal=(h==null?void 0:h.ordinal)||Rl.nearest_neighbour,c==null){this.spriteLibrary=typeof a=="string"?a:a.name,this.imageIndex=l;try{this.setTexture(this.spriteLibrary,this.imageIndex)}catch(g){e.throwRuntimeExceptionOnLastExecutedStep(g);return}}else{this.copyBitmapFromShape(c);let g=c.container.getBounds(),f=new ue(g.left+g.width/2,g.top+g.height/2);f=this.world.app.stage.localTransform.applyInverse(f),this.x=f.x,this.y=f.y}let u=this.container;if(u==null){let g=typeof a=="string"?a:a==null?void 0:a.name;e.throwRuntimeExceptionOnLastExecutedStep(new F(o.spriteErrorImageNotFound(g,l)));return}u.localTransform.translate(this.x-u.width/2,this.y-u.height/2),u.setFromMatrix(u.localTransform),u._didLocalTransformChangeId=u._didChangeId,this.world.app.stage.addChild(u),this.centerXInitial=u.width/2,this.centerYInitial=u.height/2,this.addToDefaultGroupAndSetDefaultVisibility(),i&&i()})}_cj$_constructor_$Sprite$double$double$SpriteLibrary$int(e,i,n,s,a,l){return this._cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode(e,i,n,s,a,l,void 0)}_cj$_constructor_$Sprite$double$double$SpriteLibrary(e,i,n,s,a){return this._cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode(e,i,n,s,a,0,void 0)}_cj$_constructor_$Sprite$Shape$ScaleMode(e,i,n,s){if(!n)throw new F(o.spriteShapeIsNullError());return this._cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode(e,i,0,0,void 0,0,s,n)}_cj$_constructor_$Sprite$Shape(e,i,n){return this._cj$_constructor_$Sprite$Shape$ScaleMode(e,i,n,void 0)}makeTiling(e,i,n=0,s=0){e/=this.scaleFactor,i/=this.scaleFactor;let a=this.container;this.oldTexture==null&&(this.oldTexture=a.texture);let l=this.oldTexture;(n>0||s>0)&&(l=this.generateGapTexture(l,n,s));let h=new Eg({texture:l,width:e,height:i});a.parent.addChild(h),h.setFromMatrix(a.localTransform),h.updateLocalTransform(),this.container=h,this.centerXInitial+=-a.width/2+e/2,this.centerYInitial+=-a.height/2+i/2;let c=this.centerXInitial-e/2,u=this.centerYInitial-i/2,g=c+e,f=u+i;this.hitPolygonInitial=[{x:c,y:u},{x:g,y:u},{x:g,y:f},{x:c,y:f}],this.hitPolygonDirty=!0,a.destroy(),this.isTileSprite=!0}generateGapTexture(e,i,n){const s=new He,a=new Vn(e);return s.rect(0,0,a.width+i,a.height+n),s.stroke({width:1,color:0,alpha:.01}),s.addChild(a),this.world.app.renderer.generateTexture(s)}setTileOffset(e,i){this.isTileSprite&&this.container.tilePosition.set(e,i)}copyBitmapFromShape(e){let i=e.container.getBounds(),n=i.width,s=i.height,a=this.scaleModeOrdinal==Rl.nearest_neighbour?"nearest":"linear";const l=$h.create({width:n,height:s,minFilter:a,magFilter:a});let h=e.container;this.world.app.renderer.render({container:h,target:l,transform:new Ki().translate(-i.left,-i.top).append(h.worldTransform)});let c=[];c=this.extractPoints(e,c);for(let u of c)u.x-=i.left,u.y-=i.top;this.hitPolygonInitial=c,this.hitPolygonInitial=ad.makeHull(c),this.hitPolygonDirty=!0,this.container=new Vn(l),e.hitPolygonDirty=!0}extractPoints(e,i){if(e instanceof vs){for(let n of e.shapes)i=this.extractPoints(n,i);return i}else return e.hitPolygonDirty&&e.transformHitPolygon(),i.concat(e.hitPolygonTransformed.map(function(n){return{x:n.x,y:n.y}}))}_setAsBackgroundImage(){let e=this.container,i=e.width/e.height,n=this.world.currentWidth/this.world.currentHeight,s=i>n?this.world.height/e.height:this.world.width/e.width;this._setScale(s),this._moveTo(this.world.currentLeft+this.world.currentWidth/2,this.world.currentTop+this.world.currentHeight/2),this._sendToBack()}_getWidth(){return this.container.width}_getHeight(){return this.container.height}_mj$copy$Shape$(e,i){this._mj$copy$Sprite$(e,i)}_mj$copy$Sprite$(e,i){let n=new Be;n._cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode(e,i,this.x,this.y,ld.values.find(s=>s.name==this.spriteLibrary),this.imageIndex,od.values[this.scaleModeOrdinal]),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}_setAlpha(e){this.container.alpha=e}setTexture(e,i){var l,h,c;if((l=this.container)!=null&&l.destroyed||this.container&&e==this.spriteLibrary&&i==this.imageIndex)return;e==null&&(e=this.spriteLibrary),i==null&&(i=0),this.imageIndex=i,this.textureName=e;let n=to.get("spritesheet"),s=e+"#"+i,a=n.textures[s];if(a==null&&(n=(c=(h=this.world.interpreter)==null?void 0:h.graphicsManager)==null?void 0:c.pixiUserSpritesheet,a=n==null?void 0:n.textures[s]),a!=null){if(this.scaleModeOrdinal==Rl.linear){let S=Be.linearScalemodeTextures[s];if(S==null){let w=new Vn(a),C=$h.create({width:w.width,height:w.height,minFilter:"linear",magFilter:"linear"});this.world.app.renderer.render({container:w,target:C}),Be.linearScalemodeTextures[s]=C,S=C}a=S,a==null&&(a=n.textures[s])}let u=this.container;u==null?(u=new Vn(a),this.container=u):u.texture=a,this.isTileSprite||(this.hitPolygonInitial=uc.getPolygonForTexture(e,i,this,new Vn(n.textures[s])),this.hitPolygonDirty=!0);let g=this.centerXInitial,f=this.centerYInitial;this.centerXInitial=u.width/this.scaleFactor/2,this.centerYInitial=u.height/this.scaleFactor/2;let b=g-this.centerXInitial,A=f-this.centerYInitial;this.belongsToGroup&&b*b+A*A>1e-10&&(this.container.setFromMatrix(this.container.localTransform.append(new Ki().translate(g-this.centerXInitial,f-this.centerYInitial))),this.container.updateLocalTransform(),this.container._didLocalTransformChangeId=this.container._didChangeId,this.setWorldTransformAndHitPolygonDirty())}else throw new F(o.spriteErrorImageNotFound(e,i))}render(){}_playAnimation1(e,i,n,s){let a=[];for(let l=e;l<=i;l++)a.push(l);this._playAnimation(a,n,s)}_playAnimation(e,i,n){this._stopAnimation(!1),this.animationIndices=e,this.repeatTypeOrdinal=i.ordinal,this.imagesPerMillisecond=n/1e3,this.animationTime=0,this.animationRuns=!0,this.world.app.ticker.add(this.tick,this)}_stopAnimation(e){this.animationRuns&&this.world.app.ticker.remove(this.tick,this),this.animationRuns=!1,e&&this._setVisible(!1)}destroy(){this._stopAnimation(!1),super.destroy()}_pauseAnimation(){this.animationPaused=!0}_resumeAnimation(){this.animationPaused=!1}tick(e){if(this.animationPaused)return;let i;switch(this.repeatTypeOrdinal){case Ss.backAndForth:let n=this.animationIndices.length*2/this.imagesPerMillisecond,s=Math.trunc(this.animationTime/n),a=this.animationTime-s*n;i=this.imagesPerMillisecond*a,i>=this.animationIndices.length&&(i=Math.max(2*this.animationIndices.length-.1-i,0)),i=Math.trunc(i);break;case Ss.loop:let l=this.animationIndices.length/this.imagesPerMillisecond,h=Math.trunc(this.animationTime/l),c=this.animationTime-h*l;i=this.imagesPerMillisecond*c,i=Math.trunc(i),i=Math.trunc(i);break;case Ss.once:case Ss.onceWithoutDestroying:if(i=Math.trunc(this.imagesPerMillisecond*this.animationTime),i>=this.animationIndices.length){this._stopAnimation(!0),this.repeatTypeOrdinal==Ss.once&&this.destroy();return}break}this.animationTime+=e.deltaMS;try{this.setTexture(this.textureName,this.animationIndices[i])}catch(n){this.world.interpreter.stop(!1),this.world.interpreter.printManager.printHtmlElement(um.getHtmlWithLinks(n,[],this.world.interpreter.getMain())),this._stopAnimation(!1)}}getTileImage(){if(!this.isTileSprite)throw new F(o.spriteSpriteIsNoTiledSpriteError());return new hd(this)}_getPixelColor(e,i){let n=this.container.width,s=this.container.height;if(this.pixels==null&&ne(this,wl,pc).call(this),e<0||e>=n||i<0||i>=s)throw new F(o.spriteGetPixelColorOutOfBoundsError(e,i,n,s));let a=(i*n+e)*4;return(this.pixels[a]<<16)+(this.pixels[a+1]<<8)+(this.pixels[a+2]<<0)}_getPixelAlpha(e,i){let n=this.container.width,s=this.container.height;if(this.pixels==null&&ne(this,wl,pc).call(this),e<0||e>=n||i<0||i>=s)throw new F(o.spriteGetPixelColorOutOfBoundsError(e,i,n,s));let a=(i*n+e)*4;return this.pixels[a+3]/255}};wl=new WeakSet,pc=function(){let e=this.world.app.renderer;this.pixels=e.extract.pixels(this.container).pixels},r(Be,"__javaDeclarations",[{type:"declaration",signature:"class Sprite extends Shape",comment:o.spriteClassComment},{type:"method",signature:"Sprite(double x, double y, SpriteLibrary spriteLibraryEntry, int index, ScaleMode scalemode)",java:Be.prototype._cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode,comment:o.spriteConstructorComment1},{type:"method",signature:"Sprite(double x, double y, SpriteLibrary spriteLibraryEntry, int index)",java:Be.prototype._cj$_constructor_$Sprite$double$double$SpriteLibrary$int,comment:o.spriteConstructorComment1},{type:"method",signature:"Sprite(double x, double y, SpriteLibrary spriteLibraryEntry)",java:Be.prototype._cj$_constructor_$Sprite$double$double$SpriteLibrary,comment:o.spriteConstructorComment1},{type:"method",signature:"Sprite(Shape shape, ScaleMode scalemode)",java:Be.prototype._cj$_constructor_$Sprite$Shape$ScaleMode,comment:o.spriteConstructorComment2},{type:"method",signature:"Sprite(Shape shape)",java:Be.prototype._cj$_constructor_$Sprite$Shape,comment:o.spriteConstructorComment2},{type:"method",signature:"void setImage(SpriteLibrary spriteLibrary, int imageIndex)",template:"§1.setTexture(§2.name, §3)",comment:o.spriteSetImageComment},{type:"method",signature:"void setImageIndex(int imageIndex)",template:"§1.setTexture(§1.textureName, §2)",comment:o.spriteSetImageIndexComment},{type:"method",signature:"void playAnimation(int[] imageIndexArray, RepeatType repeatType, int imagesPerSecond)",native:Be.prototype._playAnimation,comment:o.spritePlayAnimationComment},{type:"method",signature:"void playAnimation(int fromIndex, int toIndex, RepeatType repeatType, int imagesPerSecond)",native:Be.prototype._playAnimation1,comment:o.spritePlayAnimationComment},{type:"method",signature:"void stopAnimation()",native:Be.prototype._stopAnimation,comment:o.spriteStopAnimationComment},{type:"method",signature:"void pauseAnimation()",native:Be.prototype._pauseAnimation,comment:o.spritePauseAnimationComment},{type:"method",signature:"void resumeAnimation()",native:Be.prototype._resumeAnimation,comment:o.spriteResumeAnimationComment},{type:"method",signature:"void setAsBackgroundImage()",native:Be.prototype._setAsBackgroundImage,comment:o.spriteSetAsBackgroundImageComment},{type:"method",signature:"void setAlpha(double alphaValue)",native:Be.prototype._setAlpha,comment:o.spriteSetAlphaComment},{type:"method",signature:"Sprite copy()",java:Be.prototype._mj$copy$Sprite$,comment:o.spriteCopyComment},{type:"method",signature:"double getWidth()",native:Be.prototype._getWidth,comment:o.spriteGetWidthComment},{type:"method",signature:"double getHeight()",native:Be.prototype._getHeight,comment:o.spriteGetHeightComment},{type:"method",signature:"int getImageIndex()",template:"§1.imageIndex",comment:o.spriteGetImageIndexComment},{type:"method",signature:"void makeTiling(double width, double height)",native:Be.prototype.makeTiling,comment:o.spriteMakeTilingComment1},{type:"method",signature:"void makeTiling(double width, double height, double gapX, double gapY)",native:Be.prototype.makeTiling,comment:o.spriteMakeTilingComment2},{type:"method",signature:"TileImage getTileImage()",native:Be.prototype.getTileImage,comment:o.spriteGetTileImageComment},{type:"method",signature:"int getPixelColor(int x, int y)",native:Be.prototype._getPixelColor,comment:o.spriteGetPixelColorComment},{type:"method",signature:"double getPixelAlpha(int x, int y)",native:Be.prototype._getPixelAlpha,comment:o.spriteGetPixelAlphaComment}]),r(Be,"type"),r(Be,"linearScalemodeTextures",{});let dd=Be;const gr=class gr extends z{constructor(t){super(),this.sprite=t}_constructor1(){}_move(t,e){let i=this.sprite.container;i.tilePosition.x+=t,i.tilePosition.y+=e}_scale(t,e){e=e||t;let i=this.sprite.container;i.tileScale.x*=t,i.tileScale.y*=e}_mirrorX(){this._scale(-1,1)}_mirrorY(){this._scale(1,-1)}};r(gr,"__javaDeclarations",[{type:"declaration",signature:"class TileImage extends Object",comment:o.tileClassComment},{type:"method",signature:"private TileImage()",native:gr.prototype._constructor1},{type:"method",signature:"void move(double x, double y)",native:gr.prototype._move,comment:o.tileMoveComment},{type:"method",signature:"void scale(double factor)",native:gr.prototype._scale,comment:o.tileScaleComment},{type:"method",signature:"void mirrorX()",native:gr.prototype._mirrorX,comment:o.tileMirrorXComment},{type:"method",signature:"void mirrorY()",native:gr.prototype._mirrorY,comment:o.tileMirrorYComment}]),r(gr,"type");let hd=gr;const ot=class ot extends Hi{constructor(){super(...arguments);r(this,"shapes",[])}_cj$_constructor_$Group$(e,i){this._cj$_constructor_$Shape$(e,()=>{this.container=new ks,this.world.app.stage.addChild(this.container),i&&i()})}_cj$_constructor_$Group$Shape_I(e,i,n){this._cj$_constructor_$Group$(e,()=>{if(n){for(let s of n)this.add(s);i&&i()}})}render(){}getElements(){return this.shapes}_mj$copy$Shape$(e,i){this._mj$copy$Group$(e,i)}_mj$copy$Group$(e,i){let n=new ot;n._cj$_constructor_$Group$(e,()=>{let s=0,a=()=>{if(s>=this.shapes.length){e.s.push(n),i&&i();return}this.shapes[s]._mj$copy$Shape$(e,()=>{n.add(e.s.pop()),s++,a()})};a()})}_containsPoint(e,i){if(!this.container.getBounds().containsPoint(e,i))return!1;for(let n of this.shapes)if(n._containsPoint(e,i))return!0;return!1}_collidesWith(e){if(!this.hasOverlappingBoundingBoxWith(e))return!1;for(let i of this.shapes)if(i._collidesWith(e))return!0;return!1}indexOf(e){return this.shapes.indexOf(e)}checkIndex(e){if(e<0)throw new F("Der Index ist kleiner als 0.");if(e>=this.shapes.length)throw new F("Zugriff auf das Shape mit Index "+e+" einer Gruppe mit "+this.shapes.length+" Elementen.")}removeWithIndex(e){this.checkIndex(e),this.remove(this.shapes[e])}get(e){return this.checkIndex(e),this.shapes[e]}addMultiple(e){for(let i of e)this.add(i)}add(e){if(e==null)return;if(e.isDestroyed)throw new F("Ein schon zerstörtes Objekt kann keiner Gruppe hinzugefügt werden.");if(e instanceof ot&&e.containsRecursively(this))throw new F("Es wurde versucht, eine Gruppe A zu einer Gruppe B hinzuzufügen, wobei B die Gruppe A bereits enthielt. Dies führt zu einem unzulässigen Zirkelbezug.");if(e.getWorldTransform(),e.belongsToGroup!=null)e.belongsToGroup.remove(e);else{let u=this.world.shapesWhichBelongToNoGroup.indexOf(e);u>=0&&this.world.shapesWhichBelongToNoGroup.splice(u,1)}this.shapes.push(e),e.belongsToGroup=this;let i=new Ki().copyFrom(this.getWorldTransform()).invert();i.append(e.getWorldTransform()),e.container.setFromMatrix(i),e.container.updateLocalTransform(),e.worldTransformDirty=!0,this.container.addChild(e.container);let n=this.shapes.length,s=this.getWorldTransform().apply(new ue(this.centerXInitial,this.centerYInitial)),a=e.getCenter(),l=(s.x*(n-1)+a.x)/n,h=(s.y*(n-1)+a.y)/n,c=this.getWorldTransform().applyInverse(new ue(l,h));this.centerXInitial=c.x,this.centerYInitial=c.y}containsRecursively(e){for(let i of this.shapes)if(i==e||i instanceof ot&&i.containsRecursively(e))return!0;return!1}destroyAllChildren(){for(;this.shapes.length>0;)this.shapes.pop().destroy()}removeAllChildren(){let e=0;for(let i of this.shapes)this.deregister(i,e++);this.shapes=[]}remove(e){let i=this.shapes.indexOf(e);i>=0&&(this.shapes.splice(i,1),this.deregister(e,i))}deregister(e,i){e.getWorldTransform(),this.container.removeChild(e.container),this.world.app.stage.addChild(e.container);let n=new Ki().copyFrom(this.world.app.stage.localTransform).invert();n.append(e.getWorldTransform()),e.container.setFromMatrix(n),e.container.updateLocalTransform(),e.worldTransformDirty=!0,e.belongsToGroup=void 0;let s=this.shapes.length,a=this.getWorldTransform().apply(new ue(this.centerXInitial,this.centerYInitial)),l=e.getCenter(),h=(a.x*(s+1)-l.x)/s,c=(a.y*(s+1)-l.y)/s,u=this.getWorldTransform().applyInverse(new ue(h,c));this.centerXInitial=u.x,this.centerYInitial=u.y}setChildIndex(e,i){this.container.setChildIndex(e.container,i);let n=this.shapes.indexOf(e);this.shapes.splice(n,1),this.shapes.splice(i,0,e)}destroy(){for(let e of this.shapes)e.destroy();super.destroy()}setWorldTransformAndHitPolygonDirty(){this.worldTransformDirty=!0;for(let e of this.shapes)e.setWorldTransformAndHitPolygonDirty()}_getCollidingShapesGroup(e){return e==null||!this.hasOverlappingBoundingBoxWith(e)?[]:this.shapes.filter(i=>i!=e&&e._collidesWith(i))}_getCollisionPairs(e,i=!1){if(e==null||!this.hasOverlappingBoundingBoxWith(e))return[];let n=[],s=new Set;for(let a of this.shapes)for(let l of e.shapes)if(!s.has(l)&&a._collidesWith(l)&&(n.push(new rd(a,l)),i)){s.add(l);break}return n}_mj$renderAsStaticBitmap$void$(e,i){new dd()._cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode(e,()=>{this.destroyAllChildren();let n=e.s.pop(),s=this._getCenterX(),a=this._getCenterY();n._defineCenter(this._getCenterX(),this._getCenterY()),n.container.localTransform.append(this.world.app.stage.localTransform),n.container.setFromMatrix(n.container.localTransform),n.container.updateLocalTransform(),n.setWorldTransformAndHitPolygonDirty(),this.add(n),this._defineCenter(s,a),i&&i()},0,0,"",0,void 0,this)}};r(ot,"__javaDeclarations",[{type:"declaration",signature:"class Group extends Shape",comment:o.groupClassComment},{type:"method",signature:"Group()",java:ot.prototype._cj$_constructor_$Group$,comment:o.groupConstructorComment},{type:"method",signature:"Group(T... shapes)",java:ot.prototype._cj$_constructor_$Group$Shape_I,comment:o.groupConstructorComment},{type:"method",signature:"final void add(T shape)",native:ot.prototype.add,comment:o.groupAddComment},{type:"method",signature:"final void add(T... shapes)",native:ot.prototype.addMultiple,comment:o.groupAddComment},{type:"method",signature:"final void remove(T shape)",native:ot.prototype.remove,comment:o.groupRemoveComment},{type:"method",signature:"final void remove(int index)",native:ot.prototype.removeWithIndex,comment:o.groupRemoveWithIndexComment},{type:"method",signature:"final T get(int index)",native:ot.prototype.get,comment:o.groupGetComment},{type:"method",signature:"final int indexOf(T shape)",native:ot.prototype.indexOf,comment:o.groupIndexOfComment},{type:"method",signature:"final int size()",template:"§1.shapes.length",comment:o.groupSizeComment},{type:"method",signature:"final void empty()",native:ot.prototype.removeAllChildren,comment:o.groupEmptyComment},{type:"method",signature:"final void destroyAllChildren()",native:ot.prototype.destroyAllChildren,comment:o.groupDestroyAllChildrenComment},{type:"method",signature:"final void renderAsStaticBitmap()",java:ot.prototype._mj$renderAsStaticBitmap$void$,comment:o.groupRenderAsStaticBitmapComment},{type:"method",signature:"final Group copy()",java:ot.prototype._mj$copy$Group$,comment:o.groupCopyComment},{type:"method",signature:"final T[] getCollidingShapes(Shape otherShape)",native:ot.prototype._getCollidingShapesGroup,comment:o.groupGetCollidingShapesComment},{type:"method",signature:"final CollisionPair[] getCollisionPairs(Group otherGroup, boolean maxOneCollisionPerShape)",native:ot.prototype._getCollisionPairs,comment:o.groupGetCollisionPairsComment},{type:"method",signature:"final boolean collidesWith(Shape otherShape)",native:ot.prototype._collidesWith,comment:o.shapeCollidesWithComment},{type:"method",signature:"final boolean collidesWithAnyShape()",native:Hi.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithAnyShapeComment},{type:"method",signature:"final boolean collidesWithFillColor(int color)",native:Hi.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithFillColorComment},{type:"method",signature:"final boolean collidesWithFillColor(string color)",native:Hi.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithFillColorComment},{type:"method",signature:"final boolean collidesWithFillColor(Color color)",native:Hi.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithFillColorComment},{type:"method",signature:"final Sprite getFirstCollidingSprite(int imageIndex)",native:Hi.prototype._getFirstCollidingSprite,comment:o.shapeGetFirstCollidingSpriteComment}]),r(ot,"type");let vs=ot;const fr=class fr extends jt{constructor(){super(...arguments);r(this,"dotWidth",0);r(this,"height",0);r(this,"registerAsMouseListener");r(this,"registerAsKeyboardListener");r(this,"mouseManager");r(this,"keyboardManager");r(this,"changeListeners",[]);r(this,"scheduler")}_cj$_constructor$GuiComponent$(e,i,n,s){this._cj$_constructor_$FilledShape$(e,()=>{this.scheduler=e.scheduler,this.registerAsMouseListener=n,this.registerAsKeyboardListener=s,this.registerAsListener(e),this.centerXInitial=0,this.centerYInitial=0,i&&i()})}_mj$onChange$void$String(e,i,n){}onMouseEvent(e,i,n){throw new Error("Method not implemented.")}onKeyDown(e,i,n,s){throw new Error("Method not implemented.")}looseKeyboardFocus(){throw new Error("Method not implemented.")}registerAsListener(e){var i,n;this.registerAsMouseListener&&(this.mouseManager=this.world.mouseManager,(i=this.mouseManager)==null||i.internalMouseListeners.push(this)),this.registerAsKeyboardListener&&(this.keyboardManager=this.keyboardManager||(e==null?void 0:e.scheduler.interpreter.keyboardManager),(n=this.keyboardManager)==null||n.addInternalKeyboardListener(this))}unregisterAsListener(){if(this.mouseManager){let e=this.mouseManager.internalMouseListeners.indexOf(this);e>=0&&this.mouseManager.internalMouseListeners.splice(e,1)}this.keyboardManager&&this.keyboardManager.removeInternalKeyboardListener(this)}destroy(){this.unregisterAsListener(),super.destroy()}setVisible(e){super._setVisible(e),e?this.registerAsListener(void 0):this.unregisterAsListener()}getWidth(){return this.dotWidth}getHeight(){return this.height}addChangeListener(e){this.changeListeners.push(e)}callOnChange(e){if(this._mj$onChange$void$String!=fr.prototype._mj$onChange$void$String||this.changeListeners.length>0){let i=this.scheduler.createThread("onChange-method thread");this._mj$onChange$void$String!=fr.prototype._mj$onChange$void$String&&this._mj$onChange$void$String(i,void 0,new G(e));for(let n of this.changeListeners)n._mj$onChange$void$Object$String(i,void 0,this,new G(e));i.state=B.running}}};r(fr,"__javaDeclarations",[{type:"declaration",signature:"abstract class GuiComponent extends FilledShape",comment:o.GUIComponentClassComment},{type:"method",signature:"GuiComponent()",java:fr.prototype._cj$_constructor$GuiComponent$},{type:"method",signature:"void addChangeListener(GuiChangeListener changeListener)",native:fr.prototype.addChangeListener,comment:o.GUIComponentAddChangeListenerComment},{type:"method",signature:"final double getWidth()",template:"§1.width",comment:o.GUIComponentGetWidthComment},{type:"method",signature:"final double getHeight()",template:"§1.height",comment:o.GUIComponentGetHeightComment},{type:"method",signature:"void onChange(String newValue)",java:fr.prototype._mj$onChange$void$String,comment:o.GUIComponentOnChangeComment}]),r(fr,"type");let cd=fr;const rn=class rn extends cd{constructor(){super(...arguments);r(this,"pixiText");r(this,"textColor",16777215);r(this,"textHeight",10);r(this,"textWidth",10);r(this,"fontsize",12);r(this,"text","");r(this,"fontFamily","sans serif");r(this,"textStyle",new eh({fontFamily:"Arial",fontSize:10,fontStyle:"normal",fontWeight:"normal",fill:16777215,stroke:{color:0,width:0,join:"round"},dropShadow:!1,wordWrap:!1,align:"center"}))}_cj$_constructor_$GuiTextComponent$(e,i,n,s,a,l,h){this._cj$_constructor$GuiComponent$(e,()=>{this.fontsize=a||10,this.fontFamily=h||"sans serif",this.text=l,this.fontsize==0&&(this.fontsize=10),this.textStyle.fontSize=a,h!=null&&(this.textStyle.fontFamily=h),i&&i()},n,s)}setStyle(e,i){this.textStyle.fontWeight=e?"bold":"normal",this.textStyle.fontStyle=i?"italic":"normal",this.render()}textCompomentPrerender(){this.textStyle.fill=this.textColor==null?0:this.textColor,this.textStyle.stroke.color=0,this.textStyle.stroke.width=0,this.textStyle.fontSize=this.fontsize}setFontsize(e){this.fontsize=e,this.fontsize==0&&(this.fontsize=10),this.render()}setText(e){this.text=e,this.render()}setTextColor(e){e&&(typeof e=="string"?e=ze.parseColorToOpenGL(e).color:e instanceof Nr&&(e=e._toInt())),this.textColor=e,this.render()}getText(){return this.text}};r(rn,"__javaDeclarations",[{type:"declaration",signature:"abstract class GuiTextComponent extends GuiComponent",comment:o.GuiTextComponentClassComment},{type:"method",signature:"GuiTextComponent()",java:rn.prototype._cj$_constructor_$GuiTextComponent$},{type:"method",signature:"void setFontsize(double fontsize)",native:rn.prototype.setFontsize,comment:o.GuiTextComponentSetFontsizeComment},{type:"method",signature:"void setText(string text)",native:rn.prototype.setText,comment:o.GuiTextComponentSetTextComment},{type:"method",signature:"string getText()",native:rn.prototype.getText,comment:o.GuiTextComponentGetTextComment},{type:"method",signature:"double getFontsize()",template:"§1.fontsize",comment:o.GuiTextComponentGetFontsizeComment},{type:"method",signature:"void setStyle(boolean isBold, boolean isItalic)",native:rn.prototype.setStyle,comment:o.GuiTextComponentSetStyleComment},{type:"method",signature:"void setTextColor(Color color)",native:rn.prototype.setTextColor,comment:o.GuiTextComponentSetTextColor},{type:"method",signature:"void setTextColor(int color)",native:rn.prototype.setTextColor,comment:o.GuiTextComponentSetTextColor},{type:"method",signature:"void setTextColor(string color)",native:rn.prototype.setTextColor,comment:o.GuiTextComponentSetTextColor}]),r(rn,"type");let la=rn;const br=class br extends la{constructor(){super(...arguments);r(this,"x");r(this,"y");r(this,"backgroundGraphics");r(this,"higlightGraphics");r(this,"mouseIsDown",!1);r(this,"isMouseOver",!1)}_cj$_constructor_$Button$double$double$double$string(e,i,n,s,a,l,h){this.x=n,this.y=s,this._cj$_constructor_$GuiTextComponent$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.borderColor=8421504,this.borderWidth=a/8,this.fillColor=255,this.hitPolygonInitial=[],this.render(),i&&i()},!0,!1,a,l,h)}onKeyDown(e,i,n,s){}looseKeyboardFocus(){}_mj$copy$Button$(e,i){let n=new br;n.textColor=this.textColor,this._cj$_constructor_$Button$double$double$double$string(e,()=>{i&&i()},this.x,this.y,this.fontsize,this.text,this.fontFamily)}render(){this.textCompomentPrerender();let e=this.fontsize/3;if(this.container==null?(this.backgroundGraphics=new He,this.higlightGraphics=new He,this.pixiText=new ca({text:this.text,style:this.textStyle}),this.container=new ks,this.container.localTransform.translate(this.x,this.y),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.world.app.stage.addChild(this.container),this.container.addChild(this.higlightGraphics),this.container.addChild(this.backgroundGraphics),this.container.addChild(this.pixiText)):(this.pixiText.text=this.text,this.backgroundGraphics.clear(),this.higlightGraphics.clear(),this.pixiText.alpha=this.fillAlpha,this.pixiText.anchor.x=0,this.pixiText.style=this.textStyle),this.centerXInitial=0,this.centerYInitial=0,this.text!=null){let a=io.measureText(this.text,this.textStyle);this.textWidth=a.width,this.textHeight=a.height,this.pixiText.localTransform.identity(),this.pixiText.localTransform.translate(e,e),this.pixiText.setFromMatrix(this.pixiText.localTransform),this.pixiText.updateLocalTransform(),this.centerXInitial=this.textWidth/2+e,this.centerYInitial=this.textHeight/2+e}let i=0,n=0;this.dotWidth=this.textWidth+2*e,this.height=this.textHeight+2*e,this.hitPolygonInitial=[{x:i,y:n},{x:i+this.dotWidth,y:n},{x:i+this.dotWidth,y:n+this.height},{x:i,y:n+this.height}],this.hitPolygonDirty=!0,this.backgroundGraphics.roundRect(0,0,this.dotWidth,this.height,this.height/8),this.fillColor!=null&&(this.backgroundGraphics.fill(this.fillColor),this.backgroundGraphics.alpha=this.fillAlpha),this.borderColor!=null&&this.backgroundGraphics.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:1});let s=this.height/10+this.borderWidth;this.higlightGraphics.roundRect(-s,-s,this.dotWidth+2*s,this.height+2*s,this.height/4),this.fillColor!=null&&this.higlightGraphics.fill(kf(this.fillColor,.4)),this.higlightGraphics.visible=this.mouseIsDown}onMouseEvent(e,i,n){let s=this._containsPoint(i,n);switch(e){case"mousedown":s&&(this.mouseIsDown=!0,this.higlightGraphics.visible=!0);break;case"mouseup":s&&this.mouseIsDown&&(this.higlightGraphics.visible=!1,this.callOnChange("clicked")),this.mouseIsDown=!1;break;case"mouseleave":this.isMouseOver=!1,this.world._setCursor("default");break;case"mousemove":this.isMouseOver!=s&&(this.isMouseOver=s,this.world._setCursor(s?"pointer":"default"))}}_isDown(){return this.mouseIsDown}};r(br,"__javaDeclarations",[{type:"declaration",signature:"class Button extends GuiTextComponent",comment:o.ButtonClassComment},{type:"method",signature:"Button(double x, double y, double fontsize, string text)",java:br.prototype._cj$_constructor_$Button$double$double$double$string,comment:o.ButtonConstructorComment},{type:"method",signature:"Button(double x, double y, double fontsize, string text, string fontFamily)",java:br.prototype._cj$_constructor_$Button$double$double$double$string,comment:o.ButtonConstructorComment},{type:"method",signature:"Button copy()",java:br.prototype._mj$copy$Button$,comment:o.ButtonCopyComment},{type:"method",signature:"boolean isDown()",native:br.prototype._isDown,comment:o.ButtonIsDownComment}]),r(br,"type");let gc=br;const Io=class Io extends mi{_mj$onChange$void$Object$String(t,e,i,n){}};r(Io,"__javaDeclarations",[{type:"declaration",signature:"interface GuiChangeListener",comment:o.ChangeListenerInterfaceComment},{type:"method",signature:"void onChange(Object changedObject, String newValue)",java:Io.prototype._mj$onChange$void$Object$String,comment:o.ChangeListenerOnChangeComment}]),r(Io,"type");let fc=Io;const sn=class sn extends la{constructor(){super(...arguments);r(this,"x");r(this,"y");r(this,"backgroundGraphics");r(this,"cross");r(this,"distanceToText",4);r(this,"crossColor",0);r(this,"isChecked",!0);r(this,"mouseIsDown",!1);r(this,"isMouseOver",!1)}_cj$_constructor_$CheckBox$double$double$double$double$string(e,i,n,s,a,l,h,c){this.isChecked=!1;let u="sans serif";c&&(typeof c=="boolean"?this.isChecked=c:u=c),this.x=n,this.y=s,this.dotWidth=a,this._cj$_constructor_$GuiTextComponent$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.borderColor=8421504,this.borderWidth=a/10,this.fillColor=16777215,this.hitPolygonInitial=[],this.render(),i&&i()},!0,!1,l,h,u)}onKeyDown(e,i,n,s){}looseKeyboardFocus(){}_mj$copy$Button$(e,i){let n=new sn;n.textColor=this.textColor,n.crossColor=this.crossColor,n._cj$_constructor_$CheckBox$double$double$double$double$string(e,()=>{i&&i()},this.x,this.y,this.dotWidth,this.fontsize,this.text,this.fontFamily)}setCrossColor(e){this.crossColor=e,this.render()}render(){this.textCompomentPrerender(),this.container==null?(this.backgroundGraphics=new He,this.cross=new He,this.textStyle.align="left",this.pixiText=new ca({text:this.text,style:this.textStyle}),this.pixiText.x=this.dotWidth+this.distanceToText,this.pixiText.alpha=this.fillAlpha,this.pixiText.anchor.x=0,this.pixiText.y=0,this.container=new ks,this.container.addChild(this.backgroundGraphics),this.container.addChild(this.pixiText),this.container.addChild(this.cross),this.container.localTransform.translate(this.x,this.y),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.world.app.stage.addChild(this.container)):(this.pixiText.text=this.text,this.backgroundGraphics.clear(),this.cross.clear()),this.centerXInitial=0,this.centerYInitial=0;let e=0;if(this.text!=null){let c=io.measureText(this.text,this.textStyle);this.textWidth=c.width,this.textHeight=c.height,c.fontProperties.ascent,e=(this.dotWidth-this.textHeight)/2,this.distanceToText=c.fontProperties.descent*3,this.pixiText.localTransform.identity(),this.pixiText.localTransform.translate(this.dotWidth+this.distanceToText,e),this.pixiText.setFromMatrix(this.pixiText.localTransform),this.pixiText.updateLocalTransform(),this.centerXInitial=(this.dotWidth+this.textWidth+this.distanceToText)/2,this.centerYInitial=this.dotWidth/2}let i=0,n=0,s=n+this.dotWidth-e,a=this.textWidth+this.dotWidth+this.distanceToText;this.height=Math.max(this.dotWidth,this.textHeight),this.hitPolygonInitial=[{x:i,y:n},{x:i+this.dotWidth,y:n},{x:i+this.dotWidth+this.distanceToText,y:e},{x:i+a,y:e},{x:i+a,y:s},{x:i+this.dotWidth+this.distanceToText,y:s},{x:i+this.dotWidth,y:n+this.dotWidth},{x:i,y:n+this.dotWidth}],this.hitPolygonDirty=!0,this.backgroundGraphics.roundRect(0,0,this.dotWidth,this.dotWidth,this.dotWidth/8),this.fillColor!=null&&(this.backgroundGraphics.fill(this.fillColor),this.backgroundGraphics.alpha=this.fillAlpha),this.borderColor!=null&&this.backgroundGraphics.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:1});let h=this.borderWidth*3;this.cross.moveTo(h,h),this.cross.lineTo(this.dotWidth-h,this.dotWidth-h),this.cross.moveTo(this.dotWidth-h,h),this.cross.lineTo(h,this.dotWidth-h),this.cross.stroke({width:this.borderWidth*2,color:this.crossColor,alpha:this.fillAlpha,alignment:.5,cap:"round"}),this.cross.visible=this.isChecked}setChecked(e){this.isChecked=e,this.render()}onMouseEvent(e,i,n){let s=this._containsPoint(i,n);switch(e){case"mousedown":s&&(this.mouseIsDown=!0);break;case"mouseup":s&&this.mouseIsDown&&(this.isChecked=!this.isChecked,this.render(),this.callOnChange(""+this.isChecked)),this.mouseIsDown=!1;break;case"mouseleave":this.isMouseOver=!1,this.world._setCursor("default");break;case"mousemove":this.isMouseOver!=s&&(this.isMouseOver=s,this.world._setCursor(s?"pointer":"default"))}}_isChecked(){return this.isChecked}};r(sn,"__javaDeclarations",[{type:"declaration",signature:"class Checkbox extends GuiTextComponent",comment:o.CheckBoxClassComment},{type:"method",signature:"Checkbox(double x, double y, double width, double fontsize, string text)",java:sn.prototype._cj$_constructor_$CheckBox$double$double$double$double$string,comment:o.CheckBoxConstructorComment},{type:"method",signature:"Checkbox(double x, double y, double width, double fontsize, string text, string fontFamily)",java:sn.prototype._cj$_constructor_$CheckBox$double$double$double$double$string,comment:o.CheckBoxConstructorComment},{type:"method",signature:"Checkbox(double x, double y, double width, double fontsize, string text, boolean checked)",java:sn.prototype._cj$_constructor_$CheckBox$double$double$double$double$string,comment:o.CheckBoxConstructorComment},{type:"method",signature:"Checkbox copy()",java:sn.prototype._mj$copy$Button$,comment:o.CheckBoxCopyComment},{type:"method",signature:"void setCrossColor(int color)",native:sn.prototype.setCrossColor,comment:o.CheckBoxSetCrossColorComment},{type:"method",signature:"void setChecked(boolean checked)",native:sn.prototype.setChecked,comment:o.CheckBoxSetCheckedComment},{type:"method",signature:"boolean isChecked()",native:sn.prototype._isChecked,comment:o.CheckBoxIsCheckedComment}]),r(sn,"type");let bc=sn;const xi=class xi extends la{constructor(){super(...arguments);r(this,"x");r(this,"y");r(this,"backgroundGraphics");r(this,"dot");r(this,"distanceToText",4);r(this,"dotColor",0);r(this,"isSelected",!0);r(this,"mouseIsDown",!1);r(this,"isMouseOver",!1);r(this,"index");r(this,"otherButtons",[])}_cj$_constructor_$Radiobutton$double$double$double$double$string$int(e,i,n,s,a,l,h,c){this._cj$_constructor_$Radiobutton$double$double$double$double$string$string$int(e,i,n,s,a,l,h,void 0,c)}_cj$_constructor_$Radiobutton$double$double$double$double$string$string$int(e,i,n,s,a,l,h,c,u){this.isSelected=!1,this.fontFamily=c||"sans serif",this.index=u,this.x=n,this.y=s,this.dotWidth=a,this._cj$_constructor_$GuiTextComponent$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.borderColor=8421504,this.borderWidth=a/10,this.fillColor=16777215,this.hitPolygonInitial=[],this.render(),i&&i()},!0,!1,l,h,c)}onKeyDown(e,i,n,s){}looseKeyboardFocus(){}_mj$copy$Button$(e,i){let n=new xi;n.textColor=this.textColor,n.dotColor=this.dotColor,n.distanceToText=this.distanceToText,n.isSelected=this.isSelected,n._cj$_constructor_$Radiobutton$double$double$double$double$string$string$int(e,()=>{i&&i()},this.x,this.y,this.dotWidth,this.fontsize,this.text,this.fontFamily,this.index+1)}setIndex(e){this.index=e}getIndexOfSelectedRadiobutton(){if(this.isSelected)return this.index;for(let e of this.otherButtons)if(e.isSelected)return e.index;return-1}getTextOfSelectedRadiobutton(){if(this.isSelected)return this.text;for(let e of this.otherButtons)if(e.isSelected)return e.text;return""}setSelected(){this.isSelected=!0,this.render();for(let e of this.otherButtons)e.isSelected=!1,e.render()}connectTo(e){if(e!=null){for(let i of e)this.otherButtons.indexOf(i)<0&&i!=this&&this.otherButtons.push(i);for(let i of e){let n=this.otherButtons.slice();n.push(this);let s=n.indexOf(i);s>=0&&n.splice(s,1),i.otherButtons=n}}}setDotColor(e){this.dotColor=e,this.render()}setCrossColor(e){this.dotColor=e,this.render()}render(){this.textCompomentPrerender(),this.container==null?(this.backgroundGraphics=new He,this.dot=new He,this.textStyle.align="left",this.pixiText=new ca({text:this.text,style:this.textStyle}),this.pixiText.x=this.dotWidth+this.distanceToText,this.pixiText.alpha=this.fillAlpha,this.pixiText.anchor.x=0,this.pixiText.y=0,this.container=new ks,this.container.addChild(this.backgroundGraphics),this.container.addChild(this.pixiText),this.container.addChild(this.dot),this.container.localTransform.translate(this.x,this.y),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.world.app.stage.addChild(this.container)):(this.pixiText.text=this.text,this.backgroundGraphics.clear(),this.dot.clear()),this.centerXInitial=0,this.centerYInitial=0;let e=0;if(this.text!=null){let h=io.measureText(this.text,this.textStyle);this.textWidth=h.width,this.textHeight=h.height,h.fontProperties.ascent,e=(this.dotWidth-this.textHeight)/2,this.distanceToText=h.fontProperties.descent*3,this.pixiText.localTransform.identity(),this.pixiText.localTransform.translate(this.dotWidth+this.distanceToText,e),this.pixiText.setFromMatrix(this.pixiText.localTransform),this.pixiText.updateLocalTransform(),this.centerXInitial=(this.dotWidth+this.textWidth+this.distanceToText)/2,this.centerYInitial=this.dotWidth/2}let i=0,n=0,s=n+this.dotWidth-e,a=this.textWidth+this.dotWidth+this.distanceToText;this.height=Math.max(this.dotWidth,this.textHeight),this.hitPolygonInitial=[{x:i,y:n},{x:i+this.dotWidth,y:n},{x:i+this.dotWidth+this.distanceToText,y:e},{x:i+a,y:e},{x:i+a,y:s},{x:i+this.dotWidth+this.distanceToText,y:s},{x:i+this.dotWidth,y:n+this.dotWidth},{x:i,y:n+this.dotWidth}],this.hitPolygonDirty=!0,this.backgroundGraphics.circle(this.dotWidth/2,this.dotWidth/2,this.dotWidth/2),this.fillColor!=null&&(this.backgroundGraphics.fill(this.fillColor),this.backgroundGraphics.alpha=this.fillAlpha),this.borderColor!=null&&this.backgroundGraphics.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:1}),this.borderWidth*3,this.dot.circle(this.dotWidth/2,this.dotWidth/2,this.dotWidth/6),this.dotColor!=null&&this.dot.fill(this.dotColor),this.dot.visible=this.isSelected}setChecked(e){this.isSelected=e,this.render()}onMouseEvent(e,i,n){let s=this._containsPoint(i,n);switch(e){case"mousedown":s&&(this.mouseIsDown=!0);break;case"mouseup":{if(s&&this.mouseIsDown){this.setSelected(),this.render(),this.callOnChange(""+this.index);for(let a of this.otherButtons)a.callOnChange(""+this.index)}this.mouseIsDown=!1}break;case"mouseleave":this.isMouseOver=!1,this.world._setCursor("default");break;case"mousemove":this.isMouseOver!=s&&(this.isMouseOver=s,this.world._setCursor(s?"pointer":"default"))}}_isChecked(){return this.isSelected}};r(xi,"__javaDeclarations",[{type:"declaration",signature:"class RadioButton extends GuiTextComponent",comment:o.RadiobuttonClassComment},{type:"method",signature:"RadioButton(double x, double y, double width, double fontsize, string text, int index)",java:xi.prototype._cj$_constructor_$Radiobutton$double$double$double$double$string$int,comment:o.RadiobuttonConstructorComment},{type:"method",signature:"RadioButton(double x, double y, double width, double fontsize, string text, string fontFamily, int index)",java:xi.prototype._cj$_constructor_$Radiobutton$double$double$double$double$string$string$int,comment:o.RadiobuttonConstructorComment},{type:"method",signature:"RadioButton copy()",java:xi.prototype._mj$copy$Button$,comment:o.RadiobuttonCopyComment},{type:"method",signature:"int getIndex()",template:"§1.index",comment:o.RadiobuttonGetIndexComment},{type:"method",signature:"int getIndexOfSelectedRadiobutton()",native:xi.prototype.getIndexOfSelectedRadiobutton,comment:o.RadiobuttonGetIndexOfSelectedRadiobuttonComment},{type:"method",signature:"int getTextOfSelectedRadiobutton()",native:xi.prototype.getTextOfSelectedRadiobutton,comment:o.RadiobuttonGetTextOfSelectedRadiobuttonComment},{type:"method",signature:"void setIndex()",native:xi.prototype.setIndex,comment:o.RadiobuttonSetIndexComment},{type:"method",signature:"void setDotColor()",native:xi.prototype.setDotColor,comment:o.RadiobuttonSetDotColorComment},{type:"method",signature:"void connectTo(RadioButton... otherButtons)",native:xi.prototype.connectTo,comment:o.RadiobuttonConnectToComment},{type:"method",signature:"void select()",native:xi.prototype.setSelected,comment:o.RadiobuttonSelectComment},{type:"method",signature:"boolean isSelected()",template:"§1.isSelected",comment:o.RadiobuttonIsSelectedComment}]),r(xi,"type");let yc=xi;const yr=class yr extends la{constructor(){super(...arguments);r(this,"backgroundGraphics");r(this,"mask");r(this,"keyboardFocusRect");r(this,"cursor");r(this,"selectionRectangle");r(this,"padding",8);r(this,"hasKeyboardFocus",!1);r(this,"characterStops",[]);r(this,"characterCenterList",[]);r(this,"isSelecting",!1);r(this,"selectionStart",0);r(this,"selectionEnd",0);r(this,"renderFromCharacterPosition",0);r(this,"timerId");r(this,"isMouseOver",!1);r(this,"x");r(this,"y");r(this,"width");r(this,"caption")}_cj$_constructor_$Textfield$double$double$double$double$string$string(e,i,n,s,a,l,h,c){c=c||"sans serif",this.x=n,this.y=s,this.width=a,this._cj$_constructor_$GuiTextComponent$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.borderColor=8421504,this.borderWidth=l/10,this.fillColor=16777215,this.textColor=0,this.hitPolygonInitial=[],this.generateCharacterStops(),this.render(),this.initTimer(),i&&i()},!0,!0,l,h,c)}initTimer(){let e=this;this.timerId=setInterval(()=>{e.cursor!=null&&!e.cursor.destroyed&&e.hasKeyboardFocus&&(e.cursor.visible=!e.cursor.visible)},500)}unregisterAsListener(){super.unregisterAsListener(),clearInterval(this.timerId)}_mj$copy$Textfield$(e,i){let n=new yr;n._cj$_constructor_$Textfield$double$double$double$double$string$string(e,()=>{n.padding=this.padding,n.copyFrom(this),n.render()},this.x,this.y,this.width,this.fontsize,this.text,this.fontFamily)}render(){this.scrollIfNecessary(),this.textCompomentPrerender();let e=this.text;e.length==0?(e=this.text,this.textStyle.fill=4210752):e=this.text.substring(this.renderFromCharacterPosition),this.container==null?(this.backgroundGraphics=new He,this.keyboardFocusRect=new He,this.cursor=new He,this.selectionRectangle=new He,this.mask=new He,this.pixiText=new ca({text:e,style:this.textStyle}),this.container=new ks,this.container.localTransform.translate(this.x+this.padding,this.y+this.padding),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.world.app.stage.addChild(this.container),this.container.addChild(this.mask),this.container.addChild(this.backgroundGraphics),this.container.addChild(this.keyboardFocusRect),this.container.addChild(this.selectionRectangle),this.container.addChild(this.pixiText),this.container.addChild(this.cursor),this.pixiText.mask=this.mask,this.selectionRectangle.mask=this.mask):(this.pixiText.text=e,this.backgroundGraphics.clear(),this.mask.clear(),this.keyboardFocusRect.clear(),this.selectionRectangle.clear(),this.cursor.clear(),this.pixiText.alpha=this.fillAlpha,this.pixiText.anchor.x=0,this.textStyle.align="left",this.pixiText.style=this.textStyle),this.centerXInitial=0,this.centerYInitial=0;let i=0;if(this.text!=null){let a=io.measureText(this.text,this.textStyle);i=this.width,this.height=a.height,a.fontProperties.ascent,this.centerXInitial=i/2,this.centerYInitial=this.height/2}let n=0-this.pixiText.anchor.x*i,s=0-this.pixiText.anchor.y*this.height;if(this.hitPolygonInitial=[{x:n,y:s},{x:n,y:s+this.height},{x:n+i,y:s+this.height},{x:n+i,y:s}],this.hitPolygonDirty=!0,-this.padding,-this.padding,this.mask.rect(0,0,this.width-2*this.padding,this.height),this.mask.fill(0),this.backgroundGraphics.roundRect(-this.padding,-this.padding,this.width,this.height+2*this.padding,this.fontsize/8),this.fillColor!=null&&(this.backgroundGraphics.fill(this.fillColor),this.backgroundGraphics.alpha=this.fillAlpha),this.borderColor!=null&&this.backgroundGraphics.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:1}),this.selectionEnd!=this.selectionStart){let a=this.characterStops[this.selectionStart]-this.characterStops[this.renderFromCharacterPosition],l=this.characterStops[this.selectionEnd]-this.characterStops[this.renderFromCharacterPosition];if(l{a.deleteSelected(),a.text=a.text.substring(0,a.selectionEnd)+l+a.text.substring(a.selectionEnd),a.selectionEnd+=l.length,a.selectionStart=a.selectionEnd,a.generateCharacterStops(),a.render(),this.callOnChange(this.text)});else if(e.length==1)this.deleteSelected(),this.text=this.text.substring(0,this.selectionEnd)+e+this.text.substring(this.selectionEnd),this.selectionEnd++,this.selectionStart=this.selectionEnd,this.generateCharacterStops(),this.render(),this.callOnChange(this.text);else switch(e){case"ArrowRight":this.selectionEnd=Math.min(this.selectionEnd+1,this.text.length),i||(this.selectionStart=this.selectionEnd),this.render();break;case"ArrowLeft":this.selectionEnd=Math.max(this.selectionEnd-1,0),i||(this.selectionStart=this.selectionEnd),this.render();break;case"Delete":this.selectionStart!=this.selectionEnd?this.deleteSelected():this.selectionEnd0&&(this.text=this.text.substring(0,this.selectionEnd-1)+this.text.substring(this.selectionEnd),this.selectionEnd--,this.selectionStart=this.selectionEnd),this.generateCharacterStops(),this.render(),this.callOnChange(this.text);break;case"Insert":break;case"Home":this.selectionStart=0,this.selectionEnd=0,this.render();break;case"End":this.selectionStart=this.text.length,this.selectionEnd=this.text.length,this.render();break;default:console.log(e);break}}scrollIfNecessary(){let e=this.getCursorXFromCharacterPos(this.selectionEnd),i=!1;for(;e<0&&this.renderFromCharacterPosition>0;)this.renderFromCharacterPosition--,e=this.getCursorXFromCharacterPos(this.selectionEnd),i=!0;for(;e>this.width-2*this.padding&&this.renderFromCharacterPosition{this.sizeX=n,this.sizeY=s,this.container=new ks,this.columns=[];for(let a=0;a=this.sizeX||i>=this.sizeY}clearAll(){}init(e){let i=e.split(` `);for(let n=0;n=this.sizeY);n++){let s=i[n];for(let a=0;a=this.sizeX);a++){let l=this.columns[a][n],h=s.charAt(a).toLocaleLowerCase();if(h=="m")l.setWall(!0);else{let c=h.charCodeAt(0),u=0;c>=97&&c<=102&&(u=c-97+10),c>=49&&c<=57&&(u=c-49+1),u>0&&l.setGrainCount(u)}}}}destroy(){for(let e of this.columns)for(let i of e)i.destroy();this.backgroundGraphics.destroy(),this.hamsters.forEach(e=>e.destroy()),this.belowWorldText.destroy(),super.destroy()}};r(Rn,"__javaDeclarations",[{type:"declaration",signature:"class JavaHamsterWorld extends FilledShape",comment:o.HamsterWorldClassComment},{type:"method",signature:"JavaHamsterWorld(int Breite, int Höhe)",java:Rn.prototype._cj$_constructor_$JavaHamsterWorld$int$int,comment:o.HamsterWorldConstructorComment},{type:"method",signature:"final int getBreite()",template:"§1.sizeX",comment:o.HamsterWorldGetBreiteComment},{type:"method",signature:"final int getHöhe()",template:"§1.sizeY",comment:o.HamsterWorldGetHoeheComment},{type:"method",signature:"final void löscheAlles()",native:Rn.prototype.clearAll,comment:o.HamsterWorldLoescheAllesComment},{type:"method",signature:"final void setzeMauer(int x, int y)",native:Rn.prototype.setOrRemoveWall,comment:o.HamsterWorldSetzeMauerComment},{type:"method",signature:"final void setzeGetreide(int x, int y, int anzahl)",native:Rn.prototype.setGrain,comment:o.HamsterWorldSetzeGetreideComment},{type:"method",signature:"final void init(string worldAsString)",native:Rn.prototype.init,comment:o.HamsterWorldInitComment},{type:"method",signature:"final void scale(double factor)",native:Rn.prototype.scaleNew,comment:o.shapeScaleComment1}]),r(Rn,"type");let Ac=Rn;const Ta=class Ta extends z{constructor(){super(...arguments);r(this,"sprite");r(this,"world")}_cj$_constructor_$Hamster$JavaHamsterWorld$int$int$int$int(e,i,n,s,a,l,h){if(n==null)throw new F("Der Parameter javaHamsterWorld darf nicht null sein.");this.world=n,this.sprite=new kc(n,a,s,l,h),e.s.push(this),i&&i()}_mj$schreib$void$string(e,i,n){e.println(n,16777215),i&&i()}};r(Ta,"__javaDeclarations",[{type:"declaration",signature:"class Hamster extends Object",comment:o.HamsterClassComment},{type:"field",signature:"static int NORD",constantValue:0},{type:"field",signature:"static int OST",constantValue:1},{type:"field",signature:"static int SÜD",constantValue:2},{type:"field",signature:"static int WEST",constantValue:3},{type:"method",signature:"Hamster(JavaHamsterWorld world, int reihe, int spalte, int blickrichtung, int anzahlkörner)",java:Ta.prototype._cj$_constructor_$Hamster$JavaHamsterWorld$int$int$int$int,comment:o.HamsterConstructorComment},{type:"method",signature:"final void vor()",template:"§1.sprite.forward();",comment:o.HamsterVorComment},{type:"method",signature:"final JavaHamsterWorld getWorld()",template:"§1.world",comment:o.HamsterGetWorldComment},{type:"method",signature:"final int getBlickrichtung()",template:"§1.sprite.direction",comment:o.HamsterGetBlickrichtungComment},{type:"method",signature:"final int getReihe()",template:"§1.sprite.x",comment:o.HamsterGetReiheComment},{type:"method",signature:"final int getSpalte()",template:"§1.sprite.y",comment:o.HamsterGetSpalteComment},{type:"method",signature:"final int getAnzahlKoerner()",template:"§1.sprite.grainCount",comment:o.HamsterGetKoernerComment},{type:"method",signature:"final void linksUm()",template:"§1.sprite.turn(-1)",comment:o.HamsterLinksUmComment},{type:"method",signature:"final void gib()",template:"§1.sprite.give()",comment:o.HamsterGibComment},{type:"method",signature:"final void nimm()",template:"§1.sprite.take()",comment:o.HamsterNimmComment},{type:"method",signature:"final boolean vornFrei()",template:"§1.sprite.nextCellFree()",comment:o.HamsterVornFreiComment},{type:"method",signature:"final boolean maulLeer()",template:"(§1.sprite.grainCount == 0)",comment:o.HamsterMaulLeerComment},{type:"method",signature:"final boolean kornDa()",template:"§1.sprite.sitsOnGrain()",comment:o.HamsterKornDaComment},{type:"method",signature:"final void schreib(string text)",java:Ta.prototype._mj$schreib$void$string,comment:o.HamsterSchreibComment}]),r(Ta,"type");let wc=Ta;const $a=class $a{constructor(t,e,i,n,s){r(this,"sprite");this.world=t,this.x=e,this.y=i,this.direction=n,this.grainCount=s;let l=to.get("spritesheet").textures["Hamster#0"];this.sprite=new Vn(l),this.sprite.anchor.x=.5,this.sprite.anchor.y=.5,this.move(t.left+(e+.5)*t.cellWidth,t.top+(i+.5)*t.cellWidth),t.container.addChild(this.sprite),this.direction=2,this.setDirection(n),t.hamsters.push(this)}writeBelowWorldText(){this.world.hamsters.length==1&&(this.world.belowWorldText.text=`Hamster: ${this.grainCount}, Zelle: ${this.world.getGrainCount(this.x,this.y)}`)}testDestroyed(t){return this.sprite.destroyed?(this.throwException("Die Methode "+t+" eines schon zerstörten Hamsters wurde aufgerufen."),!0):!1}destroy(){this.sprite.destroy()}forward(){let t=$a.directions[this.direction],e=this.x+t.dx,i=this.y+t.dy;if(this.world.isOutside(e,i)){this.throwException(`Die neue Position (${e}, ${i}) ist außerhalb der Welt. Der Hamster kann daher nicht weitergehen.`);return}if(this.world.isWall(e,i)){this.throwException(`An der neuen Position (${e}, ${i}) befindet sich eine Mauer. Der Hamster kann daher nicht weitergehen.`);return}this.moveToCell(e,i),this.writeBelowWorldText()}turn(t){this.setDirection((this.direction+t+4)%4)}throwException(t){throw new F(t)}move(t,e){this.sprite.localTransform.translate(t,e),this.sprite.setFromMatrix(this.sprite.localTransform),this.sprite.updateLocalTransform()}moveToCell(t,e){this.move((t-this.x)*this.world.cellWidth,(e-this.y)*this.world.cellWidth),this.x=t,this.y=e}setDirection(t){let e=(t-this.direction+4)%4,i=this.world.left+(this.x+.5)*this.world.cellWidth,n=this.world.top+(this.y+.5)*this.world.cellWidth;this.sprite.localTransform.translate(-i,-n),this.sprite.localTransform.rotate(e*Math.PI/2),this.sprite.localTransform.translate(i,n),this.sprite.setFromMatrix(this.sprite.localTransform),this.sprite.updateLocalTransform(),this.direction=t}getPositionInDirection(t){let e=$a.directions[(this.direction+t+4)%4];return{x:(this.x+e.dx+this.world.sizeX)%this.world.sizeX,y:(this.y+e.dy+this.world.sizeY)%this.world.sizeY}}setPosition(t,e){t<0&&(t=-t-1+this.world.sizeX),e<0&&(e=-e-1+this.world.sizeY),this.moveToCell(t%this.world.sizeX,e%this.world.sizeY)}give(){if(this.grainCount<=0){this.throwException("Der Hamster hat kein Korn mehr, das er ablegen könnte.");return}this.grainCount--,this.world.setGrain(this.x,this.y,this.world.getGrainCount(this.x,this.y)+1),this.writeBelowWorldText()}take(){if(this.world.getGrainCount(this.x,this.y)<=0){this.throwException("In der Zelle, in der sich der Hamster befindet, liegt kein Korn. Der Hamster kann daher keines nehmen.");return}this.grainCount++,this.world.setGrain(this.x,this.y,this.world.getGrainCount(this.x,this.y)-1),this.writeBelowWorldText()}nextCellFree(){let t=$a.directions[this.direction],e=this.x+t.dx,i=this.y+t.dy;return this.world.isOutside(e,i)?!1:!this.world.isWall(e,i)}sitsOnGrain(){return this.world.getGrainCount(this.x,this.y)>0}};r($a,"directions",[{index:0,dx:0,dy:-1},{index:1,dx:1,dy:0},{index:2,dx:0,dy:1},{index:3,dx:-1,dy:0}]);let kc=$a;class Pb{constructor(t,e,i){r(this,"wallSprite");r(this,"grainSprite");r(this,"grainText");r(this,"grainCount",0);r(this,"_isWall",!1);this.world=t,this.x=e,this.y=i;let n=to.get("spritesheet"),s=t.container,a=t.left+(e+.5)*t.cellWidth,l=t.top+(i+.5)*t.cellWidth,h=n.textures["Hamster#1"];this.grainSprite=new Vn(h),this.move(a,l,this.grainSprite),this.grainSprite.anchor.x=.5,this.grainSprite.anchor.y=.5,s.addChild(this.grainSprite);let c=n.textures["Hamster#2"];this.wallSprite=new Vn(c),this.move(a,l,this.wallSprite),this.wallSprite.anchor.x=.5,this.wallSprite.anchor.y=.5,s.addChild(this.wallSprite),this.grainText=new ca({text:"0",style:new eh({fontFamily:"sans-serif",fontSize:24,fontStyle:"normal",fontWeight:"normal",fill:0,stroke:{color:"#ffffff40",width:2},align:"center"})}),this.grainText.anchor.x=.5,this.grainText.anchor.y=.5,this.move(a,l,this.grainText),s.addChild(this.grainText),this.grainSprite.visible=!1,this.wallSprite.visible=!1,this.grainText.visible=!1}move(t,e,i){i.localTransform.translate(t,e),i.setFromMatrix(i.localTransform),i.updateLocalTransform()}setGrainCount(t){this.grainSprite.visible=t>0,this.grainText.visible=t>0,this.grainText.text=""+t,this.grainCount=t}getGrainCount(){return this.grainCount}isWall(){return this._isWall}setWall(t){this._isWall=t,this.wallSprite.visible=t}destroy(){this.wallSprite.destroy(),this.grainSprite.destroy(),this.grainText.destroy()}}const an=class an extends jt{constructor(){super(...arguments);r(this,"left",10);r(this,"top",10);r(this,"sizeX");r(this,"sizeY");r(this,"cellWidth",28);r(this,"backgroundGraphics");r(this,"columns",[]);r(this,"karas",[])}_cj$_constructor_$JavaKaraWorld$int$int(e,i,n,s){this._cj$_constructor_$FilledShape$(e,()=>{this.sizeX=n,this.sizeY=s,this.columns=[];for(let a=0;a=this.sizeX||a.y<0||a.y>=this.sizeY)return!1;for(let l of this.columns[a.x][a.y])if(l.isMushroom())return!0;return!1}isTree(e,i,n,s){let a=this.withDirection(e,i,n,s);if(a.x<0||a.x>=this.sizeX||a.y<0||a.y>=this.sizeY)return!1;for(let l of this.columns[a.x][a.y])if(l.isTree())return!0;return!1}isLeaf(e,i,n,s){let a=this.withDirection(e,i,n,s);if(a.x<0||a.x>=this.sizeX||a.y<0||a.y>=this.sizeY)return!1;for(let l of this.columns[a.x][a.y])if(l.isLeaf())return!0;return!1}withDirection(e,i,n,s){if(i==1)return{x:n,y:s};let a=os.directions[(e+i)%os.directions.length];return n+=a.dx,s+=a.dy,{x:n,y:s}}render(){this.backgroundGraphics!=null&&this.backgroundGraphics.destroy();let e=this.container;this.backgroundGraphics=new He,e.addChild(this.backgroundGraphics),e.setChildIndex(this.backgroundGraphics,0);let i=this.sizeX*this.cellWidth,n=this.sizeY*this.cellWidth;this.hitPolygonInitial=[{x:this.left,y:this.top},{x:this.left,y:this.top+n},{x:this.left+i,y:this.top+n},{x:this.left+i,y:this.top}],this.backgroundGraphics.clear(),this.backgroundGraphics.moveTo(this.left,this.top),this.backgroundGraphics.lineTo(this.left+i,this.top),this.backgroundGraphics.lineTo(this.left+i,this.top+n),this.backgroundGraphics.lineTo(this.left,this.top+n),this.backgroundGraphics.closePath();for(let s=1;s=0&&i.splice(n,1)}addSprite(e,i,n){this.columns[e][i].push(n)}moveSprite(e,i,n){this.removeSprite(n),this.addSprite(e,i,n)}getMushroom(e,i){return this.columns[e][i].find(s=>s.isMushroom())}isOutside(e,i){return e<=0||i<=0||e>=this.sizeX||i>=this.sizeY}put(e,i,n){if(e<0&&(e=-e+this.sizeX-1),i<0&&(i=-i+this.sizeY-1),e=e%this.sizeX,i=i%this.sizeY,this.columns[e][i].push(n),n.isKara())this.karas.push(n);else for(let s of this.karas){let a=this.container,l=a.children.length-1;a.setChildIndex(s.sprite,l)}}removeLeaf(e,i){let s=this.columns[e][i].find(a=>a.isLeaf());this.removeSprite(s),s==null||s.sprite.destroy()}removeTree(e,i){let s=this.columns[e][i].find(a=>a.isTree());this.removeSprite(s),s==null||s.sprite.destroy()}removeMushroom(e,i){let s=this.columns[e][i].find(a=>a.isMushroom());this.removeSprite(s),s==null||s.sprite.destroy()}clearAll(){for(let e of this.columns)for(let i of e)this.emptyCellArray(i)}emptyCellArray(e){let i;for(let n of e)n.isKara()?i=n:n.sprite.destroy();for(;e.length>0;)e.pop();i!=null&&e.push(i)}setOrRemoveLeaf(e,i){this.isLeaf(0,1,e,i)?this.removeLeaf(e,i):new os(this,e,i,3,1)}setOrRemoveTree(e,i){this.isTree(0,1,e,i)?this.removeTree(e,i):new os(this,e,i,3,3)}setOrRemoveMushroom(e,i){this.isMushroom(0,1,e,i)?this.setOrRemoveMushroom(e,i):new os(this,e,i,3,2)}isEmpty(e,i){return this.columns[e][i].length==0}init(e){this.clearAll();let i=e.split(` `);for(let n=0;n=this.sizeY);n++){let s=i[n];for(let a=0;a=this.sizeX);a++)switch(s.charAt(a).toLocaleLowerCase()){case"l":this.setOrRemoveLeaf(a,n);break;case"t":this.setOrRemoveTree(a,n);break;case"m":this.setOrRemoveMushroom(a,n);break}}}destroy(){for(let e of this.columns)for(let i of e){for(let n of i)n.sprite.destroy();for(;i.length>0;)i.pop()}super.destroy()}};r(an,"__javaDeclarations",[{type:"declaration",signature:"class JavaKaraWorld extends FilledShape",comment:o.JavaKaraWorldClassComment},{type:"field",signature:"static int NORTH",constantValue:0},{type:"field",signature:"static int WEST",constantValue:1},{type:"field",signature:"static int SOUTH",constantValue:2},{type:"field",signature:"static int EAST",constantValue:3},{type:"method",signature:"JavaKaraWorld(int sizeX, int sizeY)",java:an.prototype._cj$_constructor_$JavaKaraWorld$int$int,comment:o.JavaKaraWorldConstructorComment},{type:"method",signature:"final int getSizeX()",template:"§1.sizeX",comment:o.JavaKaraWorldGetSizeXComment},{type:"method",signature:"final int getSizeY()",template:"§1.sizeY",comment:o.JavaKaraWorldGetSizeYComment},{type:"method",signature:"final void clearAll()",native:an.prototype.clearAll,comment:o.JavaKaraWorldClearAllComment},{type:"method",signature:"final void setLeaf(int x, int y)",native:an.prototype.setOrRemoveLeaf,comment:o.JavaKaraWorldSetLeafComment},{type:"method",signature:"final void setTree(int x, int y)",native:an.prototype.setOrRemoveTree,comment:o.JavaKaraWorldSetTreeComment},{type:"method",signature:"final void setMushroom(int x, int y)",native:an.prototype.setOrRemoveMushroom,comment:o.JavaKaraWorldSetMushroomComment},{type:"method",signature:"final boolean isEmpty(int x, int y)",native:an.prototype.isEmpty,comment:o.JavaKaraWorldIsEmptyComment},{type:"method",signature:"final void init(string s)",native:an.prototype.init,comment:o.JavaKaraWorldInitComment},{type:"method",signature:"final void scale(double factor)",native:an.prototype.scaleNew,comment:o.shapeScaleComment1}]),r(an,"type");let Cc=an;const Gn=class Gn extends z{constructor(){super(...arguments);r(this,"sprite");r(this,"world")}_cj$_constructor_$Kara$JavaKaraWorld$int$int$int(e,i,n,s,a,l){if(n==null)throw new F("Der Parameter javaKaraWorld darf nicht null sein.");this.world=n,this.sprite=new os(n,s,a,l,0),e.s.push(this),i&&i()}_onLeaf(){return this.world.isLeaf(this.sprite.direction,1,this.sprite.x,this.sprite.y)}_treeFront(){return this.world.isTree(this.sprite.direction,0,this.sprite.x,this.sprite.y)}_treeLeft(){return this.world.isTree(this.sprite.direction,1,this.sprite.x,this.sprite.y)}_treeRight(){return this.world.isTree(this.sprite.direction,-1,this.sprite.x,this.sprite.y)}_mushroomFront(){return this.world.isMushroom(this.sprite.direction,0,this.sprite.x,this.sprite.y)}};r(Gn,"__javaDeclarations",[{type:"declaration",signature:"class Kara extends Object",comment:o.KaraClassComment},{type:"method",signature:"Kara(JavaKaraWorld world, int x, int y, int direction)",java:Gn.prototype._cj$_constructor_$Kara$JavaKaraWorld$int$int$int,comment:o.KaraConstructorComment},{type:"method",signature:"final Position getPosition()",template:"§1.sprite.getPosition()",comment:o.KaraGetPositionComment},{type:"method",signature:"final void move()",template:"§1.sprite.forward()",comment:o.KaraMoveComment},{type:"method",signature:"final JavaKaraWorld getWorld()",template:"§1.world",comment:o.KaraGetWorldComment},{type:"method",signature:"final int getDirection()",template:"§1.sprite.direction",comment:o.KaraGetDirectionComment},{type:"method",signature:"final boolean onLeaf()",native:Gn.prototype._onLeaf,comment:o.KaraOnLeafComment},{type:"method",signature:"final boolean treeFront()",native:Gn.prototype._treeFront,comment:o.KaraTreeFrontComment},{type:"method",signature:"final boolean treeLeft()",native:Gn.prototype._treeLeft,comment:o.KaraTreeLeftComment},{type:"method",signature:"final boolean treeRight()",native:Gn.prototype._treeRight,comment:o.KaraTreeRightComment},{type:"method",signature:"final boolean mushroomFront()",native:Gn.prototype._mushroomFront,comment:o.KaraMushroomFrontComment},{type:"method",signature:"final void turnLeft()",template:"§1.sprite.turn(1);",comment:o.KaraTurnLeftComment},{type:"method",signature:"final void turnRight()",template:"§1.sprite.turn(-1);",comment:o.KaraTurnRightComment},{type:"method",signature:"final void putLeaf()",template:"§1.sprite.putLeaf();",comment:o.KaraPutLeafComment},{type:"method",signature:"final void removeLeaf()",template:"§1.sprite.removeLeaf();",comment:o.KaraRemoveLeafComment}]),r(Gn,"type");let Sc=Gn;const Ea=class Ea{constructor(t,e,i,n,s){r(this,"sprite");this.world=t,this.x=e,this.y=i,this.direction=n,this.imageIndex=s;let l=to.get("spritesheet").textures["Kara#"+s];this.sprite=new Vn(l),this.move(t.left+e*t.cellWidth,t.top+i*t.cellWidth),t.container.addChild(this.sprite),this.direction=3,this.setDirection(n),this.world.put(e,i,this)}forward(){let t=Ea.directions[this.direction],e=(this.x+t.dx+this.world.sizeX)%this.world.sizeX,i=(this.y+t.dy+this.world.sizeY)%this.world.sizeY;if(this.world.isTree(0,1,e,i)){this.throwException(`An der neuen Position (${e}, ${i}) befindet sich ein Baumstumpf. Kara kann nicht dorthin gehen.`);return}if(this.world.isMushroom(0,1,e,i)){let n=e+t.dx,s=i+t.dy;if(n=(n+this.world.sizeX)%this.world.sizeX,s=(s+this.world.sizeY)%this.world.sizeY,this.world.isTree(0,1,n,s)){this.throwException(`An der neuen Position (${e}, ${i}) befindet sich ein Pilz, dahinter ein Baum. Kara kann den Pilz daher nicht schieben.`);return}if(this.world.isMushroom(0,1,n,s)){this.throwException(`An der neuen Position (${e}, ${i}) befindet sich ein Pilz, dahinter noch ein Pilz. Kara kann den Pilz daher nicht schieben.`);return}let a=this.world.getMushroom(e,i);a==null||a.moveToCell(n,s)}this.moveToCell(e,i)}turn(t){this.setDirection((this.direction+t+4)%4)}throwException(t){throw new F(t)}move(t,e){this.sprite.localTransform.translate(t,e),this.sprite.setFromMatrix(this.sprite.localTransform),this.sprite.updateLocalTransform()}moveToCell(t,e){this.move((t-this.x)*this.world.cellWidth,(e-this.y)*this.world.cellWidth),this.x=t,this.y=e,this.world.moveSprite(t,e,this)}setDirection(t){let e=(t-this.direction+4)%4,i=this.world.left+this.x*this.world.cellWidth+14,n=this.world.top+this.y*this.world.cellWidth+14;this.sprite.localTransform.translate(-i,-n),this.sprite.localTransform.rotate(-e*Math.PI/2),this.sprite.localTransform.translate(i,n),this.sprite.setFromMatrix(this.sprite.localTransform),this.sprite.updateLocalTransform(),this.sprite._didLocalTransformChangeId=this.sprite._didChangeId,this.direction=t}isLeaf(){return this.imageIndex==1}isMushroom(){return this.imageIndex==2}isTree(){return this.imageIndex==3}isKara(){return this.imageIndex==0}getPositionFront(){return this.getPositionInDirection(0)}getPositionLeft(){return this.getPositionInDirection(1)}getPositionRight(){return this.getPositionInDirection(-1)}getPositionInDirection(t){let e=Ea.directions[(this.direction+t+4)%4];return{x:(this.x+e.dx+this.world.sizeX)%this.world.sizeX,y:(this.y+e.dy+this.world.sizeY)%this.world.sizeY}}putLeaf(){if(this.world.isLeaf(0,1,this.x,this.y)){this.throwException("Unter Kara liegt schon ein Kleeblatt, es kann an dieser Position nicht noch eines abgelegt werden.");return}new Ea(this.world,this.x,this.y,3,1)}removeLeaf(){if(!this.world.isLeaf(0,1,this.x,this.y)){this.throwException("Unter Kara liegt kein Kleeblatt, daher kann Kara keines aufheben (Methode removeLeaf).");return}this.world.removeLeaf(this.x,this.y)}setPosition(t,e){t<0&&(t=-t-1+this.world.sizeX),e<0&&(e=-e-1+this.world.sizeY),this.moveToCell(t%this.world.sizeX,e%this.world.sizeY)}getPosition(){let t=new Zo;return t.x=this.x,t.y=this.y,t}testDestroyed(t){return this.sprite.destroyed?(this.throwException("Die Methode "+t+" eines schon zerstörten Marienkäfers wurde aufgerufen."),!0):!1}};r(Ea,"directions",[{index:0,dx:0,dy:-1},{index:1,dx:-1,dy:0},{index:2,dx:0,dy:1},{index:3,dx:1,dy:0}]);let os=Ea;const Kn=class Kn extends jt{_cj$_constructor_$Line$(t,e){this._cj$_constructor_$Line$double$double$double$double(t,e,0,0,100,100)}_cj$_constructor_$Line$double$double$double$double(t,e,i,n,s,a){this._cj$_constructor_$FilledShape$(t,()=>{this.hitPolygonInitial=[{x:i,y:n},{x:s,y:a}],this.centerXInitial=(i+s)/2,this.centerYInitial=(n+a)/2,this.borderColor=16777215,this.borderWidth=10,this.render()})}_mj$copy$Shape$(t,e){this._mj$copy$Line$(t,e)}_mj$copy$Line$(t,e){let i=new Kn;i._cj$_constructor_$Line$double$double$double$double(t,e,this.hitPolygonInitial[0].x,this.hitPolygonInitial[0].y,this.hitPolygonInitial[1].x,this.hitPolygonInitial[1].y),i.copyFrom(this),i.render(),t.s.push(i),e&&e()}render(){let t=this.container;this.container?t.clear():(t=new He,this.container=t,this.world.app.stage.addChild(t)),t.moveTo(this.hitPolygonInitial[0].x,this.hitPolygonInitial[0].y),t.lineTo(this.hitPolygonInitial[1].x,this.hitPolygonInitial[1].y),this.borderColor!=null&&t.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5})}_setPoints(t,e,i,n){let s=new ue(t,e);this.getWorldTransform().applyInverse(s,s),this.hitPolygonInitial[0].x=s.x,this.hitPolygonInitial[0].y=s.y;let a=new ue(i,n);this.getWorldTransform().applyInverse(a,a),this.hitPolygonInitial[1].x=a.x,this.hitPolygonInitial[1].y=a.y,this.render()}_mj$toString$String$(t,e){t.s.push(new G(this._debugOutput())),e&&e()}_debugOutput(){return this.isDestroyed?"":(this.transformHitPolygon(),`{x1: ${this.hitPolygonTransformed[0].x}, y1: ${this.hitPolygonTransformed[0].y}, x2: ${this.hitPolygonTransformed[1].x}, y2: ${this.hitPolygonTransformed[1].y}}`)}};r(Kn,"__javaDeclarations",[{type:"declaration",signature:"class Line extends FilledShape",comment:o.LineClassComment},{type:"method",signature:"Line()",java:Kn.prototype._cj$_constructor_$Line$,comment:o.LineEmptyConstructorComment},{type:"method",signature:"Line(double x1, double y1, double x2, double y2)",java:Kn.prototype._cj$_constructor_$Line$double$double$double$double,comment:o.LineConstructorComment1},{type:"method",signature:"final void setPoints(double x1, double y1, double x2, double y2)",native:Kn.prototype._setPoints,comment:o.LineSetPointsComment},{type:"method",signature:"final Line copy()",java:Kn.prototype._mj$copy$Line$,comment:o.LineCopyComment},{type:"method",signature:"String toString()",java:Kn.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Kn,"type");let xc=Kn;const vr=class vr extends mi{_mj$onMouseUp$void$double$double$int(t,e,i,n,s){}_mj$onMouseDown$void$double$double$int(t,e,i,n,s){}_mj$onMouseMove$void$double$double(t,e,i,n){}_mj$onMouseEnter$void$double$double(t,e,i,n){}_mj$onMouseLeave$void$double$double(t,e,i,n){}};r(vr,"__javaDeclarations",[{type:"declaration",signature:"interface MouseListener",comment:o.mouseListenerInterfaceComment},{type:"method",signature:"void onMouseUp(double x, double y, int button)",java:vr.prototype._mj$onMouseUp$void$double$double$int,comment:o.mouseListenerOnMouseUpComment},{type:"method",signature:"void onMouseDown(double x, double y, int button)",java:vr.prototype._mj$onMouseDown$void$double$double$int,comment:o.mouseListenerOnMouseDownComment},{type:"method",signature:"void onMouseMove(double x, double y)",java:vr.prototype._mj$onMouseMove$void$double$double,comment:o.mouseListenerOnMouseMoveComment},{type:"method",signature:"void onMouseEnter(double x, double y)",java:vr.prototype._mj$onMouseEnter$void$double$double,comment:o.mouseListenerOnMouseEnterComment},{type:"method",signature:"void onMouseLeave(double x, double y)",java:vr.prototype._mj$onMouseLeave$void$double$double,comment:o.mouseListenerOnMouseLeaveComment}]),r(vr,"type");let Tc=vr;const vt=class vt extends jt{constructor(){super(...arguments);r(this,"isClosed",!1);r(this,"closeAndFill",!1)}_cj$_constructor_$Polygon$Shape(e,i,n){let s=[];s=this.extractPoints(n,s),n instanceof vs&&(s=ad.makeHull(s));let a=[];for(let l of s)a.push(l.x),a.push(l.y);a.length>0&&(a=a.concat(a.slice(0,2))),this._cj$_constructor_$Polygon$boolean$double_I(e,i,!1,a)}extractPoints(e,i){if(e instanceof vs){let n=[];for(let s of e.shapes)n=this.extractPoints(s,n);return i.concat(n)}else return e.hitPolygonDirty&&e.transformHitPolygon(),i.concat(e.hitPolygonTransformed.map(function(n){return{x:n.x,y:n.y}}))}_cj$_constructor_$Polygon$(e,i){let n=[];for(let s=0;s<6;s++){let a=Math.PI/3*s,l=100+50*Math.cos(a),h=100-50*Math.sin(a);n.push(l,h)}this._cj$_constructor_$Polygon$boolean$double_I(e,i,!0,n)}_cj$_constructor_$Polygon$boolean$double_I(e,i,n,s,a=!1){this._cj$_constructor_$FilledShape$(e,()=>{this.closeAndFill=n,this.isClosed=a;let l=0,h=0;if(this.hitPolygonInitial=[],s){for(let c=0;c1&&(this.centerXInitial=l/this.hitPolygonInitial.length,this.centerYInitial=h/this.hitPolygonInitial.length)}n||(this.borderColor=255),this.render(),i&&i()})}_mj$copy$Shape$(e,i){this._mj$copy$Polygon$(e,i)}_mj$copy$Polygon$(e,i){let n=new vt;n._cj$_constructor_$Polygon$boolean$double_I(e,i,this.closeAndFill,[],this.isClosed),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){let e=this.container;if(this.container?e.clear():(e=new He,this.container=e,this.world.app.stage.addChild(e)),this.hitPolygonInitial.length>0){e.moveTo(this.hitPolygonInitial[0].x,this.hitPolygonInitial[0].y);for(let i=1;i":(this.transformHitPolygon(),`{points: [${this.hitPolygonTransformed.map(n=>"("+n.x+", "+n.y+")").join(", ")}] }`)}_addPoint(e,i,n=!0){let s=new ue(e,i);this.getWorldTransform().applyInverse(s,s),this.hitPolygonInitial.push({x:s.x,y:s.y}),this.hitPolygonDirty=!0,n&&this.render()}_insertPoint(e,i,n){n<0&&(n=0),n>this.hitPolygonInitial.length&&(n=this.hitPolygonInitial.length);let s=new ue(e,i);this.getWorldTransform().applyInverse(s,s),this.hitPolygonInitial.splice(n,0,{x:s.x,y:s.y}),this.hitPolygonDirty=!0,this.render()}_movePointTo(e,i,n){if(n<0&&(n=0),n>this.hitPolygonInitial.length&&(n=this.hitPolygonInitial.length),this.hitPolygonInitial.length==0)return;let s=new ue(e,i);this.getWorldTransform().applyInverse(s,s),this.hitPolygonInitial[n].x=s.x,this.hitPolygonInitial[n].y=s.y,this.hitPolygonDirty=!0,this.render()}_setPoint(e,i,n){if(n==0||n==1){let s=new ue(e,i);this.getWorldTransform().applyInverse(s,s),this.hitPolygonInitial[n]=s,this.hitPolygonDirty=!0,this.render()}}_setPoints(e){this.hitPolygonInitial=[];let i=this.getWorldTransform();for(let n=0;n=e.length-2)}_setAllPointsUntransformed(e){this.hitPolygonInitial=[];for(let i=0;i{});r(this,"canvasCreated",!1)}_mj$setup$void$(e,i){}_mj$settings$void$(e,i){}_mj$preload$void$(e,i){}_mj$draw$void$(e,i){}_mj$mousePressed$void$(e,i){}_mj$mouseReleased$void$(e,i){}_mj$mouseClicked$void$(e,i){}_mj$mouseDragged$void$(e,i){}_mj$mouseEntered$void$(e,i){}_mj$mouseExited$void$(e,i){}_mj$mouseMoved$void$(e,i){}_mj$keyPressed$void$(e,i){}_mj$keyReleased$void$(e,i){}_mj$main$void$(e,i){}_cj$_constructor_$PApplet$(e,i){var s,a;this._constructor(),e.s.push(this);let n=e.scheduler.interpreter;(s=n.graphicsManager)==null||s.registerGraphicSystem(this),n.isExternalTimer=!0,this.graphicsDiv=(a=n.graphicsManager)==null?void 0:a.graphicsDiv,this.graphicsDiv.style.overflow="hidden",this.setupGraphicsDiv(this.graphicsDiv,n),this.setupProcessing(this.containerInner,n),n.eventManager.once("stop",()=>{let l=()=>{};this.p5o.draw=l,this.p5o.setup=l,this.p5o.preload=l,this.p5o.mousePressed=l,this.p5o.mouseReleased=l,this.p5o.mouseClicked=l,this.p5o.mouseDragged=l,this.p5o.keyPressed=l,this.p5o.keyReleased=l,n.isExternalTimer=!1}),this.p5o.POINTS,n.eventManager.once("resetRuntime",()=>{this.p5o.remove(),n.deleteObject("PAppletClass"),this.canvasCreated=!1,this.graphicsDiv&&(this.graphicsDiv.innerHTML="")}),n.storeObject("PAppletClass",this)}get mouseX(){return this.p5o.mouseX}set mouseX(e){this.p5o.mouseX=e}get mouseY(){return this.p5o.mouseY}set mouseY(e){this.p5o.mouseY=e}get pMouseX(){return this.p5o.pmouseX}set pMouseX(e){this.p5o.pmouseX=e}get pMouseY(){return this.p5o.pmouseY}set pMouseY(e){this.p5o.pmouseY=e}get mouseButton(){return this.p5o.mouseButton}set mouseButton(e){this.p5o.mouseButton=e}get key(){return this.p5o.key}set key(e){this.p5o.key=e}setupGraphicsDiv(e,i){this.containerOuter=R.makeDiv(void 0,"jo_pAppletOuter"),this.onSizeChanged=()=>{var l;let n=e.parentElement.parentElement.getBoundingClientRect(),s=n.width,a=n.height;this.height/this.width>a/s?(e.style.width=this.width/this.height*a+"px",e.style.height=a+"px"):(e.style.width=s+"px",e.style.height=this.height/this.width*s+"px"),(l=i.graphicsManager)==null||l.resizeGraphicsDivHeight()},this.resizeObserver=new ResizeObserver(()=>{this.onSizeChanged()}),this.resizeObserver.observe(this.graphicsDiv.parentElement.parentElement),this.onSizeChanged(),this.containerInner=R.makeDiv(this.containerOuter,"jo_pAppletInner"),e.innerHTML="",e.append(this.containerOuter),e.oncontextmenu=function(n){n.preventDefault()}}_createCanvas(e,i,n){n||(n=this.renderer),this.renderer=n,this.width=e,this.height=i,this.onSizeChanged(),this.p5o.createCanvas(this.width,this.height);let s=this.containerInner.getElementsByTagName("canvas");s.length>0&&(s[0].style.width="",s[0].style.height=""),this.canvasCreated=!0}setupProcessing(e,i){let n=this;this.canvasCreated=!1;let s=!0,a=h=>{h.disableFriendlyErrors=!0,h.setup=function(){n.renderer=h.P2D,n.p5o=h;let c=()=>{s=!1,n.canvasCreated||n._createCanvas(n.width,n.height)},u=2;n.runMethod(n._mj$setup$void$,()=>{--u==0&&c()},i),n.runMethod(n._mj$settings$void$,()=>{--u==0&&c()},i)},h.preload=function(){n.runMethod(n._mj$preload$void$,void 0,i)},h.draw=function(){i.scheduler.state==Q.running&&!n.loopStopped&&(s||(s=!0,n.runMethod(n._mj$draw$void$,()=>{s=!1},i))),i.timerFunction(1e3/60)},h.mousePressed=function(){n.runMethod(n._mj$mousePressed$void$,void 0,i)},h.mouseReleased=function(){n.runMethod(n._mj$mouseReleased$void$,void 0,i)},h.mouseClicked=function(){n.runMethod(n._mj$mouseClicked$void$,void 0,i)},h.mouseDragged=function(){n.runMethod(n._mj$mouseDragged$void$,void 0,i)},h.mouseMoved=function(){n.runMethod(n._mj$mouseMoved$void$,void 0,i)},h.keyPressed=function(){n.runMethod(n._mj$keyPressed$void$,void 0,i)},h.keyReleased=function(){n.runMethod(n._mj$keyReleased$void$,void 0,i)}};new df(a,e);let l=this.containerInner.getElementsByTagName("canvas");l.length>0&&(l[0].style.width="",l[0].style.height="")}runMethod(e,i,n){if(e==Ze.prototype[e.name]){i&&i();return}let s=n.scheduler.createThread("processing: "+e.name);e.call(this,s,i),s.startIfNotEmptyOrDestroy()}getIdentifier(){return"Processing"}};r(Ze,"__javaDeclarations",[{type:"declaration",signature:"class PApplet extends Object",comment:o.PAppletClassComment},{type:"field",signature:"int mouseX",template:"§1.p5o.mouseX",comment:o.PAppletMouseXComment},{type:"field",signature:"int mouseY",template:"§1.p5o.mouseY",comment:o.PAppletMouseYComment},{type:"field",signature:"int pMouseX",template:"§1.p5o.pMouseX",comment:o.PAppletPMouseXComment},{type:"field",signature:"int pMouseY",template:"§1.p5o.pMouseY",comment:o.PAppletPMouseYComment},{type:"field",signature:"int mouseButton",template:"§1.p5o.mouseButton",comment:o.PAppletMouseButtonComment},{type:"field",signature:"string key",template:"§1.p5o.key",comment:o.PAppletKeyComment},{hiddenWhenDebugging:!0,type:"field",signature:"int LEFT",template:"§1.p5o.LEFT",comment:o.PAppletLEFTComment},{hiddenWhenDebugging:!0,type:"field",signature:"int CENTER",template:"§1.p5o.CENTER",comment:o.PAppletCENTERComment},{hiddenWhenDebugging:!0,type:"field",signature:"int RIGHT",template:"§1.p5o.RIGHT",comment:o.PAppletRIGHTComment},{hiddenWhenDebugging:!0,type:"field",signature:"int TOP",template:"§1.p5o.TOP",comment:o.PAppletTOPComment},{hiddenWhenDebugging:!0,type:"field",signature:"int BASELINE",template:"§1.p5o.BASELINE",comment:o.PAppletBASELINEComment},{hiddenWhenDebugging:!0,type:"field",signature:"int BOTTOM",template:"§1.p5o.BOTTOM",comment:o.PAppletBOTTOMComment},{hiddenWhenDebugging:!0,type:"field",signature:"int CORNER",template:"§1.p5o.CORNER",comment:o.PAppletCORNERComment},{hiddenWhenDebugging:!0,type:"field",signature:"int CORNERS",template:"§1.p5o.CORNERS",comment:o.PAppletCORNERSComment},{hiddenWhenDebugging:!0,type:"field",signature:"int RADIUS",template:"§1.p5o.RADIUS",comment:o.PAppletRADIUSComment},{hiddenWhenDebugging:!0,type:"field",signature:"int POINTS",template:"§1.p5o.POINTS",comment:o.PAppletPOINTSComment},{hiddenWhenDebugging:!0,type:"field",signature:"int LINES",template:"§1.p5o.LINES",comment:o.PAppletLINESComment},{hiddenWhenDebugging:!0,type:"field",signature:"int TRIANGLES",template:"§1.p5o.TRIANGLES",comment:o.PAppletTRIANGLESComment},{hiddenWhenDebugging:!0,type:"field",signature:"int TRIANGLE_STRIP",template:"§1.p5o.TRIANGLE_STRIP",comment:o.PAppletTRIANGLE_STRIPComment},{hiddenWhenDebugging:!0,type:"field",signature:"int TRIANGLE_FAN",template:"§1.p5o.TRIANGLE_FAN",comment:o.PAppletTRIANGLE_FANComment},{hiddenWhenDebugging:!0,type:"field",signature:"string QUADS",template:"§1.p5o.QUADS",comment:o.PAppletQUADSComment},{hiddenWhenDebugging:!0,type:"field",signature:"string QUAD_STRIP",template:"§1.p5o.QUAD_STRIP",comment:o.PAppletQUAD_STRIPComment},{hiddenWhenDebugging:!0,type:"field",signature:"string TESS",template:"§1.p5o.TESS",comment:o.PAppletTESSComment},{hiddenWhenDebugging:!0,type:"field",signature:"string CLOSE",template:"§1.p5o.CLOSE",comment:o.PAppletCLOSEComment},{hiddenWhenDebugging:!0,type:"field",signature:"string DEGREES",template:"§1.p5o.DEGREES",comment:o.PAppletDEGREESComment},{hiddenWhenDebugging:!0,type:"field",signature:"string RADIANS",template:"§1.p5o.RADIANS",comment:o.PAppletRADIANSComment},{hiddenWhenDebugging:!0,type:"field",signature:"string WEBGL",template:"§1.p5o.WEBGL",comment:o.PAppletWEBGLComment},{hiddenWhenDebugging:!0,type:"field",signature:"string P2D",template:"§1.p5o.P2D",comment:o.PAppletP2DComment},{hiddenWhenDebugging:!0,type:"field",signature:"string RGB",template:"§1.p5o.RGB",comment:o.PAppletRGBComment},{hiddenWhenDebugging:!0,type:"field",signature:"string HSL",template:"§1.p5o.HSL",comment:o.PAppletHSLComment},{hiddenWhenDebugging:!0,type:"field",signature:"string HSB",template:"§1.p5o.HSB",comment:o.PAppletHSBComment},{hiddenWhenDebugging:!0,type:"field",signature:"string PI",template:"§1.p5o.PI",comment:"PI = 3.1415..."},{hiddenWhenDebugging:!0,type:"field",signature:"string QUARTER_PI",template:"§1.p5o.QUARTER_PI",comment:"PI/4"},{hiddenWhenDebugging:!0,type:"field",signature:"string TWO_PI",template:"§1.p5o.TWO_PI",comment:"2*PI"},{hiddenWhenDebugging:!0,type:"field",signature:"string TAU",template:"§1.p5o.TAU",comment:"2*PI"},{type:"method",signature:"PApplet()",java:Ze.prototype._cj$_constructor_$PApplet$,comment:o.PAppletConstructorComment},{type:"method",signature:"void main()",java:Ze.prototype._mj$main$void$,comment:o.PAppletMainComment},{type:"method",signature:"void loop()",template:"§1.loopStopped = false",comment:o.PAppletLoopComment},{type:"method",signature:"void noLoop()",template:"§1.loopStopped = true",comment:o.PAppletNoLoopComment},{type:"method",signature:"void size(int width, int height)",native:Ze.prototype._createCanvas,comment:o.PAppletCreateCanvasComment},{type:"method",signature:"void createCanvas(int width, int height)",native:Ze.prototype._createCanvas,comment:o.PAppletCreateCanvasComment},{type:"method",signature:"void createCanvas(int width, int height, string renderer)",native:Ze.prototype._createCanvas,comment:o.PAppletCreateCanvasComment},{type:"method",signature:"void setup()",java:Ze.prototype._mj$setup$void$,comment:o.PAppletSetupComment},{type:"method",signature:"void settings()",java:Ze.prototype._mj$settings$void$,comment:o.PAppletSettingsComment},{type:"method",signature:"void preload()",java:Ze.prototype._mj$preload$void$,comment:o.PAppletPreloadComment},{type:"method",signature:"void draw()",java:Ze.prototype._mj$draw$void$,comment:o.PAppletDrawComment},{type:"method",signature:"void mousePressed()",java:Ze.prototype._mj$mousePressed$void$,comment:o.PAppletMousePressedComment},{type:"method",signature:"void mouseReleased()",java:Ze.prototype._mj$mouseReleased$void$,comment:o.PAppletMouseReleasedComment},{type:"method",signature:"void mouseClicked()",java:Ze.prototype._mj$mouseClicked$void$,comment:o.PAppletMouseClickedComment},{type:"method",signature:"void mouseDragged()",java:Ze.prototype._mj$mouseDragged$void$,comment:o.PAppletMouseDraggedComment},{type:"method",signature:"void mouseEntered()",java:Ze.prototype._mj$mouseEntered$void$,comment:o.PAppletMouseEnteredComment},{type:"method",signature:"void mouseExited()",java:Ze.prototype._mj$mouseExited$void$,comment:o.PAppletMouseExitedComment},{type:"method",signature:"void mouseMoved()",java:Ze.prototype._mj$mouseMoved$void$,comment:o.PAppletMouseMovedComment},{type:"method",signature:"void keyPressed()",java:Ze.prototype._mj$keyPressed$void$,comment:o.PAppletKeyPressedComment},{type:"method",signature:"void keyReleased()",java:Ze.prototype._mj$keyReleased$void$,comment:o.PAppletKeyReleasedComment},{type:"method",signature:"final void clear()",template:"§1.p5o.clear()",comment:o.PAppletClear0Comment},{type:"method",signature:"final void background(double rgb)",template:"§1.p5o.background(§2)",comment:o.PAppletBackground1Comment},{type:"method",signature:"final string background(string colorAsString)",template:"§1.p5o.background(§2)",comment:o.PAppletBackground2Comment},{type:"method",signature:"final void background(double v1, double v2, double v3)",template:"§1.p5o.background(§2, §3, §4)",comment:o.PAppletBackground3Comment},{type:"method",signature:"final void fill(int rgb)",template:"§1.p5o.fill(§2)",comment:o.PAppletFill1Comment},{type:"method",signature:"final void fill(string rgb)",template:"§1.p5o.fill(§2)",comment:o.PAppletFill1aComment},{type:"method",signature:"final void fill(int rgb, double alpha)",template:"§1.p5o.fill(§2, §3)",comment:o.PAppletFill2Comment},{type:"method",signature:"final void fill(double gray)",template:"§1.p5o.fill(§2)",comment:o.PAppletFill3Comment},{type:"method",signature:"final void fill(double v1, double v2, double v3)",template:"§1.p5o.fill(§2, §3, §4)",comment:o.PAppletFill4Comment},{type:"method",signature:"final void fill(double v1, double v2, double v3, double alpha)",template:"§1.p5o.fill(§2, §3, §4, §5)",comment:o.PAppletFill5Comment},{type:"method",signature:"final void noFill()",template:"§1.p5o.noFill()",comment:o.PAppletNoFill0Comment},{type:"method",signature:"final void stroke(int rgb)",template:"§1.p5o.stroke(§2)",comment:o.PAppletStroke1Comment},{type:"method",signature:"final void stroke(string rgb)",template:"§1.p5o.stroke(§2)",comment:o.PAppletStroke1aComment},{type:"method",signature:"final void stroke(int rgb, double alpha)",template:"§1.p5o.stroke(§2, §3)",comment:o.PAppletStroke2Comment},{type:"method",signature:"final void stroke(double gray)",template:"§1.p5o.stroke(§2)",comment:o.PAppletStroke3Comment},{type:"method",signature:"final void stroke(double v1, double v2, double v3)",template:"§1.p5o.stroke(§2, §3, §4)",comment:o.PAppletStroke4Comment},{type:"method",signature:"final void stroke(double v1, double v2, double v3, double alpha)",template:"§1.p5o.stroke(§2, §3, §4, §5)",comment:o.PAppletStroke5Comment},{type:"method",signature:"final void strokeWeight(double weight)",template:"§1.p5o.strokeWeight(§2)",comment:o.PAppletStrokeWeight1Comment},{type:"method",signature:"final void noStroke()",template:"§1.p5o.noStroke()",comment:o.PAppletNoStroke0Comment},{type:"method",signature:"final string color(double gray)",template:"§1.p5o.color(§2)",comment:o.PAppletColor1Comment},{type:"method",signature:"final string color(string colorAsString)",template:"§1.p5o.color(§2)",comment:o.PAppletColor2Comment},{type:"method",signature:"final string color(double gray, double alpha)",template:"§1.p5o.color(§2, §3)",comment:o.PAppletColor3Comment},{type:"method",signature:"final string color(double v1, double v2, double v3)",template:"§1.p5o.color(§2, §3, §4)",comment:o.PAppletColor4Comment},{type:"method",signature:"final string color(double v1, double v2, double v3, double alpha)",template:"§1.p5o.color(§2, §3, §4, §5)",comment:o.PAppletColor5Comment},{type:"method",signature:"final string lerpColor(string colorA, string colorB, double t)",template:"§1.p5o.lerpColor(§2, §3, §4)",comment:o.PAppletLerpColor3Comment},{type:"method",signature:"final void colorMode(string mode)",template:"§1.p5o.colorMode(§2)",comment:o.PAppletColorMode1Comment},{type:"method",signature:"final void colorMode(string mode, double max)",template:"§1.p5o.colorMode(§2, §3)",comment:o.PAppletColorMode2Comment},{type:"method",signature:"final void colorMode(string mode, double max1, double max2, double max3)",template:"§1.p5o.colorMode(§2, §3, §4, §5)",comment:o.PAppletColorMode4Comment},{type:"method",signature:"final void colorMode(string mode, double max1, double max2, double max3, double maxAlpha)",template:"§1.p5o.colorMode(§2, §3, §4, §5, §6)",comment:o.PAppletColorMode5Comment},{type:"method",signature:"final void rectMode(string mode)",template:"§1.p5o.rectMode(§2)",comment:o.PAppletRectMode1Comment},{type:"method",signature:"final void rect(double left, double top, double width, double height)",template:"§1.p5o.rect(§2, §3, §4, §5)",comment:o.PAppletRect1Comment},{type:"method",signature:"final void rect(double left, double top, double width, double height, double radius)",template:"§1.p5o.rect(§2, §3, §4, §5, §6)",comment:o.PAppletRect1aComment},{type:"method",signature:"final void rect(double left, double top, double width, double height, double radius1, double radius2, double radius3, double radius4)",template:"§1.p5o.rect(§2, §3, §4, §5, §6, §7, §8, §9)",comment:o.PAppletRect1bComment},{type:"method",signature:"final void square(double left, double top, double width)",template:"§1.p5o.square(§2, §3, §4)",comment:o.PAppletSquare1Comment},{type:"method",signature:"final void square(double left, double top, double width, double radius)",template:"§1.p5o.square(§2, §3, §4, §5)",comment:o.PAppletSquare1aComment},{type:"method",signature:"final void square(double left, double top, double width, double radius1, double radius2, double radius3, double radius4)",template:"§1.p5o.square(§2, §3, §4, §5, §6, §7, §8)",comment:o.PAppletSquare1bComment},{type:"method",signature:"final void rect(double left, double top, double width, double height, double radius)",template:"§1.p5o.rect(§2, §3, §4, §5, §6)",comment:o.PAppletRect1cComment},{type:"method",signature:"final void ellipse(double left, double top, double width, double height)",template:"§1.p5o.ellipse(§2, §3, §4, §5)",comment:o.PAppletEllipse1Comment},{type:"method",signature:"final void circle(double x, double y, double extent)",template:"§1.p5o.circle(§2, §3, §4)",comment:o.PAppletCircle1Comment},{type:"method",signature:"final void ellipseMode(string mode)",template:"§1.p5o.ellipseMode(§2)",comment:o.PAppletEllipseMode1Comment},{type:"method",signature:"final void line(double x1, double y1, double x2, double y2)",template:"§1.p5o.line(§2, §3, §4, §5)",comment:o.PAppletLine1Comment},{type:"method",signature:"final void line(double x1, double y1, double z1, double x2, double y2, double z2)",template:"§1.p5o.line(§2, §3, §4, §5, §6, §7)",comment:o.PAppletLine1aComment},{type:"method",signature:"final void triangle(double x1, double y1, double x2, double y2, double x3, double y3)",template:"§1.p5o.triangle(§2, §3, §4, §5, §6, §7)",comment:o.PAppletTriangle1Comment},{type:"method",signature:"final void quad(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)",template:"§1.p5o.quad(§2, §3, §4, §5, §6, §7, §8, §9)",comment:o.PAppletQuad1Comment},{type:"method",signature:"final void bezier(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)",template:"§1.p5o.bezier(§2, §3, §4, §5, §6, §7, §8, §9)",comment:o.PAppletBezier1Comment},{type:"method",signature:"final void curve(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)",template:"§1.p5o.curve(§2, §3, §4, §5, §6, §7, §8, §9)",comment:o.PAppletCurve1Comment},{type:"method",signature:"final float curvePoint(double a, double b, double c, double d, double t)",template:"§1.p5o.curvePoint(§2, §3, §4, §5, §6)",comment:o.PAppletCurvePoint1Comment},{type:"method",signature:"final float curveTangent(double a, double b, double c, double d, double t)",template:"§1.p5o.curveTangent(§2, §3, §4, §5, §6)",comment:o.PAppletCurveTangent1Comment},{type:"method",signature:"final float bezierPoint(double x1, double x2, double x3, double x4, double t)",template:"§1.p5o.bezierPoint(§2, §3, §4, §5, §6)",comment:o.PAppletBezierPoint1Comment},{type:"method",signature:"final float bezierTangent(double x1, double x2, double x3, double x4, double t)",template:"§1.p5o.bezierTangent(§2, §3, §4, §5, §6)",comment:o.PAppletBezierTangent1Comment},{type:"method",signature:"final void beginShape()",template:"§1.p5o.beginShape()",comment:o.PAppletBeginShape0Comment},{type:"method",signature:"final void endShape()",template:"§1.p5o.endShape()",comment:o.PAppletEndShape0Comment},{type:"method",signature:"final void beginShape(string kind)",template:"§1.p5o.beginShape(§2)",comment:o.PAppletBeginShape1Comment},{type:"method",signature:"final void endShape(string kind)",template:"§1.p5o.endShape(§2)",comment:o.PAppletEndShape1Comment},{type:"method",signature:"final void vertex(double x, double y)",template:"§1.p5o.vertex(§2, §3)",comment:o.PAppletVertex1Comment},{type:"method",signature:"final void point(double x, double y)",template:"§1.p5o.point(§2, §3)",comment:o.PAppletPoint1Comment},{type:"method",signature:"final void set(double x, double y, string color)",template:"§1.p5o.set(§2, §3, §4)",comment:o.PAppletSet3Comment},{type:"method",signature:"final void vertex(double x, double y, double z)",template:"§1.p5o.vertex(§2, §3, §4)",comment:o.PAppletVertex1aComment},{type:"method",signature:"final void point(double x, double y, double z)",template:"§1.p5o.point(§2, §3, §4)",comment:o.PAppletPoint1aComment},{type:"method",signature:"final void curveVertex(double x, double y)",template:"§1.p5o.curveVertex(§2, §3)",comment:o.PAppletCurveVertex1Comment},{type:"method",signature:"final void curvevertex(double x, double y, double z)",template:"§1.p5o.curvevertex(§2, §3, §4)",comment:o.PAppletCurvevertex1Comment},{type:"method",signature:"final void box(double size)",template:"§1.p5o.box(§2)",comment:o.PAppletBox1Comment},{type:"method",signature:"final void box(double sizeX, double sizeY, double sizeZ)",template:"§1.p5o.box(§2, §3, §4)",comment:o.PAppletBox1aComment},{type:"method",signature:"final void resetMatrix()",template:"§1.p5o.resetMatrix()",comment:o.PAppletResetMatrix0Comment},{type:"method",signature:"final void push()",template:"§1.p5o.push()",comment:o.PAppletPush0Comment},{type:"method",signature:"final void pop()",template:"§1.p5o.pop()",comment:o.PAppletPop0Comment},{type:"method",signature:"final void scale(double factor)",template:"§1.p5o.scale(§2)",comment:o.PAppletScale1Comment},{type:"method",signature:"final void scale(double factorX, double factorY)",template:"§1.p5o.scale(§2, §3)",comment:o.PAppletScale1aComment},{type:"method",signature:"final void scale(double factorX, double factorY, double factorZ)",template:"§1.p5o.scale(§2, §3, §4)",comment:o.PAppletScale1bComment},{type:"method",signature:"final void translate(double x, double y)",template:"§1.p5o.translate(§2, §3)",comment:o.PAppletTranslate1Comment},{type:"method",signature:"final void translate(double x, double y, double z)",template:"§1.p5o.translate(§2, §3, §4)",comment:o.PAppletTranslate1aComment},{type:"method",signature:"final void rotate(double angle)",template:"§1.p5o.rotate(§2)",comment:o.PAppletRotate1Comment},{type:"method",signature:"final void rotateX(double angle)",template:"§1.p5o.rotateX(§2)",comment:o.PAppletRotateX1Comment},{type:"method",signature:"final void rotateY(double angle)",template:"§1.p5o.rotateY(§2)",comment:o.PAppletRotateY1Comment},{type:"method",signature:"final void shearX(double angle)",template:"§1.p5o.shearX(§2)",comment:o.PAppletShearX1Comment},{type:"method",signature:"final void shearY(double angle)",template:"§1.p5o.shearY(§2)",comment:o.PAppletShearY1Comment},{type:"method",signature:"final void rotateZ(double angle)",template:"§1.p5o.rotateZ(§2)",comment:o.PAppletRotateZ1Comment},{type:"method",signature:"final void angleMode(string mode)",template:"§1.p5o.angleMode(§2)",comment:o.PAppletAngleMode1Comment},{type:"method",signature:"final void textSize(double size)",template:"§1.p5o.textSize(§2)",comment:o.PAppletTextSize1Comment},{type:"method",signature:"final void textAlign(int alignX)",template:"§1.p5o.textAlign(§2)",comment:o.PAppletTextAlign1Comment},{type:"method",signature:"final void textAlign(int alignX, int alignY)",template:"§1.p5o.textAlign(§2, §3)",comment:o.PAppletTextAlign1aComment},{type:"method",signature:"final void text(string text, double x, double y)",template:"§1.p5o.text(§2, §3, §4)",comment:o.PAppletText3Comment},{type:"method",signature:"final void text(string text, double x, double y, double x2, double y2)",template:"§1.p5o.text(§2, §3, §4, §5, §6)",comment:o.PAppletText5Comment},{type:"method",signature:"final float random(double low, double high)",template:"§1.p5o.random(§2, §3)",comment:o.PAppletRandom1Comment},{type:"method",signature:"final float random(double high)",template:"§1.p5o.random(§2)",comment:o.PAppletRandom1aComment},{type:"method",signature:"final float sqrt(double n)",template:"§1.p5o.sqrt(§2)",comment:o.PAppletSqrt1Comment},{type:"method",signature:"final float pow(double basis, double exponent)",template:"§1.p5o.pow(§2, §3)",comment:o.PAppletPow1Comment},{type:"method",signature:"final float max(double a, double b)",template:"§1.p5o.max(§2, §3)",comment:o.PAppletMax1Comment},{type:"method",signature:"final float min(double a, double b)",template:"§1.p5o.min(§2, §3)",comment:o.PAppletMin1Comment},{type:"method",signature:"final float abs(double n)",template:"§1.p5o.abs(§2)",comment:o.PAppletAbs1Comment},{type:"method",signature:"final float sin(double n)",template:"§1.p5o.sin(§2)",comment:o.PAppletSin1Comment},{type:"method",signature:"final float cos(double n)",template:"§1.p5o.cos(§2)",comment:o.PAppletCos1Comment},{type:"method",signature:"final float tan(double n)",template:"§1.p5o.tan(§2)",comment:o.PAppletTan1Comment},{type:"method",signature:"final float asin(double n)",template:"§1.p5o.asin(§2)",comment:o.PAppletAsin1Comment},{type:"method",signature:"final float acos(double n)",template:"§1.p5o.acos(§2)",comment:o.PAppletAcos1Comment},{type:"method",signature:"final float radians(double angle)",template:"§1.p5o.radians(§2)",comment:o.PAppletRadians1Comment},{type:"method",signature:"final float degrees(double angle)",template:"§1.p5o.degrees(§2)",comment:o.PAppletDegrees1Comment},{type:"method",signature:"final float atan(double n)",template:"§1.p5o.atan(§2)",comment:o.PAppletAtan1Comment},{type:"method",signature:"final float atan2(double x, double y)",template:"§1.p5o.atan2(§2, §3)",comment:o.PAppletAtan21Comment},{type:"method",signature:"final float sqrt(double x, double y)",template:"§1.p5o.sqrt(§2, §3)",comment:o.PAppletSqrt1aComment},{type:"method",signature:"final float sq(double x, double y)",template:"§1.p5o.sq(§2, §3)",comment:o.PAppletSq1Comment},{type:"method",signature:"final int abs(int n)",template:"§1.p5o.abs(§2)",comment:o.PAppletAbs1aComment},{type:"method",signature:"final int round(double n)",template:"§1.p5o.round(§2)",comment:o.PAppletRound1Comment},{type:"method",signature:"final int ceil(double n)",template:"§1.p5o.ceil(§2)",comment:o.PAppletCeil1Comment},{type:"method",signature:"final int floor(double n)",template:"§1.p5o.floor(§2)",comment:o.PAppletFloor1Comment},{type:"method",signature:"final float dist(double x1, double y1, double x2, double y2)",template:"§1.p5o.dist(§2, §3, §4, §5)",comment:o.PAppletDist1Comment},{type:"method",signature:"final float lerp(double a, double b, double t)",template:"§1.p5o.lerp(§2, §3, §4)",comment:o.PAppletLerp1Comment},{type:"method",signature:"final float constrain(double value, double min, double max)",template:"§1.p5o.constrain(§2, §3, §4)",comment:o.PAppletConstrain1Comment},{type:"method",signature:"final int year()",template:"§1.p5o.year()",comment:o.PAppletYear0Comment},{type:"method",signature:"final int month()",template:"§1.p5o.month()",comment:o.PAppletMonth0Comment},{type:"method",signature:"final int day()",template:"§1.p5o.day()",comment:o.PAppletDay0Comment},{type:"method",signature:"final int hour()",template:"§1.p5o.hour()",comment:o.PAppletHour0Comment},{type:"method",signature:"final int minute()",template:"§1.p5o.minute()",comment:o.PAppletMinute0Comment},{type:"method",signature:"final int second()",template:"§1.p5o.second()",comment:o.PAppletSecond0Comment},{type:"method",signature:"final void frameRate(int n)",template:"§1.p5o.frameRate(§2)",comment:o.PAppletFrameRate1Comment},{type:"method",signature:"final float textWidth(string text)",template:"§1.p5o.textWidth(§2)",comment:o.PAppletTextWidth1Comment},{type:"method",signature:"final float textAscent(string text)",template:"§1.p5o.textAscent(§2)",comment:o.PAppletTextAscent1Comment},{type:"method",signature:"final float textDescent(string text)",template:"§1.p5o.textDescent(§2)",comment:o.PAppletTextDescent1Comment},{type:"method",signature:"final void textLeading(double leading)",template:"§1.p5o.textLeading(§2)",comment:o.PAppletTextLeading1Comment},{type:"method",signature:"final void cursor(string type)",template:"§1.p5o.cursor(§2)",comment:o.PAppletCursor1Comment},{type:"method",signature:"final void noCursor(string type)",template:"§1.p5o.noCursor(§2)",comment:o.PAppletNoCursor1Comment},{type:"method",signature:"final void copy(double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh)",template:"§1.p5o.copy(§2, §3, §4, §5, §6, §7, §8, §9)",comment:o.PAppletCopy1Comment},{type:"method",signature:"final void millis()",template:"§1.p5o.millis()",comment:o.PAppletMillis0Comment},{type:"method",signature:"final void redraw()",template:"§1.p5o.redraw()",comment:o.PAppletRedraw0Comment}]),r(Ze,"type");let $c=Ze;const on=class on extends jt{constructor(){super(...arguments);r(this,"left");r(this,"top");r(this,"width");r(this,"height")}get scaledWidth(){return this.scaleFactor*this.width}get scaledHeight(){return this.scaleFactor*this.width}set scaledWidth(e){this._setWidth(e)}set scaledHeight(e){this._setHeight(e)}_cj$_constructor_$Rectangle$(e,i){this._cj$_constructor_$Rectangle$double$double$double$double(e,i,0,0,100,100)}_cj$_constructor_$Rectangle$double$double$double$double(e,i,n,s,a,l){this._cj$_constructor_$FilledShape$(e,()=>{this.centerXInitial=n+a/2,this.centerYInitial=s+l/2,this.left=n,this.top=s,this.width=a,this.height=l,this.hitPolygonInitial=[{x:this.left,y:this.top},{x:this.left,y:this.top+this.height},{x:this.left+this.width,y:this.top+this.height},{x:this.left+this.width,y:this.top}],this.render(),i&&i()})}calculateHitPolygonInitial(){this.hitPolygonInitial=[{x:this.left,y:this.top},{x:this.left,y:this.top+this.height},{x:this.left+this.width,y:this.top+this.height},{x:this.left+this.width,y:this.top}]}_mj$copy$Shape$(e,i){this._mj$copy$Rectangle$(e,i)}_mj$copy$Rectangle$(e,i){let n=new on;n._cj$_constructor_$Rectangle$double$double$double$double(e,i,this.left,this.top,this.width,this.height),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){let e=this.container;this.container?e.clear():(e=new He,this.container=e,this.world.app.stage.addChild(e)),e.rect(this.left,this.top,this.width,this.height),this.fillColor!=null&&(e.fill(this.fillColor),e.alpha=this.fillAlpha),this.borderColor!=null&&e.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5}),e.closePath()}_setWidth(e){this.width=e/this.container.scale.x,this.centerXInitial=this.left+this.width/2,this.calculateHitPolygonInitial(),this.render()}_setHeight(e){this.height=e/this.container.scale.y,this.centerYInitial=this.top+this.height/2,this.calculateHitPolygonInitial(),this.render()}_moveTo(e,i){return this.transformHitPolygon(),this._move(e-this.hitPolygonTransformed[0].x,i-this.hitPolygonTransformed[0].y),this}_mj$toString$String$(e,i){e.s.push(new G(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{width: ${this.scaledWidth}, height: ${this.scaledHeight}, centerX: ${this._getCenterX()}, centerY: ${this._getCenterY()} }`}};r(on,"__javaDeclarations",[{type:"declaration",signature:"class Rectangle extends FilledShape",comment:o.rectangleClassComment},{type:"field",signature:"private double width",nativeIdentifier:"scaledWidth"},{type:"field",signature:"private double height",nativeIdentifier:"scaledHeight"},{type:"method",signature:"Rectangle()",java:on.prototype._cj$_constructor_$Rectangle$,comment:o.rectangleEmptyConstructorComment},{type:"method",signature:"Rectangle(double left, double top, double width, double height)",java:on.prototype._cj$_constructor_$Rectangle$double$double$double$double,comment:o.rectangleConstructorComment},{type:"method",signature:"final void setWidth(double width)",native:on.prototype._setWidth,comment:o.rectangleSetWidthComment},{type:"method",signature:"final void setHeight(double height)",native:on.prototype._setHeight,comment:o.rectangleSetHeightComment},{type:"method",signature:"final double getWidth()",template:"(§1.width*§1.scaleFactor)",comment:o.rectangleGetWidthComment},{type:"method",signature:"final double getHeight()",template:"(§1.height*§1.scaleFactor)",comment:o.rectangleGetHeightComment},{type:"method",signature:"final Rectangle copy()",java:on.prototype._mj$copy$Rectangle$,comment:o.rectangleCopyComment},{type:"method",signature:"final Rectangle moveTo(double x, double y)",native:on.prototype._moveTo,comment:o.rectangleMoveToComment},{type:"method",signature:"String toString()",java:on.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(on,"type");let el=on;class Bb{constructor(t){r(this,"world3d");r(this,"farben",["rot","gelb","grün","blau"]);r(this,"farbeToColorInfoMap",{rot:16711680,gelb:16776960,grün:65280,blau:255});r(this,"farbeToMarkerMaterialMap",new Map);r(this,"farbeToBrickMaterialMap",new Map);r(this,"grassCubeGeometry");r(this,"brickGeometry");this.robotWorld=t,this.world3d=t.world3d}async init(){for(let t=0;t{this.world3d=e.s.pop(),this.world3d.scene.clear(),this.world3d.scene.background=new zs(.5,.5,1),this.world3d.currentCamera.camera3d.position.z=10,this.robotCubeFactory=new Bb(this),e.state=B.waiting,await this.robotCubeFactory.init(),e.state=B.running;const l=new sp(15658734,3);this.world3d.scene.add(l),typeof n=="string"?this.initFromString(n):(this.maxX=n,this.maxY=s,this.initGraphics(),this.initWorldArrays(this.maxX,this.maxY)),this.world3d.orbitControls.dispose(),this.world3d.currentCamera.camera3d.position.set(this.maxX,Math.max(this.maxX,this.maxY),this.maxY),this.world3d.orbitControls=new rp(this.world3d.currentCamera.camera3d,this.world3d.renderer.domElement),i&&i()})}initGraphics(){this.robotCubeFactory.getGrassPlane(this.maxX,this.maxY),this.robotCubeFactory.initNorthArrow()}initWorldArrays(e,i){this.markers=[],this.bricks=[];for(let n=0;n0){let n=this.bricks[e-1][i-1].pop();this.removeMesh(n),this.adjustMarkerHeight(e,i),this.adjustRobotPositions(e,i)}else return!1}getBrickCount(e,i){return this.bricks[e-1][i-1].length}hasBrickColor(e,i,n){for(let s of this.bricks[e-1][i-1])if(s.userData.farbe==n)return!0;return!1}getMarkerColor(e,i){let n=this.markers[e-1][i-1];return n==null?null:n.userData.farbe}setMarker(e,i,n){this.markers[e-1][i-1]!=null&&this.removeMesh(this.markers[e-1][i-1]);let s=this.robotCubeFactory.getMarker(n,e,i,this.bricks[e-1][i-1].length);this.markers[e-1][i-1]=s}removeMarker(e,i){let n=this.markers[e-1][i-1];return n==null?!1:(this.markers[e-1][i-1]=null,this.removeMesh(n),!0)}adjustMarkerHeight(e,i){let n=this.markers[e-1][i-1];if(n!=null){let s=this.bricks[e-1][i-1].length;n.translateY((s-n.userData.z)/2),n.userData.z=s}}clear(){for(let e=0;e0;)this.removeMesh(n.pop())}for(let e=0;e{e instanceof me&&(e.geometry.dispose(),e.material instanceof of&&e.material.dispose())})}getNumberOfBricks(e,i){return this.bricks[e-1][i-1].length}initFromString(e){let i={r:"rot",g:"grün",b:"blau",y:"gelb"},n={R:"rot",G:"grün",B:"blau",Y:"gelb"},s=["1","2","3","4","5","6","7","8","9","0"];this.clear();let a=e.split(` `),l=0;a.forEach(f=>{let b=this.rowLength(f);b>l&&(l=b)}),this.initWorldArrays(l,a.length),this.maxX=l,this.maxY=a.length,this.initGraphics();let h,c,u="rot",g="gelb";for(let f=0;f=0){for(let C=0;C=0&&i++;return i}gibtFarbe(e){return this.robotCubeFactory.farben.indexOf(e)>=0}removeMesh(e){this.world3d.scene.remove(e),e.geometry.dispose(),e.material.dispose()}_setzeMaximalhoehe(e){this.maximumHeight=e}_setzeZiegel(e,i,n,s){if(e<1||e>this.maxX||i<1||i>this.maxY)throw new F(o.robotWorldPositionOutsideWorldError(e,i));for(let a=0;athis.maxX||i<1||i>this.maxY)throw new F(o.robotWorldPositionOutsideWorldError(e,i));this.setMarker(e,i,n)}};r(Xr,"__javaDeclarations",[{type:"declaration",signature:"class RobotWorld extends Object",comment:o.robotWorldClassComment},{type:"method",signature:"RobotWorld(int worldX, int worldY)",java:Xr.prototype._cj$_constructor_$RobotWorld$int$int,comment:o.robotWorldConstructorWorldXWorldY},{type:"method",signature:"RobotWorld(string initialeWelt)",java:Xr.prototype._cj$_constructor_$RobotWorld$int$int,comment:o.robotWorldConstructorInitialWorld},{type:"method",signature:"void setzeMaximalhöhe(int hoehe)",native:Xr.prototype._setzeMaximalhoehe,comment:o.robotWorldSetzeMaximalHoehe},{type:"method",signature:"void setzeZiegel(int x, int y, string farbe, int anzahl)",native:Xr.prototype._setzeZiegel,comment:o.robotWorldSetzeZiegel},{type:"method",signature:"void setzeMarke(int x, int y, string farbe)",native:Xr.prototype._setzeMarke,comment:o.robotWorldSetzeMarke}]);let ud=Xr;class Ob{constructor(t){r(this,"names",["north","west","south","east"]);r(this,"deltas",[{dx:0,dy:-1},{dx:-1,dy:0},{dx:0,dy:1},{dx:1,dy:0}]);r(this,"angles",[0,90,180,270]);r(this,"index",2);this.robot=t}is(t){return this.names[this.index].toLocaleLowerCase()==t}turnRight(){this.index=(this.index-1+4)%4,this.robot.steve.rotateY(-Math.PI/2)}turnLeft(){this.index=(this.index+1+4)%4,this.robot.steve.rotateY(Math.PI/2)}getAngle(){return this.angles[this.index]}getDeltas(){return this.deltas[this.index]}getName(){return this.names[this.index]}}const oe=class oe extends z{constructor(){super();r(this,"robotCubeFactory");r(this,"robotWorld");r(this,"steve");r(this,"x");r(this,"y");r(this,"z");r(this,"direction",new Ob(this));r(this,"hatSteine",1e7);r(this,"maxSteine",1e10)}_jc$_constructor_$Robot$(e,i){this._jc$_constructor_$Robot$int$int$int$int(e,i,1,1,5,8)}_jc$_constructor_$Robot$int$int(e,i,n,s){this._jc$_constructor_$Robot$int$int$int$int(e,i,n,s,5,10)}_jc$_constructor_$Robot$int$int$string(e,i,n,s,a){this._jc$_constructor_$Robot$int$int$int$int(e,i,n,s,a,void 0)}_jc$_constructor_$Robot$int$int$int$int(e,i,n,s,a,l){if(e.s.push(this),this.robotWorld=e.scheduler.interpreter.retrieveObject("robotWorldClass"),this.robotWorld){e.state=B.waiting,this.init(n,s).then(()=>{e.state=B.running,i&&i()});return}else{e.scheduler.interpreter.eventManager.once("stop",()=>{this.robotWorld=void 0,e.scheduler.interpreter.deleteObject("robotWorldClass")}),new ud()._cj$_constructor_$RobotWorld$int$int(e,async()=>{this.robotWorld=e.s.pop(),e.state=B.waiting,await this.init(n,s),e.state=B.running,i&&i()},a,l);return}}async init(e,i){const n=new lf;let s=""+pm;const a=s.lastIndexOf("assets/");s=s.substring(0,a),this.steve=(await n.loadAsync(s+"assets/graphics/robot/minecraft_steve/scene.gltf")).scene,this.steve.translateX(-this.robotWorld.maxX/2+e-1),this.steve.translateY(1.45+this.robotWorld.getBrickCount(e,i)/2),this.steve.translateZ(-this.robotWorld.maxY/2+i-1),this.steve.scale.set(.06,.06,.06),this.robotWorld.world3d.scene.add(this.steve),this.x=e,this.y=i,this.z=this.robotWorld.getBrickCount(e,i)/2}setZ(e){this.steve.position.y+=e/2-this.z,this.z=e/2}moveTo(e,i){this.steve.position.x+=e-this.x,this.steve.position.z+=i-this.y,this.x=e,this.y=i}_getWelt(){return this.robotWorld}_rechtsDrehen(){this.direction.turnRight()}_linksDrehen(){this.direction.turnLeft()}_schritt(){let e=this.direction.getDeltas(),i=this.x+e.dx,n=this.y+e.dy;if(i<1||i>this.robotWorld.maxX||n<1||n>this.robotWorld.maxY)throw new F(o.robotHitWall());let s=this.robotWorld.getNumberOfBricks(this.x,this.y),a=this.robotWorld.getNumberOfBricks(i,n);if(as+1)throw new F(o.robotMaximumJumpHeightUp());this.moveTo(i,n),this.setZ(this.robotWorld.getBrickCount(i,n))}_schrittAnzahl(e){for(let i=0;ithis.robotWorld.maxX||l<1||l>this.robotWorld.maxY)throw new F(o.robotCantPlaceBricksIntoWall());if(i=i.toLocaleLowerCase(),!this.robotWorld.gibtFarbe(i))throw new F(o.robotColorUnknown());if(this.hatSteinethis.robotWorld.maximumHeight)throw new Oi(o.robotMaximumHeightExceeded(this.robotWorld.maximumHeight));for(let h=0;hthis.robotWorld.maxX||s<1||s>this.robotWorld.maxY)throw new F(o.robotCantPlaceBricksIntoWall());if(this.robotWorld.getNumberOfBricks(n,s)this.robotWorld.maxX||n<1||n>this.robotWorld.maxY}_istZiegel(e){let i=this.direction.getDeltas(),n=this.x+i.dx,s=this.y+i.dy;return n<1||n>this.robotWorld.maxX||s<1||s>this.robotWorld.maxY?!1:e==null?this.robotWorld.getBrickCount(n,s)>0:typeof e=="string"?this.robotWorld.hasBrickColor(n,s,e.toLocaleLowerCase()):this.robotWorld.bricks[n][s].length==e}_istMarke(e){let i=this.robotWorld.markers[this.x-1][this.y-1];return e==null?i!=null:typeof e=="string"?i!=null&&i.userData.farbe==e.toLocaleLowerCase():!1}_mj$beenden$void$(e,i){var n;(n=e.scheduler.interpreter.printManager)==null||n.print(o.robotStoppedProgram(),!0,8421504),e.state=B.terminated,e.scheduler.exit(0)}_nichtIstWand(){return!this._istWand()}_nichtIstMarke(e){return!this._istMarke(e)}_nichtIstZiegel(e){return!this._istZiegel(e)}_isNorth(){return this.direction.is("north")}_isEast(){return this.direction.is("east")}_isSouth(){return this.direction.is("south")}_isWest(){return this.direction.is("west")}_istLeer(){return this.hatSteine==0}_istVoll(){return this.hatSteine==this.maxSteine}_nichtIstLeer(){return!this._istLeer()}_nichtIstVoll(){return!this._istVoll()}_hatZiegel(){return this.hatSteine>0}_hatZiegelAnzahl(e){return this.hatSteine>=e}_setzeAnzahlSteine(e){this.hatSteine=e}_setzeRucksackGroesse(e){this.maxSteine=e}_debugOutput(){return`{x = ${this.x}, y = ${this.y}, direction = ${this.direction.getName()}}`}};r(oe,"__javaDeclarations",[{type:"declaration",signature:"class Robot extends Object",comment:o.robotClassComment},{type:"method",signature:"Robot()",java:oe.prototype._jc$_constructor_$Robot$,comment:o.robotEmptyConstructorComment},{type:"method",signature:"Robot(int startX, int startY)",java:oe.prototype._jc$_constructor_$Robot$int$int,comment:o.robotConstructorStartXStartY},{type:"method",signature:"Robot(int startX, int startY, int worldX, int worldY)",java:oe.prototype._jc$_constructor_$Robot$int$int$int$int,comment:o.robotConstructorStartXStartYWorldXWorldY},{type:"method",signature:"Robot(int startX, int startY, string initialWorld)",java:oe.prototype._jc$_constructor_$Robot$int$int$string,comment:o.robotConstructorStartXStartYinitialWorld},{type:"method",signature:"RobotWorld getWelt()",native:oe.prototype._getWelt,comment:o.robotGetWelt},{type:"method",signature:"void rechtsDrehen()",native:oe.prototype._rechtsDrehen,comment:o.robotRechtsDrehen},{type:"method",signature:"void linksDrehen()",native:oe.prototype._linksDrehen,comment:o.robotLinksDrehen},{type:"method",signature:"void schritt()",native:oe.prototype._schritt,comment:o.robotSchritt},{type:"method",signature:"void schritt(int anzahl)",native:oe.prototype._schrittAnzahl,comment:o.robotSchrittAnzahl},{type:"method",signature:"void hinlegen()",native:oe.prototype._hinlegen,comment:o.robotHinlegen},{type:"method",signature:"void hinlegen(int n)",native:oe.prototype._hinlegen,comment:o.robotHinlegen},{type:"method",signature:"void hinlegen(string farbe)",native:oe.prototype._hinlegen,comment:o.robotHinlegenFarbe},{type:"method",signature:"void markeSetzen()",native:oe.prototype._markeSetzen,comment:o.robotMarkeSetzen},{type:"method",signature:"void markeSetzen(string farbe)",native:oe.prototype._markeSetzen,comment:o.robotMarkeSetzenFarbe},{type:"method",signature:"void markeLöschen()",native:oe.prototype._markeLöschen,comment:o.robotMarkeLöschen},{type:"method",signature:"void aufheben()",native:oe.prototype._aufheben,comment:o.robotAufheben},{type:"method",signature:"void aufheben(int n)",native:oe.prototype._aufheben,comment:o.robotAufheben},{type:"method",signature:"void beenden()",java:oe.prototype._mj$beenden$void$,comment:o.robotBeenden},{type:"method",signature:"boolean istWand()",native:oe.prototype._istWand,comment:o.robotIstWand},{type:"method",signature:"boolean nichtIstWand()",native:oe.prototype._nichtIstWand,comment:o.robotNichtIstWand},{type:"method",signature:"boolean istZiegel()",native:oe.prototype._istZiegel,comment:o.robotIstZiegel},{type:"method",signature:"boolean istZiegel(int anzahl)",native:oe.prototype._istZiegel,comment:o.robotIstZiegelAnzahl},{type:"method",signature:"boolean istZiegel(string farbe)",native:oe.prototype._istZiegel,comment:o.robotIstZiegelFarbe},{type:"method",signature:"boolean nichtIstZiegel()",native:oe.prototype._nichtIstZiegel,comment:o.robotNichtIstZiegel},{type:"method",signature:"boolean nichtIstZiegel(int anzahl)",native:oe.prototype._nichtIstZiegel,comment:o.robotNichtIstZiegelAnzahl},{type:"method",signature:"boolean nichtIstZiegel(string farbe)",native:oe.prototype._nichtIstZiegel,comment:o.robotNichtIstZiegelFarbe},{type:"method",signature:"boolean istMarke()",native:oe.prototype._istMarke,comment:o.robotIstMarke},{type:"method",signature:"boolean istMarke(string farbe)",native:oe.prototype._istMarke,comment:o.robotIstMarkeFarbe},{type:"method",signature:"boolean nichtIstMarke()",native:oe.prototype._nichtIstMarke,comment:o.robotNichtIstMarke},{type:"method",signature:"boolean nichtIstMarke(string farbe)",native:oe.prototype._nichtIstMarke,comment:o.robotNichtIstMarkeFarbe},{type:"method",signature:"boolean istNorden()",native:oe.prototype._isNorth,comment:o.robotIstNorden},{type:"method",signature:"boolean istSüden()",native:oe.prototype._isSouth,comment:o.robotIstSueden},{type:"method",signature:"boolean istOsten()",native:oe.prototype._isEast,comment:o.robotIstOsten},{type:"method",signature:"boolean istWesten()",native:oe.prototype._isWest,comment:o.robotIstWesten},{type:"method",signature:"boolean istLeer()",native:oe.prototype._istLeer,comment:o.robotIstLeer},{type:"method",signature:"boolean nichtIstLeer()",native:oe.prototype._nichtIstLeer,comment:o.robotNichtIstLeer},{type:"method",signature:"boolean istVoll()",native:oe.prototype._istVoll,comment:o.robotIstVoll},{type:"method",signature:"boolean nichtIstVoll()",native:oe.prototype._nichtIstVoll,comment:o.robotNichtIstVoll},{type:"method",signature:"boolean hatZiegel()",native:oe.prototype._hatZiegel,comment:o.robotHatZiegel},{type:"method",signature:"void setzeAnzahlSteine(int anzahl)",native:oe.prototype._setzeAnzahlSteine,comment:o.robotSetzeAnzahlSteine},{type:"method",signature:"void setzeRucksackGröße(int anzahl)",native:oe.prototype._setzeRucksackGroesse,comment:o.robotSetzeRucksackGroesse}]),r(oe,"type");let Ec=oe;const ln=class ln extends jt{constructor(){super(...arguments);r(this,"left");r(this,"top");r(this,"width");r(this,"height");r(this,"radius")}get scaledWidth(){return this.scaleFactor*this.width}get scaledHeight(){return this.scaleFactor*this.width}get scaledRadius(){return this.scaleFactor*this.radius}_cj$_constructor_$RoundedRectangle$(e,i){this._cj$_constructor_$RoundedRectangle$double$double$double$double$double(e,i,0,0,100,100,10)}_cj$_constructor_$RoundedRectangle$double$double$double$double$double(e,i,n,s,a,l,h){this._cj$_constructor_$FilledShape$(e,()=>{this.centerXInitial=n+a/2,this.centerYInitial=s+l/2,this.left=n,this.top=s,this.width=a,this.height=l,this.radius=h,this.hitPolygonInitial=[],this.addCenterCircle(n+h,s+h,Math.PI/2),this.addCenterCircle(n+h,s+l-h,Math.PI),this.addCenterCircle(n+a-h,s+l-h,3*Math.PI/2),this.addCenterCircle(n+a-h,s+h,0),this.hitPolygonInitial.push({x:n+h,y:s}),this.render()})}_mj$copy$Shape$(e,i){this._mj$copy$RoundedRectangle$(e,i)}_mj$copy$RoundedRectangle$(e,i){let n=new ln;n._cj$_constructor_$RoundedRectangle$double$double$double$double$double(e,i,this.left,this.top,this.width,this.height,this.radius),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){let e=this.container;this.container?e.clear():(e=new He,this.container=e,this.world.app.stage.addChild(e)),e.roundRect(this.left,this.top,this.width,this.height,this.radius),this.fillColor!=null&&(e.fill(this.fillColor),e.alpha=this.fillAlpha),this.borderColor!=null&&e.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5}),e.closePath()}addCenterCircle(e,i,n){let s=8,a=Math.PI/2/s;for(let l=0;l<=s;l++)this.hitPolygonInitial.push({x:e+this.radius*Math.cos(n+a*l),y:i-this.radius*Math.sin(n+a*l)})}_setWidth(e){this.width=e/this.container.scale.x,this.centerXInitial=this.left+this.width/2,this.render()}_setHeight(e){this.height=e/this.container.scale.y,this.centerYInitial=this.top+this.height/2,this.render()}_moveTo(e,i){return this.transformHitPolygon(),this._move(e-this.hitPolygonTransformed[0].x,i-this.hitPolygonTransformed[0].y),this}_mj$toString$String$(e,i){e.s.push(new G(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{width: ${this.width*this.scaleFactor}, height: ${this.height*this.scaleFactor}, radius: ${this.radius*this.scaleFactor}, centerX: ${this._getCenterX()}, centerY: ${this._getCenterY()} }`}};r(ln,"__javaDeclarations",[{type:"declaration",signature:"class RoundedRectangle extends FilledShape",comment:o.RoundedRectangleClassComment},{type:"field",signature:"private double width",nativeIdentifier:"scaledWidth"},{type:"field",signature:"private double height",nativeIdentifier:"scaledHeight"},{type:"field",signature:"private double radius",nativeIdentifier:"scaledRadius"},{type:"method",signature:"RoundedRectangle()",java:ln.prototype._cj$_constructor_$RoundedRectangle$,comment:o.RoundedRectangleEmptyConstructorComment},{type:"method",signature:"RoundedRectangle(double left, double top, double width, double height, double radius)",java:ln.prototype._cj$_constructor_$RoundedRectangle$double$double$double$double$double,comment:o.RoundedRectangleConstructorComment},{type:"method",signature:"final void setWidth(double width)",native:ln.prototype._setWidth,comment:o.RoundedRectangleSetWidthComment},{type:"method",signature:"final void setHeight(double height)",native:ln.prototype._setHeight,comment:o.RoundedRectangleSetHeightComment},{type:"method",signature:"final double getWidth()",template:"(§1.width*§1.scaleFactor)",comment:o.RoundedRectangleGetWidthComment},{type:"method",signature:"final double getHeight()",template:"(§1.height*§1.scaleFactor)",comment:o.RoundedRectangleGetHeightComment},{type:"method",signature:"final RoundedRectangle copy()",java:ln.prototype._mj$copy$RoundedRectangle$,comment:o.RoundedRectangleCopyComment},{type:"method",signature:"final RoundedRectangle moveTo(double x, double y)",native:ln.prototype._moveTo,comment:o.RoundedRectangleMoveToComment},{type:"method",signature:"String toString()",java:ln.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(ln,"type");let Ic=ln;const Ti=class Ti extends jt{constructor(){super(...arguments);r(this,"mx");r(this,"my");r(this,"radius");r(this,"startAngleRad");r(this,"endAngleRad");r(this,"drawRadii",!0)}_cj$_constructor_$Sector$(e,i){this._cj$_constructor_$Sector$double$double$double$double$double(e,i,200,200,200,0,180)}_cj$_constructor_$Sector$double$double$double$double$double(e,i,n,s,a,l,h){this._cj$_constructor_$FilledShape$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.mx=n,this.my=s,this.radius=a,this.startAngleRad=l/180*Math.PI,this.endAngleRad=h/180*Math.PI,this.render()})}_mj$copy$Shape$(e,i){this._mj$copy$Sector$(e,i)}_mj$copy$Sector$(e,i){let n=new Ti;n._cj$_constructor_$Sector$double$double$double$double$double(e,i,this.mx,this.my,this.radius,this.startAngleRad,this.endAngleRad),n.drawRadii=this.drawRadii,n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){this.hitPolygonInitial=[];let e=this.endAngleRad-this.startAngleRad;this.hitPolygonInitial.push({x:this.mx,y:this.my});for(let n=0;n<16;n++){let s=this.startAngleRad+e*n;this.hitPolygonInitial.push({x:this.mx+this.radius*Math.cos(s),y:this.my+this.radius*Math.sin(s)})}this.hitPolygonInitial.push({x:this.mx,y:this.my}),this.hitPolygonDirty=!0;let i=this.container;i==null?(i=new He,this.container=i,this.world.app.stage.addChild(i)):i.clear(),Math.abs(this.startAngleRad-this.endAngleRad)<1e-8?i.circle(this.mx,this.my,this.radius):(this.drawRadii&&i.moveTo(this.mx,this.my),i.arc(this.mx,this.my,this.radius,-this.startAngleRad,-this.endAngleRad,!0),this.drawRadii&&i.lineTo(this.mx,this.my)),this.drawRadii&&i.closePath(),this.fillColor!=null&&(i.fill(this.fillColor),i.alpha=this.fillAlpha),this.borderColor!=null&&i.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5}),i.closePath()}_setRadius(e){this.radius=e/this.container.scale.x,this.render()}_setStartAngle(e){this.startAngleRad=e/180*Math.PI,this.render()}_setEndAngle(e){this.endAngleRad=e/180*Math.PI,this.render()}_drawRadii(e){this.drawRadii=e,this.render()}containsPoint(e,i){if(!this.container.getBounds().containsPoint(e,i))return!1;let n=new ue(e,i);this.container.worldTransform.applyInverse(n,n);let a=n.x-this.mx,l=n.y-this.my,h=Math.atan2(-l,a);if(a*a+l*l<=this.radius*this.radius){let c=2*Math.PI,u=this.startAngleRad<0?c+this.startAngleRad:this.startAngleRad,g=this.endAngleRad<0?c+this.endAngleRad:this.endAngleRad,b=(h<0?c+h:h)>=u&&u<=g;return u<=g?b:!b}else return!1}_mj$toString$String$(e,i){e.s.push(new G(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{startAngle: ${this.startAngleRad/Math.PI*180*this.scaleFactor}, endAngle: ${this.endAngleRad/Math.PI*180*this.scaleFactor}, radius: ${this.radius*this.scaleFactor}, mx: ${this._getCenterX()}, my: ${this._getCenterY()} }`}};r(Ti,"__javaDeclarations",[{type:"declaration",signature:"class Sector extends FilledShape",comment:o.SectorClassComment},{type:"method",signature:"Sector()",java:Ti.prototype._cj$_constructor_$Sector$,comment:o.SectorConstructorComment1},{type:"method",signature:"Sector(double mx, double my, double radius, double startAngle, double endAngle)",java:Ti.prototype._cj$_constructor_$Sector$double$double$double$double$double,comment:o.SectorConstructorComment},{type:"method",signature:"final void setRadius(double Radius)",native:Ti.prototype._setRadius,comment:o.SectorSetRadiusComment},{type:"method",signature:"final double getRadiusX()",template:"(§1.radius*§1.scaleFactor)",comment:o.SectorGetRadiusComment},{type:"method",signature:"final void setStartAngle(double startAngle)",native:Ti.prototype._setStartAngle,comment:o.SectorSetStartAngleComment},{type:"method",signature:"final double getStartAngleX()",template:"(§1.startAngle/Math.PI*180)",comment:o.SectorGetStartAngleComment},{type:"method",signature:"final void setEndAngle(double endAngle)",native:Ti.prototype._setEndAngle,comment:o.SectorSetEndAngleComment},{type:"method",signature:"final double getEndAngleX()",template:"(§1.endAngle/Math.PI*180)",comment:o.SectorGetEndAngleComment},{type:"method",signature:"final void drawRadii(boolean drawRadii)",native:Ti.prototype._drawRadii,comment:o.SectorDrawRadiiComment},{type:"method",signature:"final Sector copy()",java:Ti.prototype._mj$copy$Sector$,comment:o.SectorCopyComment},{type:"method",signature:"final boolean containsPoint(double x, double y)",native:Ti.prototype._containsPoint,comment:o.shapeContainsPointComment},{type:"method",signature:"String toString()",java:Ti.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Ti,"type");let Dc=Ti;const At=class At extends jt{constructor(){super(...arguments);r(this,"alignment","left");r(this,"textStyle",new eh({fontFamily:"Arial",fontSize:10,fontStyle:"normal",fontWeight:"normal",fill:this.fillColor==null?0:this.fillColor,stroke:{color:this.borderColor==null?0:this.borderColor,width:this.borderColor==null?0:this.borderWidth,join:"round"},dropShadow:!1,wordWrap:!1,align:"left"}));r(this,"x");r(this,"y");r(this,"fontsize");r(this,"text");r(this,"fontFamily")}_cj$_constructor_$Text$(e,i){this._cj$_constructor_$Text$double$double$double$string(e,i,0,0,24,"Text")}_cj$_constructor_$Text$double$double$double$string(e,i,n,s,a,l,h){this._cj$_constructor_$FilledShape$(e,()=>{this.x=n,this.y=s,this.fontsize=a,this.text=l+"",this.centerXInitial=n,this.centerYInitial=s,this.fontsize==0&&(this.fontsize=10),this.borderColor=void 0,this.textStyle.stroke=0,h!=null&&(this.textStyle.fontFamily=h),this.hitPolygonInitial=[],this.render(),i&&i()})}_mj$copy$Shape$(e,i){this._mj$copy$Text$(e,i)}_mj$copy$Text$(e,i){let n=new At;n._cj$_constructor_$Text$double$double$double$string(e,i,this.x,this.y,this.fontsize,this.text,this.fontFamily),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){let e=this.container;if(this.textStyle.fill=this.fillColor==null?0:this.fillColor,this.textStyle.stroke={color:this.borderColor==null?0:this.borderColor,width:this.borderColor==null?0:this.borderWidth,join:"round"},this.textStyle.fontSize=this.fontsize,!this.container)e=new ca({text:this.text,style:this.textStyle}),this.container=e,this.container.localTransform.translate(this.x,this.y),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.container._didLocalTransformChangeId=this.container._didChangeId,this.setWorldTransformAndHitPolygonDirty(),this.world.app.stage.addChild(e);else{switch(e.text=this.text,e.alpha=this.fillAlpha,this.alignment){case"left":e.anchor.x=0;break;case"center":e.anchor.x=.5;break;case"right":e.anchor.x=1;break}this.textStyle.align=this.alignment,e.style=this.textStyle}this.centerXInitial=0,this.centerYInitial=0;let i=0,n=0;if(this.text!=null){let l=io.measureText(""+this.text,this.textStyle);i=l.width,n=l.height,l.fontProperties.ascent,this.centerXInitial=i/2,this.centerYInitial=n/2}let s=0-e.anchor.x*i,a=0-e.anchor.y*n;this.hitPolygonInitial=[{x:s,y:a},{x:s,y:a+n},{x:s+i,y:a+n},{x:s+i,y:a}]}_mj$toString$String$(e,i){e.s.push(new G(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{text: ${this.text}, centerX: ${this._getCenterX()}, centerY: ${this._getCenterY()} }`}_moveTo(e,i){let n=new ue(0,0);return this.getWorldTransform(),this.container.localTransform.apply(n,n),this._move(e-n.x,i-n.y),this}_setFontsize(e){this.fontsize=e,this.fontsize==0&&(this.fontsize=10),this.render()}_setText(e){this.text=e+"",this.render()}_setAlignment(e){this.alignment=e.name,this.render()}_getWidth(){return this.container.width}_getHeight(){return this.container.height}_setStyle(e,i){this.textStyle.fontWeight=e?"bold":"normal",this.textStyle.fontStyle=i?"italic":"normal",this.render()}};r(At,"__javaDeclarations",[{type:"declaration",signature:"class Text extends FilledShape",comment:o.TextClassComment},{type:"method",signature:"Text()",java:At.prototype._cj$_constructor_$Text$,comment:o.TextEmptyConstructorComment},{type:"method",signature:"Text(double x, double y, double fontSize, string text)",java:At.prototype._cj$_constructor_$Text$double$double$double$string,comment:o.TextConstructorComment1},{type:"method",signature:"Text(double x, double y, double fontSize, string text, string fontFamily)",java:At.prototype._cj$_constructor_$Text$double$double$double$string,comment:o.TextConstructorComment1},{type:"method",signature:"Text(double x, double y, double fontSize, double text)",java:At.prototype._cj$_constructor_$Text$double$double$double$string,comment:o.TextConstructorComment1},{type:"method",signature:"Text(double x, double y, double fontSize, double text, string fontFamily)",java:At.prototype._cj$_constructor_$Text$double$double$double$string,comment:o.TextConstructorComment1},{type:"method",signature:"void setFontsize(double fontsize)",native:At.prototype._setFontsize,comment:o.TextSetFontsizeComment},{type:"method",signature:"void setText(string text)",native:At.prototype._setText,comment:o.TextSetTextComment},{type:"method",signature:"void setText(double text)",native:At.prototype._setText,comment:o.TextSetTextComment},{type:"method",signature:"void setAlignment(Alignment alignment)",native:At.prototype._setAlignment,comment:o.TextSetAlignmentComment},{type:"method",signature:"void setStyle(boolean bold, boolean italic)",native:At.prototype._setStyle,comment:o.TextSetStyleComment},{type:"method",signature:"double getFontsize()",template:"§1.fontsize",comment:o.TextGetFontsizeComment},{type:"method",signature:"string getText()",template:"§1.text",comment:o.TextGetTextComment},{type:"method",signature:"double getWidth()",native:At.prototype._getWidth,comment:o.TextGetWidthComment},{type:"method",signature:"double getHeight()",native:At.prototype._getHeight,comment:o.TextGetHeightComment},{type:"method",signature:"final Text moveTo(double x, double y)",native:At.prototype._moveTo,comment:o.TextMoveToComment},{type:"method",signature:"final Text copy()",java:At.prototype._mj$copy$Text$,comment:o.TextCopyComment},{type:"method",signature:"String toString()",java:At.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(At,"type");let md=At;const Ar=class Ar extends da{constructor(){super(...arguments);r(this,"left");r(this,"top");r(this,"width");r(this,"height")}_cj$_constructor_$Triangle$(e,i){this._cj$_constructor_$Polygon$boolean$double_I(e,i,!0,[0,0,100,0,0,100])}_cj$_constructor_$Triangle$double$double$double$double$double$double(e,i,n,s,a,l,h,c){this._cj$_constructor_$Polygon$boolean$double_I(e,i,!0,[n,s,a,l,h,c])}_mj$copy$Shape$(e,i){this._mj$copy$Triangle$(e,i)}_mj$copy$Triangle$(e,i){let n=new Ar;n._cj$_constructor_$Polygon$boolean$double_I(e,i,!0,[this.hitPolygonInitial[0].x,this.hitPolygonInitial[0].y,this.hitPolygonInitial[1].x,this.hitPolygonInitial[1].y,this.hitPolygonInitial[2].x,this.hitPolygonInitial[2].y]),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}_setPoints2(e,i,n,s,a,l){this._setPoints([e,i,n,s,a,l])}};r(Ar,"__javaDeclarations",[{type:"declaration",signature:"class Triangle extends Polygon",comment:o.TriangleClassComment},{type:"method",signature:"Triangle()",java:Ar.prototype._cj$_constructor_$Triangle$,comment:o.TriangleConstructorComment1},{type:"method",signature:"Triangle(double x1, double y1, double x2, double y2, double x3, double y3)",java:Ar.prototype._cj$_constructor_$Triangle$double$double$double$double$double$double,comment:o.TriangleConstructorComment},{type:"method",signature:"void setPoints(double x1, double y1, double x2, double y2, double x3, double y3)",native:Ar.prototype._setPoints2,comment:o.TriangleSetPointsComment},{type:"method",signature:"final Triangle copy()",java:Ar.prototype._mj$copy$Triangle$,comment:o.TriangleCopyComment}]),r(Ar,"type");let jc=Ar;const Xe=class Xe extends jt{constructor(){super(...arguments);r(this,"lineElements",[]);r(this,"turtleAngleDeg",0);r(this,"isFilled",!1);r(this,"turtle");r(this,"lineGraphic");r(this,"xSum",0);r(this,"ySum",0);r(this,"initialHitPolygonDirty",!0);r(this,"turtleSize",40);r(this,"penIsDown",!0);r(this,"lastLineWidth",0);r(this,"lastColor",0);r(this,"lastAlpha",0);r(this,"lastTurtleAngleDeg",0);r(this,"renderJobPresent",!1);r(this,"angleHasChanged",!0);r(this,"lastLengthSign",-2);r(this,"showTurtle",!0);r(this,"newTurtleX");r(this,"newTurtleY");r(this,"newAngleDeg")}_cj$_constructor_$Turtle$(e,i){this._cj$_constructor_$Turtle$double$double(e,i,100,200)}_cj$_constructor_$Turtle$double$double(e,i,n,s,a=!0){this._cj$_constructor_$FilledShape$(e,()=>{this.lineElements.push({x:n,y:s,color:0,alpha:1,lineWidth:1}),this.calculateCenter(),this.borderColor=16777215,this.borderWidth=2,this.hitPolygonInitial=[],this.container=new ks,this.world.app.stage.addChild(this.container),this.lineGraphic=new He,this.container.addChild(this.lineGraphic),this.lineGraphic.moveTo(n,s),this.turtle=new He,this.container.addChild(this.turtle),this.turtle.visible=this.showTurtle,this.initTurtle(0,0,this.turtleAngleDeg),this.moveTurtleTo(n,s,this.turtleAngleDeg),this.render(),i&&i()})}calculateCenter(){let e=this.lineElements.length,i=this.lineElements[e-1];this.xSum+=i.x,this.ySum+=i.y,this.centerXInitial=this.xSum/e,this.centerYInitial=this.ySum/e}_closeAndFill(e){e!=this.isFilled&&(this.isFilled=e,this.render(),this.initialHitPolygonDirty=!0)}_setShowTurtle(e){this.turtle.visible=e}_turn(e){this.angleHasChanged=!0,this.turtleAngleDeg-=e,Math.abs(this.turtleAngleDeg)>360&&(this.turtleAngleDeg-=Math.floor(this.turtleAngleDeg/360)*360);let i=this.lineElements[this.lineElements.length-1];this.moveTurtleTo(i.x,i.y,this.turtleAngleDeg)}_setAngle(e){return this._turn(e+this.turtleAngleDeg),this}_forward(e){Math.sign(e)!=this.lastLengthSign&&(this.angleHasChanged=!0),this.lastLengthSign=Math.sign(e);let i=this.lineElements[this.lineElements.length-1],n=this.penIsDown?this.borderColor:null,s=this.turtleAngleDeg/180*Math.PI,a;return!this.angleHasChanged&&i.color==n&&i.alpha==this.borderAlpha&&i.lineWidth==this.borderWidth?(i.x+=e*Math.cos(s),i.y+=e*Math.sin(s),a=i):(a={x:i.x+e*Math.cos(s),y:i.y+e*Math.sin(s),color:n,alpha:this.borderAlpha,lineWidth:this.borderWidth},this.lineElements.push(a)),this.angleHasChanged=!1,this.hitPolygonDirty=!0,this.initialHitPolygonDirty=!0,this.calculateCenter(),this.newTurtleX=a.x,this.newTurtleY=a.y,this.newAngleDeg=this.turtleAngleDeg,this.renderJobPresent||(this.renderJobPresent=!0,setTimeout(()=>{this.renderJobPresent=!1,this.render(),this.moveTurtleTo(this.newTurtleX,this.newTurtleY,this.turtleAngleDeg)},100)),this}_moveTo(e,i){let n={x:e,y:i,color:null,alpha:this.borderAlpha,lineWidth:this.borderWidth};return this.lineElements.push(n),this.hitPolygonDirty=!0,this.initialHitPolygonDirty=!0,this.calculateCenter(),this.moveTurtleTo(n.x,n.y,this.turtleAngleDeg),this}initTurtle(e,i,n){this.turtle.clear(),this.turtle.moveTo(e,i);let s=n/180*Math.PI,a=Math.cos(s),l=Math.sin(s),h=-Math.sin(s),c=Math.cos(s),u=this.turtleSize/2,g=this.turtleSize/4,f=this.turtleSize/4;this.turtle.moveTo(e+a*u,i+l*u),this.turtle.lineTo(e-a*g+h*f,i-l*g+c*f),this.turtle.lineTo(e-a*g-h*f,i-l*g-c*f),this.turtle.lineTo(e+a*u,i+l*u),this.turtle.stroke({width:3,color:16711680,alpha:1,alignment:.5})}moveTurtleTo(e,i,n){this.turtle.localTransform.identity(),this.turtle.localTransform.rotate(n/180*Math.PI),this.turtle.localTransform.translate(e,i),this.turtle.setFromMatrix(this.turtle.localTransform),this.turtle.updateLocalTransform(),this.turtle._didLocalTransformChangeId=this.turtle._didChangeId,this.lastTurtleAngleDeg=this.turtleAngleDeg}_collidesWith(e){return e instanceof Xe&&e.initialHitPolygonDirty&&e.setupInitialHitPolygon(),this.initialHitPolygonDirty&&(this.setupInitialHitPolygon(),this.transformHitPolygon(),this.render()),this.hasOverlappingBoundingBoxWith(e)?e.shapes?e._collidesWith(this):this.hitPolygonInitial==null||e.hitPolygonInitial==null?!0:(this.hitPolygonDirty&&this.transformHitPolygon(),e.hitPolygonDirty&&e.transformHitPolygon(),e.hitPolygonTransformed.length==2&&!this.isFilled?jb(this.hitPolygonTransformed,e.hitPolygonTransformed):Db(this.hitPolygonTransformed,e.hitPolygonTransformed)):!1}setupInitialHitPolygon(){this.hitPolygonInitial=this.lineElements.map(e=>({x:e.x,y:e.y}))}_clear(e=void 0,i=void 0,n=void 0){let s=this.lineElements.pop();e==null&&(e=s.x),i==null&&(i=s.y),this.lineElements=[],this.lineElements.push({x:e,y:i,color:0,alpha:1,lineWidth:1}),this.calculateCenter(),this.hitPolygonInitial=[],n!=null&&(this.turtleAngleDeg=n,this.angleHasChanged=!0,this.lastTurtleAngleDeg=0,this.borderColor=0,this.turtleSize=40),this.render(),n!=null&&this.moveTurtleTo(e,i,n)}touchesAtLeastOneFigure(){let e=this.lineElements[this.lineElements.length-1],i=e.x,n=e.y;for(let s of this.world.shapesWhichBelongToNoGroup)if(s!=this&&s._containsPoint(i,n))return!0;return!1}touchesColor(e){let i=this.lineElements[this.lineElements.length-1],n=i.x,s=i.y;for(let a of this.world.shapesWhichBelongToNoGroup)if(a!=this&&a._containsPoint(n,s)&&a instanceof jt&&a.fillColor==e)return!0;return!1}touchesShape(e){let i=this.lineElements[this.lineElements.length-1],n=i.x,s=i.y;return e._containsPoint(n,s)}_containsPoint(e,i){return this.initialHitPolygonDirty&&(this.setupInitialHitPolygon(),this.transformHitPolygon(),this.render()),this.container.getBounds().containsPoint(e,i)?this.hitPolygonInitial==null?!0:(this.hitPolygonDirty&&this.transformHitPolygon(),this.isFilled?ys(this.hitPolygonTransformed,{x:e,y:i}):Kp(this.hitPolygonTransformed,{x:e,y:i})):!1}borderContainsPointExcludingLastLineElement(e,i,n=-1){let s=this.lineElements.pop(),a=this.borderContainsPoint(e,i,n);return this.lineElements.push(s),a}borderContainsPoint(e,i,n=-1){let s=this.getWorldTransform(),a=s.a==1&&s.b==0&&s.c==0&&s.d==1&&s.tx==0&&s.ty==0,l={x:e,y:i};if(this.lineElements.length<2)return!1;let h=this.lineElements[0],c,u=h;a||(u={x:s.a*u.x+s.c*u.y+s.tx,y:s.b*u.x+s.d*u.y+s.ty});for(let g=0;g1){let n=this.lineElements[1];this.lastLineWidth=n.lineWidth,this.lastColor=n.color,this.lastAlpha=n.alpha}e.clear();let i=this.lineElements[0];e.moveTo(i.x,i.y);for(let n=1;n1&&(s.lineWidth!=this.lastLineWidth||s.color!=this.lastColor||s.alpha!=this.lastAlpha)&&e.stroke({width:this.lastLineWidth,color:this.lastColor==null?0:this.lastColor,alpha:this.lastAlpha,alignment:.5}),s.color!=null?e.lineTo(s.x,s.y):e.moveTo(s.x,s.y),this.lastColor=s.color,this.lastLineWidth=s.lineWidth,this.lastAlpha=s.alpha}if(this.isFilled)e.closePath(),e.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5});else if(this.lineElements.length>1){let n=this.lineElements[this.lineElements.length-1];e.stroke({width:n.lineWidth,color:n.color==null?0:n.color,alpha:n.alpha,alignment:.5})}this.fillColor!=null&&this.isFilled&&(e.fill(this.fillColor),e.alpha=this.fillAlpha),e.closePath()}_mj$toString$String$(e,i){e.s.push(new G(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{centerX: ${this._getCenterX()}, centerY: ${this._getCenterY()} }`}_getTurtleAngleDeg(){return-this.turtleAngleDeg+this.angle}};r(Xe,"__javaDeclarations",[{type:"declaration",signature:"class Turtle extends FilledShape",comment:o.TurtleClassComment},{type:"method",signature:"Turtle()",java:Xe.prototype._cj$_constructor_$Turtle$,comment:o.TurtleEmptyConstructorComment},{type:"method",signature:"Turtle(double x, double y)",java:Xe.prototype._cj$_constructor_$Turtle$double$double,comment:o.TurtleConstructorComment1},{type:"method",signature:"Turtle(double x, double y, boolean showTurtle)",java:Xe.prototype._cj$_constructor_$Turtle$double$double,comment:o.TurtleConstructorComment2},{type:"method",signature:"final Turtle forward(double length)",native:Xe.prototype._forward,comment:o.TurtleForwardComment},{type:"method",signature:"final void turn(double angleInDeg)",native:Xe.prototype._turn,comment:o.TurtleTurnComment},{type:"method",signature:"final void penUp()",template:"§1.penIsDown = false;",comment:o.TurtlePenUpComment},{type:"method",signature:"final void penDown()",template:"§1.penIsDown = true;",comment:o.TurtlePenDownComment},{type:"method",signature:"final void closeAndFill(boolean closeAndFill)",native:Xe.prototype._closeAndFill,comment:o.TurtleCloseAndFillComment},{type:"method",signature:"final void showTurtle(boolean showTurtle)",native:Xe.prototype._setShowTurtle,comment:o.TurtleShowTurtleComment},{type:"method",signature:"final void clear()",native:Xe.prototype._clear,comment:o.TurtleClearComment},{type:"method",signature:"final boolean collidesWithBorderColor(int borderColor)",native:Xe.prototype._collidesWithBorderColor,comment:o.TurtleCollidesWithBorderColorComment},{type:"method",signature:"final boolean collidesWithBorderColor(string borderColor)",native:Xe.prototype._collidesWithBorderColor,comment:o.TurtleCollidesWithBorderColorComment},{type:"method",signature:"final boolean collidesWithBorderColor(Color borderColor)",native:Xe.prototype._collidesWithBorderColor,comment:o.TurtleCollidesWithBorderColorComment},{type:"method",signature:"final double getLastSegmentLength()",native:Xe.prototype._getLastSegmentLength,comment:o.TurtleGetLastSegmentLengthComment},{type:"method",signature:"final double getX()",template:"§1.getPosition().x",comment:o.TurtleGetXComment},{type:"method",signature:"final double getY()",template:"§1.getPosition().y",comment:o.TurtleGetYComment},{type:"method",signature:"final Turtle moveTo(double x, double y)",native:Xe.prototype._moveTo,comment:o.TurtleMoveToComment},{type:"method",signature:"final double getTurtleAngle()",native:Xe.prototype._getTurtleAngleDeg,comment:o.TurtleGetTurtleAngleComment},{type:"method",signature:"final Turtle copy()",java:Xe.prototype._mj$copy$Turtle$,comment:o.TurtleCopyComment},{type:"method",signature:"String toString()",java:Xe.prototype._mj$toString$String$,comment:o.objectToStringComment},{type:"method",signature:"final boolean collidesWith(Shape otherShape)",native:Xe.prototype._collidesWith,comment:o.shapeCollidesWithComment}]),r(Xe,"type");let pd=Xe;class _m{constructor(t,e){r(this,"internalMouseListeners",[]);r(this,"javaMouseListeners",[]);r(this,"shapesWithImplementedMouseMethods",[]);r(this,"listeners",new Map);this.world=t,this.coordinateDiv=e}unregisterListeners(){let t=this.world.app.canvas;for(let e of["mouseup","mousedown","mousemove","mouseenter","mouseleave"])t.removeEventListener(e,this.listeners.get(e));this.internalMouseListeners=[],this.javaMouseListeners=[],this.shapesWithImplementedMouseMethods=[],this.listeners=new Map,this.coordinateDiv&&(this.coordinateDiv.style.display="none")}registerListeners(){let t=this.world.app.canvas,e=this;for(let i of["mouseup","mousedown","mousemove","mouseenter","mouseleave"]){let n=i;window.PointerEvent&&(n=n.replace("mouse","pointer"));let s;t.addEventListener(i,s=a=>{let l=t.getBoundingClientRect(),h=e.world.width*a.offsetX/l.width,c=e.world.height*a.offsetY/l.height,u=new ue(h,c);e.world.app.stage.localTransform.applyInverse(u,u),h=u.x,c=u.y,e.callShapesWithImplementedMouseMethods(i,h,c,a.button);for(let g of e.internalMouseListeners)g.onMouseEvent(i,h,c);if(e.javaMouseListeners.length>0){let g=this.world.interpreter.scheduler.createThread("mouse event thread");for(let f of e.javaMouseListeners)switch(i){case"mousedown":f._mj$onMouseDown$void$double$double$int(g,void 0,h,c,a.button);break;case"mouseup":f._mj$onMouseUp$void$double$double$int(g,void 0,h,c,a.button);break;case"mouseenter":f._mj$onMouseEnter$void$double$double(g,void 0,h,c);break;case"mouseleave":f._mj$onMouseLeave$void$double$double(g,void 0,h,c);break;case"mousemove":f._mj$onMouseMove$void$double$double(g,void 0,h,c);break}g.startIfNotEmptyOrDestroy()}this.coordinateDiv&&i=="mousemove"&&(this.coordinateDiv.textContent="("+Math.round(h)+"/"+Math.round(c)+")"),this.coordinateDiv&&i=="mouseleave"&&(this.coordinateDiv.textContent="")}),this.listeners.set(i,s),t.addEventListener("contextmenu",a=>{a.preventDefault()})}this.coordinateDiv&&(this.coordinateDiv.style.display="block")}addJavaMouseListener(t){this.javaMouseListeners.push(t)}removeJavaMouseListener(t){this.javaMouseListeners.splice(this.javaMouseListeners.indexOf(t))}removeAllListeners(){this.javaMouseListeners=[],this.shapesWithImplementedMouseMethods=[],this.internalMouseListeners=[],this.listeners=new Map}addShapeWithImplementedMouseMethods(t){this.shapesWithImplementedMouseMethods.push(t)}removeShapeWithImplementedMouseMethods(t){this.shapesWithImplementedMouseMethods.splice(this.shapesWithImplementedMouseMethods.indexOf(t),1)}callShapesWithImplementedMouseMethods(t,e,i,n){if(this.shapesWithImplementedMouseMethods.length==0)return;let s=this.world.interpreter.scheduler.createThread("mouse event thread");switch(t){case"mousedown":case"mouseup":for(let a of this.shapesWithImplementedMouseMethods){if(!a.reactToMouseEventsWhenInvisible&&!a.container.visible)continue;let l=a.mouseEventsImplemented[t];l&&(a.trackMouseMove||a._containsPoint(e,i))&&l.call(a,s,void 0,e,i,n)}break;case"mouseenter":for(let a of this.shapesWithImplementedMouseMethods){if(!a.reactToMouseEventsWhenInvisible&&!a.container.visible)continue;let l=a.mouseEventsImplemented[t];l&&a._containsPoint(e,i)&&!a.mouseLastSeenInsideObject&&(a.mouseLastSeenInsideObject=!0,l.call(a,s,void 0,e,i))}break;case"mouseleave":for(let a of this.shapesWithImplementedMouseMethods){if(!a.reactToMouseEventsWhenInvisible&&!a.container.visible)continue;let l=a.mouseEventsImplemented[t];l&&a.mouseLastSeenInsideObject&&(a.mouseLastSeenInsideObject=!1,l.call(a,s,void 0,e,i))}break;case"mousemove":for(let a of this.shapesWithImplementedMouseMethods){if(!a.reactToMouseEventsWhenInvisible&&!a.container.visible)continue;let l=a.mouseEventsImplemented.mousemove,h=a.mouseEventsImplemented.mouseenter,c=a.mouseEventsImplemented.mouseleave;if(l!=null||h!=null&&!a.mouseLastSeenInsideObject||c!=null&&a.mouseLastSeenInsideObject){let u=a._containsPoint(e,i);(a.trackMouseMove||u)&&l!=null&&l.call(a,s,void 0,e,i),u&&h!=null&&!a.mouseLastSeenInsideObject&&(a.mouseLastSeenInsideObject=!0,h.call(a,s,void 0,e,i)),!u&&c!=null&&a.mouseLastSeenInsideObject&&(a.mouseLastSeenInsideObject=!1,c.call(a,s,void 0,e,i))}}break}s.startIfNotEmptyOrDestroy()}hasMouseListeners(){return this.shapesWithImplementedMouseMethods.length>0}}const Ch=["aktionAusführen","tasteGedrückt","sondertasteGedrückt","mausGeklickt","taktImpulsAusführen","ausführen","taste","sondertaste","geklickt"];class Vb{constructor(t,e){r(this,"listeners",{aktionAusführen:[],tasteGedrückt:[],sondertasteGedrückt:[],mausGeklickt:[],ausführen:[],taste:[],sondertaste:[],geklickt:[],taktImpulsAusführen:[]});r(this,"keyToKeyCodeMap",{Enter:13,ArrowLeft:37,ArrowRight:39,ArrowUp:38,ArrowDown:40,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,PageUp:33,PageDown:34,Insert:155});r(this,"timerRunning",!1);r(this,"taktdauer",300);r(this,"remainingTime",0);r(this,"keyDownListener",(t,e,i,n)=>{this.onKeyDown(t,e,i,n)});r(this,"keyUpListener",t=>{this.onKeyUp(t)});r(this,"keyTypedListener",t=>{this.onKeyPressed(t)});r(this,"runningactThread");r(this,"tickHappenedWhenThreadNotEmpty",!1);this.interpreter=t,this.world=e,this.clear(),t.keyboardManager&&(t.keyboardManager.addKeyDownListener(this.keyDownListener),t.keyboardManager.addKeyUpListener(this.keyUpListener),t.keyboardManager.addKeyPressedListener(this.keyTypedListener)),e.mouseManager.internalMouseListeners.push(this)}onMouseEvent(t,e,i){if(t=="mouseup"){if(this.listeners.mausGeklickt.length==0)return;let n=this.interpreter.scheduler.createThread("GNG MausGeklickt event thread");for(let s of this.listeners.mausGeklickt)s._mj$MausGeklickt$void$int$int$int(n,void 0,Math.round(e),Math.round(i),1);n.state=B.running}}destroy(){this.interpreter.keyboardManager&&(this.interpreter.keyboardManager.removeKeyDownListener(this.keyDownListener),this.interpreter.keyboardManager.removeKeyUpListener(this.keyUpListener),this.interpreter.keyboardManager.removeKeyPressedListener(this.keyTypedListener))}registerEventlistener(t,e){this.listeners[e].push(t)}removeEventlistener(t,e){let i=this.listeners[e],n=i.indexOf(t);n>=0&&i.splice(n,1)}aktionenAusfuehren(t){if(this.runningactThread&&this.runningactThread.state==B.running){this.tickHappenedWhenThreadNotEmpty=!0;return}if(this.tickHappenedWhenThreadNotEmpty=!1,!(this.listeners.aktionAusführen.length==0&&this.listeners.taktImpulsAusführen.length==0&&this.listeners.ausführen.length==0)){this.runningactThread=this.interpreter.scheduler.createThread("GNG AktionAusführen method-thread");for(let e of this.listeners.aktionAusführen)e._mj$AktionAusführen$void$(this.runningactThread,void 0);for(let e of this.listeners.taktImpulsAusführen)e._mj$TaktImpulsAusführen$void$(this.runningactThread,void 0);for(let e of this.listeners.ausführen)e._mj$Ausführen$void$(this.runningactThread,void 0);this.runningactThread.programStack.length>0?(this.runningactThread.state=B.running,this.runningactThread.callbackAfterTerminated=()=>{this.tickHappenedWhenThreadNotEmpty&&this.aktionenAusfuehren(t)}):(this.interpreter.scheduler.removeThread(this.runningactThread),this.runningactThread=void 0)}}startActMethods(){}clear(){this.stopTimer(),Ch.forEach(t=>this.listeners[t]=[])}unregisterListener(t){Ch.forEach(e=>{let i=this.listeners[e],n=i.indexOf(t);n>=0&&i.splice(n,1)})}hasEventListeners(){for(let t of Ch)if(this.listeners[t].length>0)return!0;return!1}onKeyPressed(t){if(this.listeners.tasteGedrückt.length+this.listeners.taste.length>0){let i=this.interpreter.scheduler.createThread("GNG TasteGedrückt event thread");for(let n of this.listeners.tasteGedrückt)n._mj$TasteGedrückt$void$char(i,void 0,t);for(let n of this.listeners.taste)n._mj$Taste$void$char(i,void 0,t);i.state=B.running}let e=this.keyToKeyCodeMap[t];if(e&&this.listeners.sondertasteGedrückt.length+this.listeners.sondertaste.length>0){let i=this.interpreter.scheduler.createThread("GNG SondertasteGedrückt event thread");for(let n of this.listeners.sondertasteGedrückt)n._mj$SonderTasteGedrückt$void$int(i,void 0,e);for(let n of this.listeners.sondertaste)n._mj$SonderTaste$void$int(i,void 0,e);i.state=B.running}}onKeyUp(t){}onKeyDown(t,e,i,n){}stopTimer(){this.timerRunning=!1}startTimer(){this.timerRunning||(this.timerRunning=!0,this.processTimerEntries())}processTimerEntries(){if(!this.timerRunning)return;let t=10;this.remainingTime+=t,this.remainingTime>this.taktdauer&&(this.remainingTime-=this.taktdauer,this.aktionenAusfuehren(this.taktdauer));let e=this;setTimeout(()=>{e.processTimerEntries()},t)}}const Tt=class Tt extends z{constructor(){super(...arguments);r(this,"interpreter");r(this,"width",800);r(this,"height",600);r(this,"currentLeft",0);r(this,"currentTop",0);r(this,"currentWidth",800);r(this,"currentHeight",600);r(this,"app");r(this,"graphicsDiv");r(this,"resizeObserver");r(this,"gngEventlistenerManager");r(this,"defaultGroup");r(this,"shapesWhichBelongToNoGroup",[]);r(this,"shapesNotAffectedByWorldTransforms",[]);r(this,"mouseManager");r(this,"tickerFunction")}_cj$_constructor_$World$(e,i){this.interpreter=e.scheduler.interpreter,this._cj$_constructor_$World$int$int(e,i,800,600)}_cj$_constructor_$World$int$int(e,i,n,s){var f,b,A;this.interpreter=e.scheduler.interpreter;let a=this.interpreter;(f=a.graphicsManager)==null||f.registerGraphicSystem(this);let l=a.retrieveObject("WorldClass");if(l){if(this.constructor.type.identifier!="World")throw new F("Es wurde schon ein World-Objekt instanziert.");return e.s.push(l),(b=this.app)==null||b.stage.removeChildren(0,this.app.stage.children.length).forEach(S=>S.destroy()),l.changeResolution(a,n,s),i&&i(),l}let h=e.state;e.state=B.waiting,a.storeObject("WorldClass",this);let c=(A=a.graphicsManager)==null?void 0:A.graphicsDiv,u=c.getElementsByClassName("pixiWorld");for(let S=0;S0;g&&(this.graphicsDiv.style.pointerEvents="none"),this.app=new Ig,this.app.init({backgroundAlpha:g?0:1,background:"#000000",width:n,height:s,resizeTo:void 0,antialias:!0}).then(async()=>{var S,w,C;this.app.canvas.style.width="10px",this.app.canvas.style.height="10px",(S=this.graphicsDiv)==null||S.appendChild(this.app.canvas),this.resizeObserver=new ResizeObserver(()=>{this.changeResolution(a,this.width,this.height)}),this.resizeObserver.observe(this.graphicsDiv.parentElement.parentElement),this.app.stage.setFromMatrix(new Ki(1,0,0,1,0,0)),this.changeResolution(a,n,s),this.addCallbacks(a),this.tickerFunction=q=>{this.tick(Dg.shared.elapsedMS,a)},this.app.ticker.add(this.tickerFunction),this.app.ticker.maxFPS=30,this.app.ticker.minFPS=30,a.isExternalTimer=!0,this.mouseManager=new _m(this,(w=a.graphicsManager)==null?void 0:w.coordinatesDiv),this.mouseManager.registerListeners(),this.gngEventlistenerManager=new Vb(a,this),await((C=a.graphicsManager)==null?void 0:C.initPixiUserSpritesheet()),e.state=h,e.s.push(this),i&&i()})}tick(e,i){i.timerFunction(33)}addCallbacks(e){let i=()=>{e.deleteObject("WorldClass"),e.eventManager.off(i),e.eventManager.off(n),this.destroyWorld(e)},n=()=>{this.interpreter.getMain().getRepl().state!="standalone"&&(this.onProgramStopped(),e.eventManager.off(n),this.mouseManager.removeAllListeners())};e.eventManager.on("resetRuntime",i),e.eventManager.on("stop",n)}destroyWorld(e){var i,n,s;this.mouseManager.unregisterListeners(),this.interpreter.actorManager.clear(),this.gngEventlistenerManager.clear(),e.isExternalTimer=!1,(i=this.app)==null||i.destroy({removeView:!0},{}),this.app=void 0,(n=this.resizeObserver)==null||n.disconnect(),(s=this.graphicsDiv)==null||s.remove(),e.deleteObject("WorldClass")}changeResolution(e,i,n){var h,c;this.width=i,this.height=n,this.currentLeft=0,this.currentTop=0,this.currentWidth=i,this.currentHeight=n,this.app.canvas.style.width="10px",this.app.canvas.style.height="10px",(h=this.app)==null||h.renderer.resize(i,n,1);let s=this.graphicsDiv.parentElement.parentElement.getBoundingClientRect();(s.width==0||s.height==0)&&(s=this.graphicsDiv.parentElement.getBoundingClientRect());let a,l;i/n>s.width/s.height?(a=s.width,l=s.width/i*n):(l=s.height,a=s.height/n*i),l=Math.min(l,s.height),a=Math.min(a,s.width),this.app.canvas.style.width=a+"px",this.app.canvas.style.height=l+"px",(c=e.graphicsManager)==null||c.resizeGraphicsDivHeight()}onProgramStopped(){this.interpreter.deleteObject("WorldClass");const e={width:this.app.screen.width,height:this.app.screen.height,antialias:!0};let i=$h.create(e);setTimeout(()=>{this.app&&(this.app.renderer.render({container:this.app.stage,target:i,clear:!0}),setTimeout(()=>{var a;if(!this.app)return;let n=this.app.stage.children.slice();this.app.stage.removeChildren(0,n.length),n.forEach(l=>l.destroy());let s=new Vn(i);s.x=0,s.y=0,s.anchor=0,this.app.stage.setFromMatrix(new Ki),(a=this.app)==null||a.stage.addChild(s)},200))},200)}hasActors(){var e;return this.mouseManager.hasMouseListeners()||((e=this.gngEventlistenerManager)==null?void 0:e.hasEventListeners())}registerGNGEventListener(e,i){this.gngEventlistenerManager.registerEventlistener(e,i)}unRegisterGNGEventListener(e,i){this.gngEventlistenerManager.removeEventlistener(e,i)}_setBackgroundColor(e){let i=this.app.renderer;if(typeof e=="string"){let n=ze.parseColorToOpenGL(e);if(!n.color)return;i.background.color.setValue(n.color)}else i.background.color.setValue(e)}_setBackgroundColorColor(e){let i=this.app.renderer;if(e==null)throw new Kt(o.fsColorIsNullException());i.background.color=e.red*65536+e.green*256+e.blue}_rotate(e,i,n){let s=-e/180*Math.PI,a=this.app.stage,l=new Ki().copyFrom(a.localTransform);a.localTransform.identity(),a.localTransform.translate(-i,-n),a.localTransform.rotate(s),a.localTransform.translate(i,n),a.localTransform.prepend(l),a.setFromMatrix(a.localTransform),a._didLocalTransformChangeId=a._didChangeId,this.computeCurrentWorldBounds(),this.shapesNotAffectedByWorldTransforms.forEach(h=>{h._rotate(-e,i,n)})}_scale(e,i,n){if(Math.abs(e)<1e-14)return;let s=this.app.stage,a=new Ki().copyFrom(s.localTransform);s.localTransform.identity(),s.localTransform.translate(-i,-n),s.localTransform.scale(e,e),s.localTransform.translate(i,n),s.localTransform.prepend(a),s.setFromMatrix(s.localTransform),s._didLocalTransformChangeId=s._didChangeId,this.computeCurrentWorldBounds(),this.shapesNotAffectedByWorldTransforms.forEach(l=>{l._scale(1/e,i,n)})}_translate(e,i){let n=this.app.stage,s=new Ki().copyFrom(n.localTransform);n.localTransform.identity(),n.localTransform.translate(e,i),n.localTransform.prepend(s),n.setFromMatrix(n.localTransform),n._didLocalTransformChangeId=n._didChangeId,this.computeCurrentWorldBounds(),this.shapesNotAffectedByWorldTransforms.forEach(a=>{a._move(-e,-i)}),n.worldTransform.copyFrom(n.localTransform),this.shapesWhichBelongToNoGroup.forEach(a=>a.worldTransformDirty=!0)}_setCoordinateSystem(e,i,n,s){let a=this.app.stage;a.localTransform.identity(),a.localTransform.translate(-e,-i),a.localTransform.scale(this.width/n,this.height/s),a.setFromMatrix(a.localTransform),a._didLocalTransformChangeId=a._didChangeId,this.computeCurrentWorldBounds();let l=n/this.width;this.shapesNotAffectedByWorldTransforms.forEach(h=>{h._scale(l,e,i),h._move(e,i)})}_flipY(){let e=this.app.stage,i=this.currentTop+this.currentHeight/2;e.localTransform.scale(1,-1),e.localTransform.translate(0,i*2),e.setFromMatrix(e.localTransform),e._didLocalTransformChangeId=e._didChangeId,this.shapesNotAffectedByWorldTransforms.forEach(n=>{n._mirrorY(),n._setY(2*i-n._getCenterY())})}computeCurrentWorldBounds(){let e=new ue(0,0);this.app.stage.localTransform.applyInverse(e,e);let i=new ue(this.width,this.height);this.app.stage.localTransform.applyInverse(i,i),this.currentLeft=e.x,this.currentTop=e.y,this.currentWidth=Math.abs(i.x-e.x),this.currentHeight=Math.abs(i.y-e.y)}_setCursor(e){this.app.canvas.style.cursor=e}static _mj$clear$(e){var n;let i=e.scheduler.interpreter.retrieveObject("WorldClass");if(i)for(;i.shapesWhichBelongToNoGroup.length>0;)(n=i.shapesWhichBelongToNoGroup.pop())==null||n.destroy()}getIdentifier(){return"2D-World"}_follow(e,i,n,s,a,l){if(e==null)throw new F(o.shapeNullError());if(e.isDestroyed)throw new F(o.shapeAlreadyDestroyedError());let h=0,c=0,u=e._getCenterX(),g=e._getCenterY(),f=u-(this.currentLeft+this.currentWidth-i);f>0&&this.currentLeft+this.currentWidth0&&this.currentLeft>n&&(h=b);let A=g-(this.currentTop+this.currentHeight-i);A>0&&this.currentTop+this.currentHeight<=l&&(c=-A);let S=this.currentTop+i-g;if(S>0&&this.currentTop>=a&&(c=S),h!=0||c!=0){let w=this.app.stage,C=new Ki().copyFrom(w.localTransform);w.localTransform.identity(),w.localTransform.translate(h,c),w.localTransform.prepend(C),w.setFromMatrix(w.localTransform),w._didLocalTransformChangeId=w._didChangeId,this.computeCurrentWorldBounds(),this.shapesNotAffectedByWorldTransforms.forEach(q=>{q._move(-h,-c)})}}static _getWorld(e){const i=e.scheduler.interpreter.retrieveObject("WorldClass");if(i==null)throw new F(o.actorWorld2dDoesntexistException());e.s.push(i)}_getAllShapes(){return this.shapesWhichBelongToNoGroup.slice()}};r(Tt,"__javaDeclarations",[{type:"declaration",signature:"class World"},{type:"method",signature:"World()",java:Tt.prototype._cj$_constructor_$World$},{type:"method",signature:"World(int width, int height)",java:Tt.prototype._cj$_constructor_$World$int$int},{type:"method",signature:"void setBackgroundColor(Color colorAsObject)",native:Tt.prototype._setBackgroundColorColor,comment:o.worldSetBackgroundColorColorComment},{type:"method",signature:"void setBackgroundColor(int colorAsRGBInt)",native:Tt.prototype._setBackgroundColor,comment:o.world3dSetBackgroundColorIntComment},{type:"method",signature:"void setBackgroundColor(string colorAsString)",native:Tt.prototype._setBackgroundColor,comment:o.world3dSetBackgroundColorStringComment},{type:"method",signature:"void move(double dx, double dy)",native:Tt.prototype._translate,comment:o.worldMoveComment},{type:"method",signature:"void rotate(double angleInDeg, double centerX, double centerY)",native:Tt.prototype._rotate,comment:o.worldRotateComment},{type:"method",signature:"void scale(double factor, double centerX, double centerY)",native:Tt.prototype._scale,comment:o.worldScaleComment},{type:"method",signature:"void flipY()",native:Tt.prototype._flipY,comment:o.worldFlipYComment},{type:"method",signature:"void setCoordinateSystem(double left, double top, double width, double height)",native:Tt.prototype._setCoordinateSystem,comment:o.worldSetCoordinateSystemComment},{type:"method",signature:"void setCursor(string cursor)",native:Tt.prototype._setCursor,comment:o.world3dSetCursorComment},{type:"method",signature:"static void clear()",java:Tt._mj$clear$,comment:o.world3dClearComment},{type:"method",signature:"double getWidth()",template:"Math.round(§1.currentWidth)",comment:o.worldGetWidthComment},{type:"method",signature:"double getHeight()",template:"Math.round(§1.currentHeight)",comment:o.worldGetHeightComment},{type:"method",signature:"double getTop()",template:"Math.round(§1.currentTop)",comment:o.worldGetTopComment},{type:"method",signature:"double getLeft()",template:"Math.round(§1.currentLeft)",comment:o.worldGetLeftComment},{type:"method",signature:"Group getDefaultGroup()",template:"§1.defaultGroup",comment:o.worldGetDefaultGroupComment},{type:"method",signature:"void setDefaultGroup(Group defaultGroup)",template:"§1.defaultGroup = §2;",comment:o.worldSetDefaultGroupComment},{type:"method",signature:"void follow(Shape shape, double margin, double xMin, double xMax, double yMin, double yMax)",native:Tt.prototype._follow,comment:o.worldFollowComment},{type:"method",signature:"void addMouseListener(MouseListener mouseListener)",template:`§1.mouseManager.${_m.prototype.addJavaMouseListener.name}(§2);`,comment:o.world3dAddMouseListenerComment},{type:"method",signature:"Shape[] getAllShapes()",native:Tt.prototype._getAllShapes,comment:o.getAllShapesComment},{type:"method",signature:"static World getWorld()",java:Tt._getWorld,comment:o.getWorldComment}]),r(Tt,"type");let Mc=Tt;class tl extends z{constructor(e,i){super();r(this,"key","");r(this,"value","");e&&(this.key=e),i&&(this.value=i)}}r(tl,"__javaDeclarations",[{type:"declaration",signature:"class HttpHeader extends Object",comment:o.HttpHeaderComment},{type:"field",signature:"string key",comment:o.HttpHeaderKeyComment},{type:"field",signature:"string value",comment:o.HttpHeaderValueComment}]),r(tl,"type");const Hn=class Hn extends z{constructor(e,i){super();r(this,"request");r(this,"headers",[]);this.response=e,this.body=i,e&&e.headers.forEach((n,s)=>this.headers.push(new tl(s,n)))}_getUri(){return this.response.url}_getBody(){return this.body}_getStatusCode(){return this.response.status}_getStatusText(){return this.response.statusText}_getRequest(){return this.request}_getHeaders(){return this.headers.slice()}};r(Hn,"__javaDeclarations",[{type:"declaration",signature:"class HttpResponse extends Object",comment:o.HttpResponseClassComment},{type:"method",signature:"string uri()",native:Hn.prototype._getUri,comment:o.HttpResponseUriComment},{type:"method",signature:"string body()",native:Hn.prototype._getBody,comment:o.HttpResponseBodyComment},{type:"method",signature:"int statusCode()",native:Hn.prototype._getStatusCode,comment:o.HttpResponseStatusCodeComment},{type:"method",signature:"string statusText()",native:Hn.prototype._getStatusText,comment:o.HttpResponseStatusTextComment},{type:"method",signature:"HttpRequest request()",native:Hn.prototype._getRequest,comment:o.HttpResponseRequestComment},{type:"method",signature:"HttpHeader[] headers()",native:Hn.prototype._getHeaders,comment:o.HttpResponseHeadersComment}]),r(Hn,"type");let gd=Hn;const Ia=class Ia extends z{_httpClientConstructor(){return this}_mj$send$HttpResponse$HttpRequest(t,e,i){t.state=B.waiting,t.scheduler.interpreter.showProgramPointer(void 0,"HttpRequestClass");let n={};for(let s of i.headers)n[s.key]=s.value;try{fetch(i.uri,{method:i.method,body:i.method=="GET"?void 0:i.postData,headers:n,redirect:"follow",cache:"no-cache"}).then(s=>{s.text().then(a=>{let l=new gd(s,a);t.s.push(l),t.scheduler.interpreter.hideProgrampointerPosition("HttpRequestClass"),t.state==B.waiting&&(t.state=B.running,e&&e())})}).catch(s=>{throw new F(""+s)})}catch(s){throw new F(""+s)}}};r(Ia,"__javaDeclarations",[{type:"declaration",signature:"class HttpClient extends Object",comment:o.HttpClientComment},{type:"method",signature:"HttpClient()",native:Ia.prototype._httpClientConstructor,comment:o.HttpClientConstructorComment},{type:"method",signature:"HttpResponse send(HttpRequest request)",java:Ia.prototype._mj$send$HttpResponse$HttpRequest,comment:o.HttpClientSendComment}]),r(Ia,"type");let Pc=Ia;const wr=class wr extends z{constructor(){super(...arguments);r(this,"headers",[]);r(this,"uri");r(this,"postData");r(this,"method","GET")}_uri(e){return this.uri=e,this}_cj$HttpRequest$(e,i){e.s.push(this),i&&i()}_get(){return this.method="GET",this}_post(e){return this.method="POST",this.postData=e,this}_header(e,i){return this.headers.push(new tl(e,i)),this}};r(wr,"__javaDeclarations",[{type:"declaration",signature:"class HttpRequest extends Object",comment:o.HttpRequestClassComment},{type:"method",signature:"HttpRequest()",java:wr.prototype._cj$HttpRequest$,comment:o.HttpRequestConstructorComment},{type:"method",signature:"HttpRequest uri(string uri)",native:wr.prototype._uri,comment:o.HttpRequestUriComment},{type:"method",signature:"HttpRequest header(string key, string value)",native:wr.prototype._header,comment:o.HttpRequestHeaderComment},{type:"method",signature:"HttpRequest POST(string data)",native:wr.prototype._post,comment:o.HttpRequestPOSTComment},{type:"method",signature:"HttpRequest GET(string data)",native:wr.prototype._get,comment:o.HttpRequestGETComment}]),r(wr,"type");let Bc=wr;const wt=class wt extends z{constructor(e){super();r(this,"value");this.value=e}_jsonElementGetType(){return Array.isArray(this.value)?"array":typeof this.value}_getArrayValues(){if(!Array.isArray(this.value))throw new F(o.JsonElementNoArrayException());return this.value.map(e=>new wt(e))}_getAttributeValue(e){if(Array.isArray(this.value)||typeof this.value!="object")throw new F(o.JsonElementNoObjectException());return new wt(this.value[e])}_getAsString1(){if(typeof this.value!="string")throw new F(o.JsonElementNoStringExceptionComment());return this.value}_getAsString2(e){if(Array.isArray(this.value)||typeof this.value!="object")throw new F(o.JsonElementNoObjectException());if(typeof this.value[e]!="string")throw new F(o.JsonElementNoStringExceptionComment());return this.value[e]}_getAsInt1(){if(typeof this.value!="number")throw new F(o.JsonElementNoIntValueException());return Math.round(this.value)}_getAsInt2(e){if(Array.isArray(this.value)||typeof this.value!="object")throw new F(o.JsonElementNoObjectException());if(typeof this.value[e]!="number")throw new F(o.JsonElementNoIntValueException());return Math.round(this.value[e])}_getAsDouble1(){if(typeof this.value!="number")throw new F(o.JsonElementNoDoubleException());return this.value}_getAsDouble2(e){if(Array.isArray(this.value)||typeof this.value!="object")throw new F(o.JsonElementNoObjectException());if(typeof this.value[e]!="number")throw new F(o.JsonElementNoDoubleException());return this.value[e]}_getAsBoolean1(){if(typeof this.value!="boolean")throw new F(o.JsonElementNoBooleanException());return this.value}_getAsBoolean2(e){if(Array.isArray(this.value)||typeof this.value!="object")throw new F(o.JsonElementNoObjectException());if(typeof this.value[e]!="boolean")throw new F(o.JsonElementNoBooleanException());return this.value[e]}_toJson(){return JSON.stringify(this.value)}_getAttributeIdentifiers(){if(Array.isArray(this.value)||typeof this.value!="object")throw new F(o.JsonElementGetAttributeIdentifiersException());let e=[];for(const[i,n]of Object.entries(this.value))e.push(i);return e}};r(wt,"__javaDeclarations",[{type:"declaration",signature:"class JsonElement extends Object",comment:o.JsonElementClassComment},{type:"method",signature:"string getType()",native:wt.prototype._jsonElementGetType,comment:o.JsonElementGetTypeComment},{type:"method",signature:"JsonElement getAttributeValue(string identifier)",native:wt.prototype._getAttributeValue,comment:o.JsonElementGetAttributeValueComment},{type:"method",signature:"JsonElement[] getArrayValues()",native:wt.prototype._getArrayValues,comment:o.JsonElementGetArrayValuesComment},{type:"method",signature:"JsonElement getArrayValue(string identifier)",native:wt.prototype._getAttributeValue,comment:o.JsonElementGetAttributeValueComment},{type:"method",signature:"string getAsString()",native:wt.prototype._getAsString1,comment:o.JsonElementGetAsStringComment},{type:"method",signature:"string getAsString(string identifier)",native:wt.prototype._getAsString2,comment:o.JsonElementGetAsStringComment},{type:"method",signature:"int getAsInt()",native:wt.prototype._getAsInt1,comment:o.JsonElementGetAsIntComment},{type:"method",signature:"int getAsInt(string identifier)",native:wt.prototype._getAsInt2,comment:o.JsonElementGetAsIntComment},{type:"method",signature:"double getAsDouble()",native:wt.prototype._getAsDouble1,comment:o.JsonElementGetAsDoubleComment},{type:"method",signature:"double getAsDouble(string identifier)",native:wt.prototype._getAsDouble2,comment:o.JsonElementGetAsDoubleComment},{type:"method",signature:"boolean getAsBoolean()",native:wt.prototype._getAsBoolean1,comment:o.JsonElementGetAsBooleanComment},{type:"method",signature:"boolean getAsBoolean(string identifier)",native:wt.prototype._getAsBoolean2,comment:o.JsonElementGetAsBooleanComment},{type:"method",signature:"string toJson()",native:wt.prototype._toJson,comment:o.JsonElementToJsonComment},{type:"method",signature:"string[] getAttributeIdentifiers()",native:wt.prototype._getAttributeIdentifiers,comment:o.JsonElementGetAttributeIdentifiersComment}]),r(wt,"type");let fd=wt;const Do=class Do extends z{_mn$parse$JsonElement$string(t){try{let e=JSON.parse(t);return new fd(e)}catch(e){throw new F(o.JsonParserParseException(""+e))}}};r(Do,"__javaDeclarations",[{type:"declaration",signature:"class JsonParser extends Object",comment:o.JsonParserClassComment},{type:"method",signature:"static JsonElement parse(string jsonString)",native:Do.prototype._mn$parse$JsonElement$string,comment:o.JsonParserParseComment}]),r(Do,"type");let Oc=Do;class Vc extends z{}r(Vc,"__javaDeclarations",[{type:"declaration",signature:"class URLEncoder extends Object",comment:o.URLEncoderClassComment()},{type:"method",signature:"static string encode(string url)",template:"encodeURI(§1)",comment:o.URLEncoderEncodeComment}]),r(Vc,"type");class Qp{constructor(t,e){r(this,"nextStrategy");this.name=t,this.manager=e}}class Lb extends Qp{constructor(e){super("long-polling strategy",e);r(this,"isClosed");r(this,"csrfToken");r(this,"serverTimeoutMs",18e4);r(this,"timeOpened",null);r(this,"degregadeToPollingWithIntervalMs",1e4);r(this,"abortController");this.isClosed=!1}open(){this.isClosed=!1,this.abortController=new AbortController,this.timeOpened=performance.now();let e=[["content-type","text/json"]];e.push(["x-token-pm",Ue]),this.csrfToken=Ue,e.push(["x-timeout",this.serverTimeoutMs+""]);try{fetch("/servlet/registerLongpollingListener",{signal:this.abortController.signal,method:"POST",headers:e,body:JSON.stringify({})}).then(i=>{let n=Math.round(performance.now()-this.timeOpened);i.status!=200&&(console.log(`Long-polling listener got http-status: ${i.status} (${i.statusText})`),n+4e3{this.manager.onMessage(a)});break;case 502:case 504:this.reopen(s,!1);break;case 401:console.log("PushClientLongPollingStrategy: Got http status code 401, -> trying again in reopenInMs ms."),this.reopen(s,!1);break;default:this.reopen(s,!1);break}}).catch(i=>{console.log(`Long-polling listener failed due to reason: ${i}`);let n=Math.round(performance.now()-this.timeOpened),s=Math.max(10,this.degregadeToPollingWithIntervalMs-n);this.reopen(s,!1)}).finally(()=>{this.abortController=null})}catch{let n=Math.round(performance.now()-this.timeOpened),s=Math.max(10,this.degregadeToPollingWithIntervalMs-n);this.reopen(s,!1)}}reopen(e=500,i=!0){this.isClosed||(e>500&&console.log(`Reopen long-polling listener in ${e/1e3} seconds...`),setTimeout(()=>{this.isClosed||this.open()},e))}async close(){var i;this.isClosed=!0,(i=this.abortController)==null||i.abort();let e=[["content-type","text/json"]];e.push(["x-token-pm",this.csrfToken]),await fetch("/servlet/unregisterLongpollingListener",{method:"POST",headers:e,body:JSON.stringify({})})}}class Fb extends Qp{constructor(e){super("websocket strategy",e);r(this,"csrfToken");r(this,"websocket");r(this,"isClosed");r(this,"openedTimestamp");r(this,"currentTimer")}open(){this.isClosed=!1;try{let e=(window.location.protocol.startsWith("https")?"wss://":"ws://")+window.location.host+"/servlet/pushWebsocket?csrfToken="+Ue;this.websocket=new WebSocket(e),this.websocket.onopen=i=>{this.openedTimestamp=performance.now()},this.websocket.onclose=i=>{console.log("Websocket has been closed, code: "+i.code+", reason: "+i.reason),this.isClosed=!0,i.code==1001&&performance.now()-this.openedTimestamp>1e4?(console.log("Reason was timeout, dt > 10s => Reopen!"),this.open()):(this.manager.onStrategyFailed(this),this.isClosed=!0)},this.websocket.onerror=i=>{console.log("Error on websocket, type: "+i.type),this.websocket.close(),this.manager.onStrategyFailed(this),this.isClosed=!0},this.websocket.onmessage=i=>{if(i.data=="pong")return;const n=JSON.parse(i.data);this.manager.onMessage(n)},this.currentTimer!=null&&clearTimeout(this.currentTimer),this.doPing()}catch{this.manager.onStrategyFailed(this),this.isClosed=!0}}doPing(){this.currentTimer=setTimeout(()=>{!this.isClosed&&this.websocket.readyState!=WebSocket.CONNECTING?(this.doPing(),this.websocket.send("ping")):this.currentTimer=null},25e3)}async close(){this.isClosed=!0,this.websocket.close()}}class _b{constructor(t){r(this,"strategies",[]);r(this,"currentStrategy");r(this,"eventTypeToSubscriberInfoMap",new Map);this.baseURL=t,this.strategies=[new Fb(this),new Lb(this)];for(let e=this.strategies.length-2;e>=0;e--)this.strategies[e].nextStrategy=this.strategies[e+1]}subscribe(t,e){this.eventTypeToSubscriberInfoMap.set(t,{eventType:t,handler:e})}unsubscribe(t){this.eventTypeToSubscriberInfoMap.delete(t)}open(){this.currentStrategy==null&&(this.currentStrategy=this.strategies[0],console.log(`Opening ${this.currentStrategy.name}`),this.currentStrategy.open())}onMessage(t){var e;for(let i of t){if(i.eventType=="keepAlive")return;try{(e=this.eventTypeToSubscriberInfoMap.get(i.eventType))==null||e.handler(i.data)}catch{}}}onStrategyFailed(t){if(t!=this.currentStrategy)return;let e=this.currentStrategy;this.currentStrategy=this.currentStrategy.nextStrategy;let i=`${e.name} failed. `;this.currentStrategy!=null?(i+=`=> Trying ${this.currentStrategy.name} in 3 seconds...`,setTimeout(()=>{console.log(`Opening ${this.currentStrategy.name}`),this.currentStrategy.open()},3e3)):i+="It was the last resort, unfortunately this client has no means to receive push-messages from server.",console.log(i)}close(){this.currentStrategy!=null&&(this.currentStrategy.close(),this.currentStrategy=null)}}const kr=class kr extends _b{static subscribe(t,e){kr.getInstance().subscribe(t,e)}static unsubscribe(t){kr.getInstance().unsubscribe(t)}static getInstance(){return kr.instance==null&&(kr.instance=new kr("")),kr.instance}};r(kr,"instance");let Mi=kr;const _i=class _i{static registerPerformanceEntry(t,e){let i=_i.performanceData.find(s=>s.url==t);i==null&&(i={count:0,sumTime:0,url:t},_i.performanceData.push(i)),i.count++;let n=Math.round(performance.now()-e);i.sumTime+=n,_i.performanceDataCount++}static sendDataToServer(){if(performance.now()-_i.lastTimeSent>3*60*1e3){let t={data:_i.performanceData};_i.performanceData=[],_i.performanceDataCount=0,_i.lastTimeSent=performance.now(),Re("collectPerformanceData",t,()=>{})}}};r(_i,"performanceData",[]),r(_i,"performanceDataCount",0),r(_i,"lastTimeSent",performance.now());let bd=_i;var Ue="";function Re(p,t,e,i){p.startsWith("http")||(p="servlet/"+p),Na(!0);let n=performance.now(),s={};Ue!=null&&(s={"x-token-pm":Ue}),y.ajax({type:"POST",async:!0,data:JSON.stringify(t),contentType:"application/json",headers:s,url:p,success:function(a){if(bd.registerPerformanceEntry(p,n),a.csrfToken!=null&&(Ue=a.csrfToken,Mi.getInstance().open()),Na(!1),a.success!=null&&a.success==!1||typeof a=="string"&&a==""){let l="Fehler bei der Bearbeitung der Anfrage";a.message!=null&&(l=a.message),a.error!=null&&(l=a.error),l.indexOf("Not logged in")>=0,console.log("Netzwerkfehler: "+l),i&&i(l)}else e(a)},error:function(a,l){if(Na(!1),i){let h="Server nicht erreichbar.";a.status!=0&&(h=""+a.status),i(l+": "+h);return}}})}function Na(p){p?y(".jo_network-busy").show():y(".jo_network-busy").hide()}async function et(p,t){let e=[["content-type","text/json"]];Ue!=null&&e.push(["x-token-pm",Ue]),Na(!0);try{let n=await(await fetch(p,{method:"POST",headers:e,body:JSON.stringify(t)})).json();return n.token!=null&&(Ue=n.token,Mi.getInstance().open()),n==null?alert("Fehler beim Übertragen der Daten."):n.success!=!0&&alert(`Fehler beim Übertragen der Daten: `+n.message),Na(!1),n}catch(i){return Na(!1),{status:"Error",message:"Es ist ein Fehler aufgetreten: "+i}}}const Ht=class Ht extends z{_mn$print$void$string(t,e,i){i!=null&&(t.print(i,void 0),e&&e())}_mn$print$void$int(t,e,i){i!=null&&(t.print(i+"",void 0),e&&e())}_mn$print$void$double(t,e,i){i!=null&&(t.print(i+"",void 0),e&&e())}_mn$print$void$boolean(t,e,i){i!=null&&(t.print(i+"",void 0),e&&e())}_mn$println$void$string(t,e,i){i==null?t.println("",void 0):t.println(i,void 0),e&&e()}_mn$println$void$int(t,e,i){i==null?t.println("",void 0):t.println(i+"",void 0),e&&e()}_mn$println$void$double(t,e,i){i==null?t.println("",void 0):t.println(i+"",void 0),e&&e()}_mn$println$void$boolean(t,e,i){i==null?t.println("",void 0):t.println(i+"",void 0),e&&e()}_mn$println$void$Object(t,e,i){if(i==null){t.println("null",void 0),e&&e();return}else i._mj$toString$String$(t,()=>{let n=t.s.pop();n==null?t.println("null",void 0):t.println(n.value,void 0),e&&e()})}_mn$print$void$Object(t,e,i){if(i==null){t.print("null",void 0),e&&e();return}else i._mj$toString$String$(t,()=>{let n=t.s.pop();n==null?t.print("null",void 0):t.print(n.value,void 0),e&&e()})}};r(Ht,"__javaDeclarations",[{type:"declaration",signature:"class PrintStream extends Object",comment:o.PrintStreamClassComment},{type:"method",signature:"void print(char text)",java:Ht.prototype._mn$print$void$string,comment:o.PrintStreamPrintComment},{type:"method",signature:"void print(string text)",java:Ht.prototype._mn$print$void$string,comment:o.PrintStreamPrintComment},{type:"method",signature:"void print(int number)",java:Ht.prototype._mn$print$void$int,comment:o.PrintStreamPrintComment},{type:"method",signature:"void print(double number)",java:Ht.prototype._mn$print$void$double,comment:o.PrintStreamPrintComment},{type:"method",signature:"void print(boolean b)",java:Ht.prototype._mn$print$void$boolean,comment:o.PrintStreamPrintComment},{type:"method",signature:"void print(Object o)",java:Ht.prototype._mn$print$void$Object,comment:o.PrintStreamPrintComment},{type:"method",signature:"void println(char text)",java:Ht.prototype._mn$println$void$string,comment:o.PrintStreamPrintlnComment},{type:"method",signature:"void println(string text)",java:Ht.prototype._mn$println$void$string,comment:o.PrintStreamPrintlnComment},{type:"method",signature:"void println(int number)",java:Ht.prototype._mn$println$void$int,comment:o.PrintStreamPrintlnComment},{type:"method",signature:"void println(double number)",java:Ht.prototype._mn$println$void$double,comment:o.PrintStreamPrintlnComment},{type:"method",signature:"void println(boolean b)",java:Ht.prototype._mn$println$void$boolean,comment:o.PrintStreamPrintlnComment},{type:"method",signature:"void println(Object o)",java:Ht.prototype._mn$println$void$Object,comment:o.PrintStreamPrintlnComment},{type:"method",signature:"void println()",java:Ht.prototype._mn$println$void$string,comment:o.PrintStreamPrintlnComment2}]),r(Ht,"type");let yd=Ht;const dn=class dn extends z{static _mj$exit$void$int(t,e){t.state=B.terminated,t.scheduler.exit(e)}static _currentTimeMillis(){return Math.round(Date.now())+dn.deltaTimeMillis}static _currentTimeNano(){return Math.round(performance.now()*1e6)+dn.deltaTimeMillis*1e6}static synchronizeToServerTimeMillis(t){dn.deltaTimeMillis=t-performance.now()}};r(dn,"__javaDeclarations",[{type:"declaration",signature:"class System extends Object",comment:o.SystemClassComment},{type:"field",signature:"static PrintStream out",comment:o.SystemOutComment},{type:"method",signature:"static void exit(int status)",java:dn._mj$exit$void$int,comment:o.SystemExitComment},{type:"method",signature:"static int currentTimeMillis()",native:dn._currentTimeMillis,comment:o.SystemCurrentTimeMillisComment},{type:"method",signature:"static long nanoTime()",native:dn._currentTimeNano,comment:o.SystemNanoTimeComment}]),r(dn,"type"),r(dn,"deltaTimeMillis",0),r(dn,"out",new yd);let vd=dn;const Ps=class Ps extends z{constructor(e,i,n,s,a,l){super();r(this,"keyValueStore",{});r(this,"index",0);r(this,"connected",!0);this.webSocket=e,this.id=i,this.rufname=n,this.familienname=s,this.username=a,this.nickname=l}send(e,i){this.webSocket.sendToClient(this.id,e,i)}getUserData(e){return this.keyValueStore[e]||null}setUserData(e,i){this.keyValueStore[e]=i}};r(Ps,"__javaDeclarations",[{type:"declaration",signature:"class WebSocketClient extends Object",comment:o.WebSocketClientClassComment},{type:"method",signature:"void send(string message, string messageType)",native:Ps.prototype.send,comment:o.WebSocketClientSendComment},{type:"method",signature:"void setUserData(string key, Object value)",native:Ps.prototype.setUserData,comment:o.WebSocketClientSetUserDataComment},{type:"method",signature:"Object getUserData(string key)",native:Ps.prototype.getUserData,comment:o.WebSocketClientGetUserDataComment},{type:"method",signature:"string getFirstName()",template:"§1.rufname"},{type:"method",signature:"string getLastName()",template:"§1.familienname"},{type:"method",signature:"string getNickname()",template:"§1.nickname"},{type:"method",signature:"string getUserName()",template:"§1.username"},{type:"field",signature:"private string rufname"},{type:"field",signature:"private string familienname"},{type:"field",signature:"private string nickname"},{type:"field",signature:"private string username"},{type:"method",signature:"string getNumber()",template:"§1.index",comment:o.WebSocketClientGetNumberComment},{type:"method",signature:"string getIndex()",template:"§1.index",comment:o.WebSocketClientGetIndexComment}]),r(Ps,"type");let Ad=Ps;const Bt=class Bt extends z{constructor(){super(...arguments);r(this,"clientList",[]);r(this,"idToClientMap",{});r(this,"connection");r(this,"client_id",0);r(this,"isOpen",!1);r(this,"interpreter");r(this,"main");r(this,"unsentMessages",[])}_cj$_constructor_$WebSocket$(e,i){this.interpreter=e.scheduler.interpreter,this.main=this.interpreter.getMain(),e.s.push(this),i&&i()}_mj$onOpen$void$(e,i){}_mj$onClose$void$(e,i){}_mj$onMessage$void$WebSocketClient$String$String(e,i,n,s,a){}_mj$onOtherClientDisconnected$void$WebSocketClient(e,i,n){}_mj$onOtherClientConnected$void$WebSocketClient(e,i,n){}_mj$onClientsFound$void$WebSocketClient_I$int(e,i,n,s){}_mj$open$void$string$string(e,i,n,s){if(e.scheduler.interpreter.runsEmbedded())throw new F(o.WebSocketNotInEmbeddedException());e.scheduler.interpreter.showProgramPointer(void 0,"WebSocketClass"),this.main.getBottomDiv().showHideDBBusyIcon(!0),e.state=B.waiting,Re("getWebSocketToken",{},a=>{let l=(window.location.protocol.startsWith("https")?"wss://":"ws://")+window.location.host+"/servlet/websocket";this.connection=new WebSocket(l),this.connection.onerror=h=>{this.onError(h)},this.connection.onclose=h=>{this.onClose(h)},this.connection.onmessage=h=>{this.onMessage(h)},this.connection.onopen=h=>{let c={command:1,token:a.token,nickname:s,sessionCode:n};e.scheduler.interpreter.eventManager.once("stop",()=>{this._close()}),this.isOpen=!0,this.main.getBottomDiv().showHideDBBusyIcon(!1),this.sendIntern(JSON.stringify(c)),this.onOpen(),e.state=B.running}})}_close(){this.disconnect()}_getOtherClients(){return this.clientList.slice()}_findClientsFromCount(e){let i={command:6,count:e,nicknames:[]};this.sendIntern(JSON.stringify(i))}_findClientsFromNicknames(e){Array.isArray(e)||(e=[e]);let i={command:6,count:e.length,nicknames:e};this.sendIntern(JSON.stringify(i))}_sendToAll(e,i){let n={command:2,data:e,dataType:i};this.sendIntern(JSON.stringify(n))}sendIntern(e){if(!this.isOpen)this.unsentMessages.push(e);else try{this.connection.send(e)}catch(i){console.log(i)}}onClose(e){this.isOpen=!1;let i=this.interpreter.scheduler.createThread("Websocket-onOpen");this._mj$onClose$void$(i,void 0),i.state=B.running}sendToClient(e,i,n){let s={command:3,data:i,dataType:n,recipient_id:e};this.sendIntern(JSON.stringify(s))}disconnect(){let e={command:4};this.sendIntern(JSON.stringify(e)),this.connection.close()}onMessage(e){let i=JSON.parse(e.data);if(i.command!=null)switch(i.command){case 1:let n=new Ad(this,i.user_id,i.rufname,i.familienname,i.username,i.nickname);this.clientList.push(n),this.idToClientMap[i.user_id]=n;let s=this.interpreter.scheduler.createThread("Websocket-onClientConnected");this._mj$onOtherClientConnected$void$WebSocketClient(s,void 0,n),s.state=B.running;break;case 2:let a=this.idToClientMap[i.from_client_id];if(a==null)return;let l=this.interpreter.scheduler.createThread("Websocket-onMessage");this._mj$onMessage$void$WebSocketClient$String$String(l,void 0,a,new G(i.data),new G(i.dataType)),l.state=B.running;break;case 3:let h=this.idToClientMap[i.disconnecting_client_id];if(h==null)return;this.clientList.splice(this.clientList.indexOf(h),1),this.idToClientMap[i.disconnecting_client_id]=void 0;let c=this.interpreter.scheduler.createThread("Websocket-onClientDisconnected");this._mj$onOtherClientDisconnected$void$WebSocketClient(c,void 0,h),c.state=B.running;break;case 4:vd.synchronizeToServerTimeMillis(i.currentTimeMills),this.client_id=i.client_id;break;case 5:break;case 6:this.onClientsFound(i);break}}onClientsFound(e){let i=0,n=[];for(let a of e.clients)if(a.id==this.client_id)i=a.index;else{let l=this.idToClientMap[a.id];l!=null&&(l.index=a.index,n.push(l))}let s=this.interpreter.scheduler.createThread("Websocket-onClientsFound");this._mj$onClientsFound$void$WebSocketClient_I$int(s,void 0,n,i),s.state=B.running}onError(e){var i;(i=this.interpreter.printManager)==null||i.print(o.WebSocketCommunicationError()+(e==null?void 0:e.toString()),!0,3158271)}onOpen(){this.isOpen=!0,this.unsentMessages.length>0&&(this.unsentMessages.forEach(i=>this.sendIntern(i)),this.unsentMessages=[]);let e=this.interpreter.scheduler.createThread("Websocket-onOpen");this._mj$onOpen$void$(e,void 0),e.state=B.running}};r(Bt,"__javaDeclarations",[{type:"declaration",signature:"class WebSocket extends Object",comment:o.WebSocketClassComment},{type:"method",signature:"WebSocket()",java:Bt.prototype._cj$_constructor_$WebSocket$,comment:o.WebSocketConstructorComment},{type:"method",signature:"void open(string sessionCode, string nickname)",java:Bt.prototype._mj$open$void$string$string,comment:o.WebSocketOpenComment},{type:"method",signature:"void sendToAll(string message, string messageType)",native:Bt.prototype._sendToAll,comment:o.WebSocketSendToAllComment},{type:"method",signature:"void findClients(int count)",native:Bt.prototype._findClientsFromCount,comment:o.WebSocketFindClientsComment},{type:"method",signature:"void findClients(string[] nicknames)",native:Bt.prototype._findClientsFromNicknames,comment:o.WebSocketFindClientsByNicknamesComment},{type:"method",signature:"void findClient(string nicknames)",native:Bt.prototype._findClientsFromNicknames,comment:o.WebSocketFindClientComment},{type:"method",signature:"void close()",native:Bt.prototype._close,comment:o.WebSocketCloseComment},{type:"method",signature:"WebSocketClient getOtherClients()",native:Bt.prototype._getOtherClients,comment:o.WebSocketGetOtherClientsComment},{type:"method",signature:"void onOpen()",java:Bt.prototype._mj$onOpen$void$,comment:o.WebSocketOnOpenComment},{type:"method",signature:"void onClose()",java:Bt.prototype._mj$onClose$void$,comment:o.WebSocketOnCloseComment},{type:"method",signature:"void onMessage(WebSocketClient sender, String message, String messageType)",java:Bt.prototype._mj$onMessage$void$WebSocketClient$String$String,comment:o.WebSocketOnMessageComment},{type:"method",signature:"void onOtherClientConnected(WebSocketClient otherClient)",java:Bt.prototype._mj$onOtherClientConnected$void$WebSocketClient,comment:o.WebSocketOnOtherClientConnectedComment},{type:"method",signature:"void onOtherClientDisconnected(WebSocketClient otherClient)",java:Bt.prototype._mj$onOtherClientDisconnected$void$WebSocketClient,comment:o.WebSocketOnOtherClientDisconnectedComment},{type:"method",signature:"void onClientsFound(WebSocketClient[] otherClients, int ownNumber)",java:Bt.prototype._mj$onClientsFound$void$WebSocketClient_I$int,comment:o.WebSocketOnClientsFoundComment}]),r(Bt,"type");let Lc=Bt;class Sn{notifyOnAssertTrue(t,e,i,n){}notifyOnAssertFalse(t,e,i,n){}notifyOnAssertEqualsBoolean(t,e,i,n,s){}notifyOnAssertEqualsNumber(t,e,i,n,s){}notifyOnAssertEqualsString(t,e,i,n,s){}notifyOnAssertEqualsObject(t,e,i,n,s){}notifyOnFail(t,e,i){}}const jo=class jo extends z{constructor(){super()}static _assertEqualsObject(t,e,i,n,s){let a="null",l="null",h=()=>{for(let f of t.assertionObservers)f.notifyOnAssertEqualsObject(t,e,a,l,s)},c=f=>{i!=null?i._mj$toString$String$(t,()=>{a=(t.s.pop()||{value:"null"}).value,f()}):f()},u=f=>{n!=null?n._mj$toString$String$(t,()=>{l=(t.s.pop()||{value:"null"}).value,f()}):f()},g=f=>{f||c(()=>{u(()=>{h()})})};i==null||n==null?g(i==n):i._mj$equals$boolean$Object(t,()=>{g(t.s.pop())},n)}};r(jo,"__javaDeclarations",[{type:"declaration",signature:"class Assertions extends Object"},{type:"method",signature:"public static void assertCodeReached(string message)",template:`${$.registerCodeReached}(§1)`},{type:"method",signature:"public static void assertTrue(boolean condition, string message)",template:`let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Sn.prototype.notifyOnAssertTrue.name}(${L.thread}, this, _x_, _y_);}`},{type:"method",signature:"public static void assertFalse(boolean condition, string message)",template:`let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Sn.prototype.notifyOnAssertFalse.name}(${L.thread}, this, _x_, _y_);}`},{type:"method",signature:"public static void assertEquals(boolean expected, boolean actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Sn.prototype.notifyOnAssertEqualsBoolean.name}(${L.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(byte expected, byte actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Sn.prototype.notifyOnAssertEqualsNumber.name}(${L.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(int expected, int actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Sn.prototype.notifyOnAssertEqualsNumber.name}(${L.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(long expected, long actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Sn.prototype.notifyOnAssertEqualsNumber.name}(${L.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(double expected, double actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Sn.prototype.notifyOnAssertEqualsNumber.name}(${L.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(float expected, float actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Sn.prototype.notifyOnAssertEqualsNumber.name}(${L.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(char expected, char actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Sn.prototype.notifyOnAssertEqualsString.name}(${L.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(string expected, string actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Sn.prototype.notifyOnAssertEqualsString.name}(${L.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(Object expected, Object actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; ${$.classes}["Assertions"].${jo._assertEqualsObject.name}(${L.thread}, this, _x_, _y_, _z_);`},{type:"method",signature:"public static void fail(string message)",template:`let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Sn.prototype.notifyOnFail.name}(${L.thread}, this, _x_);}`}]),r(jo,"type");let Fc=jo;const In=class In extends z{static log(t){t instanceof G?console.log(t.value):console.log(t)}};r(In,"__javaDeclarations",[{type:"declaration",signature:"class Console extends Object",comment:o.ConsoleClassComment},{type:"method",signature:"static void log(int value)",native:In.log,comment:o.ConsoleLogComment},{type:"method",signature:"static void log(long value)",native:In.log,comment:o.ConsoleLogComment},{type:"method",signature:"static void log(float value)",native:In.log,comment:o.ConsoleLogComment},{type:"method",signature:"static void log(double value)",native:In.log,comment:o.ConsoleLogComment},{type:"method",signature:"static void log(char value)",native:In.log,comment:o.ConsoleLogComment},{type:"method",signature:"static void log(boolean value)",native:In.log,comment:o.ConsoleLogComment},{type:"method",signature:"static void log(Object object)",native:In.log,comment:o.ConsoleLogComment}]),r(In,"type");let _c=In;const Da=class Da extends z{static _mj$read$string$string(t,e){let i=t.scheduler.interpreter.fileManager;if(!i)throw new F("System error: Filemanager is not defined.");t.s.push(i.read(e))}static _mj$write$void$string$string(t,e,i){let n=t.scheduler.interpreter.fileManager;if(!n)throw new F("System error: Filemanager is not defined.");n.write(e,i)}static _mj$append$void$string$string(t,e,i){let n=t.scheduler.interpreter.fileManager;if(!n)throw new F("System error: Filemanager is not defined.");n.append(e,i)}};r(Da,"__javaDeclarations",[{type:"declaration",signature:"class Files extends Object",comment:o.FilesClassComment},{type:"method",signature:"static string read(string filename)",java:Da._mj$read$string$string,comment:o.FilesReadComment},{type:"method",signature:"static void write(string filename, string text)",java:Da._mj$write$void$string$string,comment:o.FilesWriteComment},{type:"method",signature:"static void append(string filename, string text)",java:Da._mj$append$void$string$string,comment:o.FilesAppendComment}]);let zc=Da;const $i=class $i extends z{static _isButtonDown(t,e){return $i.gamepadTool?$i.gamepadTool.isGamepadButtonPressed(t,e):!1}static _isConnected(t){return $i.gamepadTool?$i.gamepadTool.isGamepadConnected(t):!1}static _getAxisValue(t,e){return $i.gamepadTool?$i.gamepadTool.getGamepadAxisValue(t,e):0}};r($i,"__javaDeclarations",[{type:"declaration",signature:"class Gamepad extends Object",comment:o.GamepadClassComment},{type:"method",signature:"static boolean isButtonDown(int gamepadIndex, int buttonIndex)",native:$i._isButtonDown,comment:o.GamepadIsButtonDownComment},{type:"method",signature:"static boolean isConnected(int gamepadIndex)",native:$i._isConnected,comment:o.GamepadIsConnectedComment},{type:"method",signature:"static double getAxisValue(int gamepadIndex, int axisIndex)",native:$i._getAxisValue,comment:o.GamepadGetAxisValueComment}]),r($i,"type"),r($i,"gamepadTool",typeof window>"u"?void 0:new Rp);let qc=$i;const be=class be extends z{static addTask(t,e){t.state=B.waiting;let i=t.scheduler.interpreter,n=this.taskMap.get(i);if(n||(n=[],this.taskMap.set(i,n),i.eventManager.once("stop",()=>{this.taskMap.delete(i),i.storeObject("inputTaskRunning",!1)})),n.push(e),!i.retrieveObject("inputTaskRunning")){let s=()=>{if(n.length>0){i.storeObject("inputTaskRunning",!0);let a=n.shift();be.readInput(a,s)}else i.storeObject("inputTaskRunning",!1)};s()}}static readInput(t,e){var i,n;switch(t.thread.scheduler.interpreter.showProgramPointer(void 0,"InputClass"),t.type){case"waitForInput":(i=t.thread.scheduler.interpreter.inputManager)==null||i.readInput(t.message,t.defaultValue,t.validator,s=>{t.thread.s.push(s),t.thread.state=B.running,t.thread.scheduler.interpreter.hideProgrampointerPosition("InputClass"),e()});break;case"waitForKeys":(n=t.thread.scheduler.interpreter.inputManager)==null||n.waitForKey(t.keys,s=>{t.thread.s.push(s),t.thread.state=B.running,t.thread.scheduler.interpreter.hideProgrampointerPosition("InputClass"),e()});break}}static _mj$readString$string$string$string(t,e,i){be.addTask(t,{type:"waitForInput",thread:t,message:e,defaultValue:i,validator:n=>({convertedValue:n,errorMessage:void 0})})}static _mj$readString$string$string(t,e){be._mj$readString$string$string$string(t,e,void 0)}static _mj$readBoolean$boolean$string$boolean(t,e,i){be.addTask(t,{type:"waitForInput",thread:t,message:e,defaultValue:i+"",validator:n=>({convertedValue:n=="true",errorMessage:["true","false"].indexOf(n)<0?o.InputClassBooleanError():void 0})})}static _mj$readBoolean$boolean$string(t,e){be._mj$readBoolean$boolean$string$boolean(t,e,void 0)}static _mj$readInt$int$string$int(t,e,i){be.addTask(t,{type:"waitForInput",thread:t,message:e,defaultValue:i,validator:n=>{let s,a=Number.parseInt(n);return Number.isNaN(a)&&(s=o.InputClassIntError()),{convertedValue:a,errorMessage:s}}})}static _mj$readInt$int$string(t,e){be._mj$readInt$int$string$int(t,e,void 0)}static _mj$readFloat$float$string$float(t,e,i){be.addTask(t,{type:"waitForInput",thread:t,message:e,defaultValue:i,validator:n=>{let s,a=Number.parseFloat(n);return Number.isNaN(a)&&(s=o.InputClassFloatError()),{convertedValue:a,errorMessage:s}}})}static _mj$readFloat$float$string(t,e){be._mj$readFloat$float$string$float(t,e,void 0)}static _mj$readDouble$double$string$double(t,e,i){be.addTask(t,{type:"waitForInput",thread:t,message:e,defaultValue:i,validator:n=>{let s,a=Number.parseFloat(n);return Number.isNaN(a)&&(s=o.InputClassFloatError()),{convertedValue:a,errorMessage:s}}})}static _mj$readDouble$double$string(t,e){be._mj$readDouble$double$string$double(t,e,void 0)}static _mj$readChar$char$string$char(t,e,i){be.addTask(t,{type:"waitForInput",thread:t,message:e,defaultValue:i,validator:n=>{let s;return n.length!=1&&(s=o.InputClassCharError()),{convertedValue:n,errorMessage:s}}})}static _mj$readChar$char$string(t,e){be._mj$readChar$char$string$char(t,e,void 0)}static _mj$waitForKey$string$stringII(t,e){be.addTask(t,{type:"waitForKeys",thread:t,keys:e})}static _mj$waitForKey$string$(t){be.addTask(t,{type:"waitForKeys",thread:t,keys:void 0})}static _mj$isKeyDown$boolean$string(t,e){let i=t.scheduler.interpreter.keyboardManager;if(!i){t.s.push(!1);return}t.s.push(i.isPressed(e)??!1)}};r(be,"__javaDeclarations",[{type:"declaration",signature:"class Input extends Object",comment:o.InputClassComment},{type:"method",signature:"static string readString(string message, string defaultValue)",java:be._mj$readString$string$string$string,comment:o.InputClassReadStringComment},{type:"method",signature:"static string readString(string message)",java:be._mj$readString$string$string,comment:o.InputClassReadStringComment},{type:"method",signature:"static boolean readBoolean(string message, boolean defaultValue)",java:be._mj$readBoolean$boolean$string$boolean,comment:o.InputClassReadBooleanComment},{type:"method",signature:"static boolean readBoolean(string message)",java:be._mj$readBoolean$boolean$string,comment:o.InputClassReadBooleanComment},{type:"method",signature:"static int readInt(string message, int defaultValue)",java:be._mj$readInt$int$string$int,comment:o.InputClassReadIntComment},{type:"method",signature:"static int readInt(string message)",java:be._mj$readInt$int$string,comment:o.InputClassReadIntComment},{type:"method",signature:"static float readFloat(string message, float defaultValue)",java:be._mj$readFloat$float$string$float,comment:o.InputClassReadFloatComment},{type:"method",signature:"static float readFloat(string message)",java:be._mj$readFloat$float$string,comment:o.InputClassReadFloatComment},{type:"method",signature:"static int readDouble(string message, double defaultValue)",java:be._mj$readDouble$double$string$double,comment:o.InputClassReadDoubleComment},{type:"method",signature:"static double readDouble(string message)",java:be._mj$readDouble$double$string,comment:o.InputClassReadDoubleComment},{type:"method",signature:"static char readChar(string message, char defaultValue)",java:be._mj$readChar$char$string$char,comment:o.InputClassReadCharComment},{type:"method",signature:"static char readChar(string message)",java:be._mj$readChar$char$string,comment:o.InputClassReadCharComment},{type:"method",signature:"static string waitForKey(string... possibleKeys)",java:be._mj$waitForKey$string$stringII,comment:o.InputWaitForKeyComment},{type:"method",signature:"static string waitForKey()",java:be._mj$waitForKey$string$,comment:o.InputWaitForAnyKeyComment},{type:"method",signature:"static boolean isKeyDown(string key)",java:be._mj$isKeyDown$boolean$string,comment:o.InputIsKeyDownComment}]),r(be,"type"),r(be,"taskMap",new Map);let Wc=be;class Yp extends z{}r(Yp,"__javaDeclarations",[{type:"declaration",signature:"class Key extends Object"},{type:"field",signature:"public static final string ArrowUp",template:'"ArrowUp"',constantValue:"ArrowUp"},{type:"field",signature:"public static final string ArrowDown",template:'"ArrowDown"',constantValue:"ArrowDown"},{type:"field",signature:"public static final string ArrowLeft",template:'"ArrowLeft"',constantValue:"ArrowLeft"},{type:"field",signature:"public static final string ArrowRight",template:'"ArrowRight"',constantValue:"ArrowRight"},{type:"field",signature:"public static final string Enter",template:'"Enter"',constantValue:"Enter"},{type:"field",signature:"public static final string Space",template:'" "',constantValue:" "},{type:"field",signature:"public static final string Shift",template:'"Shift"',constantValue:"Shift"},{type:"field",signature:"public static final string Alt",template:'"Alt"',constantValue:"Alt"},{type:"field",signature:"public static final string Strg",template:'"Strg"',constantValue:"Strg"},{type:"field",signature:"public static final string PageUp",template:'"PageUp"',constantValue:"PageUp"},{type:"field",signature:"public static final string PageDown",template:'"PageDown"',constantValue:"PageDown"},{type:"field",signature:"public static final string Backspace",template:'"Backspace"',constantValue:"Backspace"},{type:"field",signature:"public static final string Escape",template:'"Escape"',constantValue:"Escape"},{type:"field",signature:"public static final string Entf",template:'"Entf"',constantValue:"Entf"},{type:"field",signature:"public static final string Einf",template:'"Einf"',constantValue:"Einf"},{type:"field",signature:"public static final string Ende",template:'"Ende"',constantValue:"Ende"}]);const Mo=class Mo extends mi{_mj$onKeyTyped$void$String(t,e,i){}};r(Mo,"__javaDeclarations",[{type:"declaration",signature:"interface KeyListener"},{type:"method",signature:"void onKeyTyped(String key)",java:Mo.prototype._mj$onKeyTyped$void$String,comment:o.KeyListenerOnKeyTypedComment}]),r(Mo,"type");let Nc=Mo;const Cr=class Cr extends z{static intersectCircleWithPolygon(t,e,i,n){let s={x:t,y:e},a=[];for(let l=0;lnew gs(l.x,l.y))}static intersectLineSegments(t,e,i,n){let s={x:0,y:0};return gm(t,e,i,n,s)?new gs(s.x,s.y):null}static polygonContainsPoint(t,e){return ys(t,e)}static distancePointToLine(t,e,i){return Hp(e,i,t)}static distancePointToLineSegment(t,e,i){return sh(e,i,t)}};r(Cr,"__javaDeclarations",[{type:"declaration",signature:"class MathTools extends Object",comment:o.MathToolsClassComment},{type:"method",signature:"static Vector2[] intersectCircleWithPolygon(double mx, double my, double r, Vector2[] polygon)",native:Cr.intersectCircleWithPolygon,comment:o.MathToolsIntersectCircleWithPolygonComment},{type:"method",signature:"static Vector2 intersectLineSegments(Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3)",native:Cr.intersectLineSegments,comment:o.MathToolsIntersectLineSegmentsComment},{type:"method",signature:"static boolean polygonContainsPoint(Vector2[] polygonPoints, Vector2 p)",native:Cr.polygonContainsPoint,comment:o.MathToolsPolygonContainsPointComment},{type:"method",signature:"static double distancePointToLine(Vector2 p, Vector2 a, Vector2 b)",native:Cr.distancePointToLine,comment:o.MathToolsDistancePointToLineComment},{type:"method",signature:"static double distancePointToLineSegment(Vector2 p, Vector2 a, Vector2 b)",native:Cr.distancePointToLineSegment,comment:o.MathToolsDistancePointToLineSegmentComment}]),r(Cr,"type");let Rc=Cr;const Bs=class Bs extends z{static addConstants(){let t=[];for(let e of Br.sounds)t.push({type:"field",signature:"static string "+e.name,constantValue:e.name,comment:e.description});return t}static playSound(t){Br.play(t)}static getVolume(){return Br.volumeDetectionRunning||Br.startDetectingVolume(),Br.getVolume()}};r(Bs,"__javaDeclarations",[{type:"declaration",signature:"class Sound extends Object",comment:o.SoundClassComment},{type:"method",signature:"static void playSound(string sound)",native:Bs.playSound,comment:o.SoundPlaySoundComment},{type:"method",signature:"static double getVolume()",native:Bs.getVolume,comment:o.SoundGetVolumeComment}].concat(Bs.addConstants())),r(Bs,"type");let Gc=Bs;const Un=class Un extends z{static _mj$clearScreen$void$(t){t.clearScreen()}static _mj$setSpeed$void$int(t,e){t.scheduler.interpreter.scheduler.state==Q.running&&t.scheduler.interpreter.setStepsPerSecond(e,e<0),t.state=B.changeSpeedRequested}static _mj$getSpeed$int$(t){t.s.push(t.scheduler.interpreter.getStepsPerSecond())}static _mj$getNumberOfProcessorCores$int$(t){t.s.push(navigator.hardwareConcurrency)}static _mj$pause$void$int(t,e){if(e<0)throw new F(o.SystemToolsPauseTimeLower0());e!=0&&(t.state=B.timedWaiting,setTimeout(()=>{t.state==B.timedWaiting&&(t.state=B.running)},e))}static _mj$getStepCount$int$(t){t.s.push(t.scheduler.stepCountSinceStartOfProgram+t.numberOfSteps+1)}static _mj$addKeyListener$void$KeyListener(t,e){var i;(i=t.scheduler.interpreter.keyboardManager)==null||i.addKeyPressedListener(n=>{let s=t.scheduler.createThread("Keyboard listener thread",[]);e._mj$onKeyTyped$void$String(s,void 0,new G(n)),s.startIfNotEmptyOrDestroy()})}};r(Un,"__javaDeclarations",[{type:"declaration",signature:"class SystemTools extends Object",comment:o.SystemToolsClassComment},{type:"method",signature:"static void clearScreen()",java:Un._mj$clearScreen$void$,comment:o.SystemToolsClearScreenComment},{type:"method",signature:"static void setSpeed(int stepsPerSecond)",java:Un._mj$setSpeed$void$int,comment:o.SystemToolsSetSpeedComment},{type:"method",signature:"static int getSpeed()",java:Un._mj$getSpeed$int$,comment:o.SystemToolsGetSpeedComment},{type:"method",signature:"static void pause(int milliseconds)",java:Un._mj$pause$void$int,comment:o.SystemToolsPauseComment},{type:"method",signature:"static int getStepCount()",java:Un._mj$getStepCount$int$,comment:o.SystemToolsGetStepCountComment},{type:"method",signature:"static void addKeyListener(KeyListener keyListener)",java:Un._mj$addKeyListener$void$KeyListener,comment:o.SystemToolsAddKeyListenerComment},{type:"method",signature:"static int getNumberOfProcessorCores()",java:Un._mj$getNumberOfProcessorCores$int$,comment:o.SystemToolsGetNumberOfProcessorCoresComment}]);let Kc=Un;const Qn=class Qn extends z{constructor(){super(...arguments);r(this,"state","running");r(this,"intervalIds",[]);r(this,"isCurrentlyRunning",[])}static _mj$repeat$void$Runnable$int(e,i,n){let s=e.scheduler.interpreter,a=s.retrieveObject(ra.TimerCountIndentifier);typeof a>"u"&&(s.eventManager.on("resetRuntime",()=>{s.deleteObject(ra.TimerCountIndentifier)}),a=0),s.storeObject(ra.TimerCountIndentifier,a+1),new Qn()._mj$repeat$void$Runnable$int(e,void 0,i,n)}static _mj$executeLater$void$Runnable$int(e,i,n){setTimeout(()=>{if([Q.running,Q.paused].indexOf(e.scheduler.state)<0)return;let s=e.scheduler.createThread("timer-thread");i._mj$run$void$(s,void 0),s.startIfNotEmptyOrDestroy()},n)}_mj$repeat$void$Runnable$int(e,i,n,s){this.intervalIds.length==0&&e.scheduler.interpreter.eventManager.once("stop",()=>{this.intervalIds.forEach(h=>clearInterval(h))});let a=this.intervalIds.length;this.isCurrentlyRunning.push(!1),this.state="running";let l=this;this.intervalIds.push(setInterval(()=>{if(e.scheduler.state==Q.running&&l.state=="running"&&!l.isCurrentlyRunning[a]){let h=e.scheduler.createThread("timer-thread");n._mj$run$void$(h,void 0),h.callbackAfterTerminated=()=>{l.isCurrentlyRunning[a]=!1},l.isCurrentlyRunning[a]=!0,h.startIfNotEmptyOrDestroy()}},s))}_pause(){this.state="paused"}_restart(){this.state="running"}};r(Qn,"__javaDeclarations",[{type:"declaration",signature:"class Timer extends Object",comment:o.TimerClassComment},{type:"method",signature:"static void executeLater(Runnable runnable, int deltaTimeMilliseconds)",java:Qn._mj$executeLater$void$Runnable$int,comment:o.TimerClassExecuteLaterComment},{type:"method",signature:"void repeat(Runnable runnable, int deltaTimeMilliseconds)",java:Qn.prototype._mj$repeat$void$Runnable$int,comment:o.TimerClassRepeatComment},{type:"method",signature:"static void repeat(Runnable runnable, int deltaTimeMilliseconds)",java:Qn._mj$repeat$void$Runnable$int,comment:o.TimerClassRepeatComment},{type:"method",signature:"void pause()",native:Qn.prototype._pause,comment:o.TimerClassPauseComment},{type:"method",signature:"void restart()",native:Qn.prototype._restart,comment:o.TimerClassRestartComment}]),r(Qn,"type");let Hc=Qn;class Ve extends z{static shuffle(t){let e=t.getElements(),i=e.length;for(let n=0;nn){i._mj$compare$int$T$T(t,()=>{if(t.s.pop()>=0){let l=a[s];a[s]=a[n],a[n]=l}e&&e()},a[n],a[s]);return}else{e&&e();return}Ve.partition(t,()=>{let l=t.s.pop();Ve.quicksort(t,()=>{Ve.quicksort(t,()=>{e&&e()},i,l+1,s,a)},i,n,l-1,a)},i,n,s,a)}static partition(t,e,i,n,s,a){let l=a[s],h=n-1,c=n,u=()=>{if(c{if(t.s.pop()<=0){h++;let g=a[h];a[h]=a[c],a[c]=g,c++,u()}else c++,u()},a[c],l);else{let g=a[h+1];a[h+1]=a[s],a[s]=g,t.s.push(h+1),e();return}};u()}}const Dn=class Dn extends z{constructor(e){super();r(this,"elements",[]);this.elements=e||[]}_mj$count$long$(e,i){e.s.push(this.elements.length),i&&i()}_mj$toArray$Object_I$(e,i){e.s.push(this.elements.slice()),i&&i()}_mj$forEach$void$Consumer(e,i,n){let s=-1,a=()=>{s++,s{if(a++,a{s.push(e.s.pop()),l()},h)}else e.s.push(new Dn(s)),i&&i()};l()}_mj$filter$Stream$Predicate(e,i,n){let s=[],a=-1,l=()=>{if(a++,a{e.s.pop()&&s.push(h),l()},h)}else e.s.push(new Dn(s)),i&&i()};l()}};r(Dn,"__javaDeclarations",[{type:"declaration",signature:"private class SystemStream implements Stream"},{type:"method",signature:"Object[] toArray()",java:Dn.prototype._mj$toArray$Object_I$},{type:"method",signature:"long count()",java:Dn.prototype._mj$count$long$},{type:"method",signature:"void forEach(Consumer action)",java:Dn.prototype._mj$forEach$void$Consumer},{type:"method",signature:"Stream filter(Predicate predicate)",java:Dn.prototype._mj$filter$Stream$Predicate},{type:"method",signature:" Stream map(Function mapper)",java:Dn.prototype._mj$map$Stream$Function}]),r(Dn,"type");let wd=Dn;const Le=class Le extends Ve{constructor(e){super();r(this,"elements",[]);this.elements=e||[]}_constructor(){return this}_mj$forEach$void$Consumer(e,i,n){let s=-1,a=()=>{s++,s{e.s.push(new G(e.s.pop())),i&&i()});return}else{e.s.push(new G(e._primitiveElementOrArrayToString(this.elements))),i&&i();return}}_iterator(){let e=new z,i=0;return e._mj$hasNext$boolean$=(n,s)=>{n.s.push(i{ithis.elements.length)throw new Pe(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements.splice(e,0,i),!0}_removeWithIndex(e){if(e<0||e>=this.elements.length)throw new Pe(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements.splice(e,1)[0]}_setWithIndex(e,i){if(e<0||e>=this.elements.length)throw new Pe(o.indexOutOfBoundsException(e,this.elements.length-1));let n=this.elements[e];return this.elements[e]=i,n}_getWithIndex(e){if(e<0||e>=this.elements.length)throw new Pe(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements[e]}_addAll(e,i,n){if(n==null)throw new Kt(o.collectionAddAllNullPointerException());if(n instanceof Ve){this.elements=this.elements.concat(n.getElements()),e.s.push(!0),i&&i();return}n._mj$toArray$Object_I$(e,()=>{let s=e.s.pop();s!=null&&Array.isArray(s)&&(this.elements=this.elements.concat(s),e.s.push(!0),i&&i())})}_addAllWithIndex(e,i,n,s){if(n<0||n>this.elements.length)throw new Pe(o.indexOutOfBoundsException(n,this.elements.length-1));if(s==null)throw new Kt(o.collectionAddAllNullPointerException());if(s instanceof Ve){this.elements.splice(n,0,...s.getElements()),e.s.push(!0),i&&i();return}s._mj$toArray$Object_I$(e,()=>{let a=e.s.pop();a!=null&&Array.isArray(a)&&(this.elements.splice(n,0,...a),e.s.push(!0),i&&i())})}_clear(){this.elements.length=0}_mj$contains$boolean$E(e,i,n){this._mj$indexOf$int$E(e,()=>{let s=e.s.pop();e.s.push(s>=0),i&&i()},n)}_mj$containsAll$boolean$Collection(e,i,n){if(n==null)throw new Kt(o.collectionContainsAllNullPointerException());let s=(a,l,h)=>{h.length>0?this._mj$contains$boolean$E(a,()=>{a.s.pop()?s(a,l,h):(a.s.push(!1),l&&l())},h.pop()):(a.s.push(!0),l&&l())};if(n instanceof Ve){let a=n.getElements().slice();s(e,i,a);return}else n._mj$toArray$Object_I$(e,()=>{let a=e.s.pop();s(e,i,a.slice())})}_isEmpty(){return this.elements.length==0}_size(){return this.elements.length}_toArray(){return this.elements.slice()}_mj$remove$boolean$E(e,i,n){this._mj$indexOf$int$E(e,()=>{let s=e.s.pop();s>=0?(this.elements.splice(s,1),e.s.push(!0)):e.s.push(!1),i&&i()},n)}_removeAll(e,i,n){if(n==null)throw new Kt(o.collectionRemoveAllNullPointerException());let s=this.elements.length,a=(l,h,c)=>{c.length>0?this._mj$remove$boolean$E(l,()=>{a(l,h,c)},c.pop()):(l.s.push(this.elements.length!=s),h&&h())};if(n instanceof Ve){let l=n.getElements().slice();a(e,i,l);return}else n._mj$toArray$Object_I$(e,()=>{let l=e.s.pop();a(e,i,l.slice())})}_mj$indexOf$int$E(e,i,n){let s=-1;if(n==null||n._mj$equals$boolean$Object==z.prototype._mj$equals$boolean$Object)s=this.elements.indexOf(n),e.s.push(s),i&&i();else{let a=0,l=()=>{if(a>=this.elements.length){e.s.push(-1),i&&i();return}else n._mj$equals$boolean$Object(e,()=>{if(e.s.pop()){e.s.push(a),i&&i();return}else a++,l()},this.elements[a])};l()}}_mj$stream$Stream$(e,i){e.s.push(new wd(this.elements)),i&&i()}_mj$sort$void$Comparator(e,i,n){Ve.sortWithComparator(e,i,n,this)}};r(Le,"__javaDeclarations",[{type:"declaration",signature:"class ArrayList implements List",comment:o.arrayListClassComment},{type:"method",signature:"ArrayList()",native:Le.prototype._constructor,comment:o.arrayListConstructorComment},{type:"method",signature:"Iterator iterator()",native:Le.prototype._iterator,comment:o.arrayListIteratorComment},{type:"method",signature:"void forEach(Consumer action)",java:Le.prototype._mj$forEach$void$Consumer,comment:o.arrayListForeachComment},{type:"method",signature:"Object[] toArray()",native:Le.prototype._toArray,template:"§1.elements.slice()",comment:o.collectionToArrayComment},{type:"method",signature:" T[] toArray(T[] a)",native:Le.prototype._toArray,template:"§1.elements.slice()",comment:o.collectionToArrayComment2},{type:"method",signature:"boolean add(E e)",native:Le.prototype._add,template:"(§1.elements.push(§2) >= 0)",comment:o.collectionAddElementComment},{type:"method",signature:"boolean addAll(Collection c)",java:Le.prototype._addAll,comment:o.collectionAddAllComment},{type:"method",signature:"void clear()",native:Le.prototype._clear,template:"§1.elements.length = 0",comment:o.collectionClearComment},{type:"method",signature:"boolean contains(E Element)",java:Le.prototype._mj$contains$boolean$E,comment:o.collectionContainsComment},{type:"method",signature:"boolean containsAll(Collection c)",java:Le.prototype._mj$containsAll$boolean$Collection,comment:o.collectionContainsAllComment},{type:"method",signature:"boolean isEmpty()",native:Le.prototype._isEmpty,template:"(§1.elements.length == 0)",comment:o.collectionIsEmptyComment},{type:"method",signature:"boolean remove(E element)",java:Le.prototype._mj$remove$boolean$E,comment:o.collectionRemoveObjectComment},{type:"method",signature:"boolean removeAll(Collection c)",java:Le.prototype._removeAll,comment:o.collectionRemoveAllComment},{type:"method",signature:"int size()",native:Le.prototype._size,template:"§1.elements.length",comment:o.collectionSizeComment},{type:"method",signature:"Stream stream()",java:Le.prototype._mj$stream$Stream$,comment:o.collectionStreamComment},{type:"method",signature:"boolean add(int index, E element)",native:Le.prototype._addWithIndex,comment:o.listAddElementComment},{type:"method",signature:"boolean addAll(int index, Collection c)",java:Le.prototype._addAllWithIndex,comment:o.listAddAllElementsComment},{type:"method",signature:"E get (int index)",native:Le.prototype._getWithIndex,comment:o.listGetComment},{type:"method",signature:"int indexOf (E Element)",java:Le.prototype._mj$indexOf$int$E,comment:o.listIndexOfComment},{type:"method",signature:"E remove (int index)",native:Le.prototype._removeWithIndex,comment:o.listRemoveComment},{type:"method",signature:"E set (int index, E Element)",native:Le.prototype._setWithIndex,comment:o.listSetComment},{type:"method",signature:"void sort(Comparator comparator)",java:Le.prototype._mj$sort$void$Comparator,comment:o.listSortComment},{type:"method",signature:"String toString()",java:Le.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Le,"type");let Oe=Le;const ja=class ja extends mi{_mj$iterator$Iterator$(t,e){}_mj$forEach$void$Consumer(t,e,i){this._mj$iterator$Iterator$(t,()=>{let n=t.s.pop(),s=()=>{n._mj$hasNext$boolean$(t,()=>{t.s.pop()?n._mj$next$E$(t,()=>{let a=t.s.pop();i._mj$accept$void$T(t,s,a)}):e&&e()})};s()})}};r(ja,"__javaDeclarations",[{type:"declaration",signature:"interface Iterable",comment:o.iterableInterfaceComment},{type:"method",signature:"Iterator iterator()",java:ja.prototype._mj$iterator$Iterator$,comment:o.iterableIteratorComment},{type:"method",signature:"default void forEach(Consumer action)",java:ja.prototype._mj$forEach$void$Consumer,comment:o.iterableForEachComment}]),r(ja,"type");let kd=ja;const ti=class ti extends kd{_mj$add$boolean$E(t,e,i){}_mj$addAll$boolean$Collection(t,e,i){}_mj$clear$void$(t,e){}_mj$contains$boolean$E(t,e,i){}_mj$containsAll$boolean$Collection(t,e,i){}_mj$isEmpty$boolean$(t,e){}_mj$remove$boolean$E(t,e,i){}_mj$removeAll$boolean$Collection(t,e,i){}_mj$size$int$(t,e){}_mj$toArray$Object_I$(t,e){}_mj$toArray$T_I$T_I(t,e,i){}_mj$stream$Stream$(t,e){}};r(ti,"__javaDeclarations",[{type:"declaration",signature:"interface Collection extends Iterable"},{type:"method",signature:"boolean add(E e)",java:ti.prototype._mj$add$boolean$E,comment:o.collectionAddElementComment},{type:"method",signature:"boolean addAll(Collection c)",java:ti.prototype._mj$addAll$boolean$Collection,comment:o.collectionAddAllComment},{type:"method",signature:"void clear()",java:ti.prototype._mj$clear$void$,comment:o.collectionClearComment},{type:"method",signature:"boolean contains(E element)",java:ti.prototype._mj$contains$boolean$E,comment:o.collectionContainsComment},{type:"method",signature:"boolean containsAll(Collection c)",java:ti.prototype._mj$containsAll$boolean$Collection,comment:o.collectionContainsAllComment},{type:"method",signature:"boolean isEmpty()",java:ti.prototype._mj$isEmpty$boolean$,comment:o.collectionIsEmptyComment},{type:"method",signature:"boolean remove(E element)",java:ti.prototype._mj$remove$boolean$E,comment:o.collectionRemoveObjectComment},{type:"method",signature:"boolean removeAll(Collection c)",java:ti.prototype._mj$removeAll$boolean$Collection,comment:o.collectionRemoveAllComment},{type:"method",signature:"int size()",java:ti.prototype._mj$size$int$,comment:o.collectionSizeComment},{type:"method",signature:"Object[] toArray()",java:ti.prototype._mj$toArray$Object_I$,comment:o.collectionToArrayComment},{type:"method",signature:" T[] toArray(T[] a)",java:ti.prototype._mj$toArray$T_I$T_I,comment:o.collectionToArrayComment2},{type:"method",signature:"Stream stream()",java:ti.prototype._mj$stream$Stream$,comment:o.collectionStreamComment}]),r(ti,"type");let ho=ti;const Ut=class Ut extends z{static shuffle(t,e){e instanceof Ve&&Ve.shuffle(e),e._mj$size$int$(t,()=>{let i=t.s.pop(),n=i*2,s=()=>{if(n>0){n--;let a=Math.floor(Math.random()*i),l=Math.floor(Math.random()*i);e._mj$get$E$int(t,()=>{let h=t.s.pop();e._mj$get$E$int(t,()=>{let c=t.s.pop();e._mj$set$E$int$E(t,()=>{e._mj$set$E$int$E(t,()=>{s()},l,h)},a,c)},l)},a)}};i>1&&s()})}static shuffleIterative(t,e){if(e instanceof Ve){Ve.shuffle(e);return}if(!Ut.shuffleProgram){Ut.shuffleProgram=new qr(Ut.type.module,void 0,"Collections.shuffle"),Ut.shuffleProgram.numberOfParameters=1,Ut.shuffleProgram.numberOfThisObjects=0;let i=0,n=i++,s=i++,a=i++,l=i++,h=i++,c=i++,u=i++;Ut.shuffleProgram.numberOfLocalVariables=i,Ut.shuffleProgram.addCompiledSteps([(g,f,b)=>(g.s[b+n]._mj$size$int$(g,void 0),1),(g,f,b)=>(g.s[b+s]=g.s.pop(),g.s[b+a]=g.s[b+s]*2,2),(g,f,b)=>g.s[b+a]<=0?6:(g.s[b+l]=Math.floor(Math.random()*g.s[b+s]),g.s[b+h]=Math.floor(Math.random()*g.s[b+s]),g.s[b+n]._mj$get$E$int(g,void 0,g.s[b+l]),3),(g,f,b)=>(g.s[b+c]=g.s.pop(),g.s[b+n]._mj$get$E$int(g,void 0,g.s[b+h]),4),(g,f,b)=>(g.s[b+u]=g.s.pop(),g.s[b+n]._mj$set$E$int$E(g,void 0,g.s[b+l],g.s[b+u]),5),(g,f,b)=>(g.s[b+n]._mj$set$E$int$E(g,void 0,g.s[b+h],g.s[b+c]),g.s[b+a]--,2),(g,f,b)=>(g.return(void 0),7)])}t.s.push(e),t.pushProgram(Ut.shuffleProgram,()=>{})}static sortListWithComparator(t,e,i){if(e instanceof Ve){Ve.sortWithComparator(t,void 0,i,e);return}e._mj$sort$void$Comparator(t,void 0,i)}static sortComparableList(t,e){let i={_mj$compare$int$T$T:function(n,s,a,l){if(a==null){n.s.push(1),s&&s();return}if(l==null){n.s.push(-1),s&&s();return}a._mj$compareTo$int$T(n,s,l)}};Ut.sortListWithComparator(t,e,i)}};r(Ut,"__javaDeclarations",[{type:"declaration",signature:"class Collections extends Object",comment:o.CollectionsClassComment},{type:"method",signature:"static void shuffle(List list)",java:Ut.shuffleIterative,comment:o.CollectionsShuffleComment},{type:"method",signature:"static void sort(List list)",java:Ut.sortComparableList,comment:o.CollectionsSortComparableListComment},{type:"method",signature:"static void sort(List list, Comparator comparator)",java:Ut.sortListWithComparator,comment:o.CollectionsSortComparableListComment}]),r(Ut,"type"),r(Ut,"shuffleProgram");let Uc=Ut;const Po=class Po extends mi{_mj$compareTo$int$T(t,e,i){}};r(Po,"__javaDeclarations",[{type:"declaration",signature:"interface Comparable",comment:o.comparableInterfaceComment},{type:"method",signature:"int compareTo(T object)",java:Po.prototype._mj$compareTo$int$T,comment:o.comparableCompareToComment}]),r(Po,"type");let Qc=Po;const Bo=class Bo extends mi{_mj$compare$int$T$T(t,e,i,n){}};r(Bo,"__javaDeclarations",[{type:"declaration",signature:"interface Comparator",comment:o.comparatorInterfaceComment},{type:"method",signature:"int compare(T object1, T object2)",java:Bo.prototype._mj$compare$int$T$T,comment:o.compataratorCompareComment}]),r(Bo,"type");let Yc=Bo;const Jr=class Jr extends ho{_mj$remove$E$(t,e){}_mj$poll$E$(t,e){}_mj$peek$E$(t,e){}_mj$offer$boolean$E(t,e){}};r(Jr,"__javaDeclarations",[{type:"declaration",signature:"interface Queue extends Collection",comment:o.queueInterfaceComment},{type:"method",signature:"E remove()",java:Jr.prototype._mj$remove$E$,comment:o.queueRemoveComment},{type:"method",signature:"E poll()",java:Jr.prototype._mj$poll$E$,comment:o.queuePollComment},{type:"method",signature:"E peek()",java:Jr.prototype._mj$peek$E$,comment:o.queuePeekComment},{type:"method",signature:"boolean offer(E element)",java:Jr.prototype._mj$offer$boolean$E,comment:o.queueOfferComment}]),r(Jr,"type");let Cd=Jr;const gi=class gi extends Cd{_mj$removeFirstOccurrence$boolean$E(t,e,i){}_mj$removeLastOccurrence$boolean$E(t,e,i){}_mj$addFirst$void$E(t,e,i){}_mj$addLast$void$E(t,e,i){}_mj$removeFirst$E$(t,e){}_mj$removeLast$E$(t,e){}_mj$peekFirst$E$(t,e){}_mj$peekLast$E$(t,e){}_mj$pop$E$(t,e){}_mj$push$void$E(t,e,i){}_mj$descendingIterator$Iterator$(t,e){}};r(gi,"__javaDeclarations",[{type:"declaration",signature:"interface Deque extends Queue",comment:o.dequeInterfaceComment},{type:"method",signature:"boolean removeFirstOccurrence(E element)",java:gi.prototype._mj$removeFirstOccurrence$boolean$E,comment:o.dequeRemoveFirstOccurrenceComment},{type:"method",signature:"boolean removeLastOccurrence(E element)",java:gi.prototype._mj$removeLastOccurrence$boolean$E,comment:o.dequeRemoveLastOccurrenceComment},{type:"method",signature:"void addFirst(E element)",java:gi.prototype._mj$addFirst$void$E,comment:o.dequeAddFirstComment},{type:"method",signature:"void addLast(E element)",java:gi.prototype._mj$addLast$void$E,comment:o.dequeAddLastComment},{type:"method",signature:"E removeFirst()",java:gi.prototype._mj$removeFirst$E$,comment:o.dequeRemoveFirstComment},{type:"method",signature:"E removeLast()",java:gi.prototype._mj$removeLast$E$,comment:o.dequeRemoveLastComment},{type:"method",signature:"E peekFirst()",java:gi.prototype._mj$peekFirst$E$,comment:o.dequePeekFirstComment},{type:"method",signature:"E peekLast()",java:gi.prototype._mj$peekLast$E$,comment:o.dequePeekLastComment},{type:"method",signature:"E pop()",java:gi.prototype._mj$pop$E$,comment:o.dequePopComment},{type:"method",signature:"void push(E element)",java:gi.prototype._mj$push$void$E,comment:o.dequePushComment},{type:"method",signature:"Iterator descendingIterator()",java:gi.prototype._mj$descendingIterator$Iterator$,comment:o.dequeDescendingIteratorComment}]),r(gi,"type");let Zc=gi;class il extends F{constructor(){super(o.emptyStackException());r(this,"stacktrace",[])}}r(il,"__javaDeclarations",[{type:"declaration",signature:"class EmptyStackException extends RuntimeException"},{type:"method",signature:"public EmptyStackException()",native:Oi.prototype._constructor},{type:"method",signature:"public EmptyStackException(String message)",native:Te.prototype._constructor_m},{type:"method",signature:"public EmptyStackException(Throwable cause)",native:Te.prototype._constructor_c},{type:"method",signature:"public EmptyStackException(String message, Throwable cause)",native:Te.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:Te.prototype._toString}]),r(il,"type");const $t=class $t extends z{constructor(e){super();r(this,"map");this.map=e||new Map}_constructor(){return this}_mj$contains$boolean$E(e,i,n){if(n==null)e.s.push(typeof this.map.get(null)<"u");else{let s=n.__internalHashCode();e.s.push(typeof this.map.get(s)<"u")}i&&i()}_mj$containsAll$boolean$Collection(e,i,n){if(n==null)throw new Kt(o.collectionContainsAllNullPointerException());let s=(a,l,h)=>{h.length>0?this._mj$contains$boolean$E(a,()=>{a.s.pop()?s(a,l,h):(a.s.push(!1),l&&l())},h.pop()):(a.s.push(!0),l&&l())};if(n instanceof Ve){let a=n.getElements().slice();s(e,i,a);return}else n._mj$toArray$Object_I$(e,()=>{let a=e.s.pop();s(e,i,a.slice())})}_add(e){if(e==null){let i=this.map.get(null);return this.map.set(null,e),typeof i>"u"}else{let i=e.__internalHashCode(),n=this.map.get(i);return this.map.set(i,e),typeof n>"u"}}_mj$addAll$boolean$Collection(e,i,n){if(n==null)throw new Kt(o.collectionAddAllNullPointerException());if(n instanceof Ve){n.getElements().forEach(s=>this._add(s)),e.s.push(!0),i&&i();return}n._mj$toArray$Object_I$(e,()=>{let s=e.s.pop();s!=null&&Array.isArray(s)&&(s.forEach(a=>this._add(a)),e.s.push(!0),i&&i())})}_mj$remove$boolean$E(e,i,n){if(n==null){let s=this.map.get(null);e.s.push(typeof s>"u"),this.map.delete(null)}else{let s=n.__internalHashCode(),a=this.map.get(s);e.s.push(typeof a>"u"),this.map.delete(s)}i&&i()}_mj$removeAll$boolean$Collection(e,i,n){if(n==null)throw new Kt(o.collectionAddAllNullPointerException());if(n instanceof Ve){n.getElements().forEach(s=>this._mj$remove$boolean$E(e,void 0,s)),e.s.push(!0),i&&i();return}n._mj$toArray$Object_I$(e,()=>{let s=e.s.pop();s!=null&&Array.isArray(s)&&(s.forEach(a=>this._mj$remove$boolean$E(e,void 0,a)),e.s.push(!0),i&&i())})}toArray(){let e=[];for(let i of this.map.values())e.push(i);return e}_mj$toArray$Object_I$(e,i){e.s.push(this.toArray()),i&&i()}_mj$toArray$T_I$T_I(e,i,n){this._mj$toArray$Object_I$(e,i)}_mj$size$int$(e,i){e.s.push(this.map.size),i&&i()}_mj$isEmpty$boolean$(e,i){e.s.push(this.map.size==0),i&&i()}_mj$clear$void$(e,i){this.map.clear()}_mj$iterator$Iterator$(e,i){let n=new z,s=0,a=this.toArray();n._mj$hasNext$boolean$=(l,h)=>{l.s.push(s{s{s++,sn.push(a)),n.length==0){e.s.push("[]"),i&&i();return}let s=n[0];if(typeof s=="object"||Array.isArray(s)||s==null){e._arrayOfObjectsToString(n,()=>{e.s.push(new G(e.s.pop())),i&&i()});return}else{e.s.push(new G(e._primitiveElementOrArrayToString(n))),i&&i();return}}};r($t,"__javaDeclarations",[{type:"declaration",signature:"class HashSet implements Set",comment:o.hashSetClassComment},{type:"method",signature:"HashSet()",native:$t.prototype._constructor,comment:o.hashSetConstructorComment},{type:"method",signature:"Iterator iterator()",java:$t.prototype._mj$iterator$Iterator$,comment:o.iterableIteratorComment},{type:"method",signature:"void forEach(Consumer action)",java:$t.prototype._mj$forEach$void$Consumer,comment:o.iterableForEachComment},{type:"method",signature:"boolean add(E e)",native:$t.prototype._add,comment:o.collectionAddElementComment},{type:"method",signature:"boolean addAll(Collection c)",java:$t.prototype._mj$addAll$boolean$Collection,comment:o.collectionAddAllComment},{type:"method",signature:"void clear()",java:$t.prototype._mj$clear$void$,comment:o.collectionClearComment},{type:"method",signature:"boolean contains(E element)",java:$t.prototype._mj$contains$boolean$E,comment:o.collectionContainsComment},{type:"method",signature:"boolean containsAll(Collection c)",java:$t.prototype._mj$containsAll$boolean$Collection,comment:o.collectionContainsAllComment},{type:"method",signature:"boolean isEmpty()",java:$t.prototype._mj$isEmpty$boolean$,comment:o.collectionIsEmptyComment},{type:"method",signature:"boolean remove(E element)",java:$t.prototype._mj$remove$boolean$E,comment:o.collectionRemoveObjectComment},{type:"method",signature:"boolean removeAll(Collection c)",java:$t.prototype._mj$removeAll$boolean$Collection,comment:o.collectionRemoveAllComment},{type:"method",signature:"int size()",java:$t.prototype._mj$size$int$,comment:o.collectionSizeComment},{type:"method",signature:"Object[] toArray()",java:$t.prototype._mj$toArray$Object_I$,comment:o.collectionToArrayComment},{type:"method",signature:" T[] toArray(T[] a)",java:$t.prototype._mj$toArray$T_I$T_I,comment:o.collectionToArrayComment2},{type:"method",signature:"String toString()",java:$t.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r($t,"type");let Sd=$t;const Ot=class Ot extends z{constructor(){super(...arguments);r(this,"map",new Map)}_constructor(){return this}_size(){return this.map.size}_isEmpty(){return this.map.size==0}_containsKey(e){if(e==null)return typeof this.map.get(null)<"u";{let i=e.__internalHashCode();return typeof this.map.get(i)<"u"}}_values(){let e=[];return this.map.forEach((i,n)=>e.push(i.v)),e}_containsValue(e){let i=!1;for(let n of this.map.values())if(n.v==e){i=!0;break}return i}_get(e){var i,n;if(e==null)return((i=this.map.get(null))==null?void 0:i.v)||null;{let s=e.__internalHashCode();return((n=this.map.get(s))==null?void 0:n.v)||null}}_put(e,i){if(e==null){let n=this.map.get(null)||null;return this.map.set(null,{k:null,v:i}),n}else{let n=e.__internalHashCode(),s=this.map.get(n);return this.map.set(n,{k:e,v:i}),s}}_clear(){this.map.clear()}_mj$forEach$void$BiConsumer(e,i,n){let s=-1,a=[];this.map.forEach((h,c)=>a.push(h));let l=()=>{s++,s{n._add(s.k)}),e.s.push(n)}_mj$toString$String$(e,i){let n=[];this.map.forEach((c,u)=>n.push(c));let s="[",a=-1,l,h=(c,u)=>{s+=" = ",c==null?(s+="null",l(u)):c._mj$toString$String$(e,()=>{s+=e.s.pop().value+"}",l(u)})};l=c=>{if(a++,a>=n.length){s+="]",c();return}let u=n[a];a>0&&(s+=", "),s+="{",u.k==null?(s+="null",h(u.v,c)):u.k._mj$toString$String$(e,()=>{s+=e.s.pop().value,h(u.v,c)})},l(()=>{e.s.push(new G(s)),i&&i()})}_mj$remove$V$K(e,i,n){let s,a;n==null?s=this.map.get(null):(a=n.__internalHashCode(),s=this.map.get(a)),typeof s<"u"&&(this.map.delete(a),e.s.push(s.v),i&&i()),e.s.push(null),i&&i()}_mj$remove$boolean$K$V(e,i,n,s){let a,l;if(n==null?a=this.map.get(null):(l=n.__internalHashCode(),a=this.map.get(l)),typeof a<"u"){let h=a.v;if(h==null){s==null&&this.map.delete(l),e.s.push(s==null),i&&i();return}h._mj$equals$boolean$Object(e,()=>{const c=e.s.pop();c&&this.map.delete(l),e.s.push(c),i&&i()},s);return}e.s.push(!1),i&&i()}};r(Ot,"__javaDeclarations",[{type:"declaration",signature:"class HashMap implements Map",comment:o.hashMapClassComment},{type:"method",signature:"HashMap()",native:Ot.prototype._constructor,comment:o.hashMapConstructorComment},{type:"method",signature:"int size()",native:Ot.prototype._size,comment:o.mapSizeComment},{type:"method",signature:"boolean isEmpty()",native:Ot.prototype._isEmpty,comment:o.mapIsEmptyComment},{type:"method",signature:"boolean containsKey(K key)",native:Ot.prototype._containsKey,comment:o.mapContainsKeyComment},{type:"method",signature:"boolean containsValue(V value)",native:Ot.prototype._containsValue,comment:o.mapContainsValueComment},{type:"method",signature:"V get(K key)",native:Ot.prototype._get,comment:o.mapGetComment},{type:"method",signature:"V put(K key, V value)",native:Ot.prototype._put,comment:o.mapPutComment},{type:"method",signature:"void clear()",native:Ot.prototype._clear,comment:o.mapClearComment},{type:"method",signature:"void forEach(BiConsumer action)",java:Ot.prototype._mj$forEach$void$BiConsumer,comment:o.mapForeachComment},{type:"method",signature:"Collection values()",java:Ot.prototype._mj$values$Collection$,comment:o.mapValuesComment},{type:"method",signature:"Set keySet()",java:Ot.prototype._mj$keySet$Set$,comment:o.mapKeySetComment},{type:"method",signature:"V remove(K key)",java:Ot.prototype._mj$remove$V$K,comment:o.mapRemoveComment1},{type:"method",signature:"boolean remove(K key, V value)",java:Ot.prototype._mj$remove$boolean$K$V,comment:o.mapRemoveComment1},{type:"method",signature:"String toString()",java:Ot.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Ot,"type");let Xc=Ot;const Ma=class Ma extends mi{_mj$hasNext$boolean$(t,e){}_mj$next$E$(t,e){}};r(Ma,"__javaDeclarations",[{type:"declaration",signature:"interface Iterator",comment:o.iteratorInterfaceComment},{type:"method",signature:"boolean hasNext()",java:Ma.prototype._mj$hasNext$boolean$,comment:o.iteratorHasNextComment},{type:"method",signature:"E next()",java:Ma.prototype._mj$next$E$,comment:o.iteratorNextComment}]),r(Ma,"type");let Jc=Ma;const ce=class ce extends z{constructor(){super(...arguments);r(this,"elements",[])}_constructor(){return this}_mj$remove$E$(e,i){if(this.elements.length==0)throw new F(o.linkedListIsEmptyError());e.s.push(this.elements.shift()),i&&i()}_mj$poll$E$(e,i){this.elements.length==0?e.s.push(null):e.s.push(this.elements.shift()),i&&i()}_mj$peek$E$(e,i){this.elements.length==0?e.s.push(null):e.s.push(this.elements[0]),i&&i()}_mj$removeFirstOccurrence$boolean$E(e,i,n){let s=-1;if(n==null||n._mj$equals$boolean$Object==z.prototype._mj$equals$boolean$Object)s=this.elements.indexOf(n),s<0?e.s.push(!1):(this.elements.splice(s,1),e.s.push(!0)),i&&i();else{let a=0,l=()=>{if(a>=this.elements.length){e.s.push(!1),i&&i();return}else n._mj$equals$boolean$Object(e,()=>{if(e.s.pop()){this.elements.splice(a,1),e.s.push(!0),i&&i();return}else a++,l()},this.elements[a])};l()}}_mj$removeLastOccurrence$boolean$E(e,i,n){let s=-1;if(n==null||n._mj$equals$boolean$Object==z.prototype._mj$equals$boolean$Object)s=this.elements.lastIndexOf(n),s<0?e.s.push(!1):(this.elements.splice(s,1),e.s.push(!0)),i&&i();else{let a=this.elements.length-1,l=()=>{if(a<0){e.s.push(!1),i&&i();return}else n._mj$equals$boolean$Object(e,()=>{if(e.s.pop()){this.elements.splice(a,1),e.s.push(!0),i&&i();return}else a--,l()},this.elements[a])};l()}}_mj$addFirst$void$E(e,i,n){this.elements.unshift(n),i&&i()}_mj$addLast$void$E(e,i,n){this.elements.push(n),i&&i()}_mj$removeFirst$E$(e,i){if(this.elements.length==0)throw new F(o.linkedListIsEmptyError());e.s.push(this.elements.shift()),i&&i()}_mj$removeLast$E$(e,i){if(this.elements.length==0)throw new F(o.linkedListIsEmptyError());e.s.push(this.elements.pop()),i&&i()}_mj$peekFirst$E$(e,i){this.elements.length==0?e.s.push(null):e.s.push(this.elements[0]),i&&i()}_mj$peekLast$E$(e,i){this.elements.length==0?e.s.push(null):e.s.push(this.elements[this.elements.length-1]),i&&i()}_mj$pop$E$(e,i){if(this.elements.length==0)throw new F(o.linkedListIsEmptyError());e.s.push(this.elements.pop()),i&&i()}_mj$push$void$E(e,i,n){this.elements.push(n),i&&i()}_mj$descendingIterator$Iterator$(e,i){let n=new z,s=this.elements.length-1;n._mj$hasNext$boolean$=(a,l)=>{a.s.push(s>=0),l&&l()},n._mj$next$E$=(a,l)=>{s>=0&&s--,a.s.push(this.elements[s+1]),l&&l()},e.s.push(n),i&&i()}_mj$forEach$void$Consumer(e,i,n){let s=-1,a=()=>{s++,s{e.s.push(new G(e.s.pop())),i&&i()});return}else{e.s.push(new G(e._primitiveElementOrArrayToString(this.elements))),i&&i();return}}_iterator(){let e=new z,i=0;return e._mj$hasNext$boolean$=(n,s)=>{n.s.push(i{i{let s=e.s.pop();s!=null&&Array.isArray(s)&&(this.elements=this.elements.concat(s),e.s.push(!0),i&&i())})}_clear(){this.elements.length=0}_mj$contains$boolean$Object(e,i,n){this._mj$indexOf$int$E(e,()=>{let s=e.s.pop();e.s.push(s>=0),i&&i()},n)}_mj$containsAll$boolean$Collection(e,i,n){if(n==null)throw new Kt("ArrayList.containsAll wurde mit null als Argument aufgerufen.");let s=(a,l,h)=>{h.length>0?this._mj$contains$boolean$Object(a,()=>{a.s.pop()?s(a,l,h):(a.s.push(!1),l&&l())},h.pop()):(a.s.push(!0),l&&l())};if(n instanceof Ve){let a=n.getElements().slice();s(e,i,a);return}else n._mj$toArray$Object_I$(e,()=>{let a=e.s.pop();s(e,i,a.slice())})}_isEmpty(){return this.elements.length==0}_mj$remove$boolean$E(e,i,n){this._mj$indexOf$int$E(e,()=>{let s=e.s.pop();s>=0?(this.elements.splice(s,1),e.s.push(!0)):e.s.push(!1),i&&i()},n)}_mj$indexOf$int$E(e,i,n){let s=-1;if(n==null||n._mj$equals$boolean$Object==z.prototype._mj$equals$boolean$Object)s=this.elements.indexOf(n),e.s.push(s),i&&i();else{let a=0,l=()=>{if(a>=this.elements.length){e.s.push(-1),i&&i();return}else n._mj$equals$boolean$Object(e,()=>{if(e.s.pop()){e.s.push(a),i&&i();return}else a++,l()},this.elements[a])};l()}}_size(){return this.elements.length}_toArray(){return this.elements.slice()}_removeAll(e,i,n){if(n==null)throw new Kt("LinkedList.removeAll wurde mit null als Argument aufgerufen.");if(n instanceof Ve){let s=this.elements.length,a=n.getElements();this.elements=this.elements.filter(l=>a.indexOf(l)<0),e.s.push(this.elements.length!=s),i&&i();return}n._mj$toArray$Object_I$(e,()=>{let s=e.s.pop(),a=this.elements.length;s!=null&&Array.isArray(s)&&(this.elements=this.elements.filter(l=>s.indexOf(l)<0),e.s.push(this.elements.length!=a),i&&i())})}getElements(){return this.elements}_addWithIndex(e,i){if(e<0||e>this.elements.length)throw new Pe(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements.splice(e,0,i),!0}_removeWithIndex(e){if(e<0||e>=this.elements.length)throw new Pe(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements.splice(e,1)[0]}_setWithIndex(e,i){if(e<0||e>=this.elements.length)throw new Pe(o.indexOutOfBoundsException(e,this.elements.length-1));let n=this.elements[e];return this.elements[e]=i,n}_getWithIndex(e){if(e<0||e>=this.elements.length)throw new Pe(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements[e]}_mj$sort$void$Comparator(e,i,n){Ve.sortWithComparator(e,i,n,this)}};r(ce,"__javaDeclarations",[{type:"declaration",signature:"class LinkedList implements Deque"},{type:"method",signature:"LinkedList()",native:ce.prototype._constructor,comment:o.linkedListConstructorComment},{type:"method",signature:"Iterator iterator()",native:ce.prototype._iterator,comment:o.iterableIteratorComment},{type:"method",signature:"void forEach(Consumer action)",java:ce.prototype._mj$forEach$void$Consumer,comment:o.iterableForEachComment},{type:"method",signature:"Object[] toArray()",native:ce.prototype._toArray,template:"§1.elements.slice()",comment:o.collectionToArrayComment},{type:"method",signature:" T[] toArray(T[] a)",native:ce.prototype._toArray,template:"§1.elements.slice()",comment:o.collectionToArrayComment2},{type:"method",signature:"boolean add(E e)",native:ce.prototype._add,template:"(§1.elements.push(§2) >= 0)",comment:o.collectionAddElementComment},{type:"method",signature:"boolean addAll(Collection c)",java:ce.prototype._addAll,comment:o.collectionAddAllComment},{type:"method",signature:"void clear()",native:ce.prototype._clear,template:"§1.elements.length = 0",comment:o.collectionClearComment},{type:"method",signature:"boolean contains(E Element)",java:ce.prototype._mj$contains$boolean$Object,comment:o.collectionContainsComment},{type:"method",signature:"boolean containsAll(Collection c)",java:ce.prototype._mj$containsAll$boolean$Collection,comment:o.collectionContainsAllComment},{type:"method",signature:"boolean isEmpty()",native:ce.prototype._isEmpty,template:"(§1.elements.length == 0)",comment:o.collectionIsEmptyComment},{type:"method",signature:"boolean remove(E element)",java:ce.prototype._mj$remove$boolean$E,comment:o.collectionRemoveObjectComment},{type:"method",signature:"boolean removeAll(Collection c)",java:ce.prototype._removeAll,comment:o.collectionRemoveAllComment},{type:"method",signature:"int size()",native:ce.prototype._size,template:"§1.elements.length",comment:o.collectionSizeComment},{type:"method",signature:"E remove()",java:ce.prototype._mj$remove$E$,comment:o.queueRemoveComment},{type:"method",signature:"E poll()",java:ce.prototype._mj$poll$E$,comment:o.queuePollComment},{type:"method",signature:"E peek()",java:ce.prototype._mj$peek$E$,comment:o.queuePeekComment},{type:"method",signature:"boolean offer(E element)",native:ce.prototype._add,template:"(§1.elements.push(§2) >= 0)",comment:o.queueOfferComment},{type:"method",signature:"boolean removeFirstOccurrence(E element)",java:ce.prototype._mj$removeFirstOccurrence$boolean$E,comment:o.dequeRemoveFirstOccurrenceComment},{type:"method",signature:"boolean removeLastOccurrence(E element)",java:ce.prototype._mj$removeLastOccurrence$boolean$E,comment:o.dequeRemoveLastOccurrenceComment},{type:"method",signature:"void addFirst(E element)",java:ce.prototype._mj$addFirst$void$E,comment:o.dequeAddFirstComment},{type:"method",signature:"void addLast(E element)",java:ce.prototype._mj$addLast$void$E,comment:o.dequeAddLastComment},{type:"method",signature:"E removeFirst()",java:ce.prototype._mj$removeFirst$E$,comment:o.dequeRemoveFirstComment},{type:"method",signature:"E removeLast()",java:ce.prototype._mj$removeLast$E$,comment:o.dequeRemoveLastComment},{type:"method",signature:"E peekFirst()",java:ce.prototype._mj$peekFirst$E$,comment:o.dequePeekFirstComment},{type:"method",signature:"E peekLast()",java:ce.prototype._mj$peekLast$E$,comment:o.dequePeekLastComment},{type:"method",signature:"E pop()",java:ce.prototype._mj$pop$E$,comment:o.dequePopComment},{type:"method",signature:"void push(E element)",java:ce.prototype._mj$push$void$E,comment:o.dequePushComment},{type:"method",signature:"Iterator descendingIterator()",java:ce.prototype._mj$descendingIterator$Iterator$,comment:o.dequeDescendingIteratorComment},{type:"method",signature:"boolean add(int index, E element)",native:ce.prototype._addWithIndex,comment:o.listAddElementComment},{type:"method",signature:"E get (int index)",native:ce.prototype._getWithIndex,comment:o.listGetComment},{type:"method",signature:"int indexOf (E Element)",java:ce.prototype._mj$indexOf$int$E,comment:o.listIndexOfComment},{type:"method",signature:"E remove (int index)",native:ce.prototype._removeWithIndex,comment:o.listRemoveComment},{type:"method",signature:"E set (int index, E Element)",native:ce.prototype._setWithIndex,comment:o.listSetComment},{type:"method",signature:"void sort(Comparator comparator)",java:ce.prototype._mj$sort$void$Comparator,comment:o.listSortComment},{type:"method",signature:"String toString()",java:ce.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(ce,"type");let eu=ce;const he=class he extends ho{_mj$add$boolean$int$E(t,e){}_mj$addAll$boolean$int$Collection(t,e){}_mj$get$E$int(t,e,i){}_mj$indexOf$int$E(t,e,i){}_mj$remove$E$int(t,e,i){}_mj$set$E$int$E(t,e,i,n){}_mj$sort$void$Comparator(t,e,i){let n=this;this._mj$size$int$(t,()=>{let s=t.s.pop();s<=1?e&&e():he.prototype.quicksort.call(n,t,e,i,0,s-1)})}quicksort(t,e,i,n,s){let a=this;if(s-n<=1){e&&e();return}he.prototype.partition.call(a,t,()=>{let l=t.s.pop();he.prototype.quicksort.call(a,t,()=>{he.prototype.quicksort.call(a,t,()=>{e&&e()},i,l+1,s)},i,n,l-1)},i,n,s)}partition(t,e,i,n,s){let a=this;a._mj$get$E$int(t,()=>{let l=t.s.pop(),h=n-1,c=n,u=()=>{c{let g=t.s.pop();i._mj$compare$int$T$T(t,()=>{t.s.pop()<=0?(h++,he.prototype.swap.call(a,t,()=>{c++,u()},h,c)):(c++,u())},g,l)},c):he.prototype.swap.call(a,t,()=>{t.s.push(h+1),e()},h+1,s)};u()},s)}swap(t,e,i,n){let s=this;s._mj$get$E$int(t,()=>{let a=t.s.pop();s._mj$get$E$int(t,()=>{let l=t.s.pop();s._mj$set$E$int$E(t,()=>{s._mj$set$E$int$E(t,e,n,a)},i,l)},n)},i)}quicksortIterative(t,e,i,n,s){he.quicksortProgram||(he.initQuicksortProgram(),he.initPartitionProgram()),t.s.push(this,i,n,s),t.pushProgram(he.quicksortProgram,e)}static initQuicksortProgram(){he.quicksortProgram=new qr(he.type.module,void 0,"ListInterface.quicksort"),he.quicksortProgram.numberOfParameters=3,he.quicksortProgram.numberOfThisObjects=1;let t=0,e=t++,i=t++,n=t++,s=t++,a=t++;he.quicksortProgram.numberOfLocalVariables=t-he.quicksortProgram.numberOfThisObjects-he.quicksortProgram.numberOfParameters,he.quicksortProgram.addCompiledSteps([(l,h,c)=>l.s[c+n]>=l.s[c+s]?(l.return(void 0),-1):(l.s.push(l.s[c+e],l.s[c+i],l.s[c+n],l.s[c+s]),l.pushProgram(he.partitionProgram,void 0),1),(l,h,c)=>(l.s[c+a]=l.s.pop(),l.s.push(l.s[c+e],l.s[c+i],l.s[c+n],l.s[c+a]-1),l.pushProgram(he.quicksortProgram,void 0),2),(l,h,c)=>(l.s.push(l.s[c+e],l.s[c+i],l.s[c+a]+1,l.s[c+s]),l.pushProgram(he.quicksortProgram,void 0),l.return(void 0),-1)])}static initPartitionProgram(){he.partitionProgram=new qr(he.type.module,void 0,"ListInterface.partition"),he.partitionProgram.numberOfParameters=3,he.partitionProgram.numberOfThisObjects=1;let t=0,e=t++,i=t++,n=t++,s=t++,a=t++,l=t++,h=t++,c=t++;he.partitionProgram.numberOfLocalVariables=t-he.partitionProgram.numberOfThisObjects-he.partitionProgram.numberOfParameters,he.partitionProgram.addCompiledSteps([(u,g,f)=>(u.s[f+e]._mj$get$E$int(u,void 0,u.s[f+s]),1),(u,g,f)=>(u.s[f+a]=u.s.pop(),u.s[f+l]=u.s[f+n]-1,u.s[f+h]=u.s[f+n],2),(u,g,f)=>u.s[f+h]>=u.s[f+s]?9:(u.s[f+e]._mj$get$E$int(u,void 0,u.s[f+h]),3),(u,g,f)=>(u.s[f+i]._mj$compare$int$T$T(u,void 0,u.s.pop(),u.s[f+a]),4),(u,g,f)=>u.s.pop()>0?8:(u.s[f+l]++,u.s[f+e]._mj$get$E$int(u,void 0,u.s[f+l]),5),(u,g,f)=>(u.s[f+c]=u.s.pop(),u.s[f+e]._mj$get$E$int(u,void 0,u.s[f+h]),6),(u,g,f)=>(u.s[f+e]._mj$set$E$int$E(u,void 0,u.s[f+l],u.s.pop()),7),(u,g,f)=>(u.s[f+e]._mj$set$E$int$E(u,void 0,u.s[f+h],u.s[f+c]),8),(u,g,f)=>(u.s[f+h]++,2),(u,g,f)=>(u.s[f+e]._mj$get$E$int(u,void 0,u.s[f+l]+1),10),(u,g,f)=>(u.s[f+c]=u.s.pop(),u.s[f+e]._mj$get$E$int(u,void 0,u.s[f+s]),11),(u,g,f)=>(u.s[f+e]._mj$set$E$int$E(u,void 0,u.s[f+l]+1,u.s.pop()),12),(u,g,f)=>(u.s[f+e]._mj$set$E$int$E(u,void 0,u.s[f+s],u.s[f+c]),13),(u,g,f)=>(u.return(u.s[f+l]+1),-1)])}};r(he,"__javaDeclarations",[{type:"declaration",signature:"interface List extends Collection"},{type:"method",signature:"boolean add(int index, E element)",java:he.prototype._mj$add$boolean$int$E,comment:o.listAddElementComment},{type:"method",signature:"boolean addAll(int index, Collection c)",java:he.prototype._mj$addAll$boolean$int$Collection,comment:o.listAddAllElementsComment},{type:"method",signature:"E get (int index)",java:he.prototype._mj$get$E$int,comment:o.listGetComment},{type:"method",signature:"int indexOf (E element)",java:he.prototype._mj$indexOf$int$E,comment:o.listIndexOfComment},{type:"method",signature:"E remove (int index)",java:he.prototype._mj$remove$E$int,comment:o.listRemoveComment},{type:"method",signature:"E set (int index, E element)",java:he.prototype._mj$set$E$int$E,comment:o.listSetComment},{type:"method",signature:"default void sort(Comparator comparator)",java:he.prototype._mj$sort$void$Comparator,comment:o.listSortComment}]),r(he,"type"),r(he,"quicksortProgram"),r(he,"partitionProgram");let tu=he;const ii=class ii extends z{_mj$size$int$(t,e){}_mj$isEmpty$boolean$(t,e){}_mj$containsKey$boolean$K(t,e,i){}_mj$containsValue$boolean$V(t,e,i){}_mj$get$V$K(t,e,i){}_mj$put$V$K$V(t,e,i,n){}_mj$clear$void$(t,e){}_mj$forEach$void$BiConsumer(t,e,i){}_mj$values$Collection$(t,e){}_mj$keySet$Set$(t,e){}_mj$remove$V$K(t,e,i){}_mj$remove$boolean$K$V(t,e,i,n){}};r(ii,"__javaDeclarations",[{type:"declaration",signature:"interface Map",comment:o.mapInterfaceComment},{type:"method",signature:"int size()",java:ii.prototype._mj$size$int$,comment:o.mapSizeComment},{type:"method",signature:"boolean isEmpty()",java:ii.prototype._mj$isEmpty$boolean$,comment:o.mapIsEmptyComment},{type:"method",signature:"boolean containsKey(K key)",java:ii.prototype._mj$containsKey$boolean$K,comment:o.mapContainsKeyComment},{type:"method",signature:"boolean containsValue(V value)",java:ii.prototype._mj$containsValue$boolean$V,comment:o.mapContainsValueComment},{type:"method",signature:"V get(K key)",java:ii.prototype._mj$get$V$K,comment:o.mapGetComment},{type:"method",signature:"V put(K key, V value)",java:ii.prototype._mj$put$V$K$V,comment:o.mapPutComment},{type:"method",signature:"void clear()",java:ii.prototype._mj$clear$void$,comment:o.mapClearComment},{type:"method",signature:"void forEach(BiConsumer action)",java:ii.prototype._mj$forEach$void$BiConsumer,comment:o.mapForeachComment},{type:"method",signature:"Collection values()",java:ii.prototype._mj$values$Collection$,comment:o.mapValuesComment},{type:"method",signature:"Set keySet()",java:ii.prototype._mj$keySet$Set$,comment:o.mapKeySetComment},{type:"method",signature:"V remove(K key)",java:ii.prototype._mj$remove$V$K,comment:o.mapRemoveComment1},{type:"method",signature:"boolean remove(K key, V value)",java:ii.prototype._mj$remove$boolean$K$V,comment:o.mapRemoveComment1}]),r(ii,"type");let iu=ii;const Pa=class Pa extends ho{_mj$Contains$boolean$E(t,e,i){}_mj$ContainsAll$boolean$Collection(t,e,i){}};r(Pa,"__javaDeclarations",[{type:"declaration",signature:"interface Set extends Collection",comment:o.setInterfaceComment},{type:"method",signature:"boolean contains(E element)",java:Pa.prototype._mj$contains$boolean$E,comment:o.setContainsComment},{type:"method",signature:"boolean containsAll(Collection c)",java:Pa.prototype._mj$containsAll$boolean$Collection,comment:o.setContainsAllComment}]),r(Pa,"type");let nu=Pa;const es=class es extends Oe{_constructor(){return this}_firstElement(){return this._getWithIndex(0)}_lastElement(){return this._getWithIndex(this._size()-1)}};r(es,"__javaDeclarations",[{type:"declaration",signature:"class Vector extends ArrayList"},{type:"method",signature:"Vector()",native:es.prototype._constructor,comment:o.vectorConstructorComment},{type:"method",signature:"E firstElement()",native:es.prototype._firstElement,comment:o.vectorFirstElementComment},{type:"method",signature:"E lastElement()",native:es.prototype._lastElement,comment:o.vectorLastElementComment},{type:"method",signature:"void removeElementAt(int index)",native:es.prototype._removeWithIndex,comment:o.vectorRemoveElementAtComment}]),r(es,"type");let xd=es;const Yn=class Yn extends xd{_push(t){return this.elements.push(t),t}_pop(){if(this.elements.length==0)throw new il;return this.elements.pop()}_peek(){if(this.elements.length==0)throw new il;return this.elements[this.elements.length-1]}_empty(){return this.elements.length==0}};r(Yn,"__javaDeclarations",[{type:"declaration",signature:"class Stack extends Vector",comment:o.stackClassComment},{type:"method",signature:"Stack()",native:Yn.prototype._constructor,comment:o.stackConstructorComment},{type:"method",signature:"E push(E element)",native:Yn.prototype._push,comment:o.stackPushComment},{type:"method",signature:"E pop()",native:Yn.prototype._pop,comment:o.stackPopComment},{type:"method",signature:"E peek()",native:Yn.prototype._peek,comment:o.stackPeekComment},{type:"method",signature:"boolean empty()",native:Yn.prototype._empty,comment:o.stackEmptyComment},{type:"method",signature:"int search(E element)",java:Yn.prototype._mj$indexOf$int$E,comment:o.stackSearchComment}]),r(Yn,"type");let ru=Yn;const hn=class hn extends Vi{};r(hn,"__javaDeclarations",[{type:"declaration",signature:"enum DayOfWeek",comment:o.DayOfWeekEnumComment}]),r(hn,"type"),r(hn,"values",[new hn(o.DayOfWeekMondayConst(),0),new hn(o.DayOfWeekTuesdayConst(),1),new hn(o.DayOfWeekWednesdayConst(),2),new hn(o.DayOfWeekThursdayConst(),3),new hn(o.DayOfWeekFridayConst(),4),new hn(o.DayOfWeekSaturdayConst(),5),new hn(o.DayOfWeekSundayConst(),6)]);let su=hn;const Oo=class Oo extends mi{_mj$accept$void$T$U(t,e,i,n){}};r(Oo,"__javaDeclarations",[{type:"declaration",signature:"interface BiConsumer"},{type:"method",signature:"void accept(T t, U u)",java:Oo.prototype._mj$accept$void$T$U}]),r(Oo,"type");let au=Oo;const Vo=class Vo extends mi{_mj$accept$void$T(t,e,i){}};r(Vo,"__javaDeclarations",[{type:"declaration",signature:"interface Consumer"},{type:"method",signature:"void accept(T t)",java:Vo.prototype._mj$accept$void$T}]),r(Vo,"type");let ou=Vo;const Lo=class Lo extends mi{_mj$apply$F$E(t,e,i){}};r(Lo,"__javaDeclarations",[{type:"declaration",signature:"interface Function"},{type:"method",signature:"F apply(E e)",java:Lo.prototype._mj$apply$F$E}]),r(Lo,"type");let lu=Lo;const kt=class kt extends z{constructor(e){super();r(this,"value");this.value=e}__internalHashCode(){return this.value}_cj$_constructor_$BigInteger$string(e,i,n){this.value=BigInt(n),e.s.push(this),i&&i()}_cj$_constructor_$BigInteger$long(e,i,n){this.value=BigInt(n),e.s.push(this),i&&i()}_add(e){return new kt(this.value+e.value)}_subtract(e){return new kt(this.value-e.value)}_divide(e){return new kt(this.value/e.value)}_remainder(e){return new kt(this.value%e.value)}_multiply(e){return new kt(this.value*e.value)}_intValue(){return Number(BigInt.asIntN(52,this.value))}_mj$toString$String$(e,i){e.s.push(new G(this.value.toString())),i&&i()}_debugOutput(){return`${this.value.toString()}`}_modPow(e,i){let n=e.value,s=i.value,a=1n,l=this.value;for(;n>0n;)(n&1n)==1n&&(a*=l,a%=s),l*=l,l%=s,n>>=1n;return new kt(a)}};r(kt,"__javaDeclarations",[{type:"declaration",signature:"class BigInteger extends Object",comment:o.BigIntegerClassComment},{type:"method",signature:"BigInteger(long val)",java:kt.prototype._cj$_constructor_$BigInteger$long,comment:o.BigIntegerConstructorComment},{type:"method",signature:"BigInteger(string val)",java:kt.prototype._cj$_constructor_$BigInteger$string,comment:o.BigIntegerConstructorComment},{type:"method",signature:"final BigInteger add(BigInteger otherNumber)",native:kt.prototype._add,comment:o.BigIntegerAddComment},{type:"method",signature:"final BigInteger subtract(BigInteger otherNumber)",native:kt.prototype._subtract,comment:o.BigIntegerSubtractComment},{type:"method",signature:"final BigInteger divide(BigInteger otherNumber)",native:kt.prototype._divide,comment:o.BigIntegerDivideComment},{type:"method",signature:"final BigInteger multiply(BigInteger otherNumber)",native:kt.prototype._multiply,comment:o.BigIntegerMultiplyComment},{type:"method",signature:"final BigInteger remainder(BigInteger otherNumber)",native:kt.prototype._remainder,comment:o.BigIntegerRemainderComment},{type:"method",signature:"final BigInteger modPow(BigInteger exponent,BigInteger m)",native:kt.prototype._modPow,comment:o.BigIntegerRemainderComment},{type:"method",signature:"final String toString()",java:kt.prototype._mj$toString$String$,comment:o.BigIntegerToStringComment},{type:"method",signature:"final int intValue()",native:kt.prototype._intValue,comment:o.BigIntegerIntValueComment}]),r(kt,"type");let du=kt;class Sh{constructor(){r(this,"positivePraefix","");r(this,"positiveSuffix","");r(this,"negativePraefix","");r(this,"negativeSuffix","");r(this,"multiplier",1);r(this,"groupingSize",0);r(this,"minimumIntegerDigits",0);r(this,"maximumIntegerDigits",16);r(this,"minimumFractionDigits",0);r(this,"maximumFractionDigits",0);r(this,"minimumExponentDigits",0);r(this,"roundingMode","HALF_EVEN")}}const Os=class Os extends z{constructor(){super();r(this,"position",0);r(this,"pattern",new Sh);r(this,"parsePositiveOrNegativePattern","positive");r(this,"formatString","00.00")}_constructor1(e){return this.formatString=e,this.parseFormatString(e),this}parseFormatString(e){if(this.formatString=e,this.position=0,this.pattern=new Sh,this.parsePositiveOrNegativePattern="positive",this.parsePattern(),this.comes(";",!0)){let i=this.pattern;this.pattern=new Sh,this.parsePositiveOrNegativePattern="negative",this.parsePattern(),i.negativePraefix=null,i.negativeSuffix=null,this.pattern=i}else this.pattern.negativePraefix="-"+this.pattern.positivePraefix,this.pattern.negativeSuffix=this.pattern.positiveSuffix}format(e){let n=e.toString().match(/(-)?(\d*).?(\d*)(e([+-](\d*)))?/),s=n[1],a=n[2],l=n[3];n[4]!=null;let h=n[5];n[6];let c=s=="-"?-1:1,u="";c==-1?this.pattern.negativePraefix==null?u="-"+this.pattern.positivePraefix:u=this.pattern.negativePraefix:u=this.pattern.positivePraefix;let g="",f="",b="",A=a.length-1;if(h!=null&&(A+=Number.parseInt(h)),A>this.pattern.maximumIntegerDigits)g=a.substring(0,1)+"."+a.substring(1)+l==null?"":l,g+="E"+A.toString();else{if(l!=null){b=".";let C=this.pattern.minimumFractionDigits-l.length;if(C>0&&(l+=Os.stringWithZeroes.substring(0,C)),this.pattern.maximumFractionDigits=5&&(q+=1);let W=""+q;W.startsWith("2")&&(a=""+(Number.parseInt(a)+1)),l=W.substring(1,W.length),l=l.substring(0,this.pattern.maximumFractionDigits)}b+=l}let w=this.pattern.minimumIntegerDigits-a.length;if(w>0&&(a=Os.stringWithZeroes.substring(0,w)+a),this.pattern.groupingSize>0){let C="",q=a.length,I=q-this.pattern.groupingSize;for(;I>=0;)C=a.substring(I,q)+C,I>0&&(C=","+C),q-=this.pattern.groupingSize,I-=this.pattern.groupingSize;q>0&&(C=a.substring(0,q)+C),a=C}f=a}let S=u+g+f+b;return c==-1&&this.pattern.negativeSuffix!=null?S+=this.pattern.negativeSuffix:S+=this.pattern.positiveSuffix,S}comes(e,i=!0){let n=this.formatString.indexOf(e,this.position)==this.position;return n&&i&&(this.position+=e.length),n}parsePattern(){this.parsePraefix(),this.parseNumber(),this.parseSuffix()}parsePraefix(){let e=this.getNextCharacter(!1);for(;"0#".indexOf(e)<0&&!this.isEnd();){switch(this.position++,e){case"'":e=this.getNextCharacter(!0);break;case"%":this.pattern.multiplier=100;break;case"‰":this.pattern.multiplier=1e3;break}this.pattern.positivePraefix+=e,e=this.getNextCharacter(!1)}}parseSuffix(){let e=this.getNextCharacter(!0);for(;!this.isEnd();){switch(e){case"'":e=this.getNextCharacter(!0);break;case"%":this.pattern.multiplier=100;break;case"‰":this.pattern.multiplier=1e3;break}this.pattern.positiveSuffix+=e,e=this.getNextCharacter(!0)}}parseNumber(){this.parseInteger(),this.comes(".",!0)&&this.parseFraction(),this.comes("E",!0)&&this.parseExponent()}parseInteger(){let e=0,i=!1;for(;this.comes("#",!1);){for(;this.comes("#",!0);)i&&e++;if(this.comes(",",!0)){i=!0,this.pattern.groupingSize=e,e=0;continue}break}for(this.pattern.groupingSize=e;this.comes("0",!1);){for(;this.comes("0",!0);)e++,this.pattern.minimumIntegerDigits++;if(this.comes(",",!0)){this.pattern.groupingSize=e,e=0;continue}break}}parseFraction(){for(;this.comes("0",!0);)this.pattern.minimumFractionDigits++;for(this.pattern.maximumFractionDigits=this.pattern.minimumFractionDigits;this.comes("#",!0);)this.pattern.maximumFractionDigits++}parseExponent(){for(;this.comes("0",!0);)this.pattern.minimumExponentDigits++}isEnd(){return this.position>=this.formatString.length}getNextCharacter(e=!0){if(this.isEnd())return"￿";let i=this.formatString.charAt(this.position);return e&&this.position++,i}};r(Os,"__javaDeclarations",[{type:"declaration",signature:"class DecimalFormat extends Object",comment:o.DecimalFormatClassComment},{type:"method",signature:"DecimalFormat(string format)",native:Os.prototype._constructor1,comment:o.decimalFormatConstructorComment},{type:"method",signature:"public final string format(double number)",template:"§1.format(§2)",comment:o.decimalFormatFormatComment}]),r(Os,"stringWithZeroes","0000000000000000000000000000000000000000");let hu=Os;class cu extends F{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(cu,"__javaDeclarations",[{type:"declaration",signature:"class IllegalMonitorStateException extends RuntimeException"}]),r(cu,"type");const ni=class ni extends z{constructor(e){super();r(this,"date");e?this.date=e:this.date=new Date}_cj$_constructor_$LocalDateTime$(e,i){this._constructor(),this.date=new Date,e.s.push(this)}static _now(){return new ni}static _of(e,i,n,s,a,l){return new ni(new Date(e,i-1,n,s,a,l))}_plusDays(e){return new ni(new Date(this.date.getTime()+e*24*3600*1e3))}_minusDays(e){return new ni(new Date(this.date.getTime()-e*24*3600*1e3))}_mj$compareTo$int$T(e){return Math.sign(this.date.getTime()-e.date.getTime())}_until(e){return(this.date.getTime()-e.date.getTime())/(24*3600*1e3)}_mj$toString$String$(e,i){e.s.push(new G(`${this.td(this.date.getDate())}.${this.td(this.date.getMonth()+1)}.${this.td(this.date.getFullYear())} ${this.td(this.date.getHours())}:${this.td(this.date.getMinutes())}:${this.td(this.date.getSeconds())}`)),i&&i()}td(e){return e<10?"0"+e:""+e}};r(ni,"__javaDeclarations",[{type:"declaration",signature:"class LocalDateTime extends Object implements Comparable",comment:o.LocalDateTimeClassComment},{type:"method",signature:"LocalDateTime()",java:ni.prototype._cj$_constructor_$LocalDateTime$,comment:o.LocalDateTimeEmptyConstructorComment},{type:"method",signature:"static LocalDateTime now()",native:ni._now,comment:o.LocalDateTimeNowComment},{type:"method",signature:"static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second)",native:ni._of,comment:o.LocalDateTimeOfComment},{type:"method",signature:"LocalDateTime plusDays(int days)",native:ni.prototype._plusDays,comment:o.LocalDateTimePlusDaysComment},{type:"method",signature:"LocalDateTime minusDays(int days)",native:ni.prototype._minusDays,comment:o.LocalDateTimeMinusDaysComment},{type:"method",signature:"int until(LocalDateTime object)",native:ni.prototype._until,comment:o.LocalDateTimeUntilComment},{type:"method",signature:"int getYear()",template:"§1.date.getFullYear()",comment:o.LocalDateTimeGetYearComment},{type:"method",signature:"int getMonth()",template:"§1.date.getMonth() + 1",comment:o.LocalDateTimeGetMonthComment},{type:"method",signature:"int getDayOfMonth()",template:"§1.date.getDate()",comment:o.LocalDateTimeGetDayOfMonthComment},{type:"method",signature:"int getHour()",template:"§1.date.getHours()",comment:o.LocalDateTimeGetHourComment},{type:"method",signature:"int getMinute()",template:"§1.date.getMinutes()",comment:o.LocalDateTimeGetMinuteComment},{type:"method",signature:"int getSecond()",template:"§1.date.getSeconds()",comment:o.LocalDateTimeGetSecondComment},{type:"method",signature:"int compareTo(LocalDateTime object)",java:ni.prototype._mj$compareTo$int$T,comment:o.comparableCompareToComment},{type:"method",signature:"String toString()",java:ni.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(ni,"type");let uu=ni;const Vs=class Vs extends z{constructor(){super()}_emptyConstructor(){return this}};r(Vs,"__javaDeclarations",[{type:"declaration",signature:"class Math extends Object"},{type:"method",signature:"private Math()",native:Vs.prototype._emptyConstructor},{type:"field",signature:"public static final double PI",template:"Math.PI",constantValue:Math.PI,comment:o.mathPIComment},{type:"field",signature:"public static final double E",template:"Math.E",constantValue:Math.E,comment:o.mathEComment},{type:"method",signature:"public static int abs(int a)",template:"Math.abs(§1)",constantFoldingFunction:t=>Math.abs(t),comment:o.mathAbsComment},{type:"method",signature:"public static long abs(long a)",template:"Math.abs(§1)",constantFoldingFunction:t=>Math.abs(t),comment:o.mathAbsComment},{type:"method",signature:"public static float abs(float a)",template:"Math.abs(§1)",constantFoldingFunction:t=>Math.abs(t),comment:o.mathAbsComment},{type:"method",signature:"public static double abs(double a)",template:"Math.abs(§1)",constantFoldingFunction:t=>Math.abs(t),comment:o.mathAbsComment},{type:"method",signature:"public static double sin(double angleInRadians)",template:"Math.sin(§1)",constantFoldingFunction:t=>Math.sin(t),comment:o.mathSinComment},{type:"method",signature:"public static double cos(double angleInRadians)",template:"Math.cos(§1)",constantFoldingFunction:t=>Math.cos(t),comment:o.mathCosinComment},{type:"method",signature:"public static double tan(double angleInRadians)",template:"Math.tan(§1)",constantFoldingFunction:t=>Math.tan(t),comment:o.mathTanComment},{type:"method",signature:"public static double asin(double angleInRadians)",template:"Math.asin(§1)",constantFoldingFunction:t=>Math.asin(t),comment:o.mathArcsinComment},{type:"method",signature:"public static double acos(double angleInRadians)",template:"Math.acos(§1)",constantFoldingFunction:t=>Math.acos(t),comment:o.mathArccosComment},{type:"method",signature:"public static double atan(double angleInRadians)",template:"Math.atan(§1)",constantFoldingFunction:t=>Math.atan(t),comment:o.mathArctanComment},{type:"method",signature:"public static double atan2(double y, double x)",template:"Math.atan2(§1, §2)",constantFoldingFunction:(t,e)=>Math.atan2(t,e),comment:o.mathAtan2Comment},{type:"method",signature:"public static int round(double value)",template:"Math.round(§1)",constantFoldingFunction:t=>Math.round(t),comment:o.mathRoundComment},{type:"method",signature:"public static int floor(double value)",template:"Math.floor(§1)",constantFoldingFunction:t=>Math.floor(t),comment:o.mathFloorComment},{type:"method",signature:"public static int ceil(double value)",template:"Math.ceil(§1)",constantFoldingFunction:t=>Math.ceil(t),comment:o.mathCeilComment},{type:"method",signature:"public static int signum(double value)",template:"Math.sign(§1)",constantFoldingFunction:t=>Math.sign(t),comment:o.mathSignComment},{type:"method",signature:"public static double sqrt(double a)",template:"Math.sqrt(§1)",constantFoldingFunction:t=>Math.sqrt(t),comment:o.mathSqrtComment},{type:"method",signature:"public static double random()",template:"Math.random()",comment:o.mathRandomComment},{type:"method",signature:"public static double pow(double basis, double exponent)",template:"Math.pow(§1, §2)",constantFoldingFunction:(t,e)=>Math.pow(t,e),comment:o.mathPowComment},{type:"method",signature:"public static double toDegrees(double angleInRad)",template:"((§1) / Math.PI * 180)",constantFoldingFunction:t=>t/Math.PI*180,comment:o.mathToDegreesComment},{type:"method",signature:"public static double toRadians(double angleInDegrees)",template:"((§1) / 180 * Math.PI)",constantFoldingFunction:t=>t/180*Math.PI,comment:o.mathToRadiansComment},{type:"method",signature:"public static double exp(double value)",template:"Math.exp(§1)",constantFoldingFunction:t=>Math.exp(t),comment:o.mathExpComment},{type:"method",signature:"public static double log(double value)",template:"Math.log(§1)",constantFoldingFunction:t=>Math.log(t),comment:o.mathLogComment},{type:"method",signature:"public static double log10(double value)",template:"Math.log10(§1)",constantFoldingFunction:t=>Math.log10(t),comment:o.mathLog10Comment},{type:"method",signature:"public static int max(int a, int b)",template:"Math.max(§1, §2)",constantFoldingFunction:(t,e)=>Math.max(t,e),comment:o.mathMaxComment},{type:"method",signature:"public static long max(long a, long b)",template:"Math.max(§1, §2)",constantFoldingFunction:(t,e)=>Math.max(t,e),comment:o.mathMaxComment},{type:"method",signature:"public static float max(float a, float b)",template:"Math.max(§1, §2)",constantFoldingFunction:(t,e)=>Math.max(t,e),comment:o.mathMaxComment},{type:"method",signature:"public static double max(double a, double b)",template:"Math.max(§1, §2)",constantFoldingFunction:(t,e)=>Math.max(t,e),comment:o.mathMaxComment},{type:"method",signature:"public static int min(int a, int b)",template:"Math.min(§1, §2)",constantFoldingFunction:(t,e)=>Math.min(t,e),comment:o.mathMinComment},{type:"method",signature:"public static long min(long a, long b)",template:"Math.min(§1, §2)",constantFoldingFunction:(t,e)=>Math.min(t,e),comment:o.mathMinComment},{type:"method",signature:"public static float min(float a, float b)",template:"Math.min(§1, §2)",constantFoldingFunction:(t,e)=>Math.min(t,e),comment:o.mathMinComment},{type:"method",signature:"public static double min(double a, double b)",template:"Math.min(§1, §2)",constantFoldingFunction:(t,e)=>Math.min(t,e),comment:o.mathMinComment}]),r(Vs,"type"),r(Vs,"PI",Math.PI),r(Vs,"E",Math.E);let mu=Vs;const Vt=class Vt extends z{constructor(){super(...arguments);r(this,"element")}_nconstructor(e){return this.element=e,this}static _mj$empty$Optional$(e,i){let n=new Vt;n._nconstructor(void 0),e.s.push(n),i&&i()}static _mj$of$Optional$T(e,i){let n=new Vt;n._nconstructor(i),e.s.push(n)}_mj$isEmpty$boolean$(e,i){e.s.push(this.element==null),i&&i()}_mj$equals$boolean$Object(e,i,n){if(!(n instanceof z)){e.s.push(!1),i&&i();return}let s=n;if(this.element==null){e.s.push(s.element==null),i&&i();return}else s.element==null?e.s.push(!1):e.s.push(this.element._mj$equals$boolean$Object(e,i,s.element));i&&i()}_mj$map$Optional$Function(e,i,n){let s=new Vt;this.element?n._mj$apply$F$E(e,()=>{s.element=e.s.pop(),e.s.push(s),i&&i()},this.element):(e.s.push(s),i&&i())}_mj$flatMap$Optional$Function(e,i,n){let s=new Vt;this.element?n._mj$apply$F$E(e,()=>{e.s.push(e.s.pop()),i&&i()},this.element):(e.s.push(s),i&&i())}_mj$orElse$T$T(e,i,n){let s=this.element==null?n:this.element;e.s.push(s),i&&i()}_mj$ifPresent$void$Consumer(e,i,n){this.element&&n._mj$accept$void$T(e,i,this.element)}_mj$toString$String$(e,i){let n="Nothing";this.element?this.element._mj$toString$String$(e,()=>{e.s.push(new G("Just "+e.s.pop().value)),i&&i()}):(e.s.push(new G(n)),i&&i())}};r(Vt,"__javaDeclarations",[{type:"declaration",signature:"class Optional",comment:o.optionalClassComment},{type:"method",signature:"private Optional()",native:Vt.prototype._nconstructor},{type:"method",signature:"public static Optional empty()",java:Vt._mj$empty$Optional$,comment:o.optionalEmptyComment},{type:"method",signature:"public boolean equals(Object o)",java:Vt.prototype._mj$equals$boolean$Object,comment:o.optionalEqualsComment},{type:"method",signature:"public boolean isEmpty()",java:Vt.prototype._mj$isEmpty$boolean$,comment:o.optionalIsEmptyComment},{type:"method",signature:"public Optional map(Function f)",java:Vt.prototype._mj$map$Optional$Function,comment:o.optionalMapComment},{type:"method",signature:"public Optional flatMap(Function> f)",java:Vt.prototype._mj$flatMap$Optional$Function,comment:o.optionalFlatMapComment},{type:"method",signature:"public static Optional of(T t)",java:Vt._mj$of$Optional$T,comment:o.optionalOfComment},{type:"method",signature:"public T orElse(T t)",java:Vt.prototype._mj$orElse$T$T,comment:o.optionalOrElseComment},{type:"method",signature:"public void ifPresent(Consumer c)",java:Vt.prototype._mj$ifPresent$void$Consumer,comment:o.optionalIfPresentComment},{type:"method",signature:"public String toString()",java:Vt.prototype._mj$toString$String$,comment:o.optionalToStringComment}]),r(Vt,"type");let pu=Vt;class Td extends z{constructor(){super()}}r(Td,"__javaDeclarations",[{type:"declaration",signature:"class string extends Object"},{type:"method",signature:"public final int length()",template:"§1.length",constantFoldingFunction:t=>t.length},{type:"method",signature:"public final int indexOf(string str)",template:"§1.indexOf(§2)",constantFoldingFunction:(t,e)=>t.indexOf(e)},{type:"method",signature:"public final int indexOf(string str, int fromIndex)",template:"§1.indexOf(§2, §3)",constantFoldingFunction:(t,e,i)=>t.indexOf(e,i)},{type:"method",signature:"public final int indexOf(char c)",template:"§1.indexOf(§2)",constantFoldingFunction:(t,e)=>t.indexOf(e)},{type:"method",signature:"public final int indexOf(char c, int fromIndex)",template:"§1.indexOf(§2, §3)",constantFoldingFunction:(t,e,i)=>t.indexOf(e,i)},{type:"method",signature:"public final char charAt(int index)",template:"§1.charAt(§2)",constantFoldingFunction:(t,e)=>t.charAt(e)},{type:"method",signature:"public final int compareTo(string otherString)",template:"§1.localeCompare(§2)",constantFoldingFunction:(t,e)=>t.localeCompare(e)},{type:"method",signature:"public final int compareToIgnoreCase(string otherString)",template:"§1.localeCompare(§2, undefined, { sensitivity: 'accent' })",constantFoldingFunction:(t,e)=>t.localeCompare(e,void 0,{sensitivity:"accent"})},{type:"method",signature:"public final string concat(string otherString)",template:"§1.concat(§2)",constantFoldingFunction:(t,e)=>t.concat(e)},{type:"method",signature:"public final boolean contains(string otherString)",template:"(§1.indexOf(§2) >= 0)",constantFoldingFunction:(t,e)=>t.indexOf(e)>=0},{type:"method",signature:"public final boolean endsWith(string otherString)",template:"§1.endsWith(§2)",constantFoldingFunction:(t,e)=>t.endsWith(e)},{type:"method",signature:"public final boolean startsWith(string otherString)",template:"§1.startsWith(§2)",constantFoldingFunction:(t,e)=>t.startsWith(e)},{type:"method",signature:"public final boolean equals(string otherString)",template:"§1 == §2",constantFoldingFunction:(t,e)=>t==e},{type:"method",signature:"public final boolean equalsIgnoreCase(string otherString)",template:"§1.toLocaleUpperCase() == §2.toLocaleUpperCase()",constantFoldingFunction:(t,e)=>t.toLocaleUpperCase()==e.toLocaleUpperCase()},{type:"method",signature:"public final boolean isEmpty()",template:"(§1.length == 0)",constantFoldingFunction:t=>t.length==0},{type:"method",signature:"public final int lastIndexOf(string str)",template:"§1.lastIndexOf(§2)",constantFoldingFunction:(t,e)=>t.lastIndexOf(e)},{type:"method",signature:"public final int lastIndexOf(string str, int fromIndex)",template:"§1.lastIndexOf(§2, §3)",constantFoldingFunction:(t,e,i)=>t.lastIndexOf(e,i)},{type:"method",signature:"public final int lastIndexOf(char c)",template:"§1.lastIndexOf(§2)",constantFoldingFunction:(t,e)=>t.lastIndexOf(e)},{type:"method",signature:"public final int lastIndexOf(char c, int fromIndex)",template:"§1.lastIndexOf(§2, §3)",constantFoldingFunction:(t,e,i)=>t.lastIndexOf(e,i)},{type:"method",signature:"public final string toLowerCase()",template:"§1.toLocaleLowerCase()",constantFoldingFunction:t=>t.toLocaleLowerCase()},{type:"method",signature:"public final string toUpperCase()",template:"§1.toLocaleUpperCase()",constantFoldingFunction:t=>t.toLocaleUpperCase()},{type:"method",signature:"public final string substring(int beginIndex)",template:"§1.substring(§2)",constantFoldingFunction:(t,e)=>t.substring(e)},{type:"method",signature:"public final string substring(int beginIndex, int endIndex)",template:"§1.substring(§2, §3)",constantFoldingFunction:(t,e,i)=>t.substring(e,i)},{type:"method",signature:"public final string trim()",template:"§1.trim()",constantFoldingFunction:t=>t.trim()},{type:"method",signature:"public final string replace(string target, string replacement)",template:"§1.replace(§2, () => §3)",constantFoldingFunction:(t,e,i)=>t.replace(e,i)},{type:"method",signature:"public final string replaceAll(string regex, string replacement)",template:"§1.replace(new RegExp(§2, 'g'), () => §3)",constantFoldingFunction:(t,e,i)=>t.replace(new RegExp(e,"g"),i)},{type:"method",signature:"public final boolean matches(string regex)",template:"(§1.match(new RegExp(§2, 'g')) != null)",constantFoldingFunction:(t,e)=>t.match(new RegExp(e,"g"))!=null},{type:"method",signature:"public final string replaceFirst(string regex, string replacement)",template:"§1.replace(new RegExp(§2, ''), () => §3)",constantFoldingFunction:(t,e,i)=>t.replace(new RegExp(e,""),i)},{type:"method",signature:"public final string[] split(string regex)",template:"§1.split(new RegExp(§2, ''))"},{type:"method",signature:"public final int hashCode()",template:"Array.from(§1).reduce((s, c) => Math.imul(31, s) + c.charCodeAt(0) | 0, 0)",constantFoldingFunction:t=>Array.from(t).reduce((e,i)=>Math.imul(31,e)+i.charCodeAt(0)|0,0)},{type:"method",signature:"public final char[] toCharArray()",template:"Array.from(§1)",constantFoldingFunction:t=>Array.from(t)},{type:"method",signature:"public final string toString()",template:"§1",constantFoldingFunction:t=>t}]),r(Td,"type");const Fo=class Fo extends z{constructor(){super()}_emptyConstructor(){return this}};r(Fo,"__javaDeclarations",[{type:"declaration",signature:"class Random extends Object",comment:o.RandomClassComment},{type:"method",signature:"Random()",native:Fo.prototype._emptyConstructor},{type:"method",signature:"public static int randint(int from, int to)",template:"Math.floor(Math.random()*(§2-(§1)+1)+§1)",comment:o.randomRandIntComment},{type:"method",signature:"public final int nextInt(int to)",template:"Math.floor(Math.random()*§2)",comment:o.randomNextIntComment},{type:"method",signature:"public static double randdouble(double from, double to)",template:"Math.random()*(§2-(§1))+§1",comment:o.randomRandDoubleComment}]),r(Fo,"type");let gu=Fo;const _o=class _o extends mi{_mj$run$void$(t,e){}};r(_o,"__javaDeclarations",[{type:"declaration",signature:"interface Runnable",comment:o.RunnableInterfaceComment},{type:"method",signature:"void run()",java:_o.prototype._mj$run$void$,comment:o.runnableRunComment}]),r(_o,"type");let fu=_o;const ts=class ts extends z{constructor(){super();r(this,"permitsAvailable",1);r(this,"waitingThreads1",[])}_jconstructor(e,i,n){e.s.push(this),this.permitsAvailable=n}_nAvailablePermits(){return this.permitsAvailable}_mj$acquire$void(e,i){this.permitsAvailable>0?this.permitsAvailable--:(e.state=B.waiting,e.scheduler.suspendThread(e),this.waitingThreads1.push(e)),i&&i()}_mj$release$void(e,i){this.permitsAvailable++;let n=this.waitingThreads1.shift();n&&(e.scheduler.restoreThread(n),this.permitsAvailable--)}};r(ts,"__javaDeclarations",[{type:"declaration",signature:"class Semaphore extends Object",comment:o.semaphoreClassComment},{type:"method",signature:"public Semaphore(int permits)",java:ts.prototype._jconstructor,comment:o.semaphoreConstructorComment},{type:"method",signature:"public final int availablePermits()",native:ts.prototype._nAvailablePermits,comment:o.semaphoreAvailablePermitsComment},{type:"method",signature:"public void acquire()",java:ts.prototype._mj$acquire$void,comment:o.semaphoreAcquireComment},{type:"method",signature:"public void release()",java:ts.prototype._mj$release$void,comment:o.semaphoreReleaseComment}]),r(ts,"type");let bu=ts;const zi=class zi extends Vi{static _values(){return zi.values}};r(zi,"values",[new zi("new",B.new),new zi("running",B.running),new zi("stopped_at_breakpoint",B.stoppedAtBreakpoint),new zi("runnable",B.runnable),new zi("waiting",B.waiting),new zi("timed_waiting",B.timedWaiting),new zi("terminated",B.terminated)]),r(zi,"__javaDeclarations",[{type:"declaration",signature:"enum Thread.State"}]),r(zi,"type");let nl=zi;const Lt=class Lt extends z{constructor(){super();r(this,"stacktrace",[]);r(this,"range");r(this,"thread");r(this,"runnable");r(this,"name");r(this,"maxStepsPerSecond");r(this,"threadsToJoinWhenFinished",[])}_jconstructor(e,i,n,s){e.s.push(this),this.runnable=n,this.name=s||"user generated thread"}_jconstructor1(e,i,n){e.s.push(this),this.name=n||"user generated thread"}_mj$getState$Thread_State$(e,i){let n=nl._values()[0];this.thread&&(n=nl._values()[this.thread.state]),e.s.push(n)}_mj$run$void$(e,i){i&&i()}_mj$start$void$(e,i){if(!this.thread){let n=this.runnable;n||(n=this),this.thread=e.scheduler.createThread(this.name||"user generated thread",[],!0),this.thread.threadObject=this;let s=this;n._mj$run$void$(this.thread,()=>{s.callbackWhenThreadFinished()}),this.thread.startIfNotEmptyOrDestroy()}i&&i()}callbackWhenThreadFinished(){for(let e of this.threadsToJoinWhenFinished)e.scheduler.restoreThread(e);this.threadsToJoinWhenFinished.length=0}_mj$join(e,i,n){if(!this.thread||this.thread==e||[B.terminated,B.terminatedWithException].indexOf(this.thread.state)>=0){i&&i();return}let s=this;n?(setTimeout(()=>{let a=s.threadsToJoinWhenFinished.indexOf(e);a>=0&&s.threadsToJoinWhenFinished.splice(a,1),e.scheduler.restoreThread(e)},n),e.state=B.timedWaiting):e.state=B.waiting,this.threadsToJoinWhenFinished.push(e),e.scheduler.suspendThread(e),i&&i()}_toString(){return new G(this.getClassName()+": ")}_setName(e){this.name=e,this.thread&&(this.thread.name=e)}_setSpeed(e){this.maxStepsPerSecond=e>0?e:void 0,this.thread&&(this.thread.maxStepsPerSecond=this.maxStepsPerSecond)}static _sleep(e,i){if(i<0)throw new F(o.millisecondsNotPositiveError());e.scheduler.suspendThread(e),e.state=B.timedWaiting,setTimeout(()=>{e.scheduler.restoreThread(e)},i)}static _currentThread(e){e.threadObject||(e.threadObject=new Lt),e.threadObject.thread=e,e.s.push(e.threadObject)}};r(Lt,"__javaDeclarations",[{type:"declaration",signature:"class Thread extends Object implements Runnable",comment:o.threadClassComment},{type:"method",signature:"public Thread()",java:Lt.prototype._jconstructor,comment:o.threadConstructorComment},{type:"method",signature:"public Thread(Runnable runnable)",java:Lt.prototype._jconstructor,comment:o.threadConstructorRunnableComment},{type:"method",signature:"public Thread(Runnable runnable, string name)",java:Lt.prototype._jconstructor,comment:o.threadConstructorRunnableComment},{type:"method",signature:"public Thread(string name)",java:Lt.prototype._jconstructor1,comment:o.threadConstructorComment},{type:"method",signature:"public Thread.State getState()",java:Lt.prototype._mj$getState$Thread_State$,comment:o.threadGetStateComment},{type:"method",signature:"public void run()",java:Lt.prototype._mj$run$void$,comment:o.threadRunComment},{type:"method",signature:"public void start()",java:Lt.prototype._mj$start$void$,comment:o.threadStartComment},{type:"method",signature:"public void join()",java:Lt.prototype._mj$join,comment:o.threadJoinComment},{type:"method",signature:"public void join(int milliseconds)",java:Lt.prototype._mj$join,comment:o.threadJoinComment2},{type:"method",signature:"public string getName()",template:"§1.name",comment:o.threadGetNameComment},{type:"method",signature:"public void setName(string name)",native:Lt.prototype._setName,comment:o.threadSetNameComment},{type:"method",signature:"public void setSpeed(int maxStepsPerSecond)",java:Lt.prototype._setSpeed,comment:o.threadSetSpeedComment},{type:"method",signature:"public static void sleep(int milliseconds)",java:Lt._sleep,comment:o.threadSleepComment},{type:"method",signature:"public static Thread currentThread()",java:Lt._currentThread,comment:o.threadCurrentThreadComment}]),r(Lt,"type");let yu=Lt;const cn=class cn extends xl{constructor(e,i){super(e,re.instance,i);r(this,"myIndex");r(this,"defaultValueAsString","0");r(this,"defaultValue",0);r(this,"identifierRange",{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0});this.isPrimitive=!0,this.myIndex=cn.typeIdentifiers.indexOf(this.identifier)}getCompletionItemDetail(){return v.primitiveType()}getFile(){return this.module.file}getCopyWithConcreteType(e){return this}static getUnboxedTypeIndex(e){return cn.boxedTypeIdentifiers.indexOf(e.identifier)}static getTypeIndex(e){if(!e)return;let i=cn.boxedTypeIdentifiers.indexOf(e.identifier);return i>=0?i:this.typeIdentifiers.indexOf(e.identifier)}toString(){return this.identifier}getDeclaration(){return this.identifier}getAbsoluteName(){return this.toString()}isByteShortIntLong(){return!1}};r(cn,"boxedTypeIdentifiers",["Boolean","Character","Byte","Short","Integer","Long","Float","Double"]),r(cn,"typeIdentifiers",["boolean","char","byte","short","int","long","float","double"]),r(cn,"plusMinusMultDivOperators",[m.plus,m.minus,m.multiplication,m.division,m.modulo]),r(cn,"shiftOperators",[m.shiftLeft,m.shiftRight,m.shiftRightUnsigned]),r(cn,"logicOperators",[m.and,m.or,m.XOR]),r(cn,"plusMinusMultDivAssignmentOperators",[m.plusAssignment,m.minusAssignment,m.multiplicationAssignment,m.divisionAssignment,m.moduloAssignment,m.assignment]),r(cn,"comparisonOperators",[m.lower,m.greater,m.lowerOrEqual,m.greaterOrEqual,m.notEqual,m.equal]);let ht=cn;class zb extends ht{constructor(t){super("boolean",t),this.defaultValueAsString="false",this.defaultValue=!1}isUsableAsIndex(){return!1}getDefaultValue(){return!1}}class qb extends ht{constructor(t){super("byte",t),this.defaultValueAsString="0"}isUsableAsIndex(){return!0}getDefaultValue(){return 0}isByteShortIntLong(){return!0}}class Wb extends ht{constructor(t){super("char",t),this.defaultValueAsString='"\\u0000"'}isUsableAsIndex(){return!0}getDefaultValue(){return"\0"}}class Nb extends ht{constructor(t){super("double",t),this.defaultValueAsString="0.0"}isUsableAsIndex(){return!1}getDefaultValue(){return 0}}class Rb extends ht{constructor(t){super("float",t),this.defaultValueAsString="0.0"}isUsableAsIndex(){return!1}getDefaultValue(){return 0}}class Gb extends ht{constructor(t){super("int",t),this.defaultValueAsString="0"}isUsableAsIndex(){return!0}getDefaultValue(){return 0}isByteShortIntLong(){return!0}}class Kb extends ht{constructor(t){super("long",t),this.defaultValueAsString="0"}isUsableAsIndex(){return!0}getDefaultValue(){return 0}isByteShortIntLong(){return!0}}class Hb extends xl{constructor(t){super("null",re.instance,t)}getAbsoluteName(){return"null"}getCompletionItemDetail(){return v.nullType()}isUsableAsIndex(){return!1}getDefaultValue(){return 0}getCopyWithConcreteType(t){return this}toString(){return"null"}getDeclaration(){return"null"}}class Ub extends ht{constructor(t){super("short",t),this.defaultValueAsString="0"}isUsableAsIndex(){return!0}getDefaultValue(){return 0}isByteShortIntLong(){return!0}}class Qb extends ht{constructor(t){super("string",t),this.defaultValueAsString="null",this.defaultValue=null}isUsableAsIndex(){return!1}getDefaultValue(){return 0}toString(){return"String"}}class Yb extends ht{constructor(t){super("void",t),this.defaultValueAsString="null",this.defaultValue=null}isUsableAsIndex(){return!1}getDefaultValue(){return null}}const un=class un extends z{constructor(t){super(),this.value=t}debugOutput(){return this.value?"true":"false"}__internalHashCode(){return this.value}_compareTo(t){return this==t?0:1}};r(un,"FALSE",new un(!1)),r(un,"TRUE",new un(!0)),r(un,"isPrimitiveTypeWrapper",!0),r(un,"__javaDeclarations",[{type:"declaration",signature:"class Boolean extends Object implements Comparable"},{type:"field",signature:"static final boolean FALSE",constantValue:un.FALSE},{type:"field",signature:"static final boolean TRUE",constantValue:un.TRUE},{type:"method",signature:"public final boolean booleanValue()",template:"§1.value"},{type:"method",signature:"public int compareTo(Boolean otherBoolean)",native:un.prototype._compareTo},{type:"method",signature:"public static boolean getBoolean(String name)",template:'§1 == "true"'},{type:"method",signature:"public static boolean parseBoolean(String name)",template:'§1 == "true"'}]),r(un,"type");let vu=un;const mt=class mt extends z{constructor(t){super(),this.value=t}debugOutput(){return"'"+this.value+"'"}static _valueOf(t){return new mt(t)}_constructor1(t){return this.value=t,this}__internalHashCode(){return this.value}_compareTo(t){return this==t?0:1}_toString(){return new G(this.value)}_mj$equals$boolean$Object(t,e,i){t.s.push(i!=null&&i.value==this.value),e&&e()}static _isLetter(t){return this.letters.indexOf(t)>=0}static _isDigit(t){return this.digits.indexOf(t)>=0}static _isLetterOrDigit(t){return this.digits.indexOf(t)>=0||this.letters.indexOf(t)>=0}static _isLowerCase(t){return this.lowercase.indexOf(t)>=0}static _isUpperCase(t){return this.uppercase.indexOf(t)>=0}static _toUpperCase(t){return t.toLocaleUpperCase()}static _toLowerCase(t){return t.toLocaleLowerCase()}};r(mt,"isPrimitiveTypeWrapper",!0),r(mt,"letters","abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZöÖäÄß"),r(mt,"lowercase","abcdefghijklmnopqrstuvwxyzäöß"),r(mt,"uppercase","ABCDEFGHIJKLMNOPQRSTUVWXYZÖÄ"),r(mt,"digits","0123456789"),r(mt,"__javaDeclarations",[{type:"declaration",signature:"class Character extends Object implements Comparable"},{type:"method",signature:"Character(char value)",native:mt.prototype._constructor1},{type:"method",signature:"public final char charValue()",template:"§1.value"},{type:"method",signature:"public int compareTo(Character otherCharacter)",native:mt.prototype._compareTo},{type:"method",signature:"public static Character valueOf(char c)",native:mt._valueOf},{type:"method",signature:"public static boolean isLetter(char c)",native:mt._isLetter},{type:"method",signature:"public static boolean isLetterOrDigit(char c)",native:mt._isLetterOrDigit},{type:"method",signature:"public static boolean isDigit(char c)",native:mt._isDigit},{type:"method",signature:"public static boolean isLowerCase(char c)",native:mt._isLowerCase},{type:"method",signature:"public static boolean isUpperCase(char c)",native:mt._isUpperCase},{type:"method",signature:"public static char toUpperCase(char c)",native:mt._toUpperCase},{type:"method",signature:"public static char toLowerCase(char c)",native:mt._toLowerCase},{type:"method",signature:"public String toString()",native:mt.prototype._toString}]),r(mt,"type");let Au=mt;const Sr=class Sr extends z{constructor(e){super();r(this,"value",0);this.value=e}debugOutput(){return""+this.value}__internalHashCode(){return this.value}byteValue(){return(Math.trunc(this.value)+128)%256-128}shortValue(){return(Math.trunc(this.value)+32768)%65536-32768}toString(){return new G(""+this.value)}_mj$toString$String$(e,i){e.s.push(new G(""+this.value)),i&&i()}_mj$equals$boolean$Object(e,i,n){e.s.push(n!=null&&n.value==this.value),i&&i()}};r(Sr,"isPrimitiveTypeWrapper",!0),r(Sr,"__javaDeclarations",[{type:"declaration",signature:"abstract class Number extends Object"},{type:"method",signature:"public byte byteValue()",native:Sr.prototype.byteValue},{type:"method",signature:"public short shortValue()",native:Sr.prototype.shortValue},{type:"method",signature:"abstract public double doubleValue()"},{type:"method",signature:"abstract public float floatValue()"},{type:"method",signature:"abstract public int intValue()"},{type:"method",signature:"abstract public long longValue()"},{type:"method",signature:"public String toString()",native:Sr.prototype.toString,java:Sr.prototype._mj$toString$String$}]),r(Sr,"type");let As=Sr;const ri=class ri extends As{constructor(t){super(t||0)}_constructorDouble(t){return this.value=t,this}_mj$compareTo$int$T(t,e,i){t.s.push(this.value-i.value),e&&e()}static parseDouble(t){return Number.parseFloat(t.value)}intValue(){return Math.trunc(this.value)%4294967296-2147483648}longValue(){return Math.trunc(this.value)}floatValue(){return Math.fround(this.value)}doubleValue(){return this.value}static valueOf(t){return new ri(t)}static valueOfString(t){return new ri(Number.parseFloat(t))}};r(ri,"isPrimitiveTypeWrapper",!0),r(ri,"__javaDeclarations",[{type:"declaration",signature:"class Double extends Number implements Comparable"},{type:"method",signature:"public Double(double d)",native:ri.prototype._constructorDouble},{type:"field",signature:"static final int MAX_VALUE",constantValue:Number.MAX_VALUE},{type:"field",signature:"static final int POSITIVE_INFINITY",constantValue:Number.POSITIVE_INFINITY},{type:"field",signature:"static final int NEGATIVE_INFINITY",constantValue:Number.NEGATIVE_INFINITY},{type:"field",signature:"static final int MIN_VALUE",constantValue:Number.MIN_VALUE},{type:"method",signature:"public final double doubleValue()",native:ri.prototype.doubleValue,template:"§1.value"},{type:"method",signature:"public final float floatValue()",native:ri.prototype.floatValue,template:"Math.fround(§1.value)"},{type:"method",signature:"public final int intValue()",native:ri.prototype.intValue,template:"(Math.trunc(§1.value) % 0x100000000 - 0x80000000)"},{type:"method",signature:"public final long longValue()",native:ri.prototype.longValue,template:"Math.trunc(§1.value)"},{type:"method",signature:"public int compareTo(Double otherValue)",java:ri.prototype._mj$compareTo$int$T},{type:"method",signature:"public static double parseDouble(String s)",native:ri.parseDouble},{type:"method",signature:"public static Double valueOf(double f)",native:ri.valueOf},{type:"method",signature:"public static Double valueOf(string s)",native:ri.valueOfString}]),r(ri,"type");let wu=ri;const si=class si extends As{constructor(t){super(t||0)}_constructorFloat(t){return this.value=t,this}_mj$compareTo$int$T(t,e,i){t.s.push(this.value-i.value),e&&e()}static parseFloat(t){return Math.fround(Number.parseFloat(t.value))}intValue(){return Math.trunc(this.value)%4294967296-2147483648}longValue(){return Math.trunc(this.value)}floatValue(){return this.value}doubleValue(){return this.value}static valueOf(t){return new si(Math.fround(t))}static valueOfString(t){return new si(Math.fround(Number.parseFloat(t)))}};r(si,"isPrimitiveTypeWrapper",!0),r(si,"__javaDeclarations",[{type:"declaration",signature:"class Float extends Number implements Comparable"},{type:"field",signature:"static final int MAX_VALUE",constantValue:Number.MAX_VALUE},{type:"field",signature:"static final int MIN_VALUE",constantValue:Number.MIN_VALUE},{type:"field",signature:"static final int POSITIVE_INFINITY",constantValue:Number.POSITIVE_INFINITY},{type:"field",signature:"static final int NEGATIVE_INFINITY",constantValue:Number.NEGATIVE_INFINITY},{type:"method",signature:"public Float(float d)",native:si.prototype._constructorFloat},{type:"method",signature:"public final double doubleValue()",native:si.prototype.doubleValue,template:"§1.value"},{type:"method",signature:"public final float floatValue()",native:si.prototype.floatValue,template:"§1.value"},{type:"method",signature:"public final int intValue()",native:si.prototype.intValue,template:"(Math.trunc(§1.value) % 0x100000000 - 0x80000000)"},{type:"method",signature:"public final long longValue()",native:si.prototype.longValue,template:"Math.trunc(§1.value)"},{type:"method",signature:"public int compareTo(Float otherValue)",java:si.prototype._mj$compareTo$int$T},{type:"method",signature:"public static float parseFloat(String s)",native:si.parseFloat},{type:"method",signature:"public static Float valueOf(float f)",native:si.valueOf},{type:"method",signature:"public static Float valueOf(String s)",native:si.valueOfString}]),r(si,"type");let ku=si;const qe=class qe extends As{constructor(t){super(t||0)}_constructorInt(t){return this.value=t,this}_constructorString(t){try{let e=Number.parseInt(t);return new qe(e)}catch{throw new Uo('"'+t+'" is no integer.')}}_mj$compareTo$int$T(t,e,i){t.s.push(this.value-i.value),e&&e()}static parseInt(t,e=10){return(Number.parseInt(t.value,e)+2147483648)%4294967296-2147483648}intValue(){return this.value}longValue(){return this.value}floatValue(){return this.value}doubleValue(){return this.value}static valueOf(t){return new qe(t)}static valueOfString(t,e){return new qe((Number.parseInt(t,e)+2147483648)%4294967296-2147483648)}static toBinary(t){return(t>>>0).toString(2)}static toHex(t){return(t>>>0).toString(16)}static toOctal(t){return(t>>>0).toString(8)}static toStringRadix(t,e){return(t>>>0).toString(e)}static toString(t){return(t>>>0).toString(10)}};r(qe,"isPrimitiveTypeWrapper",!0),r(qe,"__javaDeclarations",[{type:"declaration",signature:"class Integer extends Number implements Comparable"},{type:"field",signature:"static final int MAX_VALUE",constantValue:2147483647},{type:"field",signature:"static final int MIN_VALUE",constantValue:-2147483648},{type:"method",signature:"public Integer(int value)",native:qe.prototype._constructorInt},{type:"method",signature:"public Integer(string value)",native:qe.prototype._constructorString},{type:"method",signature:"public final double doubleValue()",native:qe.prototype.doubleValue,template:"§1.value"},{type:"method",signature:"public final float floatValue()",native:qe.prototype.floatValue,template:"§1.value"},{type:"method",signature:"public final int intValue()",native:qe.prototype.intValue,template:"§1.value"},{type:"method",signature:"public final long longValue()",native:qe.prototype.longValue,template:"§1.value"},{type:"method",signature:"public int compareTo(Integer anotherInteger)",java:qe.prototype._mj$compareTo$int$T},{type:"method",signature:"public static int parseInt(String s)",native:qe.parseInt},{type:"method",signature:"public static int parseInt(String sr, int radix)",native:qe.parseInt},{type:"method",signature:"public static Integer valueOf(int i)",native:qe.valueOf},{type:"method",signature:"public static Integer valueOf(string s)",native:qe.valueOfString},{type:"method",signature:"public static Integer valueOf(string s, int radix)",native:qe.valueOfString},{type:"method",signature:"public static string toBinary(int number)",native:qe.toBinary},{type:"method",signature:"public static string toHex(int number)",native:qe.toHex},{type:"method",signature:"public static string toOctal(int number)",native:qe.toOctal},{type:"method",signature:"public static string toString(int number, int radix)",native:qe.toStringRadix},{type:"method",signature:"public static string toString(int number)",native:qe.toString}]),r(qe,"type");let Cu=qe;const Ft=class Ft extends As{constructor(t){super(t||0)}_constructorLong(t){return this.value=t,this}_mj$compareTo$int$T(t,e,i){t.s.push(this.value-i.value),e&&e()}static parseLong(t,e=10){return Number.parseInt(t.value,e)}intValue(){return(this.value+2147483648)%4294967296-2147483648}longValue(){return this.value}floatValue(){return this.value}doubleValue(){return this.value}static valueOf(t){return new Ft(t)}static valueOfString(t,e){return new Ft(Number.parseInt(t,e))}};r(Ft,"isPrimitiveTypeWrapper",!0),r(Ft,"__javaDeclarations",[{type:"declaration",signature:"class Long extends Number implements Comparable"},{type:"field",signature:"static final int MAX_VALUE",constantValue:Number.MAX_SAFE_INTEGER},{type:"field",signature:"static final int MIN_VALUE",constantValue:Number.MIN_SAFE_INTEGER},{type:"method",signature:"public Long(long d)",native:Ft.prototype._constructorLong},{type:"method",signature:"public final double doubleValue()",native:Ft.prototype.doubleValue,template:"§1.value"},{type:"method",signature:"public final float floatValue()",native:Ft.prototype.floatValue,template:"§1.value"},{type:"method",signature:"public final int intValue()",native:Ft.prototype.intValue,template:"(§1.value % 0x100000000 - 0x80000000)"},{type:"method",signature:"public final long longValue()",native:Ft.prototype.longValue,template:"§1.value"},{type:"method",signature:"public int compareTo(Long anotherLong)",java:Ft.prototype._mj$compareTo$int$T},{type:"method",signature:"public long parseLong(String s)",native:Ft.parseLong},{type:"method",signature:"public long parseLong(String sr, int radix)",native:Ft.parseLong},{type:"method",signature:"public static Long valueOf(long i)",native:Ft.valueOf},{type:"method",signature:"public static Long valueOf(String s)",native:Ft.valueOfString},{type:"method",signature:"public static Long valueOf(String s, int radix)",native:Ft.valueOfString}]),r(Ft,"type");let Su=Ft;const _t=class _t extends As{constructor(t){super(t)}_constructorShort(t){return this.value=t,this}_mj$compareTo$int$T(t,e,i){t.s.push(this.value-i.value),e&&e()}static parseShort(t,e=10){return(Number.parseInt(t.value,e)+32768)%65536-32768}intValue(){return this.value}longValue(){return this.value}floatValue(){return this.value}doubleValue(){return this.value}static valueOf(t){return new _t(t)}static valueOfString(t,e){return new _t(Number.parseInt(t,e)%65536-32768)}};r(_t,"isPrimitiveTypeWrapper",!0),r(_t,"__javaDeclarations",[{type:"declaration",signature:"class Short extends Number implements Comparable"},{type:"field",signature:"static final int MAX_VALUE",constantValue:32767},{type:"field",signature:"static final int MIN_VALUE",constantValue:-32768},{type:"method",signature:"public Short(short d)",native:_t.prototype._constructorShort},{type:"method",signature:"public final double doubleValue()",native:_t.prototype.doubleValue,template:"§1.value"},{type:"method",signature:"public final float floatValue()",native:_t.prototype.floatValue,template:"§1.value"},{type:"method",signature:"public final int intValue()",native:_t.prototype.intValue,template:"§1.value"},{type:"method",signature:"public final long longValue()",native:_t.prototype.longValue,template:"§1.value"},{type:"method",signature:"public int compareTo(Short otherShort)",java:_t.prototype._mj$compareTo$int$T},{type:"method",signature:"public static short parseShort(String s)",native:_t.parseShort},{type:"method",signature:"public static short parseShort(String sr, int radix)",native:_t.parseShort},{type:"method",signature:"public static Short valueOf(short i)",native:_t.valueOf},{type:"method",signature:"public static Short valueOf(String s)",native:_t.valueOfString},{type:"method",signature:"public static Short valueOf(String s, short radix)",native:_t.valueOfString}]),r(_t,"type");let xu=_t;const We=class We extends bs{constructor(){super(...arguments);r(this,"fastSprite")}_cj$_constructor_$Sprite3d$double$SpriteLibrary$int(e,i,n,s,a){super._cj$_constructor_$Object3d$(e,()=>{this.init(n,s,a),i&&i()})}init(e,i,n){this.fastSprite=this.world3d.fastSpriteManager.createSprite(e,i,n)}destroy(){super.destroy(),this.world3d.fastSpriteManager.removeSprite(this.fastSprite)}move(e,i,n){this.world3d.fastSpriteManager.moveSprite(this.fastSprite,e,i,n)}moveTo(e,i,n){this.world3d.fastSpriteManager.moveSpriteTo(this.fastSprite,e,i,n)}scale(e){this.world3d.fastSpriteManager.scaleSprite(this.fastSprite,e,e)}scaleX(e){this.world3d.fastSpriteManager.scaleSprite(this.fastSprite,e,1)}scaleY(e){this.world3d.fastSpriteManager.scaleSprite(this.fastSprite,1,e)}scaleV(e){this.world3d.fastSpriteManager.scaleSprite(this.fastSprite,e.v.x,e.v.y)}rotate(e){e*=Math.PI/180,this.world3d.fastSpriteManager.rotateSprite(this.fastSprite,e)}getX(){return this.world3d.fastSpriteManager.getX(this.fastSprite)}getY(){return this.world3d.fastSpriteManager.getY(this.fastSprite)}getZ(){return this.world3d.fastSpriteManager.getZ(this.fastSprite)}setColorInt(e){this.world3d.fastSpriteManager.setColor(this.fastSprite,e)}setAlpha(e){this.world3d.fastSpriteManager.setAlpha(this.fastSprite,e)}};r(We,"__javaDeclarations",[{type:"declaration",signature:"class Sprite3d extends Object3d"},{type:"method",signature:"Sprite3d(double width, SpriteLibrary spriteLibrary, int index)",java:We.prototype._cj$_constructor_$Sprite3d$double$SpriteLibrary$int},{type:"method",signature:"void move(double x,double y,double z)",native:We.prototype.move},{type:"method",signature:"void moveTo(double x,double y,double z)",native:We.prototype.moveTo},{type:"method",signature:"double getX()",native:We.prototype.getX},{type:"method",signature:"double getY()",native:We.prototype.getY},{type:"method",signature:"double getZ()",native:We.prototype.getZ},{type:"method",signature:"void setColor(int color)",native:We.prototype.setColorInt},{type:"method",signature:"void setAlpha(double alpha)",native:We.prototype.setAlpha},{type:"method",signature:"void scaleX(double angleDeg)",native:We.prototype.scaleX},{type:"method",signature:"void scaleY(double angleDeg)",native:We.prototype.scaleY},{type:"method",signature:"void scaleZ(double angleDeg)",native:We.prototype.scale},{type:"method",signature:"void scale(Vector3 v)",native:We.prototype.scaleV},{type:"method",signature:"void scale(double d)",native:We.prototype.scale},{type:"method",signature:"void rotateX(double angleDeg)",native:We.prototype.rotate},{type:"method",signature:"void rotateY(double angleDeg)",native:We.prototype.rotate},{type:"method",signature:"void rotateZ(double angleDeg)",native:We.prototype.rotate},{type:"method",signature:"void rotate(double angleDeg)",native:We.prototype.rotate},{type:"method",signature:"final void move(Vector3 v)",native:We.prototype.vmove},{type:"method",signature:"void moveTo(double x,double y,double z)",native:We.prototype.moveTo},{type:"method",signature:"final void moveTo(Vector3 p)",native:We.prototype.vmoveTo},{type:"method",signature:"final void scale(double d)",native:We.prototype.scaleDouble},{type:"method",signature:"void destroy()",java:We.prototype.destroy}]);let Tu=We;const Ba=class Ba extends kn{_cj$_constructor_$Icosahedron3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{const i=new fh(.5);this.mesh=new me(i,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Icosahedron3d$double(t,e,i){super._cj$_constructor_$Mesh3d$(t,()=>{const n=new fh(i);this.mesh=new me(n,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Icosahedron3d$double$int(t,e,i,n){super._cj$_constructor_$Mesh3d$(t,()=>{const s=new fh(i,n);this.mesh=new me(s,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(Ba,"__javaDeclarations",[{type:"declaration",signature:"class Icosahedron3d extends Mesh3d"},{type:"method",signature:"Icosahedron3d(double radius, int detail)",java:Ba.prototype._cj$_constructor_$Icosahedron3d$double$int},{type:"method",signature:"Icosahedron3d(double radius)",java:Ba.prototype._cj$_constructor_$Icosahedron3d$double},{type:"method",signature:"Icosahedron3d()",java:Ba.prototype._cj$_constructor_$Icosahedron3d$}]);let $u=Ba;class Eu extends Oe{constructor(t){super(t)}}r(Eu,"__javaDeclarations",[{type:"declaration",signature:"class CopyOnWriteArrayList implements List",comment:o.arrayListClassComment},{type:"method",signature:"CopyOnWriteArrayList()",native:Oe.prototype._constructor,comment:o.arrayListConstructorComment},{type:"method",signature:"Iterator iterator()",native:Oe.prototype._iterator,comment:o.arrayListIteratorComment},{type:"method",signature:"void forEach(Consumer action)",java:Oe.prototype._mj$forEach$void$Consumer,comment:o.arrayListForeachComment},{type:"method",signature:"Object[] toArray()",native:Oe.prototype._toArray,template:"§1.elements.slice()",comment:o.collectionToArrayComment},{type:"method",signature:" T[] toArray(T[] a)",native:Oe.prototype._toArray,template:"§1.elements.slice()",comment:o.collectionToArrayComment2},{type:"method",signature:"boolean add(E e)",native:Oe.prototype._add,template:"(§1.elements.push(§2) >= 0)",comment:o.collectionAddElementComment},{type:"method",signature:"boolean addAll(Collection c)",java:Oe.prototype._addAll,comment:o.collectionAddAllComment},{type:"method",signature:"void clear()",native:Oe.prototype._clear,template:"§1.elements.length = 0",comment:o.collectionClearComment},{type:"method",signature:"boolean contains(E Element)",java:Oe.prototype._mj$contains$boolean$E,comment:o.collectionContainsComment},{type:"method",signature:"boolean containsAll(Collection c)",java:Oe.prototype._mj$containsAll$boolean$Collection,comment:o.collectionContainsAllComment},{type:"method",signature:"boolean isEmpty()",native:Oe.prototype._isEmpty,template:"(§1.elements.length == 0)",comment:o.collectionIsEmptyComment},{type:"method",signature:"boolean remove(E element)",java:Oe.prototype._mj$remove$boolean$E,comment:o.collectionRemoveObjectComment},{type:"method",signature:"boolean removeAll(Collection c)",java:Oe.prototype._removeAll,comment:o.collectionRemoveAllComment},{type:"method",signature:"int size()",native:Oe.prototype._size,template:"§1.elements.length",comment:o.collectionSizeComment},{type:"method",signature:"boolean add(int index, E element)",native:Oe.prototype._addWithIndex,comment:o.listAddElementComment},{type:"method",signature:"boolean addAll(int index, Collection c)",java:Oe.prototype._addAllWithIndex,comment:o.listAddAllElementsComment},{type:"method",signature:"E get (int index)",native:Oe.prototype._getWithIndex,comment:o.listGetComment},{type:"method",signature:"int indexOf (E Element)",java:Oe.prototype._mj$indexOf$int$E,comment:o.listIndexOfComment},{type:"method",signature:"E remove (int index)",native:Oe.prototype._removeWithIndex,comment:o.listRemoveComment},{type:"method",signature:"E set (int index, E Element)",native:Oe.prototype._setWithIndex,comment:o.listSetComment},{type:"method",signature:"void sort(Comparator comparator)",java:Oe.prototype._mj$sort$void$Comparator,comment:o.listSortComment},{type:"method",signature:"String toString()",java:Oe.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Eu,"type");const xr=class xr extends mi{_mj$count$long$(t,e){}_mj$toArray$Object_I$(t,e){}_mj$forEach$void$Consumer(t,e,i){}_mj$filter$Stream$Predicate(t,e,i){}_mj$map$Stream$Function(t,e,i){}};r(xr,"__javaDeclarations",[{type:"declaration",signature:"interface Stream"},{type:"method",signature:"Object[] toArray()",java:xr.prototype._mj$toArray$Object_I$},{type:"method",signature:"long count()",java:xr.prototype._mj$count$long$},{type:"method",signature:"void forEach(Consumer action)",java:xr.prototype._mj$forEach$void$Consumer},{type:"method",signature:"Stream filter(Predicate predicate)",java:xr.prototype._mj$filter$Stream$Predicate},{type:"method",signature:" Stream map(Function mapper)",java:xr.prototype._mj$map$Stream$Function}]),r(xr,"type");let Iu=xr;const zo=class zo extends mi{_mj$test$boolean$T(t,e,i){}};r(zo,"__javaDeclarations",[{type:"declaration",signature:"interface Predicate"},{type:"method",signature:"boolean test(T t)",java:zo.prototype._mj$test$boolean$T}]),r(zo,"type");let Du=zo;class An extends Oi{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(An,"__javaDeclarations",[{type:"declaration",signature:"class IllegalArgumentException extends RuntimeException"},{type:"method",signature:"public IllegalArgumentException()",native:Oi.prototype._constructor},{type:"method",signature:"public IllegalArgumentException(String message)",native:Te.prototype._constructor_m},{type:"method",signature:"public IllegalArgumentException(Throwable cause)",native:Te.prototype._constructor_c},{type:"method",signature:"public IllegalArgumentException(String message, Throwable cause)",native:Te.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:Te.prototype._toString}]),r(An,"type");class Ui extends Oi{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(Ui,"__javaDeclarations",[{type:"declaration",signature:"class IllegalStateException extends Exception"},{type:"method",signature:"public IllegalStateException()",native:Oi.prototype._constructor},{type:"method",signature:"public IllegalStateException(String message)",native:Te.prototype._constructor_m},{type:"method",signature:"public IllegalStateException(Throwable cause)",native:Te.prototype._constructor_c},{type:"method",signature:"public IllegalStateException(String message, Throwable cause)",native:Te.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:Te.prototype._toString}]),r(Ui,"type");class sa extends mo{constructor(){super();r(this,"primitiveStringClass",Td);this.types.push(new zb(this),new Wb(this),new qb(this),new Ub(this),new Gb(this),new Kb(this),new Rb(this),new Nb(this),new Qb(this),new Yb(this),new Hb(this)),Nr._initPredefinedColors(),this.classesInterfacesEnums.push(Qc,Yc,Xl,z,G,Vi,Yp,uu,su,Zo,du,_c,gs,Rc,yd,vd,qc,Nc,Kc,Wc,Gc,zc,ou,au,lu,Du,As,Cu,Su,ku,wu,xu,vu,Au,pu,mu,gu,hu,Te,Oi,F,An,Uo,Kt,Qo,Pe,cu,il,Ui,Jc,kd,ho,tu,Oe,Eu,Uc,Cd,Zc,eu,nu,iu,Xc,Sd,xd,ru,Iu,wd,fu,yu,nl,bu,Hc,Fc,tl,Bc,gd,Pc,fd,Oc,Vc,Nr,Bn,dc,Tc,Mc,Yo,Hi,jt,el,rd,vs,od,mc,ld,hd,dd,Xo,sd,hc,Dc,da,jc,xc,cc,md,Ic,pd,Jl,td,oa,Xh,Jh,id,ec,Wr,bs,Uh,kn,Rh,oc,$u,lo,Zh,Yh,Qh,ic,tc,Kh,Hh,Gh,sc,ac,lc,oo,rc,nc,Nh,Tu,$c,Cc,Sc,Ac,wc,fc,cd,la,gc,bc,yc,vc,Lc,Ad,Ec,ud)}getMainProgram(){}isReplModule(){return!1}getCodeFragments(){return[]}}class po{constructor(){r(this,"stepIndex",-1);r(this,"range");r(this,"type");r(this,"isLefty",!1);r(this,"finalValueIsOnStack",!1);r(this,"isSuperKeywordWithLevel");r(this,"isFinalField")}allButLastPart(){return[this]}lastPartOrPop(){return this.finalValueIsOnStack?new _(`${L.stack}.pop()`,this.range):this}isPureTermWithoutPop(){return!0}isPureTerm(){return!0}alterPureTerm(t){}getPureTerm(){return""}ensureFinalValueIsOnStack(){}isConstant(){return!1}getConstantValue(){}endsWith(t){return!1}getEmitToStepListeners(){return[]}}class _ extends po{constructor(e,i,n,s){super();r(this,"constantValue");r(this,"emitToStepListeners",[]);this.text=e,this.range=i,this.type=n,this.constantValue=s}isEmptyStatement(){return!this.text||this.text.length==0}setConstantValue(e){this.constantValue=e}getConstantValue(){return this.constantValue}isConstant(){return typeof this.constantValue<"u"}ensureFinalValueIsOnStack(){this.finalValueIsOnStack||(this.text.endsWith(`; `)&&(this.text=this.text.substring(0,this.text.length-2)),this.text=`${L.stack}.push(${this.text}); `,this.finalValueIsOnStack=!0)}index(e){return this.stepIndex=e,e}emit(){return this.text}addEmitToStepListener(e){Array.isArray(e)||(e=[e]),this.emitToStepListeners.push(...e)}takeEmitToStepListenersFrom(e){Array.isArray(e)||(e=[e]);for(let i of e)this.emitToStepListeners=this.emitToStepListeners.concat(i.getEmitToStepListeners())}getEmitToStepListeners(){return this.emitToStepListeners}emitToStep(e,i){return e.codeAsString=e.codeAsString+this.text,e.setRangeStartIfUndefined(this.range),e.adaptRangeEnd(this.range),this.emitToStepListeners.forEach(n=>n(e)),e}flattenInto(e){e.push(this)}isPureTerm(){return!0}alterPureTerm(e){this.text=e,this.constantValue=void 0}getPureTerm(){return this.text}allButLastPart(){return this.finalValueIsOnStack?[this]:[]}lastPartOrPop(){return this.finalValueIsOnStack?new _(`${L.stack}.pop()`,this.range):this}endsWith(e){return this.text.endsWith(e)}}const qo=class qo extends po{constructor(){super();r(this,"id");r(this,"labelIndexingListeners",[]);this.id=qo.count++}isEmptyStatement(){return!0}flattenInto(e){e.push(this)}emit(){return"// Label "+this.id+` `}emitToStep(e,i){return e.codeAsString=e.codeAsString+this.emit(),e}getJumpToSnippet(){return new qt(this)}index(e){return this.stepIndex=e,this.labelIndexingListeners.forEach(i=>i(e)),e}addIndexingListener(e){this.labelIndexingListeners.push(e)}static resetCount(){qo.count=0}};r(qo,"count",0);let _e=qo;class qt extends po{constructor(t){super(),this.label=t}isEmptyStatement(){return!1}flattenInto(t){t.push(this)}index(t){return this.stepIndex=t,t}emit(){return"return "+this.label.stepIndex+`; `}emitToStep(t,e){return t.codeAsString=t.codeAsString+this.emit(),t.range.startLineNumber||(t.range=this.range),t}}class se extends po{constructor(e,i,n){super();r(this,"parts",[]);i?this.range={startLineNumber:i.startLineNumber,startColumn:i.startColumn,endLineNumber:i.endLineNumber,endColumn:i.endColumn}:this.range={startLineNumber:-1,startColumn:-1,endLineNumber:-1,endColumn:-1},this.addParts(e),n&&(this.type=n)}isEmptyStatement(){for(let e of this.parts)if(e!=null&&!e.isEmptyStatement())return!1;return!0}getEmitToStepListeners(){let e=[];return this.parts.forEach(i=>e=e.concat(i.getEmitToStepListeners())),e}setRangeStartIfUndefined(e){this.range.startLineNumber<0&&e&&(this.range.startLineNumber=e.startLineNumber,this.range.startColumn=e.startColumn)}adaptRangeEnd(e){e&&(this.range.endLineNumber<0?(this.range.endLineNumber=e.endLineNumber,this.range.endColumn=e.endColumn):this.range.endLineNumber0&&this.parts[0]instanceof vn&&(this.parts.shift(),this.parts.length>0&&this.parts[0]instanceof se&&this.parts[0].removeNextStepBeforeSnippetMark())}isConstant(){return this.isPureTerm()&&this.parts[0].isConstant()}getConstantValue(){return this.parts[0].getConstantValue()}isPureTermWithoutPop(){return this.isPureTerm()&&this.parts[0].text.indexOf("pop()")<0}isPureTerm(){return!this.finalValueIsOnStack&&this.parts.length==1&&this.parts[0]instanceof _}getPureTerm(){return this.parts[0].emit()}alterPureTerm(e){this.parts[0].text=e}emit(){let e="";for(let i of this.parts)e+=i.emit();return e}flattenInto(e){if(this.parts.length!=0&&(this.parts[0]instanceof vn&&(e.length==0||e[e.length-1]instanceof vn)&&this.parts.shift(),this.parts.length!=0)){this.parts[0].range||(this.parts[0].range=this.range);for(let i of this.parts)i.flattenInto(e);this.parts[this.parts.length-1].range||(this.parts[this.parts.length-1].range=this.range)}}endsWithNextStepMark(){return this.parts.length>0&&this.parts[this.parts.length-1]instanceof vn}endsWith(e){for(let i=this.parts.length-1;i>=0;i--)if(this.parts[i]instanceof _)return this.parts[i].endsWith(e);return!1}emitToStep(e,i,n){e.setRangeStartIfUndefined(this.range);let s=e;for(let a of this.parts)s!=e&&(e.setRangeStartIfUndefined(a.range),s=e),e=a.emitToStep(e,i,n);return e.adaptRangeEnd(this.range),e}static applyMethod(e,i,n,s,a){let l=new se([],s);l.type=a;let h=[];for(let u=n.length-1;u>=0;u--){let g=n[u];l.parts=l.parts.concat(g.finalValueIsOnStack?g:g.allButLastPart())}for(let u of n)h.push(u.lastPartOrPop());l.parts=l.parts.concat(e.finalValueIsOnStack?e:e.allButLastPart());let c=e.lastPartOrPop();return l.addStringPart(c.emit()+"."+i+"("+h.map(u=>u.emit()).join(", ")+")",s),l}addNextStepMark(){this.parts.push(new vn)}addStringPart(e,i,n,s){let a=new _(e,i,n);return s&&s.forEach(l=>a.addEmitToStepListener(l.getEmitToStepListeners())),this.addParts([a]),a}addParts(e){if(!e||(Array.isArray(e)||(e=[e]),e.length==0))return;this.parts.length==0&&this.setRangeStartIfUndefined(e[0].range);let i=e[e.length-1];this.adaptRangeEnd(i.range),this.parts=this.parts.concat(e);for(let n of e)n&&n.type&&(this.type=n.type,this.finalValueIsOnStack=n.finalValueIsOnStack)}allButLastPart(){return this.parts.length<2?[]:this.finalValueIsOnStack?this.parts:this.parts.slice(0,this.parts.length-1)}lastPartOrPop(){return this.parts.length==0?new Zb:this.finalValueIsOnStack?new _(`${L.stack}.pop()`,this.range):this.parts[this.parts.length-1]}ensureFinalValueIsOnStack(){if(this.finalValueIsOnStack||this.parts.length==0)return;let e=this.getLastPartWithType();if(e instanceof _){e.ensureFinalValueIsOnStack();return}e instanceof se&&e.ensureFinalValueIsOnStack()}getLastPartWithType(){for(let e=this.parts.length-1;e>=0;e--){let i=this.parts[e];if(i&&i.type)return i}console.log("Error in CodeSnippetContainer.getLastPartWithType: Didn't find last part with type!")}index(e){this.stepIndex=e;let i=e;for(let n of this.parts)i=n.index(i);return i}}class vn extends po{isEmptyStatement(){return!0}emit(){return""}index(t){return this.stepIndex=t,t+1}emitToStep(t,e,i){let n=t.codeAsString.lastIndexOf("return"),s=t.codeAsString.substring(n);return(n<0||!s.match(/return\ \d*;\n?$/))&&(t.codeAsString+="return "+(this.stepIndex+1)+";"),e.push(t),new ed(this.stepIndex+1,i)}flattenInto(t){t.length>0&&t[t.length-1]instanceof vn||t.length>1&&t[t.length-1]instanceof _e&&t[t.length-2]instanceof vn||t.push(this)}}class Zb extends po{constructor(){super(),this.range=re.instance}isEmptyStatement(){return!0}emitToStep(t,e){return t}index(t){return this.stepIndex=t,t}emit(){return""}flattenInto(t){}}class ah{static getCommaSeparatedParameterIdentifiers(t,e){let i="";for(let n=t;n=t&&(i+="§"+e),i}}class De extends ah{constructor(t){super(),this.templateString=t}applyToSnippet(t,e,...i){if(i[0].isPureTerm()){let a=new _(this.templateString.replace(new RegExp("\\§1","g"),()=>i[0].getPureTerm()),e,t);return a.takeEmitToStepListenersFrom(i),a}let n=new se(i[0].allButLastPart(),e),s=i[0].lastPartOrPop();return n.addStringPart(this.templateString.replace(new RegExp("\\§1","g"),()=>s.emit()),e,t,[s]),n.type=t,n}}class fs extends ah{constructor(t){super(),this.templateString=t}applyToSnippet(t,e,...i){let n=i[0].isPureTerm(),s=i[1].isPureTerm();if(n&&s){let c=this.templateString.replace(new RegExp("\\§1","g"),()=>i[0].getPureTerm());c=c.replace(new RegExp("\\§2","g"),()=>i[1].getPureTerm());let u=new _(c,e,t);return u.takeEmitToStepListenersFrom(i),u}let a=(this.templateString.match(/\§1/g)||[]).length,l=(this.templateString.match(/\§2/g)||[]).length;if(a>1&&!n||l>1&&!s)throw"TwoParameterTemplate: can't replace more than one placeholder with non-pure snippet.";let h=new se([],e);if(n||s){h.addParts(i[0].allButLastPart()),h.addParts(i[1].allButLastPart());let c=i[0].lastPartOrPop(),u=i[1].lastPartOrPop();return h.addStringPart(this.templateString.replace(new RegExp("\\§1","g"),()=>c.emit()).replace(new RegExp("\\§2","g"),()=>u.emit()),e,t,[c,u]),h.type=t,h}return i[0].ensureFinalValueIsOnStack(),i[1].ensureFinalValueIsOnStack(),this.templateString.indexOf("§1")f.emit()).join(n)+s,e,t);return a.forEach(f=>g.takeEmitToStepListenersFrom(f)),g}let h=new se([],e);for(let g=a.length-1;g>=0;g--)h.addParts(a[g].allButLastPart());let c=a.map(g=>g.lastPartOrPop()),u=i+c.map(g=>g.emit()).join(n)+s;return h.addStringPart(u,e,t,c),h.type=t,h}}class Gr extends ah{constructor(e){super();r(this,"orderedParameters");r(this,"maxN",-1);this.templateString=e}analyzeTemplateString(){this.orderedParameters=[];let e=this.templateString.match(/\§\d*/g);if(e)for(let i=0;ithis.maxN&&(this.maxN=s),this.orderedParameters.push({parameter:e[i],n:s,order:i})}}applyToSnippet(e,i,...n){switch(n.length){case 1:return new De(this.templateString).applyToSnippet(e,i,n[0]);case 2:return new fs(this.templateString).applyToSnippet(e,i,n[0],n[1])}if(this.analyzeTemplateString(),n.length=0;g--){let f=this.orderedParameters[g];s=s.replace(new RegExp("\\"+f.parameter,"g"),()=>n[f.n-1].emit())}let u=new _(s,i,e);return u.takeEmitToStepListenersFrom(n),u}let l=new se([],i),h=this.orderedParameters.sort((u,g)=>g.order-u.order),c=[];for(let u=0;uf.emit())}return l.addStringPart(s,i,e,c),l.type=e,l}}class Yi extends ah{constructor(t,e){super(),this.operator=t,this.isCommutative=e}applyToSnippet(t,e,...i){let n=i[0].isPureTerm(),s=i[1].isPureTerm(),a=i[0].isConstant(),l=i[1].isConstant();if(a&&l)return this.foldConstants(i[0],i[1],this.operator,t,e);if(n&&s){let c;if(this.operator=="/"||this.operator=="%"){let u="",g="";this.operator=="/"&&i[0].type instanceof ht&&i[0].type.isByteShortIntLong()&&i[1].type instanceof ht&&i[1].type.isByteShortIntLong()&&(u="Math.trunc( ",g=")"),l&&i[1].getConstantValue()!=0?c=new _(u+i[0].getPureTerm()+" "+this.operator+" "+i[1].getPureTerm()+g,e,t):c=new _(u+i[0].getPureTerm()+" "+this.operator+" ("+i[1].getPureTerm()+`|| ${$.throwArithmeticException}("${v.divideByZero()}", ${e.startLineNumber}, ${e.startColumn}, ${e.endLineNumber}, ${e.endColumn}))`+g,e,t)}else c=new _(i[0].getPureTerm()+" "+this.operator+" "+i[1].getPureTerm(),e,t);return c.takeEmitToStepListenersFrom(i),c}let h=new se([],e);if(n||s){h.addParts(i[0].allButLastPart()),h.addParts(i[1].allButLastPart());let c=i[0].lastPartOrPop(),u=i[1].lastPartOrPop();return this.operator=="/"&&i[0].type instanceof ht&&i[0].type.isByteShortIntLong()&&i[1].type instanceof ht&&i[1].type.isByteShortIntLong()?h.addStringPart(`Math.trunc(${c.emit()} ${this.operator} ${u.emit()})`,e,t,[c,u]):h.addStringPart(`${c.emit()} ${this.operator} ${u.emit()}`,e,t,[c,u]),h.finalValueIsOnStack=!1,h.type=t,h}if(["-","/","<",">","<=",">="].indexOf(this.operator)>=0){switch(i[0].ensureFinalValueIsOnStack(),i[1].ensureFinalValueIsOnStack(),h.addParts(i[0]),h.addParts(i[1]),this.operator){case"-":h.addStringPart(`-${L.stack}.pop() + ${L.stack}.pop()`,e,t);break;case"/":i[0].type instanceof ht&&i[0].type.isByteShortIntLong()&&i[1].type instanceof ht&&i[1].type.isByteShortIntLong()?h.addStringPart(`Math.trunc( 1/(${L.stack}.pop() || ${$.throwArithmeticException}("${v.divideByZero()}", ${e.startLineNumber}, ${e.startColumn}, ${e.endLineNumber}, ${e.endColumn})) * ${L.stack}.pop() )`,e,t):h.addStringPart(`1/(${L.stack}.pop() || ${$.throwArithmeticException}("${v.divideByZero()}", ${e.startLineNumber}, ${e.startColumn}, ${e.endLineNumber}, ${e.endColumn})) * ${L.stack}.pop()`,e,t);break;case"<":h.addStringPart(`${L.stack}.pop() > ${L.stack}.pop()`,e,t);break;case">":h.addStringPart(`${L.stack}.pop() < ${L.stack}.pop()`,e,t);break;case"<=":h.addStringPart(`${L.stack}.pop() >= ${L.stack}.pop()`,e,t);break;case">=":h.addStringPart(`${L.stack}.pop() <= ${L.stack}.pop()`,e,t);break}return h.finalValueIsOnStack=!1,h.type=t,h}return i[0].ensureFinalValueIsOnStack(),i[1].ensureFinalValueIsOnStack(),h.addParts(i[1]),h.addParts(i[0]),this.operator=="%"?h.addStringPart(`${L.stack}.pop() ${this.operator} (${L.stack}.pop() || ${$.throwArithmeticException}("${v.divideByZero()}", ${e.startLineNumber}, ${e.startColumn}, ${e.endLineNumber}, ${e.endColumn}))`,e,t):h.addStringPart(`${L.stack}.pop() ${this.operator} ${L.stack}.pop()`,e,t),h.finalValueIsOnStack=!1,h.type=t,h}foldConstants(t,e,i,n,s){let a=t.getConstantValue(),l=e.getConstantValue(),h;switch(i){case"+":h=a+l;break;case"-":h=a-l;break;case"*":h=a*l;break;case"/":if(t.type.isByteShortIntLong()&&e.type.isByteShortIntLong()){h=Math.trunc(Math.trunc(a)/Math.trunc(l));break}h=a/l;break;case"%":h=a%l;break;case"<":h=a":h=a>l;break;case"<=":h=a<=l;break;case">=":h=a>=l;break;case"!=":h=a!=l;break;case"==":h=a==l;break;case"&&":h=a&&l;break;case"||":h=a||l;break;case"&":h=a&l;break;case"|":h=a|l;break;case"^":h=a^l;break;case"<<":h=a<>":h=a>>l;break;case">>>":h=a>>>l;break}let c=typeof h=="string"?`"${this.escapeString(h)}"`:h+"";return new _(c,s,n,h)}escapeString(t){return t=t.replaceAll("\\","\\\\"),t=t.replaceAll(` `,"\\n"),t=t.replaceAll(" ","\\t"),t=t.replaceAll("\r","\\r"),t=t.replaceAll('"','\\"'),t}}class Xb{constructor(t,e){this.identifier=t,this.range=e}}class zm{constructor(t){r(this,"symbols");r(this,"symbolReadHappened");r(this,"symbolWriteHappened");r(this,"returnHappened");r(this,"childrenCount",0);r(this,"childrenWithReturnStatement",0);this.parent=t,t?(this.symbols=t.symbols.slice(),this.symbolReadHappened=t.symbolReadHappened.slice(),this.symbolWriteHappened=t.symbolWriteHappened.slice(),this.returnHappened=t.returnHappened,t.childrenCount++):(this.symbols=[],this.symbolReadHappened=[],this.symbolWriteHappened=[],this.returnHappened=!1)}addSymbolDeclaration(t,e){this.symbols.push(t),this.symbolReadHappened.push(!1),this.symbolWriteHappened.push(e)}onSymbolRead(t,e,i){let n=this.symbols.indexOf(t);if(n>=0){if(!this.symbolWriteHappened[n]){let s=v.variableNotInitialized(t.identifier);i.push({message:s.message,id:s.id,level:"warning",range:e})}this.symbolReadHappened[n]=!0}}onSymbolWrite(t,e,i){let n=this.symbols.indexOf(t);n>=0&&(this.symbolWriteHappened[n]=!0)}onReturnHappened(){this.returnHappened=!0}onCloseBranch(t){let e=0;if(this.parent){this.returnHappened&&this.parent.childrenWithReturnStatement++;for(let i=0;il.flattenInto(i));let n=!1;for(let l=0;lt.getPureTerm())),t.type=s,t;let a=new se(t.allButLastPart(),n,s),l=t.lastPartOrPop();return a.addStringPart(e.replace(new RegExp("\\§1","g"),()=>l.emit()),n,s,[l]),a}}var Jb={userClassSchoolDefault:["user","class","school","default"],classSchoolUserDefault:["class","school","user","default"]},Xp={"editor.hoverVerbosity.showHelpOnKeywordsAndOperators":!0,"editor.hoverVerbosity.showMethodDeclaration":"declarationsAndComments","editor.hoverVerbosity.showClassDeclaration":"declarationsAndComments","editor.contextSensitiveHelp.StructureStatements":"true","editor.contextSensitiveHelp.ParameterHints":"true","editor.autoClosingBrackets":"beforeWhitespace","editor.autoClosingQuotes":"beforeWhitespace","editor.autoSemicolons":!0,"editor.bracketPairLines":"vertical","editor.stickyScroll":"on","editor.quickFix.getterAndSetter":"offer","editor.quickFix.generateConstructor":"offer","formatter.forceSpacesAfterIfForWhileDo":"1","classDiagram.typeConvention":"java","classDiagram.background":"transparent","classDiagram.omitVoidReturnType":"omit","classDiagram.drawCompositionDiamond":"yes","explorer.fileOrder":"user-defined","explorer.workspaceOrder":"user-defined","compiler.shadowedSymbolErrorLevel":"warning"},Jp={"editor.quickFix.getterAndSetter":"classSchoolUserDefault","editor.quickFix.generateConstructor":"classSchoolUserDefault"};class ey{getValue(t,e){return Xp[t]}}var ga=0,vo=1,qn=2,Hr=3,ki=4,$d=5,ya=6,hr=7,wo=8,Wn=9,Zi=10,ty=[[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1],[!1,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1],[!1,!1,!0,!1,!1,!1,!1,!1,!1,!1,!1],[!1,!1,!1,!0,!0,!0,!0,!0,!0,!0,!0],[!1,!1,!1,!1,!0,!0,!0,!0,!0,!0,!1],[!1,!1,!1,!1,!1,!0,!0,!0,!0,!0,!1],[!1,!1,!1,!1,!1,!1,!0,!0,!0,!0,!1],[!1,!1,!1,!1,!1,!1,!1,!0,!0,!0,!1],[!1,!1,!1,!1,!1,!1,!1,!1,!0,!0,!1],[!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1],[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0]],qm=["","void","boolean","char","byte","short","int","long","float","double","string"],Wm=["","","Boolean","Character","Byte","Short","Integer","Long","Float","Double","String"],lr={Boolean:qn,Character:Hr,Byte:ki,Short:$d,Integer:ya,Long:hr,Float:wo,Double:Wn,String:Zi},Li={void:vo,boolean:qn,char:Hr,byte:ki,short:$d,int:ya,long:hr,float:wo,double:Wn,string:Zi},Nm=[m.assignment,m.plusAssignment,m.minusAssignment,m.multiplicationAssignment,m.divisionAssignment,m.moduloAssignment],iy=[m.and,m.or,m.XOR],ny=[m.shiftLeft,m.shiftRight,m.shiftRightUnsigned];m.plusAssignment,m.minusAssignment,m.multiplicationAssignment,m.divisionAssignment,m.moduloAssignment,m.assignment;var Rm=[m.lower,m.greater,m.lowerOrEqual,m.greaterOrEqual,m.notEqual,m.equal];class ry{constructor(t,e,i,n){r(this,"progressManager");r(this,"voidType");r(this,"charType");r(this,"intType");r(this,"floatType");r(this,"doubleType");r(this,"booleanType");r(this,"stringType");r(this,"nullType");r(this,"throwableType");r(this,"objectType");r(this,"assertionsType");r(this,"stringNonPrimitiveType");r(this,"iterableType");r(this,"iteratorType");r(this,"primitiveStringClass",Td);r(this,"primitiveTypes",[]);r(this,"currentSymbolTable");r(this,"symbolTableStack",[]);r(this,"settingStore");this.module=t,this.libraryTypestore=e,this.compiledTypesTypestore=i,this.settingStore=n||new ey,this.voidType=this.libraryTypestore.getType("void"),this.charType=this.libraryTypestore.getType("char"),this.intType=this.libraryTypestore.getType("int"),this.floatType=this.libraryTypestore.getType("float"),this.doubleType=this.libraryTypestore.getType("double"),this.booleanType=this.libraryTypestore.getType("boolean"),this.stringType=this.libraryTypestore.getType("string"),this.nullType=this.libraryTypestore.getType("null"),this.throwableType=this.libraryTypestore.getType("Throwable"),this.objectType=this.libraryTypestore.getType("Object"),this.stringNonPrimitiveType=this.libraryTypestore.getType("String"),this.assertionsType=this.libraryTypestore.getType("Assertions"),this.iterableType=this.libraryTypestore.getType("Iterable"),this.iteratorType=this.libraryTypestore.getType("Iterator"),this.primitiveTypes.push(this.voidType);for(let s=1;s=0)return this.compileAssignment(t,e,b,A,c,u,n,s,a);if(g&&e.getConstantValue()!==null&&(t=this.unbox(t)),f&&t.getConstantValue()!==null&&(e=this.unbox(e)),n==m.equal||n==m.notEqual){if(l==this.nullType&&(!h.isPrimitive||h==this.stringType)||h==this.nullType&&(!l.isPrimitive||l==this.stringType))return new Yi(S,!0).applyToSnippet(this.booleanType,a,t,e);if(b==0&&A!=0||b!=0&&A==0){this.pushError(v.badOperandTypesForBinaryOperator(we[n],l.toString(),h.toString()),"error",s);return}return new Yi(S,!0).applyToSnippet(this.booleanType,a,t,e)}if(b==Zi||A==Zi)return this.compileBinaryOperationWithStrings(t,e,b,A,c,u,n,s,a);if((b==ga||A==ga)&&this.pushError(v.operatorNotFeasibleForOperands(S,c,u),"error",s),iy.indexOf(n)>=0)return this.compileLogicOperation(t,e,b,A,c,u,n,s,a);if((b==qn||A==qn)&&this.pushError(v.operatorNotFeasibleForOperands(S,c,u),"error",s),b==Hr&&(t=this.convertCharToNumber(t),b=ya),A==Hr&&(e=this.convertCharToNumber(e),A=ya),Rm.indexOf(n)>=0)return new Yi(S,!1).applyToSnippet(this.booleanType,a,t,e);if(ny.indexOf(n)>=0){if(b>=wo||A>=wo){this.pushError(v.operatorNotFeasibleForOperands(S,c,u),"error",s);return}return new Yi(S,!1).applyToSnippet(l,a,t,e)}let w=this.primitiveTypes[Math.max(b,A)];return new Yi(S,!1).applyToSnippet(w,a,t,e)}compileInstanceOf(t,e,i){let n=t.type,s=e.type;if(!(s instanceof Nt)){this.pushError(v.rightSideOfInstanceofError(),"error",i.operatorRange);return}if(!(n instanceof xe)){this.pushError(v.leftSideOfInstanceofError(),"error",i.operatorRange);return}let a="";if(i.instanceofPatternIdentifier){let l=new Dr(i.instanceofPatternIdentifier,i.instanceofPatternIdentifierRange,s.nonPrimitiveType,this.currentSymbolTable);l.isFinal=!0,this.registerUsagePosition(l,i.instanceofPatternIdentifierRange),this.currentSymbolTable.getStackFrame().addSymbol(l,"localVariable"),a=", "+L.stackBase+" + "+l.stackframePosition,i.instanceofVariables||(i.instanceofVariables=[]),i.instanceofVariables.push(l)}return pe.frame(t,`${$.instanceof}(§1, "${s.nonPrimitiveType.pathAndIdentifier}"${a})`,this.booleanType)}compileLogicOperation(t,e,i,n,s,a,l,h,c){if(i!=qn||n!=qn){this.pushError(v.operatorNotFeasibleForOperands(we[l],s,a),"error",h);return}let u=t.isConstant()&&e.isConstant();if(l==m.XOR||u)return new Yi(we[l],!1).applyToSnippet(this.booleanType,c,t,e);if(t.isPureTermWithoutPop()&&e.isPureTermWithoutPop())return new Yi(we[l],!1).applyToSnippet(this.booleanType,c,t,e);let g=new se([],c,this.booleanType);t.ensureFinalValueIsOnStack(),g.addParts(t);let f=new _e;return l==m.and?g.addStringPart(`if(!${L.stack}.pop()){${L.stack}.push(false);`,re.instance):g.addStringPart(`if(${L.stack}.pop()){${L.stack}.push(true);`,re.instance),g.addParts(f.getJumpToSnippet()),g.addStringPart("};",re.instance),g.addNextStepMark(),e.ensureFinalValueIsOnStack(),g.addParts(e),g.addNextStepMark(),g.addParts(f),g.finalValueIsOnStack=!0,g}compileBinaryOperationWithStrings(t,e,i,n,s,a,l,h,c){if(l!=m.plus&&Rm.indexOf(l)<0){this.pushError(v.operatorNotFeasibleForOperands(we[l],s,a),"error",h);return}i==ga&&(t=this.wrapWithToStringCall(t,"string")),n==ga&&(e=this.wrapWithToStringCall(e,"string"));let u=l==m.plus?this.stringType:this.booleanType;return new Yi(we[l],!1).applyToSnippet(u,c,t,e)}wrapWithArrayToString(t,e){let i;if(t.type.elementType.isPrimitive)i=pe.frame(t,`${$.primitiveArrayToString}(§1)`);else{let n=pe.frame(t,`${$.objectArrayToString}(§1); `);n.finalValueIsOnStack=!0;let s=new se([n]);s.addNextStepMark(),i=s}return e=="String"&&(i=pe.frame(i,`new ${$.classes}["String"](§1)`),i.type=this.stringNonPrimitiveType),i}wrapWithToStringCall(t,e){var s,a;if(((s=t.type)==null?void 0:s.identifier)=="String")return e=="string"?pe.frame(t,`${$.nullstringIfNull}(§1)`,this.stringType):t;if(((a=t.type)==null?void 0:a.identifier)=="string")return e=="String"?pe.frame(t,`new ${$.classes}["String"](§1)`,this.stringType):t;if(t.isConstant()){let l=t.getConstantValue();return e=="string"?new _("",t.range,this.stringType,l):l===null?(t.type=this.stringNonPrimitiveType,t):new _(`new ${$.classes}["String"]("${""+l}")`,t.range,this.stringNonPrimitiveType)}let i=pe.frame(t,`${$.toString}(__t, undefined, §1); `,this.stringNonPrimitiveType);i.finalValueIsOnStack=!0;let n=new se(i);return n.addNextStepMark(),e=="string"?pe.frame(n,`(§1 ||${$.classes}["String"].null).value`,this.stringType):n}compileAssignment(t,e,i,n,s,a,l,h,c){var b;if(!t.isLefty){this.pushError(v.cantAssignValueToTerm(),"error",h);return}let u=we[l];if(l==m.assignment)return this.canCastTo(e.type,t.type,"implicit")?e=this.compileCast(e,t.type,"implicit"):this.pushError(v.cantCastType(e.type.identifier,t.type.identifier),"error",e.range),new Yi(u,!1).applyToSnippet(t.type,c,t,e);if(!t.type.isPrimitive){if(t.type==this.stringNonPrimitiveType&&l==m.plusAssignment){if(!this.canCastTo(e.type,this.stringType,"implicit")){this.pushError(v.cantCastRightSideToString(),"error",e.range);return}return e=this.compileCast(e,this.stringType,"implicit"),new fs(`§1 = ${$.checkNPE("§1",t.range)}.add(§2)`).applyToSnippet(t.type,c,t,e)}return this.pushError(v.leftOperatorNotFitForAttribute(u),"error",h),t}let g=Li[t.type.identifier];e=this.unbox(e);let f=Li[e.type.identifier];return g==Zi?((b=e.type)!=null&&b.isPrimitive||(e=this.wrapWithToStringCall(e,"string")),new Yi(u,!1).applyToSnippet(t.type,c,t,e)):f?gWn?(this.pushError(v.leftOperatorNotFitForAttribute(u),"error",h),t):(f==Hr&&(e=this.convertCharToNumber(e)),g=ki&&g<=hr?new fs(`§1 = Math.trunc(§1/(§2 || ${$.throwArithmeticException}("${v.divideByZero()}", ${c.startLineNumber}, ${c.startColumn}, ${c.endLineNumber}, ${c.endColumn})))`).applyToSnippet(t.type,c,t,e):new Yi(u,!1).applyToSnippet(t.type,c,t,e)):(this.pushError(v.rightOperatorNotFitForAttribute(u),"error",h),t)}compileCast(t,e,i,n=!1){if(!t||!t.type||!e)return t;let s=t.type;if(t.type==e)return t;if(!s.isPrimitive){if(s.identifier=="String"&&e==this.stringType)return new De("(§1?.value ?? null)").applyToSnippet(this.stringType,t.range,t);if(s==this.nullType)return t;if(e.isPrimitive)if(lr[s.identifier]){if(e==this.stringType)return n?new De('((§1?.value ?? null) + "")').applyToSnippet(this.stringType,t.range,t):(this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t);t=this.unbox(t)}else{if(s.identifier=="Object"){let c=Li[e.identifier],u=Wm[c],g=t.range;return pe.frame(t,`${$.checkCast}(§1, "${u}", ${g.startLineNumber}, ${g.startColumn}, ${g.endLineNumber}, ${g.endColumn}).value`,e)}else this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range);return t}else return i=="explicit"&&this.canCastTo(t.type,e,"explicit")||i=="implicit"&&this.canCastTo(t.type,e,"implicit")||this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t}if(!e.isPrimitive){let h=lr[e.identifier],c=Li[s.identifier],u=h;if(c==u||e.identifier=="Object")return this.box(t);if(c>=ki&&c<=Wn&&u>=ki&&u<=Wn&&c<=u)return t.type=this.primitiveTypes[h],this.box(t);if(e==this.stringNonPrimitiveType||s==this.stringType){let g=s==this.stringType?"§1":'"" + (§1)',f=t.getConstantValue(),b=pe.frame(t,`new ${$.classes}["String"](${g})`,this.stringNonPrimitiveType);return typeof f=="string"&&b instanceof _&&b.setConstantValue(f),b}return this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t}let a=Li[t.type.identifier],l=Li[e.identifier];if(a==l)return i=="explicit"&&this.pushError(v.unneccessaryCast(),"info",t.range),t;if(a==Hr)return l==Zi?t:l>=ki&&l<=Wn?this.convertCharToNumber(t):(this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t);if(l==Hr)return[ki,$d,ya,hr].indexOf(a)>=0?this.convertNumberToChar(t):(this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t);if(l==Zi)return t.isConstant()?new _(`"${t.getConstantValue()}"`,t.range,this.stringType,""+t.getConstantValue):new De('("" + (§1))').applyToSnippet(this.stringType,t.range,t);if(a==Zi||a==vo||l==vo||a==qn||l==qn)return this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t;if(a<=l)return t.type=e,t;if(i=="implicit")return this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t;if(t.isConstant()){let h=t.getConstantValue();return new _(""+h,t.range,e,h)}else{let h;switch(l){case ki:h=a<=hr?new De("((§1 + 128) % 256 - 128)"):new De("((Math.trunc(§1) + 128) % 256 - 128)");break;case $d:h=a<=hr?new De("((§1 + 0x8000) % 0x10000 - 0x8000)"):new De("((Math.trunc(§1) + 0x80000000) % 0x100000000 - 0x80000000)");break;case ya:h=a<=hr?new De("((§1) | 0)"):new De("(Math.trunc(§1) | 0)");break;case hr:h=new De("Math.trunc(§1)");break;case wo:h=new De("Math.fround(§1)");break}return h?h.applyToSnippet(e,t.range,t):t}}canCastTo(t,e,i){if(!t||!e)return!1;let n=Li[t.identifier]||lr[t.identifier],s=Li[e.identifier]||lr[e.identifier];return s==Zi&&(i=="explicit"||n==Zi)?!0:(!t.isPrimitive||t==this.stringType)&&!e.isPrimitive?t==this.nullType?!0:(t==this.stringType&&(t=this.primitiveStringClass.type),t instanceof ke||e instanceof ke?t instanceof ke&&e instanceof ke?t.dimension==e.dimension&&this.canCastTo(t.elementType,e.elementType,i):t instanceof ke?e.identifier=="Object":!1:i=="explicit"?t.canExplicitlyCastTo(e):t.canImplicitlyCastTo(e)):e==this.stringType&&t==this.nullType||t.isPrimitive&&e.identifier=="Object"||t.identifier=="Object"&&e.isPrimitive?!0:!n||!s?!1:n==s?!0:i=="explicit"?n==qn?!1:n==Hr?s>=ki&&s<=Wn:!0:ty[n][s]}anyOperandHasVoidType(t,e,i,n){return t==vo?(this.pushError(v.leftExpressionHasNoType(we[i]),"error",n),!0):e==vo?(this.pushError(v.rightExpressionHasNoType(we[i]),"error",n),!0):!1}pushError(t,e="error",i){let n=i.kind?i.range:i;const s={message:t.message,id:t.id,range:n,level:e};return this.module.errors.push(s),s}unbox(t){if(!t||!t.type)return t;let e=lr[t.type.identifier];if(!e)return t;let i=this.primitiveTypes[e];return e==Zi?pe.frame(t,`(§1 || ${$.classes}["String"].null).value`,i):pe.frame(t,`${$.checkNPE("§1",t.range)}.value`,i)}getUnboxedType(t){if(!t)return;let e=lr[t.identifier];if(e)return this.primitiveTypes[e]}hasBoxedType(t){return t.type?lr[t.type.identifier]!=null:!1}box(t){if(!t.type)return t;let e=Li[t.type.identifier];if(!e)return t;let i=Wm[e];if(!i||i.length==0)return t;let n=t.getConstantValue();t instanceof _&&t.setConstantValue(n||null);let s=this.libraryTypestore.getType(i);return e==Zi?pe.frame(t,`${$.primitiveStringToStringObject}(§1)`,s):pe.frame(t,`new ${$.classes}["${i}"](§1)`,s)}convertCharToNumber(t){if(!t.type||t.type.identifier!="char")return t;if(t.isConstant()){let e=t.getConstantValue().charCodeAt(0);return new _(e+"",t.range,this.intType,e)}return pe.frame(t,"§1.charCodeAt(0)",this.intType)}convertNumberToChar(t){if(!t.type)return t;if(t.isConstant()){let e=String.fromCharCode(t.getConstantValue());return new _(`"${e}"`,t.range,this.charType,e)}return pe.frame(t,"String.fromCharCode(§1)",this.charType)}isNumberPrimitiveType(t){if(!t)return!1;let e=Li[t.identifier];return e?e>=ki&&e<=Wn:!1}compileUnaryOperator(t,e){if(!t)return;if(!t.type){this.pushError(v.cantGetTypeOfExpression(),"error",t.range);return}t=this.unbox(t);let i=we[e],n=Li[t.type.identifier];if(!n){this.pushError(v.operatorNotUsableForOperands(i,t.type.identifier),"error",t.range);return}if(e==m.not)return n==qn?this.applyUnaryOperatorConsideringConstantFolding("!",this.booleanType,t.range,t):(this.pushError(v.notOperatorNeedsBooleanOperands(t.type.identifier),"error",t.range),t);if([m.plusPlus,m.minusMinus].indexOf(e)>=0){if(!t.isLefty){this.pushError(v.plusPlusMinusMinusOnlyForLeftyOperands(i),"error",t.range);return}if(n>=ki&&n<=Wn)return new De(i+"§1").applyToSnippet(t.type,t.range,t);this.pushError(v.operatorNotUsableForOperands(i,t.type.identifier),"error",t.range);return}if([m.minus,m.plus].indexOf(e)>=0){if(n>=ki&&n<=Wn)return this.applyUnaryOperatorConsideringConstantFolding(i,t.type,t.range,t);this.pushError(v.operatorNotUsableForOperands(i,t.type.identifier),"error",t.range);return}if(n>=ki&&n<=hr)return this.applyUnaryOperatorConsideringConstantFolding(i,t.type,t.range,t);this.pushError(v.operatorNotUsableForOperands(i,t.type.identifier),"error",t.range)}applyUnaryOperatorConsideringConstantFolding(t,e,i,n){if(n.isConstant()){let s=n.getConstantValue(),a;switch(t){case"-":a=-s;break;case"+":return n;case"~":a=~s;break;case"!":a=!s;break}return new _(""+a,i,e,a)}else return new De(t+"§1").applyToSnippet(e,i,n)}isAssignmentOperator(t){return Nm.indexOf(t)>=0}registerUsagePosition(t,e){t.module instanceof mo?this.module.systemSymbolsUsageTracker.registerUsagePosition(t,this.module.file,e):this.module.compiledSymbolsUsageTracker.registerUsagePosition(t,this.module.file,e)}}class sy{constructor(){r(this,"stack",[!1])}startTracking(){this.stack.push(!1)}hasAccessHappened(){return this.stack.pop()}onAccessHappened(){for(let t=0;t0?n=this.compileArrayLiteral(this.nextArrayLiteralTypeExpected.pop(),e):this.pushError(v.arrayLiteralTypeUnknown(),"error",e.range);break;case m.leftBracket:n=this.compileBrackets(e);break}return n&&e.parenthesisNeeded&&(n=pe.frame(n,"(§1)")),n}compileBrackets(e){let i=this.compileTerm(e.nodeInsideBrackets);return i!=null&&i.type&&!i.type.isPrimitive&&this.addTypePositionByTypeAndRange(i.type,e.range),e.nodeInsideBrackets&&(e.instanceofVariables=e.nodeInsideBrackets.instanceofVariables,e.negatedInstanceofVariables=e.nodeInsideBrackets.negatedInstanceofVariables),i}addTypePosition(e){if(!e)return;let i=e.type;i&&(i.identifier=="string"&&(i=this.libraryTypestore.getType("String")),e.range&&this.module.addTypePosition(ee.getEndPosition(e.range),i))}addTypePositionByTypeAndRange(e,i){e&&(e.identifier=="string"&&(e=this.libraryTypestore.getType("String")),i&&this.module.addTypePosition(ee.getEndPosition(i),e))}compileKeywordSuper(e){let i=this.currentSymbolTable.classContext;if(!i||!(i instanceof Gt||i instanceof ui)){this.pushError(v.superOnlyInClassesOrEnums(),"error",e);return}let n=new _(`${$.elementRelativeToStackbase(0)}`,e.range,i.getExtends());return n.isSuperKeywordWithLevel=1,n}compileKeywordThis(e){let i=this.currentSymbolTable.classContext;if(!i||!(i instanceof Gt||i instanceof ui)){this.pushError(v.thisOnlyInClassesOrEnums(),"error",e);return}return new _(`${$.elementRelativeToStackbase(0)}`,e.range,i)}compileExplicitCast(e){let i=this.compileTerm(e.objectToCast),n=i==null?void 0:i.type,s=e.castType.resolvedType;if(!(!i||!n||!s)){if(n instanceof xe&&s instanceof xe)return this.compileExplicitCastFromObjectToObject(e,i,n,s);if(n.identifier=="Object"&&s instanceof ke){let a=e.range;return pe.frame(i,`${$.checkCastToArray}(§1, ${a.startLineNumber}, ${a.startColumn}, ${a.endLineNumber}, ${a.endColumn})`,s)}if(this.canCastTo(n,s,"explicit"))return this.compileCast(i,s,"explicit");this.pushError(v.cantCastFromTo(n.identifier,s.identifier),"error",e)}}compileExplicitCastFromObjectToObject(e,i,n,s){if(n.fastExtendsImplements(s.identifier))return this.pushError(v.unneccessaryCast(),"info",e),i;if(s instanceof it){this.pushError(v.cantCastFromTo(n.identifier,s.identifier),"error",e);return}let a=e.range;return pe.frame(i,`${$.checkCast}(§1, "${s.pathAndIdentifier}", ${a.startLineNumber}, ${a.startColumn}, ${a.endLineNumber}, ${a.endColumn})`,s)}compileNewObjectNode(e,i){let n=this.getParameterValueSnippets(e),s=n.snippets;if(!e.type.resolvedType)return;let a=e.type.resolvedType;if(!a)return;if(!(a instanceof Gt)){this.pushError(v.cantInstantiateFromType(a.identifier),"error",e.range);return}a.isAbstract()&&this.pushError(v.cantInstantiateFromAbstractClass(),"error",e.range);let l=this.convertParameterValueSnippetsToParameterTypes(a.identifier,s);if(!l)return;let h=this.searchMethod(a.identifier,a,l,!0,!1,!0,e.range),c=h.best;if(n.withErrors)return e.rightBracketPosition&&this.module.pushMethodCallPosition(e.klassIdentifierRange,e.commaPositions,h.possible,e.rightBracketPosition,c),new _("null",e.range,a);if(c&&this.registerUsagePosition(c,e.klassIdentifierRange),this.module.pushMethodCallPosition(e.klassIdentifierRange,e.commaPositions,h.possible,e.rightBracketPosition,c),!c)return this.pushError(v.cantFindConstructor(),"error",e.range),new _("null",e.range,a);for(let g=0;g {${L.stack}[${L.stack}.length - 1]._registerListeners(${L.thread}); }`:"undefined";g+=`${L.thread}, ${C}`+(e.length>0?", ":"")}let A=2;g+=e.map(C=>"§"+A++).join(", ")+")";let S=new Gr(g).applyToSnippet(n,s.range,a,...e);return u=="java"&&(S=new se(pe.frame(S,`§1; `)),S.addNextStepMark(),S.finalValueIsOnStack=!0),S}pushSymbolTable(e){this.symbolTableStack.push(e),this.currentSymbolTable=e}pushAndGetNewSymbolTable(e,i,n,s){let a=new rh(this.module,e,i,this.currentSymbolTable,n,s);return this.symbolTableStack.push(a),this.currentSymbolTable=a,a}popSymbolTable(){this.symbolTableStack.pop(),this.currentSymbolTable=this.symbolTableStack[this.symbolTableStack.length-1]}compileSelectArrayElement(e,i){var u,g;let n=this.compileTerm(e.array),s=n==null?void 0:n.type;if(!n||!s||!(s instanceof ke)){this.pushError(v.noArrayBracketAfterType((s==null?void 0:s.identifier)||"---"),"error",e.array);return}if(s.dimension0?new ke(s.elementType,a,s.module,re.instance):s.elementType,h=[];for(let f of e.indices){let b=this.compileTerm(f);(u=b==null?void 0:b.type)!=null&&u.isPrimitive||(b=this.unbox(b)),(g=b==null?void 0:b.type)!=null&&g.isUsableAsIndex()||(b&&this.pushError(v.indexMustHaveIntegerValue(),"error",f),b=new _("0",f.range,this.intType)),h.push(b)}if(s.elementType.isPrimitive&&s.elementType!=this.stringType)return this.compileSelectArrayElementFast(e,i,n,h,l);let c;if(i)if(h.length==1)c=new fs(`${$.array0}(§1)[${$.checkLastIndex}(§2, 1)]`).applyToSnippet(l,e.range,n,h[0]);else{let f=h.pop(),b=bo.applyToSnippet(this.voidType,e.range,"",", ","",...h),A="";switch(h.length){case 1:A=$.array1;break;case 2:A=$.array2;break;default:A=$.arrayN;break}c=new Gr(`${A}(§1, §2)[${$.checkLastIndex}(§3, ${h.length+1})]`).applyToSnippet(l,e.range,n,b,f)}else{let f=bo.applyToSnippet(this.voidType,e.range,"",", ","",...h),b="";switch(h.length){case 1:b=$.arrayValue1;break;case 2:b=$.arrayValue2;break;case 3:b=$.arrayValue3;break;default:b=$.arrayValueN;break}c=new fs(`${b}(§1, §2)`).applyToSnippet(l,e.range,n,f)}return e.parenthesisNeeded&&(c=pe.frame(c,"(§1)")),c.isLefty=!0,c}compileSelectArrayElementFast(e,i,n,s,a){let l;if(i)if(s.length==1)l=new fs(`${$.array0}(§1)[${$.checkLastIndex}(§2, 1)]`).applyToSnippet(a,e.range,n,s[0]);else{let h="§1";for(let c=0;cthis.compileDimension(u));if(s.includes(void 0))return;let a=s,l=new ke(e,a.length,this.module,i.range),h=`${$.newArray}(${n}, `;return bo.applyToSnippet(l,i.range,h,", ",")",...a)}compileSymbolNode(e,i){let n=this.currentSymbolTable.findSymbol(e.identifier);if(n){let a=n.symbol;if(n.outerClassLevel>0&&this.outerClassFieldAccessTracker.onAccessHappened(),a.onStackframe())return this.registerUsagePosition(a,e.range),n.outerClassLevel==0?(this.missingStatementManager.onSymbolAccess(a,e.range,this.module.errors,i),this.compileSymbolOnStackframeAccess(a,e.range)):this.compileOuterClassLocalVariableAccess(a,e.range);if(a instanceof ji){let l=a;return this.classOfCurrentlyCompiledStaticInitialization&&!l._isStatic&&this.pushError(v.cantUseNonstaticFieldsToInitializeStaticOne(),"error",e),this.compileFieldAccess(a,e.range,n.outerClassLevel)}return}let s=this.libraryTypestore.getType(e.identifier);if(s||(s=this.compiledTypesTypestore.getType(e.identifier)),!s&&this.currentSymbolTable.classContext){let a=this.currentSymbolTable.classContext.identifier+"."+e.identifier;s=this.libraryTypestore.getType(a),s||(s=this.compiledTypesTypestore.getType(a))}if(s!=null&&s instanceof xe){this.registerUsagePosition(s,e.range);let a=s.staticType;return new _(`${$.classes}["${s.identifier}"]`,e.range,a)}if(this.currentSymbolTable.classContext){let a=this.currentSymbolTable.classContext.getField(e.identifier,Number.MAX_SAFE_INTEGER);if(a){this.pushError(v.attributeHasWrongVisibility(e.identifier,we[a.visibility]),"error",e);return}}this.pushError(v.identifierNotKnown(e.identifier),"error",e)}compileOuterClassLocalVariableAccess(e,i){let n=new ji(e.identifier,e.identifierRange,this.module,e.type,m.keywordPrivate);n.isInnerClassCopyOfOuterClassLocalVariable=e,this.currentSymbolTable.classContext.fields.push(n);let a=new _(`${$.elementRelativeToStackbase(0)}.${n.getInternalName()}`,i,e.type);return a.isLefty=!1,a}compileSymbolOnStackframeAccess(e,i){let n=e.type,s=new _(`${$.elementRelativeToStackbase(e.stackframePosition)}`,i,n);return s.isLefty=!e.isFinal,s}compileFieldAccess(e,i,n=0){var c,u;let s=e;if(s._isStatic&&this.classOfCurrentlyCompiledStaticInitialization&&this.classOfCurrentlyCompiledStaticInitialization.staticConstructorsDependOn.set(s.classEnum,!0),s._isStatic&&s.classEnum.isMainClass&&!this.isRepl&&(i.startLineNumber0;)g+="."+$.outerClassAttributeIdentifier,n--;if(s.template){let f=new _(`${$.elementRelativeToStackbase(0)}${g}`,i,a);h=new De(s.template).applyToSnippet(a,i,f)}else h=new _(`${$.elementRelativeToStackbase(0)}${g}.${l}`,i,a)}return h.isLefty=!s._isFinal||((u=this.currentSymbolTable.methodContext)==null?void 0:u.isConstructor)&&this.currentSymbolTable.classContext.fastExtendsImplements(s.classEnum.identifier),h.isFinalField=s._isFinal,s.isInnerClassCopyOfOuterClassLocalVariable?this.registerUsagePosition(s.isInnerClassCopyOfOuterClassLocalVariable,i):this.registerUsagePosition(s,i),h}compileLiteralNode(e){let i=this.constantTypeToTypeMap[e.constantType];if(!i)return;let n;switch(e.constantType){case m.charLiteral:case m.stringLiteral:n=JSON.stringify(e.value);break;default:n=""+e.value}return new _(n,e.range,i,e.value)}compileBinaryOperator(e){var s,a,l;if(e.operator==m.ternaryOperator)return this.compileTernaryOperator(e);let i=this.compileTerm(e.leftSide,this.isAssignmentOperator(e.operator));e.operator==m.and&&(e.instanceofVariables=e.leftSide.instanceofVariables,e.negatedInstanceofVariables=e.leftSide.negatedInstanceofVariables,e.rightSide&&(e.rightSide.instanceofVariables=e.instanceofVariables));let n;if(e.rightSide?((s=e.rightSide)!=null&&s.instanceofVariables&&(this.pushAndGetNewSymbolTable(e.rightSide.range,!1),e.rightSide.instanceofVariables.forEach(h=>this.currentSymbolTable.addSymbolWithoutAddingToStackframe(h))),n=((a=e.rightSide)==null?void 0:a.kind)==m.lambdaOperator?this.compileLambdaFunction(e.rightSide,i==null?void 0:i.type):this.compileTerm(e.rightSide),(l=e.rightSide)!=null&&l.instanceofVariables&&this.popSymbolTable()):e.instanceofVariables&&(this.pushAndGetNewSymbolTable({startLineNumber:e.operatorRange.startLineNumber,startColumn:e.operatorRange.startColumn,endLineNumber:e.operatorRange.endLineNumber,endColumn:e.operatorRange.endColumn+3},!1),e.instanceofVariables.forEach(h=>this.currentSymbolTable.addSymbolWithoutAddingToStackframe(h)),this.popSymbolTable()),i&&n&&i.type&&n.type)return this.compileBinaryOperation(i,n,e)}compileTernaryOperator(e){let i=this.compileTerm(e.leftSide,!1);if(!e.rightSide)return;if(e.rightSide.kind!=m.binaryOp||e.rightSide.operator!=m.colon){this.pushError(v.colonExpectedAfterTernaryOperator(),"error",e);return}let n=this.compileTerm(e.rightSide.leftSide),s=this.compileTerm(e.rightSide.rightSide);if(!this.canCastTo(i==null?void 0:i.type,this.booleanType,"implicit")){this.pushError(v.booleanOperandOnTernaryOperatorLefthand(),"error",e.leftSide);return}if(!i||!n||!s)return;let a=n.type,l=s.type;if(!a||!l)return;let h;if(this.canCastTo(l,a,"implicit")?(h=a,s=this.compileCast(s,a,"implicit")):this.canCastTo(a,l,"implicit")&&(h=l,n=this.compileCast(n,l,"implicit")),!h){this.pushError(v.ternaryOperatorTypesNotCompatible(),"error",e.rightSide);return}let c=n.isPureTerm()&&s.isPureTerm(),u=n.type==this.voidType&&s.type==this.voidType;if(u||!c){let g=!c&&!u;g&&(n.ensureFinalValueIsOnStack(),s.ensureFinalValueIsOnStack());let f=new se([],e.range),b=pe.frame(i,`if(§1){ `,this.voidType,i.range),A=new _e;f.addParts(b);let S=new qt(A);f.addParts(S),f.addStringPart(`} `),f.addNextStepMark();let w=new _e,C=new qt(w);return f.addParts(s),f.addParts(C),f.addNextStepMark(),f.addParts(A),f.addParts(n),f.addNextStepMark(),f.addParts(w),g||(f.finalValueIsOnStack=!0),f}else return new Gr("((§1) ? (§2) : (§3) )").applyToSnippet(h,e.range,i,n,s)}compileUnaryPrefixOperator(e){var n,s;let i=this.compileTerm(e.term);return e.operator==m.not&&(e.instanceofVariables=(n=e.term)==null?void 0:n.negatedInstanceofVariables,e.negatedInstanceofVariables=(s=e.term)==null?void 0:s.instanceofVariables),this.compileUnaryOperator(i,e.operator)}compilePlusPlusMinusMinusSuffixOperator(e){let i=this.compileTerm(e.term,!0);if(i&&i.type){if(!i.isLefty){this.pushError(v.plusPlusMinusMinusOnlyForVariables(),"error",e);return}return this.hasBoxedType(i)&&["Double","Float","Integer","Byte"].indexOf(i.type.identifier)>=0?(e.operator==m.plusPlus?new De(`${$.checkNPE("§1",i.range)}.value++`):new De(`${$.checkNPE("§1",i.range)}.value--`)).applyToSnippet(this.getUnboxedType(i.type),e.range,i):(this.isNumberPrimitiveType(i.type)||this.pushError(v.plusPlusMinusMinusOnlyForTypes(),"error",e),(e.operator==m.plusPlus?new De("§1++"):new De("§1--")).applyToSnippet(i.type,e.range,i))}}initConstantTypeToTypeMap(){this.constantTypeToTypeMap[m.booleanLiteral]=this.libraryTypestore.getType("boolean"),this.constantTypeToTypeMap[m.charLiteral]=this.libraryTypestore.getType("char"),this.constantTypeToTypeMap[m.integerLiteral]=this.libraryTypestore.getType("int"),this.constantTypeToTypeMap[m.longConstant]=this.libraryTypestore.getType("long"),this.constantTypeToTypeMap[m.floatLiteral]=this.libraryTypestore.getType("float"),this.constantTypeToTypeMap[m.doubleConstant]=this.libraryTypestore.getType("double"),this.constantTypeToTypeMap[m.stringLiteral]=this.libraryTypestore.getType("string"),this.constantTypeToTypeMap[m.keywordNull]=this.libraryTypestore.getType("null")}compileDereferenceAttribute(e){var c;let i=this.compileTerm(e.nodeToGetObject);if(!i||!i.type)return;let n=e.range;if(i.isSuperKeywordWithLevel&&e.attributeIdentifier=="super")return i.isSuperKeywordWithLevel++,i.type=i.type.getExtends(),i;if(i.type instanceof ke){if(e.attributeIdentifier!="length"){this.pushError(v.arraysOnlyHaveLengthField(e.attributeIdentifier),"error",e);return}return new De(`(§1 || ${$.throwNPE}(${n.startLineNumber}, ${n.startColumn}, ${n.endLineNumber}, ${n.endColumn})).length`).applyToSnippet(this.intType,n,i)}let s=i.type;if(!(s instanceof xe||s instanceof Nt)){this.pushError(v.typeHasNoFields(i.type.identifier),"error",e);return}let a=m.keywordPublic;this.currentSymbolTable.classContext&&this.currentSymbolTable.classContext.fastExtendsImplements(s.identifier)&&(a=m.keywordProtected,s.fastExtendsImplements(this.currentSymbolTable.classContext.identifier)&&(a=m.keywordPrivate));let l=s.getField(e.attributeIdentifier,a);if(!l&&s instanceof Nt){let u=s.nonPrimitiveType.innerTypes.find(g=>g.identifier==e.attributeIdentifier);if(u)return new _(`${$.classes}["${u.pathAndIdentifier}"]`,e.range,u.staticType)}if(!l){let u=s.getField(e.attributeIdentifier,Number.MAX_SAFE_INTEGER);u?this.pushError(v.attributeHasWrongVisibility(e.attributeIdentifier,we[u.visibility]),"error",e):this.pushError(v.fieldUnknown(e.attributeIdentifier),"error",e);return}if(this.registerUsagePosition(l,e.range),s instanceof Nt&&s.nonPrimitiveType instanceof ui&&s.identifier=="SpriteLibrary"){let u=s.nonPrimitiveType,g=u.id;if(!u.runtimeClass)return;if(u.runtimeClass.getSpriteLibrary(g,e.attributeIdentifier)){let b=new _(`${$.classes}["SpriteLibrary"].getSpriteLibrary(${g}, "${e.attributeIdentifier}")`,e.range,u);return b.isFinalField=l.isFinal(),b.isLefty=!1,b}}if(l._isStatic){let u=l.classEnum.pathAndIdentifier;if(l.template){let g=l.template.replace("§1",`${$.classes}["${u}"]`),f=new _(g,n,l.type);return f.isLefty=!1,f.isFinalField=l._isFinal,f}else{let g=new _(`${$.classes}["${u}"].${l.getInternalName()}`,n,l.type);return g.isLefty=!l._isFinal,g.isFinalField=l._isFinal,g}}else{let u=i.type instanceof ui?"§1":`(§1 || ${$.throwNPE}(${n.startLineNumber}, ${n.startColumn}, ${n.endLineNumber}, ${n.endColumn}))`;if(l.template){let g=new De(u).applyToSnippet(i.type,i.range,i),f=new De(l.template).applyToSnippet(l.type,n,g);return f.isLefty=!l._isFinal,f.isFinalField=l._isFinal,f}else{let g=new De(`${u}.${l.getInternalName()}`).applyToSnippet(l.type,n,i);return g.isLefty=!l._isFinal||((c=this.currentSymbolTable.methodContext)==null?void 0:c.isConstructor)&&this.currentSymbolTable.classContext.fastExtendsImplements(l.classEnum.identifier),g.isFinalField=l._isFinal,g}}}getParameterValueSnippets(e){let i=[],n=!1;for(let s of e.parameterValues)if(s.kind==m.lambdaOperator)i.push(void 0);else{let a=this.compileTerm(s);!a||!a.type?(i.push(void 0),n=!0):i.push(a)}return{snippets:i,withErrors:n}}compileMethodCall(e){var w,C,q;let i=this.getParameterValueSnippets(e),n=i.snippets,s=this.convertParameterValueSnippetsToParameterTypes(e.identifier,n);if(!s)return;let a=!1;e.nodeToGetObject&&[m.keywordThis,m.keywordSuper].indexOf((w=e.nodeToGetObject)==null?void 0:w.kind)>=0&&e.identifier==""&&(a=!0);let l;if(e.nodeToGetObject){if(l=this.compileTerm(e.nodeToGetObject),!l)return;let I=e.nodeToGetObject.range;!(l.type instanceof Nt)&&!l.isSuperKeywordWithLevel&&(l=pe.frame(l,`${$.checkNPE("§1",I)}`))}else{let I=this.currentSymbolTable.classContext;if(!I)if(e.identifier.startsWith("assert")||e.identifier.startsWith("fail")){if(I=this.assertionsType,e.identifier=="assertCodeReached"&&n)return this.registerCodeReachedAssertion(e,n)}else{this.pushError(v.methodCallOutsideClassNeedsDotSyntax(),"error",e);return}l=new _(`${$.elementRelativeToStackbase(0)}`,re.instance,I)}if(!l||!l.type)return;let h=this.searchMethod(e.identifier,l.type,s,a,l.type instanceof Nt,!0,e.identifierRange);if(l.type.isMainClass&&!h.best){let I=this.searchGlobalMethod(e.identifier,s,e.identifierRange);I&&(h.best=I.method,l=new _(`${$.classes}["${I.staticMainClass.identifier}"]`,e.identifierRange,I.staticMainClass))}let c=h==null?void 0:h.best;if(i.withErrors){e.rightBracketPosition&&this.module.pushMethodCallPosition(e.identifierRange,e.commaPositions,h.possible,e.rightBracketPosition,c),h.possible.length>0&&this.registerUsagePosition(c||h.possible[0],e.identifierRange);return}if(e.identifier=="assertCodeReached"&&(!c||l.type.identifier=="Assertions"))return this.registerCodeReachedAssertion(e,n);(!c&&e.identifier.startsWith("assert")||e.identifier.startsWith("fail"))&&(h=this.searchMethod(e.identifier,this.assertionsType,s,!1,l instanceof Nt,!0,e.identifierRange),c=h==null?void 0:h.best);let u="";if(!c&&!e.nodeToGetObject&&((C=this.currentSymbolTable.classContext)!=null&&C.outerType)){let I=(q=this.currentSymbolTable.classContext)==null?void 0:q.outerType;for(;I&&I instanceof xe&&(u+="."+$.outerClassAttributeIdentifier,h=this.searchMethod(e.identifier,I,s,!1,l instanceof Nt,!0,e.identifierRange),c=h.best,!c);)I=I.outerType}if(e.rightBracketPosition&&this.module.pushMethodCallPosition(e.identifierRange,e.commaPositions,h.possible,e.rightBracketPosition,c),!c){let I=this.searchMethod(e.identifier,l.type,s,!1,l.type instanceof Nt,!1,e.identifierRange).best;I?this.pushError(v.methodHasWrongVisibility(e.identifier,we[I.visibility]),"error",e):this.pushError(v.cantFindMethod(),"error",e.range);return}this.registerUsagePosition(c,e.identifierRange);for(let I=0;I!W.isConstant())&&(c.isStatic||l.isConstant())){let W=n.map(ct=>ct.getConstantValue()),te=c.isStatic?c.constantFoldingFunction(...W):c.constantFoldingFunction(l.getConstantValue(),...W),Y="";return c.returnParameterType instanceof ke&&Array.isArray(te)?this.isStringOrChar(c.returnParameterType.elementType)?Y="["+te.map(ct=>`"${ct}"`).join(", ")+"]":Y="["+te.map(ct=>""+ct).join(", ")+"]":Y=typeof te=="string"?`"${te}"`:""+te,new _(Y,e.range,g,te)}let f=c.hasImplementationWithNativeCallingConvention||c.template?"native":"java";if(f=="native"&&(l.type instanceof Gt&&l.type.isFinal||c.isFinal||c.isStatic||(c.classEnumInterface instanceof vi||this.module.moduleManager&&this.module.moduleManager.overriddenOrImplementedMethodPaths[c.getPathWithMethodIdentifier()])&&(f="java")),c.template){if(c.isStatic)return new Gr(c.template).applyToSnippet(g,e.range,...n);if(f=="native")return new Gr(c.template).applyToSnippet(g,e.range,l,...n)}let b;if(l.type instanceof Nt)b=`§1.${c.getInternalNameWithGenericParameterIdentifiers(f)}(`;else if(l.isSuperKeywordWithLevel&&!c.isConstructor){let I=l.type.pathAndIdentifier;c.isStatic?b=`${$.classes}["${I}"].${c.getInternalNameWithGenericParameterIdentifiers(f)}(`:b=`${$.classes}["${I}"].prototype.${c.getInternalNameWithGenericParameterIdentifiers(f)}.call(§1,`}else c.isStatic?b=`§1.${l instanceof Nt?"":"constructor."}${c.getInternalNameWithGenericParameterIdentifiers(f)}(`:b=`§1${u}.${c.getInternalNameWithGenericParameterIdentifiers(f)}(`;f=="java"&&(b+=`${L.thread}`+(c.isStatic?"":", undefined")+(n.length>0?", ":""));let A=2;b+=n.map(I=>"§"+A++).join(", ")+")",n.unshift(l);let S=new Gr(b).applyToSnippet(g,e.range,...n);return S.finalValueIsOnStack=!1,f=="java"&&(S.endsWith(`; `)||(S=new se(pe.frame(S,`§1; `))),S.addNextStepMark(),g!=this.voidType&&(S.finalValueIsOnStack=!0)),S}searchGlobalMethod(e,i,n){for(let s of this.compiledTypesTypestore.getMainClasses()){let a=this.searchMethod(e,s.staticType,i,!1,!0,!1,n);if(a.best)return{method:a.best,staticMainClass:s.staticType}}}isStringOrChar(e){return e==this.stringType||e==this.charType}registerCodeReachedAssertion(e,i){var a;if(i.length!=1||((a=i[0])==null?void 0:a.type)!=this.stringType||!i[0].isConstant()){this.pushError(v.assertCodeReachedNeedsStringParameter(),"error",e);return}let n=i[0].getConstantValue(),s=new jf(n,this.module,e.range);return this.module.codeReachedAssertions.registerAssertion(s),new _(`${$.registerCodeReached}("${s.key}")`,e.range)}convertParameterValueSnippetsToParameterTypes(e,i){let n=[];for(let s=0;s{var b;return f.parameters.length>=n.length||f.parameters.length>0&&((b=f.parameters[f.parameters.length-1])==null?void 0:b.isEllipsis)}),l&&(c=c.filter(f=>{if(f.visibility==m.keywordPublic)return!0;if(f.visibility==m.keywordPrivate){let b=f.classEnumInterface.identifier;return this.classOfCurrentlyCompiledStaticInitialization?this.classOfCurrentlyCompiledStaticInitialization.identifier==b:this.currentSymbolTable.classContext?this.currentSymbolTable.classContext.identifier==b:!1}if(f.visibility==m.keywordProtected){let b=f.classEnumInterface.identifier;return this.classOfCurrentlyCompiledStaticInitialization?this.classOfCurrentlyCompiledStaticInitialization.identifier==b:this.currentSymbolTable.classContext?this.currentSymbolTable.classContext.fastExtendsImplements(b):!1}}));let u,g=Number.MAX_SAFE_INTEGER;for(let f of c){if(!f.canTakeNumberOfParameters(n.length))continue;f instanceof na&&f.initCatches();let b=0,A,S=!0;for(let w=0;w=g){S=!1;break}}else{S=!1;break}}}}S&&b0&&i.addParts(new _(`${$.leaveAllSynchronizedBlocksInCurrentMethod}(); `)),(s=this.currentSymbolTable.methodContext)!=null&&s.isSynchronized&&i.addParts(new _(`${$.elementRelativeToStackbase(0)}.${z.prototype.leaveSynchronizedBlock.name}(${L.thread}); `)),e.term){if(!n.returnParameterType||n.returnParameterType==this.voidType){this.pushError(v.returnValueNotExpected(),"error",e.range);return}let l=this.compileTerm(e.term);if(!l)return;if(n.returnParameterType instanceof it&&n.returnParameterType.catches)l.type.isPrimitive&&(l=this.box(l)),n.returnParameterType.catches.push(l.type);else{if(!this.canCastTo(l.type,n.returnParameterType,"implicit")){this.pushError(v.wrongReturnValueType(n.returnParameterType.identifier,((a=l.type)==null?void 0:a.identifier)||"(---)"),"error",e.keywordReturnRange);return}l=this.compileCast(l,n.returnParameterType,"implicit")}i.addParts(new De(`${$.return}(§1); `).applyToSnippet(this.voidType,e.range,l))}else if(n.isConstructor)i.addStringPart(`${$.return}(${$.elementRelativeToStackbase(0)}); `);else{if(n.returnParameterType&&n.returnParameterType!=this.voidType){this.pushError(v.returnValueExpected(n.returnParameterType.identifier),"error",e.range);return}i.addStringPart(`${$.return}(); `)}return i.addNextStepMark(),i}compileEnhancedForLoop(e){let i=e.elementType.resolvedType,n=this.compileTerm(e.collection);if(!(i||e.elementType.kind==m.varType)||!n||!n.type)return;let s=this.pushAndGetNewSymbolTable(e.range,!1),a=new _e;this.continueStack.push(a);let l=new qt(a),h=new _e;this.breakStack.push(h);let c=new qt(h),u=s.getStackFrame().insertInvisibleLocalVariableAndGetItsIndex(),g=new se([],e.range),f=n.type,b;if(f instanceof ke){let A=pe.frame(n,`${$.elementRelativeToStackbase(u)} = ${$.checkNPE("§1",e.collection.range)}; `);A.range=e.collection.range,g.addParts(A),b=f.getElementType(),e.elementType.kind!=m.varType&&(this.typesAreIdentical(i,b)||this.canCastTo(b,i,"implicit")||this.pushError(v.wrongArrayElementType(i.toString(),e.elementIdentifier,b.toString()),"error",e.elementIdentifierPosition)),i=b;let S=new Dr(e.elementIdentifier,e.elementIdentifierPosition,i,s);s.addSymbol(S);let w=s.getStackFrame().insertInvisibleLocalVariableAndGetItsIndex();g.addParts(new _(`${$.elementRelativeToStackbase(w)} = -1; `,e.collection.range)),g.addNextStepMark(),g.addParts(a),g.addParts(new _(`${$.elementRelativeToStackbase(w)}++; if(${$.elementRelativeToStackbase(w)} >= ${$.elementRelativeToStackbase(u)}.length){ `,e.collection.range)),g.addParts(c),g.addParts(new _(`} `)),g.addParts(new _(`${$.elementRelativeToStackbase(S.stackframePosition)} = ${$.elementRelativeToStackbase(u)}[${$.elementRelativeToStackbase(w)}]; `));let C=this.compileStatementOrTerm(e.statementToRepeat)||new _("");g.addParts(C),g.addParts(l),g.addNextStepMark(),g.addParts(h)}else if(f instanceof Gt&&f.runtimeClass.prototype.getElements){i==this.stringType&&(i=this.stringNonPrimitiveType);let A=pe.frame(n,`${$.elementRelativeToStackbase(u)} = ${$.checkNPE("§1",e.collection.range)}.getElements(); `);if(A.range=e.collection.range,g.addParts(A),b=this.objectType,f instanceof Xt){let q=f.getFirstTypeParametersType();q?b=q:this.pushError(v.cantComputeArrayElementType(f.toString()),"error",e.collection.range)}else f.identifier=="Group"&&(b=this.libraryTypestore.getType("Shape"));e.elementType.kind!=m.varType&&(this.typesAreIdentical(i,b)||this.pushError(v.wrongCollectionElementType(i.toString(),e.elementIdentifier,b.toString()),"error",e.elementIdentifierPosition)),i=b;let S=new Dr(e.elementIdentifier,e.elementIdentifierPosition,i,s);s.addSymbol(S);let w=s.getStackFrame().insertInvisibleLocalVariableAndGetItsIndex();g.addParts(new _(`${$.elementRelativeToStackbase(w)} = -1; `,e.collection.range)),g.addNextStepMark(),g.addParts(a),g.addParts(new _(`${$.elementRelativeToStackbase(w)}++; if(${$.elementRelativeToStackbase(w)} >= ${$.elementRelativeToStackbase(u)}.length){ `,e.collection.range)),g.addParts(c),g.addParts(new _(`} `)),g.addParts(new _(`${$.elementRelativeToStackbase(S.stackframePosition)} = ${$.elementRelativeToStackbase(u)}[${$.elementRelativeToStackbase(w)}]; `));let C=this.compileStatementOrTerm(e.statementToRepeat)||new _("");g.addParts(C),g.addParts(l),g.addNextStepMark(),g.addParts(h)}else if(this.canCastTo(f,this.iterableType,"implicit")){let A=new se(pe.frame(n,`${$.checkNPE("§1",e.collection.range)}._mj$iterator$Iterator$(${L.thread}, undefined); `),e.collection.range,this.iteratorType);A.addNextStepMark(),A.addParts(new _(`${$.elementRelativeToStackbase(u)} = ${$.threadStack}.pop(); `,e.collection.range)),A.range=e.collection.range,g.addParts(A),b=this.objectType;let w=f.findImplementedInterface("Iterable");w?w instanceof Fn&&(b=w.typeMap.get(w.isGenericVariantOf.genericTypeParameters[0])):this.pushError(v.cantComputeCollectionElementType(f.toString()),"error",e.collection.range),e.elementType.kind!=m.varType&&(i==this.stringType&&b==this.stringNonPrimitiveType?i=b:this.typesAreIdentical(i,b)||this.pushError(v.elementTypeDoesntFitToIterable(i.toString(),e.elementIdentifier,b.toString()),"error",e.elementIdentifierPosition)),i=b;let C=new Dr(e.elementIdentifier,e.elementIdentifierPosition,i,s);s.addSymbol(C),g.addNextStepMark(),g.addParts(a),g.addParts(new _(`${$.elementRelativeToStackbase(u)}._mj$hasNext$boolean$(${L.thread}, undefined); `,e.collection.range)),g.addNextStepMark(),g.addParts(new _(`if(!${$.threadStack}.pop()){ `,e.collection.range)),g.addParts(c),g.addParts(new _(`} `)),g.addParts(new _(`${$.elementRelativeToStackbase(u)}._mj$next$E$(${L.thread}, undefined); `,e.collection.range)),g.addNextStepMark(),g.addParts(new _(`${$.elementRelativeToStackbase(C.stackframePosition)} = ${$.threadStack}.pop(); `,e.collection.range));let q=this.compileStatementOrTerm(e.statementToRepeat)||new _("");g.addParts(q),g.addParts(l),g.addNextStepMark(),g.addParts(h)}else this.pushError(v.enhancedForLoopOnlyForArraysCollectionsIterables(),"error",e.collection.range);return this.continueStack.pop(),this.breakStack.pop(),this.popSymbolTable(),g}typesAreIdentical(e,i){return!e||!i?!1:e.toString()==i.toString()}compileForStatement(e){this.pushAndGetNewSymbolTable(e.range,!1);let i=this.compileStatementOrTerm(e.firstStatement),n=e.condition,s=this.negateConditionIfPossible(n);n=s==null?void 0:s.newNode;let a=this.compileTerm(n);a=this.convertToBooleanPrimitiveAndPrintErrorIfNotPossible(a,e.condition);let l=new _e,h=new qt(l),c=new _e;new qt(c),this.continueStack.push(c);let u=new _e,g=new qt(u);this.breakStack.push(u);let f=this.compileStatementOrTerm(e.lastStatement),b=this.compileStatementOrTerm(e.statementToRepeat);if(!b){this.popSymbolTable();return}let A=new se([],e.range,this.voidType);return i&&(A.addParts(i),A.addNextStepMark()),A.addParts(l),a&&(A.addParts(new De(s!=null&&s.negationHappened?`if(§1){ `:`if(!(§1)){ `).applyToSnippet(this.voidType,e.condition.range,a)),A.addParts(g),A.addStringPart(`} `),A.addNextStepMark()),A.addParts(b),A.addNextStepMark(),A.addParts(c),f?A.addParts(f):h.range={startLineNumber:e.range.endLineNumber,startColumn:e.range.endColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn},A.addParts(h),A.addNextStepMark(),A.addParts(u),this.continueStack.pop(),this.breakStack.pop(),this.popSymbolTable(),A}compileDoStatement(e){let i=this.compileTerm(e.condition);i=this.convertToBooleanPrimitiveAndPrintErrorIfNotPossible(i,e.condition);let n=new _e;this.continueStack.push(n);let s=new _e;this.breakStack.push(s);let a=this.compileStatementOrTerm(e.statementToRepeat),l=new se([],e.range);if(!i||!a)return;let h=new _e;l.addParts(h),l.addParts(a),l.addNextStepMark(),l.addParts(n);let c=pe.frame(i,`if(§1){ `,this.voidType);return l.addParts(c),l.addParts(new qt(h)),l.addStringPart("}",void 0),l.addNextStepMark(),l.addParts(s),this.breakStack.pop(),this.continueStack.pop(),l}compileBlockNode(e,i,n){this.pushAndGetNewSymbolTable(e.range,!1);let s=new se([],e.range);if(i){this.synchronizedBlockCount++;let a=this.compileTerm(i);if(a){let l=pe.frame(a,`§1.${z.prototype.beforeEnteringSynchronizedBlock.name}(${L.thread}); `);s.addParts(l),s.addNextStepMark()}}for(let a of e.statements){let l=this.compileStatementOrTerm(a);l&&s.addParts(l)}if(i){let a=this.compileTerm(i);if(a){let l=pe.frame(a,`§1.${z.prototype.leaveSynchronizedBlock.name}(${L.thread}); `);s.addParts(l),s.addNextStepMark()}this.synchronizedBlockCount--}return this.popSymbolTable(),s}convertToBooleanPrimitiveAndPrintErrorIfNotPossible(e,i){let n=e==null?void 0:e.type;if(!n)return e;if(n.identifier!="boolean"){if(n.identifier=="Boolean")return this.unbox(e);if(i.kind==m.binaryOp&&i.operator==m.assignment){let s=this.pushError(v.assignmentInsteadOfComparisonOperator(),"error",i.operatorRange);this.module.quickfixes.push(new Ra(i.operatorRange,"==",v.ReplaceTokenQuickfixDefaultMessage("=","=="),s))}else this.pushError(v.booleanTermExpected(n.identifier),"error",i)}return e}compileWhileStatement(e){let i=e.condition;if(!i)return;let n=this.negateConditionIfPossible(i);i=n.newNode;let s=this.compileTerm(i);s=this.convertToBooleanPrimitiveAndPrintErrorIfNotPossible(s,e.condition);let a=new _e;this.continueStack.push(a);let l=new _e;this.breakStack.push(l);let h=this.compileStatementOrTerm(e.statementToRepeat),c=new se([],e.range);if(!s||!h)return;c.addParts(a);let u=pe.frame(s,n.negationHappened?`if(§1){ `:`if(!(§1)){ `,this.voidType);c.addParts(u),c.addParts(new qt(l)),c.addStringPart("}",void 0),c.addNextStepMark(),c.addParts(h);let g=new qt(a);return g.range=ee.fromPositions(ee.getEndPosition(h.range)),c.addParts(g),c.addNextStepMark(),c.addParts(l),this.breakStack.pop(),this.continueStack.pop(),c}negateConditionIfPossible(e){if(e){if(e.kind==m.binaryOp){let i=e;switch(i.operator){case m.lower:i.operator=m.greaterOrEqual;break;case m.lowerOrEqual:i.operator=m.greater;break;case m.greater:i.operator=m.lowerOrEqual;break;case m.greaterOrEqual:i.operator=m.lower;break;case m.notEqual:i.operator=m.equal;break;case m.equal:i.operator=m.notEqual;break;default:return{newNode:i,negationHappened:!1}}return{newNode:i,negationHappened:!0}}if(e.kind==m.unaryPrefixOp){let i=e;if(i.operator==m.not)return{newNode:i.term,negationHappened:!0}}return{newNode:e,negationHappened:!1}}}isDefined(e){return e!=null}listHasNoUndefined(e){return!e.includes(void 0)}compileCaseStatement(e,i,n,s,a){if(!e.constants)return;let l=[];for(let g of e.constants){let f;if(a){let b="",A=re.instance;switch(g.kind){case m.dereferenceAttribute:b=g.attributeIdentifier,A=g.range;break;case m.symbol:b=g.identifier,A=g.range;break}let S=a.fields.findIndex(w=>w.identifier==b);if(S<0){this.pushError(v.enumIdentifierUnknown(a.identifier,b),"error",g.range);return}this.registerUsagePosition(a.fields[S],A),f=new _(S+"",A,this.intType,S)}else f=this.compileTerm(g);f?(f.isConstant()||f.isFinalField?(!f.type||f.type.identifier.toLowerCase()!=(s==null?void 0:s.toLowerCase()))&&this.pushError(v.caseValueDoesntFitToSwitchValue(s||"---",f.type.identifier),"error",g.range):this.pushError(v.constantValueExpectedAfterCase(),"error",g.range),l.push(f)):this.pushError(v.valueNotComputable(),"error",g)}if(l.length==0)return;let h=new se([],e.range),c=new se([],e.range);for(let g of l){let f=g.getConstantValue();if(typeof f<"u")switch(s){case"String":case"string":case"char":h.addStringPart(`case ${JSON.stringify(f)}: `,e.range);break;default:h.addStringPart(`case ${f}: `,e.range)}else h.addStringPart(`case ${g.emit()}: `,e.range)}h.addParts(new qt(n[i]));let u=e.statements.map(g=>this.compileStatementOrTerm(g));if(this.listHasNoUndefined(u))return c.addParts(n[i]),c.addParts(u),c.addNextStepMark(),[h,c]}compileSwitchCaseStatement(e){let i=this.compileTerm(e.term);if(!this.isDefined(i)||!i.type)return;let n=i.type,s=n instanceof ui?n:void 0;if(s&&(i=pe.frame(i,"§1.ordinal")),s||n.identifier&&["byte","short","int","char","String","string"].includes(n.identifier)||this.pushError(v.switchOnlyFeasibleForTypes(),"error",e.term.range),n==this.stringNonPrimitiveType&&(i=this.unbox(i),n=this.stringType),!n)return;this.pushAndGetNewSymbolTable(e.range,!1);let a=[...e.caseNodes].map(g=>new _e),l;e.defaultNode&&(l=new _e,a.push(l));let h=new _e;this.breakStack.push(h),a.push(h);let c=e.caseNodes.map((g,f)=>this.compileCaseStatement(g,f,a,s?"int":n.identifier,s));c=c.filter(g=>typeof g<"u");let u=new se([],e.range);if(u.addParts(pe.frame(i,`switch(§1){ `,this.voidType)),c.forEach(([g,f])=>u.addParts(g)),e.defaultNode&&(u.addStringPart(`default: `,e.range),u.addParts(new qt(l))),u.addStringPart(` } `,void 0),u.addParts(new qt(h)),u.addNextStepMark(),c.forEach(([g,f])=>u.addParts(f)),e.defaultNode){let g=new se([],e.defaultNode.range);g.addParts(l);let f=e.defaultNode.statements.map(b=>this.compileStatementOrTerm(b));if(!this.listHasNoUndefined(f)){this.popSymbolTable();return}g.addParts(f),g.addNextStepMark(),u.addParts(g)}return u.addParts(h),this.breakStack.pop(),this.popSymbolTable(),u}compileIfStatement(e){let i=e.condition;if(!i)return;let n=this.negateConditionIfPossible(i);i=n.newNode;let s=this.compileTerm(i);s=this.convertToBooleanPrimitiveAndPrintErrorIfNotPossible(s,e.condition);let a=n.negationHappened?i.negatedInstanceofVariables:i.instanceofVariables,l=n.negationHappened?i.instanceofVariables:i.negatedInstanceofVariables;if(this.missingStatementManager.openBranch(),a){let A=this.pushAndGetNewSymbolTable(i.range,!1);a.forEach(S=>A.addSymbolWithoutAddingToStackframe(S))}let h=this.compileStatementOrTerm(e.statementIfTrue);if(h!=null&&h.isEmptyStatement()&&this.pushError(v.emptyStatementAfterIf(),"warning",h.range),a&&this.popSymbolTable(),l&&this.missingStatementManager.hasReturnHappened()&&l.forEach(A=>this.currentSymbolTable.addSymbolWithoutAddingToStackframe(A)),this.missingStatementManager.closeBranch(this.module.errors),this.missingStatementManager.openBranch(),l){let A=this.pushAndGetNewSymbolTable(i.range,!1);l.forEach(S=>A.addSymbolWithoutAddingToStackframe(S))}let c=this.compileStatementOrTerm(e.statementIfFalse);if(l&&this.popSymbolTable(),a&&this.missingStatementManager.hasReturnHappened()&&a.forEach(A=>this.currentSymbolTable.addSymbolWithoutAddingToStackframe(A)),this.missingStatementManager.closeBranch(this.module.errors),this.missingStatementManager.endBranching(),!s||!h)return;let u=new se([],e.range),g=pe.frame(s,n.negationHappened?`if(§1){ `:`if(!(§1)){ `,this.voidType,e.range),f=new _e;u.addParts(g);let b=new qt(f);if(u.addParts(b),u.addStringPart(`} `),u.addNextStepMark(),c){let A=new _e,S=new qt(A);u.addParts(h),u.addParts(S),u.addNextStepMark(),u.addParts(f),u.addParts(c),u.addNextStepMark(),u.addParts(A)}else u.addParts(h),u.addNextStepMark(),u.addParts(f);return u}compilePrintStatement(e){let i=this.compileTerm(e.firstParameter),n=e.secondParameter?this.compileTerm(e.secondParameter):void 0,s=e.isPrintln?$.println:$.print;return i!=null&&i.type&&i.type!=this.voidType?(i.type.isPrimitive?i=this.compileCast(i,this.stringType,"implicit",!0):i=this.wrapWithToStringCall(i,"string"),n?new fs(`${s}(§1, §2${n.type==this.stringNonPrimitiveType?".value":""}); `).applyToSnippet(this.voidType,e.range,i,n):new De(`${s}(§1, undefined); `).applyToSnippet(this.voidType,e.range,i)):new _(`${s}(undefined, undefined); `,e.range)}compileLocalVariableDeclarations(e){let i=[];for(let n of e.declarations){let s=this.compileLocalVariableDeclaration(n);s&&i.push(s)}if(i.length!=0)return new se(i)}compileLocalVariableDeclaration(e){this.codeGenerationMode=="repl"&&this.pushError(v.noVariableDeclarationWhileProgramIsRunning(),"error",e.range);let i=new Dr(e.identifier,e.identifierRange,e.type.resolvedType,this.currentSymbolTable);i.isFinal=e.isFinal;let n=this.compileInitialValue(e.initialization,i.type),s=this.currentSymbolTable.findSymbol(i.identifier),a=s==null?void 0:s.symbol;if(s){let h=this.settingStore.getValue("compiler.shadowedSymbolErrorLevel");if(this.codeGenerationMode=="replStandalone"&&(h="error"),["normal","replStandalone"].includes(this.codeGenerationMode)){let c=a.identifierRange.startLineNumber;a instanceof Dr?s.symbolTable==this.currentSymbolTable&&this.codeGenerationMode=="normal"?(this.pushError(v.cantRedeclareVariableError(i.identifier),"error",e.range),i=a):h!="ignore"&&this.pushError(v.shadowedVariableError(i.identifier,c),h,e.identifierRange):a instanceof ji&&a.classEnum.isMainClass&&h!="ignore"&&this.pushError(v.shadowedVariableError(i.identifier,c),h,e.identifierRange)}}i!=(s==null?void 0:s.symbol)&&(s==null||this.codeGenerationMode!="replStandalone")&&this.currentSymbolTable.addSymbol(i),this.module.compiledSymbolsUsageTracker.registerUsagePosition(i,this.module.file,e.identifierRange),this.missingStatementManager.addSymbolDeclaration(i,!!e.initialization);let l=this.compileSymbolOnStackframeAccess(i,e.identifierRange);if(n&&l){if(e.type.kind==m.varType){let c=n.type;i.type=c,c==this.floatType&&n.isConstant()&&(i.type=this.doubleType)}let h=new Yi("=",!1).applyToSnippet(i.type,e.range,l,n);return pe.frame(h,`§1; `)}}compileInitialValue(e,i){let n;if(e){switch(e.kind){case m.lambdaOperator:n=this.compileLambdaFunction(e,i);break;case m.arrayLiteral:let s=i;s&&s instanceof ke?n=this.compileArrayLiteral(s.getElementType(),e):this.pushError(v.cantAssignArrayLiteralToNonArrayVariable(),"error",e);break;default:n=this.compileTerm(e)}if(!(n!=null&&n.type))return;if(i){if(e.kind==m.newObject&&(i instanceof Xt||i instanceof Fn)&&this.canCastTo(n.type,i.isGenericVariantOf,"implicit"))return n.type=i,n;if(!this.canCastTo(n.type,i,"implicit")){this.pushError(v.localVariableDeclarationWrongInitializerType(n.type.toString(),i.toString()),"error",e);return}n=this.compileCast(n,i,"implicit")}}else{if(!i)return;let s=i.isPrimitive?i.defaultValueAsString:"null",a=i.isPrimitive?i.defaultValue:null;n=new _(s,re.instance,i),n.setConstantValue(a)}return n}compileThrowStatement(e){let i=this.compileTerm(e.exception);if(i)return new De(`throw §1; `).applyToSnippet(this.voidType,e.range,i)}compileTryCatchStatement(e){let i=[],n=[];for(let g=0;gS.catchBlockBeginsWithStepIndex=w)}let s,a=new _(`${$.beginTryBlock}({catchBlockInfos: this.catchBlockInfoList, finallyBlockIndex: this.finallyBlockIndex}); `,e.range);a.addEmitToStepListener(g=>{g.catchBlockInfoList=n,g.finallyBlockIndex=s==null?void 0:s.stepIndex});let l=this.compileStatementOrTerm(e.tryStatement);if(!l)return;l instanceof se&&l.removeNextStepBeforeSnippetMark();let h=new _(`${$.endTryBlock}(); `,e.range),c=new _e,u=new se([a,l,h,c.getJumpToSnippet()],e.range);for(let g=0;g0&&(b=this.throwableType);let A=new Dr(f.exceptionIdentifier,f.exceptionIdentifierPosition,b,this.currentSymbolTable);A.isFinal=!0,this.currentSymbolTable.addSymbol(A),u.addNextStepMark(),u.addParts(i[g]);let S=new _(`${$.threadStack}[${L.stackBase} + ${A.stackframePosition}] = ${$.getExceptionAndTrimStack}(true); `);u.addParts(S);let w=this.compileStatementOrTerm(f.statement);w&&(w instanceof se&&w.removeNextStepBeforeSnippetMark(),u.addParts(w)),u.addParts(c.getJumpToSnippet())}if(s=new _e,u.addNextStepMark(),u.addParts(c),e.finallyStatement){u.addParts(s),u.addStringPart(`${$.getExceptionAndTrimStack}(false); `);let g=this.compileStatementOrTerm(e.finallyStatement);g instanceof se&&g.removeNextStepBeforeSnippetMark(),u.addParts(g),u.addStringPart(`if(${$.getExceptionAndTrimStack}(false)){${$.return}(); return;}; `)}return u}}class oy extends eg{constructor(e,i,n,s,a){super(e,i,n,s,a);r(this,"linker");r(this,"counter",0);this.linker=new fm}compileAnonymousInnerClass(e){var u;let i=e.klass.resolvedType;if(!i)return;i.runtimeClass=class{};let n=i.runtimeClass;e.newObjectNode.type.resolvedType=i,this.compileInstanceFieldsAndInitializer(e.klass,i),this.buildStandardConstructors(i),this.compileMethods(e.klass,i,!1);let s=i.fields.filter(g=>g.isInnerClassCopyOfOuterClassLocalVariable).map(g=>g.isInnerClassCopyOfOuterClassLocalVariable),a=i.fields.filter(g=>g.isInnerClassCopyOfOuterClassLocalVariable).map(g=>g.getInternalName());i.runtimeClass=class extends((u=i.getExtends())==null?void 0:u.runtimeClass){constructor(...g){super();for(let f=0;f$.elementRelativeToStackbase(g.stackframePosition)).join(", ")})`,h=new _(l,e.range,i);return h.addEmitToStepListener(g=>{g.innerClass=i.runtimeClass}),this.compileNewObjectNode(e.newObjectNode,h)}compileLambdaFunction(e,i){var W,te;if(!e||!i)return;if(!this.isFunctionalInterface(i)){this.pushError(v.lambdaFunctionHereNotPossible(),"error",e.range);return}if(!e.statement)return;let n=i,s=n.getOwnMethods().find(Y=>!Y.isDefault);if(e.parameters.length!=s.parameters.length){this.pushError(v.lambdaFunctionWrongParameterCount(e.parameters.length,s.parameters.length,n.identifier),"error",e.range);return}let a=s.parameters.map(Y=>Y.type instanceof it&&Y.type.lowerBound?Y.type.lowerBound:Y.type);for(let Y=0;YY.isInnerClassCopyOfOuterClassLocalVariable).map(Y=>Y.isInnerClassCopyOfOuterClassLocalVariable);b.forEach(Y=>this.missingStatementManager.onSymbolRead(Y,re.instance,this.module.errors));let A=u.fields.filter(Y=>Y.isInnerClassCopyOfOuterClassLocalVariable).map(Y=>Y.getInternalName());u.runtimeClass=class extends((te=u.getExtends())==null?void 0:te.runtimeClass){constructor(Y,...ct){super(),this[$.outerClassAttributeIdentifier]=Y;for(let Mt=0;Mt0&&(S+=", "+b.map(Y=>$.elementRelativeToStackbase(Y.stackframePosition)).join(", "));let w=f||b.length>0,C=this.counter++,q=w?`new this.innerClass(${S})`:`this.lambdaObject${C}`,I=new _(q,e.range,u);return I.addEmitToStepListener(Y=>{w?Y.innerClass=u.runtimeClass:Y["lambdaObject"+C]=new u.runtimeClass(null)}),I}isFunctionalInterface(e){return!(!e||!(e instanceof vi)||e.getOwnMethods().filter(i=>!i.isDefault).length!=1)}compileInstanceFieldsAndInitializer(e,i){let n=[];for(let s of e.fieldsOrInstanceInitializers)switch(s.kind){case m.fieldDeclaration:if(s.isStatic)continue;let a=this.compileFieldDeclaration(s,i);a&&n.push(a);break;case m.instanceInitializerBlock:let l=this.compileInstanceInitializerBlock(s,i);l&&n.push(l);break}i.instanceInitializer=n}compileInstanceInitializerBlock(e,i){this.pushAndGetNewSymbolTable(e.range,!0,i),this.missingStatementManager.beginMethodBody([]);let n=new se([],e.range);for(let s of e.statements){let a=this.compileStatementOrTerm(s);a&&n.addParts(a)}return this.missingStatementManager.endMethodBody(void 0,this.module.errors),this.popSymbolTable(),n}buildStandardConstructors(e){var n;if(e.methods.some(s=>s.isConstructor))return;let i=e;for(;!i.getOwnMethods().find(s=>s.isConstructor&&s.visibility!=m.keywordPrivate);)i=i.getExtends();for(let s of i.getOwnMethods().filter(a=>a.isConstructor&&a.visibility!=m.keywordPrivate)){let a=s.getCopy();if(e.outerType&&!e.isStatic&&(a.hasOuterClassParameter=!0),e.methods.push(a),a.classEnumInterface=e,((n=e.instanceInitializer)==null?void 0:n.length)==0&&!a.hasOuterClassParameter){a.hasImplementationWithNativeCallingConvention=s.hasImplementationWithNativeCallingConvention;continue}let l=this.pushAndGetNewSymbolTable(re.instance,!0,e,a);a.identifier=e.identifier,a.hasImplementationWithNativeCallingConvention=!1;let h=1,c=s.parameters.map(C=>`${L.stack}[${L.stackBase} + ${h++}]`).join(", ");s.hasImplementationWithNativeCallingConvention||(c=L.thread+", undefined"+(c.length==0?"":", ")+c),c.length>0&&(c=", "+c);let u=e.instanceInitializer.slice();if(a.hasOuterClassParameter){let C=new _(`${$.elementRelativeToStackbase(0)}.${$.outerClassAttributeIdentifier} = ${$.elementRelativeToStackbase(1)}; `);u.unshift(C)}let g=`let obj = ${$.elementRelativeToStackbase(0)}; let baseKlass = ${$.classes}.${i.identifier}; `,f=`baseKlass.prototype.${s.getInternalName(s.hasImplementationWithNativeCallingConvention?"native":"java")}.call(obj${c}); `,b=`${$.return}(${$.elementRelativeToStackbase(0)}); `;u.unshift(new _(g+f));let A=new se(new _(b));A.enforceNewStepBeforeSnippet(),u.push(A);let S=a.parameters.map(C=>C.identifier);a.hasOuterClassParameter&&S.unshift($.outerClassAttributeIdentifier),a.program=new qr(this.module,l,e.identifier+"."+a.identifier),a.program.numberOfThisObjects=1,a.program.numberOfParameters=S.length,this.linker.link(u,a.program);let w=e.runtimeClass;if(w){let C=function(q,I,...W){q.s.push(this,...W),q.pushProgram(a.program,I)};w.prototype[a.getInternalName("java")]=C}this.popSymbolTable()}}compileFieldDeclaration(e,i){var s;if(e.type.kind!=m.varType&&!e.type.resolvedType)return;let n=i.fields.find(a=>a.identifier==e.identifier);if(n)if(this.registerUsagePosition(n,e.identifierRange),n.initialValue=n.type instanceof ht?n.type.getDefaultValue():null,i instanceof Dt&&(!e.isStatic||!e.isFinal)&&this.pushError(v.interfaceFieldsMustBeStatic(),"error",e),e.isStatic){this.classOfCurrentlyCompiledStaticInitialization=i;let a=this.compileInitialValue(e.initialization,e.type.resolvedType);if(this.classOfCurrentlyCompiledStaticInitialization=void 0,a){a.isConstant()?(n.initialValue=a.getConstantValue(),n.initialValueIsConstant=n.isFinal()):n.isFinal()&&a.type==this.stringNonPrimitiveType&&a.getConstantValue()&&(n.initialValueIsConstant=!0);let l=`${$.classes}.${i.identifier}.${n.getInternalName()} = §1; `,h=e.initialization?e.initialization.range:re.instance;a=new De(l).applyToSnippet(n.type,h,a),a=new se(a),a.addNextStepMark()}else{n.initialValueIsConstant=!0;let l=n.type instanceof ht?n.type.defaultValueAsString:"null";a=new _(`${$.classes}.${i.identifier}.${n.getInternalName()} = ${l}; `)}return i.runtimeClass&&(i.runtimeClass[n.getInternalName()]=n.initialValue),a}else{e.initialization&&(n.initializedBeforeConstructor=!0);let a=this.compileInitialValue(e.initialization,e.type.resolvedType);if(a){if(a.isConstant()&&(n.initialValue=a.getConstantValue(),n.initialValueIsConstant=n.isFinal(),(s=n.getType())!=null&&s.isPrimitive&&(a=void 0)),a){let l=`${$.elementRelativeToStackbase(0)}.${n.getInternalName()} = §1; `;a=new De(l).applyToSnippet(n.type,a.range,a),a=new se(a),a.addNextStepMark()}}else n.initialValueIsConstant=!0;return i.runtimeClass&&(i.runtimeClass.prototype[n.getInternalName()]=n.initialValue),a}}compileAnnotation(e){return new Xb(e.identifier,e.range)}compileMethodDeclaration(e,i){(e.identifier!=_r.mainMethodIdentifier||!e.parentTypeScope.isMainClass)&&this.module.methodDeclarationRanges.push(e.range);const n=e.method;if(!n)return;n.setAnnotations(e.annotations.map(this.compileAnnotation)),n.isConstructor?(this.registerUsagePosition(n.classEnumInterface,e.identifierRange),this.registerUsagePosition(n,e.identifierRange)):this.registerUsagePosition(n,e.identifierRange),e.isConstructor&&i.outerType&&!i.isStatic&&(n.hasOuterClassParameter=!0);let s=this.pushAndGetNewSymbolTable(e.range,!0,n.isStatic?i.staticType:i,n);n.hasOuterClassParameter&&this.currentSymbolTable.insertInvisibleParameter();for(let c of n.parameters)this.currentSymbolTable.addSymbol(c);let a=[];n.isFullSpeedMethod()&&a.push(new _(`${$.enterFullspeedMode}(); `));let l=!1,h=!1;if(n.isConstructor){if(i instanceof Dt){this.pushError(v.interfacesDontHaveConstructors(),"error",e),this.popSymbolTable();return}if([l,h]=this.checkIfSuperconstructorCallPresent(e.statement),!l&&i.instanceInitializer.length>0&&(a=a.concat(i.instanceInitializer)),n.hasOuterClassParameter){let c=new _(`${$.elementRelativeToStackbase(0)}.${$.outerClassAttributeIdentifier} = ${$.elementRelativeToStackbase(1)}; `);a.push(c)}}else n.identifier==i.identifier&&n.returnParameterType&&this.pushError(v.methodImitatesConstructor(n.identifier),"warning",n.identifierRange);if(e.statement){n.isAbstract&&this.pushError(v.abstractMethodsDontHaveMethodBodies(),"error",e),i instanceof Dt&&!(n.isAbstract||n.isDefault)&&this.pushError(v.interfaceOnlyDefaultMethodsHaveBody(),"error",e);let c=this.missingStatementManager;this.missingStatementManager=new Zp,this.missingStatementManager.beginMethodBody(n.parameters);let u=e.statement?this.compileStatementOrTerm(e.statement):void 0;if(u&&a.push(u),n.isFullSpeedMethod()&&a.push(new _(`${$.exitFullspeedMode}(); `)),e.isConstructor){let f=ee.fromPositions(ee.getEndPosition(e.range)),b=new se([new _(`${$.return}(${$.elementRelativeToStackbase(0)}); `,f)]);if(b.enforceNewStepBeforeSnippet(),a.push(b),!(l||h)){let A=i.getExtends();if(A instanceof Gt){let S=A.getPossibleMethods(A.identifier,!0,!1).filter(w=>w.parameters.length==0);if(S.length==0)this.pushError(v.superCallInConstructorMissing(A.identifier),"error",e.identifierRange);else{let w=S[0];if(w.hasImplementationWithNativeCallingConvention){let C=new _(`${$.elementRelativeToStackbase(0)}.${w.getInternalName("native")}(); `);a.unshift(C)}else{let C=new _(`${$.elementRelativeToStackbase(0)}.${w.getInternalName("java")}(${L.thread}, undefined); `);a.unshift(C)}}}}}if(n.program=new qr(this.module,s,i.identifier+"."+n.identifier),n.isSynchronized){let f=new _(`return this.index + ${$.elementRelativeToStackbase(0)}.${z.prototype.beforeEnteringSynchronizedBlock.name}(${L.thread}); `),b=new se([f]);b.addNextStepMark(),a.unshift(b)}if(!this.missingStatementManager.hasReturnHappened()&&!e.isConstructor){let f=ee.fromPositions(ee.getEndPosition(e.range));n.isSynchronized&&a.push(new _(`${$.elementRelativeToStackbase(0)}.${z.prototype.leaveSynchronizedBlock.name}(${L.thread}); `,f));let b=new se([new _(`${$.return}();`,f)]);b.enforceNewStepBeforeSnippet(),a.push(b)}this.missingStatementManager.endMethodBody(n,this.module.errors),this.missingStatementManager=c,this.linker.link(a,n.program),e.program=n.program;let g=i.runtimeClass;if(g){n.callbackAfterCodeGeneration.forEach(b=>b());let f;n.isStatic?(f=function(b,...A){b.s.push(this,...A),b.pushProgram(n.program)},g[n.getInternalNameWithGenericParameterIdentifiers("java")]=f):(f=function(b,A,...S){b.s.push(this,...S),b.pushProgram(n.program,A)},g.prototype[n.getInternalNameWithGenericParameterIdentifiers("java")]=f)}}this.popSymbolTable()}checkIfSuperconstructorCallPresent(e){var s;if(!e)return[!1,!1];if(e.kind=m.block){let a=e;if(a.statements.length>0)e=a.statements[0];else return[!1,!1]}if(e.kind!=m.methodCall)return[!1,!1];let n=(s=e.nodeToGetObject)==null?void 0:s.kind;return n?n==m.keywordThis?[!0,!1]:n==m.keywordSuper?[!1,!0]:[!1,!1]:[!1,!1]}async compileMethods(e,i,n){for(let s of e.methods)n&&await this.progressManager.interruptIfNeeded(),this.compileMethodDeclaration(s,i),s.isConstructor&&e.kind==m.keywordEnum&&s.visibility!=m.keywordPrivate&&this.pushError(v.enumConstructorsMustBePrivate(),"error",s.range)}}class Gm extends oy{constructor(t,e,i,n,s,a){super(t,e,i,n,a),this.progressManager=s,this.linker=new fm}async start(){this.module.programsToCompileToFunctions=[],await this.compileClassesEnumsAndInterfaces(this.module.ast)}async compileClassesEnumsAndInterfaces(t){this.compileStaticFieldsAndInitializerAndEnumValuesRecursive(t),this.compileInstanceFieldsInitializersAndStandardConstructorsRecursively(t),await this.compileMethodsRecursively(t)}compileInstanceFieldsInitializersAndStandardConstructorsRecursively(t){if(t)for(let e of t.innerTypes){if(e.isAnonymousInnerType||e.kind!=m.keywordClass&&e.kind!=m.keywordEnum)continue;let i=e.resolvedType;if(!i||!e.resolvedType)return;e.annotations&&i.setAnnotations(e.annotations.map(this.compileAnnotation)),e.symbolTable?this.pushSymbolTable(e.symbolTable):e.symbolTable=this.pushAndGetNewSymbolTable(e.range,!1,i),this.compileInstanceFieldsAndInitializer(e,i),e.kind==m.keywordClass&&(this.buildStandardConstructors(i),this.insertJsonMethods(i)),this.compileInstanceFieldsInitializersAndStandardConstructorsRecursively(e),this.popSymbolTable()}}insertJsonMethods(t){let e=t.methods.filter(l=>l.isConstructor&&l.parameters.length==0),i=!1,n=t.getExtends();for(;n!=this.objectType;){if((n==null?void 0:n.module)instanceof sa){i=!0;break}n=n.getExtends()}if(!e||i)return;let s=new Bi("toJson",re.instance,this.module);s.hasImplementationWithNativeCallingConvention=!0,s.isFinal=!0,s.returnParameterType=this.stringType,t.methods.push(s),t.runtimeClass.prototype._mn$toJson$string$=function(){return new Lm().toJson(this)};let a=new Bi("fromJson",re.instance,this.module);a.isStatic=!0,a.parameters.push(new Fr("jsonString",re.instance,this.module,this.stringType,!0,!1,!1)),a.returnParameterType=t,a.hasImplementationWithNativeCallingConvention=!0,t.methods.push(a),t.runtimeClass["_mn$fromJson$"+t.identifier+"$string"]=function(l){return new Lm().fromJson(l,t)}}compileStaticFieldsAndInitializerAndEnumValuesRecursive(t){if(t)for(let e of t.innerTypes){if(e.isAnonymousInnerType)continue;let i=e.resolvedType;if(!i||!e.resolvedType)return;e.symbolTable?this.pushSymbolTable(e.symbolTable):(e.symbolTable=this.pushAndGetNewSymbolTable(e.range,!1,i),e.isMainClass&&e.parent.mainProgramNode&&(e.symbolTable.hiddenWhenDebugging=!0)),this.compileStaticFieldsAndInitializerAndEnumValues(i,e),this.compileStaticFieldsAndInitializerAndEnumValuesRecursive(e),this.popSymbolTable()}}async compileMethodsRecursively(t){if(t)for(let e of t.innerTypes){if(e.isAnonymousInnerType)continue;let i=e.resolvedType;if(!i||!e.resolvedType)return;e.symbolTable?this.pushSymbolTable(e.symbolTable):e.symbolTable=this.pushAndGetNewSymbolTable(e.range,!1,i),await this.compileMethods(e,i,!0),await this.compileMethodsRecursively(e),this.popSymbolTable()}}compileStaticFieldsAndInitializerAndEnumValues(t,e){let i=[];e.kind==m.keywordEnum&&this.compileEnumValueConstruction(t,e,i);for(let n of e.fieldsOrInstanceInitializers)switch(n.kind){case m.fieldDeclaration:if(!n.isStatic){t instanceof Dt&&this.pushError(v.interfaceFieldsMustBeStatic(),"error",e);continue}let s=this.compileFieldDeclaration(n,t);s&&i.push(s);break;case m.staticInitializerBlock:let a=this.compileStaticInitializerBlock(n);a&&i.push(a);break}t.staticInitializer=this.buildInitializer(i,"staticInitializer"),e.staticInitializer=t.staticInitializer}compileEnumValueConstruction(t,e,i){i.push(new _(`${$.classes}["${t.identifier}"].values = []; `));let n=t.methods.find(a=>a.isConstructor&&a.parameters.length==0),s=0;for(let a of e.valueNodes){let l;if(a.parameterValues.length>0||n){let u=a.parameterValues.map(b=>this.compileTerm(b));if(u.some(b=>!b||!b.type))continue;let f=this.searchMethod(t.identifier,t,u.map(b=>b.type),!0,!1,!1,e.range).best;if(!f){this.pushError(v.cantFindConstructor(),"error",e);continue}l=this.invokeConstructor(u,f,t,a,void 0,a.identifier,s),l=new se(l),l.ensureFinalValueIsOnStack(),l.addNextStepMark()}else l=new _(`new ${$.classes}["${t.identifier}"]("${a.identifier}", ${s})`);let h=t.fields.find(u=>u.identifier==a.identifier),c=new De(`${$.classes}["${t.identifier}"].values.push(${$.classes}["${t.identifier}"]["${h.getInternalName()}"] = §1); `).applyToSnippet(t,a.range,l);i.push(c),s++}}buildInitializer(t,e){let i=new qr(this.module,this.currentSymbolTable,e);return t.length>0&&t.push(new _(`${$.return}();`)),this.linker.link(t,i),i}compileStaticInitializerBlock(t){this.missingStatementManager.beginMethodBody([]);let e=new se([],t.range);for(let i of t.statements){let n=this.compileStatementOrTerm(i);n&&e.addParts(n)}return this.missingStatementManager.endMethodBody(void 0,this.module.errors),e}}class ju{constructor(t,e){r(this,"isExtendedImplementedBy",{});let i=t.getNonPrimitiveTypes().filter(n=>n.fastExtendsImplements("Throwable"));i=i.concat(e.getNonPrimitiveTypes().filter(n=>n.fastExtendsImplements("Throwable")));for(let n of i)for(let s of n.getExtendedImplementedIdentifiers())this.register(s,n.pathAndIdentifier)}register(t,e){if(t=="Object")return;let i=this.isExtendedImplementedBy[t];i||(i={},this.isExtendedImplementedBy[t]=i),i[e]=!0}getAllSubExceptions(t){return this.isExtendedImplementedBy[t]||{}}}class ly{constructor(){r(this,"hexColorRegExp",/^#([a-fA-F0-9]{6})$/);r(this,"rgbColorRegExp",/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/);r(this,"rgbaColorRegExp",/^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d*(?:\.\d+)?)\)$/)}getColorInfo(t){if(t.startsWith("#")){let e=t.match(this.hexColorRegExp);if(e==null)return null;let i=Number.parseInt(e[1],16);return{red:(i>>16)/255,green:(i>>8&255)/255,blue:(i&255)/255,alpha:1}}else if(t.startsWith("rgb"))if(t.startsWith("rgba")){let e=t.match(this.rgbaColorRegExp);return e==null?null:{red:Number.parseInt(e[1])/255,green:Number.parseInt(e[2])/255,blue:Number.parseInt(e[3])/255,alpha:Number.parseFloat(e[4])}}else{let e=t.match(this.rgbColorRegExp);return e==null?null:{red:Number.parseInt(e[1])/255,green:Number.parseInt(e[2])/255,blue:Number.parseInt(e[3])/255,alpha:1}}return null}}var zn="►";const Tr=class Tr{constructor(){r(this,"tokens");r(this,"bracketError");r(this,"colorInformation");r(this,"errorList");r(this,"nonSpaceLastTokenType");r(this,"colorLexer",new ly);r(this,"pos");r(this,"line");r(this,"column");r(this,"currentChar","");r(this,"nextChar","");r(this,"spaceTokens",[m.space,m.tab,m.newline]);r(this,"bracketStack");r(this,"colorIndices");r(this,"input","");this.tokens=[],this.bracketError=void 0,this.errorList=[],this.colorInformation=[],this.bracketStack=[],this.pos=0,this.line=1,this.column=1,this.nonSpaceLastTokenType=void 0,this.colorIndices=[]}lex(t){if(!t||t.length==0)return{tokens:this.tokens,errors:this.errorList,bracketError:void 0,colorInformation:[]};for(this.input=t,this.currentChar=this.input.charAt(0),this.nextChar=this.input.length>1?this.input.charAt(1):zn;this.currentChar!=zn;)this.mainState();if(this.bracketStack.length>0){let e=this.bracketStack.pop(),i=Tr.correspondingBracket[e];this.setBracketError(we[e]+" "+we[i])}return this.processColorIndices(),this.tokens.push({range:{startLineNumber:this.line,startColumn:this.column,endLineNumber:this.line,endColumn:this.column},tt:m.endofSourcecode,value:"program end"}),{tokens:this.tokens,errors:this.errorList,bracketError:this.bracketError,colorInformation:this.colorInformation}}processColorIndices(){for(let t of this.colorIndices){let e=this.tokens[t],i=this.getLastNonSpaceToken(t);if((i==null?void 0:i.tt)==m.keywordNew){let n=this.getNextNonSpaceTokens(t,7);this.compareTokenTypes(n,[m.leftBracket,m.integerLiteral,m.comma,m.integerLiteral,m.comma,m.integerLiteral,m.rightBracket])&&this.colorInformation.push({color:{red:n[1].value/255,green:n[3].value/255,blue:n[5].value/255,alpha:1},range:{startLineNumber:i.range.startLineNumber,startColumn:i.range.startColumn,endLineNumber:n[6].range.endLineNumber,endColumn:n[6].range.endColumn}})}else{let n=this.getNextNonSpaceTokens(t,2);if(this.compareTokenTypes(n,[m.dot,m.identifier])){let s=n[1].value,a=ze.predefinedColors[s];a!=null&&this.colorInformation.push({color:{red:(a>>16)/255,green:(a>>8&255)/255,blue:(a&255)/255,alpha:1},range:{startLineNumber:e.range.startLineNumber,startColumn:e.range.startColumn,endLineNumber:n[1].range.endLineNumber,endColumn:n[1].range.endColumn}})}}}}compareTokenTypes(t,e){if(t.length!=e.length)return!1;for(let i=0;i0;){let i=this.tokens[e-1];if([m.space,m.newline].indexOf(i.tt)<0)return i;e--}return null}checkClosingBracket(t){if(this.bracketStack.length==0){let n=Tr.correspondingBracket[t];this.setBracketError(we[n]+" "+we[t]);return}let e=this.bracketStack.pop(),i=Tr.correspondingBracket[e];t!=i&&this.setBracketError(we[e]+" "+we[i])}setBracketError(t){this.bracketError==null&&(this.bracketError=t)}next(){this.pos++,this.currentChar=this.nextChar,this.pos+1=0)){this.lexNumber();return}else if(this.nextChar=="="){this.pushToken(m.plusAssignment,"+="),this.next(),this.next();return}else{this.pushToken(m.plus,"+"),this.next();return}case m.lower:if(this.nextChar=="="){this.pushToken(m.lowerOrEqual,"<="),this.next(),this.next();return}else if(this.nextChar=="<"){this.lexShiftLeft();return}else{this.pushToken(m.lower,"<"),this.next();return}case m.greater:if(this.nextChar=="="){this.pushToken(m.greaterOrEqual,">="),this.next(),this.next();return}else if(this.nextChar==">"){this.lexShiftRight();return}else{this.pushToken(m.greater,">"),this.next();return}case m.dot:if(this.nextChar=="."&&this.pos+2"){this.pushToken(m.lambdaOperator,"->"),this.next(),this.next();return}else if(this.isDigit(this.nextChar,10)&&!([m.identifier,m.integerLiteral,m.floatLiteral,m.stringLiteral,m.rightBracket,m.rightSquareBracket].indexOf(this.nonSpaceLastTokenType)>=0)){this.lexNumber();return}else if(this.nextChar=="="){this.pushToken(m.minusAssignment,"-="),this.next(),this.next();return}else{this.pushToken(m.minus,"-"),this.next();return}case m.singleQuote:this.lexCharacterConstant();return;case m.doubleQuote:this.nextChar=='"'&&this.pos+3"?this.lexShiftRightUnsigned():this.nextChar=="="?(this.pushToken(m.shiftRightAssigment,">>="),this.next(),this.next()):(this.pushToken(m.shiftRight,">>"),this.next())}lexShiftRightUnsigned(){this.next(),this.nextChar=="="?(this.pushToken(m.shiftRightUnsignedAssigment,">>>="),this.next(),this.next()):(this.pushToken(m.shiftRightUnsigned,">>>"),this.next())}lexShiftLeft(){this.next(),this.nextChar=="="?(this.pushToken(m.shiftLeftAssigment,"<<="),this.next(),this.next()):(this.pushToken(m.shiftLeft,"<<"),this.next())}pushToken(t,e,i=this.line,n=this.column,s,a){s||(s=i),a||(a=n+(""+e).length);let l={tt:t,value:e,range:{startLineNumber:i,startColumn:n,endLineNumber:s,endColumn:a}};this.spaceTokens.indexOf(t)>=0||(this.nonSpaceLastTokenType=t),this.tokens.push(l)}pushError(t,e,i="error",n=this.line,s=this.column,a,l){this.errorList.push({message:t.message,id:t.id,range:{startLineNumber:n,startColumn:s,endLineNumber:10,endColumn:10},level:i})}isDigit(t,e){var i=t.charCodeAt(0);if(e==10)return i>=48&&i<=57;if(e==2)return i>=48&&i<=49;if(e==8)return i>=48&&i<=55;if(e==16)return i>=48&&i<=57||i>=97&&i<=102||i>=65&&i<=70}lexSpace(){let t=this.column,e=this.line,i=this.pos;for(;Tr.spaceCharacters.indexOf(this.currentChar)>=0;)this.next();let n=this.pos;this.pushToken(m.space,this.input.substring(i,n),e,t,this.line,this.column)}lexCharacterConstant(){let t=this.column,e=this.line;this.next();let i=this.currentChar;if(i=="\\"){let n=vh[this.nextChar];n==null?(this.pushError(v.unknownEscapeSequence(this.nextChar),2),this.nextChar!="'"&&(i=this.nextChar,this.next())):(i=n,this.next())}this.next(),this.currentChar!="'"?this.pushError(v.expectingEndOfCharConstant(),1):this.next(),this.pushToken(m.charLiteral,i,e,t,this.line,this.column)}lexStringConstant(){let t=this.line,e=this.column,i="";for(this.next();;){let s=this.currentChar;if(s=="\\"){s=this.parseStringLiteralEscapeCharacter(),i+=s;continue}else if(s=='"'){this.next();break}else if(s==` `||s==zn){this.pushError(v.endOfLineInsideStringLiteral(),i.length+1,"error",t,e),i+=" ",this.next();break}i+=s,this.next()}this.pushToken(m.stringLiteral,i,t,e,this.line,this.column);let n=this.colorLexer.getColorInfo(i);n!=null&&this.colorInformation.push({color:n,range:{startLineNumber:t,endLineNumber:t,startColumn:e+1,endColumn:this.column-1}})}lexTripleQuoteStringConstant(){let t=this.line,e=this.column,i=[];this.next(),this.next(),this.next();let n="";for(;[` `,"\r"].indexOf(this.currentChar)<0&&this.currentChar!=zn;)n+=this.currentChar,this.next();n=n.trim(),n.length>0&&!n.startsWith("//")&&!n.startsWith("/*")&&this.pushError(v.charactersAfterMultilineStringLiteralStart(),n.length+3),this.currentChar=="\r"&&this.next(),this.currentChar==` `&&(this.next(),this.line++,this.column=1);let s="";for(;;){let c=this.currentChar;if(c=="\\")s+=this.parseStringLiteralEscapeCharacter();else if(c=='"'&&this.nextChar=='"'&&this.pos+2l&&a.charAt(l)==" ";)l++;let h="";h=i.map(c=>c.substring(l)).join(` `),this.pushToken(m.stringLiteral,h,t,e,this.line,this.column)}parseStringLiteralEscapeCharacter(){if(this.next(),this.currentChar=="u"){let t="";for(this.next();"abcdef0123456789".indexOf(this.currentChar)>=0&&t.length<4;)t+=this.currentChar,this.next();return t.length<4?(this.pushError(v.unknownEscapeSequence("u"+t),1+t.length),""):String.fromCodePoint(parseInt(t,16))}else if(vh[this.currentChar]!=null){let t=vh[this.currentChar];return this.next(),t}else return this.pushError(v.unknownEscapeSequence(this.currentChar),2),this.next(),""}lexMultilineComment(){let t=this.line,e=this.column,i=!1,n="/*";for(this.next(),this.next();;){let s=this.currentChar;if(s=="*"&&this.nextChar=="/"){this.next(),this.next(),n+="*/";break}if(s==zn){this.pushError(v.endOfTextInsideJavadocComment(),1);break}s==` `?(this.line++,this.column=0,i=!0,n+=s):i&&s==" "||(n+=s,i=!1),this.next()}this.pushToken(m.comment,n,t,e,this.line,this.column)}lexEndofLineComment(){let t=this.line,e=this.column,i="//";for(this.next(),this.next();;){let n=this.currentChar;if(n==` `||n==zn)break;i+=n,this.next()}this.pushToken(m.comment,i,t,e,this.line,this.column)}lexNumber(){let t=this.line,e=this.column,i=1;this.currentChar=="-"?(i=-1,this.next()):this.currentChar=="+"&&this.next();let n=this.pos,s=this.currentChar;this.next();let a=10;for(s=="0"&&["b","x","0","1","2","3","4","5","6","7"].indexOf(this.currentChar)>=0&&(this.currentChar=="x"?(a=16,this.next()):this.currentChar=="b"?(a=2,this.next()):a=8,n=this.pos);this.isDigit(this.currentChar,a);)this.next();let l=m.integerLiteral,h=0,c="";if(this.currentChar=="L")c=this.input.substring(n,this.pos),l=m.longConstant,this.next();else{if(this.currentChar=="."){for(l=m.floatLiteral,this.next();this.isDigit(this.currentChar,10);)this.next();a!=10&&this.pushError(v.wrongFloatConstantBegin(),this.pos-n,"error",this.line,this.column-(this.pos-n))}if(c=this.input.substring(n,this.pos),n=this.pos,this.currentChar=="e"){this.next();let g=this.pos;for(this.currentChar=="-"&&this.next();this.isDigit(this.currentChar,10);)this.next();a!=10&&this.pushError(v.wrongFloatConstantBegin(),this.pos-n,"error",this.line,this.column-(this.pos-n));let f=this.input.substring(g,this.pos);h=Number.parseInt(f)}(this.currentChar=="d"||this.currentChar=="f")&&(l=m.floatLiteral,this.currentChar=="d"&&(l=m.doubleConstant),this.next(),a!=10&&this.pushError(v.wrongFloatConstantBegin(),this.pos-n,"error",this.line,this.column-(this.pos-n)))}let u=l==m.integerLiteral?Number.parseInt(c,a):Number.parseFloat(c);u*=i,h!=0&&(u*=Math.pow(10,h)),this.pushToken(l,u,t,e,this.line,this.column),a==16&&this.column-e==8&&this.colorInformation.push({color:{red:(u>>16)/255,green:(u>>8&255)/255,blue:(u&255)/255,alpha:1},range:{startLineNumber:t,endLineNumber:this.line,startColumn:e,endColumn:this.column}})}lexAnnotation(){let t=this.line,e=this.column-1,i=this.pos;this.next(),this.pushToken(m.at,"@",t,e,this.line,e+1);let n=this.currentChar;for(;yh[n]==null&&!this.isSpace(n)&&n!=zn;)this.next(),n=this.currentChar;let s=this.pos,a=this.input.substring(i+1,s);this.pushToken(m.identifier,a,t,e+1,this.line,this.column)}lexIdentifierOrKeyword(){var h;let t=this.line,e=this.column,i=this.pos,n=this.currentChar;for(;yh[n]==null&&!this.isSpace(n)&&n!=zn;)this.next(),n=this.currentChar;let s=this.pos,a=this.input.substring(i,s),l=If[a];if(l!=null&&typeof l=="number"){switch(l){case m.true:this.pushToken(m.booleanLiteral,!0,t,e,this.line,this.column);break;case m.false:this.pushToken(m.booleanLiteral,!1,t,e,this.line,this.column);break;case m.keywordPrint:case m.keywordPrintln:this.nonSpaceLastTokenType==m.dot?this.pushToken(m.identifier,a,t,e,this.line,this.column):this.pushToken(l,a,t,e,this.line,this.column);break;case m.keywordClass:((h=this.tokens[this.tokens.length-1])==null?void 0:h.tt)==m.dot?this.pushToken(m.identifier,"class",t,e,this.line,this.column):this.pushToken(l,a,t,e,this.line,this.column);break;default:this.pushToken(l,a,t,e,this.line,this.column);break}return}a=="Color"&&this.colorIndices.push(this.tokens.length),this.pushToken(m.identifier,a,t,e,this.line,this.column)}isSpace(t){return Tr.spaceCharacters.indexOf(t)>=0||t==` `}};r(Tr,"correspondingBracket",{[m.leftBracket]:m.rightBracket,[m.leftCurlyBracket]:m.rightCurlyBracket,[m.leftSquareBracket]:m.rightSquareBracket,[m.rightBracket]:m.leftBracket,[m.rightCurlyBracket]:m.leftCurlyBracket,[m.rightSquareBracket]:m.leftSquareBracket}),r(Tr,"spaceCharacters",[" "," ","슠"," "]);let co=Tr;class Tl{constructor(){r(this,"typeMap",new Map);r(this,"mainClasses",[])}copy(t){let e=new Tl;return t?this.typeMap.forEach((i,n)=>{i.module!==t&&e.typeMap.set(n,i)}):this.typeMap.forEach((i,n)=>{e.typeMap.set(n,i)}),e}empty(){this.typeMap=new Map,this.mainClasses=[]}addType(t){t instanceof xe?(this.typeMap.set(t.pathAndIdentifier,t),t.isMainClass&&this.mainClasses.push(t)):this.typeMap.set(t.identifier,t)}getMainClasses(){return this.mainClasses}getType(t){return this.typeMap.get(t)}populateClassObjectRegistry(t){this.typeMap.forEach((e,i)=>{e instanceof xe&&e.runtimeClass&&(t[e.pathAndIdentifier]=e.runtimeClass)})}initFastExtendsImplementsLookup(){this.typeMap.forEach((t,e)=>{t.registerExtendsImplementsOnAncestors()})}getClasses(){let t=[];return this.typeMap.forEach((e,i)=>{e instanceof je&&t.push(e)}),t}getNonPrimitiveTypes(){let t=[];return this.typeMap.forEach((e,i)=>{e instanceof xe&&t.push(e)}),t}getTypeCompletionItems(t,e,i,n){let s=[];return this.typeMap.forEach((a,l)=>{if(a instanceof ht||a.identifier=="null"){if(!n)return;s.push({label:a.identifier,detail:a.getCompletionItemDetail(),insertText:a.identifier,documentation:a.getDocumentation(),kind:O.CompletionItemKind.Struct,range:e,insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]}})}else{let h=a;if(h.isMainClass||t instanceof xe&&!h.isVisibleFrom(t))return;let c=O.CompletionItemKind.Class;a instanceof vi&&(c=O.CompletionItemKind.Interface),a instanceof ui&&(c=O.CompletionItemKind.Enum);let u=!!(a.genericTypeParameters&&a.genericTypeParameters.length>0),g="";i&&(g="($0)",u&&(g="<>($0)")),s.push({label:a.identifier,detail:a.getCompletionItemDetail()+(u?"("+v.genericType()+")":""),insertText:h.pathAndIdentifier+g,documentation:a.getDocumentation(),kind:c,range:e,insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]}})}}),s}}class oh{constructor(t){r(this,"modules",[]);r(this,"typestore");r(this,"overriddenOrImplementedMethodPaths",{});this.workspace=t,this.typestore=new Tl}copy(t){let e=new oh(this.workspace);return e.modules=this.modules.slice(),e.typestore=this.typestore.copy(t),e}addModule(t){this.modules.push(t)}getModuleFromFile(t){return this.modules.find(e=>e.file==t)}setupModulesBeforeCompiliation(t){this.removeUnusedModulesAndMarkDependentModulesDirty(t),this.createNewModules(t)}emptyTypeStore(){this.typestore.empty()}setDependsOnModuleWithErrorsFlag(){this.modules.forEach(e=>e.dependsOnModuleWithErrorsFlag=e.hasErrors());let t=!1;for(;!t;){t=!0;for(let e of this.modules)if(!e.dependsOnModuleWithErrorsFlag&&e.dependsOnModuleWithErrors()){e.dependsOnModuleWithErrorsFlag=!0,t=!1;break}}}iterativelySetDirtyFlags(){for(let e of this.modules)e.hasErrors()&&e.setDirty(!0);let t=!1;for(;!t;){t=!0;for(let e of this.modules)if(!e.isDirty()&&e.dependsOnOtherDirtyModule()){e.setDirty(!0),t=!1;break}}for(let e of this.modules)e.isDirty()&&e.resetBeforeCompilation()}createNewModules(t){for(let e of t)if(!this.getModuleFromFile(e)){let i=new Ho(e,this);this.addModule(i)}}removeUnusedModulesAndMarkDependentModulesDirty(t){let e=this.modules.filter(i=>t.indexOf(i.file)<0);this.modules=this.modules.filter(i=>t.indexOf(i.file)>=0);for(let i of e)for(let n of this.modules)n.dependsOnModule(i)&&n.setDirty(!0)}getNewOrDirtyModules(t=!1){return this.modules.filter(e=>e.isDirty())}getUnChangedModules(){return this.modules.filter(t=>!t.isDirty())}compileModulesToJavascript(){for(let t of this.modules)if(!t.hasErrors())for(let e of t.programsToCompileToFunctions){let i=e.compileToJavascriptFunctions();if(i!=null)return t.errors.push(i),!1}return!0}findModuleByFile(t){return this.modules.find(e=>e.file==t)}getTypeCompletionItems(t,e,i){return this.typestore.getTypeCompletionItems(i,e,!1,!1)}correctUsagePositionsOfAbstractAndInterfaceMethods(){for(let t of this.modules)t.getUsagePositionsForSymbol}}const Oa=class Oa{constructor(){}lex(t){let e=[],i=0,n="";for(;i=0&&e":m.greater,",":m.comma,"&":m.ampersand,":":m.colon," ":m.space,"\n":m.space,"\r":m.space,".":m.dot});let Mu=Oa;const qi=class qi extends Mu{constructor(e){super();r(this,"tokenList",[]);r(this,"pos",0);r(this,"cct",qi.endOfSourcecodeToken);r(this,"tt",m.endofSourcecode);r(this,"currentDeclaration","");r(this,"currentClassIdentifier","");r(this,"currentTypeStore",new Tl);r(this,"genericParameterMapStack",[]);r(this,"startBracketList",[m.leftBracket,m.leftCurlyBracket,m.leftSquareBracket,m.lower]);r(this,"endBracketList",[m.rightBracket,m.rightCurlyBracket,m.rightSquareBracket,m.greater]);this.systemModule=e}parseClassOrEnumOrInterfaceDeclarationWithoutGenerics(e,i){var f;let n=(f=e.__javaDeclarations)==null?void 0:f.find(b=>b.type=="declaration");n||console.log("Error parsing library class "+e.name+": missing java class declaration.");let s=n?n.signature:"public class "+e.name+" extends Object";this.initTokens(s);let a=this.parseModifiersAndType(!0),l=[];do this.expect(m.identifier,!1),l.push(this.cct.value),this.nextToken();while(this.comesToken(m.dot,!0));let h=l.join("."),c=l.pop();this.currentClassIdentifier=c;let u=l.length>0?l.join("."):void 0,g;switch(a.type){case m.keywordClass:g=new je(c,qi.nullRange,"",i),g.isLibraryType=!0;let b=g;b.runtimeClass=e,b.isStatic=a.static,b.isFinal=a.final,b._isAbstract=a.abstract,b.pathAndIdentifier=h,b.visibility=a.visibility,e.isPrimitiveTypeWrapper&&(g.isPrimitiveTypeWrapper=!0);break;case m.keywordInterface:g=new Dt(c,qi.nullRange,"",i),g.isLibraryType=!0,g.pathAndIdentifier=h,g.runtimeClass=e;break;case m.keywordEnum:g=new ui(c,qi.nullRange,"",i,Object.getPrototypeOf(Object.getPrototypeOf(e)).type),g.isLibraryType=!0;let A=g;A.runtimeClass=e,A.visibility=a.visibility,A.pathAndIdentifier=h,A.baseEnumClass=this.findType("Enum"),this.initEnumValues(A,e,i),A.addValuesMethod(e,this.systemModule.types.find(S=>S.identifier=="string"));break}if(e.type=g,g.documentation=n==null?void 0:n.comment,u){let b=this.currentTypeStore.getType(u);b&&(g.outerType=b)}return g}parseClassOrInterfaceDeclarationGenericsAndExtendsImplements(e,i,n){var h;this.currentClassIdentifier=e.name,this.currentTypeStore=i;let s=(h=e.__javaDeclarations)==null?void 0:h.find(c=>c.type=="declaration");s||console.log("Error parsing library class "+e.name+": missing java class declaration.");let a=s?s.signature:"public class "+e.name+" extends Object";this.initTokens(a),this.skipTill([m.lower,m.keywordExtends,m.keywordImplements],!1);let l=e.type;for(this.comesToken(m.lower,!1)&&(l instanceof ui?(this.pushError("Ein enum-Typ kann nicht generisch sein."),this.skipTill([m.keywordExtends,m.keywordImplements],!1)):l.genericTypeParameters=this.parseGenericParameters(n));this.comesToken([m.keywordExtends,m.keywordImplements],!1);)if(l instanceof ui)this.pushError("Ein enum-Typ kann nicht generisch sein."),this.skipTill([m.keywordExtends,m.keywordImplements],!1);else{let c=l,u=this.tt;switch(this.nextToken(),u){case m.keywordExtends:let g=this.parseCommaSeparatedTypeList(n);g.length>0&&(c instanceof je?c.setExtends(g[0]):c.addExtends(g));break;case m.keywordImplements:let f=this.parseCommaSeparatedTypeList(n);f.length>0&&c instanceof je&&c.addImplements(f);break}}l instanceof je&&!l.getExtends()&&l.identifier!="Object"&&l.setExtends(this.currentTypeStore.getType("Object"))}parseCommaSeparatedTypeList(e){let i=[];do i.push(this.parseType(e));while(this.comesToken(m.comma,!0));return i}parseGenericParameters(e){if(!this.comesToken(m.lower,!0))return[];let i=this.pos;if(!this.comesToken(m.identifier,!1))return this.pushError("Lese Definition eines generischen Parameters. Nach dem < wird ein Bezeichner erwartet."),[];let n=[],s=this.genericParameterMapStack[this.genericParameterMapStack.length-1];do{let a=this.cct.value,l=new it(a,e,qi.nullRange,[],void 0);n.push(l),s[a]=l,this.nextToken(),this.skipSymmetricBracketsUntil([m.comma,m.greater])}while(this.comesToken(m.comma,!0));this.expect(m.greater,!0),this.pos=i-1,this.nextToken();do this.parseGenericParameterDeclaration(e);while(this.comesToken(m.comma,!0));return this.expect(m.greater,!0),n}skipSymmetricBracketsUntil(e){let i=0;for(;this.pos0||e.indexOf(this.tt)<0);)this.startBracketList.indexOf(this.tt)>=0?i++:this.endBracketList.indexOf(this.tt)>=0&&i--,this.nextToken()}parseGenericParameterDeclaration(e){let i=this.expectIdentifier(),n=[],s;for(;this.comesToken([m.keywordExtends,m.keywordImplements],!1);){let h=this.tt;switch(this.nextToken(),h){case m.keywordExtends:do n.push(this.parseType(e));while(this.comesToken(m.ampersand,!0));break;case m.keywordImplements:s=this.parseType(e);break}}let l=this.genericParameterMapStack[this.genericParameterMapStack.length-1][i];return l.upperBounds=n,l.lowerBound=s,l}parseType(e){var s;let i=this.expectIdentifier();if(i==aa.identifier)return aa.this();for(;this.comesToken(m.dot,!0);)i+="."+this.expectIdentifier();if(i=="")return this.currentTypeStore.getType("void");if(i=="?"){let a=new it(i,e,re.instance);return a.isWildcard=!0,a}let n=this.findType(i);if(this.comesToken(m.lower,!0))if((((s=n.genericTypeParameters)==null?void 0:s.length)||0)==0)this.pushError("Der Typ "+n.identifier+" ist nicht generisch."),this.skipTill(m.greater,!0);else{let a=new Map;for(let l of n.genericTypeParameters){let h=this.parseType(e);if(h instanceof it&&h.isWildcard&&(this.comesToken(m.keywordExtends,!0)&&h.upperBounds.push(this.parseType(e)),this.comesToken(m.keywordSuper,!0)&&(h.lowerBound=this.parseType(e))),a.set(l,h),this.comesToken(m.greater,!1))break;this.expect(m.comma,!0)}this.expect(m.greater,!0),n=n.getCopyWithConcreteType(a)}for(;this.comesToken(m.leftSquareBracket,!0);)n instanceof ke?n.dimension++:n=new ke(n,1,e,qi.nullRange),this.expect(m.rightSquareBracket,!0);return n}findType(e){let i;for(let n=this.genericParameterMapStack.length-1;n>=0;n--)if(i=this.genericParameterMapStack[n][e],i)return i;return i=this.currentTypeStore.getType(e),i||(this.pushError("Konnte den Typ "+e+" nicht finden."),this.currentTypeStore.getType("void"))}expectIdentifier(){if(this.comesToken(m.identifier,!1)){let e=this.cct.value;return this.nextToken(),e}return this.pushError("Ein Bezeichner wird erwartet, gefunden wurde "+this.cct.value+"."),""}parseModifiersAndType(e){let i={visibility:m.keywordPublic,static:!1,final:!1,abstract:!1,default:!1,type:m.keywordClass},n=!0;for(;!this.isEnd();){switch(this.tt){case m.keywordPublic:case m.keywordProtected:case m.keywordPrivate:i.visibility=this.tt;break;case m.keywordStatic:i.static=!0;break;case m.keywordFinal:i.final=!0;break;case m.keywordAbstract:i.abstract=!0;break;case m.keywordDefault:i.default=!0;break;case m.keywordClass:case m.keywordInterface:case m.keywordEnum:i.type=this.tt,n=!1;break;default:return n&&e&&this.pushError("Es fehlt der Typ (class, interface oder enum)."),i}this.nextToken()}return i}initTokens(e){this.tokenList=this.lex(e),this.pos=0,this.cct=this.tokenList[0],this.tt=this.cct.tt,this.currentDeclaration=e}comesToken(e,i){return Array.isArray(e)||(e=[e]),e.indexOf(this.tt)>=0?(i&&this.nextToken(),!0):!1}skipTill(e,i){for(Array.isArray(e)||(e=[e]);!this.isEnd()&&e.indexOf(this.tt)<0;)this.nextToken();i&&this.nextToken()}nextToken(){if(this.pos++,this.pos>=this.tokenList.length){this.cct=qi.endOfSourcecodeToken,this.tt=this.cct.tt;return}this.cct=this.tokenList[this.pos],this.tt=this.cct.tt}isEnd(){return this.pos>=this.tokenList.length}pushError(e){console.log("Error parsing library declaration for class "+this.currentClassIdentifier+" ("+e+"): "+this.currentDeclaration)}expect(e,i){return e==this.tt?(i&&this.nextToken(),!0):(this.pushError("Erwartet wird "+m[e]+", gefunden wurde: "+this.cct.value),!1)}parseFieldsAndMethods(e,i,n){this.currentTypeStore=i;let s=e.__javaDeclarations;if(s){this.currentClassIdentifier=e.name;for(let a of s.filter(l=>l.type=="field"||l.type=="method"))this.initTokens(a.signature),this.parseFieldOrMethod(e,n,a);this.insertClassField(e)}}insertClassField(e){let i=e.type;if(i instanceof je||i instanceof ui){let n=this.currentTypeStore.getType("Class");n&&i.fields.push(i.createClassField(n))}}parseFieldOrMethod(e,i,n){var g;this.genericParameterMapStack.push({});let s=e.type,a=this.parseModifiersAndType(!1),l=this.parseGenericParameters(i),h=this.parseType(i),c=h==s&&this.comesToken(m.leftBracket,!1),u=c?s.identifier:this.expectIdentifier();if(n.type=="method"){this.comesToken(m.leftBracket,!0);let f=l.length==0?new Bi(u,re.instance,i,a.visibility):new na(u,re.instance,i,a.visibility,l);if(f.returnParameterType=h,f.isConstructor=c,f.documentation=n.comment,!this.comesToken(m.rightBracket,!1))do{let S=this.comesToken(m.keywordFinal,!0),w=this.parseType(i),C=this.comesToken(m.ellipsis,!0);C&&(w=new ke(w,1,i,re.instance));let q=this.expectIdentifier();f.parameters.push(new Fr(q,re.instance,i,w,S,C,!1))}while(this.comesToken(m.comma,!0));f.isStatic=a.static,f.isFinal=a.final,f.isAbstract=a.abstract,f.classEnumInterface=s,f.isDefault=a.default,this.expect(m.rightBracket,!0),s.methods.push(f);let b=n,A=((g=f.returnParameterType)==null?void 0:g.identifier)!="void";if(b.native){let S=b.native.name;if(f.isStatic?e[f.getInternalName("native")]=b.native:e.prototype[f.getInternalName("native")]=b.native,!b.java){let w=f.parameters.map(q=>q.identifier),C;f.isConstructor?(C=` this.${S}(${w.join(", ")}); ${$.threadStack}.push(this); `,w.unshift("callback1"),w.unshift("__t"),w.push(C),e.prototype[f.getInternalName("java")]=new Function(...w)):f.isStatic?(C=` ${A?"let __returnValue = ":""}this.${S}(${w.join(", ")}); ${A?`${$.threadStack}.push(__returnValue);`:""} `,w.unshift("__t"),w.push(C),e[f.getInternalName("java")]=new Function(...w)):(C=` ${A?"let __returnValue = ":""}this.${S}(${w.join(", ")}); ${A?`${$.threadStack}.push(__returnValue);`:""} if(__callback)__callback(); `,w.unshift("__callback"),w.unshift("__t"),w.push(C),e.prototype[f.getInternalName("java")]=new Function(...w))}f.hasImplementationWithNativeCallingConvention=!0}b.java&&(s instanceof Dt||f.isAbstract?b.java.name!=f.getInternalName("java")&&console.log(`${qi.name}: Method ${b.java.name} in class/enum/interface ${s.identifier} should have identifier ${f.getInternalName("java")}.`):f.isStatic?e[f.getInternalName("java")]=b.java:e.prototype[f.getInternalName("java")]=b.java),b.template&&(f.template=b.template,f.template.indexOf("&")>=0&&console.log("WARNING: Template '"+f.template+"' contains letter & instead of §!")),b.constantFoldingFunction&&(f.constantFoldingFunction=b.constantFoldingFunction)}else{let f=n,b=new ji(u,re.instance,i,h,a.visibility);b.hiddenWhenDebugging=n.hiddenWhenDebugging,b._isStatic=a.static,b._isFinal=a.final,b.classEnum=s,b.documentation=f.comment,b.internalName=f.nativeIdentifier||u,b.template=f.template,typeof f.constantValue<"u"&&(b.initialValue=f.constantValue,b.initialValueIsConstant=!0,e[b.internalName]=f.constantValue),s.fields.push(b)}this.genericParameterMapStack.pop()}initEnumValues(e,i,n){let s=i.values;for(let a of s){let l=new ji(a.name,re.instance,n,e,m.keywordPublic);l._isStatic=!0,l._isFinal=!0,l.classEnum=e,l.initialValueIsConstant=!0,l.initialValue=a,e.fields.push(l),i[l.getInternalName()]=a}}};r(qi,"endOfSourcecodeToken",{tt:m.endofSourcecode,value:""}),r(qi,"visibilityTokens",[m.keywordPublic,m.keywordProtected,m.keywordPrivate]),r(qi,"nullRange",{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0});let Ed=qi;class Km{constructor(...t){r(this,"libraryModules",[]);r(this,"javaTypes",[]);r(this,"typestore");r(this,"systemModule");this.systemModule=new sa,this.libraryModules.push(this.systemModule),t&&this.libraryModules.push(...t);for(let i of t)i.prepareSystemModule(this.systemModule);this.typestore=new Tl,this.compileClassesToTypes();let e=new Ed(this.systemModule);e.parseClassOrEnumOrInterfaceDeclarationWithoutGenerics(this.systemModule.primitiveStringClass,this.systemModule),e.parseClassOrInterfaceDeclarationGenericsAndExtendsImplements(this.systemModule.primitiveStringClass,this.typestore,this.systemModule),e.parseFieldsAndMethods(this.systemModule.primitiveStringClass,this.typestore,this.systemModule),this.typestore.initFastExtendsImplementsLookup()}compileClassesToTypes(){let t=new Ed(this.systemModule);this.typestore.empty,this.javaTypes=[],t.currentTypeStore=this.typestore;for(let i of this.libraryModules){for(let n of i.classesInterfacesEnums){let s=t.parseClassOrEnumOrInterfaceDeclarationWithoutGenerics(n,i);s.visibility!=m.keywordPrivate&&this.typestore.addType(s),this.javaTypes.push(s)}for(let n of i.types)this.typestore.addType(n),this.javaTypes.push(n)}let e=new Map;for(let i of this.libraryModules)for(let n of i.classesInterfacesEnums){let s={};e.set(n,s),t.genericParameterMapStack.push(s),t.parseClassOrInterfaceDeclarationGenericsAndExtendsImplements(n,this.typestore,i),t.genericParameterMapStack.pop()}for(let i of this.libraryModules)for(let n of i.classesInterfacesEnums)t.genericParameterMapStack.push(e.get(n)),t.parseFieldsAndMethods(n,this.typestore,i),t.genericParameterMapStack.pop();for(let i of this.typestore.getClasses())i.checkIfInterfacesAreImplementedAndSupplementDefaultMethods()}getTypeCompletionItems(t){return this.typestore.getTypeCompletionItems(void 0,t,!1,!0)}}class tg{constructor(t){r(this,"collectedTypenodesGettingRegisteredAtTypeResolver",[]);this.parser=t}buildArrayLiteralNode(){return{kind:m.arrayLiteral,elements:[],range:this.parser.cct.range}}buildBracketNode(t,e){return{kind:m.leftBracket,range:t,nodeInsideBrackets:e}}buildWildcardTypeNode(t){t||(t=this.parser.cct.range);let e={kind:m.wildcardType,range:t,extends:[]};return this.collectedTypenodesGettingRegisteredAtTypeResolver.push(e),e}buildVoidTypeNode(t){t||(t=this.parser.cct.range);let e={kind:m.voidType,range:t};return this.collectedTypenodesGettingRegisteredAtTypeResolver.push(e),e}buildVarTypeNode(t){t||(t=this.parser.cct.range);let e={kind:m.varType,range:t};return this.collectedTypenodesGettingRegisteredAtTypeResolver.push(e),e}buildArrayTypeNode(t,e,i=1){e||(e=this.parser.cct.range);let n;if(t.kind==m.baseType&&t.identifiers[0].identifier=="String"&&(t.identifiers[0].identifier="string"),t.kind==m.arrayType){let s=t;n={kind:m.arrayType,range:e,arrayDimensions:s.arrayDimensions+i,arrayOf:s.arrayOf}}else n={kind:m.arrayType,range:e,arrayDimensions:i,arrayOf:t};return this.collectedTypenodesGettingRegisteredAtTypeResolver.push(n),n}buildGenericTypeInstantiationNode(t,e){return e||(e=this.parser.cct.range),{kind:m.genericTypeInstantiation,range:e,baseType:t,actualTypeArguments:[]}}buildBaseTypeNode(t,e){e||(e=this.parser.cct.range);let i=this.parser.currentMethod||this.parser.currentClassOrInterface;return{kind:m.baseType,range:e,identifiers:[{identifier:t,identifierRange:e}],parentTypeScope:i}}buildClassNode(t,e,i,n,s){let a=e?e.value:"",l=(i.path!=""?i.path+".":"")+a,h={kind:m.keywordClass,range:t.range,parent:i,path:l,extends:void 0,implements:[],identifier:a,identifierRange:e?e.range:re.instance,visibility:t.visibility,isFinal:t.isFinal,isStatic:t.isStatic,isAbstract:t.isAbstract,isDefault:t.isDefault,isSynchronized:t.isSynchronized,genericParameterDeclarations:[],fieldsOrInstanceInitializers:[],methods:[],innerTypes:[],annotations:[],resolvedType:void 0,module:s,isAnonymousInnerType:!1,isMainClass:!1};return n.length>0&&(h.annotations=n.slice(),n.splice(0,n.length)),i.innerTypes.push(h),h}buildEnumNode(t,e,i,n,s){let a=(i.path!=""?i.path+".":"")+e.value,l={kind:m.keywordEnum,range:t.range,parent:i,path:a,identifier:e.value,identifierRange:e.range,visibility:t.visibility,fieldsOrInstanceInitializers:[],methods:[],annotations:[],valueNodes:[],isAbstract:!1,isFinal:!1,isStatic:!1,isDefault:t.isDefault,isSynchronized:t.isSynchronized,resolvedType:void 0,innerTypes:[],module:s,isAnonymousInnerType:!1};return n.length>0&&(l.annotations=n.slice(),n.splice(0,n.length)),i.innerTypes.push(l),l}buildEnumValueNode(t){return{kind:m.initializeEnumValue,range:t.range,identifier:t.value,identifierRange:t.range,parameterValues:[]}}buildInterfaceNode(t,e,i,n,s){let a=(i.path!=""?i.path+".":"")+e.value,l={kind:m.keywordInterface,range:t.range,parent:i,path:a,implements:[],identifier:e.value,identifierRange:e.range,visibility:t.visibility,isFinal:t.isFinal,isStatic:t.isStatic,isAbstract:t.isAbstract,isDefault:t.isDefault,isSynchronized:t.isSynchronized,genericParameterDeclarations:[],methods:[],annotations:[],fieldsOrInstanceInitializers:[],resolvedType:void 0,innerTypes:[],module:s,isAnonymousInnerType:!1};return n.length>0&&(l.annotations=n.slice(),n.splice(0,n.length)),i.innerTypes.push(l),l}buildMethodNode(t,e,i,n,s,a,l){let h={kind:m.methodDeclaration,range:s,identifier:n.value,identifierRange:n.range,visibility:i.visibility,isFinal:i.isFinal,isStatic:i.isStatic,isAbstract:i.isAbstract,isConstructor:e,isDefault:i.isDefault,isSynchronized:i.isSynchronized,parameters:[],returnParameterType:t,statement:void 0,annotations:[],parentTypeScope:l,innerTypes:[],path:l.path+"."+n.value,genericParameterDeclarations:[]};return a.length>0&&(h.annotations=a.slice(),a.splice(0,a.length)),h}buildFieldDeclarationNode(t,e,i,n,s,a){let l={kind:m.fieldDeclaration,range:t,identifier:e.value,identifierRange:e.range,type:i,initialization:n,visibility:s.visibility,isFinal:s.isFinal,isStatic:s.isStatic,isAbstract:s.isAbstract,isDefault:s.isDefault,isSynchronized:s.isSynchronized,annotations:[]};return a.length>0&&(l.annotations=a.slice(),a.splice(0,a.length)),l}buildNodeWithModifiers(t){return{range:t,visibility:m.keywordPublic,isFinal:!1,isStatic:!1,isAbstract:!1,isDefault:!1,isSynchronized:!1}}buildParameterNode(t,e,i,n,s){return{kind:m.parameterDeclaration,range:t,identifier:e.value,identifierRange:e.range,type:i,isEllipsis:n,isFinal:s,trackMissingReadAccess:!0}}buildPlusPlusMinusMinusSuffixNode(t,e){return{kind:m.plusPlusMinusMinusSuffix,range:{startLineNumber:e.range.startLineNumber,startColumn:e.range.startColumn,endLineNumber:t.range.endLineNumber,endColumn:t.range.endColumn},operator:t.tt,term:e}}buildUnaryPrefixNode(t,e){return{kind:m.unaryPrefixOp,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn},operator:t.tt,term:e}}buildAttributeDereferencingNode(t,e){return{kind:m.dereferenceAttribute,range:e.range,attributeIdentifier:e.value,nodeToGetObject:t}}buildMethodCallNode(t,e){let i=t.value;return(t.tt==m.keywordThis||t.tt==m.keywordSuper)&&(i=""),{kind:m.methodCall,identifier:i,identifierRange:t.range,range:t.range,nodeToGetObject:e,parameterValues:[],commaPositions:[],rightBracketPosition:void 0}}buildLambdaFunctionDeclarationNode(t){return{kind:m.lambdaOperator,range:t.range,parameters:[],statement:void 0}}buildCastNode(t,e,i){return{range:t.range,kind:m.castValue,castType:e,objectToCast:i}}buildVariableNode(t){return{kind:m.symbol,range:t.range,identifier:t.value}}buildNewObjectNode(t,e,i){return{kind:m.newObject,range:t.range,klassIdentifierRange:e.range,parameterValues:[],type:e,object:i,commaPositions:[],rightBracketPosition:void 0}}buildAnonymousInnerClassNode(t,e){let i=new ee(t.range.startLineNumber,t.range.startColumn,e.range.endLineNumber,e.range.endColumn);return{kind:m.anonymousClass,newObjectNode:t,klass:e,range:i}}buildNewArrayNode(t,e,i){return{kind:m.newArray,range:t.range,arrayType:e,dimensions:i}}buildSelectArrayElement(t){return{kind:m.selectArrayElement,range:t.range,array:t,indices:[]}}buildWhileNode(t,e,i,n){return{kind:m.keywordWhile,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn},condition:i,statementToRepeat:n}}buildDoWhileNode(t,e,i,n){return{kind:m.keywordDo,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn},condition:i,statementToRepeat:n}}buildIfNode(t,e,i,n,s){return{kind:m.keywordIf,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn},condition:i,statementIfTrue:n,statementIfFalse:s}}buildForLoopNode(t,e,i,n,s,a){return a=a||(s==null?void 0:s.range)||re.instance,{kind:m.keywordFor,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:a.endLineNumber,endColumn:a.endColumn},firstStatement:e,condition:i,lastStatement:n,statementToRepeat:s}}buildMainProgramNode(t){return{kind:m.program,range:t.range,statements:[]}}buildPrintStatement(t,e){return{kind:m.print,range:t.range,isPrintln:e,firstParameter:void 0,secondParameter:void 0,commaPositions:[],rightBracketPosition:void 0}}buildConstantNode(t){return{kind:m.literal,range:t.range,constantType:t.tt,value:t.tt==m.keywordNull?null:t.value}}buildThisNode(t){return{kind:m.keywordThis,range:t.range}}buildSuperNode(t){return{kind:m.keywordSuper,range:t.range}}buildSynchronizedBlockNode(t,e,i){return{kind:m.synchronizedBlock,range:t.range,lockObject:e,block:i}}buildBlockNode(t){return{kind:m.block,range:t.range,statements:[]}}buildBlockNodeFromStatements(t){if(t.length==1)return t[0];let e={startLineNumber:t[0].range.startLineNumber,startColumn:t[0].range.startColumn,endLineNumber:t[1].range.endLineNumber,endColumn:t[1].range.endColumn};return{kind:m.block,range:e,statements:t}}buildInstanceInitializerNode(t){return{kind:m.instanceInitializerBlock,range:t.range,statements:[]}}buildStaticInitializerNode(t){return{kind:m.staticInitializerBlock,range:t.range,statements:[]}}buildEnhancedForLoop(t,e,i,n,s){return{kind:m.enhancedForLoop,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:s.range.endLineNumber,endColumn:s.range.endColumn},elementType:e,elementIdentifier:i.value,elementIdentifierPosition:i.range,collection:n,statementToRepeat:s,elementIsFinal:!1}}buildSwitchCaseNode(t,e){return{kind:m.keywordSwitch,range:t.range,term:e,caseNodes:[],defaultNode:void 0}}buildCaseNode(t,e){return{kind:m.keywordCase,range:t.range,constants:e,statements:[]}}buildContinueNode(t){return{kind:m.keywordContinue,range:t.range}}buildBreakNode(t){return{kind:m.keywordBreak,range:t.range}}buildReturnNode(t,e){return{kind:m.keywordReturn,range:e?{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn}:t.range,term:e,keywordReturnRange:t.range}}buildTryCatchNode(t,e){return{kind:m.keywordTry,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn},tryStatement:e,catchCases:[]}}buildCatchNode(t,e,i,n){return{kind:m.keywordCatch,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:n.range.endLineNumber,endColumn:n.range.endColumn},exceptionTypes:e,exceptionIdentifier:i.value,exceptionIdentifierPosition:i.range,statement:n}}buildAnnotationNode(t){return{kind:m.annotation,range:t.range,identifier:t.value}}buildLocalVariableDeclaration(t,e,i,n){let s=i||e;return{kind:m.localVariableDeclaration,identifier:e.value,identifierRange:e.range,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:s.range.endLineNumber,endColumn:s.range.endColumn},type:t,initialization:i,isFinal:n}}}const jn=class jn{constructor(t,e){r(this,"pos",0);r(this,"dummy",{range:{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0},tt:m.comment,value:""});r(this,"lastToken",this.dummy);r(this,"cct",this.dummy);r(this,"tt",m.comment);r(this,"lastComment");r(this,"endToken");this.tokenList=t,this.module=e,t.length==0&&t.push({tt:m.endofSourcecode,value:"",range:re.instance}),this.endToken=t[t.length-1],this.pos=-1,t.length>0&&this.nextToken()}getAndSkipToken(){return this.nextToken(),this.lastToken}getRangeAndThenSkipToken(){let t=this.cct.range;return this.nextToken(),t}getAndSkipTokenWithSemicolon(){let t=this.cct;return this.nextToken(),this.expectSemicolon(),t}nextToken(){let t;if(!(this.pos>=this.tokenList.length)){for(this.lastToken=this.cct;;){if(this.pos++,this.pos>=this.tokenList.length){t=this.endToken;break}if(t=this.tokenList[this.pos],t.tt==m.comment&&(this.lastComment=t),t.tt!=m.newline&&t.tt!=m.space&&t.tt!=m.comment){t.commentBefore=this.lastComment,this.lastComment=void 0;break}}this.cct=t,this.tt=this.cct.tt}}exchangeShiftRightForTwoClosingGreater(){this.cct.tt=m.greater,this.tt=m.greater,this.cct.value=">";let t={tt:m.greater,value:">",range:{startLineNumber:this.cct.range.startLineNumber,startColumn:this.cct.range.startColumn+1,endLineNumber:this.cct.range.endLineNumber,endColumn:this.cct.range.endColumn+1}};this.tokenList.splice(this.pos+1,0,t)}lookahead(t){let e=t,i=this.pos,n=this.cct;for(;e>0&&i=0)return e&&this.nextToken(),!0;let i=t.map(n=>we[n]).join(", ");return this.pushError(v.expectedOtherTokens(i,we[this.tt]),"error"),!1}expectSemicolon(t=!0,e=!1){if(this.tt==m.semicolon)return t&&this.nextToken(),!0;{let i=this.cct.range;if(this.lastToken!=null&&this.lastToken.range.endLineNumber=0){this.nextToken();return}this.pos++}}expectAndSkipIdentifierAsString(){if(this.tt==m.identifier){let t=this.cct.value;return this.nextToken(),t}return this.pushError(v.identifierExpected(""+this.cct.value)),""}expectAndSkipIdentifierAsToken(){if(this.tt==m.identifier){let t=this.cct;return this.nextToken(),t}return this.pushError(v.identifierExpected(""+this.cct.value)),{tt:m.identifier,value:"",range:this.cct.range}}isOperatorOrDot(t){if(t==m.dot)return!0;for(let e of jn.operators)if(t==e)return!0;return!1}isEnd(){return this.cct==this.endToken}comesToken(t,e){return Array.isArray(t)?e?t.indexOf(this.tt)>=0?(this.nextToken(),!0):!1:t.indexOf(this.tt)>=0:e?this.tt==t?(this.nextToken(),!0):!1:this.tt==t}getCurrentRangeCopy(){return Object.assign({},this.cct.range)}setEndOfRange(t){let e=t.range,i=this.lastToken.range;return t.range={startLineNumber:e.startLineNumber,startColumn:e.startColumn,endLineNumber:i.endLineNumber,endColumn:i.endColumn},t}comesIdentifier(t){return this.tt==m.identifier&&this.cct.value==t}findTokenTypeAfterCorrespondingRightBracket(){let t=this.pos+1,e=1;for(;t0;)switch(this.tokenList[t++].tt){case m.leftBracket:e++;break;case m.rightBracket:e--}if(e==0){for(;t=0;)t++;if(t=0)return n;if(e.indexOf(n)>=0)break;i++}return null}analyzeIfVariableDeclarationOrMethodDeclarationAhead(t){if(this.tt==m.keywordFinal)return"variabledeclaration";if([m.keywordPrivate,m.keywordProtected,m.keywordPublic,m.keywordStatic,m.keywordVoid].indexOf(this.tt)>=0)return"methoddeclaration";let e=this.pos,i=[];for(;eu!=m.identifier)&&i.length>=2?"variabledeclaration":"statement";jn.spaceTokenTypes.indexOf(c)<0&&i.push(c),e++}let n=i.length;if(n<2)return"statement";let s=i[n-1],a=i[n-2],l=n<3?m.endofSourcecode:i[n-3];return t&&s==m.leftBracket&&a==m.identifier&&[m.greater,m.identifier,m.leftRightSquareBracket,m.keywordVoid].indexOf(l)>=0?"methoddeclaration":[m.identifier,m.leftRightSquareBracket].indexOf(s)<0||[m.identifier,m.greater,m.leftRightSquareBracket,m.keywordVar,m.comma].indexOf(a)<0?"statement":"variabledeclaration"}};r(jn,"possibleTokensInsideVariableDeclaration",[m.identifier,m.linefeed,m.newline,m.space,m.comment,m.lower,m.greater,m.dot,m.leftRightSquareBracket,m.comma,m.keywordVar,m.ternaryOperator,m.keywordExtends,m.keywordSuper,m.leftBracket,m.keywordVoid]),r(jn,"spaceTokenTypes",[m.space,m.comment,m.linefeed,m.newline]),r(jn,"operators",[m.assignment,m.plusAssignment,m.minusAssignment,m.multiplicationAssignment,m.divisionAssignment,m.moduloAssignment,m.ANDAssigment,m.XORAssigment,m.ORAssigment,m.shiftLeftAssigment,m.shiftRightAssigment,m.shiftRightUnsignedAssigment,m.ternaryOperator,m.colon,m.or,m.and,m.OR,m.XOR,m.ampersand,m.equal,m.notEqual,m.keywordInstanceof,m.lower,m.lowerOrEqual,m.greater,m.greaterOrEqual,m.shiftLeft,m.shiftRight,m.shiftRightUnsigned,m.plus,m.minus,m.multiplication,m.division,m.modulo]);let Pu=jn;const fi=class fi extends Pu{constructor(e){super(e.tokens,e);r(this,"operatorToPrecedenceMap",{});r(this,"nodeFactory");r(this,"currentClassOrInterface");r(this,"currentMethod");r(this,"firstStatementInsideMethodBodyNotYetCompiled",!0);this.module=e,this.initOperatorToPrecedenceMap()}initOperatorToPrecedenceMap(){for(let e=0;e=0?this.cct:void 0;e&&this.nextToken();let i=this.parseTermUnary();i&&e&&(i=this.nodeFactory.buildUnaryPrefixNode(e,i));let n=this.tt==m.plusPlus||this.tt==m.minusMinus?this.cct:void 0;return n&&(this.nextToken(),i&&(i=this.nodeFactory.buildPlusPlusMinusMinusSuffixNode(n,i))),i}parseTermUnary(){let e;switch(this.tt){case m.leftBracket:switch(this.findTokenTypeAfterCorrespondingRightBracket()){case m.lambdaOperator:e=this.parseLambdaFunctionDefinition();break;case m.leftBracket:case m.identifier:case m.keywordThis:case m.keywordSuper:case m.shortConstant:case m.integerLiteral:case m.longConstant:case m.floatLiteral:case m.doubleConstant:case m.booleanLiteral:case m.stringLiteral:case m.charLiteral:case m.true:case m.false:e=this.parseCastedObject();break;default:let l=this.cct.range;if(this.nextToken(),e=this.parseTerm(),e){e.parenthesisNeeded=!0;let h={startColumn:l.startColumn,startLineNumber:l.startLineNumber,endColumn:this.cct.range.endColumn,endLineNumber:this.cct.range.endLineNumber};this.expect(m.rightBracket,!0),e=this.nodeFactory.buildBracketNode(h,e)}}break;case m.identifier:switch(this.lookahead(1).tt){case m.leftBracket:e=this.parseMethodCall(void 0);break;case m.lambdaOperator:e=this.parseLambdaFunctionDefinition();break;default:e=this.parseVariable()}break;case m.keywordNew:switch(this.lookForTokenTillOtherToken([m.leftBracket,m.leftSquareBracket,m.leftRightSquareBracket],[m.semicolon,m.leftCurlyBracket])){case m.leftBracket:e=this.parseNewObjectInstantiation(void 0);break;case m.leftSquareBracket:case m.leftRightSquareBracket:e=this.parseNewArray();break;default:this.pushError(v.wrongSyntaxAfterKeywordNew(),"error"),this.skipTokensTillEndOfLineOr([m.semicolon,m.comma,m.rightBracket],!1);break}break;case m.keywordPrint:case m.keywordPrintln:e=this.parsePrintStatement();break;case m.shortConstant:case m.integerLiteral:case m.floatLiteral:case m.doubleConstant:case m.longConstant:case m.charLiteral:case m.stringLiteral:case m.booleanLiteral:case m.keywordNull:e=this.nodeFactory.buildConstantNode(this.getAndSkipToken());break;case m.keywordThis:let s=this.getAndSkipToken();e=this.nodeFactory.buildThisNode(s),this.comesToken(m.leftBracket,!1)&&(e=this.buildMethodCallNode(s,e));break;case m.keywordSuper:let a=this.getAndSkipToken();e=this.nodeFactory.buildSuperNode(a),this.comesToken(m.leftBracket,!1)&&(e=this.buildMethodCallNode(a,e),this.firstStatementInsideMethodBodyNotYetCompiled||this.pushError(v.superCallInsideConstructorAfterFirstStatement(),"error",a.range));break;case m.leftCurlyBracket:e=this.parseArrayLiteral();break;case m.keywordElse:this.pushError(v.unexpectedToken(""+this.cct.value)),this.nextToken();break}if(e)for(;[m.dot,m.leftSquareBracket].indexOf(this.tt)>=0;)switch(this.tt){case m.dot:this.nextToken(),this.tt==m.keywordNew?e=this.parseNewObjectInstantiation(e):e=this.parseAttributeOrMethodCall(e);break;case m.leftSquareBracket:e=this.parseSelectArrayElement(e);break}return e}parseAttributeOrMethodCall(e){if(e){if(this.lookahead(1).tt==m.leftBracket)return this.parseMethodCall(e);{let i=this.tt==m.keywordSuper?this.getAndSkipToken():this.expectAndSkipIdentifierAsToken();return i.value==""?e:this.nodeFactory.buildAttributeDereferencingNode(e,i)}}else{this.pushError(v.dotOperatorNotExpected(),"error");return}}parseMethodCall(e){let i=this.expectAndSkipIdentifierAsToken();return i.value==""?e:this.buildMethodCallNode(i,e)}buildMethodCallNode(e,i){this.expect(m.leftBracket,!0);let n=this.nodeFactory.buildMethodCallNode(e,i);if(this.tt!=m.rightBracket)do{let s=this.parseTerm();s&&n.parameterValues.push(s),this.comesToken(m.comma,!1)&&n.commaPositions.push(ee.getStartPosition(this.cct.range))}while(this.comesToken(m.comma,!0));return n.rightBracketPosition=ee.getStartPosition(this.cct.range),this.expect(m.rightBracket,!0),this.setEndOfRange(n),n}parseLambdaFunctionDefinition(){let e=this.nodeFactory.buildLambdaFunctionDeclarationNode(this.cct);if(this.tt==m.leftBracket){if(this.nextToken(),this.tt!=m.rightBracket)do{let i=this.cct.range,n=[m.comma,m.rightBracket].indexOf(this.lookahead(1).tt)>=0,s;n||(s=this.parseType(!1));let a=this.expectAndSkipIdentifierAsToken();a.value!=""&&e.parameters.push(this.nodeFactory.buildParameterNode(i,a,s,!1,!1))}while(this.comesToken(m.comma,!0));this.expect(m.rightBracket,!0)}else{let i=this.expectAndSkipIdentifierAsToken();i.value!=""&&e.parameters.push(this.nodeFactory.buildParameterNode(i.range,i,void 0,!1,!1))}if(this.expect(m.lambdaOperator,!0),this.comesToken(m.leftCurlyBracket,!1))e.statement=this.parseStatementOrExpression();else{let i=this.parseTerm();if(i){let n={kind:m.keywordReturn,range:i==null?void 0:i.range,term:i,keywordReturnRange:i.range};e.statement=n}else this.pushError(v.cantGetTypeOfExpression())}return this.setEndOfRange(e),e}parseType(e){var n;let i;switch(this.tt){case m.keywordVoid:i=this.nodeFactory.buildVoidTypeNode(this.getRangeAndThenSkipToken());break;case m.keywordVar:i=this.nodeFactory.buildVarTypeNode(this.getRangeAndThenSkipToken());break;case m.ternaryOperator:let s=this.nodeFactory.buildWildcardTypeNode(this.getRangeAndThenSkipToken());if(this.comesToken(m.keywordExtends,!0))do{let c=this.parseType(!1);c&&s.extends.push(c)}while(this.comesToken(m.ampersand,!0));this.comesToken(m.keywordSuper,!0)&&(s.super=this.parseType(!1)),i=s;break;case m.identifier:let a=this.cct.range,l=this.expectAndSkipIdentifierAsString();if(l=="string"){let c=this.pushError(v.useOfStringWithSmallLetterAsIdentifier(),"error",a);this.module.quickfixes.push(new Ra(a,"String",v.upperCaseStringQuickfixMessage(),c))}this.comesToken(m.ellipsis,!1)&&(e=!0),e&&l=="String"&&(l="string");let h=this.nodeFactory.buildBaseTypeNode(l,a);for(;this.comesToken(m.dot,!0);){let c=this.expectAndSkipIdentifierAsToken();c&&(h.identifiers.push({identifier:c.value,identifierRange:c.range}),this.setEndOfRange(h))}if(this.setEndOfRange(h),this.comesToken(m.lower,!0)){h=this.nodeFactory.buildGenericTypeInstantiationNode(h,h.range);do{let c=this.parseType(!1);c&&h.actualTypeArguments.push(c)}while(this.comesToken(m.comma,!0));this.comesToken(m.shiftRight,!1)&&this.exchangeShiftRightForTwoClosingGreater(),this.expect(m.greater,!0),this.setEndOfRange(h)}if(this.comesToken(m.leftRightSquareBracket,!0)){for(h=this.nodeFactory.buildArrayTypeNode(h,h.range);this.comesToken(m.leftRightSquareBracket,!0);)h.arrayDimensions++;this.setEndOfRange(h)}i=h;break}return i&&((n=this.module.ast)==null||n.collectedTypeNodes.push(i)),i}buildBaseType(e){var n;let i;return e=="void"?i=this.nodeFactory.buildVoidTypeNode(re.instance):i=this.nodeFactory.buildBaseTypeNode(e,re.instance),(n=this.module.ast)==null||n.collectedTypeNodes.push(i),i}parseCastedObject(){let e=this.cct;this.nextToken();let i=this.parseType(!1);this.expect(m.rightBracket);let n=this.parseTermUnary();if(i&&n){let s=this.nodeFactory.buildCastNode(e,i,n);return this.setEndOfRange(s),s}}parseVariable(){let e=this.expectAndSkipIdentifierAsToken();if(e.value!="")return this.nodeFactory.buildVariableNode(e)}parseNewArray(){let e=this.cct;this.nextToken();let i=this.parseType(!0);if(!i)return;let n=this.nodeFactory.buildNewArrayNode(e,i,[]),s=0;if(this.comesToken(m.leftSquareBracket,!1))do{if(this.comesToken(m.leftRightSquareBracket,!1))s==0?this.pushError(v.firstArrayDimensionMustNotBeZero(),"error"):n.dimensions.push(this.nodeFactory.buildConstantNode({tt:m.integerLiteral,value:0,range:this.cct.range})),this.nextToken();else{this.nextToken();let a=this.parseTerm();a&&n.dimensions.push(a),this.expect(m.rightSquareBracket)}s++}while(this.comesToken([m.leftSquareBracket,m.leftRightSquareBracket],!1));else if("arrayDimensions"in i&&"arrayOf"in i){let a=i.arrayDimensions;n.dimensionCount=a,a==1?n.arrayType=i.arrayOf:n.arrayType=this.nodeFactory.buildArrayTypeNode(i.arrayOf,void 0,a-1),this.expect(m.leftCurlyBracket,!1)&&(n.initialization=this.parseArrayLiteral())}else{this.pushError(v.squareBracketExpected(),"error",e.range);return}return this.setEndOfRange(n),n}parseNewObjectInstantiation(e){let i=this.cct;this.nextToken();let n=this.parseType(!1);if(!n)return;let s=this.nodeFactory.buildNewObjectNode(i,n,e);if(this.expect(m.leftBracket),this.tt!=m.rightBracket)do{let a=this.parseTerm();a&&s.parameterValues.push(a),this.comesToken(m.comma,!1)&&s.commaPositions.push(ee.getStartPosition(this.getCurrentRangeCopy()))}while(this.comesToken(m.comma,!0));return s.rightBracketPosition=ee.getStartPosition(this.getCurrentRangeCopy()),this.expect(m.rightBracket,!0),this.setEndOfRange(s),this.comesToken(m.leftCurlyBracket,!1)?this.parseAnonymousInnerClassBody(s):s}parseSelectArrayElement(e){if(!e){this.skipTokensTillEndOfLineOr([m.rightSquareBracket]);return}let i=this.nodeFactory.buildSelectArrayElement(e);for(;this.tt==m.leftSquareBracket;){this.nextToken();let n=this.parseTerm();n&&i.indices.push(n),this.expect(m.rightSquareBracket,!0)}return this.setEndOfRange(i),i}parsePrintStatement(){let e=this.nodeFactory.buildPrintStatement(this.cct,this.tt==m.keywordPrintln),i=this.getCurrentRangeCopy();return this.nextToken(),this.expect(m.leftBracket,!0)&&(this.tt!=m.rightBracket&&(e.firstParameter=this.parseTerm()),this.comesToken(m.comma,!0)&&(e.commaPositions.push(ee.getStartPosition(this.lastToken.range)),e.secondParameter=this.parseTerm()),e.rightBracketPosition=ee.getStartPosition(this.cct.range),this.module.pushMethodCallPosition(i,e.commaPositions,e.isPrintln?"println":"print",e.rightBracketPosition),this.expect(m.rightBracket,!0)),e}parseArrayLiteral(){let e=this.nodeFactory.buildArrayLiteralNode();if(this.expect(m.leftCurlyBracket,!0),!this.comesToken(m.rightCurlyBracket,!1))do{let i=this.parseTerm();i&&e.elements.push(i)}while(this.comesToken(m.comma,!0));return this.setEndOfRange(e),this.expect(m.rightCurlyBracket,!0),e}};r(fi,"assignmentOperators",[m.assignment,m.plusAssignment,m.minusAssignment,m.multiplicationAssignment,m.divisionAssignment,m.moduloAssignment,m.ANDAssigment,m.XORAssigment,m.ORAssigment,m.shiftLeftAssigment,m.shiftRightAssigment,m.shiftRightUnsignedAssigment]),r(fi,"unaryPrefixOperators",[m.plus,m.minus,m.not,m.tilde,m.plusPlus,m.minusMinus]),r(fi,"ternaryOperatorArray",[m.ternaryOperator,m.colon]),r(fi,"operatorPrecedence",[fi.assignmentOperators,fi.ternaryOperatorArray,[m.or],[m.and],[m.OR],[m.XOR],[m.ampersand],[m.equal,m.notEqual],[m.keywordInstanceof,m.lower,m.lowerOrEqual,m.greater,m.greaterOrEqual],[m.shiftLeft,m.shiftRight,m.shiftRightUnsigned],[m.plus,m.minus],[m.multiplication,m.division,m.modulo]]),r(fi,"ternaryOperatorPrecedence",fi.operatorPrecedence.indexOf(fi.ternaryOperatorArray));let Bu=fi;class ig extends Bu{constructor(e){super(e);r(this,"isCodeOutsideClassdeclarations",!1);r(this,"isInsideMainMethod",!1);r(this,"nestingLevel",0)}parseStatementOrExpression(e=!0){switch(this.tt){case m.keywordWhile:this.nestingLevel++;let i=this.parseWhile();return this.nestingLevel--,i;case m.keywordDo:this.nestingLevel++;let n=this.parseDo();return this.nestingLevel--,n;case m.keywordIf:this.nestingLevel++;let s=this.parseIf();return this.nestingLevel--,s;case m.leftCurlyBracket:this.nestingLevel++;let a=this.parseBlock();return this.nestingLevel--,a;case m.keywordFor:this.nestingLevel++;let l=this.parseFor();return this.nestingLevel--,l;case m.keywordSwitch:this.nestingLevel++;let h=this.parseSwitch();return this.nestingLevel--,h;case m.keywordBreak:return this.nodeFactory.buildBreakNode(this.getAndSkipTokenWithSemicolon());case m.keywordContinue:return this.nodeFactory.buildContinueNode(this.getAndSkipTokenWithSemicolon());case m.keywordTry:this.nestingLevel++;let c=this.parseTryCatch();return this.nestingLevel--,c;case m.keywordThrow:return this.parseThrow();case m.keywordReturn:return this.parseReturn();case m.semicolon:let u=this.nodeFactory.buildBlockNode(this.cct);return u.isEmpty=!0,this.nextToken(),u;case m.keywordSynchronized:this.nestingLevel++;let g=this.parseSynchronizedBlock();return this.nestingLevel--,g;default:let f=this.parseVariableDeclarationOrMethodDeclarationTerm(e);return this.firstStatementInsideMethodBodyNotYetCompiled=!1,f}}parseSynchronizedBlock(){let e=this.getAndSkipToken();if(!this.expect(m.leftBracket,!0))return;let i=this.parseTermUnary();if(this.expect(m.rightBracket,!0),this.expect(m.leftCurlyBracket,!1)){let n=this.parseBlock();if(i&&n)return this.nodeFactory.buildSynchronizedBlockNode(e,i,n)}}parseVariableDeclarationOrMethodDeclarationTerm(e){let i=this.analyzeIfVariableDeclarationOrMethodDeclarationAhead(this.isCodeOutsideClassdeclarations),n,s=this.pos,a=this.module.errors.length;switch(i){case"variabledeclaration":this.isInsideMainMethod&&this.nestingLevel==0?n=this.convertLocalVariableToStaticField():n=this.parseLocalVariableDeclaration();break;case"statement":if(n=this.parseTerm(),n&&n.kind==m.binaryOp){let l=n;if(l.operator==m.equal){let h=this.pushError(v.comparisonOperatorInsteadOfAssignment(),"warning",l.operatorRange);this.module.quickfixes.push(new Ra(l.operatorRange,"=",v.ReplaceTokenQuickfixDefaultMessage("==","="),h))}}break;case"methoddeclaration":if(this.isCodeOutsideClassdeclarations&&this.currentMethod==null){let l=this.nodeFactory.buildNodeWithModifiers(this.cct.range);l.isStatic=!0,this.parseFieldOrMethodDeclaration(this.module.mainClass,l,void 0);return}else this.pushError(v.noMethodDeclarationAllowedHere())}return(!n||e&&!this.expectSemicolon(!0,a==this.module.errors.length))&&s==this.pos&&(this.module.errors.find(l=>l.level=="error")||this.pushError(v.unexpectedToken(this.cct.value+"")),this.skipTillNextTokenAfter([m.semicolon,m.newline,m.rightCurlyBracket])),n}convertLocalVariableToStaticField(){let e=this.nodeFactory.buildNodeWithModifiers(this.cct.range);e.isStatic=!0;let i;this.comesToken(m.varType,!0)?i=this.nodeFactory.buildVarTypeNode():i=this.parseType(!1);let n={kind:m.initialFieldAssignementInMainProgram,range:Object.assign(this.cct.range),assignments:[]};for(;this.expect(m.identifier,!1);){let s=this.cct.range,a=this.expectAndSkipIdentifierAsToken();i=this.increaseArrayDimensionIfLeftRightSquareBracketsToCome(i);let l=this.cct.range;if(this.tt==m.equal){let c=this.pushError(v.comparisonOperatorInsteadOfAssignment(),"error",this.cct.range);this.module.quickfixes.push(new Ra(this.cct.range,"=",v.ReplaceTokenQuickfixDefaultMessage("==","="),c))}let h=this.comesToken([m.assignment,m.equal],!0)?this.parseTerm():void 0;if(a.value!=""&&i!=null){let c=this.nodeFactory.buildFieldDeclarationNode(s,a,i,void 0,e,[]);this.module.mainClass.fieldsOrInstanceInitializers.push(c),this.setEndOfRange(c)}if(h&&n.assignments.push({assignmentOperatorRange:l,fieldNode:this.nodeFactory.buildVariableNode(a),initialTerm:h}),!this.comesToken(m.comma,!0))break}if(this.setEndOfRange(n),n.assignments.length!=0)return n}parseLocalVariableDeclaration(){let e={kind:m.localVariableDeclarations,declarations:[],range:re.instance},i=this.comesToken(m.keywordFinal,!0),n=this.parseType(!0);do{let s=this.expectAndSkipIdentifierAsToken();if(n=this.increaseArrayDimensionIfLeftRightSquareBracketsToCome(n),this.tt==m.equal){let l=this.pushError(v.comparisonOperatorInsteadOfAssignment(),"error",this.cct.range);this.module.quickfixes.push(new Ra(this.cct.range,"=",v.ReplaceTokenQuickfixDefaultMessage("==","="),l))}let a;this.comesToken([m.assignment,m.equal],!0)&&(a=this.parseTerm()),n&&s&&e.declarations.push(this.nodeFactory.buildLocalVariableDeclaration(n,s,a,i))}while(this.comesToken(m.comma,!0));return e}increaseArrayDimensionIfLeftRightSquareBracketsToCome(e){let i=0;for(;this.comesToken(m.leftRightSquareBracket,!0);)i++;return e&&i>0&&(e=this.nodeFactory.buildArrayTypeNode(e,e.range,i)),e}parseWhile(){let e=this.getCurrentRangeCopy(),i=this.getAndSkipToken();if(this.comesToken(m.leftBracket,!0)){let n=this.parseTerm();this.expect(m.rightBracket);let s=this.parseStatementToRepeat();if(n&&s)return this.nodeFactory.buildWhileNode(i,this.cct,n,s)}else this.module.pushMethodCallPosition(e,[],"while",ee.getStartPosition(this.cct.range)),this.skipTokensTillEndOfLineOr([m.rightBracket])}parseDo(){let e=this.getAndSkipToken(),i=this.parseStatementToRepeat();if(this.expect(m.keywordWhile,!0),this.comesToken(m.leftBracket,!0)){let n=this.parseTerm();if(this.expect(m.rightBracket,!0),n&&i)return this.nodeFactory.buildDoWhileNode(e,this.cct,n,i)}else this.skipTokensTillEndOfLineOr([m.rightBracket])}parseIf(){let e=this.getCurrentRangeCopy(),i=this.getAndSkipToken();if(this.comesToken(m.leftBracket,!0)){let n=this.parseTerm();if(this.module.pushMethodCallPosition(e,[],"if",ee.getStartPosition(this.cct.range)),this.expect(m.rightBracket),this.comesToken(m.rightCurlyBracket,!1)){this.pushError(v.statementOrBlockExpected());return}let s=this.parseStatementOrExpression(),a;return this.comesToken(m.keywordElse,!0)&&(a=this.parseStatementOrExpression()),this.nodeFactory.buildIfNode(i,this.cct,n,s,a)}else this.pushError(v.expectedOtherTokens("(",this.cct.value+"")),this.skipTokensTillEndOfLineOr([m.rightBracket])}parseBlock(){let e=this.nodeFactory.buildBlockNode(this.cct);this.nextToken();let i=-1;for(;!this.isEnd()&&this.tt!=m.rightCurlyBracket&&i!=this.pos;){i=this.pos;let n=this.parseStatementOrExpression();n&&e.statements.push(n)}return e.statements.length==0&&(e.isEmpty=!0),this.expect(m.rightCurlyBracket,!0),this.setEndOfRange(e),e}parseFor(){let e=this.getCurrentRangeCopy(),i=[],n=this.getAndSkipToken();if(!this.expect(m.leftBracket,!0))return;if(this.lookForTokenTillOtherToken(m.colon,[m.rightBracket,m.leftCurlyBracket,m.rightCurlyBracket]))return this.parseEnhancedForLoop(n);let a;this.comesToken(m.semicolon,!1)||(a=this.parseStatementOrExpression(!1)),i.push(ee.getStartPosition(this.cct.range)),this.expect(m.semicolon,!0);let l;this.comesToken(m.semicolon,!1)||(l=this.parseTerm(),l||this.skipTokensTillEndOfLineOr(m.semicolon)),i.push(ee.getStartPosition(this.cct.range)),this.expect(m.semicolon,!0);let h=this.parseTerm(),c=ee.getStartPosition(this.cct.range);this.expect(m.rightBracket,!0),this.module.pushMethodCallPosition(e,i,"for",c);let u=this.parseStatementToRepeat();u||this.pushError(v.statementOrBlockExpected());let g=u?u.range:this.cct.range;return this.nodeFactory.buildForLoopNode(n,a,l,h,u,g)}parseStatementToRepeat(){return this.comesToken(m.semicolon,!1)&&this.pushError(v.loopOverEmptyStatement(),"warning"),this.parseStatementOrExpression(!0)}parseEnhancedForLoop(e){let i=this.parseType(!0),n=this.expectAndSkipIdentifierAsToken();this.expect(m.colon,!0);let s=this.parseTerm();this.expect(m.rightBracket);let a=this.parseStatementOrExpression();if(!a){this.pushError(v.statementOrBlockExpected());return}if(i&&n&&s&&a)return this.nodeFactory.buildEnhancedForLoop(e,i,n,s,a)}parseSwitch(){let e=this.getCurrentRangeCopy(),i=this.getAndSkipToken();if(!this.expect(m.leftBracket,!0))return;let n=this.parseTerm();if(this.module.pushMethodCallPosition(e,[],"switch",ee.getStartPosition(this.cct.range)),this.expect(m.rightBracket,!0),!this.expect(m.leftCurlyBracket,!0)||!n)return;let s=this.nodeFactory.buildSwitchCaseNode(i,n);for(;this.comesToken([m.keywordCase,m.keywordDefault],!1);){let a=this.tt==m.keywordCase,l=this.cct;this.nextToken();let h=[],c=this.nodeFactory.buildCaseNode(l,h);if(a){do{let u=this.parseTermUnary();u&&h.push(u)}while(this.comesToken(m.comma,!0));h.length==0&&this.pushError(v.constantMissingInCaseStatement(),"error",l.range)}for(this.expect(m.colon,!0);!this.isEnd()&&!this.comesToken([m.keywordCase,m.keywordDefault,m.rightCurlyBracket],!1);){let u=this.parseStatementOrExpression();u&&c.statements.push(u)}this.setEndOfRange(c),a?s.caseNodes.push(c):s.defaultNode=c}return this.expect(m.rightCurlyBracket,!0),this.setEndOfRange(s),s}parseThrow(){let e=this.getAndSkipToken(),i=this.parseTerm();if(this.expectSemicolon(!0,!0),!!i)return{kind:m.keywordThrow,exception:i,range:e.range}}parseTryCatch(){let e=this.getAndSkipToken(),i=this.parseStatementOrExpression();if(!i)return;let n=this.nodeFactory.buildTryCatchNode(e,i);for(;this.comesToken(m.keywordCatch,!1);){let s=this.getAndSkipToken();if(!this.expect(m.leftBracket,!0))continue;let a=[];do{let c=this.parseType(!1);c&&a.push(c)}while(this.comesToken(m.OR,!0));let l=this.expectAndSkipIdentifierAsToken();if(!this.expect(m.rightBracket,!0))continue;let h=this.parseStatementOrExpression();a.length>0&&l&&h&&n.catchCases.push(this.nodeFactory.buildCatchNode(s,a,l,h))}return this.comesToken(m.keywordFinally,!0)&&(n.finallyStatement=this.parseStatementOrExpression(!0)),n}parseReturn(){let e=this.getAndSkipToken(),i;for(this.tt==m.semicolon?i=void 0:(i=this.parseTerm(),this.expect(m.semicolon));this.comesToken(m.semicolon,!0););return this.nodeFactory.buildReturnNode(e,i)}}const bi=class bi extends ig{constructor(e){super(e);r(this,"collectedAnnotations",[]);r(this,"mainMethodStatements",[]);this.javaCompiledModule=e,this.nodeFactory=new tg(this),this.initializeAST()}initializeAST(){let e={startLineNumber:0,startColumn:0,endLineNumber:this.endToken.range.endLineNumber+1,endColumn:this.endToken.range.endColumn+1};this.javaCompiledModule.ast={kind:m.global,range:e,innerTypes:[],mainProgramNode:this.nodeFactory.buildMainProgramNode(this.cct),collectedTypeNodes:this.nodeFactory.collectedTypenodesGettingRegisteredAtTypeResolver,path:""},this.javaCompiledModule.mainClass=this.nodeFactory.buildClassNode(this.nodeFactory.buildNodeWithModifiers(re.instance),{tt:m.identifier,value:"$MainClass"+bi.mainClassCounter++,range:re.instance},this.javaCompiledModule.ast,[],this.javaCompiledModule),this.javaCompiledModule.mainClass.range=e,this.javaCompiledModule.mainClass.isMainClass=!0;let i=this.nodeFactory.buildMethodNode(void 0,!1,this.nodeFactory.buildNodeWithModifiers(re.instance),{tt:m.identifier,value:_r.mainMethodIdentifier,range:re.instance},e,[],this.javaCompiledModule.mainClass);i.isStatic=!0;let n={kind:m.block,range:e,statements:[]};i.statement=n,this.mainMethodStatements=n.statements,this.mainMethodStatements.push({kind:m.firstMainProgramStatement,range:re.instance});let s=this.nodeFactory.buildArrayTypeNode(this.buildBaseType("String")),a=this.nodeFactory.buildParameterNode(re.instance,{tt:m.identifier,value:"args",range:re.instance},s,!1,!0);a.trackMissingReadAccess=!1,i.parameters.push(a),i.returnParameterType=this.buildBaseType("void"),this.javaCompiledModule.mainClass.methods.push(i)}parse(){for(;!this.isEnd();){let e=this.pos;if(this.comesToken(bi.visibilityModifiers,!1))if(bi.visibilityModifiersOrTopLevelTypeDeclaration.indexOf(this.lookahead(1).tt)>=0)this.parseClassOrInterfaceOrEnum(this.javaCompiledModule.ast,void 0),this.currentClassOrInterface=void 0;else{let i=this.tt;this.nextToken(),this.parseMethodDeclarationInMainProgram(i)}else this.comesToken(bi.visibilityModifiersOrTopLevelTypeDeclaration,!1)?(this.parseClassOrInterfaceOrEnum(this.javaCompiledModule.ast,void 0),this.currentClassOrInterface=void 0):this.tt==m.at?this.maybeParseAndSkipAnnotation():this.parseMainProgramFragment();e==this.pos&&(this.pushError(v.unexpectedToken(""+this.cct.value),"warning"),this.nextToken())}}parseMethodDeclarationInMainProgram(e){this.isInsideMainMethod=!0,this.isCodeOutsideClassdeclarations=!0;let i=this.nodeFactory.buildNodeWithModifiers(this.cct.range);i.isStatic=!0,i.visibility=e|m.keywordPublic,this.parseFieldOrMethodDeclaration(this.module.mainClass,i,void 0),this.maybeParseAndSkipAnnotation(),this.isCodeOutsideClassdeclarations=!1,this.isInsideMainMethod=!1}parseMainProgramFragment(){for(this.isInsideMainMethod=!0,this.isCodeOutsideClassdeclarations=!0;!this.isEnd()&&bi.visibilityModifiersOrTopLevelTypeDeclaration.indexOf(this.tt)<0&&this.tt!=m.at;){let e=this.pos,i=this.parseStatementOrExpression();i&&this.mainMethodStatements.push(i),e==this.pos&&this.nextToken()}this.maybeParseAndSkipAnnotation(),this.isCodeOutsideClassdeclarations=!1,this.isInsideMainMethod=!1}parseClassOrInterfaceOrEnum(e,i,n){var l;let s=i||((l=this.cct.commentBefore)==null?void 0:l.value);n==null&&(n=this.parseModifiers());let a=this.tt;if(this.expect(bi.classOrInterfaceOrEnum,!0)){let h=this.expectAndSkipIdentifierAsToken(),c=this.currentClassOrInterface;if(h.value!="")switch(a){case m.keywordClass:this.parseClassDeclaration(n,h,e,this.collectedAnnotations,s);break;case m.keywordEnum:this.parseEnumDeclaration(n,h,e,s);break;case m.keywordInterface:this.parseInterfaceDeclaration(n,h,e,s);break}for(this.currentClassOrInterface=c;this.comesToken(m.semicolon,!0););}}parseClassDeclaration(e,i,n,s,a){let l=this.nodeFactory.buildClassNode(e,i,n,this.collectedAnnotations,this.javaCompiledModule);for(l.documentation=a,this.currentClassOrInterface=l,l.genericParameterDeclarations=this.parseGenericParameterDefinition();this.comesToken([m.keywordExtends,m.keywordImplements],!1);)switch(this.tt){case m.keywordImplements:this.nextToken(),this.parseImplements(l);break;case m.keywordExtends:this.parseExtends(l);break}this.parseClassBody(l)}parseClassBody(e){var i;if(this.expect(m.leftCurlyBracket,!0)){let n;for(;!this.comesToken([m.rightCurlyBracket,m.endofSourcecode],!1);){n=(i=this.cct.commentBefore)==null?void 0:i.value;let s=this.parseModifiers();switch(this.tt){case m.identifier:case m.keywordVoid:case m.lower:this.parseFieldOrMethodDeclaration(e,s,n),n=void 0;break;case m.keywordClass:case m.keywordEnum:case m.keywordInterface:this.parseClassOrInterfaceOrEnum(e,n,s),n=void 0;break;case m.at:this.maybeParseAndSkipAnnotation();break;case m.leftCurlyBracket:this.parseInstanceInitializer(e),n=void 0;break;case m.keywordStatic:this.parseStaticInitializer(e),n=void 0;break;default:this.pushErrorAndSkipToken()}}this.expect(m.rightCurlyBracket,!0)}this.setEndOfRange(e)}parseInstanceInitializer(e){let i=this.nodeFactory.buildInstanceInitializerNode(this.cct);for(this.nextToken();!this.isEnd()&&this.tt!=m.rightCurlyBracket;){let n=this.parseStatementOrExpression();n&&i.statements.push(n)}this.expect(m.rightCurlyBracket,!0),e.fieldsOrInstanceInitializers.push(i)}parseStaticInitializer(e){let i=this.nodeFactory.buildStaticInitializerNode(this.cct);for(this.nextToken();!this.isEnd()&&this.tt!=m.rightCurlyBracket;){let n=this.parseStatementOrExpression();n&&i.statements.push(n)}this.expect(m.rightCurlyBracket,!0),e.fieldsOrInstanceInitializers.push(i)}parseFieldOrMethodDeclaration(e,i,n){if(this.comesIdentifier(e.identifier)&&this.lookahead(1).tt==m.leftBracket)this.parseMethodDeclaration(e,i,!0,void 0,[],n);else{let s=this.parseGenericParameterDefinition();if(this.lookahead(1).tt==m.leftBracket){let l=this.cct.value+"";this.pushError(v.methodDeclarationWithoutReturnType(l)),this.comesToken(m.identifier,!1)?this.parseMethodDeclaration(e,i,!1,this.nodeFactory.buildVoidTypeNode(this.cct.range),[],n):this.nextToken();return}let a=this.parseType(!1);if(this.lookahead(1).tt==m.leftBracket)this.parseMethodDeclaration(e,i,!1,a,s,n);else{s.length>0&&this.pushError(v.fieldDefinitionDoesntStartWithGenericParamter(),"error",s[0].range),a!=null&&a.kind==m.baseType&&a.identifiers[0].identifier=="String"&&(a.identifiers[0].identifier="string");let l=this.module.errors.length;do this.parseFieldDeclaration(e,i,a,n);while(this.comesToken(m.comma,!0));this.expectSemicolon(!0,this.module.errors.length==l)}}}parseMethodDeclaration(e,i,n,s,a,l){let h=i.range,c=this.expectAndSkipIdentifierAsToken(),u=this.nodeFactory.buildMethodNode(s,n,i,c,h,this.collectedAnnotations,e);if(u.documentation=l,this.currentMethod=u,s&&(s.parentTypeScope=u),u.genericParameterDeclarations=a,e.methods.push(u),this.expect(m.leftBracket,!0)){if(this.comesToken([m.identifier,m.keywordFinal],!1))do this.parseParameter(u,!1);while(this.comesToken(m.comma,!0));this.expect(m.rightBracket,!0)}if(this.firstStatementInsideMethodBodyNotYetCompiled=!0,this.comesToken(m.leftCurlyBracket,!1)){let g=this.parseStatementOrExpression();u.statement=g}else!u.isAbstract&&e.kind!=m.keywordInterface?(this.comesToken(m.semicolon,!1)&&this.pushError(v.noSemicolonAsMethodBody()),u.statement=this.nodeFactory.buildBlockNode(this.cct),this.pushError(v.methodNeedsMethodBody(u.identifier),"error",this.cct.range)):(e.kind==m.keywordClass&&!e.isAbstract&&(this.setEndOfRange(u),this.pushError(v.abstractMethodOnlyInAbstractClass(),"error",u.range)),this.expectSemicolon(!0,!0));this.currentMethod=void 0,this.setEndOfRange(u)}parseParameter(e,i){let n=this.cct.range,s=this.comesToken(m.keywordFinal,!0),a=this.parseType(i),l=this.comesToken(m.ellipsis,!0),h=this.expectAndSkipIdentifierAsToken();if(a!=null&&h.value!=""){let c=this.nodeFactory.buildParameterNode(n,h,a,l,s);this.setEndOfRange(c),e.parameters.push(c)}}parseFieldDeclaration(e,i,n,s){let a=this.cct.range,l=this.expectAndSkipIdentifierAsToken();n=this.increaseArrayDimensionIfLeftRightSquareBracketsToCome(n);let h=this.comesToken(m.assignment,!0)?this.parseTerm():void 0;if(l.value!=""&&n!=null){let c=this.nodeFactory.buildFieldDeclarationNode(a,l,n,h,i,this.collectedAnnotations);c.documentation=s,e.fieldsOrInstanceInitializers.push(c),this.setEndOfRange(c)}}parseModifiers(){let e=[],i,n=this.nodeFactory.buildNodeWithModifiers(this.cct.range);do{switch(i=!0,this.tt){case m.keywordPrivate:case m.keywordProtected:case m.keywordPublic:e.push(this.cct),n.visibility=this.tt;break;case m.keywordStatic:n.isStatic=!0;break;case m.keywordFinal:n.isFinal=!0;break;case m.keywordAbstract:n.isAbstract=!0;break;case m.keywordDefault:n.isDefault=!0;break;case m.keywordSynchronized:n.isSynchronized=!0;break;default:i=!1}i&&this.nextToken()}while(i);return e.length>1&&this.pushError(v.multipleVisibilityModifiers(e.map(s=>s.value).join(", ")),"warning",ee.lift(e[0].range).plusRange(e.pop().range)),n}parseEnumDeclaration(e,i,n,s){var l,h;let a=this.nodeFactory.buildEnumNode(e,i,n,this.collectedAnnotations,this.javaCompiledModule);if(a.documentation=s,this.expect(m.leftCurlyBracket,!0)){do{let c=this.parseEnumValue((l=this.cct.commentBefore)==null?void 0:l.value);c&&a.valueNodes.push(c)}while(this.comesToken(m.comma,!0));for(this.comesToken(m.semicolon,!0);!this.comesToken([m.rightCurlyBracket,m.endofSourcecode],!1);){(h=this.cct.commentBefore)==null||h.value;let c=this.parseModifiers();switch(this.tt){case m.keywordClass:case m.keywordEnum:case m.keywordInterface:this.parseClassOrInterfaceOrEnum(a,s,c),s=void 0;break;case m.identifier:case m.keywordVoid:case m.lower:this.parseFieldOrMethodDeclaration(a,c,s),s=void 0;break;case m.at:this.maybeParseAndSkipAnnotation();break;case m.leftCurlyBracket:this.parseInstanceInitializer(a),s=void 0;break;case m.keywordStatic:this.parseStaticInitializer(a),s=void 0;break;default:this.pushErrorAndSkipToken()}}this.expect(m.rightCurlyBracket,!0)}this.setEndOfRange(a)}parseEnumValue(e){let i=this.expectAndSkipIdentifierAsToken();if(!i)return;let n=this.nodeFactory.buildEnumValueNode(i);if(this.comesToken(m.leftBracket,!0)){if(!this.comesToken(m.rightBracket,!1))do{let s=this.parseTerm();s&&n.parameterValues.push(s)}while(this.comesToken(m.comma,!0));this.expect(m.rightBracket,!0)}return n}parseInterfaceDeclaration(e,i,n,s){var l;let a=this.nodeFactory.buildInterfaceNode(e,i,n,this.collectedAnnotations,this.javaCompiledModule);if(a.documentation=s,this.currentClassOrInterface=a,a.genericParameterDeclarations=this.parseGenericParameterDefinition(),this.comesToken(m.keywordExtends,!0)&&this.parseImplements(a),this.expect(m.leftCurlyBracket,!0)){let h;for(;!this.comesToken([m.rightCurlyBracket,m.endofSourcecode],!1);){h=(l=this.cct.commentBefore)==null?void 0:l.value;let c=this.parseModifiers();switch(this.tt){case m.keywordClass:case m.keywordEnum:case m.keywordInterface:this.parseClassOrInterfaceOrEnum(a,h,c),h=void 0;break;case m.identifier:case m.keywordVoid:case m.lower:this.parseFieldOrMethodDeclaration(a,c,h),h=void 0;break;case m.at:this.maybeParseAndSkipAnnotation();break;default:this.pushErrorAndSkipToken()}}this.expect(m.rightCurlyBracket,!0)}this.setEndOfRange(a)}parseImplements(e){do{let i=this.parseType(!1);i?e.implements.push(i):this.pushError(v.typeExpected(this.cct.value+""))}while(this.comesToken(m.comma,!0))}parseExtends(e){this.nextToken();let i=this.parseType(!1);i?e.extends=i:this.pushError(v.typeExpected(this.cct.value+""))}parseGenericParameterDefinition(){let e=[];if(this.comesToken(m.lower,!0)){do{let i=this.expectAndSkipIdentifierAsToken();if(i.value!=""){let n={kind:m.genericParameterDefinition,range:i.range,identifier:i.value,identifierRange:i.range};if(e.push(n),this.comesToken(m.keywordExtends,!0)){n.extends=[];do{let s=this.parseType(!1);s!=null&&n.extends.push(s)}while(this.comesToken(m.ampersand,!0))}else if(this.comesToken(m.keywordSuper,!0)){let s=this.parseType(!1);s!=null&&(n.super=s)}this.setEndOfRange(n)}}while(this.comesToken(m.comma,!0));this.comesToken(m.shiftRight,!1)&&this.exchangeShiftRightForTwoClosingGreater(),this.expect(m.greater,!0)}return e}maybeParseAndSkipAnnotation(){if(this.comesToken(m.at,!0)){let e=this.expectAndSkipIdentifierAsToken();if(e)return this.collectedAnnotations.push(this.nodeFactory.buildAnnotationNode(e)),e}}parseAnonymousInnerClassBody(e){let i=this.currentClassOrInterface||this.javaCompiledModule.ast,n=this.nodeFactory.buildClassNode(this.nodeFactory.buildNodeWithModifiers(this.cct.range),void 0,i,[],this.javaCompiledModule);if(n.identifierRange=e.range,n.range=e.range,n.isAnonymousInnerType=!0,this.parseClassBody(n),n.extends=e.type,e&&n)return this.nodeFactory.buildAnonymousInnerClassNode(e,n)}};r(bi,"forwardToInsideClass",[m.keywordPublic,m.keywordPrivate,m.keywordProtected,m.keywordVoid,m.identifier,m.rightCurlyBracket,m.keywordStatic,m.keywordAbstract,m.keywordClass,m.keywordEnum,m.keywordInterface]),r(bi,"visibilityModifiers",[m.keywordPrivate,m.keywordProtected,m.keywordPublic]),r(bi,"classOrInterfaceOrEnum",[m.keywordClass,m.keywordEnum,m.keywordInterface]),r(bi,"visibilityModifiersOrTopLevelTypeDeclaration",bi.visibilityModifiers.concat(bi.classOrInterfaceOrEnum).concat([m.keywordAbstract])),r(bi,"mainClassCounter",0);let Id=bi;class ng{}var Ya,kl,Js,Za,ea,ta,Xa,Ud,Qd,Ja,Yd,rg;class dy{constructor(){Z(this,Yd);Z(this,Ya,!1);Z(this,kl,0);Z(this,Js,0);Z(this,Za,0);Z(this,ea,!1);Z(this,ta,"");Z(this,Xa,!1);Z(this,Ud,30);Z(this,Qd);Z(this,Ja,!1)}get isInsideCompilationRun(){return j(this,Xa)}initBeforeCompiling(){J(this,kl,J(this,Js,performance.now())),J(this,ea,!1),J(this,Za,0),j(this,Ja)&&J(this,Js,j(this,Js)+1e6),J(this,Ja,!1),J(this,ta,"---"),J(this,Xa,!0)}afterCompiling(t){J(this,Xa,!1);const e=performance.now()-j(this,kl);if(j(this,Ya)&&j(this,ta)!="---"){const i=t?" with Exception ":"";console.log("Compiled modules ["+j(this,ta)+"]"+i+"; Compilation run took "+Math.round(e)+" ms and was "+j(this,Za)+" times interrupted.")}}async interruptIfNeeded(){if(performance.now()-j(this,Js)>=j(this,Ud)&&(j(this,Ya)&&console.log("Compiler was interrupted by CompilingProgressManger."),El(this,Za)._++,await ne(this,Yd,rg).call(this,j(this,Qd)),J(this,Js,performance.now()),j(this,ea)))throw new ng}interruptCompilerIfRunning(t){j(this,Ya)&&console.log("Request to interrupt compiler by JavaCompletionItemProvider"),J(this,ea,!0),J(this,Ja,t)}restartNecessary(){return j(this,ea)}setNewOrDirtyModules(t){J(this,ta,t)}}Ya=new WeakMap,kl=new WeakMap,Js=new WeakMap,Za=new WeakMap,ea=new WeakMap,ta=new WeakMap,Xa=new WeakMap,Ud=new WeakMap,Qd=new WeakMap,Ja=new WeakMap,Yd=new WeakSet,rg=async function(t){return new Promise(e=>setTimeout(e,t))};class xh extends dm{constructor(t,e,i,n){super({startLineNumber:e.identifierRange.startLineNumber,startColumn:0,endLineNumber:e.identifierRange.endLineNumber,endColumn:e.identifierRange.endColumn}),this.fieldNode=t,this.field=e,this.lineToInsert=i,this.type=n}provideCodeAction(t){var h,c;if(!((h=this.field)!=null&&h.type))return;let e=this.field.identifier[0].toLocaleUpperCase()+this.field.identifier.substring(1),i="",n="",s=` public ${this.field.type.toString()} get${e}(){ return ${this.field.identifier}; } `,a=` public void set${e}(${this.field.type.toString()} ${this.field.identifier}){ this.${this.field.identifier} = ${this.field.identifier}; } `;switch(this.type){case"getter":i="Getter-Methode für "+this.field.identifier+" ergänzen",n=s;break;case"setter":i="Setter-Methode für "+this.field.identifier+" ergänzen",n=a;break;case"both":i="Getter- und Setter-Methode für "+this.field.identifier+" ergänzen",n=s+a;break}let l=[{resource:t.uri,textEdit:{range:{startLineNumber:this.lineToInsert,startColumn:0,endLineNumber:this.lineToInsert,endColumn:0},text:n},versionId:t.getVersionId()}];if(this.field.visibility==m.keywordPublic){let u=(c=this.fieldNode.type)==null?void 0:c.range;u&&l.push({resource:t.uri,textEdit:{range:{startLineNumber:u.startLineNumber,startColumn:u.startColumn,endLineNumber:this.field.identifierRange.startLineNumber,endColumn:u.startColumn},text:"private "},versionId:t.getVersionId()})}return{title:i,diagnostics:[],kind:"quickfix",edit:{edits:l}}}}class bm{static start(t){if(t.ast)for(let e of t.ast.innerTypes.filter(i=>i.kind==m.keywordClass&&!i.isMainClass)){if(e=e,!e.resolvedType)continue;let n=new Map;e.methods.forEach(s=>n.set(s.identifier,s)),bm.generateQuickfixesForField(e,n)}}static generateQuickfixesForField(t,e){if(t.fieldsOrInstanceInitializers.length==0)return;let i=t.fieldsOrInstanceInitializers[t.fieldsOrInstanceInitializers.length-1].range.endLineNumber+1,n=e.get(t.identifier);n&&(i=Math.max(i,n.range.endLineNumber+1));for(let s of t.fieldsOrInstanceInitializers.filter(a=>a.kind==m.fieldDeclaration)){let a=s.resolvedField;if(!a||a.identifier=="class")continue;let l=a.identifier[0].toLocaleUpperCase()+a.identifier.substring(1),h=!e.get("get"+l),c=!e.get("set"+l);h&&t.module.quickfixes.push(new xh(s,a,i,"getter")),c&&t.module.quickfixes.push(new xh(s,a,i,"setter")),h&&c&&t.module.quickfixes.push(new xh(s,a,i,"both"))}}}class hy{static start(t,e){var s,a;if(!e||!e.getSettings().getValue("editor.autoSemicolons")||t.errors.length>5)return;let i=(a=(s=e.getMainEditor())==null?void 0:s.getPosition())==null?void 0:a.lineNumber;if(typeof i>"u")return;let n=t.errors.filter(l=>l.message==v.insertSemicolonHere());for(let l of n)t.file instanceof Ge&&Math.abs(l.range.startLineNumber-i)>0&&t.file.getMonacoModel().applyEdits([{range:{startLineNumber:l.range.startLineNumber,startColumn:l.range.startColumn,endLineNumber:l.range.startLineNumber,endColumn:l.range.startColumn},text:";",forceMoveMarkers:!0}])}}const cy=800;var Cl,hs,ia,Wt,eo,Zd,sg;class uy{constructor(t,e){Z(this,Zd);r(this,"moduleManager");r(this,"libraryModuleManager");Z(this,Cl,[]);Z(this,hs);Z(this,ia,[]);r(this,"eventManager",new xp);Z(this,Wt,new dy);Z(this,eo);r(this,"lastTimeCompilationStarted",0);this.main=t,this.errorMarker=e,this.libraryModuleManager=new Km,this.moduleManager=new oh}setAdditionalModules(...t){this.libraryModuleManager=new Km(...t)}getType(t){return this.libraryModuleManager.typestore.getType(t)}setFiles(t){J(this,ia,t),this.moduleManager.setupModulesBeforeCompiliation(j(this,ia))}async compileIfDirty(t=!1){var h,c;if(this.main){if(this.main.getInterpreter().isRunningOrPaused())return;const u=(h=this.main)==null?void 0:h.getCurrentWorkspace();if(!u)return;this.moduleManager.workspace=u,J(this,ia,u.getFiles().filter(g=>Ai.filenameToFileType(g.name).language=="myJava"&&!g.isFolder))}this.moduleManager.setupModulesBeforeCompiliation(j(this,ia));let e=this.moduleManager.getNewOrDirtyModules();if(e.length==0)return j(this,hs);if(this.moduleManager.iterativelySetDirtyFlags(),e=this.moduleManager.getNewOrDirtyModules(),j(this,Wt).setNewOrDirtyModules(e.map(u=>u.file.name).join(", ")),e.length==0)return j(this,hs);J(this,Cl,[]),this.moduleManager.emptyTypeStore(),_e.resetCount(),this.moduleManager.getUnChangedModules().forEach(u=>u.registerTypesAtTypestore(this.moduleManager.typestore));for(const u of e){u.resetBeforeCompilation();const g=new co().lex(u.file.getText());u.storeLexerOutput(g),await j(this,Wt).interruptIfNeeded(),new Id(u).parse(),await j(this,Wt).interruptIfNeeded()}const n=new Wh(this.moduleManager,this.libraryModuleManager),s=new ju(this.libraryModuleManager.typestore,this.moduleManager.typestore);if(n.resolve()){for(const u of e)await new Gm(u,this.libraryModuleManager.typestore,this.moduleManager.typestore,s,j(this,Wt),(c=this.main)==null?void 0:c.getSettings()).start(),await j(this,Wt).interruptIfNeeded();if(t)return;for(const u of e)u.setDirty(!1)}await j(this,Wt).interruptIfNeeded();const a={};this.libraryModuleManager.typestore.populateClassObjectRegistry(a),this.moduleManager.typestore.populateClassObjectRegistry(a),this.moduleManager.setDependsOnModuleWithErrorsFlag();const l=new Wp(a,this.moduleManager,this.libraryModuleManager,j(this,Cl),s);return J(this,hs,l),this.eventManager.fire("compilationFinishedWithNewExecutable",j(this,hs)),setTimeout(()=>{var u;for(const g of j(this,hs).moduleManager.modules)(u=this.errorMarker)==null||u.markErrorsOfModule(g),this.main.getSettings().getValue("editor.quickFix.getterAndSetter")=="offer"&&bm.start(g),hy.start(g,this.main)},10),l}async updateSingleModuleForCodeCompletion(t){var h;if(!t)return"completeCompilingNecessary";if(!t.isDirty())return"success";const e=this.moduleManager.copy(t);t.compiledSymbolsUsageTracker.clear(),t.systemSymbolsUsageTracker.clear(),t.resetBeforeCompilation();const i=new co().lex(t.file.getText());if(t.storeLexerOutput(i),new Id(t).parse(),!new Wh(e,this.libraryModuleManager).resolve())return"completeCompilingNecessary";const a=new ju(this.libraryModuleManager.typestore,this.moduleManager.typestore);return await new Gm(t,this.libraryModuleManager.typestore,this.moduleManager.typestore,a,j(this,Wt),(h=this.main)==null?void 0:h.getSettings()).start(),t.setDirty(!0),"success"}triggerCompile(){j(this,eo)&&clearTimeout(j(this,eo));let t=cy-(performance.now()-this.lastTimeCompilationStarted);t<0&&(t=0),J(this,eo,window.setTimeout(async()=>{do try{this.lastTimeCompilationStarted=performance.now(),j(this,Wt).initBeforeCompiling(),await this.compileIfDirty(),j(this,Wt).afterCompiling(),this.eventManager.fire("compilationFinished")}catch(e){if(console.log(e),j(this,Wt).afterCompiling(e.toString()),!(e instanceof ng))break}while(j(this,Wt).restartNecessary())},t))}findModuleByFile(t){return this.moduleManager.findModuleByFile(t)}getAllModules(){return this.moduleManager.modules}forceRecompilation(){this.moduleManager.modules.forEach(t=>t.setDirty(!0)),this.triggerCompile()}setFileDirty(t){const e=this.findModuleByFile(t);e==null||e.setDirty(!0)}getSortedAndFilteredErrors(t){const e=this.findModuleByFile(t);if(!e)return[];const i=e.errors.slice();i.sort((n,s)=>ee.compareRangesUsingStarts(n.range,s.range));for(let n=0;na.range.startColumn&&(ne(this,Zd,sg).call(this,s.level,a.level)==1?i.splice(n+1,1):i.splice(n,1),n--)}return i}async interruptAndStartOverAgain(t){j(this,Wt).isInsideCompilationRun&&j(this,Wt).interruptCompilerIfRunning(!1),j(this,Wt).initBeforeCompiling();try{await this.compileIfDirty(t)}catch{}j(this,Wt).afterCompiling()}async waitTillCompilationFinished(){return new Promise(t=>{this.eventManager.on("compilationFinished",t)})}}Cl=new WeakMap,hs=new WeakMap,ia=new WeakMap,Wt=new WeakMap,eo=new WeakMap,Zd=new WeakSet,sg=function(t,e){return t=="error"?1:e=="error"?-1:t=="warning"?1:e=="warning"?-1:1};function my(p,t){return t==null?m.keywordPublic:(p instanceof Nt&&(p=p.nonPrimitiveType),t instanceof Nt&&(t=t.nonPrimitiveType),p instanceof Xt&&(p=p.isGenericVariantOf),t instanceof Xt&&(t=t.isGenericVariantOf),p==t?m.keywordPrivate:t instanceof je&&t.hasAncestorOrIs(p)?m.keywordProtected:m.keywordPublic)}class ae{}r(ae,"accessToFieldOrMethodOfThisClass",()=>d({de:"Zugriff auf Attribut oder Methode dieser Klasse",en:"Acces to a field or a method of this class"})),r(ae,"useSuperToCallBaseClassMethod",()=>d({de:"Benutze das Schlüsselwort 'super' um eine Methode der Oberklasse aufzurufen.",en:"Use keyword 'super' to call a base class method."})),r(ae,"definitionOfClass",t=>d({de:`Definition der Klasse ${t}`,en:`definition of class ${t}`})),r(ae,"numberOfElementsInThisArray",()=>d({de:"Anzahl der Elemente in diesem Array",en:"number of elements in this array"})),r(ae,"countingForLoop",()=>d({de:"Zählende for-loop",en:"counting for-loop"})),r(ae,"switchStatement",()=>d({de:"switch-Anweisung",en:"switch statement"})),r(ae,"ifClause",()=>d({de:"Bedingung (if-clause)",en:"if clause"})),r(ae,"doubleSidedIfClause",()=>d({de:"Zweiseitige Bedingung (if-else-clause)",en:"if-else clause"})),r(ae,"printStatement",()=>d({de:`Ausgabe (ggf. mit Farbe als zweitem Parameter)`,en:"print statement (with color as optional second parameter)"})),r(ae,"printlnStatement",()=>d({de:`Ausgabe (ggf. mit Farbe als zweitem Parameter) gefolgt von einem Zeilenumbruch`,en:"print statement (with color as optional second parameter) followed by line break"})),r(ae,"assertEquals",()=>d({de:"Gibt in automatisierten Tests den Fehler (message) aus, wenn expected != actual.",en:"Used in automated tests. Prints error message if expected != actual."})),r(ae,"assertTrue",()=>d({de:"Gibt in automatisierten Tests den Fehler (message) aus, wenn condition != true.",en:"Used in automated tests. Prints error message if condition != true."})),r(ae,"assertFalse",()=>d({de:"Gibt in automatisierten Tests den Fehler (message) aus, wenn condition != false.",en:"Used in automated tests. Prints error message if condition != false."})),r(ae,"assertCodeReached",()=>d({de:"Gibt in automatisierten Tests den Fehler (message) aus, wenn die Codeausführung nach Programmende nie an diesem Punkt angelangt war.",en:"Used in automated tests. Prints error message after program ended if program hadn't reach this point."})),r(ae,"fail",()=>d({de:"Gibt in automatisierten Tests den Fehler (message) aus. Stellen Sie diese Methode an eine Stelle des Programms, die nie erreicht werden darf.",en:"Used in automated tests. Prints error message. Use this method in places that mustn't be reached."})),r(ae,"identifier",()=>d({de:"Bezeichner",en:"identifier"})),r(ae,"classDefinition",()=>d({de:"Definition einer Klasse",en:"class definition"})),r(ae,"parameter",()=>d({de:"Parameter",en:"parameter"})),r(ae,"methodDefinition",()=>d({de:"Definition einer Methode",en:"method definition"})),r(ae,"implementOverrideMethod",(t,e)=>d({de:(t?"Implementiere ":"Überschreibe ")+"die Methode",en:(t?"implement ":"override ")+"method"}));class py extends or{constructor(e){super(e);r(this,"isConsole",!1);r(this,"triggerCharacters"," .abcdefghijklmnopqrstuvwxyzäöüß_ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ@".split(""));r(this,"first",!0);this.language=e,O.registerCompletionItemProvider(e.monacoLanguageSelector,this)}async provideCompletionItems(e,i,n,s){var W,te,Y,ct,Mt;let a=this.findMainForModel(e);if(!a)return;let l,h=(W=a.getBottomDiv())==null?void 0:W.console;if(((te=h==null?void 0:h.editor)==null?void 0:te.getModel())==e?(h.compile(),l=a.getRepl().getCurrentModule()):(l=(Y=a.getCurrentWorkspace())==null?void 0:Y.getModuleForMonacoModel(e),l!=null&&l.isMoreThanOneVersionAheadOfLastCompilation()&&(await a.getCompiler().interruptAndStartOverAgain(!0),l=(ct=a.getCurrentWorkspace())==null?void 0:ct.getModuleForMonacoModel(e))),l==null)return null;let c=l.findSymbolTableAtPosition(i),u=c==null?void 0:c.classContext,g=ee.fromPositions(i);if(this.isStringLiteral(l,i))return null;let f=e.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:i.lineNumber,endColumn:i.column}),b=e.getValueInRange({startLineNumber:i.lineNumber,startColumn:i.column,endLineNumber:i.lineNumber+5,endColumn:1}),A=f.match(/.*(new )([\wöäüÖÄÜß]*)$/);if(A!=null){let _n=g;return((Mt=A[2])==null?void 0:Mt.length)>0&&(_n={startLineNumber:i.lineNumber,startColumn:i.column-A[2].length,endLineNumber:i.lineNumber,endColumn:i.column}),this.getCompletionItemsAfterNew(a,u instanceof xe?u:void 0,_n)}if(n.triggerCharacter==" "){if(f.match(/.*(class )[\wöäüÖÄÜß<> ,]*[\wöäüÖÄÜß<> ] $/)!=null){let ua=f.lastIndexOf("class"),Cs=0,Cm=0;for(let lh=ua;lh":Cm++;break}return this.getCompletionItemsAfterClass(l,Cs>Cm,b,g)}return null}let S=b.match(/^([\wöäüÖÄÜß]*\(?)/),w="";S!=null&&S.length>0&&(w=S[0]);let C=w.endsWith("("),q=f.match(/.*(\.)([\wöäüÖÄÜß]*)$/);if(q!=null)return c=l.findSymbolTableAtPosition(i),u=c==null?void 0:c.classContext,this.getCompletionItemsAfterDot(q,i,l,a,w,u,C);let I=f.match(/.*[^\wöäüÖÄÜß]([\wöäüÖÄÜß]*)$/);if(I==null&&(I=f.match(/^([\wöäüÖÄÜß]*)$/)),I!=null){let _n=e.getLineContent(i.lineNumber);return this.getCompletionItemsInsideIdentifier(a,I,_n,i,l,w,u,C,c)}}isStringLiteral(e,i){let n=e.tokens;if(n==null||n.length==0)return!1;let s=0,a=n.length-1,l=0,h=1e3;for(;;){let c=l;if(l=Math.round((a+s)/2),c==l||(h--,h==0))return!1;let u=n[l],g=u.range;if(i.lineNumber>g.endLineNumber||i.lineNumber==g.endLineNumber&&i.column>g.endColumn){s=l;continue}if(i.lineNumber(q.sortText="aaa"+q.label,q))));let A=e.getCompiler();b=b.concat(A.libraryModuleManager.getTypeCompletionItems(f)),b=b.concat(A.moduleManager.getTypeCompletionItems(a,f,h));let S=u==null?void 0:u.methodContext;if(S!=null&&(S.isMainMethod()&&(b=b.filter(q=>q.filterText!="args")),b=b.concat(this.getAssertMethods(S,f)),h!=null)){let q=h.getCompletionItems(m.keywordPrivate,c,l,f,u.methodContext).map(I=>(I.sortText="aa"+I.label,I)).filter(I=>b.findIndex(W=>W.insertText==I.insertText)<0);b=b.concat(q),b.push({label:"this",filterText:"this",insertText:"this.",detail:ae.accessToFieldOrMethodOfThisClass(),insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:f,command:{id:"editor.action.triggerSuggest",title:"123",arguments:[]}}),u.methodContext.isStatic||b.push({label:"super",filterText:"super",insertText:"super.",detail:ae.useSuperToCallBaseClassMethod(),insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:f,command:{id:"editor.action.triggerSuggest",title:"123",arguments:[]}})}return b=b.concat(this.getKeywordCompletion(u,f,a)),b=this.deleteDoublesWithIdenticalInsertText(b),this.upvoteItemsWithSameFirstCharacterCasing(b,g),(u==null?void 0:u.methodContext)!=null&&(b=b.filter(q=>q.label!=="void")),b=b.filter(q=>q.label!="string"),Promise.resolve({suggestions:b})}getAnnotationCompletionItems(e,i,n){let s=[],a=n.startLineNumber;return e.ast.innerTypes.find(h=>h.range.startLineNumber==a+1&&h.kind==m.keywordClass)?Ah.filter(h=>h.beforeClass).forEach(h=>{s.push({label:"@"+h.identifier,filterText:h.identifier,insertText:h.identifier+` `,detail:h.description,kind:O.CompletionItemKind.Issue,range:n,sortText:"aaa"+h.identifier})}):i.methodContext==null&&i.classContext!=null&&i.classContext instanceof Gt?i.classContext.methods.find(c=>c.identifierRange.startLineNumber==a+1)&&Ah.filter(c=>c.beforeMethod).forEach(c=>{s.push({label:"@"+c.identifier,filterText:c.identifier,insertText:c.identifier+` `,detail:c.description,kind:O.CompletionItemKind.Issue,range:n,sortText:"aaa"+c.identifier})}):i.methodContext!=null&&i.methodContext.isMainMethod()&&i.classContext!=null&&i.classContext.isMainClass&&i.classContext.nonPrimitiveType.methods.find(u=>u.identifierRange.startLineNumber==a+1)&&Ah.filter(u=>u.beforeMethodOfMainClass).forEach(u=>{s.push({label:"@"+u.identifier,filterText:u.identifier,insertText:u.identifier+` `,detail:u.description,kind:O.CompletionItemKind.Issue,range:n,sortText:"aaa"+u.identifier})}),s}getGetter(e,i,n){return i={startLineNumber:i.startLineNumber,startColumn:0,endLineNumber:i.endLineNumber,endColumn:i.endColumn},e.fields.filter(a=>typeof e.getOwnMethods().find(l=>l.identifier==n+a.identifier)>"u"&&a.identifier!="class"&&a.type).map(a=>{let l=`${a.type.toString()} ${n+this.firstCharacterToUpperCase(a.identifier)}()`;return{kind:O.CompletionItemKind.Method,insertText:` ${l}{ return ${a.identifier}; } `,label:`${l}`,detail:"-> Getter-Methode ergänzen",range:i,documentation:`${l}{ return ${a.identifier}; } `,filterText:`${n+this.firstCharacterToUpperCase(a.identifier)}()`}})}getSetter(e,i,n){return i={startLineNumber:i.startLineNumber,startColumn:0,endLineNumber:i.endLineNumber,endColumn:i.endColumn},e.fields.filter(a=>typeof e.getOwnMethods().find(l=>l.identifier==n+a.identifier)>"u"&&a.identifier!="class"&&a.type).map(a=>{let l=`void ${n+this.firstCharacterToUpperCase(a.identifier)}(${a.type.toString()} ${a.identifier})`;return{kind:O.CompletionItemKind.Method,insertText:` ${l}{ this.${a.identifier} = ${a.identifier}; } `,label:`${l}`,detail:"-> Setter-Methode ergänzen",range:i,documentation:`${l}{ return ${a.identifier}; } `,filterText:`${n+this.firstCharacterToUpperCase(a.identifier)}()`}})}deleteDoublesWithIdenticalInsertText(e){let i=new Set;return e=e.filter(n=>{let s=n.insertText;return i.has(s)?!1:(i.add(s),!0)}),e}getCompletionItemsAfterDot(e,i,n,s,a,l,h){let c=e[2],u=i.column-c.length-1,g=n.getTypeAtPosition(i.lineNumber,u),f={startLineNumber:i.lineNumber,startColumn:i.column-c.length,endLineNumber:i.lineNumber,endColumn:i.column+a.length};if(g instanceof Gt||g instanceof Nt||g instanceof ui){let b=my(g,l);return Promise.resolve({suggestions:this.deleteDoublesWithIdenticalInsertText(g.getCompletionItems(b,h,a,f,void 0))})}if(g instanceof vi||g instanceof it){let b=g.getCompletionItems(m.keywordPublic,h,a,f,void 0),A=s.getInterpreter().scheduler.classObjectRegistry.Object.type;return b=b.concat(A.getCompletionItems(m.keywordPublic,h,a,f,void 0)),b=this.deleteDoublesWithIdenticalInsertText(b),Promise.resolve({suggestions:b})}return g instanceof ke?Promise.resolve({suggestions:[{label:"length",filterText:"length",kind:O.CompletionItemKind.Field,insertText:"length",range:f,documentation:{value:ae.numberOfElementsInThisArray()}}]}):null}getAssertMethods(e,i){if(e.annotations.find(s=>s.identifier=="Test")==null)return[];let n=[];return n=n.concat([{label:"assertEquals(expected, actual, message)",insertText:`assertEquals($1, $2, $3); $0`,detail:ae.assertEquals(),insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Method,range:i,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]}},{label:"assertCodeReached(message)",insertText:`assertCodeReached($1); $0`,detail:ae.assertCodeReached(),insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Method,range:i,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]}},{label:"assertTrue(value, message)",insertText:`assertTrue($1, $2); $0`,detail:ae.assertTrue(),insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Method,range:i,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]}},{label:"assertFalse(value, message)",insertText:`assertFalse($1, $2); $0`,detail:ae.assertFalse(),insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Method,range:i,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]}},{label:"fail(message)",insertText:`fail($1); $0`,detail:ae.fail(),insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Method,range:i,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]}}]),n}getKeywordCompletion(e,i,n){var a;let s=[];if(!this.isConsole&&((e==null?void 0:e.classContext)==null||(e==null?void 0:e.methodContext)!=null)&&(s=s.concat([{label:"while(Bedingung){Anweisungen}",detail:"while-loop",filterText:"while",insertText:`while($1){ $0 }`,command:{id:"editor.action.triggerSuggest",title:"123",arguments:[]},insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"for(){}",insertText:`for( $1 ; $2 ; $3 ){ $0 }`,detail:"for-loop",filterText:"for",insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"for(int i = 0; i < 10; i++){}",insertText:"for(int ${1:i} = 0; ${1:i} < ${2:10}; ${1:i}++){\n $0\n}",detail:ae.countingForLoop(),filterText:"for",insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"switch(){case...}",insertText:`switch($1){ case $2: $3 break; case $4: $5 break; default: $0 }`,detail:ae.switchStatement(),filterText:"switch",command:{id:"editor.action.triggerSuggest",title:"123",arguments:[]},insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"if(){}",insertText:`if($1){ $0 }`,detail:ae.ifClause(),filterText:"if",command:{id:"editor.action.triggerSuggest",title:"123",arguments:[]},insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"if(){} else {}",insertText:`if($1){ $2 } else { $0 }`,detail:ae.doubleSidedIfClause(),filterText:"if",command:{id:"editor.action.triggerSuggest",title:"123",arguments:[]},insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"else {}",insertText:`else { $0 }`,detail:"else",filterText:"else",sortText:"aelse",insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i}])),((e==null?void 0:e.classContext)==null||(e==null?void 0:e.methodContext)!=null)&&(s=s.concat([{label:"instanceof",insertText:"instanceof $0",detail:"instanceof-Operator",insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"print",insertText:"print($1);$0",detail:ae.printStatement(),command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]},insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"println",insertText:"println($1);$0",detail:ae.printlnStatement(),command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]},insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i}])),!this.isConsole&&(e==null||e.classContext==null||e.classContext.isMainClass)){let l=ae.identifier(),h="";n.file.getText().trim().length<5&&(l=n.file.name.replace(".java",""),h=" "+l),s=s.concat([{label:"class"+h,filterText:"class",insertText:"class ${1:"+l+`} { $0 } `,detail:ae.classDefinition(),insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"public class",filterText:"public class",insertText:"public class ${1:"+ae.identifier()+`} { $0 } `,detail:ae.classDefinition(),insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"abstract class",filterText:"abstract class",insertText:"abstract class ${1:"+ae.identifier()+`} { $0 } `,detail:ae.classDefinition(),insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"interface",filterText:"interface",insertText:"interface ${1:"+ae.identifier()+`} { $0 } `,detail:ae.classDefinition(),insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"enum",filterText:"enum",insertText:"enum ${1:"+ae.identifier()+`} { $0 } `,detail:ae.classDefinition(),insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i}])}else!this.isConsole&&(e==null?void 0:e.methodContext)==null&&(s=s.concat([{label:"public",filterText:"public",insertText:"public ",detail:"public",insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"public void method(){}",filterText:"public",insertText:"public ${1:void} ${2:"+ae.identifier()+"}(${3:"+ae.parameter()+`}) { $0 } `,detail:ae.methodDefinition(),insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"protected",filterText:"protected",insertText:"protected ",detail:"protected",insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"static",filterText:"static",insertText:"static ",detail:"static",insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i},{label:"private",filterText:"private",insertText:"private ",detail:"private",insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i}]));return e!=null&&e.methodContext!=null&&((a=e.classContext)==null?void 0:a.identifier)!=""&&(s=s.concat([{label:"return",filterText:"return",insertText:"return",detail:"return",insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i}])),s}getOverridableMethodsCompletion(e,i,n){let s=[],a=[],l=e.getExtends();for(;l!=null;)a=a.concat(l.getOwnMethods().filter(h=>!!(h.isAbstract||h.program==null||h.identifier.startsWith("onMouse")||h.identifier.startsWith("onKey")||h.identifier.startsWith("onChange")))),l=l.getExtends();for(let h of e.getImplements())a=a.concat(h.getAllMethods());for(let h of a){if(h.isConstructor)continue;let c=!1;for(let A of e.getOwnMethods())if(A.getSignature()==h.getSignature()){c=!0;break}if(c)continue;let u=(h.isAbstract?"implement ":"override ")+h.getCompletionLabel(!1),g=h.identifier,f=h.returnParameterType==null?"void":h.returnParameterType.toString(),b="";n.indexOf(f)<0&&(b+=we[h.visibility]+" "+(h.returnParameterType==null?"void":h.returnParameterType.toString())+" "),b+=h.identifier+"("+h.parameters.map(A=>A.type.toString()+" "+A.identifier).join(", "),b+=`) { $0 }`,s.push({label:{label:u,detail:" -> "+ae.implementOverrideMethod(h.isAbstract,u)},filterText:g,insertText:b,insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i})}return s}getConstructorCompletion(e,i){let n=[];if(e.getOwnMethods().filter(f=>f.isConstructor&&f.identifier==e.identifier&&f.identifierRange.startLineNumber!==-1).length>0)return[];let a=e.getFields().filter(f=>f.classEnum==e&&!f.isStatic()&&!f.initializedBeforeConstructor&&!f.isFinal()),l=1,h=a.map(f=>{var b;return"${"+l+++":"+((b=f.type)==null?void 0:b.toString())+" "+f.identifier}).join(", }");h.length>0&&(h+="}");let c=a.map(f=>" ${"+l+++":this."+f.identifier+" = "+f.identifier+";").join(` }`);c.length>0&&(c+="}");let u=` public ${e.identifier}(${h}){ ${c} $0 }`,g={label:{label:e.identifier+"(){...}",detail:" -> insert constructor"},filterText:e.identifier,insertText:u,insertTextRules:O.CompletionItemInsertTextRule.InsertAsSnippet,kind:O.CompletionItemKind.Snippet,range:i,sortText:"_aaa"};return n.push(g),n}upvoteItemsWithSameFirstCharacterCasing(e,i){if(!i||i.length<1)return;let n=this.hasFirstCharacterUpperCase(i);for(let s of e)this.hasFirstCharacterUpperCase(s.insertText)!=n?s.sortText="a_"+s.sortText:s.sortText="b_"+s.sortText}hasFirstCharacterUpperCase(e){return!e||e.length<0?!1:e[0]==e[0].toUpperCase()}hasFirstCharacterLowerCase(e){return!e||e.length<0?!1:e[0]==e[0].toUpperCase()}firstCharacterToUpperCase(e){return!e||e.length==0?"":e.charAt(0).toLocaleUpperCase()+e.substring(1)}}class gy extends or{constructor(e){super(e);r(this,"count",0);O.registerDefinitionProvider(e.monacoLanguageSelector,this)}provideDefinition(e,i,n){let s=H.getEditors().find(f=>f.getModel()==e);if(!s)return;let a=this.findMainForModel(e);if(!a)return;let l=this.getUsagePosition(a,i,s),h=l==null?void 0:l.symbol.module.file;if(!(h instanceof Ge))return;let c=h.getMonacoModel(),u=c==null?void 0:c.uri;if(!u)return;let g=l==null?void 0:l.symbol.identifierRange;if(g)return setTimeout(()=>{let f=s.getPosition();e==c&&f&&rr.equals(s.getPosition(),ee.getStartPosition(g))&&s.revealPositionInCenterIfOutsideViewport(f)},200),{range:l.symbol.identifierRange,uri:u}}getUsagePosition(e,i,n){var a,l;if(((a=n.getModel())==null?void 0:a.getLanguageId())!="myJava")return;let s=(l=e.getCurrentWorkspace())==null?void 0:l.getModuleForMonacoModel(n.getModel());if(s)return s.compiledSymbolsUsageTracker.findSymbolAtPosition(i)}}class fy extends or{constructor(e){super(e);r(this,"autoFormatTriggerCharacters",[` `]);r(this,"displayName","Java-Autoformat");this.language=e}provideOnTypeFormattingEdits(e,i,n,s,a){let l=this.format(e);return Promise.resolve(l)}deleteOverlappingRanges(e){for(let i=0;i=s.range.startColumn)e.splice(i+1,1);else if(n.range.endColumn==0&&n.text.length>0&&s.range.startColumn==1&&s.range.endColumn>s.range.startColumn&&s.text==""){let a=n.text.length-(s.range.endColumn-s.range.startColumn);a>0?(n.text=n.text.substr(0,a),e.splice(i+1,1)):a<0?(s.range.endColumn=s.range.startColumn-a,e.splice(i,1),i--):(e.splice(i,2),i--)}}}}provideDocumentFormattingEdits(e,i,n){let s=this.format(e);return Promise.resolve(s)}format(e){let i=[],n=e.getValue(H.EndOfLinePreference.LF),s=new co().lex(n).tokens;if(s==null)return[];let a,l=0,h=3,c=[],u=[],g=!1,f=0,b=0,A=!1,S=this.language.getSettings(this.findMainForModel(e));for(let w=0;w3&&this.deleteSpaces(i,C.range.startLineNumber,1,3);break;case m.leftCurlyBracket:if(A=!1,g&&(g=!1,u.push(l+2),l++),l++,c.push(C.range.startLineNumber),a!=null){let I=a.tt;(I==m.rightBracket||I==m.identifier||I==m.leftRightSquareBracket)&&a.range.startLineNumber==C.range.startLineNumber&&this.replaceBetween(a,C,i," ")}if(w0){let I=s[w-1];I.tt!=m.space&&I.tt!=m.newline&&this.insertSpacesBefore(i,C.range.startLineNumber,C.range.startColumn,1)}l--;break;case m.leftBracket:if(b++,w1){let I=s[w-1],W=s[w-2];I.tt==m.space&&[m.newline,m.keywordFor,m.keywordWhile,m.keywordIf,m.keywordElse,m.keywordDo].indexOf(W.tt)<0&&!this.isBinaryOperator(W.tt)&&this.lengthOfRange(I.range)==1&&this.deleteSpaces(i,I.range.startLineNumber,I.range.startColumn,1)}break;case m.rightBracket:if(b--,w>1){let I=s[w-1],W=s[w-2];I.tt==m.space&&W.tt!=m.newline&&this.deleteSpaces(i,I.range.startLineNumber,I.range.startColumn,this.lengthOfRange(I.range))}break;case m.newline:if(f=2,w0&&ua++,ua<0&&(ua=0);let Cs=ua*h+(A?h:0);A=!1,Cs>Mt?this.insertSpacesBefore(i,C.range.startLineNumber+1,0,Cs-Mt):Cs0&&s[w-1].tt!=m.newline&&this.lengthOfRange(C.range)>1&&this.deleteSpaces(i,C.range.startLineNumber,C.range.startColumn,this.lengthOfRange(C.range)-1);break;case m.keywordFor:case m.keywordWhile:case m.keywordIf:case m.keywordDo:if(S.getValue("formatter.forceSpacesAfterIfForWhileDo")!="no"){let I=parseInt(S.getValue("formatter.forceSpacesAfterIfForWhileDo")||"0");this.forceSpacesBeforeOpeningBracket(i,w+1,s,C.range.startLineNumber,C.range.startColumn,I)}A=!0;break;case m.keywordElse:this.forceSpacesBeforeOpeningBracket(i,w+1,s,C.range.startLineNumber,C.range.startColumn,1),A=!0;break;case m.comma:case m.semicolon:if(A=!1,w>1){let I=s[w-1],W=s[w-2];I.tt!=m.newline&&W.tt!=m.newline&&!this.isBinaryOperator(W.tt)&&I.tt==m.space&&this.lengthOfRange(I.range)==1&&this.deleteSpaces(i,I.range.startLineNumber,I.range.startColumn,1)}if(w0){let W=s[w-1],te=q||I?0:1;W.tt==m.space?this.lengthOfRange(W.range)!=te&&this.insertSpacesBefore(i,W.range.startLineNumber,W.range.startColumn,te-this.lengthOfRange(W.range)):te==1&&this.insertSpacesBefore(i,C.range.startLineNumber,C.range.startColumn,1)}if(w=0;){let s=i[n].tt;if(s==m.lower)return!0;if([m.space,m.comma,m.identifier].indexOf(s)<0)return!1;n--}return!1}isBinaryOperator(e){return e&&e>=m.modulo&&e<=m.colon}replaceBetween(e,i,n,s){let a=e.range,l=i.range;(a.endLineNumber!=l.startLineNumber||l.startColumn-a.endColumn!=s.length)&&this.replace(n,a,l,s)}forceSpacesBeforeOpeningBracket(e,i,n,s,a,l){let h=0,c=i;if(n[i].tt==m.space&&(h=this.lengthOfRange(n[i].range),c++),!([m.leftBracket,m.leftCurlyBracket].indexOf(n[c].tt)<0)&&h!=l)if(h>l){let u=n[i];this.deleteSpaces(e,u.range.startLineNumber,u.range.startColumn,h-l)}else{let u=n[c].range;this.insertSpacesBefore(e,u.startLineNumber,u.startColumn,l-h)}}deleteSpaces(e,i,n,s){e.push({range:{startColumn:n,startLineNumber:i,endColumn:n+s+(n==0?1:0),endLineNumber:i},text:""})}insertSpacesBefore(e,i,n,s){if(s<0){this.deleteSpaces(e,i,n,-s);return}e.push({range:{startColumn:n,startLineNumber:i,endColumn:n,endLineNumber:i},text:" ".repeat(s)})}replace(e,i,n,s){e.push({range:{startColumn:i.endColumn,startLineNumber:i.endLineNumber,endColumn:n.startColumn,endLineNumber:n.startLineNumber},text:s})}lengthOfRange(e){return e.endColumn-e.startColumn}}class P{}r(P,"whileLabel",()=>d({de:"while(Bedingung){ Anweisungen }",en:""})),r(P,"whileDocumentation",()=>d({de:"Wiederholung mit Anfangsbedingung (while-loop)",en:""})),r(P,"whileParameter1",()=>d({de:"Bedingung der while-loop",en:""})),r(P,"whileParameter1Documentation",()=>d({de:"Die Bedingung wird vor jeder Wiederholung ausgewertet. Ist sie erfüllt ist (d.h. hat sie den Wert true), so werden die Anweisungen in {} erneut ausgeführt, ansonsten wird mit der nächsten Anweisung nach { } fortgefahren.",en:""})),r(P,"ifLabel",()=>d({de:"if(Bedingung){ Anweisungen1 } else { Anweisungen2 }",en:""})),r(P,"ifDocumentation",()=>d({de:"Bedingung (else... ist optional)",en:""})),r(P,"ifParameter1",()=>d({de:"Bedingung im if-statement",en:""})),r(P,"ifParameter1Documentation",()=>d({de:"Ist die Bedingung erfüllt (d.h. hat sie den Wert true), so werden die Anweisungen1 ausgeführt. Trifft die Bedingung nicht zu (d.h. hat sie den Wert false), so werden die Anweisungen2 ausgeführt.",en:""})),r(P,"switchLabel",()=>d({de:"switch(Selektor){case Wert_1: Anweisungen1; break; case Wert_2 Anweisungen2; break; default: Defaultanweisungen; break;}",en:""})),r(P,"switchDocumentation",()=>d({de:"Mehrfachauswahl (switch-case)",en:""})),r(P,"switchParameter1",()=>d({de:"Selektor des switch-statements",en:""})),r(P,"switchParameter1Documentation",()=>d({de:"Der Wert des Selektor-Terms wird ausgewertet. Hat er den Wert Wert_1, so werden die Anweisungen1 ausgeführt. Hat er den Wert Wert_2, so werden die Anweisungen2 ausgeführt usw. Hat er keinen der bei case... aufgeführten Werte, so werden die Defaultanweisungen ausgeführt.",en:""})),r(P,"forLabel",()=>d({de:"for(Startanweisung; Bedingung; Anweisung am Ende jeder Wiederholung){ Anweisungen }",en:"for(Start statement; Condition; Statement at the end of each iteration){ Instructions }"})),r(P,"forDocumentation",()=>d({de:"Wiederholung mit for (for-loop)",en:"for-loop"})),r(P,"forParameter1Interval",()=>bh({de:[4,18],en:[4,19]})),r(P,"forParameter1Documentation",()=>d({de:"Startanweisung der for-loop: Anweisung wird vor der ersten Wiederholung einmal ausgeführt.",en:"Initialization statement of the for-loop: Statement is executed once before the first iteration."})),r(P,"forParameter2Interval",()=>bh({de:[20,29],en:[21,30]})),r(P,"forParameter2Documentation",()=>d({de:"Die Bedingung der for-loop wird vor jeder Wiederholung ausgewertet. Ist sie erfüllt ist (d.h. hat sie den Wert true), so werden die Anweisungen in {} erneut ausgeführt, ansonsten wird mit der nächsten Anweisung nach { } fortgefahren.",en:"The condition of the for-loop is evaluated before each iteration. If it is fulfilled (i.e. has the value true), the instructions in {} are executed again, otherwise the next instruction after { } is executed."})),r(P,"forParameter3Interval",()=>bh({de:[31,67],en:[32,70]})),r(P,"forParameter3Documentation",()=>d({de:"Diese Anweisung wird stets am Ende jeder Wiederholung der for-loop ausgeführt.",en:"This statement is always executed at the end of each iteration of the for-loop."})),r(P,"printALabel",()=>d({de:"print(text: String, color: String)",en:""})),r(P,"printADocumentation",()=>d({de:"Gibt Text farbig in der Ausgabe aus",en:""})),r(P,"printAParameter1Label",()=>d({de:"text: String",en:""})),r(P,"printAParameter1Documentation",()=>d({de:"text: Text, der ausgegeben werden soll",en:""})),r(P,"printAParameter2Label",()=>d({de:"color: String",en:""})),r(P,"printAParameter2Documentation",()=>d({de:"Farbe (englischer Name oder #ffffff oder rgb(255,255,255)) oder statisches Attribut der Klasse Color, z.B. Color.red",en:"Color (English name or #ffffff or rgb(255,255,255)) or static attribute of the Color class, e.g. Color.red"})),r(P,"printBLabel",()=>d({de:"print(text: String, color: int)",en:""})),r(P,"printBDocumentation",()=>d({de:"Gibt Text farbig in der Ausgabe aus",en:""})),r(P,"printBParameter1Label",()=>d({de:"text: String",en:""})),r(P,"printBParameter1Documentation",()=>d({de:"text: Text, der ausgegeben werden soll",en:""})),r(P,"printBParameter2Label",()=>d({de:"color: int",en:""})),r(P,"printBParameter2Documentation",()=>d({de:"Farbe als int-Wert kodiert, z.B. 0xff00ff",en:"Color encoded as an int value, e.g. 0xff00ff"})),r(P,"printCLabel",()=>d({de:"print(text: String)",en:""})),r(P,"printCDocumentation",()=>d({de:"Gibt Text in der Ausgabe aus",en:""})),r(P,"printCParameter1Label",()=>d({de:"text: String",en:""})),r(P,"printCParameter1Documentation",()=>d({de:"text: Text, der ausgegeben werden soll",en:""})),r(P,"printDLabel",()=>d({de:"print(text: String, color: Color)",en:""})),r(P,"printDParameter2Label",()=>d({de:"color: Color",en:""})),r(P,"printDParameter2Documentation",()=>d({de:"Farbe als Color-Objekt, z.B. Color.red",en:"Color encoded as a color object, e.g. Color.red"})),r(P,"printlnALabel",()=>d({de:"println(text: String, color: String)",en:""})),r(P,"printlnADocumentation",()=>d({de:"Gibt Text farbig in der Ausgabe aus. Der nächste Text landet eine Zeile tiefer.",en:""})),r(P,"printlnAParameter1Label",()=>d({de:"text: String",en:""})),r(P,"printlnAParameter1Documentation",()=>d({de:"text: Text, der ausgegeben werden soll",en:""})),r(P,"printlnAParameter2Label",()=>d({de:"color: String",en:""})),r(P,"printlnAParameter2Documentation",()=>d({de:"Farbe (englischer Name oder #ffffff oder rgb(255,255,255)) oder statisches Attribut der Klasse Color, z.B. Color.red",en:"Color (English name or #ffffff or rgb(255,255,255)) or static attribute of the Color class, e.g. Color.red"})),r(P,"printlnBLabel",()=>d({de:"println(text: String, color: int)",en:""})),r(P,"printlnBDocumentation",()=>d({de:"Gibt Text farbig in der Ausgabe aus. Der nächste Text landet eine Zeile tiefer.",en:""})),r(P,"printlnBParameter1Label",()=>d({de:"text: String",en:""})),r(P,"printlnBParameter1Documentation",()=>d({de:"text: Text, der ausgegeben werden soll",en:""})),r(P,"printlnBParameter2Label",()=>d({de:"color: int",en:""})),r(P,"printlnBParameter2Documentation",()=>d({de:"Farbe als int-Wert kodiert, z.B. 0xff00ff",en:"Color encoded as an int value, e.g. 0xff00ff"})),r(P,"printlnDLabel",()=>d({de:"println(text: String, color: Color)",en:""})),r(P,"printlnDParameter2Label",()=>d({de:"color: Color",en:""})),r(P,"printlnDParameter2Documentation",()=>d({de:"Farbe als Color-Objekt, z.B. Color.red",en:"Color encoded as a color object, e.g. Color.red"})),r(P,"printlnCLabel",()=>d({de:"println(text: String)",en:""})),r(P,"printlnCDocumentation",()=>d({de:"Gibt Text in der Ausgabe aus. Der nächste Text landet eine Zeile tiefer.",en:""})),r(P,"printlnCParameter1Label",()=>d({de:"text: String",en:""})),r(P,"printlnCParameter1Documentation",()=>d({de:"text: Text, der ausgegeben werden soll",en:""}));const is=class is extends or{constructor(e){super(e);r(this,"signatureHelpTriggerCharacters",["(",",",";","<",">","="]);r(this,"signatureHelpRetriggerCharacters",[" "]);O.registerSignatureHelpProvider(e.monacoLanguageSelector,this)}provideSignatureHelp(e,i,n,s){var u,g,f;if(e.getLanguageId()!="myJava")return;let a=this.findMainForModel(e);if(!a)return;let l,h=(u=a.getBottomDiv())==null?void 0:u.console;if(((g=h==null?void 0:h.editor)==null?void 0:g.getModel())==e?(h.compile(),l=a.getRepl().getCurrentModule()):l=(f=a.getCurrentWorkspace())==null?void 0:f.getModuleForMonacoModel(e),!l)return;let c=a.getSettings().getValue("editor.contextSensitiveHelp.StructureStatements")==="true";return new Promise(async(b,A)=>{var S;await((S=a.getCurrentWorkspace())==null?void 0:S.ensureModuleIsCompiled(l)),b(is.provideSignatureHelpLater(l,e,i,n,s,c))})}static provideSignatureHelpLater(e,i,n,s,a,l){let h=e.methodCallPositions[n.lineNumber];if(h==null)return null;let c,u=-1;for(let g=h.length-1;g>=0;g--){let f=h[g];f.identifierRange.endColumnu&&(f.rightBracketPosition==null||n.lineNumber<=f.rightBracketPosition.lineNumber&&n.column<=f.rightBracketPosition.column||n.lineNumberMath.sign(g.parameters.length-u.parameters.length))){let u=c;(s==0||u.parameters.length>s)&&(a.push(is.makeSignatureInformation(u)),u==e.bestMethod&&u.parameters.length>0&&(l=h),h++)}}return{value:{activeParameter:s,activeSignature:l,signatures:a},dispose:()=>{}}}static makeIntrinsicSignatureInformation(e,i){switch(e){case"while":return[{label:P.whileLabel(),documentation:P.whileDocumentation(),parameters:[{label:P.whileParameter1(),documentation:P.whileParameter1Documentation()}]}];case"if":return[{label:P.ifLabel(),documentation:P.ifDocumentation(),parameters:[{label:P.ifParameter1(),documentation:P.ifParameter1Documentation()}]}];case"switch":return[{label:P.switchLabel(),documentation:P.switchDocumentation(),parameters:[{label:P.switchParameter1(),documentation:P.switchParameter1Documentation()}]}];case"for":return[{label:P.forLabel(),documentation:"",parameters:[{label:P.forParameter1Interval(),documentation:P.forParameter1Documentation()},{label:P.forParameter2Interval(),documentation:P.forParameter2Documentation()},{label:P.forParameter3Interval(),documentation:P.forParameter3Documentation()}]}];case"print":return[{label:P.printALabel(),documentation:P.printADocumentation(),parameters:[{label:P.printAParameter1Label(),documentation:P.printAParameter1Documentation()},{label:P.printAParameter2Label(),documentation:P.printAParameter2Documentation()}]},{label:P.printBLabel(),documentation:P.printBDocumentation(),parameters:[{label:P.printBParameter1Label(),documentation:P.printBParameter1Documentation()},{label:P.printBParameter2Label(),documentation:P.printBParameter2Documentation()}]},{label:P.printDLabel(),documentation:P.printBDocumentation(),parameters:[{label:P.printBParameter1Label(),documentation:P.printBParameter1Documentation()},{label:P.printDParameter2Label(),documentation:P.printDParameter2Documentation()}]},{label:P.printCLabel(),documentation:P.printCDocumentation(),parameters:[{label:P.printCParameter1Label(),documentation:P.printCParameter1Documentation()}]}];case"println":return[{label:P.printlnALabel(),documentation:P.printlnADocumentation(),parameters:[{label:P.printlnAParameter1Label(),documentation:P.printlnAParameter1Documentation()},{label:P.printlnAParameter2Label(),documentation:P.printlnAParameter2Documentation()}]},{label:P.printlnBLabel(),documentation:P.printlnBDocumentation(),parameters:[{label:P.printlnBParameter1Label(),documentation:P.printlnBParameter1Documentation()},{label:P.printlnBParameter2Label(),documentation:P.printlnBParameter2Documentation()}]},{label:P.printlnDLabel(),documentation:P.printlnBDocumentation(),parameters:[{label:P.printlnBParameter1Label(),documentation:P.printlnBParameter1Documentation()},{label:P.printlnDParameter2Label(),documentation:P.printlnDParameter2Documentation()}]},{label:P.printlnCLabel(),documentation:P.printlnCDocumentation(),parameters:[{label:P.printlnCParameter1Label(),documentation:P.printlnCParameter1Documentation()}]}]}return[]}static makeSignatureInformation(e){let i="";e.returnParameterType!=null&&!e.isConstructor&&(i+=e.returnParameterType.toString()+" "),i+=e.identifier+"(";let n=[],s=e.parameters;for(let a=0;ad({de:"Die Anweisung ```print``` gibt eine Zeichenkette aus.",en:"Statement ```print``` outputs a string.",fr:"L'instruction ```print``` affiche une chaîne de caractères."})),r(N,"new",()=>d({de:'Das Schlüsselwort ```new``` bewirkt die Instanzierung ("Erschaffung") eines neuen Objektes einer Klasse.',en:"Statement ```new``` creates a new instance of a class.",fr:"L'instruction ```new``` crée une nouvelle instance d'une classe."})),r(N,"println",()=>d({de:"Die Anweisung ```println``` gibt eine Zeichenkette gefolgt von einem Zeilenumbruch aus.",en:"Statement ```println``` outputs a string followed by a newline.",fr:"L'instruction ```println``` affiche une chaîne de caractères suivie d'un saut de ligne."})),r(N,"while",()=>d({de:"```\nwhile (Bedingung) {Anweisungen}\n``` \nbewirkt die Wiederholung der Anweisungen solange ```Bedingung == true``` ist.",en:"```\nwhile (condition) {statements}\n``` \nrepeats the statements as long as ```condition == true```.",fr:"```\nwhile (condition) {instructions}\n``` \nrépète les instructions tant que ```condition == true```."})),r(N,"for",()=>d({de:"```\nfor(Startanweisung;Solange-Bedingung;Nach_jeder_Wiederholung){Anweisungen}\n``` \nführt zunächst die Startanweisung aus und wiederholt dann die Anweisungen solange ```Bedingung == true``` ist. Am Ende jeder wiederholung wird Nach_jeder_Wiederholung ausgeführt.",en:"```\nfor(initialization;condition;after_each_iteration){statements}\n``` \nfirst executes the initialization and then repeats the statements as long as ```condition == true```. At the end of each iteration, after_each_iteration is executed.",fr:"```\nfor(initialisation;condition;après_chaque_itération){instructions}\n``` \nexécute d'abord l'initialisation, puis répète les instructions tant que ```condition == true```. À la fin de chaque itération, après_chaque_itération est exécuté."})),r(N,"if",()=>d({de:"```\nif(Bedingung){Anweisungen_1} else {Anweisungen_2}\n``` \nwertet die Bedingung aus und führt Anweisungen_1 nur dann aus, wenn die Bedingung ```true``` ergibt, Anweisungen_2 nur dann, wenn die Bedingung ```false``` ergibt. \nDer ```else```-Teil kann auch weggelassen werden.",en:"```\nif(condition){statements_1} else {statements_2}\n``` \nevaluates the condition and executes statements_1 only if the condition is ```true```, statements_2 only if the condition is ```false```. \nThe ```else``` part can also be omitted.",fr:"```\nif(condition){instructions_1} else {instructions_2}\n``` \névalue la condition et exécute instructions_1 uniquement si la condition est ```true```, instructions_2 uniquement si la condition est ```false```. \nLa partie ```else``` peut également être omise."})),r(N,"else",()=>d({de:"```\nif(Bedingung){Anweisungen_1} else {Anweisungen_2}\n``` \nwertet die Bedingung aus und führt Anweisungen_1 nur dann aus, wenn die Bedingung ```true``` ergibt, Anweisungen_2 nur dann, wenn die Bedingung ```false``` ergibt.",en:"```\nif(condition){statements_1} else {statements_2}\n``` \nevaluates the condition and executes statements_1 only if the condition is ```true```, statements_2 only if the condition is ```false```.",fr:"```\nif(condition){instructions_1} else {instructions_2}\n``` \névalue la condition et exécute instructions_1 uniquement si la condition est ```true```, instructions_2 uniquement si la condition est ```false```."})),r(N,"switch",()=>d({de:"```\nswitch(Selektor){ case Wert_1: Anweisungen_1; break; case Wert_2: Anweisungen_2; break; default: Default-Anweisungen } \n``` \nwertet den Selektor-Term aus und führt abhängig vom Termwert Anweisungen_1, Anweisungen_2, ... aus. Entspricht der Termwert keinem der Werte Wert_1, Wert_2, ..., so werden die Default-Anweisungen ausgeführt.",en:"```\nswitch(selector){ case value_1: statements_1; break; case value_2: statements_2; break; default: default-statements } \n``` \nevaluates the selector term and executes statements_1, statements_2, ... depending on the term value. If the term value does not match any of the values value_1, value_2, ..., the default statements are executed.",fr:"```\nswitch(sélecteur){ case valeur_1: instructions_1; break; case valeur_2: instructions_2; break; default: instructions_par_défaut } \n``` \névalue le terme sélecteur et exécute instructions_1, instructions_2, ... en fonction de la valeur du terme. Si la valeur du terme ne correspond à aucune des valeurs valeur_1, valeur_2, ..., les instructions par défaut sont exécutées."})),r(N,"modulo",()=>d({de:"```\na % b\n``` \n (sprich: 'a modulo b') berechnet den **Rest** der ganzzahligen Division a/b.",en:"```\na % b\n``` \n (read: 'a modulo b') calculates the **remainder** of the integer division a/b.",fr:"```\na % b\n``` \n (lire : 'a modulo b') calcule le **reste** de la division entière a/b."})),r(N,"bitwiseOr",()=>d({de:"```\na | b\n``` \n (sprich: 'a or b') berechnet die **bitweise oder-Verknüpfung** der Werte a und b.",en:"```\na | b\n``` \n (read: 'a or b') calculates the **bitwise or operation** of the values a and b.",fr:"```\na | b\n``` \n (lire : 'a or b') calcule l'**opération OU bit à bit** des valeurs a et b."})),r(N,"bitwiseAnd",()=>d({de:"```\na & b\n``` \n (sprich: 'a und b') berechnet die **bitweise und-Verknüpfung** der Werte a und b.",en:"```\na & b\n``` \n (read: 'a and b') calculates the **bitwise and operation** of the values a and b.",fr:"```\na & b\n``` \n (lire : 'a and b') calcule l'**opération ET bit à bit** des valeurs a et b."})),r(N,"logicalAnd",()=>d({de:"```\na & b\n``` \n (sprich: 'a und b') ergibt genau dann ```true```, wenn ```a``` und ```b``` den Wert ```true``` haben..",en:"```\na & b\n``` \n (read: 'a and b') is ```true``` if and only if both ```a``` and ```b``` are ```true```.",fr:"```\na & b\n``` \n (lire : 'a and b') est ```true``` si et seulement si à la fois ```a``` et ```b``` sont ```true```."})),r(N,"logicalOr",()=>d({de:"```\na | b\n``` \n (sprich: 'a oder b') ergibt genau dann ```true```, wenn ```a``` oder ```b``` den Wert ```true``` haben..",en:"```\na | b\n``` \n (read: 'a or b') is ```true``` if and only if either ```a``` or ```b``` is ```true```.",fr:"```\na | b\n``` \n (lire : 'a or b') est ```true``` si et seulement si soit ```a``` soit ```b``` est ```true```."})),r(N,"bitwiseXor",()=>d({de:"```\na ^ b\n``` \n (sprich: 'a xor b') berechnet die **bitweise exklusiv-oder-Verknüpfung** der Werte a und b.",en:" ```\na ^ b\n``` \n (read: 'a xor b') calculates the **bitwise exclusive or operation** of the values a and b.",fr:"```\na ^ b\n``` \n (lire : 'a xor b') calcule l'**opération OU exclusif bit à bit** des valeurs a et b."})),r(N,"rightShift",()=>d({de:"```\na >> b\n``` \n (sprich: 'a right shift b') berechnet den Wert, der entsteht, wenn man den Wert von a **bitweise um b Stellen nach rechts verschiebt**. Dieser Wert ist identisch mit dem nach unten abgerundeten Wert von a/(2 hoch b).",en:"```\na >> b\n``` \n (read: 'a right shift b') calculates the value obtained by **shifting the bits of a to the right by b positions**. This value is identical to the value of a/(2 to the power of b) rounded down.",fr:"```\na >> b\n``` \n (lire : 'a right shift b') calcule la valeur obtenue en **décalant les bits de a vers la droite de b positions**. Cette valeur est identique à la valeur de a/(2 puissance b) arrondie à l'entier inférieur."})),r(N,"leftShift",()=>d({de:"```\na >> b\n``` \n (sprich: 'a left shift b') berechnet den Wert, der entsteht, wenn man den Wert von a **bitweise um b Stellen nach links verschiebt**. Dieser Wert ist identisch mit dem nach unten abgerundeten Wert von a*(2 hoch b).",en:"```\na << b\n``` \n (read: 'a left shift b') calculates the value obtained by **shifting the bits of a to the left by b positions**. This value is identical to the value of a*(2 to the power of b) rounded down.",fr:"```\na << b\n``` \n (lire : 'a left shift b') calcule la valeur obtenue en **décalant les bits de a vers la gauche de b positions**. Cette valeur est identique à la valeur de a*(2 puissance b) arrondie à l'entier inférieur."})),r(N,"bitwiseNot",()=>d({de:"```\n~a\n``` \n (sprich: 'nicht a') berechnet den Wert, der entsteht, wenn man **alle Bits von a umkehrt**.",en:"```\n~a\n``` \n (read: 'not a') calculates the value obtained by **inverting all bits of a**.",fr:"```\n~a\n``` \n (lire : 'not a') calcule la valeur obtenue en **inversant tous les bits de a**."})),r(N,"equals",()=>d({de:"```\na == b\n``` \nergibt genau dann ```true```, wenn ```a``` und ```b``` gleich sind. \nSind a und b **Objekte**, so ergibt ```a == b``` nur dann ```true```, wenn ```a``` und ```b``` auf das **identische** Objekt zeigen. \n```==``` nennt man **Vergleichsoperator**.",en:"```\na == b\n``` \nis ```true``` if and only if ```a``` and ```b``` are equal. \nIf a and b are **objects**, then ```a == b``` is ```true``` only if ```a``` and ```b``` point to the **same** object. \n```==``` is called a **comparison operator**.",fr:"```\na == b\n``` \nest ```true``` si et seulement si ```a``` et ```b``` sont égaux. \nSi a et b sont des **objets**, alors ```a == b``` est ```true``` uniquement si ```a``` et ```b``` pointent vers le **même** objet. \n```==``` est appelé un **opérateur de comparaison**."})),r(N,"lessEquals",()=>d({de:"```\na <= b\n``` \nergibt genau dann ```true```, wenn der Wert von ```a``` kleiner oder gleich dem Wert von ```b``` ist.",en:"```\na <= b\n``` \nis ```true``` if and only if the value of ```a``` is less than or equal to the value of ```b```.",fr:"```\na <= b\n``` \nest ```true``` si et seulement si la valeur de ```a``` est inférieure ou égale à la valeur de ```b```."})),r(N,"greaterEquals",()=>d({de:"```\na >= b\n``` \nergibt genau dann ```true```, wenn der Wert von ```a``` größer oder gleich dem Wert von ```b``` ist.",en:"```\na >= b\n``` \nis ```true``` if and only if the value of ```a``` is greater than or equal to the value of ```b```.",fr:"```\na >= b\n``` \nest ```true``` si et seulement si la valeur de ```a``` est supérieure ou égale à la valeur de ```b```."})),r(N,"notEquals",()=>d({de:"```\na != b\n``` \nergibt genau dann ```true```, wenn ```a``` und ```b``` **un**gleich sind. \nSind ```a``` und ```b``` **Objekte**, so ergibt ```a != b``` dann ```true```, wenn ```a``` und ```b``` **nicht** auf das **identische** Objekt zeigen. \n```!=``` nennt man **Ungleich-Operator**.",en:"```\na != b\n``` \nis ```true``` if and only if ```a``` and ```b``` are **not** equal. \nIf ```a``` and ```b``` are **objects**, then ```a != b``` is ```true``` if ```a``` and ```b``` do **not** point to the **same** object. \n```!=``` is called a **not-equal operator**.",fr:"```\na != b\n``` \nest ```true``` si et seulement si ```a``` et ```b``` ne sont pas égaux. \nSi ```a``` et ```b``` sont des **objets**, alors ```a != b``` est ```true``` si ```a``` et ```b``` ne pointent pas vers le **même** objet. \n```!=``` est appelé un **opérateur de non-égalité**."})),r(N,"plusAssign",()=>d({de:"```\na += b\n(Kurzschreibweise für a = a + b)\n``` \nbewirkt, dass der Wert von ```a``` um den Wert von ```b``` **erhöht** wird. Das Ergebnis wird in die Variable ```a``` geschrieben.",en:"```\na += b\n(short for a = a + b)\n``` \ncauses the value of ```a``` to be **increased** by the value of ```b```. The result is written to the variable ```a```.",fr:"```\na += b\n(court pour a = a + b)\n``` \nfait que la valeur de ```a``` est **augmentée** de la valeur de ```b```. Le résultat est écrit dans la variable ```a```."})),r(N,"minusAssign",()=>d({de:"```\na -= b\n(Kurzschreibweise für a = a - b)\n``` \nbewirkt, dass der Wert von ```a``` um den Wert von ```b``` **erniedrigt** wird. Das Ergebnis wird in die Variable ```a``` geschrieben.",en:"```\na -= b\n(short for a = a - b)\n``` \ncauses the value of ```a``` to be **decreased** by the value of ```b```. The result is written to the variable ```a```.",fr:"```\na -= b\n(court pour a = a - b)\n``` \nfait que la valeur de ```a``` est **diminuée** de la valeur de ```b```. Le résultat est écrit dans la variable ```a```. "})),r(N,"timesAssign",()=>d({de:"```\na *= b\n(Kurzschreibweise für a = a * b)\n``` \nbewirkt, dass der Wert von ```a``` mit dem Wert von ```b``` **multipliziert** wird. Das Ergebnis wird in die Variable ```a``` geschrieben.",en:"```\na *= b\n(short for a = a * b)\n``` \ncauses the value of ```a``` to be **multiplied** by the value of ```b```. The result is written to the variable ```a```.",fr:"```\na *= b\n(court pour a = a * b)\n``` \nfait que la valeur de ```a``` est **multipliée** par la valeur de ```b```. Le résultat est écrit dans la variable ```a```."})),r(N,"divAssign",()=>d({de:"```\na /= b\n(Kurzschreibweise für a = a / b)\n``` \nbewirkt, dass der Wert von ```a``` durch den Wert von ```b``` **dividiert** wird. Das Ergebnis wird in die Variable ```a``` geschrieben.",en:"```\na /= b\n(short for a = a / b)\n``` \ncauses the value of ```a``` to be **divided** by the value of ```b```. The result is written to the variable ```a```.",fr:"```\na /= b\n(court pour a = a / b)\n``` \nfait que la valeur de ```a``` est **divisée** par la valeur de ```b```. Le résultat est écrit dans la variable ```a```."})),r(N,"increment",()=>d({de:"```\na++\n(Kurzschreibweise für a = a + 1)\n``` \nbewirkt, dass der Wert von ```a``` um eins erhöht wird.",en:"```\na++\n(short for a = a + 1)\n``` \ncauses the value of ```a``` to be increased by one.",fr:"```\na++\n(court pour a = a + 1)\n``` \nfait que la valeur de ```a``` est augmentée de un."})),r(N,"decrement",()=>d({de:"```\na--\n(Kurzschreibweise für a = a - 1)\n``` \nbewirkt, dass der Wert von ```a``` um eins eniedrigt wird.",en:"```\na--\n(short for a = a - 1)\n``` \ncauses the value of ```a``` to be decreased by one.",fr:"```\na--\n(court pour a = a - 1)\n``` \nfait que la valeur de ```a``` est diminuée de un."})),r(N,"assign",()=>d({de:"```\na = Term\n``` \nberechnet den Wert des Terms und weist ihn der Variablen ```a``` zu. \n**Vorsicht:** \nVerwechsle ```=```(**Zuweisungsoperator**) nicht mit ```==```(**Vergleichsoperator**)!",en:"```\na = term\n``` \nevaluates the value of the term and assigns it to the variable ```a```. \n**Caution:** \nDo not confuse ```=```(**assignment operator**) with ```==```(**comparison operator**)!",fr:"```\na = terme\n``` \névalue la valeur du terme et l'assigne à la variable ```a```. \n**Attention :** \nNe confondez pas ```=```(**opérateur d'affectation**) avec ```==```(**opérateur de comparaison**)!"})),r(N,"not",()=>d({de:"```\n!a\n``` \nergibt genau dann ```true```, wenn ```a``` ```false``` ergibt. \n```!``` spricht man '**nicht**'.",en:"```\n!a\n``` \nis ```true``` if and only if ```a``` is ```false```. \n```!``` is read as '**not**'.",fr:"```\n!a\n``` \nest ```true``` si et seulement si ```a``` est ```false```. \n```!``` se lit '**not**'."})),r(N,"public",()=>d({de:"```\npublic\n``` \nAttribute und Methoden, die als ```public``` deklariert werden, sind überall (auch außerhalb der Klasse) sichtbar.",en:"```\npublic\n``` \nAttributes and methods declared as ```public``` are visible everywhere (even outside the class).",fr:"```\npublic\n``` \nLes attributs et les méthodes déclarés comme ```public``` sont visibles partout (même en dehors de la classe)."})),r(N,"private",()=>d({de:"```\nprivate\n``` \nAttribute und Methoden, die als ```private``` deklariert werden, sind nur innerhalb von Methoden derselben Klasse sichtbar.",en:"```\nprivate\n``` \nAttributes and methods declared as ```private``` are only visible within methods of the same class.",fr:"```\nprivate\n``` \nLes attributs et les méthodes déclarés comme ```private``` ne sont visibles que dans les méthodes de la même classe."})),r(N,"protected",()=>d({de:"```\nprotected\n``` \nAttribute und Methoden, die als ```protected``` deklariert werden, sind nur innerhalb von Methoden derselben Klasse oder innerhalb von Methoden von Kindklassen sichtbar.",en:"```\nprotected\n``` \nAttributes and methods declared as ```protected``` are only visible within methods of the same class or within methods of child classes.",fr:"```\nprotected\n``` \nLes attributs et les méthodes déclarés comme ```protected``` ne sont visibles que dans les méthodes de la même classe ou dans les méthodes des classes enfants."})),r(N,"return",()=>d({de:"```\nreturn Term\n``` \nbewirkt, dass die Methode verlassen wird und der Wert des Terms an die aufrufende Stelle zurückgegeben wird.",en:"```\nreturn term\n``` \ncauses the method to be exited and the value of the term to be returned to the calling location.",fr:"```\nreturn terme\n``` \nfait que la méthode est quittée et que la valeur du terme est renvoyée à l'emplacement d'appel."})),r(N,"break",()=>d({de:"```\nbreak;\n``` \ninnerhalb einer Schleife bewirkt, dass die Schleife sofort verlassen und mit den Anweisungen nach der Schleife fortgefahren wird. \n```break``` innerhalb einer ```switch```-Anweisung bewirkt, dass der Block der ```switch```-Anweisung verlassen wird.",en:" ```\nbreak;\n``` \nwithin a loop causes the loop to be exited immediately and execution to continue with the statements after the loop. \n```break``` within a ```switch``` statement causes the block of the ```switch``` statement to be exited.",fr:" ```\nbreak;\n``` \ndans une boucle, fait que la boucle est quittée immédiatement et que l'exécution se poursuit avec les instructions après la boucle. \n```break``` dans une instruction ```switch``` fait que le bloc de l'instruction ```switch``` est quitté."})),r(N,"class",()=>d({de:"```\nclass\n``` \nMit dem Schlüsselwort ```class``` werden Klassen definiert.",en:"```\nclass\n``` \nThe keyword ```class``` is used to define classes.",fr:"```\nclass\n``` \nLe mot-clé ```class``` est utilisé pour définir des classes."})),r(N,"extends",()=>d({de:"```\nextends\n``` \n```class A extends B { ... }``` bedeutet, dass die Klasse A Unterklasse der Klasse B ist.",en:"```\nextends\n``` \n```class A extends B { ... }``` means that class A is a subclass of class B.",fr:"```\nextends\n``` \n```class A extends B { ... }``` signifie que la classe A est une sous-classe de la classe B."})),r(N,"implements",()=>d({de:"```\nimplements\n``` \n```class A implements B { ... }``` bedeutet, dass die Klasse A das Interface B implementiert, d.h., dass sie alle Methoden besitzen muss, die in B definiert sind.",en:"```\nimplements\n``` \n```class A implements B { ... }``` means that class A implements the interface B, i.e., that it must have all the methods defined in B.",fr:"```\nimplements\n``` \n```class A implements B { ... }``` signifie que la classe A implémente l'interface B, c'est-à-dire qu'elle doit posséder toutes les méthodes définies dans B."})),r(N,"thisKeyword",()=>d({de:"```\nthis\n``` \nInnerhalb einer Methodendefinition bezeichnet das Schlüsselwort ```this``` immer dasjenige Objekt, für das die Methode gerade ausgeführt wird.",en:"```\nthis\n``` \nWithin a method definition, the keyword ```this``` always refers to the object for which the method is currently being executed.",fr:"```\nthis\n``` \nDans une définition de méthode, le mot-clé ```this``` fait toujours référence à l'objet pour lequel la méthode est en cours d'exécution."})),r(N,"var",()=>d({de:"```\nvar\n``` \nWird einer Variable beim Deklarieren sofort ein Startwert zugewiesen (z.B. Circle c = new Circle(100, 100, 10)), so kann statt des Datentyps das Schlüsselwort ```var``` verwendet werden (also var c = new Circle(100, 100, 10)).",en:"```\nvar\n``` \nIf a variable is assigned an initial value when it is declared (e.g., Circle c = new Circle(100, 100, 10)), the keyword ```var``` can be used instead of the data type (i.e., var c = new Circle(100, 100, 10)).",fr:"```\nvar\n``` \nSi une variable se voit attribuer une valeur initiale lors de sa déclaration (par exemple, Circle c = new Circle(100, 100, 10)), le mot-clé ```var``` peut être utilisé à la place du type de données (c'est-à-dire var c = new Circle(100, 100, 10))."}));class by extends or{constructor(e){super(e);r(this,"keywordDescriptions",{print:N.print(),new:N.new(),println:N.println(),while:N.while(),for:N.for(),if:N.if(),else:N.else(),switch:N.switch(),"%":N.modulo(),"|":N.bitwiseOr(),"&":N.bitwiseAnd(),"||":N.logicalOr(),"&&":N.logicalAnd(),"^":N.bitwiseXor(),">>":N.rightShift(),"<<":N.leftShift(),"~":N.bitwiseNot(),"==":N.equals(),"<=":N.lessEquals(),">=":N.greaterEquals(),"!=":N.notEquals(),"+=":N.plusAssign(),"-=":N.minusAssign(),"*=":N.timesAssign(),"/=":N.divAssign(),"++":N.increment(),"--":N.decrement(),"=":N.assign(),"!":N.not(),public:N.public(),private:N.private(),protected:N.protected(),return:N.return(),break:N.break(),class:N.class(),extends:N.extends(),implements:N.implements(),this:N.thisKeyword(),var:N.var()});this.language=e,O.registerHoverProvider(e.monacoLanguageSelector,this)}replReturnValueToOutput(e,i){if(typeof e>"u")return i+": ---";let n=e.type?e.type.toString()+" ":"",s=Ri.renderValue(e.value,100);return"```\n"+n+i+" : "+s+"\n```"}provideHover(e,i,n){var b,A,S;let s=this.findMainForModel(e);if(!s)return;let a=(b=s.getCurrentWorkspace())==null?void 0:b.getModuleForMonacoModel(e);if(!a)return;let l=[],h,c=s.getSettings();for(let w of a.errors)if(w.level=="error"&&ee.containsPosition(w.range,i))return null;let u=a.findSymbolAtPosition(i),g=u==null?void 0:u.symbol;if(u&&g&&g.identifier!="var"){if(g instanceof xe){let w=c.getValue("editor.hoverVerbosity.showClassDeclaration");if(w!=="none"){let C="```\n"+g.getDeclaration()+"\n```";g.documentation&&w!=="declarations"&&(C+=` `+this.formatDocumentation(g.getDocumentation())),h=u.range,l.push({value:C})}}else if(g instanceof Bi){let w=c.getValue("editor.hoverVerbosity.showMethodDeclaration");if(w!=="none"){let C="```\n"+g.getDeclaration()+"\n```";g.documentation&&w!=="declarations"&&(C+=` `+this.formatDocumentation(g.getDocumentation())),h=u.range,l.push({value:C})}}else if(g instanceof ht&&c.getValue("editor.hoverVerbosity.showHelpOnKeywordsAndOperators")){let w="```\n"+g.identifier+"\n``` \nprimitiver Datentyp";g.documentation&&(w+=` `+this.formatDocumentation(g.getDocumentation())),h=u.range,l.push({value:w})}else if(g instanceof Dr||g instanceof ji||g instanceof Fr){let w="```\n"+g.getDeclaration()+"\n```";g.documentation&&(w+=` `+this.formatDocumentation(g.getDocumentation())),h=u.range,l.push({value:w})}}else{let w=this.getWordUnderCursor(e,i),C=this.keywordDescriptions[w];C!=null&&c.getValue("editor.hoverVerbosity.showHelpOnKeywordsAndOperators")&&l.push({value:C})}if(s.getInterpreter().scheduler.state==Q.paused){let w=s.getRepl(),C=this.widenDeclaration(e,i,g==null?void 0:g.identifier);if(!C)return null;let q=w.executeSynchronously(C);q!=null&&l.push({value:"```\n"+this.replReturnValueToOutput(q,C)+"\n```"})}if(l.length<2){let w=s.getSettings().getValue("editor.contextSensitiveHelp.StructureStatements")==="true",C=rl.provideSignatureHelpLater(a,e,i,null,null,w);if(C!=null&&C.value){let q=C.value,I=q.signatures[q.activeSignature];if(I){let W=(A=I.parameters[q.activeParameter])==null?void 0:A.label,te=(S=I.parameters[q.activeParameter])==null?void 0:S.documentation;if(!W)return null;Array.isArray(W)&&(W=I.label.substring(W[0],W[1])),I[rl.ISINTRINSIC]?l.push({value:te||W}):l.push({value:"```\nParameter "+W+"\n```"})}}}return{range:h,contents:l}}formatDocumentation(e){return e!=null&&e.startsWith("/*")&&(e=yf(e,1)),e}getWordUnderCursor(e,i){let n=e.getValueLengthInRange({startColumn:0,startLineNumber:0,endLineNumber:i.lineNumber,endColumn:i.column}),s=e.getValue(),a="",l=n;for(;l0&&this.isInsideIdentifierOrArrayDescriptor(s.charAt(h-1));)h--;if(l-h>1)a=s.substring(h,l);else{for(l=n;l0&&this.isInsideOperator(s.charAt(h-1));)h--;l-h>0&&(a=s.substring(h,l))}return a}widenDeclaration(e,i,n){let s=e.getValueLengthInRange({startColumn:0,startLineNumber:0,endLineNumber:i.lineNumber,endColumn:i.column}),a=e.getValue(),l=s;for(;l0&&this.isInsideIdentifierChain(a.charAt(h-1));)h--;return l-h>length?a.substring(h,l):n}isInsideIdentifierChain(e){return e.toLocaleLowerCase().match(/[a-z0-9äöüß_\[\]\.]/i)}isInsideOperator(e){return e.toLocaleLowerCase().match(/[&|!%<>=\+\-\*\/]/i)}isInsideIdentifierOrArrayDescriptor(e){return e.toLocaleLowerCase().match(/[a-z0-9äöüß\[\]]/i)}}class yy extends or{constructor(e){super(e);r(this,"displayName","JavaOnline-InlayHints");r(this,"onDidChangeInlayHints");O.registerInlayHintsProvider(e.monacoLanguageSelector,this)}provideInlayHints(e,i,n){var h,c;let s=H.getEditors().find(u=>u.getModel()==e);if(!s)return;let a=this.findMainForModel(e);if(!a||((h=s.getModel())==null?void 0:h.getLanguageId())!="myJava")return;let l=(c=a.getCurrentWorkspace())==null?void 0:c.getModuleForMonacoModel(s.getModel());if(l)return{hints:l.inlayHints,dispose:()=>{}}}resolveInlayHint(e,i){throw new Error("Method not implemented.")}}class vy{static configureEditor(t){t.onDidType(e=>{var n;if(((n=t.getModel())==null?void 0:n.getLanguageId())!="myJava")return;const i=(s,a,l,h)=>{const c=new Pg(s.lineNumber,s.column,s.lineNumber,s.column);t.executeEdits("new-bullets",[{range:c,text:a}]),t.setPosition({lineNumber:l,column:h})};if(e===` `){const s=t.getModel(),a=t.getPosition(),l=s.getLineContent(a.lineNumber-1);if(l.trim().indexOf("/*")===0&&!l.trimEnd().endsWith("*/")&&!(a.lineNumberg.getModel()==t);if(!s)return;let a=this.findMainForModel(t);if(!a)return;let l=this.getUsagePosition(a,e,s);if(!l)return;let h=[];for(let g of a.getCompiler().getAllModules()){let f=g.getUsagePositionsForSymbol(l==null?void 0:l.symbol);if(f){for(let b of f)if(b.file instanceof Ge){if(!((c=b.file.getMonacoModel())!=null&&c.uri))continue;h.push({range:b.range,uri:(u=b.file.getMonacoModel())==null?void 0:u.uri})}}}return h}getUsagePosition(t,e,i){var s,a;if(((s=i.getModel())==null?void 0:s.getLanguageId())!="myJava")return;let n=(a=t.getCurrentWorkspace())==null?void 0:a.getModuleForMonacoModel(i.getModel());if(n)return n.compiledSymbolsUsageTracker.findSymbolAtPosition(e)}}class wy extends or{constructor(t){super(t),O.registerRenameProvider(t.monacoLanguageSelector,this)}provideRenameEdits(t,e,i,n){var g;let s=this.findMainForModel(t);if(!s)return;let a=H.getEditors().find(f=>f.getModel()==t);if(!a)return;let l=this.getUsagePosition(s,e,a);if(!l)return;let h=l.symbol;l.symbol instanceof Bi&&l.symbol.isConstructor&&(h=l.symbol.classEnumInterface);let c=[],u=new Set;for(let f of s.getCompiler().getAllModules()){let b=f.getUsagePositionsForSymbol(h);if(b){for(let A of b)if(A.file instanceof Ge){if(u.has(A.range.startLineNumber+"_"+A.range.startColumn)&&!((g=A.file.getMonacoModel())!=null&&g.uri))continue;let S=A.file.name+"_"+A.range.startLineNumber+"_"+A.range.startColumn;if(u.has(S))continue;u.add(S),c.push({resource:A.file.getMonacoModel().uri,versionId:A.file.getMonacoModel().getVersionId(),textEdit:{range:A.range,text:i}})}}}return{edits:c}}resolveRenameLocation(t,e,i){let n=this.findMainForModel(t);if(!n)return;let s=H.getEditors().find(l=>l.getModel()==t);if(!s)return;let a=this.getUsagePosition(n,e,s);if(a)return{range:a==null?void 0:a.range,text:a==null?void 0:a.symbol.identifier}}getUsagePosition(t,e,i){var s,a;if(((s=i.getModel())==null?void 0:s.getLanguageId())!="myJava")return;let n=(a=t.getCurrentWorkspace())==null?void 0:a.getModuleForMonacoModel(i.getModel());if(n)return n.compiledSymbolsUsageTracker.findSymbolAtPosition(e)}}class ky{constructor(t){r(this,"decorations");if(this.main=t,!t.getMainEditor()){console.error("Call construction of JavaSymbolMarker before creation of monaco editor.");return}t.getMainEditor().onDidChangeCursorPosition(e=>{this.onDidChangeCursorPosition(e)})}onDidChangeCursorPosition(t){var s,a;let e=this.main.getMainEditor();if(!e||((s=e.getModel())==null?void 0:s.getLanguageId())!="myJava")return;this.clearDecorations();let i=(a=this.main.getCurrentWorkspace())==null?void 0:a.getModuleForMonacoModel(e.getModel());if(!i)return;let n=[];this.markSymbolUnderCursor(e,i,t.position,n),this.markMethodUnderCursor(e,i,t.position,n),this.decorations=e.createDecorationsCollection(n)}markSymbolUnderCursor(t,e,i,n){if(!e)return;let s=e.findSymbolAtPosition(i);if(s==null)return;let a=e.getUsagePositionsForSymbol(s==null?void 0:s.symbol);if(a)for(let l of a)n.push({range:l.range,options:{inlineClassName:"jo_revealSyntaxElement",isWholeLine:!1,overviewRuler:{color:{id:"editorIndentGuide.background"},darkColor:{id:"editorIndentGuide.activeBackground"},position:H.OverviewRulerLane.Left}}})}markMethodUnderCursor(t,e,i,n){let s=e.methodDeclarationRanges.find(a=>ee.containsPosition(a,i));s&&n.push({range:{startColumn:0,startLineNumber:s.startLineNumber,endColumn:100,endLineNumber:s.endLineNumber},options:{className:"jo_highlightMethod",isWholeLine:!0,overviewRuler:{color:{id:"jo_highlightMethod"},darkColor:{id:"jo_highlightMethod"},position:H.OverviewRulerLane.Left},minimap:{color:{id:"jo_highlightMethod"},position:H.MinimapPosition.Inline},zIndex:-100}})}clearDecorations(){this.decorations&&(this.decorations.clear(),this.decorations=void 0)}}class Cy extends or{constructor(t){super(t)}provideCodeActions(t,e,i,n){var h,c;let s=[],a=(h=this.findMainForModel(t))==null?void 0:h.getCompiler();if(!a)return;let l;for(let u of(c=a.moduleManager)==null?void 0:c.modules)if(u.file instanceof Ge&&u.file.getMonacoModel()==t){l=u;break}if(typeof l>"u")return{actions:[],dispose:()=>{}};for(let u of i.markers)s=l.quickfixes.filter(f=>f.error?f.error.message==u.message:!1).map(f=>f.provideCodeAction(t));if(s.length==0&&e.startLineNumber==e.endLineNumber&&e.startColumn==e.endColumn){let u={lineNumber:e.startLineNumber,column:e.startColumn};s=l.quickfixes.filter(f=>ee.containsPosition(f.range,u)).map(f=>f.provideCodeAction(t))}return{actions:s,dispose:()=>{}}}}class Sy extends eg{constructor(t,e,i,n){super(t,e,i,n,void 0),this.isRepl=!0}start(t,e,i){i?(this.currentSymbolTable=t,this.codeGenerationMode="replStandalone",this.module.symbolTables=[t]):(this.currentSymbolTable=new rh(this.module,this.module.ast.range,!0,t),this.module.symbolTables.push(this.currentSymbolTable),this.codeGenerationMode="repl"),this.symbolTableStack.push(this.currentSymbolTable),this.module.programsToCompileToFunctions=[];let n=new qr(this.module,this.currentSymbolTable,"Repl.method"),s=[];s.push(new _(`${$.startReplProgram}(); `));let a,l,h=this.module.ast.mainProgramNode.statements;for(let c=0;c{S.stackframePosition>=A.nextFreePosition&&e.identifierToSymbolMap.delete(w)})}let b=f.start(e,n,s);return{module:a,program:b}}return{module:a,program:void 0}}}class Ey{constructor(t,e){r(this,"standaloneModule");r(this,"standaloneSymbolTable");r(this,"standaloneThread");r(this,"standaloneExecutable");r(this,"standaloneModuleManager");r(this,"standaloneStack",[]);r(this,"replCompiler");r(this,"lastCompiledModule");r(this,"state","none");this.main=t,this.compiler=e,this.replCompiler=new $y,this.compiler.eventManager.on("compilationFinishedWithNewExecutable",i=>{setTimeout(()=>{this.init(i)},100)}),this.getInterpreter().eventManager.on("resetRuntime",()=>{this.state="none";let i=this.getInterpreter().executable;i&&this.init(i)})}init(t){var i,n;if(!t){this.state="none",this.main.hideDebugger();return}let e=this.getInterpreter();e||console.error("JavaRepl constructor called before interpreter was created."),this.standaloneModule=new Ho(new th),this.standaloneSymbolTable=new rh(this.standaloneModule,re.instance,!0),this.standaloneThread=e.scheduler.createThread("Java REPL standalone thread"),this.standaloneThread.classes=t.classObjectRegistry,this.standaloneModuleManager=new oh,this.standaloneModuleManager.addModule(this.standaloneModule);for(let s of t.moduleManager.modules)this.standaloneModuleManager.addModule(s),s.registerTypesAtTypestore(this.standaloneModuleManager.typestore);this.standaloneExecutable=new Wp(t.classObjectRegistry,this.standaloneModuleManager,this.compiler.libraryModuleManager,[],new ju(t.libraryModuleManager.typestore,this.standaloneModuleManager.typestore)),this.standaloneStack=[],this.state="none",this.main.hideDebugger(),(n=(i=this.main.getBottomDiv())==null?void 0:i.console)==null||n.detachValues()}getCurrentModule(){return this.lastCompiledModule}getInterpreter(){let t=this.main.getInterpreter();return t||console.error("JavaRepl.getInterpreter: Interpreter is missing!"),t}compile(t,e){let i,n=this.getInterpreter();if(n.scheduler.state==Q.paused){let s=n.scheduler.getCurrentThread();if(n.executable&&s&&s.programStack.length>0){let a=s.programStack[s.programStack.length-1],h=new Ph(a).symbolTable;if(h){let c=h.childTables.length;i=this.replCompiler.compile(t,h,n.executable,e,!1),h.childTables.splice(c,h.childTables.length-c)}}}else i=this.replCompiler.compile(t,this.standaloneSymbolTable,this.standaloneExecutable,e,!0);return i&&(this.lastCompiledModule=i.module),i}executeSynchronously(t){var c;let e=this.getInterpreter(),i=this.compile(t,!1);if(!i)return;let n=this.getInterpreter().scheduler.getCurrentThread(),s=n==null?void 0:n.s.length,a=n==null?void 0:n.currentProgramState,l=a==null?void 0:a.lastExecutedStep,h=this.prepareThread(i);if(h){try{e.runREPLSynchronously();let u=(c=i.program)==null?void 0:c.symbolTable.stackframe;u.numberOfReplLocalVariables=(u==null?void 0:u.nextFreePosition)||0,a&&(a.lastExecutedStep=l),s&&(n==null||n.s.splice(s,(n==null?void 0:n.s.length)-s))}catch(u){console.log(u);return}return h.replReturnValue}}async executeAsync(t,e){let i=this.getInterpreter(),n=this.compile(t,!0),s=i.scheduler.getCurrentThread(),a=s==null?void 0:s.s.length,l=s==null?void 0:s.currentProgramState,h=l==null?void 0:l.lastExecutedStep;return n?n.module.errors.find(u=>u.level=="error")?{errors:n.module.errors,text:null,type:void 0,value:void 0}:(this.state=this.getInterpreter().scheduler.state==Q.paused?"none":"standalone",new Promise((u,g)=>{let f,b=A=>{var w,C;let S=(w=n.program)==null?void 0:w.symbolTable.stackframe;S.numberOfReplLocalVariables=(S==null?void 0:S.nextFreePosition)||0,l&&(l.lastExecutedStep=h),a&&(s==null||s.s.splice(a,(s==null?void 0:s.s.length)-a)),A&&(A.errors=(C=n==null?void 0:n.module)==null?void 0:C.errors,u(A),i.updateDebugger())};if(f=this.prepareThread(n,b,e),!f){u(void 0);return}i.setState(Q.running)})):void 0}prepareThread(t,e,i=!0){let n=this.getInterpreter(),s=n.scheduler;if(t.module.hasErrors()||!t.program)return;t.program.compileToJavascriptFunctions(),t.program.isReplProgram=!0;let a=[Q.running,Q.paused].indexOf(s.state)<0,l=s.getCurrentThread();if(a){s.setAsCurrentThread(this.standaloneThread),l=this.standaloneThread;let u=this.standaloneSymbolTable.getStackFrame().numberOfLocalVariables;for(;this.standaloneThread.s.length{l.maxStepsPerSecond=h,l.state=B.running,l.lastTimeThreadWasRun=performance.now();let u=n.printManager;n.printManager=new Tp,n.setState(c),n.printManager=u,s.retrieveThreads(),e&&e(l.replReturnValue)},l.pushReplProgram(t.program),l}}const ns=class ns extends db{constructor(){super("Java",".java","myJava"),this.registerLanguageAtMonacoEditor(),this.registerProviders()}static getInstance(){return ns.instance||(ns.instance=new ns),ns.instance}static registerMain(t,e){let i=new uy(t,e),n=new Ey(t,i),s=t.getSettings(),a=ns.getInstance();return a.registerCompiler(t,i),a.registerRepl(t,n),a.registerSettings(t,s),vy.configureEditor(t.getMainEditor()),new ky(t),a}registerProviders(){new by(this),new py(this),new wy(this),new gy(this),new Ay(this),new rl(this),new yy(this),new hb(this);let t=new fy(this);O.registerDocumentFormattingEditProvider(this.monacoLanguageSelector,t),O.registerOnTypeFormattingEditProvider(this.monacoLanguageSelector,t),O.registerCodeActionProvider(this.monacoLanguageSelector,new Cy(this))}registerLanguageAtMonacoEditor(){O.register({id:"myJava",extensions:[".learnJava"]});let t={indentationRules:{decreaseIndentPattern:/^(.*\*\/)?\s*\}.*$/,increaseIndentPattern:/^.*\{[^}"']*$/},onEnterRules:[{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,afterText:/^\s*\*\/$/,action:{indentAction:O.IndentAction.IndentOutdent,appendText:" * "}},{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,action:{indentAction:O.IndentAction.None,appendText:" * "}},{beforeText:/^(\t|(\ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,action:{indentAction:O.IndentAction.None,appendText:"* "}},{beforeText:/^(\t|(\ \ ))*\ \*\/\s*$/,action:{indentAction:O.IndentAction.None,removeText:1}},{beforeText:/^(\t|(\ \ ))*\ \*[^/]*\*\/\s*$/,action:{indentAction:O.IndentAction.None,removeText:1}}],wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],colorizedBracketPairs:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:))")}}},e={ignoreCase:!1,defaultToken:"",tokenPostfix:".java",keywords:["abstract","continue","new","switch","assert","default","goto","package","synchronized","private","this","implements","protected","throw","import","public","throws","case","instanceof","return","transient","catch","extends","try","final","static","finally","strictfp","volatile","const","native","super","true","false","null"],print:["print","println"],statements:["for","while","if","then","else","do","break","continue"],types:["int","boolean","char","float","double","long","void","byte","short","class","enum","interface","var"],operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,"annotation"],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,"number.float"],[/0[xX](@hexdigits)[Ll]?/,"number.hex"],[/0(@octaldigits)[Ll]?/,"number.octal"],[/0[bB](@binarydigits)[Ll]?/,"number.binary"],[/(@digits)[fFdD]/,"number.float"],[/(@digits)[lL]?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"""/,"string","@string"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@javadoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],javadoc:[[/[^\/*]+/,"comment.doc"],[/\/\*/,"comment.doc.invalid"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"""/,"string","@pop"],[/"/,"string","@pop"]]}};O.setLanguageConfiguration("myJava",t),O.setMonarchTokensProvider("myJava",e)}};r(ns,"instance");let Dd=ns;class ym{constructor(t,e=!1){r(this,"headingsDiv");r(this,"bodiesDiv");r(this,"tabheadingRightDiv");r(this,"tabs",[]);this.container=t,this.sharedBody=e,this.container.classList.add("jo_tabs_container"),this.headingsDiv=document.createElement("div"),this.headingsDiv.classList.add("jo_tabheadings"),this.container.appendChild(this.headingsDiv),this.bodiesDiv=document.createElement("div"),this.bodiesDiv.classList.add("jo_tabs"),this.container.appendChild(this.bodiesDiv),this.tabheadingRightDiv=document.createElement("div"),this.tabheadingRightDiv.classList.add("jo_tabheading-right","jo_noHeading"),this.headingsDiv.appendChild(this.tabheadingRightDiv)}addTab(t){t.tabManager=this,this.tabs.push(t),this.headingsDiv.insertBefore(t.headingDiv,this.tabheadingRightDiv),this.sharedBody||this.bodiesDiv.appendChild(t.bodyDiv)}insertIntoRightDiv(t){this.tabheadingRightDiv.appendChild(t)}setActive(t){for(let e of this.tabs)e!=t&&(e.headingDiv.classList.remove("jo_active"),this.sharedBody||(e.bodyDiv.style.display="none"));t.headingDiv.classList.add("jo_active"),this.sharedBody||(t.bodyDiv.style.display="flex")}setTabVisible(t,e){if(t.headingDiv.style.display=e?"block":"none",t.visible=e,!e&&t.isActive()){let i=this.tabs.find(n=>n.visible);i&&this.setActive(i)}}}class wn{constructor(t,e=[],i=!1){r(this,"headingDiv");r(this,"bodyDiv");r(this,"tabManager");r(this,"visible",!0);r(this,"onShow");if(this.headingDiv=document.createElement("div"),this.headingDiv.classList.add("jo_tabheading"),this.headingDiv.textContent=t,this.headingDiv.onclick=n=>{this.show()},!i){this.bodyDiv=document.createElement("div"),this.bodyDiv.classList.add("jo_tab");for(let n of e)this.bodyDiv.classList.add(n)}}show(){this.tabManager.setActive(this),this.onShow&&this.onShow()}isActive(){return this.headingDiv.classList.contains("jo_active")}setVisible(t){this.tabManager.setTabVisible(this,t)}}class Ws{}r(Ws,"sqlIdeURL","");const Wo=class Wo{constructor(t,e,i,n){r(this,"isClosed");r(this,"abortController");r(this,"shortestTimeoutMs",6e4);r(this,"timeOpened",null);this.networkManager=t,this.token=e,this.databaseId=i,this.onServerSentStatementsCallback=n,this.isClosed=!1,Wo.openListeners.push(this),this.open()}static close(){Wo.openListeners.forEach(t=>t.close())}open(){if(this.isClosed)return;this.abortController=new AbortController;let t=[["content-type","text/json"]];t.push(["x-token-pm","JJ"+Ue]),t.push(["x-timeout",this.shortestTimeoutMs+""]);try{fetch(Ws.sqlIdeURL+"registerLongpollingListener",{signal:this.abortController.signal,method:"POST",headers:t,body:JSON.stringify({token:this.token})}).then(e=>{if(e.status!=200){let i=Math.round(performance.now()-this.timeOpened)-4e3;i{this.onMessage(i),this.reopen()});break;case 502:this.reopen();break;default:this.reopen(1e4);break}}).catch(e=>{(""+e).indexOf("abort")<0&&(console.log(e),this.reopen(1e4))}).finally(()=>{this.abortController=null})}catch(e){console.log("Exception opening DatabaseLongPollingListener: "+e)}}reopen(t=500){setTimeout(()=>{this.open()},t)}onDBMessage(t){t.databaseId==this.databaseId&&this.onServerSentStatementsCallback(t.firstNewStatementIndex,t.newStatements,t.rollbackToVersion)}close(){var e;this.isClosed=!0,(e=this.abortController)==null||e.abort();let t=[["content-type","text/json"]];t.push(["x-token-pm","JJ"+Ue]);try{fetch("/servlet/unregisterLongpollingListener",{method:"POST",headers:t,body:JSON.stringify({token:this.token})})}catch{}}onMessage(t){for(let e of t)switch(e.eventType){case"close":return;case"broadcastDatabaseChange":this.onDBMessage(e.data);return}}};r(Wo,"openListeners",[]);let uo=Wo;class Iy{fetchTemplateFromCache(t,e){if(t==null){e(null);return}let i=this;this.cacheAvailable()||e(null),this.getCache(n=>{n.match(i.databaseIdToCacheIdentifier(t)).then(s=>{s.arrayBuffer().then(a=>e(new Uint8Array(a)))}).catch(()=>e(null))})}saveTemplateToCache(t,e){if(!this.cacheAvailable())return;let i=this;this.getCache(n=>{n.put(i.databaseIdToCacheIdentifier(t),new Response(e))})}cacheAvailable(){return"caches"in self}getCache(t){caches.open("my-cache").then(t)}databaseIdToCacheIdentifier(t){return"/onlineIdeTemplateDb"+t}}class Dy{constructor(t,e){r(this,"timerhandle");r(this,"ownUpdateFrequencyInSeconds",25);r(this,"teacherUpdateFrequencyInSeconds",5);r(this,"updateFrequencyInSeconds",25);r(this,"forcedUpdateEvery",25);r(this,"forcedUpdatesInARow",0);r(this,"secondsTillNextUpdate",this.updateFrequencyInSeconds);r(this,"errorHappened",!1);r(this,"interval");r(this,"counterTillForcedUpdate");this.main=t,this.$updateTimerDiv=e}async initializeTimer(){let t=this;this.$updateTimerDiv.find("svg").attr("width",t.updateFrequencyInSeconds),this.interval!=null&&clearInterval(this.interval),this.counterTillForcedUpdate=this.forcedUpdateEvery,this.interval=setInterval(()=>{if(t.main.user==null)return;if(t.secondsTillNextUpdate--,t.secondsTillNextUpdate<0){t.secondsTillNextUpdate=t.updateFrequencyInSeconds,t.counterTillForcedUpdate--;let i=t.counterTillForcedUpdate==0;i&&(this.forcedUpdatesInARow++,t.counterTillForcedUpdate=this.forcedUpdateEvery,this.forcedUpdatesInARow>50&&(t.counterTillForcedUpdate=this.forcedUpdateEvery*10)),t.sendUpdatesAsync(i,!1)}let e=this.$updateTimerDiv.find(".jo_updateTimerRect");e.attr("width",t.secondsTillNextUpdate+"px"),t.errorHappened?(e.css("fill","#c00000"),this.$updateTimerDiv.attr("title","Fehler beim letzten Speichervorgang -> Werd's wieder versuchen")):(e.css("fill","#008000"),this.$updateTimerDiv.attr("title",t.secondsTillNextUpdate+" Sekunden bis zum nächsten Speichern")),bd.sendDataToServer()},1e3)}initializeSSE(){Mi.getInstance().subscribe("doFileUpdate",t=>{this.sendUpdatesAsync(!0,!1,!0)})}checkIfTestIsRunning(){et("servlet/checkIfPruefungIsRunning",{}).then(t=>{t&&t.runningPruefung&&this.main.pruefungManagerForStudents.startPruefung(t.runningPruefung)})}savePruefungWorkspace(t){var i,n;let e={workspacesWithoutFiles:[t.getWorkspaceData(!1)],files:t.getFiles().map(s=>s.getFileData(t)),owner_id:this.main.workspacesOwnerId,userId:this.main.user.id,currentWorkspaceId:((i=this.main.currentWorkspace)==null?void 0:i.pruefung_id)==null?(n=this.main.currentWorkspace)==null?void 0:n.id:null,getModifiedWorkspaces:!1};et("servlet/sendUpdates",e)}async sendUpdatesAsync(t=!1,e=!1,i=!1){var u,g,f;if(this.main.user==null||this.main.user.is_testuser)return!0;let n=(u=this.main.rightDiv)==null?void 0:u.classDiagram,s=this.main.user.gui_state;(n!=null&&n.dirty||this.main.gui_state_dirty)&&(this.main.gui_state_dirty=!1,s.classDiagram=n==null?void 0:n.serialize(),this.sendUpdateGuiState(e),this.forcedUpdatesInARow=0),n&&(n.dirty=!1);let a=[],l=[];for(let b of this.main.workspaceList){b.saved||(a.push(b.getWorkspaceData(!1)),b.saved=!0,this.forcedUpdatesInARow=0);for(let A of b.getFiles())A.isSaved()||(this.forcedUpdatesInARow=0,l.push(A.getFileData(b)),A.setSaved(!0))}let h={workspacesWithoutFiles:a,files:l,owner_id:this.main.workspacesOwnerId,userId:this.main.user.id,currentWorkspaceId:((g=this.main.currentWorkspace)==null?void 0:g.pruefung_id)==null?(f=this.main.currentWorkspace)==null?void 0:f.id:null,getModifiedWorkspaces:t},c=this;if(a.length>0||l.length>0||t||this.errorHappened)if(e)navigator.sendBeacon("sendUpdates",JSON.stringify(h));else try{let b=await et("servlet/sendUpdates",h);if(c.errorHappened=!b.success,c.errorHappened){let A="Fehler beim Senden der Daten: ";return b.message&&(A+=b.message),console.log(A),!1}else return b.workspaces!=null&&c.updateWorkspaces(h,b,i),b.filesToForceUpdate!=null&&c.updateFiles(b.filesToForceUpdate),!0}catch(b){c.errorHappened=!0,console.log("Fehler beim Ajax-call: "+b);return}return!0}async sendCreateWorkspace(t,e){if(this.main.user.is_testuser)return t.id=Math.round(Math.random()*1e7),null;let n={type:"create",entity:"workspace",data:t.getWorkspaceData(!1),owner_id:e,userId:this.main.user.id},s=await et("servlet/createOrDeleteFileOrWorkspace",n);return s.success?(t.id=s.id,!0):!1}async moveFile(t,e){return(await et("servlet/moveFile",{file_id:t,destination_workspace_id:e})).success}async sendCreateFile(t,e,i){if(this.main.user.is_testuser)return t.id=Math.round(Math.random()*1e7),!1;let s={type:"create",entity:"file",data:t.getFileData(e),owner_id:i,userId:this.main.user.id},a=await et("servlet/createOrDeleteFileOrWorkspace",s);return a.success&&(t.id=a.id,t.setSaved(!0)),a.success}async sendDuplicateWorkspace(t){if(this.main.user.is_testuser)return{message:"Diese Aktion ist für den Testuser nicht möglich.",workspace:null};let e={workspace_id:t.id};return await et("/servlet/duplicateWorkspace",e)}sendDistributeWorkspace(t,e,i,n){if(this.main.user.is_testuser){n("Diese Aktion ist für den Testuser nicht möglich.");return}this.sendUpdatesAsync(!1).then(()=>{let s={workspace_id:t.id,class_id:e==null?void 0:e.id,student_ids:i};Re("distributeWorkspace",s,a=>{n(a.message)},n)})}sendSetSecret(t,e,i,n){Re("setRepositorySecret",{repository_id:t,newSecretRead:e,newSecretWrite:i},a=>{n(a)},a=>{alert(a)})}sendCreateRepository(t,e,i,n,s){if(this.main.user.is_testuser){s("Diese Aktion ist für den Testuser nicht möglich.");return}this.sendUpdatesAsync(!0).then(()=>{let a={workspace_id:t.id,publish_to:e,name:i,description:n};Re("createRepository",a,l=>{t.getFiles().forEach(h=>{h.is_copy_of_id=h.id,h.repository_file_version=1}),t.repository_id=l.repository_id,t.has_write_permission_to_repository=!0,s(l.message,l.repository_id)},s)})}async sendDeleteWorkspaceOrFileAsync(t,e){if(this.main.user.is_testuser)return!0;let i={type:"delete",entity:t,ids:e,userId:this.main.user.id};return(await et("/servlet/createOrDeleteFileOrWorkspace",i)).success}async sendUpdateGuiState(t=!1){if(this.main.user.is_testuser)return;let e={gui_state:this.main.user.gui_state,userId:this.main.user.id};if(t)navigator.sendBeacon("updateGuiState",JSON.stringify(e));else return(await et("servlet/updateGuiState",e)).success?null:"Netzwerkfehler!"}async sendUpdateFileOrder(t){let e={fileOrderList:t.map(n=>({fileId:n.id,order:n.sorting_order}))};return(await et("servlet/updateFileOrder",e)).success}async sendUpdateWorkspaceOrder(t){let e={workspaceOrderList:t.map(n=>({workspaceId:n.id,order:n.sorting_order}))};return(await et("servlet/updateWorkspaceOrder",e)).success}updateWorkspaces(t,e,i=!1){var l;let n=new Map,s=[];t.files.forEach(h=>s.push(h.id)),e.workspaces.workspaces.forEach(h=>n.set(h.id,h));let a=[];for(let h of e.workspaces.workspaces)this.main.workspaceList.filter(u=>u.id==h.id).length==0&&(h.pruefung_id==null&&a.push(h.name),this.createNewWorkspaceFromWorkspaceData(h));for(let h of this.main.workspaceList){let c=n.get(h.id);if(c!=null){let u=new Map;c.files.forEach(f=>u.set(f.id,f));let g=new Map;for(let f of h.getFiles()){let b=f.id;g.set(b,f);let A=u.get(b);A==null?(this.main.projectExplorer.fileTreeview.removeElementAndItsFolderContents(f),(l=this.main.getCurrentWorkspace())==null||l.removeFile(f)):(s.indexOf(b)<0&&f.getText()!=A.text&&(f.setText(A.text),f.setSaved(!0)),f.remote_version=A.version)}for(let f of c.files)g.get(f.id)==null&&this.createFile(h,f)}}if(a.length>0&&i){let h=a.length>1?"Folgende Workspaces hat Deine Lehrkraft Dir gesendet: ":"Folgenden Workspace hat Deine Lehrkraft Dir gesendet: ";h+=a.join(", "),alert(h)}this.main.projectExplorer.workspaceTreeview.sort(),this.main.projectExplorer.fileTreeview.sort()}updateFiles(t){let e=new Map;for(let i of this.main.workspaceList)for(let n of i.getFiles())e[n.id]=n;for(let i of t){let n=e.get(i.id);n!=null&&n.getText()!=i.text&&(n.setText(i.text),n.setSaved(!0),n.remote_version=i.version)}}createNewWorkspaceFromWorkspaceData(t,e=!1){let i=this.main.restoreWorkspaceFromData(t);this.main.workspaceList.push(i);let n=t.repository_id==null?"img_workspace-dark":"img_workspace-dark-repository",s=this.main.projectExplorer.workspaceTreeview.addNode(i.isFolder,i.name,n,i);return i.repository_id!=null&&i.renderSynchronizeButton(s),e&&this.main.projectExplorer.workspaceTreeview.sort(),i}createFile(t,e){let i=this.main.projectExplorer.getNewFile(e);if(t==this.main.getCurrentWorkspace()){let n=Ai.filenameToFileType(i.name).iconclass;this.main.projectExplorer.fileTreeview.addNode(!1,i.name,n,i)}t.addFile(i)}fetchDatabaseAndToken(t,e){Re("obtainSqlToken",{code:t},n=>{n.success?this.fetchDatabase(n.token,(s,a)=>{e(s,n.token,a)}):e(null,null,n.message)},n=>{e(null,null,n)})}fetchDatabase(t,e){let i=new Iy,n={token:t};Re(Ws.sqlIdeURL+"jGetDatabase",n,s=>{if(s.success){let a=s.database;i.fetchTemplateFromCache(a.based_on_template_id,l=>{if(l!=null){a.templateDump=Im.inflate(l),e(a,null);return}else{if(a.based_on_template_id==null){e(a,null);return}this.fetchTemplate(t,h=>{if(h!=null){i.saveTemplateToCache(a.based_on_template_id,h),a.templateDump=Im.inflate(h),e(a,null);return}else{e(null,"Konnte das Template nicht laden.");return}})}})}else e(null,"Netzwerkfehler!")})}fetchTemplate(t,e){let i={token:t},n={};Ue!=null&&(n={"x-token-pm":Ue}),y.ajax({type:"POST",async:!0,headers:n,data:JSON.stringify(i),contentType:"application/json",url:Ws.sqlIdeURL+"jGetTemplate",xhrFields:{responseType:"arraybuffer"},success:function(s){e(new Uint8Array(s))},error:function(s,a){alert("Konnte das Template nicht laden."),e(null)}})}addDatabaseStatement(t,e,i,n){let s={token:t,version_before:e,statements:i};Re(Ws.sqlIdeURL+"jAddDatabaseStatement",s,a=>{n(a.statements_before,a.new_version,a.message)},a=>{n([],0,a)})}rollbackDatabaseStatement(t,e,i){let n={token:t,current_version:e};Re(Ws.sqlIdeURL+"jRollbackDatabaseStatement",n,s=>{i(s.message)})}}class Vr{constructor(t,e,i,n,s){r(this,"sliderDiv");r(this,"otherDiv");r(this,"transparentOverlay");r(this,"sliderBeginCallback");r(this,"sliderEndCallback");r(this,"savedPosition");this.container=t,this.lastFirst=e,this.vertHor=i,this.sliderMovedCallback=n,this.initSlider(),s&&(this.otherDiv=s)}initSlider(){let t=this;if(this.otherDiv==null){let e=this.container.parentElement;if(!e){console.log("Error in EmbeddedSlider: element has no parentElement.");return}Array.from(e.children).forEach(i=>{i!=this.container&&(t.otherDiv=i)})}this.sliderDiv=R.makeDiv(void 0,"jo_slider"),this.sliderDiv.style.width=this.vertHor?"100%":"4px",this.sliderDiv.style.height=this.vertHor?"4px":"100%",this.sliderDiv.style.cursor=this.vertHor?"row-resize":"col-resize",this.lastFirst?(this.sliderDiv.style.top="0px",this.sliderDiv.style.left="0px"):this.vertHor?(this.sliderDiv.style.bottom="0px",this.sliderDiv.style.left="0px"):(this.sliderDiv.style.top="0px",this.sliderDiv.style.right="0px"),this.container.append(this.sliderDiv),this.sliderDiv.addEventListener("mousedown",e=>{e.stopPropagation(),e.preventDefault()}),this.sliderDiv.addEventListener("pointerdown",e=>{e.stopPropagation(),e.preventDefault();let i=e.clientX,n=e.clientY,s=this.container.getBoundingClientRect(),a=s.height,l=s.width,h=this.otherDiv.getBoundingClientRect(),c=h.height,u=h.width;this.transparentOverlay=R.makeDiv(document.body),this.transparentOverlay.style.cursor=this.vertHor?"ns-resize":"ew-resize",this.transparentOverlay.style.position="fixed",this.transparentOverlay.style.left="0",this.transparentOverlay.style.top="0",this.transparentOverlay.style.width="100%",this.transparentOverlay.style.height="100%",this.transparentOverlay.style.zIndex="10001",this.sliderBeginCallback&&this.sliderBeginCallback(),this.transparentOverlay.addEventListener("pointermove",g=>{let f=g.clientX-i,b=g.clientY-n;if(g.preventDefault(),g.stopPropagation(),this.vertHor){let A=a+(this.lastFirst?-b:b),S=c+(this.lastFirst?b:-b);this.container.style.height=A+"px",this.otherDiv.style.height=S+"px",this.sliderMovedCallback(A)}else{let A=l+(this.lastFirst?-f:f),S=u+(this.lastFirst?f:-f);this.container.style.width=A+"px",this.otherDiv.style.width=S+"px",this.sliderMovedCallback(A)}this.container.style.flex="0 1 auto"}),this.transparentOverlay.onmousemove=g=>{g.stopPropagation()},this.transparentOverlay.addEventListener("pointerup",()=>{this.transparentOverlay.remove(),this.sliderEndCallback&&this.sliderEndCallback()})})}setColor(t){this.sliderDiv.style.backgroundColor=t}savePosition(){let t=this.container.getBoundingClientRect(),e=this.otherDiv.getBoundingClientRect();this.vertHor?this.savedPosition={own:t.height,other:e.height}:this.savedPosition={own:t.width,other:e.width}}restorePosition(){this.vertHor?(this.container.style.height=this.savedPosition.own+"px",this.otherDiv.style.height=this.savedPosition.other+"px"):(this.container.style.width=this.savedPosition.own+"px",this.otherDiv.style.width=this.savedPosition.other+"px")}}class ag{}r(ag,"noFilesToImport",()=>d({de:"Keine Dateien zum Import vorhanden.",en:"No files to import."}));class U{}r(U,"heading",()=>d({de:"Sprites verwalten",en:"Manage sprites"})),r(U,"stepOne",()=>d({de:"1. Schritt: png-Dateien hierhin ziehen oder...",en:"Step 1: Drag png files here or..."})),r(U,"filesSelected",()=>d({de:" Dateien sind ausgewählt.",en:" files are selected."})),r(U,"fileSelected",()=>d({de:"Eine Datei ist ausgewählt.",en:"One file is selected."})),r(U,"stepTwo",()=>d({de:"2. Schritt: Angaben zu den Grafikdateien",en:"Step 2: Setup Details"})),r(U,"rows",()=>d({de:"Zeilen:",en:"Rows:"})),r(U,"columns",()=>d({de:"Spalten:",en:"Columns:"})),r(U,"margin",()=>d({de:"Rand (in px)",en:"Margin (in px)"})),r(U,"distance",()=>d({de:"Abstand (in px)",en:"Distance (in px)"})),r(U,"series",()=>d({de:"Serie: ",en:"Series: "})),r(U,"fromIndex",()=>d({de:"Ab Index: ",en:"From Index: "})),r(U,"stepThree",()=>d({de:"3. Schritt: importieren",en:"Step 3: import"})),r(U,"messages",()=>d({de:"Meldungen: ",en:"Messages: "})),r(U,"fileSize",()=>d({de:"Größe der Spritesheet-Datei: ",en:"Spritesheet-filesize: "})),r(U,"importWholeSpritesheet",()=>d({de:"Gesamtes Spritesheet aus Datei importieren:",en:"Import whole spritesheet from file:"})),r(U,"exportWholeSpritesheet",()=>d({de:"Spritesheet in Datei exportieren",en:"Export spritesheet to file"})),r(U,"removeAllSprites",()=>d({de:"Alle Sprites aus dem Spritesheet entfernen",en:"Remove all sprites from spritesheet"})),r(U,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(U,"sureDelete",()=>d({de:"Ich bin mir sicher: löschen!",en:"I'm sure: delete!"})),r(U,"save",()=>d({de:"Speichern",en:"Save"})),r(U,"nameOfSpritesheet",()=>d({de:"Name des Spritesheets?",en:"Name of spritesheet?"})),r(U,"imagesAdded",()=>d({de:" Bilder hinzugefügt",en:" images added"})),r(U,"index",()=>d({de:"Index: ",en:"Index: "})),r(U,"widthHeight",(t,e)=>d({de:"Breite: "+t+" px, Höhe: "+e+" px",en:"Width: "+t+" px, height: "+e+" px"})),r(U,"noWorkspaceSelected",()=>d({de:"Kein Workspace ausgewählt.",en:"No Workspace selected."})),r(U,"mangeWorkspaceSprites",t=>d({de:"Sprites des Workspace "+t+" verwalten",en:"Manage sprites of workspace "+t})),r(U,"mangeRepositorySprites",t=>d({de:"Sprites des Repositorys "+t+" verwalten",en:"Manage sprites of repository "+t})),r(U,"identifierAlreadyUsed",t=>d({de:"Der Bezeichner "+t+" wird schon für interne Sprites verwendet.",en:"Identifier "+t+" is used for internal sprites already."})),r(U,"seriesIndexAlreadyUsed",(t,e)=>d({de:"Serie "+t+", index "+e+" ist schon weiter oben vergeben.",en:"Series "+t+", index "+e+" already is used."}));class og{}r(og,"couldntLoadSpritesheet",()=>d({de:"Konnte das Spritesheet nicht laden: ",en:"Couldn't load spritesheet: "}));class ws{constructor(){r(this,"pixiSpritesheetData");r(this,"pngImageData");r(this,"pngFile");r(this,"zipFile")}async initializeSpritesheetForWorkspace(t,e,i){let n=new Set,s=!1;if(t.spritesheetId!=null||typeof i=="string"&&i!=null){if(t.repository_id!=null){let h={workspace_id:t.id},c=await et("servlet/getSpritesheetIdForWorkspace",h);t.spritesheetId=c.spritesheet_id}try{await this.load(t.spritesheetId!=null?t.spritesheetId:i),s=!0}catch{console.log("Fehler beim Laden des Spritesheets vom Server!");return}}if(i!=null&&typeof i!="string"&&(await this.unpackZip(i),s=!0),s&&this.pngImageData!=null&&this.pixiSpritesheetData!=null){e.getInterpreter().graphicsManager.setUserData(this.pixiSpritesheetData,this.pngImageData);for(let c in this.pixiSpritesheetData.frames){let u=c.indexOf("#");n.add(c.substring(0,u))}}let a=e.getCompiler().getType("SpriteLibrary"),l=a.runtimeClass;l.removeUserSpritesheets(a),n.forEach(h=>l.addEntry(h,a))}async load(t){t!=null&&(typeof t=="number"&&(t="sprites/"+("0"+(t%256).toString(16)).slice(-2).toUpperCase()+"/"+t+".zip"),await this.loadFromServer(t),this.zipFile!=null&&await this.unpackZip(this.zipFile))}unpackPngFile(){let t=no.decode(this.pngFile.buffer),e=no.toRGBA8(t)[0];this.pngImageData=new Uint8Array(e),this.pixiSpritesheetData.meta.size.w=t.width,this.pixiSpritesheetData.meta.size.h=t.height}async loadFromServer(t){let e={};return Ue!=null&&(e={"x-token-pm":Ue}),new Promise((i,n)=>{y.ajax({type:"GET",async:!0,url:t,headers:e,xhrFields:{responseType:"arraybuffer"},success:s=>{this.zipFile=new Uint8Array(s),i()},error:(s,a)=>{alert(og.couldntLoadSpritesheet()+a),n()}})})}async unpackZip(t){t instanceof File&&(t=await this.readFile(t)),await this.continueUnpackZip(t)}async readFile(t){return new Promise((e,i)=>{var n=new FileReader;n.onload=()=>{let s=new Uint8Array(n.result);e(s)},n.onerror=i,n.readAsArrayBuffer(t)})}async continueUnpackZip(t){let e,i;(await Dm.loadAsync(t)).forEach(function(s,a){a.name.endsWith(".png")&&(i=a),a.name.endsWith(".json")&&(e=a)}),this.pngFile=await i.async("uint8array"),this.pixiSpritesheetData=JSON.parse(await e.async("text")),this.unpackPngFile()}async makeZip(t="spritesheet"){const e=new Dm;e.file(t+".png",this.pngFile),e.file(t+".json",JSON.stringify(this.pixiSpritesheetData),{compression:"DEFLATE",compressionOptions:{level:9}}),this.zipFile=await e.generateAsync({type:"uint8array"})}}class jy{constructor(t){this.name=t}getIdentifier(){return this.name}}function Vl(p,t){const e=new p.Database(t);return e.create_function("isDate",function(i){if(i==null)return!0;if(typeof i!="string")return!1;var n=/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/;if(i.match(n)){var s=i.split("/"),a=i.split("-"),l=s.length,h=a.length;if(l>1)var c=i.split("/");else if(h>1)var c=i.split("-");if(c.length!=3)return!1;var u=parseInt(c[2]),g=parseInt(c[1]),f=parseInt(c[0]),b=[31,28,31,30,31,30,31,31,30,31,30,31];if((g==1||g>2)&&u>b[g-1])return!1;if(g==2){var A=!1;return(!(f%4)&&f%100||!(f%400))&&(A=!0),!(A==!1&&u>=29||A==!0&&u>29)}return!0}else return!1}),e.create_function("isDateTime",function(i){if(i==null)return!0;if(typeof i!="string")return!1;var n=/^\d{4}[\-](0[1-9]|1[012])[\-](0[1-9]|[12][0-9]|3[01]) ([01][1-9]|2[0123]):([0-5][0-9]):([0-5][0-9])$/;if(i.match(n)){var s=i.split(" "),a=s[0];if(a.length!=10)return!1;var l=parseInt(a.substring(8,10)),h=parseInt(a.substring(5,7)),c=parseInt(a.substring(0,4)),u=[31,28,31,30,31,30,31,31,30,31,30,31];if((h==1||h>2)&&l>u[h-1])return!1;if(h==2){var g=!1;return(!(c%4)&&c%100||!(c%400))&&(g=!0),!(g==!1&&l>=29||g==!0&&l>29)}return!0}else return!1}),e.create_function("month",function(i){var n=/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/;let s=i.match(n);return s?Number(s[1]):-1}),e.create_function("day",function(i){var n=/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/;let s=i.match(n);return s?Number(s[2]):-1}),e.create_function("year",function(i){var n=/^(\d{4})[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/;let s=i.match(n);return s?Number(s[1]):-1}),e.create_function("isTime",function(i){if(i==null)return!0;if(typeof i!="string")return!1;var n=/^([01][0-9]|2[0123]):([0-5][0-9]):([0-5][0-9])$/;return i.match(n)!=null}),e.create_function("concat",function(i){if(arguments==null)return"";let n="";for(let s=0;s"https://embed.learn-sql.de/include/lib/sql.js/sql-wasm.wasm"}));r(this,"db");r(this,"SQL");r(this,"onmessage");r(this,"onError")}postMessageToClient(t){this.onmessage({data:t})}postMessage(t){let e=this;e.db==null?e.initsql.then(i=>{e.SQL=i,e.db=Vl(i,void 0),e.worker(t)}).catch(i=>(console.log(i),e.postMessageToClient({id:this.data.id,error:i.message}))):e.worker(t)}terminate(){}worker(t){var e,i,n=t.config?t.config:{};try{switch(t&&t.action){case"open":return e=t.buffer,this.db=Vl(this.SQL,e&&new Uint8Array(e)),this.postMessageToClient({id:t.id,ready:!0});case"exec":if(this.db===null&&(this.db=Vl(this.SQL,void 0)),!t.sql)throw"exec: Missing query string";return this.postMessageToClient({id:t.id,results:this.db.exec(t.sql,t.params,n)});case"each":this.db===null&&(this.db=Vl(this.SQL,void 0));var s=function(h){return this.postMessage({id:t.id,row:h,finished:!1})},a=function(){return this.postMessage({id:t.id,finished:!0})};return this.db.each(t.sql,t.params,s,a,n);case"export":e=this.db.export(),i={id:t.id,results:[{buffer:e}]};try{return this.postMessageToClient(i)}catch{return this.postMessageToClient(i)}case"close":return this.db&&this.db.close(),this.postMessageToClient({id:t.id});default:throw new Error("Invalid action : "+(t&&t.action))}}catch(l){return this.postMessageToClient({id:t.id,error:l.message})}}}class Py{constructor(t){r(this,"databaseDirectoryEntries",null);r(this,"worker");r(this,"queryId",0);r(this,"querySuccessCallbacksMap",new Map);r(this,"queryErrorCallbackMap",new Map);r(this,"databaseStructure");this.main=t}initializeWorker(t,e,i){this.worker!=null&&this.worker.terminate(),performance.now(),window.jo_doc?this.worker=new My:this.worker=new Worker(new URL(""+new URL("assets/sqljsWorker-CGIvyKli.js",import.meta.url).href,import.meta.url),{type:"module"});let n=this,s;this.worker.onmessage=()=>{n.worker.onmessage=l=>{let h=l.data.id;if(l.data.error==null){let c=n.querySuccessCallbacksMap.get(h);c!=null&&c(l.data.results)}else{let c=n.queryErrorCallbackMap.get(h);c!=null&&c(l.data.error)}this.queryErrorCallbackMap.delete(h),this.querySuccessCallbacksMap.delete(h)},e==null&&(e=[]),e=e.slice(),e.length;let a=()=>{if(e.length>0){let l=e.shift();n.executeQuery(l,h=>{a()},h=>{h="Error while setting up database: "+h+", query: "+l,console.log({error:"Error while setting up database: "+h,query:l}),console.log(),a()})}else i!=null&&i(s)};a()},this.worker.onerror=a=>{s="Worker error: "+a.error,console.log("Worker error: "+a.error)},this.worker.postMessage({id:n.queryId++,action:"open",buffer:t})}executeQuery(t,e,i){let n=this.queryId++;this.querySuccessCallbacksMap.set(n,e),this.queryErrorCallbackMap.set(n,i),this.worker.postMessage({id:n,action:"exec",sql:t,params:{}})}executeWriteQueries(t,e,i){if(t.length==0){e();return}let n=t.shift();this.executeQuery(n,()=>{this.executeWriteQueries(t,e,i)},s=>{this.executeWriteQueries(t,()=>{},a=>{}),i(s)})}static getDumpType(t){let e=[83,81,76,105,116,101],i=120,n=!0;for(let s=0;sn.toLocaleLowerCase()==e);return i<0?i:i+1}_wasNull(){return this.wasNull}_getIndex(){return this.cursor}_next(){return this.cursor++,this.result==null?!1:this.cursor=this.result.values.length)throw new F(o.cursorAfterLastRecordException());let i=this.result.values[this.cursor][e-1];return this.wasNull=i==null,i}_getBoolean(e){e=this.getColumnIndex(e);let i=this.checkCursorAndRetrieveValue(e);return i==null?!1:(i+"").indexOf("1")>=0}_getInt(e){e=this.getColumnIndex(e);let i=this.checkCursorAndRetrieveValue(e);return i==null||typeof i!="number"?0:Math.floor(i)}_getFloat(e){e=this.getColumnIndex(e);let i=this.checkCursorAndRetrieveValue(e);return i==null||typeof i!="number"?0:i}_getString(e){e=this.getColumnIndex(e);let i=this.checkCursorAndRetrieveValue(e);return i==null?null:""+i}isAfterLast(){return this.cursor>this.result.values.length-1}};r(Qt,"__javaDeclarations",[{type:"declaration",signature:"class ResultSet extends Object",comment:o.resultSetClassComment},{type:"method",signature:"final boolean next()",native:Qt.prototype._next,comment:o.resultSetNextComment},{type:"method",signature:"final int size()",native:Qt.prototype._size,comment:o.resultSetSizeComment},{type:"method",signature:"final int getIndex()",native:Qt.prototype._getIndex,comment:o.resultSetGetIndexComment},{type:"method",signature:"final boolean wasNull()",native:Qt.prototype._wasNull,comment:o.resultSetWasNullComment},{type:"method",signature:"final boolean getBoolean(int index)",native:Qt.prototype._getBoolean,comment:o.resultSetGetByIndexComment("boolean")},{type:"method",signature:"final int getInt(int index)",native:Qt.prototype._getInt,comment:o.resultSetGetByIndexComment("int")},{type:"method",signature:"final float getFloat(int index)",native:Qt.prototype._getFloat,comment:o.resultSetGetByIndexComment("float")},{type:"method",signature:"final double getDouble(int index)",native:Qt.prototype._getFloat,comment:o.resultSetGetByIndexComment("double")},{type:"method",signature:"final String getString(int index)",native:Qt.prototype._getString,comment:o.resultSetGetByIndexComment("string")},{type:"method",signature:"final boolean getBoolean(string columnLabel)",native:Qt.prototype._getBoolean,comment:o.resultSetGetByLabelComment("boolean")},{type:"method",signature:"final int getInt(string columnLabel)",native:Qt.prototype._getInt,comment:o.resultSetGetByLabelComment("int")},{type:"method",signature:"final float getFloat(string columnLabel)",native:Qt.prototype._getFloat,comment:o.resultSetGetByLabelComment("float")},{type:"method",signature:"final double getDouble(string columnLabel)",native:Qt.prototype._getFloat,comment:o.resultSetGetByLabelComment("double")},{type:"method",signature:"final string getString(string columnLabel)",native:Qt.prototype._getString,comment:o.resultSetGetByLabelComment("String")}]);let sl=Qt;const Zn=class Zn extends z{constructor(e,i){super();r(this,"type");r(this,"parameterValues");r(this,"parameterPositions");r(this,"query");this.connection=e,this.query=i.trim(),this.prepareStatement(this.query)}prepareStatement(e){let i=!1;this.parameterPositions=[];for(let n=0;nthis.parameterPositions.length)throw this.parameterPositions.length==0?new F(o.preparedStatementParametersMissingException()):new F(o.preparedStatementWrongParameterIndex(this.parameterPositions.length,e));i==null?this.parameterValues[e-1]="null":typeof i=="string"?(i=i.replace(/'/g,"''"),this.parameterValues[e-1]="'"+i+"'"):this.parameterValues[e-1]=""+i}checkQuery(){return null}getQueryWithParameterValuesFilledIn(){let e=this.query,i=[],n=0;for(let a=0;athis.parameterPositions.length&&(s+=i[i.length-1]),s}_mj$executeQuery$ResultSet$(e,i){let n=this.getQueryWithParameterValuesFilledIn();if(!n.toLocaleLowerCase().startsWith("select"))throw new F(o.statementOnlySelectionStatementsWithQueryException());e.scheduler.interpreter.showProgramPointer(void 0,"DatabaseManager"),this.connection.main.getBottomDiv().showHideDBBusyIcon(!0),e.state=B.waiting,this.connection.executeQuery(n,(s,a)=>{if(s!=null){e.throwRuntimeExceptionOnLastExecutedStep(new F(s));return}let l=new sl(a);e.s.push(l),this.connection.main.getBottomDiv().showHideDBBusyIcon(!1),e.state=B.running})}_mj$executeUpdate$int$(e,i){let n=this.getQueryWithParameterValuesFilledIn();if(n.toLocaleLowerCase().startsWith("select"))throw new F(o.statementExecuteUpdateException());e.scheduler.interpreter.showProgramPointer(void 0,"DatabaseManager"),this.connection.main.getBottomDiv().showHideDBBusyIcon(!0),e.state=B.waiting,this.connection.executeWriteStatement(n,(s,a)=>{if(s!=null){e.throwRuntimeExceptionOnLastExecutedStep(new F(s));return}e.s.push(a),this.connection.main.getBottomDiv().showHideDBBusyIcon(!1),e.state=B.running})}};r(Zn,"__javaDeclarations",[{type:"declaration",signature:"class PreparedStatement extends Object",comment:o.preparedStatementClassComment},{type:"method",signature:"final ResultSet executeQuery()",java:Zn.prototype._mj$executeQuery$ResultSet$,comment:o.statementExecuteQueryComment},{type:"method",signature:"final int executeUpdate()",java:Zn.prototype._mj$executeUpdate$int$,comment:o.statementExecuteUpdateComment},{type:"method",signature:"final boolean setBoolean(int parameterIndex, boolean value)",native:Zn.prototype._setValue,comment:o.preparedStatementSetComment("boolean")},{type:"method",signature:"final int setInt(int parameterIndex, int value)",native:Zn.prototype._setValue,comment:o.preparedStatementSetComment("int")},{type:"method",signature:"final float setFloat(int parameterIndex, float value)",native:Zn.prototype._setValue,comment:o.preparedStatementSetComment("float")},{type:"method",signature:"final double setDouble(int parameterIndex, double value)",native:Zn.prototype._setValue,comment:o.preparedStatementSetComment("double")},{type:"method",signature:"final String setString(int parameterIndex, string value)",native:Zn.prototype._setValue,comment:o.preparedStatementSetComment("string")}]);let jd=Zn;const No=class No extends z{constructor(e){super();r(this,"type");this.connection=e}_mj$executeQuery$ResultSet$string(e,i,n){if(n=n.trim(),!n.toLocaleLowerCase().startsWith("select"))throw new F(o.statementOnlySelectionStatementsWithQueryException());e.scheduler.interpreter.showProgramPointer(void 0,"DatabaseManager"),this.connection.main.getBottomDiv().showHideDBBusyIcon(!0),e.state=B.waiting,this.connection.executeQuery(n,(s,a)=>{if(s!=null){e.throwRuntimeExceptionOnLastExecutedStep(new F(s));return}let l=new sl(a);e.s.push(l),this.connection.main.getBottomDiv().showHideDBBusyIcon(!1),e.state=B.running})}_mj$executeUpdate$int$string(e,i,n){if(n=n.trim(),n.toLocaleLowerCase().startsWith("select"))throw new F(o.statementExecuteUpdateException());e.scheduler.interpreter.showProgramPointer(void 0,"DatabaseManager"),this.connection.main.getBottomDiv().showHideDBBusyIcon(!0),e.state=B.waiting,this.connection.executeWriteStatement(n,(s,a)=>{if(s!=null){e.throwRuntimeExceptionOnLastExecutedStep(new F(s));return}e.s.push(a),this.connection.main.getBottomDiv().showHideDBBusyIcon(!1),e.state=B.running})}};r(No,"__javaDeclarations",[{type:"declaration",signature:"class Statement extends Object",comment:o.statementClassComment},{type:"method",signature:"final ResultSet executeQuery(string query)",java:No.prototype._mj$executeQuery$ResultSet$string,comment:o.statementExecuteQueryComment},{type:"method",signature:"final int executeUpdate(string query)",java:No.prototype._mj$executeUpdate$int$string,comment:o.statementExecuteUpdateComment}]);let Md=No;const Va=class Va extends z{constructor(e){super();r(this,"type");r(this,"database");r(this,"databaseData");r(this,"token");r(this,"databaseSSEListener");r(this,"alreadyClosed",!1);r(this,"main");r(this,"skipNextServerSentStatement",!1);this.interpreter=e,this.main=e.getMain(),e.eventManager.once("stop",()=>{this._close()})}_createStatement(){return new Md(this)}_prepareStatement(e){return new jd(this,e)}connect(e,i){let n=this;this.main.networkManager.fetchDatabaseAndToken(e,(s,a,l)=>{l==null?(n.token=a,n.databaseData=s,n.database=new Py(n.main),n.database.initializeWorker(s.templateDump,s.statements,h=>{n.databaseSSEListener=new uo(n.main.networkManager,n.token,s.id,(c,u,g)=>{n.onServerSentStatements(c,u,g)}),i(null)})):i(l)})}_close(){this.databaseSSEListener!=null&&(this.databaseSSEListener.close(),this.databaseSSEListener=null),this.database!=null&&(this.database.close(),this.database=null),this.alreadyClosed=!0}onServerSentStatements(e,i,n){if(this.skipNextServerSentStatement){this.skipNextServerSentStatement=!1;return}if(n!=null){this.databaseData.statements.splice(n),this.database.initializeWorker(this.databaseData.templateDump,this.databaseData.statements);return}else this.executeStatementsFromServer(e,i)}executeStatementsFromServer(e,i,n){if(this.database==null){n&&n("Keine Datenbankverbindung.");return}let a=this.databaseData.statements.length-e+1;if(a>=i.length){n&&n(null);return}i=i.slice(a),this.databaseData.statements=this.databaseData.statements.concat(i),this.database.executeWriteQueries(i,()=>{n!=null&&n(null)},l=>{n!=null&&n(l)})}executeWriteStatement(e,i,n=!1){this.database==null&&i("Es besteht keine Verbindung zur Datenbank.",0);let s=this,a=s.databaseData.statements.length;this.database.executeQuery("explain "+e,()=>{s.skipNextServerSentStatement=!0,s.main.networkManager.addDatabaseStatement(s.token,a,[e],(l,h,c)=>{if(c!=null){i(c,0);return}s.executeStatementsFromServer(a+1,l,u=>{s.database.executeWriteQueries([e],()=>{if(s.databaseData.statements.push(e),!n){i(null,0);return}s.executeQuery("select last_insert_rowid()",(g,f)=>{i(null,f.values[0][0])})},g=>{s.databaseData.statements.push(e),i!=null&&i(g,0),s.main.networkManager.rollbackDatabaseStatement(s.token,s.databaseData.statements.length,()=>{})})})})},l=>{i(l,0)})}executeQuery(e,i){if(this.alreadyClosed)throw new F(o.connectionAlreadyClosedError(),null);if(this.database==null||this.databaseSSEListener==null)throw new F(o.connectionDatabaseConnectionError(),null);this.database.executeQuery(e,n=>{i(null,n.length==0?{columns:[],values:[]}:n[0])},n=>{i(n,null)})}};r(Va,"__javaDeclarations",[{type:"declaration",signature:"class Connection extends Object",comment:o.connectionClassComment},{type:"method",signature:"final Statement createStatement()",native:Va.prototype._createStatement,comment:o.connectionCreateStatementComment},{type:"method",signature:"final PreparedStatement prepareStatement(string query)",native:Va.prototype._prepareStatement,comment:o.connectionPrepareStatementComment},{type:"method",signature:"final void close()",native:Va.prototype._close,comment:o.connectionCloseComment}]);let al=Va;const Xd=class Xd extends z{constructor(){super(...arguments);r(this,"type")}static _mj$getConnection$Connection$string(e,i){let n=e.scheduler.interpreter,s=n.getMain();if(!s||s.isEmbedded())throw new F(o.databaseManagerNotInEmbeddedVersionException());let a=new al(e.scheduler.interpreter);n.showProgramPointer(void 0,"DatabaseManager"),s.getBottomDiv().showHideDBBusyIcon(!0),e.state=B.waiting,a.connect(i,l=>{s.getBottomDiv().showHideDBBusyIcon(!1),l==null?e.s.push(a):e.s.push(null),e.state=B.running})}};r(Xd,"__javaDeclarations",[{type:"declaration",signature:"class DatabaseManager extends Object",comment:o.databaseManagerClassComment},{type:"method",signature:"static Connection getConnection(string code)",java:Xd._mj$getConnection$Connection$string,comment:o.databaseManagerGetConnectionComment}]);let Ou=Xd;class By extends mo{constructor(){super(),this.classesInterfacesEnums.push(Ou,al,Md,jd,sl)}isReplModule(){return!1}getCodeFragments(){return[]}}const rs=class rs extends mi{_mj$AktionAusführen$void$(t,e){throw new Error("Method not implemented.")}_mj$TasteGedrückt$void$char(t,e,i){throw new Error("Method not implemented.")}_mj$SonderTasteGedrückt$void$int(t,e,i){throw new Error("Method not implemented.")}_mj$MausGeklickt$void$int$int$int(t,e,i,n,s){throw new Error("Method not implemented.")}_mj$TaktImpulsAusführen$void$(t,e){throw new Error("Method not implemented.")}_mj$Ausführen$void$(t,e){throw new Error("Method not implemented.")}_mj$Taste$void$char(t,e,i){throw new Error("Method not implemented.")}_mj$SonderTaste$void$int(t,e,i){throw new Error("Method not implemented.")}_mj$Geklickt$void$int$int$int(t,e,i,n,s){throw new Error("Method not implemented.")}};r(rs,"__javaDeclarations",[{type:"declaration",signature:"interface Aktionsempfaenger",comment:"GNG: Interface für die Aktionsausführung"},{type:"method",signature:"void Ausführen()",java:rs.prototype._mj$Ausführen$void$,comment:"Diese Methode wird vom Taktgeber aufgerufen."},{type:"method",signature:"void Taste(char taste)",java:rs.prototype._mj$Taste$void$char,comment:"Wird aufgerufen, wenn eine Taste gedrückt wird."},{type:"method",signature:"void SonderTaste(int sondertaste)",java:rs.prototype._mj$SonderTaste$void$int,comment:"Wird aufgerufen, wenn eine SonderTaste gedrückt wird."},{type:"method",signature:"void Geklickt(int x, int y, int anzahl)",java:rs.prototype._mj$Geklickt$void$int$int$int,comment:"Wird aufgerufen, wenn eine die linke Maustaste gedrückt wird."}]),r(rs,"type");let Vu=rs;var Ns={weiß:16777215,weiss:16777215,rot:16711680,grün:65280,gruen:65280,blau:255,gelb:16776960,magenta:16711935,cyan:65535,hellgelb:16777088,hellgrün:8454016,hellgruen:8454016,orange:16744448,braun:8404992,grau:8421504,schwarz:0};const yi=class yi extends z{constructor(){super(...arguments);r(this,"filledShape");r(this,"moveAnchor",{x:0,y:0});r(this,"width",100);r(this,"height",100);r(this,"colorString","schwarz")}renderGNG(){}get farbe(){return this.colorString}set farbe(e){this._farbeSetzen(e)}get x(){return this.moveAnchor.x}get y(){return this.moveAnchor.y}set x(e){this._positionSetzen(e,this.moveAnchor.y)}set y(e){this._positionSetzen(this.moveAnchor.x,e)}set winkel(e){this._winkelSetzen(e)}get winkel(){return Math.round(this.filledShape.angle)}get größe(){return Math.round(this.width)}get sichtbar(){return this.filledShape.container.visible}set sichtbar(e){this._sichtbarkeitSetzen(e)}setGNGBackgroundColor(){this.filledShape.world.shapesWhichBelongToNoGroup.length==1&&this.filledShape.world._setBackgroundColor("#e6e6e6")}_positionSetzen(e,i){this.moveAnchor.x=e,this.moveAnchor.y=i,this.renderGNG()}_verschieben(e,i){this.moveAnchor.x+=e,this.moveAnchor.y+=i,this.renderGNG()}_drehen(e){this.filledShape.angle+=e,this.filledShape.directionRad+=e/180*Math.PI,this.renderGNG()}_farbeSetzen(e){this.colorString=e,e||(e="schwarz");let i=Ns[e.toLocaleLowerCase()];this.filledShape._setFillColorInt(i),this.filledShape.render()}_winkelSetzen(e){this.filledShape.angle=e,this.filledShape.directionRad=e/180*Math.PI,this.renderGNG()}_sichtbarkeitSetzen(e){this.filledShape._setVisible(e)}_destroy(){this.filledShape.destroy()}_ganzNachVornBringen(){this.filledShape.bringToFront()}_ganzNachHintenBringen(){this.filledShape.sendToBack()}_nachVornBringen(){this.filledShape.bringOnePlaneFurtherToFront()}_nachHintenBringen(){this.filledShape.bringOnePlaneFurtherToBack()}_containsPoint(e,i){return this.filledShape._containsPoint(e,i)}};r(yi,"__javaDeclarations",[{type:"declaration",signature:"abstract class GNGBaseFigur extends Object"},{type:"field",signature:"protected string farbe",comment:"Farbe des Grafikobjekts"},{type:"field",signature:"protected int x",comment:"x-Position des Grafikobjekts"},{type:"field",signature:"protected int y",comment:"y-Position des Grafikobjekts"},{type:"field",signature:"protected int winkel",comment:"Blickrichtung des Grafikobjekts in Grad"},{type:"field",signature:"protected int größe",comment:"Größe des Grafikobjekts (100 entspricht 'normalgroß')"},{type:"field",signature:"protected boolean sichtbar",comment:"true, wenn das Grafikobjekt sichtbar ist"},{type:"method",signature:"void PositionSetzen(int x, int y)",native:yi.prototype._positionSetzen,comment:"Verschiebt die Figur zur Position (x,y). Beim Rechteck führt dies beispielsweise dazu, dass die linke obere Ecke bei (x, y) zu liegen kommt."},{type:"method",signature:"void Verschieben(int deltaX, int deltaY)",native:yi.prototype._verschieben,comment:"Verschiebt die Figur um (x, y)"},{type:"method",signature:"void Drehen(int grad)",native:yi.prototype._drehen,comment:"Dreht die Figur um den angegebenen Winkel. Der Drehpunkt ist abhängig von der Art der Figur."},{type:"method",signature:"void FarbeSetzen(string farbe)",native:yi.prototype._farbeSetzen,comment:"Setzt die Farbe der Figur."},{type:"method",signature:"void WinkelSetzen(int winkel)",native:yi.prototype._winkelSetzen,comment:"Setzt den Drehwinkel der Figur. Der Winkel wird in Grad angegebenen, positive Werte bedeuten eine Drehung gegen den Uhrzeigersinn."},{type:"method",signature:"void SichtbarkeitSetzen(boolean sichtbarkeit)",native:yi.prototype._sichtbarkeitSetzen,comment:"Schaltet die Sichtbarkeit der Figur ein oder aus."},{type:"method",signature:"void Entfernen()",native:yi.prototype._destroy,comment:"Zerstört das Objekt."},{type:"method",signature:"void GanzNachVornBringen()",native:yi.prototype._ganzNachVornBringen,comment:"Setzt das Grafikobjekt vor alle anderen."},{type:"method",signature:"void GanzNachHintenBringen()",native:yi.prototype._ganzNachHintenBringen,comment:"Setzt das Grafikobjekt hinter alle anderen."},{type:"method",signature:"void NachVornBringen()",native:yi.prototype._nachVornBringen,comment:"Setzt das Grafikobjekt eine Ebene nach vorne."},{type:"method",signature:"void NachHintenBringen()",native:yi.prototype._nachHintenBringen,comment:"Setzt das Grafikobjekt eine Ebene nach hinten."}]),r(yi,"type");let Rr=yi;const La=class La extends Rr{get breite(){return Math.round(Math.abs(this.width*this.filledShape.container.scale.x))}get höhe(){return Math.round(Math.abs(this.height*this.filledShape.container.scale.y))}renderGNG(){let t=this.moveAnchor.x,e=this.moveAnchor.y,i=t,n=e+this.height/2;this.filledShape.hitPolygonInitial=[{x:t,y:e},{x:t+this.width/2,y:e+this.height},{x:t-this.width/2,y:e+this.height}],this.filledShape.render();let s=this.filledShape.container;s.localTransform.identity(),s.localTransform.translate(-i,-n),s.localTransform.rotate(-this.filledShape.angle/180*Math.PI),s.localTransform.translate(i,n),s.setFromMatrix(s.localTransform),s.updateLocalTransform(),this.filledShape.setWorldTransformAndHitPolygonDirty()}_cj$_constructor_$Dreieck$(t,e){let i=new da;this.filledShape=i,i._cj$_constructor_$Polygon$boolean$double_I(t,()=>{t.s.pop(),t.s.push(this),this.moveAnchor={x:60,y:10},this.width=100,this.height=100,this.colorString="rot",i.centerXInitial=60,i.centerYInitial=60,i._setFillColorInt(16711680),this.setGNGBackgroundColor(),e&&e()},!0,[60,10,110,110,10,110])}_groesseSetzen(t,e){this.width=t,this.height=e,this.renderGNG()}};r(La,"__javaDeclarations",[{type:"declaration",signature:"class Dreieck extends GNGBaseFigur",comment:"Dreieck-Klasse der Graphics'n Games-Bibliothek (Cornelsen-Verlag)"},{type:"method",signature:"Dreieck()",java:La.prototype._cj$_constructor_$Dreieck$,comment:"Instanziert ein neues Dreieck-Objekt."},{type:"field",signature:"protected int breite",comment:"Breite des Dreiecks"},{type:"field",signature:"protected int höhe",comment:"Höhe des Dreiecks"},{type:"method",signature:"void GrößeSetzen(int breite, int höhe)",native:La.prototype._groesseSetzen,comment:"Setzt die Breite und Höhe des Rechtecks."}]),r(La,"type");let Lu=La;const ai=class ai extends z{constructor(){super(...arguments);r(this,"world")}_cj$_constructor_$Ereignisbehandlung$(e,i){e.s.push(this),this.world=e.scheduler.interpreter.retrieveObject("WorldClass"),this.world?(this.constructorHelper(e),i&&i()):new e.classes.World()._cj$_constructor_$World$(e,()=>{this.world=e.s.pop(),this.constructorHelper(e),i&&i()})}constructorHelper(e){this._mj$TaktImpulsAusführen$void$!=ai.prototype._mj$TaktImpulsAusführen$void$&&this.world.registerGNGEventListener(this,"taktImpulsAusführen"),this._mj$TasteGedrückt$void$char!=ai.prototype._mj$TasteGedrückt$void$char&&this.world.registerGNGEventListener(this,"tasteGedrückt"),this._mj$SonderTasteGedrückt$void$int!=ai.prototype._mj$SonderTasteGedrückt$void$int&&this.world.registerGNGEventListener(this,"sondertasteGedrückt"),this._mj$MausGeklickt$void$int$int$int!=ai.prototype._mj$MausGeklickt$void$int$int$int&&this.world.registerGNGEventListener(this,"mausGeklickt")}_mj$AktionAusführen$void$(e,i){}_mj$TasteGedrückt$void$char(e,i,n){}_mj$SonderTasteGedrückt$void$int(e,i,n){}_mj$MausGeklickt$void$int$int$int(e,i,n,s,a){}_mj$TaktImpulsAusführen$void$(e,i){}_Starten(){this.world.gngEventlistenerManager.startTimer()}_Anhalten(){this.world.gngEventlistenerManager.stopTimer()}_TaktdauerSetzen(e){this.world.gngEventlistenerManager.taktdauer=e}_mj$Ausführen$void$(e,i){throw new Error("Method not implemented.")}_mj$Taste$void$char(e,i,n){throw new Error("Method not implemented.")}_mj$SonderTaste$void$int(e,i,n){throw new Error("Method not implemented.")}_mj$Geklickt$void$int$int$int(e,i,n,s,a){throw new Error("Method not implemented.")}};r(ai,"__javaDeclarations",[{type:"declaration",signature:"class Ereignisbehandlung extends Object",comment:"Zugriff auf Ereignisse einschließlich Taktgeber (Graphics'n Games-Bibliothek (Cornelsen-Verlag))"},{type:"method",signature:"Ereignisbehandlung()",java:ai.prototype._cj$_constructor_$Ereignisbehandlung$,comment:"Instanziert ein neues Ereignisbehandlungs-Objekt."},{type:"method",signature:"void Starten()",native:ai.prototype._Starten,comment:"Zeitgeber starten."},{type:"method",signature:"void Anhalten()",native:ai.prototype._Anhalten,comment:"Zeitgeber anhalten."},{type:"method",signature:"void TaktdauerSetzen(int dauer)",native:ai.prototype._TaktdauerSetzen,comment:"Setzt die Taktdauer des Zeitgebers in Millisekunden."},{type:"method",signature:"void TaktImpulsAusführen()",java:ai.prototype._mj$TaktImpulsAusführen$void$,comment:"Diese Methode wird vom Taktgeber aufgerufen."},{type:"method",signature:"void TasteGedrückt(char taste)",java:ai.prototype._mj$TasteGedrückt$void$char,comment:"Wird aufgerufen, wenn eine Taste gedrückt wird."},{type:"method",signature:"void SonderTasteGedrückt(int sondertaste)",java:ai.prototype._mj$SonderTasteGedrückt$void$int,comment:"Wird aufgerufen, wenn eine SonderTaste gedrückt wird."},{type:"method",signature:"void MausGeklickt(int x, int y, int anzahl)",java:ai.prototype._mj$MausGeklickt$void$int$int$int,comment:"Wird aufgerufen, wenn eine die linke Maustaste gedrückt wird."}]),r(ai,"type");let Fu=ai;const Ae=class Ae extends z{constructor(){super(...arguments);r(this,"group");r(this,"center",{x:100,y:200});r(this,"isInitialTriangle",!1)}get x(){return this.center.x}get y(){return this.center.y}set x(e){this._positionSetzen(e,this.center.y)}set y(e){this._positionSetzen(this.center.x,e)}get winkel(){return this._winkelGeben()}set winkel(e){this._winkelSetzen(e)}get größe(){return Math.round(this.group.scaleFactor*100)}set größe(e){this._groesseSetzen(e)}get sichtbar(){return this.group.container.visible}set sichtbar(e){this._sichtbarkeitSetzen(e)}_cj$_constructor_$Figur$(e,i){this.group=new vs,this.group._cj$_constructor_$Group$(e,()=>{e.s.pop(),e.s.push(this),this.setGNGBackgroundColor(),this.drawInitialTriangle(e,()=>{i&&i()},this.center),this._mj$AktionAusführen$void$!=Ae.prototype._mj$AktionAusführen$void$&&this.group.world.registerGNGEventListener(this,"aktionAusführen"),this._mj$TasteGedrückt$void$char!=Ae.prototype._mj$TasteGedrückt$void$char&&this.group.world.registerGNGEventListener(this,"tasteGedrückt"),this._mj$SonderTasteGedrückt$void$int!=Ae.prototype._mj$SonderTasteGedrückt$void$int&&this.group.world.registerGNGEventListener(this,"sondertasteGedrückt"),this._mj$MausGeklickt$void$int$int$int!=Ae.prototype._mj$MausGeklickt$void$int$int$int&&this.group.world.registerGNGEventListener(this,"mausGeklickt")})}setGNGBackgroundColor(){this.group.world.shapesWhichBelongToNoGroup.length==1&&this.group.world._setBackgroundColor("#e6e6e6")}drawInitialTriangle(e,i,n){this.group._scale(1/this.group.scaleFactor);let s=new da;s._cj$_constructor_$Polygon$boolean$double_I(e,()=>{e.s.pop(),s._move(n.x,n.y),s._setFillColorString("yellow"),s._setBorderColorString("black"),s._setBorderWidth(2),this.group.add(s);let a=new Xo;a._cj$_constructor_$Circle$double$double$double(e,()=>{e.s.pop(),a._move(n.x,n.y),a._setFillColorString("blue"),a._setBorderColorString("black"),a._setBorderWidth(2),this.group.add(a),this.isInitialTriangle=!0,this.group._scale(.4,n.x,n.y),i&&i()},0,0,10)},!0,[-50,-50,50,0,-50,50])}_groesseSetzen(e){let i=e/100;this.group._scale(i/this.group.scaleFactor,this.center.x,this.center.y)}_drehen(e){this.group._rotate(e,this.center.x,this.center.y)}_gehen(e){let i=this.group.angle/180*Math.PI,n=e*Math.cos(i),s=e*Math.sin(-i);this.center.x+=n,this.center.y+=s,this.group._move(n,s)}_positionSetzen(e,i){this.group._move(e-this.center.x,i-this.center.y),this.center.x=e,this.center.y=i}_zumStartpunktGehen(){this._positionSetzen(100,200)}_winkelSetzen(e){this._drehen(e-this.group.angle)}_winkelGeben(){return this.group.angle<0&&(this.group.angle+=360*Math.ceil(this.group.angle/-360)),this.group.angle>=360&&(this.group.angle-=360*Math.floor(this.group.angle/360)),Math.round(this.group.angle)}_sichtbarkeitSetzen(e){this.group._setVisible(e)}_entfernen(){this.group.world.unRegisterGNGEventListener(this,"aktionAusführen"),this.group.world.unRegisterGNGEventListener(this,"tasteGedrückt"),this.group.world.unRegisterGNGEventListener(this,"sondertasteGedrückt"),this.group.world.unRegisterGNGEventListener(this,"mausGeklickt"),this.group.destroy()}_ganzNachVornBringen(){this.group.bringToFront()}_ganzNachHintenBringen(){this.group.sendToBack()}_nachVornBringen(){this.group.bringOnePlaneFurtherToFront()}_nachHintenBringen(){this.group.bringOnePlaneFurtherToBack()}_mj$eigeneFigurLoeschen$void$(e,i){this.group.destroyAllChildren()}_beruehrt(){for(let e of this.group.world.shapesWhichBelongToNoGroup)if(e!=this.group&&e._collidesWith(this.group))return!0;return!1}_beruehrtFarbe(e){let i=Ns[e];i==null&&(i=0);for(let n of this.group.world.shapesWhichBelongToNoGroup)if(n!=this.group){if(n instanceof vs){for(let s of n.shapes)if(s instanceof jt&&i==s.fillColor&&this.group._collidesWith(s))return!0}else if(n instanceof jt&&i==n.fillColor&&this.group._collidesWith(n))return!0}return!1}_beruehrtObjekt(e){return e instanceof Ae?this.group._collidesWith(e.group):e instanceof Rr?this.group._collidesWith(e.filledShape):!1}_j_figurteilFestlegenDreieck(e,i,n,s,a,l,h,c,u){let g=Ns[u];g==null&&(g=0),this.isInitialTriangle&&this.group.destroyAllChildren(),this.isInitialTriangle=!1;let f=new da;f._cj$_constructor_$Polygon$boolean$double_I(e,()=>{f._rotate(this.group.angle,0,0),f._scale(this.group.scaleFactor,0,0),f._move(this.center.x,this.center.y),f._setFillColorInt(g),f._setBorderColorString("black"),f._setBorderWidth(2),this.group.add(f),i&&i()},!0,[n,s,a,l,h,c],!0)}_j_figurteilFestlegenRechteck(e,i,n,s,a,l,h){let c=Ns[h];c==null&&(c=0),this.isInitialTriangle&&this.group.destroyAllChildren(),this.isInitialTriangle=!1;let u=new el;u._cj$_constructor_$Rectangle$double$double$double$double(e,()=>{u._rotate(this.group.angle,0,0),u._scale(this.group.scaleFactor,0,0),u._move(this.center.x,this.center.y),u._setFillColorInt(c),u._setBorderColorString("black"),u._setBorderWidth(2),this.group.add(u),i&&i()},n+.05,s+.05,a-.1,l-.1)}_j_figurteilFestlegenEllipse(e,i,n,s,a,l,h){let c=Ns[h];c==null&&(c=0),this.isInitialTriangle&&this.group.destroyAllChildren(),this.isInitialTriangle=!1,l=l-.1,a=a-.1;let u=new sd;u._cj$_constructor_$Ellipse$double$double$double$double(e,()=>{u._rotate(this.group.angle,0,0),u._scale(this.group.scaleFactor,0,0),u._move(this.center.x,this.center.y),u._setFillColorInt(c),u._setBorderColorString("black"),u._setBorderWidth(2),this.group.add(u),i&&i()},n+a/2+.05,s+l/2+.05,a/2,l/2)}_mj$AktionAusführen$void$(e,i){throw new Error("Method not implemented.")}_mj$TasteGedrückt$void$char(e,i,n){throw new Error("Method not implemented.")}_mj$SonderTasteGedrückt$void$int(e,i,n){throw new Error("Method not implemented.")}_mj$MausGeklickt$void$int$int$int(e,i,n,s,a){throw new Error("Method not implemented.")}_mj$TaktImpulsAusführen$void$(e,i){throw new Error("Method not implemented.")}_mj$Ausführen$void$(e,i){throw new Error("Method not implemented.")}_mj$Taste$void$char(e,i,n){throw new Error("Method not implemented.")}_mj$SonderTaste$void$int(e,i,n){throw new Error("Method not implemented.")}_mj$Geklickt$void$int$int$int(e,i,n,s,a){throw new Error("Method not implemented.")}_containsPoint(e,i){return this.group._containsPoint(e,i)}};r(Ae,"__javaDeclarations",[{type:"declaration",signature:"class Figur extends Object",comment:"Figur-Klasse der Graphics'n Games-Bibliothek (Cornelsen-Verlag)"},{type:"method",signature:"Figur()",java:Ae.prototype._cj$_constructor_$Figur$,comment:"Instanziert ein neues, achsenparalleles Figur-Objekt."},{type:"field",signature:"int x",template:"§1.x",comment:"x-Position der Figur"},{type:"field",signature:"int y",template:"§1.y",comment:"y-Position der Figur"},{type:"field",signature:"int winkel",template:"§1.winkel",comment:"Blickrichtung der Figur in Grad"},{type:"field",signature:"int größe",template:"§1.größe",comment:"Größe der Figur (100 entspricht 'normalgroß')"},{type:"field",signature:"boolean sichtbar",template:"§1.sichtbar",comment:"true, wenn die Figur sichtbar ist"},{type:"method",signature:"void GrößeSetzen(int größe)",native:Ae.prototype._groesseSetzen,comment:"Setzt die Größe der Figur."},{type:"method",signature:"void Drehen(int grad)",native:Ae.prototype._drehen,comment:"Dreht die Figur um den angegebenen Winkel. Positiver Winkel bedeutet Drehung gegen den Uhrzeigersinn."},{type:"method",signature:"void Gehen(double länge)",native:Ae.prototype._gehen,comment:"Bewirkt, dass die Figur um die angegebene Länge 'nach vorne' geht."},{type:"method",signature:"void PositionSetzen(int x, int y)",native:Ae.prototype._positionSetzen,comment:"Verschiebt die Figur an die Position (x, y)."},{type:"method",signature:"void ZumStartpunktGehen()",native:Ae.prototype._zumStartpunktGehen,comment:"Verschiebt die Figur an die Position (100, 200)."},{type:"method",signature:"void WinkelSetzen(int winkel)",native:Ae.prototype._winkelSetzen,comment:"Dreht die Figur so, dass der Blickwinkel der Figur in die angegebene Richtung zeigt. 0° => nach rechts (initial), 90°: => nach oben, usw."},{type:"method",signature:"int WinkelGeben()",native:Ae.prototype._winkelGeben,comment:"Gibt den Blickwinkel der Figur zurück."},{type:"method",signature:"int XPositionGeben()",template:"§1.center.x",comment:"Gibt x-Position der Figur zurück."},{type:"method",signature:"int YPositionGeben()",template:"§1.center.y",comment:"Gibt y-Position der Figur zurück."},{type:"method",signature:"void SichtbarkeitSetzen(boolean isSichtbar)",native:Ae.prototype._sichtbarkeitSetzen,comment:"Schaltet die Sichtbarkeit der Figur ein oder aus."},{type:"method",signature:"void Entfernen()",native:Ae.prototype._entfernen,comment:"Entfernt die Figur aus dem Zeichenfenster."},{type:"method",signature:"void GanzNachVornBringen()",native:Ae.prototype._ganzNachVornBringen,comment:"Setzt das Grafikobjekt vor alle anderen."},{type:"method",signature:"void GanzNachHintenBringen()",native:Ae.prototype._ganzNachHintenBringen,comment:"Setzt das Grafikobjekt hinter alle anderen."},{type:"method",signature:"void NachVornBringen()",native:Ae.prototype._nachVornBringen,comment:"Setzt das Grafikobjekt eine Ebene nach vorne."},{type:"method",signature:"void NachHintenBringen()",native:Ae.prototype._nachHintenBringen,comment:"Setzt das Grafikobjekt eine Ebene nach hinten."},{type:"method",signature:"void EigeneFigurLöschen()",java:Ae.prototype._mj$eigeneFigurLoeschen$void$,comment:"Löscht die hinzugefügten Figuren"},{type:"method",signature:"boolean Berührt()",native:Ae.prototype._beruehrt,comment:"Gibt genau dann true zurück, wenn die Figur mit irgendeinem anderen graphischen Objekt kollidiert."},{type:"method",signature:"boolean Berührt(string farbe)",native:Ae.prototype._beruehrtFarbe,comment:"Gibt genau dann true zurück, wenn die Figur mit einem graphischen Objekt der angegebenen Farbe kollidiert."},{type:"method",signature:"boolean Berührt(Object objekt)",native:Ae.prototype._beruehrtObjekt,comment:"Gibt genau dann true zurück, wenn die Figur mit dem übergebenen graphischen Objekt kollidiert."},{type:"method",signature:"void FigurteilFestlegenDreieck(int x1, int y1, int x2, int y2, int x3, int y3, string farbe)",java:Ae.prototype._j_figurteilFestlegenDreieck,comment:"Erzeugt ein neues, dreieckiges Element und fügt es der Figur hinzu."},{type:"method",signature:"void FigurteilFestlegenRechteck(int x, int y, int breite, int höhe, string farbe)",java:Ae.prototype._j_figurteilFestlegenRechteck,comment:"Erzeugt ein neues, rechteckiges Element einer eigenen Darstellung der Figur."},{type:"method",signature:"void FigurteilFestlegenEllipse(int x, int y, int breite, int höhe, string farbe)",java:Ae.prototype._j_figurteilFestlegenEllipse,comment:"Erzeugt ein neues, elliptisches Element einer eigenen Darstellung der Figur."},{type:"method",signature:"void AktionAusführen()",java:Ae.prototype._mj$AktionAusführen$void$,comment:"Diese Methode wird vom Taktgeber aufgerufen."},{type:"method",signature:"void TasteGedrückt(char taste)",java:Ae.prototype._mj$TasteGedrückt$void$char,comment:"Wird aufgerufen, wenn eine Taste gedrückt wird."},{type:"method",signature:"void SonderTasteGedrückt(int sondertaste)",java:Ae.prototype._mj$SonderTasteGedrückt$void$int,comment:"Wird aufgerufen, wenn eine SonderTaste gedrückt wird."},{type:"method",signature:"void MausGeklickt(int x, int y, int anzahl)",java:Ae.prototype._mj$MausGeklickt$void$int$int$int,comment:"Wird aufgerufen, wenn eine die linke Maustaste gedrückt wird."}]),r(Ae,"type");let Pd=Ae;const Fa=class Fa extends Rr{renderGNG(){let t=this.filledShape;t.mx=this.moveAnchor.x,t.my=this.moveAnchor.y,t.radius=this.width/2,t.render()}_cj$_constructor_$Kreis$(t,e){let i=new Xo;this.filledShape=i,i._cj$_constructor_$Circle$double$double$double(t,()=>{t.s.pop(),t.s.push(this),this.moveAnchor={x:60,y:10},this.width=100,this.height=100,this.colorString="rot",i.centerXInitial=60,i.centerYInitial=60,i._setFillColorInt(16711680),this.setGNGBackgroundColor(),e&&e()},60,60,50)}_radiusSetzen(t){this.width=2*t,this.height=2*t,this.renderGNG()}};r(Fa,"__javaDeclarations",[{type:"declaration",signature:"class Kreis extends GNGBaseFigur",comment:"Kreis-Klasse der Graphics'n Games-Bibliothek (Cornelsen-Verlag)"},{type:"method",signature:"Kreis()",java:Fa.prototype._cj$_constructor_$Kreis$,comment:"Instanziert ein neues Kreis-Objekt."},{type:"method",signature:"void RadiusSetzen(int radius)",native:Fa.prototype._radiusSetzen,comment:"Setzt den Radius des Kreis-Objekts."}]),r(Fa,"type");let _u=Fa;const _a=class _a extends Rr{get breite(){var t,e;return(e=(t=this.filledShape)==null?void 0:t.container)!=null&&e.scale?Math.round(Math.abs(this.width*this.filledShape.container.scale.x)):0}get höhe(){var t,e;return(e=(t=this.filledShape)==null?void 0:t.container)!=null&&e.scale?Math.round(Math.abs(this.height*this.filledShape.container.scale.y)):0}renderGNG(){let t=this.filledShape,e=this.moveAnchor.x+this.width/2,i=this.moveAnchor.y+this.height/2;t.left=this.moveAnchor.x,t.top=this.moveAnchor.y,t.width=this.width,t.height=this.height,t.calculateHitPolygonInitial(),t.render(),t.container.localTransform.identity(),t.container.localTransform.translate(-e,-i),t.container.localTransform.rotate(-this.filledShape.angle/180*Math.PI),t.container.localTransform.translate(e,i),t.container.setFromMatrix(t.container.localTransform),t.container.updateLocalTransform(),t.setWorldTransformAndHitPolygonDirty()}_cj$_constructor_$Rechteck$(t,e){let i=new el;this.filledShape=i,i._cj$_constructor_$Rectangle$double$double$double$double(t,()=>{t.s.pop(),t.s.push(this),this.moveAnchor={x:10,y:10},this.width=100,this.height=100,this.colorString="rot",i._setFillColorInt(16711680),this.setGNGBackgroundColor(),e&&e()},10,10,100,100)}_groesseSetzen(t,e){this.width=t,this.height=e,this.renderGNG()}};r(_a,"__javaDeclarations",[{type:"declaration",signature:"class Rechteck extends GNGBaseFigur",comment:"Rechteck-Klasse der Graphics'n Games-Bibliothek (Cornelsen-Verlag)"},{type:"method",signature:"Rechteck()",java:_a.prototype._cj$_constructor_$Rechteck$,comment:"Instanziert ein neues, achsenparalleles Rechteck-Objekt."},{type:"field",signature:"protected int breite",comment:"Breite des Recthecks"},{type:"field",signature:"protected int höhe",comment:"Höhe des Rechtecks"},{type:"method",signature:"void GrößeSetzen(int breite, int höhe)",native:_a.prototype._groesseSetzen,comment:"Setzt die Breite und Höhe des Rechtecks."}]),r(_a,"type");let zu=_a;const $r=class $r extends Rr{get text(){return this.filledShape.text}get textgroesse(){return this.filledShape.fontsize}renderGNG(){let t=this.filledShape;t.x=this.moveAnchor.x,t.y=this.moveAnchor.y-t.fontsize,this.filledShape.render();let e=t.x+t.centerXInitial,i=t.y+t.centerYInitial,n=t.container;n.localTransform.identity(),n.localTransform.translate(-t.centerXInitial,-t.centerYInitial),n.localTransform.rotate(-t.angle/180*Math.PI),n.localTransform.translate(e,i),n.setFromMatrix(n.localTransform),n.updateLocalTransform(),t.setWorldTransformAndHitPolygonDirty()}_cj$_constructor_$GText$(t,e){let i=new md;this.filledShape=i,i._cj$_constructor_$Text$double$double$double$string(t,()=>{t.s.pop(),t.s.push(this),this.moveAnchor={x:10,y:10},this.width=100,this.height=100,this.colorString="schwarz",i.centerXInitial=60,i.centerYInitial=60,i._setFillColorInt(0),this.setGNGBackgroundColor(),e&&e()},10,-3,12,"Text")}_textSetzen(t){this.filledShape.text=t,this.renderGNG()}_textGroesseSetzen(t){this.filledShape.fontsize=t,this.renderGNG()}_textVergroessern(){let t=this.filledShape.fontsize;t<=10?t+=1:t<=40?t+=2:t+=4,this._textGroesseSetzen(t)}_textVerkleinern(){let t=this.filledShape.fontsize;t<=10?t-=1:t<=40?t-=2:t-=4,t<1&&(t=1),this._textGroesseSetzen(t)}};r($r,"__javaDeclarations",[{type:"declaration",signature:"class GText extends GNGBaseFigur",comment:"Text-Klasse der Graphics'n Games-Bibliothek (Cornelsen-Verlag)"},{type:"method",signature:"GText()",java:$r.prototype._cj$_constructor_$GText$,comment:"Instanziert ein neues Text-Objekt."},{type:"field",signature:"protected string text",comment:"Angezeigter Text"},{type:"field",signature:"protected int textgröße",nativeIdentifier:"textgroesse",comment:"Textgröße"},{type:"method",signature:"void TextSetzen(string text)",native:$r.prototype._textSetzen,comment:"Ändert den Text des Text-Objekts."},{type:"method",signature:"void TextGrößeSetzen(int textGröße)",native:$r.prototype._textGroesseSetzen,comment:"Setzt die Schriftgröße des Text-Objekts."},{type:"method",signature:"void TextVergrößern()",native:$r.prototype._textVergroessern,comment:"Vergrößert die Schriftgröße des Text-Objekts."},{type:"method",signature:"void TextVerkleinern()",native:$r.prototype._textVerkleinern,comment:"Verkleinert die Schriftgröße des Text-Objekts."},{type:"method",signature:"string getText()",template:"§1.text",comment:"Gibt den Textinhalt zurück."}]),r($r,"type");let qu=$r;const ye=class ye extends z{constructor(){super(...arguments);r(this,"turtle");r(this,"moveAnchor",{x:0,y:0});r(this,"colorString","schwarz")}get x(){return this.turtle.getPosition().x}get y(){return this.turtle.getPosition().y}get winkel(){return Math.round(this.turtle.angle)}get größe(){return this.turtle.turtleSize}get sichtbar(){return this.turtle.container.visible}get stiftUnten(){return this.turtle.penIsDown}set stiftUnten(e){this.turtle.penIsDown=e}set größe(e){this._groesseSetzen(e)}set sichtbar(e){this._sichtbarkeitSetzen(e)}set x(e){this.turtle._moveTo(e,this.moveAnchor.y)}set y(e){this.turtle._moveTo(this.moveAnchor.x,e)}set winkel(e){this._winkelSetzen(e)}_cj$_constructor_$GTurtle$(e,i){this.turtle=new pd,this.turtle._cj$_constructor_$Turtle$double$double(e,()=>{e.s.pop(),e.s.push(this),this.turtle.borderWidth=1,this.turtle.showTurtle=!0,this.turtle._setBorderColorInt(0),this.turtle.render(),this.moveAnchor={x:10,y:10},this.setGNGBackgroundColor(),i&&i(),this._mj$AktionAusführen$void$!=ye.prototype._mj$AktionAusführen$void$&&this.turtle.world.registerGNGEventListener(this,"aktionAusführen"),this._mj$TasteGedrückt$void$char!=ye.prototype._mj$TasteGedrückt$void$char&&this.turtle.world.registerGNGEventListener(this,"tasteGedrückt"),this._mj$SonderTasteGedrückt$void$int!=ye.prototype._mj$SonderTasteGedrückt$void$int&&this.turtle.world.registerGNGEventListener(this,"sondertasteGedrückt"),this._mj$MausGeklickt$void$int$int$int!=ye.prototype._mj$MausGeklickt$void$int$int$int&&this.turtle.world.registerGNGEventListener(this,"mausGeklickt")},100,200)}setGNGBackgroundColor(){this.turtle.world.shapesWhichBelongToNoGroup.length==1&&this.turtle.world._setBackgroundColor("#e6e6e6")}_groesseSetzen(e){this.turtle.turtleSize=e,this.turtle.borderWidth=e/100,this.turtle.moveTurtleTo(0,0,0),this.turtle.initTurtle(0,0,this.turtle.angle),this.turtle.moveTurtleTo(this.turtle.lineElements[this.turtle.lineElements.length-1].x,this.turtle.lineElements[this.turtle.lineElements.length-1].y,this.turtle.angle),this.turtle._turn(0)}_farbeSetzen(e){this.colorString=e,e||(e="schwarz");let i=Ns[e.toLocaleLowerCase()];this.turtle._setBorderColorInt(i)}_ganzNachVornBringen(){this.turtle.bringToFront()}_ganzNachHintenBringen(){this.turtle.sendToBack()}_nachVornBringen(){this.turtle.bringOnePlaneFurtherToFront()}_nachHintenBringen(){this.turtle.bringOnePlaneFurtherToBack()}_touchesShape(e){let i=this.turtle.lineElements[this.turtle.lineElements.length-1],n=i.x,s=i.y;return e instanceof Hi||e instanceof Rr||e instanceof Pd||e instanceof ye?e._containsPoint(n,s):!1}_mj$AktionAusführen$void$(e,i){throw new Error("Method not implemented.")}_mj$TasteGedrückt$void$char(e,i,n){throw new Error("Method not implemented.")}_mj$SonderTasteGedrückt$void$int(e,i,n){throw new Error("Method not implemented.")}_mj$MausGeklickt$void$int$int$int(e,i,n,s,a){throw new Error("Method not implemented.")}_mj$TaktImpulsAusführen$void$(e,i){throw new Error("Method not implemented.")}_mj$Ausführen$void$(e,i){throw new Error("Method not implemented.")}_mj$Taste$void$char(e,i,n){throw new Error("Method not implemented.")}_mj$SonderTaste$void$int(e,i,n){throw new Error("Method not implemented.")}_mj$Geklickt$void$int$int$int(e,i,n,s,a){throw new Error("Method not implemented.")}_containsPoint(e,i){return this.turtle._containsPoint(e,i)}_entfernen(){this.turtle.world.unRegisterGNGEventListener(this,"aktionAusführen"),this.turtle.world.unRegisterGNGEventListener(this,"tasteGedrückt"),this.turtle.world.unRegisterGNGEventListener(this,"sondertasteGedrückt"),this.turtle.world.unRegisterGNGEventListener(this,"mausGeklickt"),this.turtle.destroy()}_touchesColor(e){let i=Ns[e];return this.turtle.touchesColor(i)}_drehen(e){this.turtle._turn(e)}_gehen(e){this.turtle._forward(e)}_stiftHeben(){this.turtle.penIsDown=!1}_stiftSenken(){this.turtle.penIsDown=!0}_löschen(){this.turtle._clear(100,200,0)}_positionSetzen(e,i){this.turtle._moveTo(e,i)}_winkelSetzen(e){this.turtle._setAngle(e)}_sichtbarkeitSetzen(e){this.turtle._setVisible(e)}_zumStartpunktGehen(){this.turtle._moveTo(100,200)}_xPositionGeben(){return this.turtle.getPosition().x}_yPositionGeben(){return this.turtle.getPosition().y}_winkelgeben(){return-this.turtle.turtleAngleDeg}_beruehrt(){return this.turtle.touchesAtLeastOneFigure()}};r(ye,"__javaDeclarations",[{type:"declaration",signature:"class GTurtle extends Object",comment:"Turtle-Klasse der Graphics'n Games-Bibliothek (Cornelsen-Verlag)"},{type:"field",signature:"protected int x",template:"§1.x",comment:"x-Position des Grafikobjekts"},{type:"field",signature:"protected int y",template:"§1.y",comment:"y-Position des Grafikobjekts"},{type:"field",signature:"protected int winkel",template:"§1.winkel",comment:"Blickrichtung des Grafikobjekts in Grad"},{type:"field",signature:"protected int größe",template:"§1.größe",comment:"Größe des Grafikobjekts (100 entspricht 'normalgroß')"},{type:"field",signature:"protected boolean sichtbar",template:"§1.sichtbar",comment:"true, wenn das Grafikobjekt sichtbar ist"},{type:"field",signature:"protected boolean stiftUnten",template:"§1.stiftUnten",comment:"true, wenn die Turtle beim Gehen zeichnet"},{type:"method",signature:"GTurtle()",java:ye.prototype._cj$_constructor_$GTurtle$,comment:"Instanziert ein neues Turtle-Objekt."},{type:"method",signature:"void GrößeSetzen(int größe)",native:ye.prototype._groesseSetzen,comment:"Setzt die Größe des Turtle-Dreiecks."},{type:"method",signature:"void FarbeSetzen(string farbe)",native:ye.prototype._farbeSetzen,comment:"Setzt die Zeichenfarbe des Turtle-Dreiecks."},{type:"method",signature:"void Drehen(int winkelInGrad)",native:ye.prototype._drehen,comment:"Dreht die Turtle um den angegebenen Winkel. Positiver Winkel bedeutet Drehung gegen den Uhrzeigersinn."},{type:"method",signature:"void Gehen(double länge)",native:ye.prototype._gehen,comment:"Bewirkt, dass die Turtle um die angegebene Länge nach vorne geht."},{type:"method",signature:"void StiftHeben()",native:ye.prototype._stiftHeben,comment:"Bewirkt, dass die Turtle beim Gehen ab jetzt nicht mehr zeichnet."},{type:"method",signature:"void StiftSenken()",native:ye.prototype._stiftSenken,comment:"Bewirkt, dass die Turtle beim Gehen ab jetzt wieder zeichnet."},{type:"method",signature:"void Löschen()",native:ye.prototype._löschen,comment:"Löscht alles von der Turtle gezeichnete und versetzt die Turtle in den Ausgangszustand."},{type:"method",signature:"void PositionSetzen(int x, int y)",native:ye.prototype._positionSetzen,comment:"Verschiebt die Turtle an die Position (x, y) ohne eine neue Linie zu zeichnen."},{type:"method",signature:"void ZumStartpunktGehen()",native:ye.prototype._zumStartpunktGehen,comment:"Verschiebt die Turtle an die Position (100, 200) ohne eine neue Linie zu zeichnen."},{type:"method",signature:"void WinkelSetzen(int winkelInGrad)",native:ye.prototype._winkelSetzen,comment:"Setzt den Blickwinkel der Turtle. 0° => nach rechts, 90°: => nach oben, usw.."},{type:"method",signature:"int WinkelGeben()",native:ye.prototype._winkelgeben,comment:"Gibt den Blickwinkel der Turtle zurück."},{type:"method",signature:"int XPositionGeben()",native:ye.prototype._xPositionGeben,comment:"Gibt x-Position der Turtle zurück."},{type:"method",signature:"int YPositionGeben()",native:ye.prototype._yPositionGeben,comment:"Gibt y-Position der Turtle zurück."},{type:"method",signature:"void SichtbarkeitSetzen(boolean sichtbarkeit)",native:ye.prototype._sichtbarkeitSetzen,comment:"Schaltet die Sichtbarkeit der Figur ein oder aus."},{type:"method",signature:"void Entfernen()",native:ye.prototype._entfernen,comment:"Entfernt die Figur von der Zeichenfläche."},{type:"method",signature:"void GanzNachVornBringen()",native:ye.prototype._ganzNachVornBringen,comment:"Setzt das Grafikobjekt vor alle anderen."},{type:"method",signature:"void GanzNachHintenBringen()",native:ye.prototype._ganzNachHintenBringen,comment:"Setzt das Grafikobjekt hinter alle anderen."},{type:"method",signature:"void NachVornBringen()",native:ye.prototype._nachVornBringen,comment:"Setzt das Grafikobjekt eine Ebene nach vorne."},{type:"method",signature:"void NachHintenBringen()",native:ye.prototype._nachHintenBringen,comment:"Setzt das Grafikobjekt eine Ebene nach hinten."},{type:"method",signature:"boolean Berührt()",native:ye.prototype._beruehrt,comment:"Gibt genau dann true zurück, wenn sich an der aktuellen Position der Turtle mindestens eine andere Figur befindet."},{type:"method",signature:"boolean Berührt(Object object)",native:ye.prototype._touchesShape,comment:"Gibt genau dann true zurück, wenn sich an der aktuellen Position der Turtle mindestens eine andere Figur mit der angegebenen Farbe befindet."},{type:"method",signature:"boolean Berührt(string farbe)",native:ye.prototype._touchesColor,comment:"Gibt genau dann true zurück, wenn die übergebene Figur die aktuelle Turtleposition enthält."},{type:"method",signature:"void AktionAusführen()",java:ye.prototype._mj$AktionAusführen$void$,comment:"Diese Methode wird vom Taktgeber aufgerufen."},{type:"method",signature:"void TasteGedrückt(char taste)",java:ye.prototype._mj$TasteGedrückt$void$char,comment:"Wird aufgerufen, wenn eine Taste gedrückt wird."},{type:"method",signature:"void SonderTasteGedrückt(int sondertaste)",java:ye.prototype._mj$SonderTasteGedrückt$void$int,comment:"Wird aufgerufen, wenn eine SonderTaste gedrückt wird."},{type:"method",signature:"void MausGeklickt(int x, int y, int anzahl)",java:ye.prototype._mj$MausGeklickt$void$int$int$int,comment:"Wird aufgerufen, wenn eine die linke Maustaste gedrückt wird."}]);let Wu=ye;const oi=class oi extends z{static getWorld(t,e){let i=t.scheduler.interpreter.retrieveObject("WorldClass");i?e&&e(i):new t.classes.World()._cj$_constructor_$World$(t,()=>{i=t.s.pop(),e&&e(i)})}static _mj$MalflächenBreiteGeben$int$(t){let e=t.scheduler.interpreter.retrieveObject("WorldClass");return e?e.currentWidth:800}static _mj$MalflächenHöheGeben$int$(t){let e=t.scheduler.interpreter.retrieveObject("WorldClass");return e?e.currentHeight:600}static _mj$AktionsEmpfängerEintragen$void$Aktionsempfaenger(t,e){oi.getWorld(t,i=>{let n=["ausführen","taste","sondertaste","geklickt"];for(let s of n)i.gngEventlistenerManager.registerEventlistener(e,s)})}static _mj$AktionsEmpfängerEntfernen$void$Aktionsempfaenger(t,e){oi.getWorld(t,i=>{let n=["ausführen","taste","sondertaste","geklickt"];for(let s of n)i.gngEventlistenerManager.removeEventlistener(e,s)})}static _mj$TaktgeberStarten$void$(t){oi.getWorld(t,e=>{e.gngEventlistenerManager.startTimer()})}static _mj$TaktgeberStoppen$void$(t){oi.getWorld(t,e=>{e.gngEventlistenerManager.stopTimer()})}static _mj$TaktdauerSetzen$void$int(t,e){oi.getWorld(t,i=>{i.gngEventlistenerManager.taktdauer=e})}};r(oi,"__javaDeclarations",[{type:"declaration",signature:"class Zeichenfenster extends Object",comment:"Grafische Zeichenfläche mit Koordinatensystem"},{type:"method",signature:"static int MalflächenBreiteGeben()",java:oi._mj$MalflächenBreiteGeben$int$,comment:"Gibt die Breite des Zeichenbereichs in Pixeln zurück."},{type:"method",signature:"static int MalflächenHöheGeben()",java:oi._mj$MalflächenHöheGeben$int$,comment:"Gibt die Höhe des Zeichenbereichs in Pixeln zurück."},{type:"method",signature:"static void AktionsEmpfängerEintragen(Aktionsempfaenger aktionsempfaenger)",java:oi._mj$AktionsEmpfängerEintragen$void$Aktionsempfaenger,comment:"Trägt einen neuen Aktionsempfänger ein."},{type:"method",signature:"static void AktionsEmpfängerEntfernen(Aktionsempfaenger aktionsempfaenger)",java:oi._mj$AktionsEmpfängerEntfernen$void$Aktionsempfaenger,comment:"Entfernt einen Aktionsempfänger."},{type:"method",signature:"static void TaktgeberStarten()",java:oi._mj$TaktgeberStarten$void$,comment:"Startet den Taktgeber."},{type:"method",signature:"static void TaktgeberStoppen()",java:oi._mj$TaktgeberStoppen$void$,comment:"Stoppt den Taktgeber."},{type:"method",signature:"static void TaktdauerSetzen(int dauer)",java:oi._mj$TaktdauerSetzen$void$int,comment:"Setzt die Taktdauer des Zeitgebers in Millisekunden."}]),r(oi,"type");let Nu=oi;class Oy extends mo{constructor(){super(),this.classesInterfacesEnums.push(Rr,_u,zu,Lu,qu,Pd,Vu,Nu,Wu,Fu)}isReplModule(){return!1}getCodeFragments(){return[]}}class V{}r(V,"StackClassComment",()=>d({de:"Klasse Stack zur Umsetzung des ADT Stapel entsprechend der Vorgaben des KC Informatik für die gymnasiale Oberstufe in Niedersachsen und den ergänzenden Hinweisen (Stand: Juni 2025)",en:"The class `Stack` implements a stack storage (LIFO - Last In First Out)."})),r(V,"stackClassConstructorComment",()=>d({de:"Ein leerer Stapel wird angelegt.",en:"Constructor of the class `Stack` that creates an empty stack storage."})),r(V,"ElementClassComment",()=>d({de:"Die Klasse `Element` repräsentiert ein Element im Stapelspeicher, dem dynamischen Array (DynArray) oder der Warteschlange (Queue).",en:"The class `Element` represents an element in the stack storage, dynamic array (DynArray), or queue."})),r(V,"stackClassIsEmptyComment",()=>d({de:"Es wird geprüft, ob der Stapel leer ist. Gibt genau dann true zurück, wenn kein Element im Stapel enthalten ist.",en:"Returns true if there are no elements in the stack."})),r(V,"stackClassEmptyExceptionMessageTop",()=>d({de:"Der Stapel ist leer. Es kann kein Wert ausgelesen werden.",en:"The stack is empty. No value can be read."})),r(V,"stackClassEmptyExceptionMessagePop",()=>d({de:"Der Stapel ist leer. Es kann kein Wert entnommen werden.",en:"The stack is empty. No value can be popped."})),r(V,"mustNotPushNullExceptionMessage",()=>d({de:"Der übergebene Inhalt darf nicht 'null' sein.",en:"No null value may be pushed onto the stack."})),r(V,"stackClassPushComment",()=>d({de:"Ein neues Element mit dem übergebenen Inhalt wird auf dem Stapel abgelegt. Löst eine IllegalArgumentException aus, falls das übergebene Element 'null' ist.",en:"Adds a new element on top of the stack storage."})),r(V,"stackClassPopComment",()=>d({de:"Das oberste Element des Stapels wird entnommen und dessen Inhalt zurückgegeben. Löst eine IllegalStateException aus, falls der Stapel leer ist.",en:"Removes the top element from the stack storage."})),r(V,"stackClassTopComment",()=>d({de:"Der Inhalt des obersten Elements des Stapels wird ausgelesen. Das Element wird dabei nicht aus dem Stapel entfernt. Löst eine IllegalStateException aus, falls der Stapel leer ist.",en:"Returns the top element of the stack storage without removing it."})),r(V,"queueClassComment",()=>d({de:"Klasse Queue zur Umsetzung des ADT Schlange entsprechend der Vorgaben des KC Informatik für die gymnasiale Oberstufe in Niedersachsen und den ergänzenden Hinweisen (Stand: Juni 2025)",en:"The class `Queue` implements a queue storage (FIFO - First In First Out)."})),r(V,"queueClassConstructorComment",()=>d({de:"Eine leere Schlange wird angelegt.",en:"Constructor of the class `Queue` that creates an empty queue."})),r(V,"queueClassIsEmptyComment",()=>d({de:"Es wird geprüft, ob die Schlange leer ist. Gibt genau dann true zurück, wenn kein Element in der Schlange enthalten ist.",en:"Returns true if there are no elements in the queue."})),r(V,"queueClassHeadComment",()=>d({de:"Der Inhalt des ersten Elements der Schlange wird ausgelesen. Das Element wird dabei aber nicht aus der Schlange entfernt. Löst eine IllegalStateException aus, falls die Queue leer ist.",en:"Returns the first element of the queue without removing it. Throws a IllegalStateException if the queue is empty."})),r(V,"queueClassEmptyExceptionMessageHead",()=>d({de:"Die Schlange ist leer. Es kann kein Wert ausgelesen werden.",en:"The queue is empty. No value can be read."})),r(V,"queueClassEnqueueComment",()=>d({de:"Ein neues Element mit dem übergebenen Inhalt wird an die Schlange angehängt.",en:"Adds an element to the end of this queue."})),r(V,"mustNotEnqueueNullExceptionMessage",()=>d({de:"Der übergebene Inhalt darf nicht 'null' sein.",en:"No null value may be enqueued into the queue."})),r(V,"queueClassDequeueComment",()=>d({de:"Das erste Element der Schlange wird entnommen und dessen Inhalt zurückgegeben. Löst eine IllegalStateException aus, falls die Schlange leer ist.",en:"Removes the first element from the queue. Throws a IllegalStateException if the queue is empty."})),r(V,"queueClassEmptyExceptionMessage",()=>d({de:"Die Schlange ist leer. Es kann kein Wert entnommen werden.",en:"The queue is empty. No value can be dequeued."})),r(V,"dynArrayClassComment",()=>d({de:"Klasse DynArray zur Umsetzung des ADT Dynamische Reihung entsprechend der Vorgaben des KC Informatik für die gymnasiale Oberstufe in Niedersachsen und den ergänzenden Hinweisen (Stand: Juni 2025)",en:"The class `DynArray` implements a dynamic array (DynArray) with an arbitrary number of elements."})),r(V,"dynArrayConstructorComment",()=>d({de:"Eine leere dynamische Reihung wird angelegt.",en:"Constructor of the class `DynArray` that creates an empty dynamic array."})),r(V,"dynArrayIsEmptyComment",()=>d({de:"Es wird geprüft, ob die dynamische Reihung leer ist. Gibt genau dann true zurück, wenn die dynamische Reihung keine Elemente enthält.",en:"Returns true if the dynamic array contains no elements."})),r(V,"dynArrayGetItemComment",()=>d({de:"Der Inhalt des Elements an der Position index wird ausgelesen. Das Element wird dabei nicht aus der dynamischen Reihung entfernt. Löst eine IndexOutOfBoundsException aus, falls der Index außerhalb des gültigen Bereichs liegt.",en:"Returns the element at the specified index in the dynamic array. Throws an IndexOutOfBoundsException if the index is invalid."})),r(V,"dynArrayAppendComment",()=>d({de:"Ein neues Element mit dem übergebenen Inhalt wird am Ende an die dynamische Reihung angefügt. Löst eine IllegalArgumentException aus, falls das übergebene Element 'null' ist.",en:"Appends a new element to the end of the dynamic array."})),r(V,"mustNotAppendNullExceptionMessage",()=>d({de:"Das Element darf nicht 'null' sein.",en:"No null value may be appended to the dynamic array."})),r(V,"dynArrayInsertAtComment",()=>d({de:"Ein neues Element mit dem übergebenen Inhalt wird der Position index in die dynamische Reihung eingefügt. Das Element, das sich vorher an dieser befunden hat, und alle nachfolgenden Elemente werden nach hinten verschoben. Entspricht der Wert von index der Länge der dynamischen Reihung, so wird ein neues Element am Ende der dynamischen Reihung angefügt. Löst eine IndexOutOfBoundsException, falls der Index außerhalb des gültigen Bereichs liegt.",en:"Inserts a new element at the specified index in the dynamic array. Throws an IndexOutOfBoundsException if the index is invalid."})),r(V,"mustNotInsertNullExceptionMessage",()=>d({de:"Das Element darf nicht 'null' sein.",en:"No null value may be inserted into the dynamic array."})),r(V,"dynArraySetItemComment",()=>d({de:"Der Inhalt des Elements an der Position index wird durch den übergebenen Inhalt ersetzt. Löst eine IndexOutOfBoundsException aus, falls der Index außerhalb des gültigen Bereichs liegt.",en:"Sets the element at the specified index in the dynamic array to the specified value. Throws an IndexOutOfBoundsException if the index is invalid."})),r(V,"dynArrayDeleteComment",()=>d({de:"Das Element an der Position index wird gelöscht. Alle folgenden Elemente werden um eine Position nach vorne geschoben. Löst eine IndexOutOfBoundsException aus, falls der Index außerhalb des gültigen Bereichs liegt.",en:"Deletes the element at the specified index in the dynamic array. Throws an IndexOutOfBoundsException if the index is invalid."})),r(V,"dynArrayGetLengthComment",()=>d({de:"Die Anzahl der Elemente der dynamischen Reihung wird zurückgegeben.",en:"Returns the number of elements in the dynamic array."})),r(V,"dynArrayIteratorComment",()=>d({de:"Gibt einen Iterator über die Elemente der dynamischen Reihung zurück.",en:"Returns an iterator over the elements in the dynamic array."})),r(V,"binTreeClassComment",()=>d({de:"Klasse BinTree zur Umsetzung des ADT Binärbaum entsprechend der Vorgaben des KC Informatik für die gymnasiale Oberstufe in Niedersachsen und den ergänzenden Hinweisen (Stand: Juni 2025)",en:"The class `NiedersachsenBinTree` implements a binary tree."})),r(V,"binTreeConstructorComment",()=>d({de:"Ein leerer Baum wird erzeugt. Er besitzt keinen Inhalt und keine Teilbäume.",en:"Constructor of the class `NiedersachsenBinTree` that creates an empty binary tree."})),r(V,"binTreeConstructorWithContentComment",()=>d({de:"Ein Baum wird erzeugt. Die Wurzel erhält den übergebenen Inhalt als Wert. Der Baum besitzt jeweils einen leeren Baum als linken und rechten Teilbaum.",en:"Constructor of the class `NiedersachsenBinTree` that creates a binary tree with the specified content."})),r(V,"noContentForBinTreeExceptionMessage",()=>d({de:"Der Baum kann nicht erzeugt werden. Der übergebene Inhalt darf nicht 'null' sein.",en:"The content for the binary tree must not be 'null'."})),r(V,"binTreeSetItemNullExceptionMessage",()=>d({de:"Der Wert kann nicht gesetzt werden. Der übergebene Inhalt darf nicht 'null' sein.",en:"The content for the binary tree must not be 'null'."})),r(V,"binTreeHasItemComment",()=>d({de:"Gibt genau dann true zurück, wenn der binäre Baum ein Element enthält.",en:"Returns true if the binary tree contains an element."})),r(V,"binTreeGetItemComment",()=>d({de:"Gibt den Inhaltswert der Wurzel zurück. Löst eine IllegalStateException aus, falls der Baum leer ist.",en:"Returns the element of the binary tree. Throws a RuntimeException if the tree is empty."})),r(V,"binTreeSetItemComment",()=>d({de:"Die Wurzel des Baums erhält den übergebenen Inhalt als Wert. Bei einem leeren Baum wird zusätzlich als linker und rechter Teilbaum jeweils ein leerer Baum gesetzt. LÖst eine IllegalArgumentException aus, falls der übergebene Inhalt 'null' ist.",en:"Sets the content of the binary tree to the specified value. If the tree is empty, it also sets the left and right subtrees to empty trees. Throws an IllegalArgumentException if the value is 'null'."})),r(V,"binTreeDeleteItemComment",()=>d({de:"Löscht das Element des binären Baums.",en:"Deletes the element of the binary tree."})),r(V,"binTreeIsLeafComment",()=>d({de:"Prüft, ob der Baum ein Blatt ist. Wenn der Baum jeweils einen leeren Baum als linken und rechten Teilbaum besitzt, also ein Blatt ist, wird der Wert wahr zurückgegeben, sonst der Wert falsch.",en:"Returns true if the binary tree is a leaf (no left and no right subtree)."})),r(V,"binTreeEmptyIsLeafExceptionMessage",()=>d({de:"Der Baum ist leer. Überprüfung auf 'isLeaf' nicht möglich.",en:"The tree is empty. Can't check 'isLeaf' on an empty tree."})),r(V,"binTreeHasLeftComment",()=>d({de:"Gibt genau dann true zurück, wenn der binäre Baum einen linken Teilbaum hat.",en:"Returns true if the binary tree has a left subtree."})),r(V,"binTreeHasRightComment",()=>d({de:"Gibt genau dann true zurück, wenn der binäre Baum einen rechten Teilbaum hat.",en:"Returns true if the binary tree has a right subtree."})),r(V,"getLeftOnEmptyTreeExceptionMessage",()=>d({de:"Der Baum ist leer. Es ist kein linker Teilbaum vorhanden.",en:"The tree is empty. No left subtree can be returned."})),r(V,"getRightOnEmptyTreeExceptionMessage",()=>d({de:"Der Baum ist leer. Es ist kein rechter Teilbaum vorhanden.",en:"The tree is empty. No right subtree can be returned."})),r(V,"binTreeGetLeftComment",()=>d({de:"Gibt den linken Teilbaum zurück. Löst eine IllegalStateException aus, falls der Baum leer ist.",en:"Returns the left subtree of the binary tree. Throws a RuntimeException if no left subtree is present."})),r(V,"binTreeGetRightComment",()=>d({de:"Gibt den rechten Teilbaum zurück. Löst eine IllegalStateException aus, falls der Baum leer ist.",en:"Returns the right subtree of the binary tree. Throws a RuntimeException if no right subtree is present."})),r(V,"binTreeSetLeftComment",()=>d({de:"Setzt den linken Teilbaum. Löst eine IllegalStateException aus, falls der Baum leer ist. Löst eine IllegalArgumentException aus, falls der übergebene Wert 'null' ist.",en:"Sets the left subtree of the binary tree to the specified binary tree."})),r(V,"setLeftOnEmptyTreeExceptionMessage",()=>d({de:"Der Baum ist leer. Es kann kein linker Teilbaum gesetzt werden.",en:"The tree is empty. No left subtree can be set."})),r(V,"setRightOnEmptyTreeExceptionMessage",()=>d({de:"Der Baum ist leer. Es kann kein rechter Teilbaum gesetzt werden.",en:"The tree is empty. No right subtree can be set."})),r(V,"setEmptyTreeAsChildExceptionMessage",()=>d({de:"Der Wert kann nicht gesetzt werden. Der übergebene Baum darf nicht 'null' sein.",en:"The value cannot be set. The passed tree must not be 'null'."})),r(V,"binTreeSetRightComment",()=>d({de:"Setzt den rechten Teilbaum. Löst eine IllegalStateException aus, falls der Baum leer ist. Löst eine IllegalArgumentException aus, falls der übergebene Wert 'null' ist.",en:"Sets the right subtree of the binary tree to the specified binary tree."})),r(V,"binTreeDeleteLeftComment",()=>d({de:"Löscht den linken Teilbaum des binären Baums.",en:"Deletes the left subtree of the binary tree."})),r(V,"binTreeDeleteRightComment",()=>d({de:"Löscht den rechten Teilbaum des binären Baums.",en:"Deletes the right subtree of the binary tree."})),r(V,"noContentInBinTreeExceptionMessage",()=>d({de:"Es gibt keinen Wurzelinhalt im Binärbaum.",en:"There is no root content in the binary tree."})),r(V,"noLeftSubtreeToDeleteExceptionMessage",()=>d({de:"Es gibt keinen linken Teilbaum zum Löschen.",en:"There is no left subtree to delete."})),r(V,"noRightSubtreeToDeleteExceptionMessage",()=>d({de:"Es gibt keinen rechten Teilbaum zum Löschen.",en:"There is no right subtree to delete."})),r(V,"binTreeSetEmptyComment",()=>d({de:"Der Baum wird zu einem leeren Baum, d.h. er besitzt keinen Inhalt und keine Teilbäume.",en:"The tree becomes an empty tree, i.e., it has no content and no subtrees."})),r(V,"binTreeIsEmptyComment",()=>d({de:"Prüft ob der Baum leer ist. Wenn der Baum ein leerer Baum ist, wird der Wert wahr zurückgegeben, sonst der Wert falsch.",en:"Returns true if the binary tree is empty (no content and no subtrees)."}));const Ei=class Ei extends z{constructor(e){super();r(this,"elements",[]);this.elements=e||[]}_constructor(){return this}_isEmpty(){return this.elements.length==0}_getItem(e){if(e<0||e>=this.elements.length)throw new Pe(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements[e]}_mj$toString$String$(e,i){if(this.elements.length==0){e.s.push("[]"),i&&i();return}let n=this.elements[0];if(typeof n=="object"||Array.isArray(n)||n==null){e._arrayOfObjectsToString(this.elements,()=>{e.s.push(new G(e.s.pop())),i&&i()});return}else{e.s.push(new G(e._primitiveElementOrArrayToString(this.elements))),i&&i();return}}getElements(){return this.elements}_append(e){if(e==null)throw new An(V.mustNotAppendNullExceptionMessage());this.elements.push(e)}_insertAt(e,i){if(e<0||e>this.elements.length)throw new Pe(o.indexOutOfBoundsException(e,this.elements.length-1));if(i==null)throw new An(V.mustNotInsertNullExceptionMessage());return this.elements.splice(e,0,i),!0}_setItem(e,i){if(e<0||e>=this.elements.length)throw new Pe(o.indexOutOfBoundsException(e,this.elements.length-1));if(i==null)throw new An(V.mustNotInsertNullExceptionMessage());let n=this.elements[e];return this.elements[e]=i,n}_delete(e){if(e<0||e>=this.elements.length)throw new Pe(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements.splice(e,1)[0]}_clear(){this.elements.length=0}_getLength(){return this.elements.length}_iterator(){let e=new z,i=0;return e._mj$hasNext$boolean$=(n,s)=>{n.s.push(i{i",comment:V.dynArrayClassComment},{type:"method",signature:"DynArray()",native:Ei.prototype._constructor,comment:V.dynArrayConstructorComment},{type:"method",signature:"boolean isEmpty()",native:Ei.prototype._isEmpty,comment:V.dynArrayIsEmptyComment},{type:"method",signature:"Object getItem(int index)",native:Ei.prototype._getItem,comment:V.dynArrayGetItemComment},{type:"method",signature:"void append(Object x)",native:Ei.prototype._append,comment:V.dynArrayAppendComment},{type:"method",signature:"void insertAt(int index, Object x)",native:Ei.prototype._insertAt,comment:V.dynArrayInsertAtComment},{type:"method",signature:"void setItem(int index, Object x)",native:Ei.prototype._setItem,comment:V.dynArraySetItemComment},{type:"method",signature:"void delete(int index)",native:Ei.prototype._delete,comment:V.dynArrayDeleteComment},{type:"method",signature:"int getLength()",native:Ei.prototype._getLength,comment:V.dynArrayGetLengthComment},{type:"method",signature:"Iterator iterator()",native:Ei.prototype._iterator,comment:V.dynArrayIteratorComment},{type:"method",signature:"String toString()",java:Ei.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Ei,"type");let Ru=Ei;const Ct=class Ct extends z{constructor(e){super();r(this,"inhalt",null);r(this,"left",null);r(this,"right",null);this.inhalt=e||null}_constructor(){return this}_constructor1(e=null){if(e==null)throw new An(V.noContentForBinTreeExceptionMessage());return this.inhalt=e,this.left=new Ct()._constructor(),this.right=new Ct()._constructor(),this}_mj$toString$String$(e,i){let n=()=>{let s=e.s.pop().value,a=()=>{let l=e.s.pop().value,h=()=>{let c=e.s.pop().value,u=new G("BinTree[inhalt="+s+", left="+l+", right="+c+"]");e.s.push(u),i&&i()};this.right?this.right._mj$toString$String$(e,h):(e.s.push(new G("null")),h())};this.left?this.left._mj$toString$String$(e,a):(e.s.push(new G("null")),a())};this.inhalt?this.inhalt._mj$toString$String$(e,n):(e.s.push(new G("null")),n())}_hasItem(){return this.inhalt!=null}_getItem(){if(this._isEmpty())throw new Ui(V.noContentInBinTreeExceptionMessage());return this.inhalt}_setItem(e){if(e==null)throw new An(V.binTreeSetItemNullExceptionMessage());this._isEmpty()&&(this.left=new Ct()._constructor(),this.right=new Ct()._constructor()),this.inhalt=e}_deleteItem(){this.inhalt=null}_isLeaf(){var e,i;if(this._isEmpty())throw new Ui(V.binTreeEmptyIsLeafExceptionMessage());return((e=this.left)==null?void 0:e._isEmpty())&&((i=this.right)==null?void 0:i._isEmpty())}_hasLeft(){return this.left!=null}_hasRight(){return this.right!=null}_getLeft(){if(this._isEmpty())throw new Ui(V.getLeftOnEmptyTreeExceptionMessage());return this.left}_getRight(){if(this._isEmpty())throw new Ui(V.getRightOnEmptyTreeExceptionMessage());return this.right}_setLeft(e){if(this._isEmpty())throw new Ui(V.setLeftOnEmptyTreeExceptionMessage());if(e==null)throw new An(V.setEmptyTreeAsChildExceptionMessage());this.left=e}_setRight(e){if(this._isEmpty())throw new Ui(V.setRightOnEmptyTreeExceptionMessage());if(e==null)throw new An(V.setEmptyTreeAsChildExceptionMessage());this.right=e}_deleteLeft(){if(!this.left)throw new F(V.noLeftSubtreeToDeleteExceptionMessage());this.left=null}_deleteRight(){if(!this.right)throw new F(V.noRightSubtreeToDeleteExceptionMessage());this.right=null}_setEmpty(){this.inhalt=null,this.left=null,this.right=null}_isEmpty(){return this.inhalt==null&&this.left==null&&this.right==null}};r(Ct,"__javaDeclarations",[{type:"declaration",signature:"class BinTree",comment:V.binTreeClassComment},{type:"method",signature:"BinTree()",native:Ct.prototype._constructor,comment:V.binTreeConstructorComment},{type:"method",signature:"BinTree(Object o)",native:Ct.prototype._constructor1,comment:V.binTreeConstructorWithContentComment},{type:"method",signature:"Object getItem()",native:Ct.prototype._getItem,comment:V.binTreeGetItemComment},{type:"method",signature:"void setItem(Object o)",native:Ct.prototype._setItem,comment:V.binTreeSetItemComment},{type:"method",signature:"boolean isLeaf()",native:Ct.prototype._isLeaf,comment:V.binTreeIsLeafComment},{type:"method",signature:"BinTree getLeft()",native:Ct.prototype._getLeft,comment:V.binTreeGetLeftComment},{type:"method",signature:"BinTree getRight()",native:Ct.prototype._getRight,comment:V.binTreeGetRightComment},{type:"method",signature:"void setLeft(BinTree b)",native:Ct.prototype._setLeft,comment:V.binTreeSetLeftComment},{type:"method",signature:"void setRight(BinTree b)",native:Ct.prototype._setRight,comment:V.binTreeSetRightComment},{type:"method",signature:"boolean isEmpty()",native:Ct.prototype._isEmpty,comment:V.binTreeIsEmptyComment},{type:"method",signature:"void setEmpty()",native:Ct.prototype._setEmpty,comment:V.binTreeSetEmptyComment},{type:"method",signature:"String toString()",java:Ct.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Ct,"type");let Gu=Ct;const Ls=class Ls extends z{constructor(){super();r(this,"inhalt",null);r(this,"next",null)}_constructorEmpty(){return this}_constructorFull(e,i){return this.inhalt=e,this.next=i,this}_mj$toString$String$(e,i){if(this.inhalt==null){e.s.push(new G("null")),i&&i();return}this.inhalt._mj$toString$String$(e,()=>{let n=e.s.pop(),s=new G("Element[inhalt="+n.value+"]");e.s.push(s),i&&i()})}};r(Ls,"__javaDeclarations",[{type:"declaration",signature:"class Element",comment:V.ElementClassComment},{type:"method",signature:"Element()",native:Ls.prototype._constructorEmpty},{type:"method",signature:"Element(Object inhalt, Element next)",native:Ls.prototype._constructorFull},{type:"method",signature:"String toString()",java:Ls.prototype._mj$toString$String$,comment:o.objectToStringComment},{type:"field",signature:"Object inhalt",nativeIdentifier:"inhalt"},{type:"field",signature:"Element next",nativeIdentifier:"next"}]),r(Ls,"type");let Bd=Ls;const Xn=class Xn extends z{constructor(){super();r(this,"top",null)}_constructor(){return this}_isEmpty(){return this.top==null}_push(e){if(e==null)throw new An(V.mustNotPushNullExceptionMessage());let i=new Bd()._constructorFull(e,this.top);this.top=i}_pop(){if(this._isEmpty())throw new Ui("Stack is empty. Cannot pop element.");let e=this.top.inhalt;return this.top=this.top.next,e}_top(){if(this._isEmpty())throw new Ui(V.stackClassEmptyExceptionMessageTop());return this.top.inhalt}_mj$toString$String$(e,i){if(this.top==null){e.s.push("[]"),i&&i();return}let n=this.top.inhalt;if(typeof n=="object"||Array.isArray(n)||n==null){e._arrayOfObjectsToString(this.getElements(),()=>{e.s.push(new G(e.s.pop())),i&&i()});return}else{e.s.push(new G(e._primitiveElementOrArrayToString(this.getElements()))),i&&i();return}}getElements(){if(this.top==null)return[];const e=[];let i=this.top;for(;i!=null;)e.push(i.inhalt),i=i.next;return e}};r(Xn,"__javaDeclarations",[{type:"declaration",signature:"class Stack",comment:V.StackClassComment},{type:"method",signature:"Stack()",native:Xn.prototype._constructor,comment:V.stackClassConstructorComment},{type:"method",signature:"boolean isEmpty()",native:Xn.prototype._isEmpty,comment:V.stackClassIsEmptyComment},{type:"method",signature:"void push(Object pContent)",native:Xn.prototype._push,comment:V.stackClassPushComment},{type:"method",signature:"Object pop()",native:Xn.prototype._pop,comment:V.stackClassPopComment},{type:"method",signature:"Object top()",native:Xn.prototype._top,comment:V.stackClassTopComment},{type:"method",signature:"String toString()",java:Xn.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Xn,"type");let Ku=Xn;const Jn=class Jn extends Ve{constructor(){super();r(this,"head",null);r(this,"tail",null)}_constructor(){return this}_isEmpty(){return this.head==null}_enqueue(e){if(e==null)throw new An(V.mustNotEnqueueNullExceptionMessage());let i=new Bd()._constructorFull(e,null);this.head==null?this.head=i:this.tail.next=i,this.tail=i}_dequeue(){if(this._isEmpty())throw new Ui(V.queueClassEmptyExceptionMessage());let e=this.head.inhalt;return this.head==this.tail?(this.tail=null,this.head=null):this.head=this.head.next,e}_head(){if(this._isEmpty())throw new Ui(V.queueClassEmptyExceptionMessageHead());return this.head.inhalt}_mj$toString$String$(e,i){if(this.head==null){e.s.push("[]"),i&&i();return}let n=this.head.inhalt;if(typeof n=="object"||Array.isArray(n)||n==null){e._arrayOfObjectsToString(this.getElements(),()=>{e.s.push(new G(e.s.pop())),i&&i()});return}else{e.s.push(new G(e._primitiveElementOrArrayToString(this.getElements()))),i&&i();return}}getElements(){if(this.head==null)return[];const e=[];let i=this.head;for(;i!=null;)e.push(i.inhalt),i=i.next;return e}};r(Jn,"__javaDeclarations",[{type:"declaration",signature:"class Queue",comment:V.queueClassComment},{type:"method",signature:"Queue()",native:Jn.prototype._constructor,comment:V.queueClassConstructorComment},{type:"method",signature:"boolean isEmpty()",native:Jn.prototype._isEmpty,comment:V.queueClassIsEmptyComment},{type:"method",signature:"Object head()",native:Jn.prototype._head,comment:V.queueClassHeadComment},{type:"method",signature:"void enqueue(Object neu)",native:Jn.prototype._enqueue,comment:V.queueClassEnqueueComment},{type:"method",signature:"Object dequeue()",native:Jn.prototype._dequeue,comment:V.queueClassDequeueComment},{type:"method",signature:"String toString()",java:Jn.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Jn,"type");let Hu=Jn;class Vy extends mo{constructor(){super(),this.classesInterfacesEnums.push(Ru,Gu,Ku,Hu)}isReplModule(){return!1}getCodeFragments(){return[]}prepareSystemModule(t){let e=["Stack","Queue","Deque","LinkedList","ArrayList","Vector"];t.classesInterfacesEnums=t.classesInterfacesEnums.filter(i=>e.indexOf(this.getName(i))<0)}}class x{}r(x,"listClassComment",()=>d({de:"Generische Klasse List Objekt der generischen Klasse List verwalten beliebig viele linear angeordnete Objekte vom Typ ContentType. Auf hoechstens ein Listenobjekt, aktuellesObjekt genannt, kann jeweils zugegriffen werden. Wenn eine Liste leer ist, vollstaendig durchlaufen wurde oder das aktuelle Objekt am Ende der Liste geloescht wurde, gibt es kein aktuelles Objekt.
Das erste oder das letzte Objekt einer Liste koennen durch einen Auftrag zum aktuellen Objekt gemacht werden. Ausserdem kann das dem aktuellen Objekt folgende Listenobjekt zum neuen aktuellen Objekt werden.
Das aktuelle Objekt kann gelesen, veraendert oder geloescht werden. Ausserdem kann vor dem aktuellen Objekt ein Listenobjekt eingefuegt werden.",en:"Generic class List"})),r(x,"listClassConstructorComment",()=>d({de:"Eine leere Liste wird erzeugt.",en:"Creates an empty list."})),r(x,"listClassIsEmptyComment",()=>d({de:"Die Anfrage liefert den Wert true, wenn die Liste keine Objekte enthaelt, sonst liefert sie den Wert false.",en:"Returns true if and only if this list contains no objects."})),r(x,"listClassHasAccessComment",()=>d({de:"Die Anfrage liefert den Wert true, wenn es ein aktuelles Objekt gibt, sonst liefert sie den Wert false.",en:"Returns true if and only there is a 'current object'."})),r(x,"listClassNextComment",()=>d({de:"Falls die Liste nicht leer ist, es ein aktuelles Objekt gibt und dieses nicht das letzte Objekt der Liste ist, wird das dem aktuellen Objekt in der Liste folgende Objekt zum aktuellen Objekt, andernfalls gibt es nach Ausfuehrung des Auftrags kein aktuelles Objekt, d.h. hasAccess() liefert den Wert false.",en:"Makes 'current object' point to next object in list. If end of list is reached then there's no current object anymore."})),r(x,"listClassToFirstComment",()=>d({de:"Falls die Liste nicht leer ist, wird das erste Objekt der Liste aktuelles Objekt. Ist die Liste leer, geschieht nichts.",en:"If this list is not empty, then first object gets 'current object'. Otherwise nothing happens."})),r(x,"listClassToLastComment",()=>d({de:"Falls die Liste nicht leer ist, wird das letzte Objekt der Liste aktuelles Objekt. Ist die Liste leer, geschieht nichts.",en:"If this list is not empty, then last object gets 'current object'. Otherwise nothing happens."})),r(x,"listClassGetContentComment",()=>d({de:"Falls es ein aktuelles Objekt gibt (hasAccess() == true), wird das aktuelle Objekt zurueckgegeben, andernfalls (hasAccess() == false) gibt die Anfrage den Wert null zurueck.",en:"If there is a current object (that is: hasAccess() == true), then this object is returned, otherwise null is returned."})),r(x,"listClassSetContentComment",()=>d({de:"Falls es ein aktuelles Objekt gibt (hasAccess() == true) und pContent ungleich null ist, wird das aktuelle Objekt durch pContent ersetzt. Sonst geschieht nichts.",en:"If there is a current object (that is: hasAccess() == true) and pContent != null, then current object gets replaced by pContent."})),r(x,"listClassInsertComment",()=>d({de:"Falls es ein aktuelles Objekt gibt (hasAccess() == true), und pContent != null ist, wird ein neues Objekt vor dem aktuellen Objekt in die Liste eingefuegt. Das aktuelle Objekt bleibt unveraendert.
Wenn die Liste leer ist, wird pContent in die Liste eingefuegt und es gibt weiterhin kein aktuelles Objekt (hasAccess() == false).
Falls es kein aktuelles Objekt gibt (hasAccess() == false) und die Liste nicht leer ist oder pContent gleich null ist, geschieht nichts.",en:"If there is a current object (that is: hasAccess() == true) and pContent != null then given pContent is inserted before current objecte."})),r(x,"listClassAppendComment",()=>d({de:"Falls pContent gleich null ist, geschieht nichts.
Ansonsten wird ein neues Objekt pContent am Ende der Liste eingefuegt. Das aktuelle Objekt bleibt unveraendert.
Wenn die Liste leer ist, wird das Objekt pContent in die Liste eingefuegt und es gibt weiterhin kein aktuelles Objekt (hasAccess() == false).",en:"If pContent == null then nothing happens. Otherwise pContent is added at the end of the list. Current object is not changed."})),r(x,"listClassConcatComment",()=>d({de:"Falls es sich bei der Liste und pList um dasselbe Objekt handelt, pList null oder eine leere Liste ist, geschieht nichts.
Ansonsten wird die Liste pList an die aktuelle Liste angehaengt. Anschliessend wird pList eine leere Liste. Das aktuelle Objekt bleibt unveraendert. Insbesondere bleibt hasAccess identisch.",en:"If pList == this list, pList == null or pList is empty then nothing happens. Otherwise pList is concatenated to this list and then emptied."})),r(x,"listClassRemoveComment",()=>d({de:"Wenn die Liste leer ist oder es kein aktuelles Objekt gibt (hasAccess() == false), geschieht nichts.
Falls es ein aktuelles Objekt gibt (hasAccess() == true), wird das aktuelle Objekt geloescht und das Objekt hinter dem geloeschten Objekt wird zum aktuellen Objekt.
Wird das Objekt, das am Ende der Liste steht, geloescht, gibt es kein aktuelles Objekt mehr.",en:"If list is empty or there is no 'current object' (hasAccess() == false), then nothing happens. Otherwise the current object gets removed and the next object is the new current object. If the object removed was last in the list, then there won't be any current object."})),r(x,"listClassGetPreviousComment",()=>d({de:"Liefert den Vorgaengerknoten des Knotens pNode. Ist die Liste leer, pNode == null, pNode nicht in der Liste oder pNode der erste Knoten der Liste, wird null zurueckgegeben.",en:""})),r(x,"queueClassComment",()=>d({de:"Objekte der generischen Klasse Queue (Warteschlange) verwalten beliebige Objekte vom Typ ContentType nach dem First-In-First-Out-Prinzip, d.h., das zuerst abgelegte Objekt wird als erstes wieder entnommen. Alle Methoden haben eine konstante Laufzeit, unabhaengig von der Anzahl der verwalteten Objekte.",en:"Implementation of a queue. Elements can be accessed according to fifo systematic (first in - first out)."})),r(x,"queueClassConstructorComment",()=>d({de:"Eine leere Schlange wird erzeugt. Objekte, die in dieser Schlange verwaltet werden, muessen vom Typ ContentType sein.",en:"Creates an empty queue."})),r(x,"queueClassIsEmptyComment",()=>d({de:"Die Anfrage liefert den Wert true, wenn die Queue keine Objekte enthaelt, sonst liefert sie den Wert false.",en:"Returns true if and only if this queue contains no objects."})),r(x,"queueClassEnqueueComment",()=>d({de:"Das Objekt pContentType wird an die Schlange angehaengt. Falls pContentType gleich null ist, bleibt die Schlange unveraendert.",en:"Given object gets added to this queue's end. If given object is null, then queue remains unchanged."})),r(x,"queueClassDequeueComment",()=>d({de:"Das erste Objekt wird aus der Schlange entfernt. Falls die Schlange leer ist, wird sie nicht veraendert.",en:"Remove the first element of this queue. If Queue is empty then nothing happens."})),r(x,"queueClassFrontComment",()=>d({de:"Die Anfrage liefert das erste Objekt der Schlange. Die Schlange bleibt unveraendert. Falls die Schlange leer ist, wird null zurueckgegeben.",en:"Returns the first element of this queue without removing it from the queue. If queue is empty then null is returned."})),r(x,"stackClassComment",()=>d({de:"bjekte der generischen Klasse Stack (Keller, Stapel) verwalten beliebige Objekte vom Typ ContentType nach dem Last-In-First-Out-Prinzip, d.h., das zuletzt abgelegte Objekt wird als erstes wieder entnommen. Alle Methoden haben eine konstante Laufzeit, unabhaengig von der Anzahl der verwalteten Objekte.",en:"Implementation of a stack. Elements can be accessed according to Lifo systematic (last in - first out)."})),r(x,"stackClassConstructorComment",()=>d({de:"Eine leerer Stack wird erzeugt. Objekte, die in diesem Stack verwaltet werden, muessen vom Typ ContentType sein.",en:"Creates an empty stack."})),r(x,"stackClassIsEmptyComment",()=>d({de:"Die Anfrage liefert den Wert true, wenn die Stack keine Objekte enthaelt, sonst liefert sie den Wert false.",en:"Returns true if and only if this stack contains no objects."})),r(x,"stackClassPushComment",()=>d({de:"Das Objekt pContentType wird oben auf den Stapel gelegt. Falls pContentType gleich null ist, bleibt der Stapel unveraendert.",en:"Given object gets pushed on top of this stack. If given object is null, then the stack remains unchanged."})),r(x,"stackClassPopComment",()=>d({de:'Das zuletzt eingefügte ("oberste") Objekt wird aus dem Stack entfernt. Falls der Stack leer ist, wird er nicht veraendert.',en:'Remove the last inserted ("topmost") element of this stack. If this stack is empty then nothing happens.'})),r(x,"stackClassTopComment",()=>d({de:"Die Anfrage liefert das oberste Objekt des Stacks. Der Stack bleibt unveraendert. Falls der Stack leer ist, wird null zurueckgegeben.",en:"Returns the topmost element of this stack without removing it from the stack. If this stack is empty then null is returned."})),r(x,"comparableContentInterfaceComment",()=>d({de:"Das generische Interface ComparableContent legt die Methoden fest, ueber die Objekte verfuegen muessen, die in einen binaeren Suchbaum (BinarySearchTree) eingefuegt werden sollen. Die Ordnungsrelation wird in Klassen, die ComparableContent implementieren durch Ueberschreiben der drei implizit abstrakten Methoden isGreater, isEqual und isLess festgelegt. ",en:"Generic Interface ComparableContent with methods isGreater, isEqual and isLess."})),r(x,"comparableContentIsGreaterComment",()=>d({de:"Wenn festgestellt wird, dass das Objekt, von dem die Methode aufgerufen wird, bzgl. der gewuenschten Ordnungsrelation groesser als das Objekt pContent ist, wird true geliefert. Sonst wird false geliefert.",en:'Returns true if and only if this object is "greater" than given object pContent.'})),r(x,"comparableContentIsLessComment",()=>d({de:"Wenn festgestellt wird, dass das Objekt, von dem die Methode aufgerufen wird, bzgl. der gewuenschten Ordnungsrelation kleiner als das Objekt pContent ist, wird true geliefert. Sonst wird false geliefert.",en:'Returns true if and only if this object is "less" than given object pContent.'})),r(x,"comparableContentIsEqualComment",()=>d({de:"Wenn festgestellt wird, dass das Objekt, von dem die Methode aufgerufen wird, bzgl. der gewuenschten Ordnungsrelation gleich groß ist wie das Objekt pContent, wird true geliefert. Sonst wird false geliefert.",en:'Returns true if and only if this object is "equal" to given object pContent.'})),r(x,"binaryTreeClassComment",()=>d({de:"Mithilfe der generischen Klasse BinaryTree koennen beliebig viele Inhaltsobjekte vom Typ ContentType in einem Binaerbaum verwaltet werden. Ein Objekt der Klasse stellt entweder einen leeren Baum dar oder verwaltet ein Inhaltsobjekt sowie einen linken und einen rechten Teilbaum, die ebenfalls Objekte der generischen Klasse BinaryTree sind.",en:"Generic binary tree class"})),r(x,"binaryTreeConstructorComment1",()=>d({de:"Nach dem Aufruf des Konstruktors existiert ein leerer Binaerbaum.",en:"Creates an empty binary tree."})),r(x,"binaryTreeConstructorComment2",()=>d({de:"Wenn der Parameter pContent ungleich null ist, existiert nach dem Aufruf des Konstruktors der Binaerbaum und hat pContent als Inhaltsobjekt und zwei leere Teilbaeume. Falls der Parameter null ist, wird ein leerer Binaerbaum erzeugt.",en:"Creates a binary tree. If pContent != null then the tree consists of one node holding given content and two empty binary trees beneath it."})),r(x,"binaryTreeConstructorComment3",()=>d({de:"Wenn der Parameter pContent ungleich null ist, wird ein Binaerbaum mit pContent als Inhalt und den beiden Teilbaeumen pLeftTree und pRightTree erzeugt. Sind pLeftTree oder pRightTree gleich null, wird der entsprechende Teilbaum als leerer Binaerbaum eingefuegt. So kann es also nie passieren, dass linke oder rechte Teilbaeume null sind. Wenn der Parameter pContent gleich null ist, wird ein leerer Binaerbaum erzeugt.",en:"Creates a binary tree. If pContent != null then the root node holds given content. If pleftTree or pRightTree != null then theses are the subtrees beneath the root node."})),r(x,"binaryTreeIsEmptyComment",()=>d({de:"Diese Anfrage liefert den Wahrheitswert true, wenn der Binaerbaum leer ist, sonst liefert sie den Wert false.",en:"Returns true if and only if this tree is empty."})),r(x,"binaryTreeSetContentComment",()=>d({de:"Wenn pContent null ist, geschieht nichts.
Ansonsten: Wenn der Binaerbaum leer ist, wird der Parameter pContent als Inhaltsobjekt sowie ein leerer linker und rechter Teilbaum eingefuegt. Ist der Binaerbaum nicht leer, wird das Inhaltsobjekt durch pContent ersetzt. Die Teilbaeume werden nicht geaendert.",en:"If pContent != null and this tree is not empty then it's root node content is set to pContent."})),r(x,"binaryTreeGetContentComment",()=>d({de:"Diese Anfrage liefert das Inhaltsobjekt des Binaerbaums. Wenn der Binaerbaum leer ist, wird null zurueckgegeben.",en:"Returns content of this tree if it's not empty."})),r(x,"binaryTreeSetLeftTreeComment",()=>d({de:"Falls der Parameter null ist, geschieht nichts. Wenn der Binaerbaum leer ist, wird pTree nicht angehaengt. Andernfalls erhaelt der Binaerbaum den uebergebenen BinaryTree als linken Teilbaum.",en:"If this tree is not empty and pTree != null then pTree is attached to this node as left subtree."})),r(x,"binaryTreeSetRightTreeComment",()=>d({de:"Falls der Parameter null ist, geschieht nichts. Wenn der Binaerbaum leer ist, wird pTree nicht angehaengt. Andernfalls erhaelt der Binaerbaum den uebergebenen BinaryTree als rechten Teilbaum.",en:"If this tree is not empty and pTree != null then pTree is attached to this node as right subtree."})),r(x,"binaryTreeGetLeftTreeComment",()=>d({de:"Diese Anfrage liefert den linken Teilbaum des Binaerbaumes. Wenn der Binaerbaum leer ist, wird null zurueckgegeben.",en:"If this tree is not empty then this method returns it's left subtree."})),r(x,"binaryTreeGetRightTreeComment",()=>d({de:"Diese Anfrage liefert den rechten Teilbaum des Binaerbaumes. Wenn der Binaerbaum leer ist, wird null zurueckgegeben.",en:"If this tree is not empty then this method returns it's right subtree."})),r(x,"binarySearchTreeClassComment",()=>d({de:`Mithilfe der generischen Klasse BinarySearchTree koennen beliebig viele Objekte in einem Binaerbaum (binaerer Suchbaum) entsprechend einer Ordnungsrelation verwaltet werden. Ein Objekt der Klasse stellt entweder einen leeren binaeren Suchbaum dar oder verwaltet ein Inhaltsobjekt sowie einen linken und einen rechten Teilbaum, die ebenfalls Objekte der Klasse BinarySearchTree sind. Die Klasse der Objekte, die in dem Suchbaum verwaltet werden sollen, muss das generische Interface ComparableContent implementieren. Dabei muss durch Ueberschreiben der drei Vergleichsmethoden isLess, isEqual, isGreater (s. Dokumentation des Interfaces) eine eindeutige Ordnungsrelation festgelegt sein. Alle Objekte im linken Teilbaum sind kleiner als das Inhaltsobjekt des binaeren Suchbaums. Alle Objekte im rechten Teilbaum sind groesser als das Inhaltsobjekt des binaeren Suchbaums. Diese Bedingung gilt (rekursiv) auch in beiden Teilbaeumen. Hinweis: In dieser Version wird die Klasse BinaryTree nicht benutzt. `,en:"Generic binary search tree class"})),r(x,"binarySearchTreeConstructorComment1",()=>d({de:"Nach dem Aufruf des Konstruktors existiert ein leerer Binärer Suchbaum.",en:"Creates an empty binary tree."})),r(x,"binarySearchTreeIsEmptyComment",()=>d({de:"Diese Anfrage liefert den Wahrheitswert true, wenn der Binaerbaum leer ist, sonst liefert sie den Wert false.",en:"Returns true if and only if this tree is empty."})),r(x,"binarySearchTreeGetContentComment",()=>d({de:"Diese Anfrage liefert das Inhaltsobjekt des Binaerbaums. Wenn der Binaerbaum leer ist, wird null zurueckgegeben.",en:"Returns content of this tree if it's not empty."})),r(x,"binarySearchTreeGetLeftTreeComment",()=>d({de:"Diese Anfrage liefert den linken Teilbaum des Binaerbaumes. Wenn der Binaerbaum leer ist, wird null zurueckgegeben.",en:"If this tree is not empty then this method returns it's left subtree."})),r(x,"binarySearchTreeGetRightTreeComment",()=>d({de:"Diese Anfrage liefert den rechten Teilbaum des Binaerbaumes. Wenn der Binaerbaum leer ist, wird null zurueckgegeben.",en:"If this tree is not empty then this method returns it's right subtree."})),r(x,"binarySearchTreeInsertComment",()=>d({de:"Falls der Parameter null ist, geschieht nichts. Falls ein bezueglich der verwendeten Vergleichsmethode isEqual mit pContent uebereinstimmendes Objekt im geordneten binaeren Suchbau enthalten ist, passiert nichts. Achtung: hier wird davon ausgegangen, dass isEqual genau dann true liefert, wenn isLess und isGreater false liefern. Andernfalls (isLess oder isGreater) wird das Objekt pContent entsprechend der vorgegebenen Ordnungsrelation in den BinarySearchTree eingeordnet.",en:"If given pContent != null then it is inserted into this binary search tree."})),r(x,"binarySearchTreeRemoveComment",()=>d({de:"Falls ein bezueglich der verwendeten Vergleichsmethode mit pContent uebereinstimmendes Objekt im binaeren Suchbaum enthalten ist, wird dieses entfernt. Falls der Parameter null ist, aendert sich nichts.",en:"Removes given pContent from this tree if present."})),r(x,"binarySearchTreeSearchComment",()=>d({de:"Falls ein bezueglich der verwendeten Vergleichsmethode isEqual mit pContent uebereinstimmendes Objekt im binaeren Suchbaum enthalten ist, liefert die Anfrage dieses, ansonsten wird null zurueckgegeben.
Falls der Parameter null ist, wird null zurueckgegeben.",en:"If this tree contains pContent, then pContent is returned, otherwise null is returned."})),r(x,"vertexClassComment",()=>d({de:"Die Klasse Vertex stellt einen einzelnen Knoten eines Graphen dar. Jedes Objekt dieser Klasse verfuegt ueber eine im Graphen eindeutige ID als String und kann diese ID zurueckliefern. Darueber hinaus kann eine Markierung gesetzt und abgefragt werden.",en:"Objects of this class represent a node in a graph. Each vertex has a (per graph) unique ID (type String). There's also a boolean field mark which you can set and get."})),r(x,"vertexConstructorComment",()=>d({de:"Ein neues Objekt vom Typ Vertex wird erstellt. Seine Markierung hat den Wert false.",en:"Creates a new vertex object with mark == false."})),r(x,"vertexGetIDComment",()=>d({de:"Die Anfrage liefert die ID des Knotens als String.",en:"Returns the id of this vertex."})),r(x,"vertexSetMarkComment",()=>d({de:"Der Auftrag setzt die Markierung des Knotens auf den Wert pMark.",en:"Sets value of field mark."})),r(x,"vertexIsMarkedComment",()=>d({de:"Die Anfrage liefert true, wenn die Markierung des Knotens den Wert true hat, ansonsten false.",en:"Returns the value of this vertex' mark."})),r(x,"edgeClassComment",()=>d({de:"Die Klasse Edge stellt eine einzelne, ungerichtete Kante eines Graphen dar. Beim Erstellen werden die beiden durch sie zu verbindenden Knotenobjekte und eine Gewichtung als double uebergeben. Beide Knotenobjekte koennen abgefragt werden. Des Weiteren koennen die Gewichtung und eine Markierung gesetzt und abgefragt werden.",en:"Objects of class edge represent an edge of a graph."})),r(x,"edgeConstructorComment",()=>d({de:"Ein neues Objekt vom Typ Edge wird erstellt. Die von diesem Objekt repraesentierte Kante verbindet die Knoten pVertex und pAnotherVertex mit der Gewichtung pWeight. Ihre Markierung hat den Wert false.",en:"Creates a new edge-object connecting nodes pVertex and pAnotherVertex with given weight. Its mark has value false. "})),r(x,"edgeGetVerticesComment",()=>d({de:"Die Anfrage gibt die beiden Knoten, die durch die Kante verbunden werden, als neues Feld vom Typ Vertex zurueck. Das Feld hat genau zwei Eintraege mit den Indexwerten 0 und 1.",en:"Returns an array containing the two nodes that are connected by this vertex."})),r(x,"edgeSetWeightComment",()=>d({de:"Der Auftrag setzt das Gewicht der Kante auf pWeight.",en:"Sets value of field weight."})),r(x,"edgeGetWeightComment",()=>d({de:"Die Anfrage liefert das Gewicht der Kante als double.",en:"Returns weight of this edge."})),r(x,"edgeSetMarkComment",()=>d({de:"Der Auftrag setzt die Markierung der Kante auf den Wert pMark.",en:"Sets value of field mark."})),r(x,"edgeIsMarkedComment",()=>d({de:"Die Anfrage liefert true, wenn die Markierung der Kante den Wert true hat, ansonsten false.",en:"Returns the value of this edges mark."})),r(x,"graphClassComment",()=>d({de:"Die Klasse Graph stellt einen ungerichteten, kantengewichteten Graphen dar. Es koennen Knoten- und Kantenobjekte hinzugefuegt und entfernt, flache Kopien der Knoten- und Kantenlisten des Graphen angefragt und Markierungen von Knoten und Kanten gesetzt und ueberprueft werden. Des Weiteren kann eine Liste der Nachbarn eines bestimmten Knoten, eine Liste der inzidenten Kanten eines bestimmten Knoten und die Kante von einem bestimmten Knoten zu einem anderen bestimmten Knoten angefragt werden. Abgesehen davon kann abgefragt werden, welches Knotenobjekt zu einer bestimmten ID gehoert und ob der Graph leer ist.",en:"An object of class graph represents an undirected, weighted graph."})),r(x,"graphConstructorComment",()=>d({de:"Ein Objekt vom Typ Graph wird erstellt. Der von diesem Objekt repräsentierte Graph ist leer.",en:"Creates a new empty graph object."})),r(x,"graphGetVerticesComment",()=>d({de:"Die Anfrage liefert eine neue Liste aller Knotenobjekte vom Typ List.",en:"Returns a list containing all vertices of this graph."})),r(x,"graphGetEdgesComment",()=>d({de:"Die Anfrage liefert eine neue Liste aller Kantenobjekte vom Typ List.",en:"Returns a list containing all edges of this graph."})),r(x,"graphGetVertexComment",()=>d({de:"Die Anfrage liefert das Knotenobjekt mit pID als ID. Ist ein solchen Knotenobjekt nicht im Graphen enthalten, wird null zurueckgeliefert.",en:"Return vertex object with given id. Returns null if not found."})),r(x,"graphAddVertexComment",()=>d({de:"Der Auftrag fuegt den Knoten pVertex in den Graphen ein, sofern es noch keinen Knoten mit demselben ID-Eintrag wie pVertex im Graphen gibt und pVertex eine ID ungleich null hat. Ansonsten passiert nichts.",en:"Adds given vertex to this graph. Does nothing if vertex with this vertex' id is already present."})),r(x,"graphAddEdgeComment",()=>d({de:"Der Auftrag fuegt die Kante pEdge in den Graphen ein, sofern beide durch die Kante verbundenen Knoten im Graphen enthalten sind, nicht identisch sind und noch keine Kante zwischen den Knoten existiert. Ansonsten passiert nichts.",en:"Adds given edge if graph contains both it's vertices and no edge that connects them."})),r(x,"graphRemoveVertexComment",()=>d({de:"Der Auftrag entfernt den Knoten pVertex aus dem Graphen und loescht alle Kanten, die mit ihm inzident sind. Ist der Knoten pVertex nicht im Graphen enthalten, passiert nichts.",en:"Removes given Vertex and all edges adjacent to it."})),r(x,"graphRemoveEdgeComment",()=>d({de:"Der Auftrag entfernt die Kante pEdge aus dem Graphen. Ist die Kante pEdge nicht im Graphen enthalten, passiert nichts.",en:"Removes given Edge from graph."})),r(x,"graphSetAllVertexMarksComment",()=>d({de:"Der Auftrag setzt die Markierungen aller Knoten des Graphen auf pMark.",en:"Sets marks of all vertices to given value."})),r(x,"graphSetAllEdgeMarksComment",()=>d({de:"Der Auftrag setzt die Markierungen aller Kanten des Graphen auf pMark.",en:"Sets marks of all edges to given value."})),r(x,"graphAllVerticesMarkedComment",()=>d({de:"Die Anfrage liefert true, wenn alle Knoten des Graphen mit true markiert sind, ansonsten false.",en:"Returns true if and only if all vertices of this graph have mark == true."})),r(x,"graphAllEdgesMarkedComment",()=>d({de:"Die Anfrage liefert true, wenn alle Kanten des Graphen mit true markiert sind, ansonsten false.",en:"Returns true if and only if all edges of this graph have mark == true."})),r(x,"graphGetNeighboursComment",()=>d({de:"Die Anfrage liefert alle Nachbarn des Knotens pVertex als neue Liste vom Typ List. Hat der Knoten pVertex keine Nachbarn in diesem Graphen oder ist gar nicht in diesem Graphen enthalten, so wird eine leere Liste zurueckgeliefert.",en:"Returns all vertices that are connected to pVertex."})),r(x,"graphGetEdgesForVertexComment",()=>d({de:"Die Anfrage liefert eine neue Liste alle inzidenten Kanten zum Knoten pVertex. Hat der Knoten pVertex keine inzidenten Kanten in diesem Graphen oder ist gar nicht in diesem Graphen enthalten, so wird eine leere Liste zurueckgeliefert.",en:"Returns all edges connected to given vertex."})),r(x,"graphGetEdgeComment",()=>d({de:"Die Anfrage liefert die Kante, welche die Knoten pVertex und pAnotherVertex verbindet, als Objekt vom Typ Edge. Ist der Knoten pVertex oder der Knoten pAnotherVertex nicht im Graphen enthalten oder gibt es keine Kante, die beide Knoten verbindet, so wird null zurueckgeliefert.",en:"Returns edge between given vertices. Returns null if vertices are not connected."})),r(x,"graphIsEmptyComment",()=>d({de:"Die Anfrage liefert true, wenn der Graph keine Knoten enthaelt, ansonsten false.",en:"Returns true if and only if this graph contains no vertices."})),r(x,"queryResultClassComment",()=>d({de:"Ein Objekt der Klasse QueryResult stellt die Ergebnistabelle einer Datenbankanfrage mit Hilfe der Klasse DatabaseConnector dar. Objekte dieser Klasse werden nur von der Klasse DatabaseConnector erstellt. Die Klasse verfuegt ueber keinen oeffentlichen Konstruktor.",en:"An object of class QueryResult represents the result talbe of a database query."})),r(x,"queryResultGetDataComment",()=>d({de:"Die Anfrage liefert die Eintraege der Ergebnistabelle als zweidimensionales Feld vom Typ String. Der erste Index des Feldes stellt die Zeile und der zweite die Spalte dar (d.h. Object[zeile][spalte]).",en:"Returns the entries of the result table as twodimensional String[][]. First index is line, second index is column."})),r(x,"queryResultGetColumnNamesComment",()=>d({de:"Die Anfrage liefert die Bezeichner der Spalten der Ergebnistabelle als Feld vom Typ String zurueck.",en:"Returns column names of query result table."})),r(x,"queryResultGetColumnTypesComment",()=>d({de:"Die Anfrage liefert die Bezeichner der Datentypen der Spalten der Ergebnistabelle als Feld vom Typ String zurueck.",en:"Returns column types of query result table."})),r(x,"queryResultGetRowCountComment",()=>d({de:"Die Anfrage liefert die Anzahl der Zeilen der Ergebnistabelle als Integer.",en:"Returns row count of result table."})),r(x,"queryResultGetColumnCountComment",()=>d({de:"Die Anfrage liefert die Anzahl der Spalten der Ergebnistabelle als Integer.",en:"Returns column count of result table."})),r(x,"databaseConnectorClassComment",()=>d({de:"Ein Objekt der Klasse DatabaseConnector ermoeglicht die Abfrage und Manipulation einer MySQL-Datenbank. Beim Erzeugen des Objekts wird eine Datenbankverbindung aufgebaut, so dass anschließend SQL-Anweisungen an diese Datenbank gerichtet werden koennen.",en:"With an object of class DatabaseConnector you can query and manipulate a database."})),r(x,"databaseConnectorConstructorComment",()=>d({de:"Erstellt ein neues DatabaseConnector-Objekt. code ist der Zugriffscode für eine Datenbank der SQL-IDE.",en:"Creates a new DatabaseConnector object. You get the access code from the SQL-IDE."})),r(x,"databaseConnectorExecuteStatementComment",()=>d({de:"Der Auftrag schickt den im Parameter pSQLStatement enthaltenen SQL-Befehl an die Datenbank ab. Handelt es sich bei pSQLStatement um einen SQL-Befehl, der eine Ergebnismenge liefert, so kann dieses Ergebnis anschließend mit der Methode getCurrentQueryResult abgerufen werden.",en:"Sends statement to database and executes it. You may retrieve an error message with getMessage() and result table with getCurrentQueryResult()."})),r(x,"databaseConnectorGetCurrentQueryResultComment",()=>d({de:"Die Anfrage liefert das Ergebnis des letzten mit der Methode executeStatement an die Datenbank geschickten SQL-Befehls als Ob-jekt vom Typ QueryResult zurueck. Wurde bisher kein SQL-Befehl abgeschickt oder ergab der letzte Aufruf von executeStatement keine Ergebnismenge (z.B. bei einem INSERT-Befehl oder einem Syntaxfehler), so wird null geliefert. ",en:"Returns the result table from last executed statement."})),r(x,"databaseConnectorGetErrorMessageComment",()=>d({de:"Die Anfrage liefert null oder eine Fehlermeldung, die sich jeweils auf die letzte zuvor ausgefuehrte Datenbankoperation bezieht.",en:"Returns error message or null if last statement executed flawlessly."})),r(x,"databaseConnectorCloseComment",()=>d({de:"Die Datenbankverbindung wird geschlossen.",en:"Closes database connection"})),r(x,"databaseConnectorNotInEmbeddedVersionException",()=>d({de:"Aus der Embedded-IDE heraus kann keine Datenbankverbindung aufgebaut werden.",en:"You can't connect a database from online-ide embedded version."})),r(x,"connectionError",()=>d({de:"Fehler beim Aufbau der Datenbankverbindung",en:"Error connecting database"}));class Ly{constructor(t){r(this,"left");r(this,"right");this.content=t,this.left=new ol,this.right=new ol}}const mn=class mn extends z{constructor(){super();r(this,"node",null)}_constructor(){return this.node=null,this}_getContent(){return this._isEmpty()?null:this.node.content}_getLeftTree(){return this._isEmpty()?null:this.node.left}_getRightTree(){return this._isEmpty()?null:this.node.right}_isEmpty(){return this.node==null}_mj$insert$void$ContentType(e,i,n){n!=null&&(this._isEmpty()?this.node=new Ly(n):n._mj$isLess$boolean$ContentType(e,()=>{e.s.pop()?this.node.left._mj$insert$void$ContentType(e,i,n):n._mj$isGreater$boolean$ContentType(e,()=>{e.s.pop()&&this.node.right._mj$insert$void$ContentType(e,i,n)},this.node.content)},this.node.content)),i&&i()}_mj$remove$void$ContentType(e,i,n){this._isEmpty()||n==null||n._mj$isLess$boolean$ContentType(e,()=>{e.s.pop()?this.node.left._mj$remove$void$ContentType(e,i,n):n._mj$isGreater$boolean$ContentType(e,()=>{if(e.s.pop())this.node.right._mj$remove$void$ContentType(e,i,n);else if(this.node.left._isEmpty())this.node.right._isEmpty()?this.node=null:this.node=this.getNodeOfRightSuccessor();else if(this.node.right._isEmpty())this.node=this.getNodeOfLeftSuccessor();else if(this.getNodeOfRightSuccessor().left._isEmpty())this.node.content=this.getNodeOfRightSuccessor().content,this.node.right=this.getNodeOfRightSuccessor().right;else{const s=this.node.right.ancestorOfSmallRight(),a=s.node.left;this.node.content=a.node.content,s._mj$remove$void$ContentType(e,i,a.node.content)}},this.node.content)},this.node.content)}_mj$search$ContentType$ContentType(e,i,n){if(this._isEmpty()||n==null){e.s.push(null);return}else n._mj$isLess$boolean$ContentType(e,()=>{e.s.pop()?this._getLeftTree()._mj$search$ContentType$ContentType(e,i,n):n._mj$isGreater$boolean$ContentType(e,()=>{e.s.pop()?this._getRightTree()._mj$search$ContentType$ContentType(e,i,n):n._mj$isEqual$boolean$ContentType(e,()=>{e.s.pop()?e.s.push(this.node.content):e.s.push(null),i&&i()},this.node.content)},this.node.content)},this.node.content)}ancestorOfSmallRight(){return this.getNodeOfLeftSuccessor().left._isEmpty()?this:this.node.left.ancestorOfSmallRight()}getNodeOfLeftSuccessor(){return this.node.left.node}getNodeOfRightSuccessor(){return this.node.right.node}};r(mn,"__javaDeclarations",[{type:"declaration",signature:"class BinarySearchTree>",comment:x.binarySearchTreeClassComment},{type:"method",signature:"BinarySearchTree()",native:mn.prototype._constructor,comment:x.binarySearchTreeConstructorComment1},{type:"method",signature:"ContentType getContent()",native:mn.prototype._getContent,comment:x.binarySearchTreeGetContentComment},{type:"method",signature:"void insert(ContentType pContent)",java:mn.prototype._mj$insert$void$ContentType,comment:x.binarySearchTreeInsertComment},{type:"method",signature:"void remove(ContentType pContent)",java:mn.prototype._mj$remove$void$ContentType,comment:x.binarySearchTreeRemoveComment},{type:"method",signature:"ContentType search(ContentType pContent)",java:mn.prototype._mj$search$ContentType$ContentType,comment:x.binarySearchTreeSearchComment},{type:"method",signature:"BinarySearchTree getLeftTree()",native:mn.prototype._getLeftTree,comment:x.binarySearchTreeGetLeftTreeComment},{type:"method",signature:"BinarySearchTree getRightTree()",native:mn.prototype._getRightTree,comment:x.binarySearchTreeGetRightTreeComment},{type:"method",signature:"boolean isEmpty()",native:mn.prototype._isEmpty,comment:x.binarySearchTreeIsEmptyComment}]),r(mn,"type");let ol=mn;class Hm{constructor(t){r(this,"left");r(this,"right");this.content=t,this.left=new ll,this.right=new ll}}const zt=class zt extends z{constructor(){super();r(this,"node",null)}_constructor(e,i,n){return e!=null?(this.node=new Hm(e),i!=null?this.node.left=i:this.node.left=new zt,n!=null?this.node.right=n:this.node.right=new zt):this.node=null,this}_setContent(e){e!=null&&(this._isEmpty()&&(this.node=new Hm(e),this.node.left=new zt,this.node.right=new zt),this.node.content=e)}_getContent(){return this._isEmpty()?null:this.node.content}_setLeftTree(e){!this._isEmpty()&&e!=null&&(this.node.left=e)}_setRightTree(e){!this._isEmpty()&&e!=null&&(this.node.right=e)}_getLeftTree(){return this._isEmpty()?null:this.node.left}_getRightTree(){return this._isEmpty()?null:this.node.right}_isEmpty(){return this.node==null}};r(zt,"__javaDeclarations",[{type:"declaration",signature:"class BinaryTree",comment:x.binaryTreeClassComment},{type:"method",signature:"BinaryTree()",native:zt.prototype._constructor,comment:x.binaryTreeConstructorComment1},{type:"method",signature:"BinaryTree(ContentType pContent)",native:zt.prototype._constructor,comment:x.binaryTreeConstructorComment2},{type:"method",signature:"BinaryTree(ContentType pContent, BinaryTree pLeftTree, BinaryTree pRightTree)",native:zt.prototype._constructor,comment:x.binaryTreeConstructorComment3},{type:"method",signature:"void setContent(ContentType pContent)",native:zt.prototype._setContent,comment:x.binaryTreeSetContentComment},{type:"method",signature:"ContentType getContent()",native:zt.prototype._getContent,comment:x.binaryTreeGetContentComment},{type:"method",signature:"void setLeftTree(BinaryTree pTree)",native:zt.prototype._setLeftTree,comment:x.binaryTreeSetLeftTreeComment},{type:"method",signature:"void setRightTree(BinaryTree pTree)",native:zt.prototype._setRightTree,comment:x.binaryTreeSetRightTreeComment},{type:"method",signature:"BinaryTree getLeftTree()",native:zt.prototype._getLeftTree,comment:x.binaryTreeGetLeftTreeComment},{type:"method",signature:"BinaryTree getRightTree()",native:zt.prototype._getRightTree,comment:x.binaryTreeGetRightTreeComment},{type:"method",signature:"boolean isEmpty()",native:zt.prototype._isEmpty,comment:x.binaryTreeIsEmptyComment}]),r(zt,"type");let ll=zt;const Fs=class Fs extends mi{_mj$isGreater$boolean$ContentType(t,e,i){}_mj$isLess$boolean$ContentType(t,e,i){}_mj$isEqual$boolean$ContentType(t,e,i){}};r(Fs,"__javaDeclarations",[{type:"declaration",signature:"interface ComparableContent",comment:x.comparableContentInterfaceComment},{type:"method",signature:"boolean isGreater(ContentType pContent)",java:Fs.prototype._mj$isGreater$boolean$ContentType,comment:x.comparableContentIsGreaterComment},{type:"method",signature:"boolean isLess(ContentType pContent)",java:Fs.prototype._mj$isLess$boolean$ContentType,comment:x.comparableContentIsLessComment},{type:"method",signature:"boolean isEqual(ContentType pContent)",java:Fs.prototype._mj$isEqual$boolean$ContentType,comment:x.comparableContentIsEqualComment}]),r(Fs,"type");let Uu=Fs;const Er=class Er extends z{constructor(){super();r(this,"data",[]);r(this,"columnNames",[]);r(this,"columnTypes",[])}_constructor1(e,i,n){this.data=e,this.columnNames=i,this.columnTypes=n}_getData(){let e=[];for(let i of this.data){let n=[];e.push(n);for(let s of i)s==null&&n.push(null),n.push(s)}return e}_getColumnNames(){return this.columnNames.map(e=>e??null)}_getColumnTypes(){return this.columnTypes.map(e=>e??null)}_getColumnCount(){return this.data!=null&&this.data.length>0&&this.data[0]!=null?this.data[0].length:0}};r(Er,"__javaDeclarations",[{type:"declaration",signature:"class QueryResult",comment:x.queryResultClassComment},{type:"method",signature:"private QueryResult(string[][] pData, string[] pColumnNames, string[] pColumnTypes)",native:Er.prototype._constructor1},{type:"method",signature:"string[][] getData()",native:Er.prototype._getData,comment:x.queryResultGetDataComment},{type:"method",signature:"string[] getColumnNames()",native:Er.prototype._getColumnNames,comment:x.queryResultGetColumnNamesComment},{type:"method",signature:"string[] getColumnTypes()",native:Er.prototype._getColumnTypes,comment:x.queryResultGetColumnTypesComment},{type:"method",signature:"int getColumnCount()",native:Er.prototype._getColumnCount,comment:x.queryResultGetColumnCountComment}]),r(Er,"type");let dl=Er;const Ir=class Ir extends z{constructor(){super();r(this,"ch");r(this,"message",null);r(this,"currentQueryResult")}_cj$_constructor_$DatabaseConnector$string(e,i,n){let s=e.scheduler.interpreter,a=s.getMain();if(!a||a.isEmbedded()){this.message=x.databaseConnectorNotInEmbeddedVersionException(),e.s.push(this),i&&i();return}this.ch=new al(e.scheduler.interpreter),s.showProgramPointer(void 0,"DatabaseManager"),a.getBottomDiv().showHideDBBusyIcon(!0),e.state=B.waiting,this.ch.connect(n,l=>{a.getBottomDiv().showHideDBBusyIcon(!1),l&&(this.message=x.connectionError()+": "+l),e.s.push(this),e.state=B.running,i&&i()})}_mj$executeStatement$void$string(e,i,n){if(!this.ch){i&&i();return}e.scheduler.interpreter.showProgramPointer(void 0,"DatabaseManager"),this.ch.main.getBottomDiv().showHideDBBusyIcon(!0),e.state=B.waiting,n.trim().toLowerCase().startsWith("select")?this.ch.executeQuery(n,(s,a)=>{if(this.ch.main.getBottomDiv().showHideDBBusyIcon(!1),e.state=B.running,s){this.message=s,i&&i();return}this.currentQueryResult=new dl;const l=a.values.map(c=>c.map(u=>""+u)),h=a.columns.map(c=>"String");for(let c of a.values)for(let u=0;u{if(this.ch.main.getBottomDiv().showHideDBBusyIcon(!1),e.state=B.running,s){this.message=s,i&&i();return}this.currentQueryResult=new dl,this.currentQueryResult._constructor1([],[],[]),i&&i()})}_getCurrentQueryResult(){return this.currentQueryResult?this.currentQueryResult:null}_getErrorMessage(){return this.message}_close(){this.ch&&this.ch._close()}};r(Ir,"__javaDeclarations",[{type:"declaration",signature:"class DatabaseConnector",comment:x.databaseConnectorClassComment},{type:"method",signature:"public DatabaseConnector(string code)",java:Ir.prototype._cj$_constructor_$DatabaseConnector$string,comment:x.databaseConnectorConstructorComment},{type:"method",signature:"void executeStatement(string statement)",java:Ir.prototype._mj$executeStatement$void$string,comment:x.databaseConnectorExecuteStatementComment},{type:"method",signature:"QueryResult getCurrentQueryResult()",native:Ir.prototype._getCurrentQueryResult,comment:x.databaseConnectorGetCurrentQueryResultComment},{type:"method",signature:"string getErrorMessage()",native:Ir.prototype._getErrorMessage,comment:x.databaseConnectorGetErrorMessageComment},{type:"method",signature:"void close()",native:Ir.prototype._close,comment:x.databaseConnectorCloseComment}]),r(Ir,"type");let Qu=Ir;const er=class er extends z{constructor(){super();r(this,"vertices");r(this,"weight");r(this,"mark")}_constructor1(e,i,n){this.vertices=[e,i],this.weight=n,this.mark=!1}_isMarked(){return this.mark}_setMark(e){this.mark=e}_getVertices(){return this.vertices.slice()}_setWeight(e){this.weight=e}_getWeight(){return this.weight}};r(er,"__javaDeclarations",[{type:"declaration",signature:"class Edge",comment:x.edgeClassComment},{type:"method",signature:"Edge()",native:er.prototype._constructor1,comment:x.edgeConstructorComment},{type:"method",signature:"boolean isMarked()",native:er.prototype._isMarked,comment:x.edgeIsMarkedComment},{type:"method",signature:"void setMark(boolean pMark)",native:er.prototype._setMark,comment:x.edgeSetMarkComment},{type:"method",signature:"Vertex[] getVertices()",native:er.prototype._getVertices,comment:x.edgeGetVerticesComment},{type:"method",signature:"void setWeight(double pWeight)",native:er.prototype._setWeight,comment:x.edgeSetWeightComment},{type:"method",signature:"double getWeight(double pWeight)",native:er.prototype._getWeight,comment:x.edgeGetWeightComment}]),r(er,"type");let Yu=er;class Th{constructor(t){r(this,"next");this.contentObject=t}}const Yt=class Yt extends Ve{constructor(){super();r(this,"first",null);r(this,"last",null);r(this,"current",null)}_constructor(){return this}_isEmpty(){return this.first==null}_hasAccess(){return this.current!=null}_next(){this._hasAccess()&&(this.current=this.current.next)}_toFirst(){this._isEmpty()||(this.current=this.first)}_toLast(){this._isEmpty()||(this.current=this.last)}_getContent(){return this._hasAccess()?this.current.contentObject:null}_setContent(e){e!=null&&this._hasAccess()&&(this.current.contentObject=e)}_insert(e){if(e!=null){if(this._hasAccess()){const i=new Th(e);if(this.current!=this.first){const n=this._getPrevious(this.current);i.next=n.next,n.next=i}else i.next=this.first,this.first=i}else if(this._isEmpty()){const i=new Th(e);this.first=i,this.last=i}}}_append(e){if(e!=null)if(this._isEmpty())this._insert(e);else{const i=new Th(e);this.last.next=i,this.last=i}}_concat(e){e!=this&&e!=null&&!e._isEmpty()&&(this._isEmpty()?(this.first=e.first,this.last=e.last):(this.last.next=e.first,this.last=e.last),e.first=null,e.last=null,e.current=null)}_remove(){if(this._hasAccess()&&!this._isEmpty()){if(this.current==this.first)this.first=this.first.next;else{const i=this._getPrevious(this.current);this.current==this.last&&(this.last=i),i.next=this.current.next}const e=this.current.next;this.current.contentObject=null,this.current.next=null,this.current=e,this._isEmpty()&&(this.last=null)}}_getPrevious(e){if(e!=null&&e!=this.first&&!this._isEmpty()){let i=this.first;for(;i!=null&&i.next!=e;)i=i.next;return i}else return null}_mj$toString$String$(e,i){if(this.first==null){e.s.push("[]"),i&&i();return}let n=this.first.contentObject;if(typeof n=="object"||Array.isArray(n)||n==null){e._arrayOfObjectsToString(this.getElements(),()=>{e.s.push(new G(e.s.pop())),i&&i()});return}else{e.s.push(new G(e._primitiveElementOrArrayToString(this.getElements()))),i&&i();return}}getElements(){if(this.first==null)return[];const e=[];let i=this.first;for(;i!=null;)e.push(i.contentObject),i=i.next;return e}};r(Yt,"__javaDeclarations",[{type:"declaration",signature:"class List",comment:x.listClassComment},{type:"method",signature:"List()",native:Yt.prototype._constructor,comment:x.listClassConstructorComment},{type:"method",signature:"boolean isEmpty()",native:Yt.prototype._isEmpty,comment:x.listClassIsEmptyComment},{type:"method",signature:"boolean hasAccess()",native:Yt.prototype._hasAccess,comment:x.listClassHasAccessComment},{type:"method",signature:"void next()",native:Yt.prototype._next,comment:x.listClassNextComment},{type:"method",signature:"void toFirst()",native:Yt.prototype._toFirst,comment:x.listClassToFirstComment},{type:"method",signature:"void toLast()",native:Yt.prototype._toLast,comment:x.listClassToLastComment},{type:"method",signature:"ContentType getContent()",native:Yt.prototype._getContent,comment:x.listClassGetContentComment},{type:"method",signature:"void setContent(ContentType pContent)",native:Yt.prototype._setContent,comment:x.listClassSetContentComment},{type:"method",signature:"void insert(ContentType pContent)",native:Yt.prototype._insert,comment:x.listClassInsertComment},{type:"method",signature:"void append(ContentType pContent)",native:Yt.prototype._append,comment:x.listClassAppendComment},{type:"method",signature:"void concat(List pList)",native:Yt.prototype._concat,comment:x.listClassConcatComment},{type:"method",signature:"void remove()",native:Yt.prototype._remove,comment:x.listClassRemoveComment},{type:"method",signature:"String toString()",java:Yt.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Yt,"type");let Rs=Yt;const St=class St extends z{constructor(){super();r(this,"vertices");r(this,"edges")}_constructor1(){this.vertices=[],this.edges=[]}_getVertices(){let e=new Rs;for(let i of this.vertices)e._append(i);return e}_getEdges(){let e=new Rs;for(let i of this.edges)e._append(i);return e}_getVertex(e){let i=this.vertices.find(n=>n.id==e);return i||null}_addVertex(e){e==null||e.id==null||this.vertices.find(n=>n.id==e.id)||this.vertices.push(e)}_addEdge(e){e!=null&&(e.vertices[0]==null||e.vertices[1]==null||this._getVertex(e.vertices[0].id)==e.vertices[0]&&this._getVertex(e.vertices[1].id)==e.vertices[1]&&this._getEdge(e.vertices[0],e.vertices[1])==null&&e.vertices[0]!=e.vertices[1]&&this.edges.push(e))}_removeVertex(e){this.edges=this.edges.filter(n=>n.vertices[0]!=e&&n.vertices[1]!=e);let i=this.vertices.indexOf(e);i>=0&&this.vertices.splice(i,1)}_removeEdge(e){this.edges=this.edges.filter(i=>i!=e)}_setAllVertexMarks(e){this.vertices.forEach(i=>i.mark=e)}_setAllEdgeMarks(e){this.edges.forEach(i=>i.mark=e)}_allVerticesMarked(){return typeof this.vertices.find(e=>!e.mark)>"u"}_allEdgesMarked(){return typeof this.edges.find(e=>!e.mark)>"u"}_getNeighbours(e){let i=new Rs;for(let n of this.edges)n.vertices[0]==e?i._append(n.vertices[1]):n.vertices[1]==e&&i._append(n.vertices[0]);return i}_getEdgesForVertex(e){let i=new Rs;for(let n of this.edges)(n.vertices[0]==e||n.vertices[1]==e)&&i._append(n);return i}_getEdge(e,i){for(let n of this.edges)if(n.vertices[0]==e&&n.vertices[1]==i||n.vertices[1]==e&&n.vertices[0]==i)return n;return null}_isEmpty(){return this.vertices.length==0}};r(St,"__javaDeclarations",[{type:"declaration",signature:"class Graph",comment:x.graphClassComment},{type:"method",signature:"Graph()",native:St.prototype._constructor1,comment:x.graphConstructorComment},{type:"method",signature:"List getVertices()",native:St.prototype._getVertices,comment:x.graphGetVerticesComment},{type:"method",signature:"List getEdges()",native:St.prototype._getEdges,comment:x.graphGetEdgesComment},{type:"method",signature:"Vertex getVertex(string pID)",native:St.prototype._getVertex,comment:x.graphGetVertexComment},{type:"method",signature:"void addVertex(Vertex pVertex)",native:St.prototype._addVertex,comment:x.graphAddVertexComment},{type:"method",signature:"void addEdge(Edge pEdge)",native:St.prototype._addEdge,comment:x.graphAddEdgeComment},{type:"method",signature:"void removeVertex(Vertex pVertex)",native:St.prototype._removeVertex,comment:x.graphRemoveVertexComment},{type:"method",signature:"void removeEdge(Edge pEdge)",native:St.prototype._removeEdge,comment:x.graphRemoveEdgeComment},{type:"method",signature:"void setAllVertexMarks(boolean pMark)",native:St.prototype._setAllVertexMarks,comment:x.graphSetAllVertexMarksComment},{type:"method",signature:"void setAllEdgeMarks(boolean pMark)",native:St.prototype._setAllEdgeMarks,comment:x.graphSetAllEdgeMarksComment},{type:"method",signature:"boolean allVerticesMarked()",native:St.prototype._allVerticesMarked,comment:x.graphAllVerticesMarkedComment},{type:"method",signature:"boolean allEdgesMarked()",native:St.prototype._allEdgesMarked,comment:x.graphAllEdgesMarkedComment},{type:"method",signature:"List getNeighbours(Vertex pVertex)",native:St.prototype._getNeighbours,comment:x.graphGetNeighboursComment},{type:"method",signature:"List getEdges(Vertex pVertex)",native:St.prototype._getEdgesForVertex,comment:x.graphGetEdgesForVertexComment},{type:"method",signature:"Edge getEdge(Vertex pVertex, Vertex pAnotherVertex)",native:St.prototype._getEdge,comment:x.graphGetEdgeComment},{type:"method",signature:"boolean isEmpty()",native:St.prototype._isEmpty,comment:x.graphIsEmptyComment}]),r(St,"type");let Zu=St;class Fy{constructor(t){r(this,"next",null);this.contentObject=t}}const tr=class tr extends Ve{constructor(){super();r(this,"head",null);r(this,"tail",null)}_constructor(){return this}_isEmpty(){return this.head==null}_enqueue(e){if(e!=null){const i=new Fy(e);this._isEmpty()?(this.head=i,this.tail=i):(this.tail.next=i,this.tail=i)}}_dequeue(){this._isEmpty()||(this.head=this.head.next,this._isEmpty()&&(this.head=null,this.tail=null))}_front(){return this._isEmpty()?null:this.head.contentObject}_mj$toString$String$(e,i){if(this.head==null){e.s.push("[]"),i&&i();return}let n=this.head.contentObject;if(typeof n=="object"||Array.isArray(n)||n==null){e._arrayOfObjectsToString(this.getElements(),()=>{e.s.push(new G(e.s.pop())),i&&i()});return}else{e.s.push(new G(e._primitiveElementOrArrayToString(this.getElements()))),i&&i();return}}getElements(){if(this.head==null)return[];const e=[];let i=this.head;for(;i!=null;)e.push(i.contentObject),i=i.next;return e}};r(tr,"__javaDeclarations",[{type:"declaration",signature:"class Queue",comment:x.queueClassComment},{type:"method",signature:"Queue()",native:tr.prototype._constructor,comment:x.queueClassConstructorComment},{type:"method",signature:"boolean isEmpty()",native:tr.prototype._isEmpty,comment:x.queueClassIsEmptyComment},{type:"method",signature:"void enqueue(ContentType pContent)",native:tr.prototype._enqueue,comment:x.queueClassEnqueueComment},{type:"method",signature:"void dequeue()",native:tr.prototype._dequeue,comment:x.queueClassDequeueComment},{type:"method",signature:"ContentType front()",native:tr.prototype._front,comment:x.queueClassFrontComment},{type:"method",signature:"String toString()",java:tr.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(tr,"type");let Xu=tr;class _y{constructor(t){r(this,"next",null);this.content=t}}const ir=class ir extends Ve{constructor(){super();r(this,"head",null)}_constructor(){return this}_isEmpty(){return this.head==null}_push(e){if(e!=null){const i=new _y(e);i.next=this.head,this.head=i}}_pop(){this._isEmpty()||(this.head=this.head.next)}_top(){return this._isEmpty()?null:this.head.content}_mj$toString$String$(e,i){if(this.head==null){e.s.push("[]"),i&&i();return}let n=this.head.content;if(typeof n=="object"||Array.isArray(n)||n==null){e._arrayOfObjectsToString(this.getElements(),()=>{e.s.push(new G(e.s.pop())),i&&i()});return}else{e.s.push(new G(e._primitiveElementOrArrayToString(this.getElements()))),i&&i();return}}getElements(){if(this.head==null)return[];const e=[];let i=this.head;for(;i!=null;)e.push(i.content),i=i.next;return e}};r(ir,"__javaDeclarations",[{type:"declaration",signature:"class Stack",comment:x.stackClassComment},{type:"method",signature:"Stack()",native:ir.prototype._constructor,comment:x.stackClassConstructorComment},{type:"method",signature:"boolean isEmpty()",native:ir.prototype._isEmpty,comment:x.stackClassIsEmptyComment},{type:"method",signature:"void push(ContentType pContent)",native:ir.prototype._push,comment:x.stackClassPushComment},{type:"method",signature:"void pop()",native:ir.prototype._pop,comment:x.stackClassPopComment},{type:"method",signature:"ContentType top()",native:ir.prototype._top,comment:x.stackClassTopComment},{type:"method",signature:"String toString()",java:ir.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(ir,"type");let Ju=ir;const ss=class ss extends z{constructor(){super();r(this,"id");r(this,"mark")}_constructor1(e){return this.id=e==null?null:e.value,this.mark=!1,this}_getID(){return this.id==null?null:new G(this.id)}_isMarked(){return this.mark}_setMark(e){this.mark=e}};r(ss,"__javaDeclarations",[{type:"declaration",signature:"class Vertex",comment:x.vertexClassComment},{type:"method",signature:"Vertex(String pID)",native:ss.prototype._constructor1,comment:x.vertexConstructorComment},{type:"method",signature:"String getID()",native:ss.prototype._getID,comment:x.vertexGetIDComment},{type:"method",signature:"boolean isMarked()",native:ss.prototype._isMarked,comment:x.vertexIsMarkedComment},{type:"method",signature:"void setMark(boolean pMark)",native:ss.prototype._setMark,comment:x.vertexSetMarkComment}]),r(ss,"type");let em=ss;class zy extends mo{constructor(){super(),this.classesInterfacesEnums.push(Rs,Xu,Ju,Uu,ll,ol,em,Yu,Zu,dl,Qu)}isReplModule(){return!1}getCodeFragments(){return[]}prepareSystemModule(t){let e=["List","ArrayList","LinkedList","Vector","Stack","Queue","Deque","CopyOnWriteArrayList"];t.classesInterfacesEnums=t.classesInterfacesEnums.filter(i=>e.indexOf(this.getName(i))<0)}}class vm{constructor(){r(this,"libraryIds",[])}addLibrariesToCompiler(t){t.setAdditionalModules(...this.getAdditionalModules())}getAdditionalModules(){let t=[new By];for(let e of this.libraryIds)switch(e){case"gng":t.push(new Oy);break;case"nrw":t.push(new zy);break;case"niedersachsen":t.push(new Vy);break}return t}addLibraries(...t){for(let e of t)this.libraryIds.indexOf(e)<0&&this.libraryIds.push(e)}}r(vm,"libraries",[{identifier:"Graphics and Games Library",description:"Graphische Klassenbibliothek für die bayerischen Informatikbücher des Cornelsen-Verlages",id:"gng"},{identifier:"Abiturklassen Nordrhein-Westfalen",description:"Klassenbibliothek zur Verwendung im Zentralabitur Nordrhein-Westfalen",id:"nrw"},{identifier:"Abiturklassen Niedersachsen",description:"Klassenbibliothek zur Verwendung im Abitur Niedersachsen",id:"niedersachsen"}]);class wi extends jy{constructor(e,i,n){super(e);r(this,"isFolder");r(this,"parent_folder_id");r(this,"sorting_order");r(this,"readonly");r(this,"id");r(this,"owner_id");r(this,"version");r(this,"published_to");r(this,"repository_id");r(this,"has_write_permission_to_repository");r(this,"spritesheetId");r(this,"grade");r(this,"points");r(this,"comment");r(this,"files",[]);r(this,"currentlyOpenFile");r(this,"saved",!0);r(this,"pruefung_id");r(this,"userSpritesheet");r(this,"settings",{libraries:[]});this.main=i,this.owner_id=n}setLibraries(e){let i=new vm;i.addLibraries(...this.settings.libraries),i.addLibrariesToCompiler(e)}getFiles(){return this.files}getPath(e){let i=[],n;for(;n=e.parent_folder_id?this.files.find(s=>s.id==e.parent_folder_id):void 0;)i.unshift(n.name),e=n;return i}static pathsEqual(e,i){if(e.length!=i.length)return!1;for(let n=0;ni.hasMonacoModel()))e.getMonacoModel().dispose();this.files=[]}addFile(e){this.files.push(e)}removeFile(e){let i=this.files.indexOf(e);i>=0&&this.files.splice(i,1)}getWorkspaceData(e){let i={name:this.name,isFolder:this.isFolder,parent_folder_id:this.parent_folder_id,sorting_order:this.sorting_order,id:this.id,owner_id:this.owner_id,current_file_id:this.currentlyOpenFile==null?null:this.currentlyOpenFile.id,files:[],version:this.version,repository_id:this.repository_id,has_write_permission_to_repository:this.has_write_permission_to_repository,settings:JSON.stringify(this.settings),spritesheet_id:this.spritesheetId,pruefung_id:this.pruefung_id,readonly:this.readonly,grade:this.grade,points:this.points,comment:this.comment};if(e)for(let n of this.files)i.files.push(n.getFileData(this));return i}renderSynchronizeButton(e){let i=e.getIconButtonByTag("Synchronize");i||(i=e.addIconButton("img_open-change-dark",()=>{this.synchronizeWithRepository()},T.SynchronizeWorkspace(),!1),i.tag="Synchronize");let n=this.main;i.setVisible(this.repository_id!=null&&this.owner_id==n.user.id)}synchronizeWithRepository(){let e=this.main;this.repository_id!=null&&this.owner_id==e.user.id&&e.networkManager.sendUpdatesAsync(!0).then(()=>{e.synchronizationManager.synchronizeWithWorkspace(this)})}static restoreFromData(e,i){let n=e.settings!=null&&e.settings.startsWith("{")?JSON.parse(e.settings):{libraries:[]};n.libaries&&(n.libraries=n.libaries);let s=new wi(e.name,i,e.owner_id);s.id=e.id,s.isFolder=e.isFolder,s.parent_folder_id=e.parent_folder_id,s.sorting_order=e.sorting_order,s.owner_id=e.owner_id,s.version=e.version,s.repository_id=e.repository_id,s.has_write_permission_to_repository=e.has_write_permission_to_repository,s.settings=n,s.pruefung_id=e.pruefung_id,s.spritesheetId=e.spritesheet_id,s.readonly=e.readonly,s.grade=e.grade,s.points=e.points,s.comment=e.comment,s.settings.libraries==null&&(s.settings.libraries=[]);for(let a of e.files){let l=Ge.restoreFromData(i,a);s.files.push(l),a.id==e.current_file_id&&(s.currentlyOpenFile=l)}return s}findFileById(e){return this.files.find(i=>i.id==e)}getFirstFile(){if(this.files.length>0)return this.files[0]}getIdentifier(){return this.name}getModuleForMonacoModel(e){var s;if(e==null||!((s=this.main)==null?void 0:s.getCompiler()))return;for(let a of this.getFiles())if(a.getMonacoModel()==e)return this.main.getCompiler().findModuleByFile(a);let n=this.main.getRepl().getCurrentModule();if(n&&n.file instanceof Ge&&n.file.getMonacoModel()==e)return n}async ensureModuleIsCompiled(e){e.isReplModule()?this.main.getRepl().compile(e.file.getText(),!1):await this.main.getCompiler().updateSingleModuleForCodeCompletion(e)}getCurrentlyEditedModule(){let e=this.main.getMainEditor().getModel();if(e)return this.getModuleForMonacoModel(e)}getFileForMonacoModel(e){if(e!=null){for(let i of this.getFiles())if(i.getMonacoModel()==e)return i}}getCurrentlyEditedFile(){let e=this.main.getMainEditor().getModel();if(e)return this.getFileForMonacoModel(e)}disposeMonacoModels(){this.getFiles().forEach(e=>e.disposeMonacoModel())}createMonacoModels(){this.getFiles().forEach(e=>e.getMonacoModel())}getFolderContentsRecursively(e){let i=e.filter(n=>n.parent_folder_id==this.id);for(let n of i.slice())n.isFolder&&(i=i.concat(n.getFolderContentsRecursively(e)));return i}}class Od{}r(Od,"displayOnLeftSide",()=>d({de:"Auf der linken Seite darstellen",en:"Display on left side"})),r(Od,"displayOnRightSide",()=>d({de:"Auf der rechten Seite darstellen",en:"Display on right side"}));class fe{}r(fe,"serverTemporarilyNotReachable",()=>d({de:"Ser Server ist temporär nicht erreichbar.",en:"Server is temporarily not reachable."})),r(fe,"chooseFile",()=>d({de:"Wählen Sie eine Datei aus!",en:"Choose a file!"})),r(fe,"yourWorkspace",()=>d({de:"Dein Workspace:",en:"Your Workspace:"})),r(fe,"withWriteAccess",()=>d({de:", mit Schreibzugriff",en:", with write access"})),r(fe,"withoutWriteAccess",()=>d({de:", ohne Schreibzugriff",en:", without write access"})),r(fe,"repoCurrentVersion",t=>d({de:"Repository (aktuelle Version "+t+"):",en:"Repository (current Version "+t+"):"})),r(fe,"synchronizeWithRepository",()=>d({de:"Synchronisieren mit Repository",en:"Synchronize with Repository"})),r(fe,"synchronizeWorkspaceWithRepository",()=>d({de:"Workspace mit Repository synchronisieren",en:"Synchronize Workspace with repository"})),r(fe,"backToCoding",()=>d({de:"Zurück zum Programmieren",en:"Back to coding"})),r(fe,"history",()=>d({de:"History:",en:"History:"})),r(fe,"repositoryCurrentVersion",()=>d({de:"Repository (aktuelle Version):",en:"Repository (current version):"})),r(fe,"showOwnWorkspace",()=>d({de:"Zeige eigenen Workspace",en:"Show own workspace"})),r(fe,"showCurrentRepoVersion",()=>d({de:"Zeige aktuelle Repository-Version",en:"Show current Repository version"})),r(fe,"saveWorkspaceChanges",()=>d({de:"Änderungen am Workspace (rot!) speichern",en:"Save workspace-changes (red!)"})),r(fe,"saveRepoChanges",()=>d({de:"Änderungen am Repository (rot!) speichern",en:"Save Repository changes (red!)"})),r(fe,"commitMessage",()=>d({de:"Beschreibe kurz die vorgenommenen Änderungen:",en:"Commit message:"})),r(fe,"OK",()=>d({de:"OK",en:"OK"}));class Di{}r(Di,"withoutVersion",()=>d({de:"(ohne Version)",en:"(without version)"})),r(Di,"withChanges",()=>d({de:"mit Änderungen",en:"with changes"})),r(Di,"DELETED",()=>d({de:" - GELÖSCHT",en:" - DELETED"})),r(Di,"synchronized",()=>d({de:"synchron",en:"identical"})),r(Di,"markAsMerged",()=>d({de:'Als "merged" markieren',en:'Mark as "merged"'})),r(Di,"merged",()=>d({de:"merged",en:"merged"}));class Gs{}r(Gs,"Workspace",()=>d({de:"Workspace: ",en:"Workspace: "})),r(Gs,"historyVersion",()=>d({de:"History-Version ",en:"History version"})),r(Gs,"serverNotReachable",()=>d({de:"Der Server ist nicht erreichbar!",en:"Server not reachable!"}));class Ie{}r(Ie,"all",()=>d({de:"alle",en:"alle"})),r(Ie,"private",()=>d({de:"private",en:"private"})),r(Ie,"accessableForClass",()=>d({de:"für die Klasse freigegebene",en:"accessable for whole class"})),r(Ie,"accessableForSchool",()=>d({de:"für die Schule freigegebene",en:"accessable for whole school"})),r(Ie,"caption",()=>d({de:"Checkout Repository - Workspace mit Repository verbinden",en:"Checkout Repository - connect workspace to repository"})),r(Ie,"backToCoding",()=>d({de:"Zurück zum Programmieren",en:"Back to coding"})),r(Ie,"connectThisWorkspaceToRepository",()=>d({de:"Diesen Workspace mit dem Repository verbinden:",en:"Connect this workspace to repository:"})),r(Ie,"inputRepositoryCode",()=>d({de:"Alternativ zur Auswahl unten Eingabe eines Repository-Codes:",en:"Provide repository code as alternative to choosing below:"})),r(Ie,"showTheseRepositories",()=>d({de:"Diese Repositories anzeigen:",en:"Show these repositories:"})),r(Ie,"filterSearch",()=>d({de:"Filter/Suche:",en:"Filter/search:"})),r(Ie,"createNewWorkspace",()=>d({de:"Neuen Workspace erstellen",en:"Create new workspace"})),r(Ie,"codeMustContainT",()=>d({de:"Der Code muss den Buchstaben T enthalten.",en:"Code has to contain character T."})),r(Ie,"digitPriorToTInsideCode",()=>d({de:"Im Code muss vor dem T eine Zahl stehen.",en:"Code has to contain a digit prior to character T."})),r(Ie,"newWorkspaceCreateSuccessfully",t=>d({de:"Der neue Workspace "+t+" wurde erfolgreich angelegt.",en:"New workspace "+t+" successfully created."})),r(Ie,"workspaceSuccessfullyConnectedToRepository",t=>d({de:"Der Workspace "+t+" wurde erfolgreich mit dem Repository verbunden.",en:"Workspace "+t+" successfully connected to repository."}));class tt{}r(tt,"nameOfRepository",()=>d({de:"Name des Repositorys:",en:"Name of repository:"})),r(tt,"description",()=>d({de:"Beschreibung:",en:"Description:"})),r(tt,"publishedFor",()=>d({de:"Veröffentlicht für:",en:"Published for:"})),r(tt,"privateRepository",()=>d({de:"Keine Veröffentlichung (privates Repository)",en:"Private repository (not published)"})),r(tt,"publishedToClassStudents",()=>d({de:"Veröffentlicht für alle Schüler/-innen der Klasse",en:"Published to students of own class"})),r(tt,"publishedToClasses",()=>d({de:"Veröffentlicht für alle Schüler/-innen der unterrichteten Klassen",en:"Published to all students in all of my classes"})),r(tt,"publishedToSchool",()=>d({de:"Veröffentlicht für alle Nutzer/-innen an meiner Schule",en:"Published to all users in my school"})),r(tt,"createRepositoryAndConnectToWorkspace",t=>d({de:"Repository anlegen und mit Workspae "+t+" verknüpfen:",en:"Create repository and connect to workspace "+t}));class le{}r(le,"caption",()=>d({de:"Repository-Verwaltung",en:"Repository Management"})),r(le,"backToCoding",()=>d({de:"Zurück zum Programmieren",en:"Back to coding"})),r(le,"repositories",()=>d({de:"Repositories:",en:"Repositories:"})),r(le,"owner",()=>d({de:"Eigentümer:",en:"Owner:"})),r(le,"codeForRepoReadAccess",()=>d({de:"Code zum lesenden Zugriff aufs Repository:",en:"Repository read access code:"})),r(le,"codeForRepoWriteAccess",()=>d({de:"Code zum schreibenden Zugriff aufs Repository:",en:"Repository write access code:"})),r(le,"copy",()=>d({de:"Kopieren",en:"Copy"})),r(le,"change",()=>d({de:"Ändern",en:"Change"})),r(le,"repositoryUsers",()=>d({de:"Benutzer, die das Repository nutzen",en:"Users using this repository"})),r(le,"writeAccess",()=>d({de:"Schreibberechtigung",en:"Write access"})),r(le,"saveChanges",()=>d({de:"Änderungen speichern",en:"Save changes"})),r(le,"noRepositoryPresent",()=>d({de:`Sie haben noch keine Repositories, und können daher keine verwalten. Tipp: Ein Repository können Sie durch Rechtsklick auf einen Workspace anlegen.`,en:`There's no repository yet, therefore none to manage. Hint: You may create a repository by right-clicking a workspace, then select 'create repository'.`})),r(le,"deleteRepository",()=>d({de:"Repository löschen...",en:"Delete Repository..."})),r(le,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(le,"sureDelete",()=>d({de:"Ich bin mir sicher: löschen!",en:"I'm sure: delete!"})),r(le,"changesNotSaved",t=>d({de:"Deine Änderungen am Repository "+t+" wurden nicht gespeichert.",en:"Your changes to repository "+t+" have not been saved."})),r(le,"transferOwnership",(t,e)=>d({de:"Soll die Eigentümerschaft am Repository "+t+" wirklich an "+e+" übertragen werden?",en:"Transfer ownership of repository "+t+" to user "+e+"?"})),r(le,"changesSavedSuccessfully",()=>d({de:"Die Änderungen wurden erfolgreich gespeichert.",en:"Changes have been saved successfully."})),r(le,"error",()=>d({de:"Fehler: ",en:"Fehler: "})),r(le,"notSaved",()=>d({de:"Der Speichervorgang wurde nicht durchgeführt.",en:"Changes have not been saved."}));class va{constructor(t){r(this,"files",[]);r(this,"copiedFromWorkspace");r(this,"isCurrentRepositoryVersion",!1);r(this,"name");this.manager=t}hasChanges(){for(let t of this.files)if(t.state!="original")return!0;return!1}isWritable(){return this.copiedFromWorkspace!=null||this.isCurrentRepositoryVersion&&this.manager.repositoryIsWritable}copyFromWorkspace(t){return this.files=[],t.getFiles().filter(e=>!e.isFolder).forEach(e=>{this.files.push({name:e.name,path:t.getPath(e),repository_file_version:e.repository_file_version,identical_to_repository_version:e.identical_to_repository_version,idInsideRepository:e.is_copy_of_id,idInsideWorkspace:e.id,workspaceFile:e,text:e.getText().replace(/\r\n/g,` `),synchroWorkspace:this,state:"original",markedAsMerged:!1,originalText:e.getText(),monacoModel:null})}),this.name=Gs.Workspace()+t.name,this.copiedFromWorkspace=t,this}copyFromRepository(t,e){return this.isCurrentRepositoryVersion=e,this.files=[],t.fileEntries.forEach(i=>{this.files.push({name:i.filename,path:i.path.slice(),idInsideRepository:i.id,idInsideWorkspace:null,workspaceFile:null,repository_file_version:i.version,identical_to_repository_version:!0,text:i.text==null?null:i.text.replace(/\r\n/g,` `),synchroWorkspace:this,state:"original",markedAsMerged:!1,monacoModel:null})}),this.name="Repository: "+t.name+" (V "+t.version+")",this}copyFromHistoryElement(t){let e=t.getRepositoryState();return this.copyFromRepository(e,!1),this.name=Gs.historyVersion()+e.version,this}commit(t,e,i,n,s){let a={},l={},h=[];e.fileEntries.forEach(b=>a[b.id]=b),this.files.forEach(b=>{b.idInsideRepository!=null&&(l[b.idInsideRepository]=b)});let c={comment:i,name:n.user.rufname+" "+n.user.familienname,username:n.user.username,isIntermediateEntry:!1,timestamp:pp(new Date),userId:n.user.id,version:e.version+1,historyFiles:[]};for(let b of this.files){if(b.state=="deleted")continue;let A=a[b.idInsideRepository];if(A==null)b.idInsideRepository==null&&(h.push(b.committedFromFile.idInsideWorkspace),b.committedFromFile.idInsideRepository=b.committedFromFile.idInsideWorkspace,b.committedFromFile.repository_file_version=1,b.idInsideRepository=b.committedFromFile.idInsideWorkspace,b.committedFromFile.idInsideRepository=b.committedFromFile.idInsideWorkspace),c.historyFiles.push({id:b.idInsideRepository,type:"create",version:1,content:b.text,filename:b.name,path:b.path});else if(A.text!=b.text){A.version++;let S=this.getPatch(A.text,b.text);S==null?c.historyFiles.push({id:A.id,type:"intermediate",version:A.version,content:b.text,filename:b.name,path:b.path}):c.historyFiles.push({id:A.id,type:"change",version:A.version,content:S,filename:A.filename==b.name?void 0:b.name,path:wi.pathsEqual(A.path,b.path)?void 0:b.path.slice()});let w=b.committedFromFile;w!=null&&(w.repository_file_version=A.version,w.workspaceFile.repository_file_version=A.version,w.workspaceFile.setSaved(!1))}else(A.filename!=b.name||!wi.pathsEqual(A.path,b.path))&&c.historyFiles.push({id:A.id,type:"intermediate",version:A.version,filename:A.filename==b.name?void 0:b.name,path:wi.pathsEqual(A.path,b.path)?void 0:b.path.slice()})}for(let b of e.fileEntries)(l[b.id]==null||l[b.id].state=="deleted")&&c.historyFiles.push({id:b.id,type:"delete",version:b.version});let g={files:this.files.filter(b=>b.state!="deleted").map(b=>({filename:b.name,path:b.path.slice(),id:b.idInsideRepository,text:b.text,version:b.repository_file_version})),repositoryVersionBeforeCommit:e.version,repository_id:e.id,workspace_id:t.id,repositoryHistoryEntry:c,newlyVersionedFileIds:h},f=this;Re("commitFiles",g,b=>{t.getFiles().forEach(A=>{h.indexOf(A.id)>=0&&(A.is_copy_of_id=A.id,A.repository_file_version=1,A.identical_to_repository_version=!0,A.setSaved(!1))}),f.manager.currentUserSynchroWorkspace.files.forEach(A=>{let S=A.workspaceFile;S!=null&&A.text==S.getText()&&(A.repository_file_version!=S.repository_file_version||A.identical_to_repository_version!=S.identical_to_repository_version)&&(S.identical_to_repository_version=A.identical_to_repository_version,S.repository_file_version=A.repository_file_version,S.setSaved(!1)),S.is_copy_of_id!=null&&(A.idInsideRepository=S.is_copy_of_id)}),f.manager.main.networkManager.sendUpdatesAsync(!0).then(()=>{s(b.repository,null)})},b=>{s(e,b)})}getPatch(t,e){let i=new op,n=i.patch_make(t,e),s=JSON.stringify(n),a=JSON.parse(s),l=i.patch_apply(a,t);return l==null||l[0]==null?null:l[0]==e?s:null}async writeChangesToWorkspace(){var s,a;let t=this.copiedFromWorkspace,e={},i={};t.getFiles().filter(l=>!l.isFolder).forEach(l=>{l.is_copy_of_id!=null&&(e[l.is_copy_of_id]=l)}),this.files.forEach(l=>{l.idInsideWorkspace!=null&&(i[l.idInsideWorkspace]=l)});let n=this.manager.main;for(let l of t.getFiles().filter(h=>!h.isFolder)){let h=i[l.id];h!=null&&h.state!="deleted"?(l.setText(h.monacoModel.getValue(H.EndOfLinePreference.LF,!1)),h.text=l.getText(),l.is_copy_of_id=h.idInsideRepository,l.repository_file_version=h.repository_file_version,l.identical_to_repository_version=h.identical_to_repository_version,l.setSaved(!1),this.manager.main.getCompiler().setFileDirty(l),l.name=h.name,wi.pathsEqual(t.getPath(l),h.path)||(l.parent_folder_id=await this.createPathAndReturnParentFolderId(t,h.path))):(n.networkManager.sendDeleteWorkspaceOrFileAsync("file",[l.id]).then(c=>{c||alert(Gs.serverNotReachable())}),this.files.splice(this.files.indexOf(h),1),t.removeFile(l),n.projectExplorer.fileTreeview.removeElementAndItsFolderContents(l),n.currentWorkspace==t&&((s=n.getCurrentWorkspace())==null?void 0:s.getCurrentlyEditedFile())==l&&n.projectExplorer.setFileActive(null))}for(let l of this.files)if(l.idInsideRepository!=null&&e[l.idInsideRepository]==null){let h=new Ge(this.manager.main,l.name,l.text);h.is_copy_of_id=l.idInsideRepository,h.repository_file_version=l.repository_file_version,h.identical_to_repository_version=l.identical_to_repository_version,h.parent_folder_id=await this.createPathAndReturnParentFolderId(t,l.path),t.addFile(h),await n.networkManager.sendCreateFile(h,t,n.user.id)||alert(Gs.serverNotReachable())}if(await n.networkManager.sendUpdatesAsync(!0),n.currentWorkspace==t){let l=(a=n.getCurrentWorkspace())==null?void 0:a.getCurrentlyEditedFile();n.projectExplorer.setWorkspaceActive(t,!0),t.getFiles().indexOf(l)>=0&&(n.projectExplorer.setFileActive(l),n.projectExplorer.fileTreeview.selectElement(l,!1))}t.getFiles().forEach(l=>n.getCompiler().setFileDirty(l))}async createPathAndReturnParentFolderId(t,e){let i;for(let n=0;na.name==e[n]&&a.isFolder&&a.parent_folder_id==s),i==null&&(i=new Ge(this.manager.main,e[n]),i.isFolder=!0,i.parent_folder_id=s,await this.manager.main.networkManager.sendCreateFile(i,t,t.owner_id))}return(i==null?void 0:i.id)||null}}const Jd=class Jd{constructor(t,e,i,n){r(this,"$historyElementDiv");this.manager=t,this.repository=e,this.repositoryHistoryEntry=i,this.historyEntryIndex=n,this.$historyElementDiv=M(null,"jo_synchro_historyElement"),this.$historyElementDiv.attr("draggable","true");let s=this;this.$historyElementDiv.on("drag",()=>{Jd.currentlyDragged=s});let a=M(null,"jo_synchro_historyElementLine1");a.append(y(`
V ${i.version}
`)),a.append(y(`
${i.name}
`)),this.$historyElementDiv.append(a);let l=M(null,"jo_synchro_historyElementLine2");l.append(y(`
${i.timestamp}
`)),this.$historyElementDiv.append(l);let h=M(null,"jo_synchro_historyElementLine3");h.append(y(`
${i.comment}
`)),this.$historyElementDiv.append(h),t.$historyScrollDiv.prepend(this.$historyElementDiv),this.$historyElementDiv.on("click contextmenu",c=>{c.preventDefault(),Ln([{caption:Od.displayOnLeftSide(),callback:()=>{let u=new va(this.manager).copyFromHistoryElement(this);this.manager.leftSynchroWorkspace=u,this.manager.setupSynchronizationListElements()}},{caption:Od.displayOnRightSide(),callback:()=>{let u=new va(this.manager).copyFromHistoryElement(this);this.manager.rightSynchroWorkspace=u,this.manager.setupSynchronizationListElements()}}],c.pageX+2,c.pageY+2)})}getRepositoryState(){let t=this.repository.historyEntries,e=this.historyEntryIndex;for(;e>0&&!t[e].isIntermediateEntry;)e--;let i=[];for(let s=e;s<=this.historyEntryIndex;s++){let a=t[s];for(let l of a.historyFiles)if(a.isIntermediateEntry)this.setIntermediateState(l,i);else switch(l.type){case"create":this.createFile(l,i);break;case"delete":this.deleteFile(l,i);break;case"change":this.changeFile(l,i);break;case"intermediate":this.setIntermediateState(l,i);break}}let n=Object.assign({},this.repository);return n.fileEntries=i,n.version=this.repositoryHistoryEntry.version,n}setIntermediateState(t,e){let i=e.find(n=>n.id==t.id);i!=null&&(i.text=t.content,i.version=t.version,t.filename&&(i.filename=t.filename),t.path&&(i.path=t.path.slice()))}changeFile(t,e){let i=e.find(n=>n.id==t.id);if(i!=null){if(t.content!=null){let n=JSON.parse(t.content),s=i.text,l=new op().patch_apply(n,s);i.text=l[0],i.version=t.version}t.filename&&(i.filename=t.filename),t.path&&(i.path=t.path.slice())}}deleteFile(t,e){let i=e.findIndex(n=>n.id==t.id);i!=null&&e.splice(i,1)}createFile(t,e){let i={id:t.id,text:t.content,filename:t.filename,path:t.path?t.path.slice():[],version:t.version};e.push(i)}};r(Jd,"currentlyDragged");let ko=Jd;class qy{static deserializeRepository(t){t.files!=null&&t.files.startsWith("[")?t.fileEntries=JSON.parse(t.files):t.fileEntries=[],t.fileEntries.forEach(e=>{e.text=e.text.replace(/\r\n/g,` `),e.path=e.path??[]}),t.history.endsWith("]")||(t.history+="]"),t.historyEntries=JSON.parse(t.history)}static copyRepository(t,e){let i=Object.assign({},t);if(t.fileEntries!=null){i.fileEntries=[];for(let n of t.fileEntries)i.fileEntries.push(Object.assign({},n))}if(t.historyEntries!=null&&e){i.historyEntries=[];for(let n of t.historyEntries){let s=Object.assign({},n);if(n.historyFiles!=null){s.historyFiles=[];for(let a of n.historyFiles)s.historyFiles.push(Object.assign({},a))}i.historyEntries.push(s)}}return i}}class bn{constructor(t,e,i,n,s){r(this,"$leftFileDiv");r(this,"$rightFileDiv");r(this,"$buttonLeftDiv");r(this,"$buttonRightDiv");r(this,"$markAsMergedButtonDiv");r(this,"$mergedFlag");r(this,"editorState");r(this,"$buttons",[]);r(this,"pending",!1);this.manager=t,this.leftSynchroFile=e,this.rightSynchroFile=i,this.leftSynchroWorkspace=n,this.rightSynchroWorkspace=s,this.$leftFileDiv=M(null,"jo_synchro_workspaceFileDiv jo_synchro_listDiv"),this.$buttonLeftDiv=M(null,"jo_synchro_buttonDiv jo_synchro_listDiv jo_synchro_buttonLeftDiv"),this.$buttonRightDiv=M(null,"jo_synchro_buttonDiv jo_synchro_listDiv jo_synchro_buttonRightDiv"),this.$rightFileDiv=M(null,"jo_synchro_repositoryFileDiv jo_synchro_listDiv"),t.$fileListDivs[0].append(this.$leftFileDiv),t.$fileListDivs[1].append(this.$buttonLeftDiv),t.$fileListDivs[2].append(this.$buttonRightDiv),t.$fileListDivs[3].append(this.$rightFileDiv),e!=null&&e.state!="original"&&this.$leftFileDiv.addClass("jo_dirty"),i!=null&&i.state!="original"&&this.$rightFileDiv.addClass("jo_dirty");let a=[this.$leftFileDiv,this.$buttonLeftDiv,this.$buttonRightDiv,this.$rightFileDiv],l=this;for(let h of a)h.on("mouseenter",()=>{for(let c of a)c.addClass("jo_synchro_hoverLine")}),h.on("mouseleave",()=>{for(let c of a)c.removeClass("jo_synchro_hoverLine").removeClass("jo_synchro_hoverActiveLine")}),h.on("mousedown",()=>{for(let c of a)c.addClass("jo_synchro_hoverActiveLine")}),h.on("mouseup",()=>{for(let c of a)c.removeClass("jo_synchro_hoverActiveLine")}),h.on("click",()=>{l.select()});this.createLeftFileModel(),this.createRightFileModel()}select(){var e;let t=[this.$leftFileDiv,this.$buttonLeftDiv,this.$buttonRightDiv,this.$rightFileDiv];y("#jo_synchro_fileListOuter").find(".jo_synchro_activeLine").removeClass("jo_synchro_activeLine");for(let i of t)i.addClass("jo_synchro_activeLine");this.manager.lastShownSynchronizationElement!=null&&(this.manager.lastShownSynchronizationElement.editorState=this.manager.diffEditor.saveViewState()),this.manager.lastShownSynchronizationElement=this,this.setEditorModel(),this.editorState!=null&&this.manager.diffEditor.restoreViewState(this.editorState),this.manager.diffEditor.updateOptions({originalEditable:((e=this.leftSynchroFile)==null?void 0:e.originalText)!=null}),this.displayPaths()}displayPaths(){var t,e;this.manager.$pathLeftDiv.text(this.leftSynchroFile?"Pfad: /"+this.leftSynchroFile.path.join("/"):""),this.manager.$pathRightDiv.text(this.rightSynchroFile?"Pfad: /"+this.rightSynchroFile.path.join("/"):""),this.manager.$pathLeftDiv[0].classList.remove("jo_synchro_path_changed"),this.manager.$pathRightDiv[0].classList.remove("jo_synchro_path_changed"),(t=this.leftSynchroFile)!=null&&t.pathChanged&&this.manager.$pathLeftDiv[0].classList.add("jo_synchro_path_changed"),(e=this.rightSynchroFile)!=null&&e.pathChanged&&this.manager.$pathRightDiv[0].classList.add("jo_synchro_path_changed"),this.manager.$pathButtonCommitDiv.empty(),this.manager.$pathButtonUpdateDiv.empty(),this.leftSynchroFile&&this.rightSynchroFile&&!wi.pathsEqual(this.leftSynchroFile.path,this.rightSynchroFile.path)&&(this.manager.$pathButtonUpdateDiv.append(bn.makeButton("update","left",()=>{this.leftSynchroFile.path=this.rightSynchroFile.path,this.leftSynchroFile.pathChanged=!0,this.leftSynchroFile.state="changed",this.manager.onContentChanged("left"),this.displayPaths(),this.compareFilesAndAdaptGUI()},!1)),this.manager.repositoryIsWritable&&this.manager.$pathButtonCommitDiv.append(bn.makeButton("commit","right",()=>{this.rightSynchroFile.path=this.leftSynchroFile.path,this.rightSynchroFile.pathChanged=!0,this.rightSynchroFile.state="changed",this.manager.onContentChanged("right"),this.displayPaths(),this.compareFilesAndAdaptGUI()},!1)))}createRightFileModel(){this.rightSynchroFile!=null&&(this.rightSynchroFile.monacoModel=H.createModel(this.rightSynchroFile.text,"myJava"))}setEditorModel(){this.manager.lastShownSynchronizationElement==this&&this.manager.diffEditor.setModel({original:this.leftSynchroFile==null?this.getEmptyMonacoModel():this.leftSynchroFile.monacoModel,modified:this.rightSynchroFile==null?this.getEmptyMonacoModel():this.rightSynchroFile.monacoModel})}getEmptyMonacoModel(){return H.createModel("","myJava")}createLeftFileModel(){this.leftSynchroFile!=null&&(this.leftSynchroFile.monacoModel=H.createModel(this.leftSynchroFile.text,"myJava"),this.leftSynchroFile.monacoModel.onDidChangeContent(t=>{this.pending||(this.pending=!0,setTimeout(()=>{var e,i;if(this.leftSynchroFile!=null&&((e=this.leftSynchroFile)==null?void 0:e.state)!="deleted"){let n=this.leftSynchroFile.monacoModel.getValue(H.EndOfLinePreference.LF,!1);((i=this.leftSynchroFile)==null?void 0:i.originalText)!=null&&n==this.leftSynchroFile.originalText?(this.$leftFileDiv.removeClass("jo_dirty"),this.leftSynchroFile.state="original"):(this.$leftFileDiv.addClass("jo_dirty"),this.leftSynchroFile.state="changed",this.leftSynchroFile.identical_to_repository_version=!1),this.manager.onContentChanged("left"),this.leftSynchroFile.text=n,this.compareFilesAndAdaptGUI()}this.pending=!1},700))}))}onFileChanged(t){switch(t=="left"?this.createLeftFileModel():this.createRightFileModel(),this.setEditorModel(),this.compareFilesAndAdaptGUI(),t){case"left":this.leftSynchroFile!=null&&this.leftSynchroFile.state!="original"?this.$leftFileDiv.addClass("jo_dirty"):this.$leftFileDiv.removeClass("jo_dirty");break;case"right":this.rightSynchroFile!=null&&this.rightSynchroFile.state!="original"?this.$rightFileDiv.addClass("jo_dirty"):this.$rightFileDiv.removeClass("jo_dirty");break}this.manager.onContentChanged(t)}compareFilesAndAdaptGUI(){var c,u,g,f;this.emptyGUI();let t=this,e="---",i="",n=!1;if(this.leftSynchroFile!=null){let b=this.rightSynchroFile==null?!0:wi.pathsEqual(this.leftSynchroFile.path,this.rightSynchroFile.path);e=this.leftSynchroFile.name,this.leftSynchroFile.repository_file_version==null?i=Di.withoutVersion():(i="(V "+this.leftSynchroFile.repository_file_version,this.leftSynchroFile.identical_to_repository_version||((c=this.leftSynchroFile)==null?void 0:c.text)==((u=this.rightSynchroFile)==null?void 0:u.text)||(i+=` ${Di.withChanges()}`),this.rightSynchroFile!=null&&this.leftSynchroFile.synchroWorkspace.isWritable()&&this.rightSynchroFile.repository_file_version>this.leftSynchroFile.repository_file_version&&(n=!this.leftSynchroFile.markedAsMerged),b||(i+=', anderer Pfad'),this.leftSynchroFile.pathChanged&&(i+=', neuer Pfad'),i+=")"),this.leftSynchroFile.state=="deleted"&&(e+=Di.DELETED(),i="")}let s=this.rightSynchroFile==null?"---":this.rightSynchroFile.name,a=this.rightSynchroFile==null?"":"(V "+this.rightSynchroFile.repository_file_version+((g=this.rightSynchroFile)!=null&&g.pathChanged?', neuer Pfad':"")+")";((f=this.rightSynchroFile)==null?void 0:f.state)=="deleted"&&(s+=Di.DELETED(),a="");let l=M("","jo_synchro_5px_spacer"),h=M("","jo_synchro_5px_spacer");if(this.$buttonRightDiv.append(h),this.leftSynchroFile==null)this.leftSynchroWorkspace.isWritable()&&t.rightSynchroFile.state!="deleted"&&this.$buttonLeftDiv.append(bn.makeButton("create","left",()=>{t.leftSynchroFile={name:t.rightSynchroFile.name,path:t.rightSynchroFile.path.slice(),idInsideRepository:t.rightSynchroFile.idInsideRepository,repository_file_version:t.rightSynchroFile.repository_file_version,identical_to_repository_version:!0,state:"new",markedAsMerged:!1,text:this.rightSynchroFile.text,synchroWorkspace:t.leftSynchroWorkspace,idInsideWorkspace:null,workspaceFile:null,originalText:null,monacoModel:null},t.leftSynchroWorkspace.files.push(t.leftSynchroFile),t.onFileChanged("left")},!1)),t.rightSynchroWorkspace.isWritable()&&t.rightSynchroFile.state!="deleted"&&this.$buttonRightDiv.append(bn.makeButton("delete","right",()=>{t.rightSynchroFile.state="deleted",t.onFileChanged("right")},!1));else if(this.rightSynchroFile==null)this.rightSynchroWorkspace.isWritable()&&t.leftSynchroFile.state!="deleted"&&this.$buttonRightDiv.append(bn.makeButton("create","right",()=>{t.rightSynchroFile={name:t.leftSynchroFile.name,path:t.leftSynchroFile.path.slice(),committedFromFile:t.leftSynchroWorkspace.isWritable()?t.leftSynchroFile:null,idInsideRepository:t.leftSynchroFile.idInsideRepository,repository_file_version:t.leftSynchroFile.repository_file_version==null?1:t.leftSynchroFile.repository_file_version,identical_to_repository_version:t.leftSynchroFile.identical_to_repository_version,state:"new",markedAsMerged:!1,text:this.leftSynchroFile.text,synchroWorkspace:t.rightSynchroWorkspace,idInsideWorkspace:this.leftSynchroFile.idInsideWorkspace,workspaceFile:null,originalText:null,monacoModel:null},t.rightSynchroWorkspace.files.push(t.rightSynchroFile),t.leftSynchroFile.repository_file_version=t.rightSynchroFile.repository_file_version,t.leftSynchroFile.identical_to_repository_version=!0,t.onFileChanged("right")},!1)),t.leftSynchroWorkspace.isWritable()&&t.leftSynchroFile.state!="deleted"&&this.$buttonLeftDiv.append(bn.makeButton("delete","left",()=>{t.leftSynchroFile.state="deleted",t.onFileChanged("left")},!1));else{let b=!0,A=this.leftSynchroFile.name!=this.rightSynchroFile.name,S=this.leftSynchroFile.text!=this.rightSynchroFile.text,w=A&&!S;this.leftSynchroFile.repository_file_version==this.rightSynchroFile.repository_file_version?(S||A)&&(b=!1):b=!1,b?(this.$buttonLeftDiv.append(y(`
${Di.synchronized()} -
`)),this.$buttonRightDiv.append(y(`
- ${Di.synchronized()}
`))):(this.leftSynchroWorkspace.isWritable()&&this.$buttonLeftDiv.append(bn.makeButton("update","left",()=>{t.leftSynchroFile.text=t.rightSynchroFile.text,t.leftSynchroFile.repository_file_version=t.rightSynchroFile.repository_file_version,t.leftSynchroFile.identical_to_repository_version=!0,t.leftSynchroFile.name=t.rightSynchroFile.name,t.leftSynchroFile.state="changed",t.onFileChanged("left")},w)),this.rightSynchroWorkspace.isWritable()&&!n&&this.$buttonRightDiv.append(bn.makeButton("commit","right",()=>{t.rightSynchroFile.text=t.leftSynchroFile.text,t.rightSynchroFile.name=t.leftSynchroFile.name,t.rightSynchroFile.repository_file_version++,t.leftSynchroWorkspace.isWritable()&&(t.rightSynchroFile.committedFromFile=t.leftSynchroFile),t.leftSynchroWorkspace.isWritable()&&(t.leftSynchroFile.repository_file_version=t.rightSynchroFile.repository_file_version,this.leftSynchroFile.identical_to_repository_version=!0),t.rightSynchroFile.state="changed",t.onFileChanged("right")},w)))}this.$buttonLeftDiv.append(l),this.$leftFileDiv.append(y(`
${e}${i}
`)),this.$rightFileDiv.append(y(`
${s}${a}
`)),n&&(this.$markAsMergedButtonDiv=y(`
${Di.markAsMerged()}
`),this.$leftFileDiv.append(this.$markAsMergedButtonDiv),this.$markAsMergedButtonDiv.on("click",b=>{b.stopPropagation(),this.leftSynchroFile.markedAsMerged=!0,this.compareFilesAndAdaptGUI()})),this.leftSynchroFile!=null&&this.leftSynchroFile.markedAsMerged&&this.showMergedDiv(),this.manager.updateCenterButtons()}showMergedDiv(){let t=y(`
${Di.merged()}
`);this.$leftFileDiv.append(t)}emptyGUI(){this.$leftFileDiv.empty(),this.$rightFileDiv.empty(),this.$buttonLeftDiv.empty(),this.$buttonRightDiv.empty()}static makeButton(t,e,i,n){let s="",a="";switch(t){case"commit":s=n?"rename":"commit",a="jo_synchro_commitButton";break;case"commitAll":s="commit all",a="jo_synchro_commitButton";break;case"update":s=n?"rename":"update",a="jo_synchro_updateButton";break;case"updateAll":s="update all",a="jo_synchro_updateButton";break;case"create":s="create",a="jo_synchro_createButton";break;case"delete":s="delete",a="jo_synchro_deleteButton";break}switch(e){case"left":a+=" jo_synchro_arrowLeft";break;case"right":a+=" jo_synchro_arrowRight";break}let l=y(`
${s}
`);return l.on("click",h=>{h.stopPropagation(),i!=null&&i()}),l.on("mousedown",h=>{h.stopPropagation()}),l}}class Wy{constructor(t){r(this,"$mainHeadingDiv");r(this,"$writeWorkspaceChangesButton");r(this,"$writeRepositoryChangesButton");r(this,"$backToWorkspaceButton");r(this,"$backToCurrentRepositoryVersionButton");r(this,"$exitButton");r(this,"$belowMainHeadingDiv");r(this,"$leftDiv");r(this,"$historyOuterDiv");r(this,"$historyScrollDiv");r(this,"$leftUpperDiv");r(this,"$pathDiv");r(this,"$pathLeftOuterDiv");r(this,"$pathLeftDiv");r(this,"$pathButtonUpdateDiv");r(this,"$pathButtonCommitDiv");r(this,"$pathRightOuterDiv");r(this,"$pathRightDiv");r(this,"$fileListHeaderOuterDiv");r(this,"$fileListHeaderDivs",[]);r(this,"$fileListHeaderContainerRight");r(this,"$updateAllButton");r(this,"$commitAllButton");r(this,"$fileListOuterDiv");r(this,"$fileListDivs",[]);r(this,"$fileListFooterDiv");r(this,"$editorDiv");r(this,"guiReady",!1);r(this,"diffEditor");r(this,"currentUserSynchroWorkspace");r(this,"currentRepositorySynchroWorkspace");r(this,"currentRepository");r(this,"leftSynchroWorkspace");r(this,"rightSynchroWorkspace");r(this,"lastShownSynchronizationElement");r(this,"synchronizationListElements",[]);r(this,"lastShownHistoryElement");r(this,"historyElements",[]);r(this,"timer");r(this,"repositoryIsWritable");this.main=t}synchronizeWithWorkspace(t){this.gainRepositoryLock(t.repository_id,e=>{e?(this.repositoryIsWritable=!0,this.attachToWorkspaceAndRepository(t),this.show(),this.timer=setInterval(()=>{this.gainRepositoryLock(this.currentRepository.id,i=>{i||(alert(fe.serverTemporarilyNotReachable()),window.history.back())})},1e4)):(this.attachToWorkspaceAndRepository(t),this.repositoryIsWritable=!1,this.show())})}gainRepositoryLock(t,e){Re("gainRepositoryLock",{repository_id:t},n=>{e(n.success)},n=>{alert(n),e(!1)})}attachToWorkspaceAndRepository(t){this.currentUserSynchroWorkspace=new va(this).copyFromWorkspace(t),this.leftSynchroWorkspace=this.currentUserSynchroWorkspace;let e=this,i={repository_id:t.repository_id,workspace_id:t.id};Re("getRepository",i,n=>{e.attachToRepository(n.repository),n.repository.spritesheet_id&&n.repository.spritesheet_id!=t.spritesheetId&&(t.spritesheetId=n.repository.spritesheet_id,new ws().initializeSpritesheetForWorkspace(t,this.main).then(()=>{for(let a of t.getFiles())this.main.getCompiler().setFileDirty(a)}))},n=>{alert(n),window.history.back()})}attachToRepository(t){this.currentRepository=t,qy.deserializeRepository(this.currentRepository),this.currentRepositorySynchroWorkspace=new va(this).copyFromRepository(this.currentRepository,!0),this.rightSynchroWorkspace=this.currentRepositorySynchroWorkspace,this.setupSynchronizationListElements(),this.setupHistoryElements()}setupHistoryElements(){this.$historyScrollDiv.empty(),this.historyElements=[],this.lastShownHistoryElement=null,this.currentRepository.historyEntries.forEach((t,e)=>{this.historyElements.push(new ko(this,this.currentRepository,t,e))})}setupSynchronizationListElements(){let t=null,e=null;this.lastShownSynchronizationElement!=null&&(t=this.lastShownSynchronizationElement.leftSynchroFile,e=this.lastShownSynchronizationElement.rightSynchroFile),this.$fileListDivs.forEach(a=>a.empty()),this.synchronizationListElements.forEach(a=>a.emptyGUI()),this.synchronizationListElements=[],this.lastShownSynchronizationElement=null;let i=[],n={};if(this.leftSynchroWorkspace.files.forEach(a=>{let l={id:a.idInsideRepository,name:a.name,leftSynchroFile:a,rightSynchroFile:null};i.push(l),a.idInsideRepository!=null?n["r"+a.idInsideRepository]=l:n["w"+a.idInsideWorkspace]=l}),this.rightSynchroWorkspace.files.forEach(a=>{let l=null;a.idInsideRepository!=null?l=n["r"+a.idInsideRepository]:l=n["w"+a.idInsideWorkspace],l==null?(l={id:a.idInsideRepository,name:a.name,leftSynchroFile:null,rightSynchroFile:a},i.push(l)):l.rightSynchroFile=a}),i.sort((a,l)=>a.name.localeCompare(l.name)),i.forEach(a=>{let l=new bn(this,a.leftSynchroFile,a.rightSynchroFile,this.leftSynchroWorkspace,this.rightSynchroWorkspace);this.synchronizationListElements.push(l),l.compareFilesAndAdaptGUI()}),this.diffEditor.setModel({original:H.createModel(fe.chooseFile(),"myJava"),modified:H.createModel(fe.chooseFile(),"myJava")}),this.diffEditor.updateOptions({originalEditable:!1}),this.leftSynchroWorkspace==this.currentUserSynchroWorkspace?(this.setHeader("left",fe.yourWorkspace()),this.$backToWorkspaceButton.hide()):(this.setHeader("left",this.leftSynchroWorkspace.name+":"),this.$backToWorkspaceButton.show(),this.$writeWorkspaceChangesButton.hide()),this.rightSynchroWorkspace==this.currentRepositorySynchroWorkspace){let a=this.repositoryIsWritable?fe.withWriteAccess():fe.withoutWriteAccess();this.setHeader("right",fe.repoCurrentVersion(a)),this.$backToCurrentRepositoryVersionButton.hide()}else this.setHeader("right",this.rightSynchroWorkspace.name+":"),this.$backToCurrentRepositoryVersionButton.show(),this.$writeRepositoryChangesButton.hide();y("#jo_synchro_main_heading_text").text(`${fe.synchronizeWithRepository()} "${this.currentRepository.name}"${this.repositoryIsWritable?"":" (read-only)"}`);let s=!1;if(t!=null||e!=null){for(let a of this.synchronizationListElements)if(a.leftSynchroFile!=null&&a.leftSynchroFile==t||a.rightSynchroFile!=null&&a.rightSynchroFile==e){a.select(),s=!0;break}}!s&&this.synchronizationListElements.length>0&&this.synchronizationListElements[0].select()}show(){y("#synchronize-div").css("display","flex"),y("#main").css("visibility","hidden"),this.guiReady||this.initGUI(),this.$writeWorkspaceChangesButton.hide(),this.$writeRepositoryChangesButton.hide();let i=this;this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{i.hide()})}hide(){if(y("#synchronize-div").css("display","none"),y("#main").css("visibility","visible"),clearInterval(this.timer),this.currentRepository==null)return;let i={repository_id:this.currentRepository.id};Re("leaseRepositoryLock",i,n=>{},n=>{})}initGUI(){this.guiReady=!0;let t=y("#synchronize-div"),e=this;t.append(this.$mainHeadingDiv=y(`
${fe.synchronizeWorkspaceWithRepository()}
`),this.$belowMainHeadingDiv=M("jo_synchro_below_main_heading"));let i=M("jo_synchro_buttonsTopRight");this.$mainHeadingDiv.append(i),i.append(this.$exitButton=y(`
${fe.backToCoding()}
`)),this.$exitButton.on("click",()=>{window.history.back()}),this.$leftDiv=M("jo_synchro_leftDiv"),this.$historyOuterDiv=M("jo_synchro_historyOuterDiv"),this.$historyOuterDiv.append(y(`
${fe.history()}
)`)),this.$belowMainHeadingDiv.append(this.$leftDiv,this.$historyOuterDiv),new Vr(this.$historyOuterDiv[0],!0,!1,()=>{this.diffEditor.layout()}).sliderDiv.style.left="-3px",this.$historyOuterDiv.find(".joe_slider").css("position","absolute"),this.$historyScrollDiv=M("historyScrollDiv","jo_scrollable"),this.$historyOuterDiv.append(this.$historyScrollDiv),this.$leftDiv.append(this.$leftUpperDiv=M("jo_synchro_leftUpper"),this.$pathDiv=M("jo_synchro_pathDiv","jo_scrollable"),this.$editorDiv=M("jo_synchro_editor")),this.$leftUpperDiv.append(this.$fileListHeaderOuterDiv=M("jo_synchro_fileListHeaderOuter"),this.$fileListOuterDiv=M("jo_synchro_fileListOuter","jo_scrollable"),this.$fileListFooterDiv=M("jo_synchro_fileListFooter")),this.$fileListHeaderContainerRight=M(null,"jo_synchro_fileListHeaderContainerRight");let n=M(null,"jo_synchro_fileListHeader");this.$fileListHeaderContainerRight.append(n);let s=M(null,"jo_synchro_fileListHeaderCenter");s.append(this.$updateAllButton=bn.makeButton("updateAll","left",()=>{e.updateAll()},!1)),s.append(this.$commitAllButton=bn.makeButton("commitAll","right",()=>{e.commitAll()},!1)),this.$fileListHeaderDivs.push(M(null,"jo_synchro_fileListHeader","",{flex:"2 0"}),s,this.$fileListHeaderContainerRight,M(null,"jo_synchro_scrollbarPlaceholder")),this.$fileListDivs.push(M(null,"jo_synchro_fileList"),M(null,"jo_synchro_fileListButtonsLeft"),M(null,"jo_synchro_fileListButtonsRight"),M(null,"jo_synchro_fileList")),this.$fileListHeaderOuterDiv.append(this.$fileListHeaderDivs),this.$fileListOuterDiv.append(this.$fileListDivs),this.$fileListHeaderDivs[0].append(`
${fe.yourWorkspace()}
`),n.append(`
${fe.repositoryCurrentVersion()}
`),this.$fileListHeaderDivs[0].append(this.$backToWorkspaceButton=y(`
${fe.showOwnWorkspace()}
`)),this.$backToWorkspaceButton.on("click",()=>{e.backToWorkspace()}),this.$backToWorkspaceButton.hide(),n.append(this.$backToCurrentRepositoryVersionButton=y(`
${fe.showCurrentRepoVersion()}
`)),this.$backToCurrentRepositoryVersionButton.on("click",()=>{e.backToCurrentRepositoryVersion()}),this.$backToWorkspaceButton.hide(),this.$fileListHeaderDivs[0].append(this.$writeWorkspaceChangesButton=y(`
${fe.saveWorkspaceChanges()}
`)),this.$writeWorkspaceChangesButton.on("click",()=>{e.writeWorkspaceChanges()}),this.$writeWorkspaceChangesButton.hide(),n.append(this.$writeRepositoryChangesButton=y(`
${fe.saveRepoChanges()}
`)),this.$writeRepositoryChangesButton.on("click",()=>{e.writeRepositoryChanges()}),this.$writeRepositoryChangesButton.hide(),this.$pathDiv.append(this.$pathLeftOuterDiv=y('
'),this.$pathButtonUpdateDiv=y('
'),this.$pathButtonCommitDiv=y('
'),this.$pathRightOuterDiv=y('
')),this.$pathLeftOuterDiv.append(this.$pathLeftDiv=y('
')),this.$pathRightOuterDiv.append(this.$pathRightDiv=y('
')),new Vr(this.$editorDiv[0],!0,!0,()=>{this.diffEditor.layout()}).setColor("var(--slider)"),this.makeDroppable("left",this.$fileListDivs[0]),this.makeDroppable("right",this.$fileListDivs[3]),this.initEditor(),np(t[0],t[0],{forceListen:!1,dragThresholdPixels:5,isPressHoldMode:!0,pressHoldDelayMS:100})}backToWorkspace(){this.leftSynchroWorkspace=this.currentUserSynchroWorkspace,this.setupSynchronizationListElements(),this.onContentChanged("left")}backToCurrentRepositoryVersion(){this.rightSynchroWorkspace=this.currentRepositorySynchroWorkspace,this.setupSynchronizationListElements(),this.onContentChanged("right")}makeDroppable(t,e){let i=this;e.on("dragover",n=>{e.addClass("jo_synchro_dragZone"),n.preventDefault()}),e.on("dragleave",()=>{e.removeClass("jo_synchro_dragZone")}),e.on("drop",n=>{if(ko.currentlyDragged){let s=new va(i).copyFromHistoryElement(ko.currentlyDragged);switch(t){case"left":i.leftSynchroWorkspace=s;break;case"right":i.rightSynchroWorkspace=s;break}i.setupSynchronizationListElements()}e.removeClass("jo_synchro_dragZone")})}setHeader(t,e){let i=t=="left"?0:2;this.$fileListHeaderDivs[i].find(".jo_synchro_tabHeading").text(e)}writeRepositoryChanges(){let t=this;this.$writeRepositoryChangesButton.hide();let e=M("","jo_synchro_commitDialogDiv");e.hide(),this.$fileListHeaderContainerRight.append(e),e.append(M("","jo_synchro_commitDialogCaption",fe.commitMessage()));let i=y('');e.append(i);let n=M("","jo_synchro_commitDialogButtonDiv");e.append(n);let s=M("","jo_synchro_button","Abbrechen",{"background-color":"var(--updateButtonBackground)",color:"var(--updateButtonColor)"});n.append(s),s.on("click",()=>{e.remove(),t.$writeRepositoryChangesButton.show()});let a=M("","jo_synchro_button",fe.OK(),{"background-color":"var(--createButtonBackground)",color:"var(--createButtonColor)"});n.append(a),e.show(600),a.on("click",()=>{let l=i.val();e.remove(),this.currentRepositorySynchroWorkspace.commit(this.currentUserSynchroWorkspace.copiedFromWorkspace,this.currentRepository,l,this.main,(h,c)=>{c!=null?(alert(c),this.attachToWorkspaceAndRepository(this.currentUserSynchroWorkspace.copiedFromWorkspace)):(this.attachToRepository(h),this.$writeRepositoryChangesButton.hide())})}),i.focus()}async writeWorkspaceChanges(){await this.currentUserSynchroWorkspace.writeChangesToWorkspace(),this.currentUserSynchroWorkspace=new va(this).copyFromWorkspace(this.currentUserSynchroWorkspace.copiedFromWorkspace),this.leftSynchroWorkspace=this.currentUserSynchroWorkspace,this.setupSynchronizationListElements(),this.$writeWorkspaceChangesButton.hide()}initEditor(){this.diffEditor=H.createDiffEditor(document.getElementById("jo_synchro_editor"),{originalEditable:!0,readOnly:!0,automaticLayout:!0,renderSideBySide:!0})}onContentChanged(t){let e=t=="left"?this.$writeWorkspaceChangesButton:this.$writeRepositoryChangesButton;(t=="left"?this.currentUserSynchroWorkspace:this.currentRepositorySynchroWorkspace).hasChanges()?e.show():e.hide()}updateAll(){this.$fileListDivs[1].find(".jo_synchro_updateButton").click()}commitAll(){this.$fileListDivs[2].find(".jo_synchro_commitButton").click()}updateCenterButtons(){this.$fileListDivs[1].find(".jo_synchro_updateButton").length>0?this.$updateAllButton.css("visibility","inherit"):this.$updateAllButton.css("visibility","hidden"),this.$fileListDivs[2].find(".jo_synchro_commitButton").length>0?this.$commitAllButton.css("visibility","inherit"):this.$commitAllButton.css("visibility","hidden")}}class Ny{constructor(t){r(this,"guiReady",!1);r(this,"$mainHeading");r(this,"$repoListDiv");r(this,"$exitButton");r(this,"$checkoutButton");r(this,"$workspaceDropdown");r(this,"$filterButtonDiv");r(this,"$filterInput");r(this,"filterbuttonOptions",[Ie.all(),Ie.private(),Ie.accessableForClass(),Ie.accessableForSchool()]);r(this,"workspace");r(this,"repositories",[]);r(this,"$codeInput");this.main=t}initGUI(){this.guiReady=!0;let t=this,e=y("#checkoutRepo-div");e.append(this.$mainHeading=M("checkoutRepo-mainHeading","createUpdateRepo-mainHeading","")),this.$mainHeading.append(M("","",Ie.caption())),this.$mainHeading.append(this.$exitButton=M("","jo_synchro_button",Ie.backToCoding(),{"background-color":"var(--speedcontrol-grip)",color:"var(--fontColorLight)","font-size":"10pt"})),this.$exitButton.on("click",()=>{t.exitButtonClicked()});let i=M("checkoutRepo-divBelow");e.append(i);let n=M("","checkoutRepo-chooseDiv");i.append(n),n.append(M("","checkoutRepo-minorHeading",Ie.connectThisWorkspaceToRepository())),this.$workspaceDropdown=y(""),n.append(this.$workspaceDropdown);let s=M("","checkoutRepo-chooseDiv");i.append(s),s.append(M("","checkoutRepo-minorHeading",Ie.inputRepositoryCode())),this.$codeInput=y(''),s.append(this.$codeInput),this.$codeInput.on("input",c=>{t.$codeInput.val()==""?this.$repoListDiv.show():this.$repoListDiv.hide()});let a=M("","checkoutRepo-chooseDiv");i.append(a),a.append(M("","checkoutRepo-minorHeading",Ie.showTheseRepositories())),this.$filterButtonDiv=y("
"),a.append(this.$filterButtonDiv),this.filterbuttonOptions.forEach((c,u)=>{let g=y(``);g.data("value",u),g.on("change",f=>{t.showRepositories()}),this.$filterButtonDiv.append(g),this.$filterButtonDiv.append(y(``))});let l=M("","checkoutRepo-chooseDiv");i.append(l),l.append(M("","checkoutRepo-minorHeading",Ie.filterSearch())),this.$filterInput=y(''),l.append(this.$filterInput),this.$filterInput.on("input",c=>{t.showRepositories()}),i.append(M("","updateRepo-minorHeading","Repositories:",{"margin-bottom":"10px","margin-top":"20px"})),this.$repoListDiv=M("checkoutRepo-repoListDiv","jo_scrollable"),i.append(this.$repoListDiv);let h=M("updateRepo-buttonDiv");h.append(this.$checkoutButton=M("","jo_synchro_button","Checkout",{"background-color":"var(--updateButtonBackground)",color:"var(--updateButtonColor)"})),this.$checkoutButton.on("click",()=>{t.checkoutButtonClicked()}),i.append(h)}show(t){this.guiReady||this.initGUI(),y("#checkoutRepo-div").css("visibility","visible"),y("#main").css("visibility","hidden"),this.main.user;let n={onlyOwnRepositories:!1};this.$repoListDiv.empty();let s=this;Re("getRepositoryList",n,a=>{this.repositories=a.repositories,this.showRepositories()}),this.$workspaceDropdown.empty(),so(this.$workspaceDropdown,[{caption:Ie.createNewWorkspace(),object:null,value:-1}].concat(this.main.workspaceList.filter(a=>a.repository_id==null&&!a.isFolder).map(a=>({caption:a.name,object:a,value:a.id}))),-1),this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{s.hide()})}showRepositories(){let t=this;this.$repoListDiv.find(".checkoutRepo-repoListItem").remove();let e=this.$filterButtonDiv.find("input:checked").data("value")-1,i=e<0?this.repositories:this.repositories.filter(s=>s.published_to==e),n=this.$filterInput.val();n=n.toLocaleLowerCase(),n!=""&&(i=i.filter(s=>[s.owner_username,s.owner_name,s.name,s.description].join(" ").toLocaleLowerCase().indexOf(n)>=0)),i.forEach(s=>{let a=M("","checkoutRepo-repoListItem"),l=M("","checkoutRepo-repoListItemLeft");a.append(l),l.append(M("","checkoutRepo-repoListName",s.name)),l.append(M("","checkoutRepo-repoListOwner",s.owner_name+" ("+s.owner_username+")"));let h=M("","checkoutRepo-repoListItemRight",s.description);a.append(h),this.$repoListDiv.append(a),a.data("repoInfo",s),a.on("click",()=>{t.selectRepository(a,s)})}),this.selectFirstRepository()}selectRepository(t,e){this.$repoListDiv.find(".checkoutRepo-repoListItem").removeClass("active"),t!=null&&t.addClass("active")}selectFirstRepository(){this.$repoListDiv.find(".checkoutRepo-repoListItem").removeClass("active"),this.$repoListDiv.find(".checkoutRepo-repoListItem").first().addClass("active")}hide(){y("#checkoutRepo-div").css("visibility","hidden"),y("#main").css("visibility","visible")}checkoutButtonClicked(){let t=-1,e=null,i=this.$codeInput.val();if(i!=""){let l=i.indexOf("T");if(l<0){alert(Ie.codeMustContainT());return}let h=Number.parseInt(i.substring(0,l));if(h>=0)t=h,e=i.substring(l+1);else{alert(Ie.digitPriorToTInsideCode());return}}else t=this.$repoListDiv.find(".active").first().data("repoInfo").id;let n=ao(this.$workspaceDropdown),s={repository_id:t,createNewWorkspace:n==null,workspace_id:n==null?null:n.id,secret:e},a=this;Re("attachWorkspaceToRepository",s,l=>{if(l.message!=null){alert(l.message);return}if(n==null&&l.new_workspace!=null){let h=a.main.networkManager.createNewWorkspaceFromWorkspaceData(l.new_workspace);a.main.projectExplorer.workspaceTreeview.sort(),setTimeout(()=>{a.main.projectExplorer.setWorkspaceActive(h,!0)},400),alert(Ie.newWorkspaceCreateSuccessfully(l.new_workspace.name))}else n.repository_id=t,a.main.projectExplorer.workspaceTreeview.setIconClassForElement(n,"img_workspace-dark-repository"),alert(Ie.workspaceSuccessfullyConnectedToRepository(n.name));window.history.back()})}exitButtonClicked(){this.hide()}}class Ry{constructor(t){r(this,"guiReady",!1);r(this,"$mainHeading");r(this,"$settingsDiv");r(this,"$repoName");r(this,"$repoDescription");r(this,"$repoPublishedTo");r(this,"$cancelButton");r(this,"$createButton");r(this,"publishedToItems",[]);r(this,"workspace");this.main=t}initGUI(){this.guiReady=!0;let t=this,e=y("#createRepo-div");e.append(this.$mainHeading=M("","createUpdateRepo-mainHeading")),e.append(this.$settingsDiv=M("","createUpdateRepo-settingsDiv")),this.$settingsDiv.append(y(`
${tt.nameOfRepository()}
`)),this.$settingsDiv.append(this.$repoName=y('')),this.$settingsDiv.append(y(`
${tt.description()}
`)),this.$settingsDiv.append(this.$repoDescription=y('')),this.$settingsDiv.append(y(`
${tt.publishedFor()}
`)),this.$settingsDiv.append(this.$repoPublishedTo=y(''));let i=M("createRepo-buttonDiv");i.append(this.$createButton=M("","jo_synchro_button","Repository erstellen",{"background-color":"var(--createButtonBackground)",color:"var(--createButtonColor)"})),this.$createButton.on("click",()=>{t.createButtonClicked()}),i.append(this.$cancelButton=M("","jo_synchro_button","Abbrechen",{"background-color":"var(--cancelButtonBackground)",color:"var(--cancelButtonColor)"})),this.$cancelButton.on("click",()=>{t.cancelButtonClicked()}),e.append(i)}show(t){this.workspace=t,this.guiReady||this.initGUI();let e=this.main.user,i=!(e.is_admin||e.is_schooladmin||e.is_teacher);this.publishedToItems=[{value:"0",object:0,caption:tt.privateRepository()},{value:"1",object:1,caption:i?tt.publishedToClassStudents():tt.publishedToClasses()},{value:"2",object:2,caption:tt.publishedToSchool()}],so(this.$repoPublishedTo,this.publishedToItems,"0"),y("#createRepo-div").css("visibility","visible"),y("#main").css("visibility","hidden"),this.initCreateMode(t);let a=this;this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{a.hide()})}initCreateMode(t){let e=this.main.user;e.rufname,e.familienname,e.username,e.id,this.$mainHeading.text(tt.createRepositoryAndConnectToWorkspace(t.name)),this.$createButton.show(),this.$repoName.val(t.name)}hide(){y("#createRepo-div").css("visibility","hidden"),y("#main").css("visibility","visible")}createButtonClicked(){let t=ao(this.$repoPublishedTo),e=this.$repoName.val(),i=this.$repoDescription.val();this.main.networkManager.sendCreateRepository(this.workspace,t,e,i,(n,s)=>{if(n==null){let a=this.main.projectExplorer,l=a.workspaceTreeview.findNodeByElement(this.workspace);l&&(l.iconClass="img_workspace-dark-repository",this.workspace.renderSynchronizeButton(l)),a.showRepositoryButtonIfNeeded(this.workspace),window.history.back()}else alert(n)})}cancelButtonClicked(){window.history.back()}}class Gy{constructor(t){r(this,"guiReady",!1);r(this,"$mainHeading");r(this,"$settingsDiv");r(this,"$repoName");r(this,"$repoDescription");r(this,"$repoPublishedTo");r(this,"$repoOwner");r(this,"$repoListDiv");r(this,"$userlistDiv");r(this,"$exitButton");r(this,"$saveButton");r(this,"$deleteButton");r(this,"$settingsSecretRead");r(this,"$settingsSecretWrite");r(this,"publishedToItems",[]);r(this,"repositoryOwnerItems",[]);r(this,"users",[]);r(this,"workspace");r(this,"repositoryInfo");this.main=t}initGUI(){this.guiReady=!0;let t=this,e=y("#updateRepo-div");e.append(this.$mainHeading=M("updateRepo-mainHeading","createUpdateRepo-mainHeading","")),this.$mainHeading.append(M("","",le.caption())),this.$mainHeading.append(this.$exitButton=M("","jo_synchro_button",le.backToCoding(),{"background-color":"var(--speedcontrol-grip)",color:"var(--fontColorLight)","font-size":"10pt"})),this.$exitButton.on("click",()=>{t.exitButtonClicked()});let i=M("updateRepo-divBelow");e.append(i);let n=M("updateRepo-divLeft");i.append(n),n.append(M("","updateRepo-minorHeading",le.repositories())),this.$repoListDiv=M("updateRepo-repoListDiv"),n.append(this.$repoListDiv);let s=M("updateRepo-divRight");i.append(s),this.$settingsDiv=M("","createUpdateRepo-settingsDiv"),s.append(this.$settingsDiv),this.$settingsDiv.append(y(`
${tt.nameOfRepository()}
`)),this.$settingsDiv.append(this.$repoName=y('')),this.$repoName.on("input",()=>{t.enableSaveButton()}),this.$settingsDiv.append(y(`
${tt.description()}
`)),this.$settingsDiv.append(this.$repoDescription=y('')),this.$repoDescription.on("input",()=>{t.enableSaveButton()}),this.$settingsDiv.append(y(`
${tt.publishedFor()}
`)),this.$settingsDiv.append(this.$repoPublishedTo=y('')),this.$repoPublishedTo.on("change",()=>{t.enableSaveButton()}),this.$settingsDiv.append(y('
'+le.owner()+"
")),this.$settingsDiv.append(this.$repoOwner=y('')),this.$repoOwner.on("change",()=>{t.enableSaveButton()}),this.$settingsDiv.append(y(`
${le.codeForRepoReadAccess()}
`));let a=y('
');this.$settingsDiv.append(a),this.$settingsSecretRead=y('
---
'),a.append(this.$settingsSecretRead);let l=y(``);a.append(l),l.on("pointerdown",()=>{Yl(this.$settingsSecretRead.text())});let h=y(``);a.append(h),h.on("pointerdown",()=>{t.setSecret(!0,!1)}),this.$settingsDiv.append(y(`
${le.codeForRepoWriteAccess()}
`));let c=y('
');this.$settingsDiv.append(c),this.$settingsSecretWrite=y('
---
'),c.append(this.$settingsSecretWrite);let u=y(``);c.append(u),u.on("pointerdown",()=>{Yl(this.$settingsSecretWrite.text())});let g=y(``);c.append(g),g.on("pointerdown",()=>{t.setSecret(!1,!0)}),s.append(this.$userlistDiv=M("updateRepo-userlistDiv")),this.$userlistDiv.append(M(null,"updateRepo-userlistheading",le.repositoryUsers(),{"grid-column":1})),this.$userlistDiv.append(M(null,"updateRepo-userlistheading",le.writeAccess(),{"grid-column":2}));let f=M("updateRepo-buttonDiv");f.append(this.$saveButton=M("","jo_synchro_button",le.saveChanges(),{"background-color":"var(--updateButtonBackground)",color:"var(--updateButtonColor)"})),this.$saveButton.on("click",()=>{t.saveButtonClicked()}),this.$saveButton.hide(),s.append(f)}setSecret(t,e){this.main.networkManager.sendSetSecret(this.repositoryInfo.id,t,e,i=>{let n=this.repositoryInfo.id+"T";this.$settingsSecretRead.text(n+i.secret_read),this.$settingsSecretWrite.text(n+i.secret_write)})}enableSaveButton(){this.$saveButton.show()}show(t){this.guiReady||this.initGUI(),y("#updateRepo-div").css("visibility","visible"),y("#main").css("visibility","hidden");let n=this.main.user,s=!(n.is_teacher||n.is_admin||n.is_schooladmin);this.publishedToItems=[{value:0,object:0,caption:tt.privateRepository()},{value:1,object:1,caption:s?tt.publishedToClassStudents():tt.publishedToClasses()},{value:2,object:2,caption:tt.publishedToSchool()}],so(this.$repoPublishedTo,this.publishedToItems,0),this.$saveButton.show(),this.showRepositoryList();let a=this;this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{a.hide()})}deleteRepository(t){let e=this,i={repository_id:t.id};Re("deleteRepository",i,()=>{e.showRepositoryList();let n=e.main.workspaceList.filter(s=>s.repository_id==t.id);for(let s of n){s.repository_id=null;let a=this.main.projectExplorer.workspaceTreeview.findNodeByElement(s);a.iconClass="img_workspace-dark",s.renderSynchronizeButton(a)}})}showRepositoryList(){this.emptyRepositoryInfo();let t={onlyOwnRepositories:!0};this.$repoListDiv.empty();let e=this;Re("getRepositoryList",t,i=>{let n,s;if(i.repositories.length==0){alert(le.noRepositoryPresent()),e.exitButtonClicked();return}i.repositories.forEach(a=>{let l=M("","updateRepo-repoListItem"),h=M("","",a.name),c=y(`
`);l.append(h,c),this.$repoListDiv.append(l),l.on("click",u=>{e.selectRepository(l,a)}),l.data("repoInfo",a),s==null&&(s=a,n=l),c.on("click",u=>{u.preventDefault(),Ln([{caption:le.cancel(),callback:()=>{}},{caption:le.sureDelete(),color:"#ff6060",callback:()=>{e.deleteRepository(a)}}],u.pageX+2,u.pageY+2),u.stopPropagation()})}),n!=null&&this.selectRepository(n,s)},i=>{console.log(i),alert(le.noRepositoryPresent()),e.exitButtonClicked()})}selectRepository(t,e){if(this.repositoryInfo=e,this.emptyRepositoryInfo(),this.$saveButton.is(":visible")){let a=this.$repoListDiv.find(".active").first().data("repoInfo");a&&alert(le.changesNotSaved(a.name))}this.$saveButton.hide(),this.$repoListDiv.find(".updateRepo-repoListItem").removeClass("active"),t.addClass("active"),this.$repoName.val(e.name),this.$repoDescription.val(e.description),this.$repoPublishedTo.val(e.published_to),this.$settingsSecretRead.text(e.secret_read==null?"--------":e.id+"T"+e.secret_read),this.$settingsSecretWrite.text(e.secret_write==null?"--------":e.id+"T"+e.secret_write),this.$repoOwner.empty(),this.$userlistDiv.children().not(".updateRepo-userlistheading").remove();let i={repository_id:e.id},n=this;Re("getRepositoryUserList",i,s=>{s.repositoryUserList.forEach(l=>{let h=M("","updateRepo-userDiv",`${l.firstName} ${l.lastName} (${l.username})`,{"grid-column":1}),c=M("","canWriteDiv","",{"grid-column":2}),u=y('');c.append(u),u.attr("checked",l.canWrite),u.data("user",l),u.on("change",()=>{n.enableSaveButton()}),n.$userlistDiv.append(h,c)}),n.$repoOwner.empty();let a=s.repositoryUserList.map(l=>({caption:`${l.firstName} ${l.lastName} (${l.username})`,object:l,value:l.user_id+""}));s.repositoryUserList.some(l=>l.user_id==e.owner_id)||a.push({caption:`${e.owner_name} (${e.owner_username})`,object:{user_id:e.owner_id,username:e.owner_username,firstName:"",lastName:"",klasse:"",canWrite:!0},value:e.owner_id+""}),so(n.$repoOwner,a,e.owner_id+"")})}emptyRepositoryInfo(){this.$repoOwner.empty(),this.$repoName.val(""),this.$repoDescription.val(""),this.$userlistDiv.find(".updateRepo-userDiv").remove(),this.$userlistDiv.find(".canWriteDiv").remove()}hide(){y("#updateRepo-div").css("visibility","hidden"),y("#main").css("visibility","visible")}saveButtonClicked(){let t=this,i=this.$repoListDiv.find(".active").first().data("repoInfo"),n=this.$repoName.val(),s=ao(this.$repoOwner),a=ao(this.$repoPublishedTo),l={owner_id:s.user_id,description:this.$repoDescription.val(),published_to:a,repository_id:i.id,name:n},h=[];t.$userlistDiv.find("input").each((u,g)=>{let b=y(g).data("user");h.push({has_write_access:y(g).is(":checked"),user_id:b.user_id})});let c={repository_id:i.id,writeAccessList:h};i.owner_id==s.user_id||confirm(le.transferOwnership(i.name,s.username))?Re("updateRepositoryUserWriteAccess",c,u=>{Re("updateRepository",l,g=>{i.name=n,i.owner_id=s.user_id,i.owner_name=s.firstName+" "+s.lastName,i.owner_username=s.username,i.published_to=a,i.description=l.description,alert(le.changesSavedSuccessfully()),t.$saveButton.hide(),t.showRepositoryList()},g=>{alert(le.error()+g),t.exitButtonClicked()})},u=>{alert(le.error()+u),t.exitButtonClicked()}):alert(le.notSaved())}exitButtonClicked(){window.history.back()}}class Ky{async loadFiles(t){if(t==null||t.length==0)return alert(ag.noFilesToImport()),null;let e=[];for await(let i of t)if(i.name.endsWith(".png"))try{e.push(await this.loadFile(i))}catch{}return e=e.sort((i,n)=>i.filename.localeCompare(n.filename)),e}async loadFile(t){let e=await this.readFileAsync(t),i=no.decode(e),n=no.toRGBA8(i)[0];return{image:new Uint8Array(n),width:i.width,height:i.height,filename:t.name}}async readFileAsync(t){return new Promise((e,i)=>{let n=new FileReader;n.onload=()=>{e(n.result)},n.onerror=i,n.readAsArrayBuffer(t)})}}function Hy(p,t){let e=0,i=0;for(let h of p)h.width+=2*t,h.height+=2*t;for(const h of p)e+=h.width*h.height,i=Math.max(i,h.width);p.sort((h,c)=>c.height-h.height);const s=[{x:0,y:0,width:Math.max(Math.ceil(Math.sqrt(e/.95)),i),height:1/0}];let a=0,l=0;for(const h of p)for(let c=s.length-1;c>=0;c--){const u=s[c];if(!(h.width>u.width||h.height>u.height)){if(h.x=u.x,h.y=u.y,l=Math.max(l,h.y+h.height),a=Math.max(a,h.x+h.width),h.width===u.width&&h.height===u.height){const g=s.pop();c1||e>1){let c=Math.trunc((t.width-2*n+s)/i-s),u=Math.trunc((t.height-2*n+s)/e-s);for(let g=0;g'),this.$importDropZone.append(this.$buttonFileImport),this.$buttonFileImport.on("change",w=>{var C=w.target.files;t.fileList=C,s.text(C.length!=1?C.length+U.filesSelected():U.fileSelected()),this.$buttonImport.addClass("jo_active")});let s=M(null,null,"",null,this.$importDropZone);this.$importDropZone.on("dragover",w=>{w.stopPropagation(),w.preventDefault(),w.originalEvent.dataTransfer.dropEffect="copy"}),this.$importDropZone.on("drop",w=>{w.stopPropagation(),w.preventDefault();var C=w.originalEvent.dataTransfer.files;t.fileList=C,s.text(C.length!=1?C.length+U.filesSelected():U.fileSelected()),this.$buttonImport.addClass("jo_active")});let a=M(null,"jo_sm_importExportCenter jo_sm_writeonly",null,null,i);M(null,"jo_sm_importParameters",U.stepTwo(),{"margin-bottom":"10px","font-weight":"bold"},a);let l=M(null,"jo_sm_importParameters",null,null,a);this.$uploadLinesCount=this.makeIntParameterInput(l,U.rows(),1),this.$uploadColumnsCount=this.makeIntParameterInput(l,U.columns(),1),this.$uploadMargin=this.makeIntParameterInput(l,U.margin(),0),this.$uploadSpace=this.makeIntParameterInput(l,U.distance(),0);let h=M(null,"jo_sm_importParameters",null,null,a);this.$uploadSeries=this.makeStringParameterInput(h,U.series(),"Test","10em"),this.$uploadIndex=this.makeIntParameterInput(h,U.fromIndex(),0),M(null,null,null,{"border-bottom":"2px solid var(--slider)","margin-bottom":"5px"},a),this.$buttonImport=M(null,"jo_active jo_sm_button jo_sm_importButton",U.stepThree(),{width:"fit-content"},a),this.$buttonImport.on("click",()=>{t.$buttonImport.hasClass("jo_active")&&(t.importFiles(t.fileList),s.text(""),t.$buttonFileImport.val(""))});let c=M(null,"jo_sm_importExportMessages jo_sm_writeonly",null,null,i);M(null,null,U.messages(),{"font-weight":"bold"},c);let u=M(null,"jo_sm_messagesOuter jo_scrollable",null,null,c);this.$messagesDiv=M(null,"jo_sm_messagesDiv jo_scrollable","Test",null,u),this.$zipSizeDiv=M(null,"jo_sm_pngSizeDiv",U.fileSize()+"0 kB",null,c);let g=M(null,"jo_sm_importExportRight",null,null,i);M(null,"jo_sm_writeonly",U.importWholeSpritesheet(),null,g);let f=y('');g.append(f);let b=M(null,"jo_sm_buttonExportAll jo_sm_button jo_active",U.exportWholeSpritesheet(),null,g);M(null,"jo_sm_buttonDeleteAll jo_sm_button jo_active jo_sm_writeonly",U.removeAllSprites(),null,g).on("click",w=>{w.preventDefault(),Ln([{caption:U.cancel(),callback:()=>{}},{caption:U.sureDelete(),color:"#ff6060",callback:()=>{t.$spriteListDiv.empty(),t.userSpritesheet.spriteDataList=[],t.generateZipAndPrintZipSize()}}],w.pageX+2,w.pageY+2),w.stopPropagation()}),b.on("click",()=>{t.exportSpritesheet()}),f.on("change",w=>{t.importSpritesheet(w.target.files)});let S=M(null,"jo_sm_spritelistOuter",null,null,e);this.$spriteListDiv=M(null,"jo_sm_spritelistDiv jo_scrollable",null,null,S),e.append(this.$buttonDiv=M(null,"jo_sm_buttonDiv")),this.$buttonDiv.append(this.$buttonCancel=M("","jo_active jo_sm_button",U.cancel(),{"background-color":"var(--speedcontrol-grip)",color:"var(--fontColorLight)","font-size":"10pt"})),this.$buttonCancel.on("click",()=>{t.exit()}),this.$buttonDiv.append(this.$buttonOK=M("","jo_active jo_sm_button jo_sm_writeonly",U.save(),{"background-color":"var(--updateButtonBackground)",color:"var(--fontColorLight)","font-size":"10pt"})),this.$buttonOK.on("click",()=>{t.$buttonOK.hasClass("jo_active")&&t.saveAndExit()})}async importSpritesheet(t){this.userSpritesheet&&(await this.userSpritesheet.spritesheet.unpackZip(t[0]),this.userSpritesheet.extractImagesFromSheet(),this.$spriteListDiv.empty(),this.userSpritesheet.spriteDataList.forEach(e=>this.renderImageInList(e)),this.checkSeriesAndIndexesAndSetNextSpriteIndex())}async exportSpritesheet(){let t=window.prompt(U.nameOfSpritesheet(),"Spritesheet");t.endsWith(".zip")&&(t=t.replace(".zip","")),await this.userSpritesheet.generateAndZipSpritesheet(t),Or(new Blob([this.userSpritesheet.spritesheet.zipFile]),t+".zip",!0)}async importFiles(t){let e=Number.parseInt(this.$uploadLinesCount.val()),i=Number.parseInt(this.$uploadColumnsCount.val()),n=Number.parseInt(this.$uploadMargin.val()),s=Number.parseInt(this.$uploadSpace.val()),a=this.$uploadSeries.val(),l=Number.parseInt(this.$uploadIndex.val()),h=await new Ky().loadFiles(t);for(let c of h)this.userSpritesheet.addSprite(c,e,i,n,s,a,l++).forEach(g=>this.renderImageInList(g));this.$buttonImport.removeClass("jo_active"),this.checkSeriesAndIndexesAndSetNextSpriteIndex(),setTimeout(()=>{this.printMessage(h.length+U.imagesAdded()),this.generateZipAndPrintZipSize()},500)}async generateZipAndPrintZipSize(){await this.userSpritesheet.generateAndZipSpritesheet();let t=this.userSpritesheet.spritesheet.zipFile.length;this.$zipSizeDiv.text("Spritesheet: "+Math.round(t/1024*100)/100+" kB (Max: 8 MB)");let e=t>8*1024*1024?"red":"";this.$zipSizeDiv.css("color",e)}renderImageInList(t){let e=this,i=M(null,"jo_sm_spriteListLine",null,null,this.$spriteListDiv),n=y(''),s=n[0].getContext("2d");const a=new ImageData(new Uint8ClampedArray(t.image),t.width,t.height);s.putImageData(a,0,0);let l=300,h=100,c=t.width,u=t.height;c/l>u/h?(c=Math.min(t.width,l),u=t.height/t.width*c):(u=Math.min(t.height,h),c=t.width/t.height*u),n.css("width",c+"px"),n.css("height",u+"px"),M(null,"jo_spritepreview-innerbox",null,{width:c+"px",height:u+"px","margin-right":l-c+"px"},i).append(n);let f=M(null,"jo_sm_inputInfoDiv",null,null,i),b=M(null,"jo_sm_inputDiv",null,null,f);if(!this.readonly){let w=this.makeStringParameterInput(b,U.series(),t.series?t.series:"","10em");w.addClass("jo_sm_series");let C=this.makeIntParameterInput(b,U.index(),t.index?t.index:0);C.addClass("jo_sm_index"),w.on("input",()=>{t.series=w.val(),e.checkSeriesAndIndexesAndSetNextSpriteIndex()}),C.on("input",()=>{t.index=C.val(),e.checkSeriesAndIndexesAndSetNextSpriteIndex()})}let A=M(null,"jo_sm_infoDiv",U.widthHeight(t.width,t.height),null,f),S=y('');A.append(S),this.readonly||M(null,"img_delete jo_button jo_active",null,null,i).on("pointerdown",C=>{C.preventDefault(),Ln([{caption:U.cancel(),callback:()=>{}},{caption:U.sureDelete(),color:"#ff6060",callback:()=>{let q=e.userSpritesheet.spriteDataList.indexOf(t);e.userSpritesheet.spriteDataList.splice(q,1),i.remove(),e.generateZipAndPrintZipSize(),e.checkSeriesAndIndexesAndSetNextSpriteIndex()}}],C.pageX+2,C.pageY+2),C.stopPropagation()}),this.$spriteListDiv.prepend(i)}makeIntParameterInput(t,e,i){let n=t.append(M(null,"jo_sm_parameterDiv"));M(null,"jo_sm_parameterCaption",e,null,n);let s=y('');return n.append(s),s}makeStringParameterInput(t,e,i,n){let s=t.append(M(null,"jo_sm_parameterDiv"));M(null,"jo_sm_parameterCaption",e,null,s);let a=y('');return s.append(a),a}async show(){let t=this;this.guiReady||this.initGUI(),this.$buttonFileImport.val("");let e=this.main.getCurrentWorkspace();if(e==null){alert(U.noWorkspaceSelected());return}e.repository_id!=null&&!e.has_write_permission_to_repository?(this.readonly=!0,y(".jo_sm_writeonly").hide()):(this.readonly=!1,y(".jo_sm_writeonly").show()),e.repository_id==null?this.$mainHeading.find(".jo_sm_heading").text(U.mangeWorkspaceSprites(e.name)):this.$mainHeading.find(".jo_sm_heading").text(U.mangeRepositorySprites(e.name)),this.$buttonImport.removeClass("jo_active"),this.fileList=null,y("#spritemanager-div").css("visibility","visible"),y("#main").css("visibility","hidden"),this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{t.hide()});let s=new ws;await s.load(e.spritesheetId),this.userSpritesheet=new Uy(s),this.$spriteListDiv.empty(),this.userSpritesheet.spriteDataList.forEach(a=>{this.renderImageInList(a)}),this.checkSeriesAndIndexesAndSetNextSpriteIndex()}setNextSpriteIndex(){let t=-1;this.userSpritesheet.spriteDataList.forEach(e=>{e.index>t&&(t=e.index)}),this.$uploadIndex.val(t+1),this.$uploadColumnsCount.val(1),this.$uploadLinesCount.val(1),this.$uploadMargin.val(0),this.$uploadSpace.val(0)}async saveAndExit(){await this.userSpritesheet.generateAndZipSpritesheet();let t=this,e=this.userSpritesheet.spriteDataList.length==0,i=this.main.getCurrentWorkspace();$l.uploadSpritesheet(this.userSpritesheet.spritesheet.zipFile,i.id,e).then(n=>{i.spritesheetId=e?null:n,t.userSpritesheet.spritesheet.initializeSpritesheetForWorkspace(i,t.main,null).then(()=>{for(let s of i.getFiles())this.main.getCompiler().setFileDirty(s);this.main.getCompiler().triggerCompile()}),t.exit()}).catch(n=>{alert(n),t.exit()})}static async uploadSpritesheet(t,e,i){let n={"x-workspaceid":""+e,"x-filetype":i?"delete":"zip"};return Ue!=null&&(n["x-token-pm"]=Ue),new Promise((s,a)=>{y.ajax({type:"POST",async:!0,contentType:"application/octet-stream",data:t,processData:!1,headers:n,url:"servlet/uploadSprite",success:function(l){l.success?s(l.spriteFileId):a(l.message)},error:function(l,h){a(h)}})})}hide(){y("#spritemanager-div").css("visibility","hidden"),y("#main").css("visibility","visible")}exit(){window.history.back()}printMessage(t,e){let i=e==null?"":'style="color: '+e+'"';this.$messagesDiv.append(`
${t}
`);let n=this.$messagesDiv[0];n.scrollTop=n.scrollHeight}checkSeriesAndIndexesAndSetNextSpriteIndex(){if(this.readonly)return;this.hasErrors=!1;let t={};for(let n of Jo)t[n.name]=!0;let e={},i=this;this.$spriteListDiv.children().each((n,s)=>{let a=y(s).find(".jo_sm_series").val(),l=Number.parseInt(y(s).find(".jo_sm_index").val()),h=y(s).find(".jo_sm_errorspan");if(t[a]){h.text(U.identifierAlreadyUsed(a)),i.hasErrors=!0;return}if(e[a+"#"+l]){h.text(U.seriesIndexAlreadyUsed(a,l)),i.hasErrors=!0;return}h.text(""),e[a+"#"+l]=!0}),this.hasErrors?this.$buttonOK.removeClass("jo_active"):this.$buttonOK.addClass("jo_active"),this.setNextSpriteIndex()}}class Qy{start(t,e,i){}}class Yy{static addActions(t,e){t.addAction({id:"Find bracket",label:"Finde korrespondierende Klammer",keybindings:[xm.CtrlCmd|Ao.KeyK],precondition:void 0,keybindingContext:void 0,contextMenuGroupId:"navigation",contextMenuOrder:1.5,run:function(i){var n;(n=i.getAction("editor.action.jumpToBracket"))==null||n.run()}}),t.addAction({id:"Toggle line comment",label:"Zeilenkommentar ein-/ausschalten",keybindings:[xm.CtrlCmd|Ao.Comma],precondition:void 0,keybindingContext:void 0,contextMenuGroupId:"insert",contextMenuOrder:1.5,run:function(i){var n;console.log("Hier!"),(n=i.getAction("editor.action.commentLine"))==null||n.run()}}),e&&t.addAction({id:"Debugger Goto Cursor",label:"Führe Programm aus bis zu dieser Zeile",precondition:"Scheduler_running || Scheduler_paused",keybindingContext:void 0,contextMenuGroupId:"navigation",contextMenuOrder:1.5,run:i=>{e.getActionManager().trigger("interpreter.gotoCursor")}})}}class lg{constructor(t,e,i){r(this,"editor");r(this,"highlightCurrentMethod",!0);r(this,"cw",null);r(this,"lastPosition");r(this,"dontPushNextCursorMove",0);r(this,"debounceTimer",null);r(this,"lastMethodCallPosition");r(this,"lastPushTime",0);r(this,"zoom",1);this.main=t,this.showMinimap=e,this.isEmbedded=i,i||new ResizeObserver(()=>{clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{var s,a;((s=this.editor)==null?void 0:s.getDomNode()).parentElement.style.width="100%",(a=this.editor)==null||a.layout()},200)}).observe(document.body)}currentlyEditedModuleIsJava(){var e;let t=(e=this.main.getCurrentWorkspace())==null?void 0:e.getCurrentlyEditedFile().name;return Ai.filenameToFileType(t).file_type==0}initGUI(t){let e=this.main.getSettings();this.editor=H.create(t[0],{language:"myJava","semanticHighlighting.enabled":!0,lightbulb:{enabled:H.ShowLightbulbIconMode.On},stickyScroll:{enabled:e.getValue("editor.stickyScroll")!=="off"},guides:{bracketPairs:e.getValue("editor.bracketPairLines")!=="off",highlightActiveBracketPair:e.getValue("editor.bracketPairLines")!=="off",bracketPairsHorizontal:e.getValue("editor.bracketPairLines")==="verticalAndUnderlined"},lineDecorationsWidth:0,peekWidgetDefaultFocus:"tree",fixedOverflowWidgets:!0,quickSuggestions:!0,quickSuggestionsDelay:10,fontSize:14,inlayHints:{enabled:"on"},fontFamily:window.javaOnlineFont==null?"Consolas, Roboto Mono":window.javaOnlineFont,fontWeight:"500",roundedSelection:!0,selectOnLineNumbers:!1,automaticLayout:!0,scrollBeyondLastLine:!1,occurrencesHighlight:"off",autoIndent:"advanced",dragAndDrop:!0,formatOnType:!0,formatOnPaste:!0,suggestFontSize:16,suggestLineHeight:22,suggest:{localityBonus:!0,insertMode:"replace"},bracketPairColorization:{enabled:!0,independentColorPoolPerBracketType:!1},autoClosingBrackets:e.getValue("editor.autoClosingBrackets"),autoClosingQuotes:e.getValue("editor.autoClosingQuotes"),autoClosingDelete:"auto",autoClosingOvertype:"auto",parameterHints:{enabled:e.getValue("editor.contextSensitiveHelp.ParameterHints")=="true",cycle:!0},mouseWheelZoom:!0,tabSize:3,insertSpaces:!0,detectIndentation:!1,minimap:{enabled:this.showMinimap},scrollbar:{vertical:"auto",horizontal:"auto"},theme:"myCustomThemeDark",wrappingIndent:"same"}),this.createContextKeys(),this.editor.onDidChangeModelContent(n=>{const s=this.main.getInterpreter().scheduler.state;[Q.stopped,Q.error,Q.not_initialized].includes(s)||this.main.getActionManager().trigger("interpreter.stop"),this.main.getCompiler().triggerCompile()});let i=this;if(this.editor.onDidChangeConfiguration(n=>{if(n.hasChanged(H.EditorOption.fontSize)){let s=this.editor.getOption(H.EditorOption.fontSize);this.setFontSize(s)}}),!this.isEmbedded){let n=this.main;n.windowStateManager.registerBackButtonListener(s=>{var c;let a=s.state;if(s.state==null)return;let l=n.workspaceList.find(u=>u.id==a.workspace_id);if(l==null)return;let h=l.findFileById(a.file_id);h!=null&&(l!=n.getCurrentWorkspace()&&(i.dontPushNextCursorMove++,n.projectExplorer.setWorkspaceActive(l),i.dontPushNextCursorMove--),h!=((c=n.getCurrentWorkspace())==null?void 0:c.getCurrentlyEditedFile())&&(i.dontPushNextCursorMove++,n.projectExplorer.setFileActive(h),i.dontPushNextCursorMove--),i.dontPushNextCursorMove++,i.editor.setPosition(a.position),i.editor.revealPosition(a.position),i.dontPushNextCursorMove--,i.pushHistoryState(!0,a))})}return this.editor.onDidChangeCursorPosition(n=>{var a,l,h;let s=(l=(a=this.main.getCurrentWorkspace())==null?void 0:a.getCurrentlyEditedFile())==null?void 0:l.id;s!=null&&((this.lastPosition==null||n.source=="api"||s!=this.lastPosition.file_id||Math.abs(this.lastPosition.position.lineNumber-n.position.lineNumber)>20)&&this.dontPushNextCursorMove==0?this.pushHistoryState(!1,this.getPositionForHistory()):s==((h=history.state)==null?void 0:h.module_id)&&this.pushHistoryState(!0,this.getPositionForHistory())),i.onEvaluateSelectedText(n),i.onShowSignatureHelp(n)}),this.editor.onDidChangeModel(n=>{if(this.main.getCurrentWorkspace()==null)return;let s=this.main.getCurrentWorkspace().getCurrentlyEditedFile();this.main instanceof Co&&s!=null&&(this.main.projectExplorer.setActiveAfterExternalModelSet(s),(this.lastPosition==null||s.id!=this.lastPosition.file_id)&&this.dontPushNextCursorMove==0&&this.pushHistoryState(!1,this.getPositionForHistory()))}),setTimeout(()=>{H.remeasureFonts()},2e3),Yy.addActions(this.editor,this.main),this.editor}async onShowSignatureHelp(t){var l,h,c;let e=this.editor.getModel(),i,n=(l=this.main.getBottomDiv())==null?void 0:l.console;if(((h=n==null?void 0:n.editor)==null?void 0:h.getModel())!=e&&(i=(c=this.main.getCurrentWorkspace())==null?void 0:c.getModuleForMonacoModel(e)),!i)return;let s=i.methodCallPositions[t.position.lineNumber];if(!s)return;let a=s.filter(u=>u.identifierRange.endColumn=t.position.column);if(a.length>0){let u=a[0];if(u){if(u!=this.lastMethodCallPosition){let g=0;if(Array.isArray(u.possibleMethods))for(let f of u.possibleMethods)f instanceof Bi&&f.parameters.length>g&&(g=f.parameters.length);else typeof u.possibleMethods=="string"&&(u.possibleMethods.indexOf("print")>=0&&(g=u.commaPositions.length+1),u.possibleMethods.indexOf("for")>=0&&(g=2));if(g>1&&this.main.getSettings().getValue("editor.contextSensitiveHelp.ParameterHints")=="true"){this.lastMethodCallPosition=u,setTimeout(()=>{this.editor.trigger("xy","editor.action.triggerParameterHints",{})},10);return}}}else this.lastMethodCallPosition=void 0}}createContextKeys(){Object.values(Q).filter(t=>typeof t=="string").forEach(t=>this.main.getActionManager().registerEditorContextKey("Scheduler_"+t,this.editor.createContextKey("Scheduler_"+t,!1)))}getPositionForHistory(){var e;let t=(e=this.main.getCurrentWorkspace())==null?void 0:e.getCurrentlyEditedFile();if(t!=null)return{position:this.editor.getPosition(),workspace_id:this.main.getCurrentWorkspace().id,file_id:t.id}}pushHistoryState(t,e){if(!(this.main.isEmbedded()||e==null)){if(t)history.replaceState(e,"");else{let i=new Date().getTime();i-this.lastPushTime>200?history.pushState(e,""):history.replaceState(e,""),this.lastPushTime=i}this.lastPosition=e}}setFontSize(t){let e=this.editor.getOptions().get(H.EditorOption.fontSize),i=t;this.main instanceof Co&&(i=this.main.viewModeController.getChosenViewMode().fontSize,this.main.viewModeController.saveFontSize(t)),t!=e?this.editor.updateOptions({fontSize:t/this.zoom}):this.main instanceof Co&&(this.zoom*=t/i);let n=this.main.getBottomDiv();n!=null&&n.console!=null&&(n.console.editor.updateOptions({fontSize:t}),n.$bottomDiv.find(".jo_commandline").css({height:t*1.1+4+"px","line-height":t*1.1+4+"px"}),n.console.editor.layout()),y(".jo_editorFontSize").css("font-size",t+"px"),y(".jo_editorFontSize").css("line-height",t+2+"px"),document.documentElement.style.setProperty("--breakpoint-size",t+"px"),document.documentElement.style.setProperty("--breakpoint-radius",t/2+"px")}async onEvaluateSelectedText(t){let e=this;if(e.cw!=null&&(e.editor.removeContentWidget(e.cw),e.cw=null),e.main.getInterpreter().scheduler.state==Q.paused){let n=e.editor.getModel().getValueInRange(e.editor.getSelection());if(n!=null&&n.length>0){let a=await this.main.getRepl().executeAsync(n,!0);typeof a<"u"&&H.colorize(n+": "+a.text,"myJava",{tabSize:3}).then(l=>{l.endsWith("
")&&(l=l.substr(0,l.length-5)),e.cw={getId:function(){return"my.content.widget"},getDomNode:function(){return y('
'+l+"
")[0]},getPosition:function(){return{position:t.position,preference:[H.ContentWidgetPositionPreference.ABOVE,H.ContentWidgetPositionPreference.BELOW]}}},e.editor.addContentWidget(e.cw)})}}}dontDetectLastChange(){}}class tm extends Oi{constructor(e,i){super(o.FileNotFoundExceptionComment(e),i);r(this,"stacktrace",[]);this.filename=e,this.cause=i}}r(tm,"__javaDeclarations",[{type:"declaration",signature:"class FileNotFoundException extends Exception"},{type:"method",signature:"public FileNotFoundException()",native:Oi.prototype._constructor},{type:"method",signature:"public FileNotFoundException(String message)",native:Te.prototype._constructor_m},{type:"method",signature:"public FileNotFoundException(Throwable cause)",native:Te.prototype._constructor_c},{type:"method",signature:"public FileNotFoundException(String message, Throwable cause)",native:Te.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:Te.prototype._toString}]),r(tm,"type");class dg{constructor(t){this.main=t}read(t){return this.getFile(t).getText()}write(t,e){this.getFile(t).setText(e)}append(t,e){let i=this.getFile(t);i.setText(i.getText()+e)}getFile(t){var i;let e=(i=this.main.getCurrentWorkspace())==null?void 0:i.getFiles().find(n=>n.name==t);if(!e)throw new tm(t);return e}}class hg{constructor(t,e){r(this,"$input");this.$runDiv=t,this.main=e}waitForKey(t,e){var s;let i=(s=this.main.getInterpreter())==null?void 0:s.keyboardManager;if(i||e(void 0),t&&t.length>0){for(let a of t)if(i.isPressed(a)){e(a);return}}else if(i.isAnyKeyPressed()){e(i.getAnyPressedKey());return}let n={onKeyDown:(a,l,h,c)=>{if(!t||t.length==0){i.removeInternalKeyboardListener(n),e(a);return}if(t.indexOf(a)>=0){i.removeInternalKeyboardListener(n),e(a);return}},looseKeyboardFocus:()=>{}};i.addInternalKeyboardListener(n)}readInput(t,e,i,n){let s=this.main.getInterpreter().printManager;t!=null&&t!=""&&(s.beginOfLineState=!0,s.print(` `+t,!0,void 0),s.flush()),this.$input=y(''),s.$outputDiv.append(this.$input);let l=e??"";this.$input.val(l),e&&(this.$input[0].selectionStart=0,this.$input[0].selectionEnd=(""+e).length);let h=this;this.$input.on("keydown",c=>{if(c.key=="Enter"){let u=this.$input.val()||"",g=i(u);if(g.errorMessage){this.$input.detach(),s.print(g.errorMessage,!0,16711680),s.flush(),s.$outputDiv.append(this.$input);let f=this.$input[0];f.scrollIntoView(),f.focus(),f.selectionStart=0,f.selectionEnd=(f.value||"").length}else s.$outputDiv.off("mousedown.inputmanager"),s.print(u,!0,16777215),this.$input.off("keydown"),this.hide(),n(g.convertedValue)}}),setTimeout(()=>{h.$input.focus()},200),s.$outputDiv.on("mousedown.inputmanager",c=>{setTimeout(()=>{var u;(u=h.$input)==null||u.focus()},200)})}hide(){this.$input!=null&&(this.$input.remove(),this.$input=null)}}const cg="data:image/svg+xml,%3c!--%20By%20Sam%20Herbert%20(@sherb),%20for%20everyone.%20More%20@%20http://goo.gl/7AJzbL%20--%3e%3c!--%20Todo:%20add%20easing%20--%3e%3csvg%20width='57'%20height='57'%20viewBox='0%200%2057%2057'%20xmlns='http://www.w3.org/2000/svg'%20stroke='%23317c0e'%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cg%20transform='translate(1%201)'%20stroke-width='2'%3e%3ccircle%20cx='5'%20cy='50'%20r='5'%3e%3canimate%20attributeName='cy'%20begin='0s'%20dur='2.2s'%20values='50;5;50;50'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3canimate%20attributeName='cx'%20begin='0s'%20dur='2.2s'%20values='5;27;49;5'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='27'%20cy='5'%20r='5'%3e%3canimate%20attributeName='cy'%20begin='0s'%20dur='2.2s'%20from='5'%20to='5'%20values='5;50;50;5'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3canimate%20attributeName='cx'%20begin='0s'%20dur='2.2s'%20from='27'%20to='27'%20values='27;49;5;27'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='49'%20cy='50'%20r='5'%3e%3canimate%20attributeName='cy'%20begin='0s'%20dur='2.2s'%20values='50;50;5;50'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3canimate%20attributeName='cx'%20from='49'%20to='49'%20begin='0s'%20dur='2.2s'%20values='49;5;27;49'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3c/g%3e%3c/g%3e%3c/svg%3e";class go{constructor(){r(this,"$dialog");r(this,"$dialogMain");r(this,"$dialogFooter")}initAndOpen(){this.$dialog=y("#dialog"),this.$dialog.empty(),y("#main").css("visibility","hidden"),this.$dialog.append(y('
')),this.$dialogMain=this.$dialog.find(".dialog-main"),this.$dialogFooter=this.$dialog.find(".dialog-footer"),this.$dialog.css("visibility","visible"),this.$dialogMain.empty(),this.$dialogFooter.empty()}heading(t){let e=y('
'+t+"
");return this.$dialogMain.append(e),e}addDiv(t){this.$dialogMain.append(t)}subHeading(t){let e=y('
'+t+"
");return this.$dialogMain.append(e),e}description(t,e){let i=e==null?"":`style="color: ${e}"`,n=y(`
${t}
`);return this.$dialogMain.append(n),n}input(t,e){let i=y(``);return this.$dialogMain.append(i),i}buttons(t){let e=y('
');this.$dialogMain.append(e);for(let i of t){let n=y(``);n.on("click",()=>{i.callback()}),e.append(n)}}waitMessage(t){let e=y(`
${t}
`);return this.$dialogMain.append(e),i=>{let n=i?"visible":"hidden";e.css("visibility",n)}}close(){this.$dialog.css("visibility","hidden"),this.$dialog.empty(),y("#main").css("visibility","visible")}addCheckbox(t,e,i){let n='",s=y(n),a=y('"),l=y('
');return l.append(s,a),a.on("click",()=>{s.prop("checked",!s.prop("checked"))}),this.$dialogMain.append(l),()=>s.is(":checked")}}class Zy{constructor(t){this.main=t}init(){let t=y("#buttonUserSettings"),e=this;t.on("click",i=>{let n=[{caption:gt.changePassword()+"...",callback:()=>{new ug(e.main).show()}}];Ln(n,t.offset().left,t.offset().top+t.height())})}}class ug{constructor(t){r(this,"dialog");this.main=t,this.dialog=new go}show(){this.dialog.initAndOpen(),this.dialog.heading(gt.changePassword()),this.dialog.description(gt.changePasswordDescription());let t=this.dialog.input("password",gt.oldPassword()),e=this.dialog.input("password",gt.newPassword()),i=this.dialog.input("password",gt.repeatNewPassword()),n=this.dialog.description("","red"),s=this.dialog.waitMessage(gt.pleaseWait());this.dialog.buttons([{caption:gt.cancel(),color:"#a00000",callback:()=>{this.dialog.close()}},{caption:gt.ok(),color:"green",callback:()=>{e.val()!=i.val()?n.text(gt.passwordsDontMatch()):(s(!0),Re("changePassword",{oldPassword:t.val(),newPassword:e.val()},()=>{s(!1),alert(gt.settingPasswordSuccessful()),this.dialog.close()},a=>{s(!1),n.text(a)}))}}])}}const dr=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"],Um=[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255,255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255,255,255,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];function Ll(p){if(p>=Um.length)throw new Error("Unable to parse base64 string.");const t=Um[p];if(t===255)throw new Error("Unable to parse base64 string.");return t}function mg(p){let t="",e,i=p.length;for(e=2;e>2],t+=dr[(p[e-2]&3)<<4|p[e-1]>>4],t+=dr[(p[e-1]&15)<<2|p[e]>>6],t+=dr[p[e]&63];return e===i+1&&(t+=dr[p[e-2]>>2],t+=dr[(p[e-2]&3)<<4],t+="=="),e===i&&(t+=dr[p[e-2]>>2],t+=dr[(p[e-2]&3)<<4|p[e-1]>>4],t+=dr[(p[e-1]&15)<<2],t+="="),t}function Am(p){if(p.length%4!==0)throw new Error("Unable to parse base64 string.");const t=p.indexOf("=");if(t!==-1&&t>16,n[l+1]=s>>8&255,n[l+2]=s&255;return n.subarray(0,n.length-e)}class lt{}r(lt,"confirmInput",t=>d({de:`Wollen Sie die ${t} ausgewählten Workspaces wirklich importieren?`,en:`Do you really want to import the ${t} selected workspaces?`,fr:`Voulez-vous vraiment importer les ${t} workspaces sélectionnés?`})),r(lt,"importWorkspace",()=>d({de:"Workspace importieren",en:"Import workspace"})),r(lt,"importWorkspaceDescription",()=>d({de:"1. Bitte klicken Sie auf den Button 'Datei auswählen...' oder ziehen Sie eine Datei auf das gestrichelt umrahmte Feld.",en:"1. Use button 'Choose file...' or drop file on dotted rectangle."})),r(lt,"wrongFileFormat",t=>d({de:"Das Format der Datei "+t+" passt nicht.",en:"File "+t+" has wrong file format."})),r(lt,"noJson",t=>d({de:"Die Datei "+t+" ist keine gültige JSON-Datei.",en:"File "+t+" doesn't contain JSON code."})),r(lt,"withFiles",t=>d({de:"mit "+t+" Dateien",en:"with "+t+" files"})),r(lt,"dragFilesHere",()=>d({de:"Dateien hierhin ziehen",en:"Drag files here."})),r(lt,"dragDropTutorial",()=>d({de:"2. In der linken Baumansicht sehen Sie die Workspaces der importierten Datei. Sie können mehrere Workspaces/Ordner durch + Click bzw. + Click markieren. Ziehen Sie die gewünschten Workspaces in die rechte Baumansicht, um sie zu importieren.",en:"2. The left tree view shows the workspaces of the imported file. You can select multiple workspaces/folders using + Click or + Click. Drag and drop the desired folders/workspaces to the right tree view to import them.",fr:"2. La vue arborescente de gauche affiche les workspaces du fichier importé. Vous pouvez sélectionner plusieurs workspaces/dossiers en utilisant + Clic ou + Clic. Faites glisser et déposez les dossiers/workspaces souhaités dans la vue arborescente de droite pour les importer."})),r(lt,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(lt,"ok",()=>d({de:"OK",en:"OK"})),r(lt,"import",()=>d({de:"Importieren",en:"Import"})),r(lt,"serverNotReachable",()=>d({de:"Der Server ist nicht erreichbar.",en:"Server not reachable."}));class Lr{static async exportAllWorkspaces(t){let e=[];for(let i of t.projectExplorer.workspaceTreeview.rootNode.getOrderedNodeListRecursively().map(n=>n.externalObject)){let n=await Lr.exportWorkspace(i);e.push(n)}return e}static async exportFolder(t,e){let i=e.findNodeByElement(t);if(!i)return[];let n=i.getOrderedNodeListRecursively().map(a=>a.externalObject);n.unshift(t);let s=[];for(let a of n){let l=await Lr.exportWorkspace(a);a==t&&(l.parent_folder_id=null),s.push(l)}return s}static async exportWorkspace(t){let e;if(t.spritesheetId)try{let i=new ws;await i.load(t.spritesheetId),i.zipFile!=null&&(e=mg(i.zipFile))}catch{console.log("Hier!")}return{name:t.name,id:t.id,modules:t.getFiles().map(i=>Lr.exportFile(i)),settings:t.settings,spritesheetBase64:e,parent_folder_id:t.parent_folder_id,isFolder:t.isFolder}}static exportFile(t){return{name:t.name,text:t.getText(),identical_to_repository_version:t.identical_to_repository_version,is_copy_of_id:t.is_copy_of_id,repository_file_version:t.repository_file_version,isFolder:t.isFolder,parent_folder_id:t.parent_folder_id}}}class Xy{constructor(t,e){r(this,"networkManager",null);this.main=t,this.owner_id=e,this.networkManager=t.networkManager}async importWorkspaces(t,e,i){for(;!e.isFolder&&!e.isRootNode;)e=e.getParent();if(!confirm(lt.confirmInput(t.length)))return;let n=new Set(t.filter(g=>g.isFolder).map(g=>g.id));t.forEach(g=>{n.has(g.parent_folder_id)||(g.parent_folder_id=null)});let s=[],a=-1,l=new Set;for(;s.length>a;){a=s.length;for(let g of t)!l.has(g.id)&&(g.parent_folder_id==null||l.has(g.parent_folder_id))&&(s.push(g),l.add(g.id))}i&&(i.init(0,s.length),i.show());let h=0,c=new Map,u=[];for(let g of s){i&&i.set(h++);let f=g.parent_folder_id==null?e:c.get(g.parent_folder_id),b=f.isRootNode()?null:f.externalObject.id,A=await this.importWorkspaceWithoutSpritesheet(g,b);if(await this.importSpritesheet(g,A),A){let S=A.repository_id==null?"img_workspace-dark":"img_workspace-dark-repository",w=f.treeview.addNode(A.isFolder,A.name,S,A);u.push(w),A.isFolder&&c.set(g.id,w)}}i&&i.hide(),u.forEach(g=>g.setCaptionColor("#00b000"))}async importSpritesheet(t,e){if(this.networkManager&&!t.isFolder&&t.spritesheetBase64&&e!=null){let i=Am(t.spritesheetBase64);try{let n=await $l.uploadSpritesheet(i,e.id,!1);e.spritesheetId=n}catch{}}}async importWorkspaceWithoutSpritesheet(t,e=null){let i=new wi(t.name,this.main,this.owner_id);i.isFolder=t.isFolder||!1,i.settings=t.settings,i.parent_folder_id=e;let n=!0;if(this.networkManager&&(n=await this.networkManager.sendCreateWorkspace(i,this.owner_id)),n){this.main.addWorkspace(i);for(let s of t.modules){let a=await this.importFile(s,i);a&&i.addFile(a)}return i}return null}async importFile(t,e){let i=new Ge(this.main,t.name);return i.setText(t.text),i.identical_to_repository_version=t.identical_to_repository_version,i.is_copy_of_id=t.is_copy_of_id,i.repository_file_version=t.repository_file_version,i.isFolder=t.isFolder||!1,i.parent_folder_id=t.parent_folder_id||null,this.networkManager&&(this.networkManager.sendCreateFile(i,e,this.owner_id)||(i=null)),i}}class Jy{constructor(){r(this,"elementOuter");r(this,"elementInner");r(this,"parent");r(this,"min");r(this,"max");this.parent=document.getElementById("bitteWarten"),this.elementOuter=R.makeDiv(this.parent,"jo_progressBar"),this.elementInner=R.makeDiv(this.elementOuter,"jo_progressBarInner")}show(){this.parent.style.display="flex"}hide(){this.parent.style.display="none"}init(t,e){this.min=t,this.max=e}set(t,e){let i=(t-this.min)/(this.max-this.min)*100;this.elementInner.style.width=i+"%"}}class ev{constructor(t){r(this,"dialog");this.main=t,this.dialog=new go}show(){this.dialog.initAndOpen(),this.dialog.heading(lt.importWorkspace()),this.dialog.description(lt.importWorkspaceDescription());let t=y('');this.dialog.addDiv(t);let e=y('
'),i=R.makeDiv(e[0],"jo_importLeft","jo_scrollable"),n=R.makeDiv(e[0],"jo_importRight","jo_scrollable"),s=new Zt(i,{captionLine:{enabled:!0,text:"Inhalt der importierten Datei:"},withSelection:!0,selectMultiple:!0,selectWholeFolders:!0,isDragAndDropSource:!0,buttonAddElements:!1,buttonAddFolders:!1,withDeleteButtons:!1,withFolders:!0,keyExtractor:h=>h.id,parentKeyExtractor:h=>h.parent_folder_id,orderBy:"comparator"}),a=new Zt(n,{captionLine:{enabled:!0,text:"Ihre Workspaces:"},withSelection:!1,selectMultiple:!1,isDragAndDropSource:!1,buttonAddElements:!1,buttonAddFolders:!1,withDeleteButtons:!1,withFolders:!0,comparator:(h,c)=>h.name>c.name?1:h.nameh.id,parentKeyExtractor:h=>h.parent_folder_id,orderBy:"comparator"});a.addDragDropSource({treeview:s,defaultDragKind:"copy",dropInsertKind:"asElement"}),a.dropEventCallback=(h,c)=>{this.dropEventCallback(s,a,c)},t.on("change",h=>{var c=h.originalEvent.target.files;this.fillSourceTreeview(c,s)});let l=y(`
${lt.dragFilesHere()}
`);this.dialog.addDiv(l),this.dialog.description("").text(lt.dragDropTutorial()),l.on("dragover",h=>{h.stopPropagation(),h.preventDefault(),h.originalEvent.dataTransfer.dropEffect="copy"}),l.on("drop",h=>{h.stopPropagation(),h.preventDefault();var c=h.originalEvent.dataTransfer.files;this.fillSourceTreeview(c,s)}),this.dialog.addDiv(e),this.fillDestTreeview(a),this.dialog.buttons([{caption:lt.ok(),color:"#18a000ff",callback:()=>{this.main.workspaceList=a.getOrderedNodeListRecursively().map(h=>h.externalObject),this.main.projectExplorer.renderWorkspaces(this.main.workspaceList),this.dialog.close()}}])}async dropEventCallback(t,e,i){let n=t.getOrderedListOfCurrentlySelectedNodes().map(l=>l.externalObject),s=this.main.user.id;this.main.workspacesOwnerId!=null&&(s=this.main.workspacesOwnerId);let a=new Jy;await new Xy(this.main,s).importWorkspaces(n,i,a)}fillSourceTreeview(t,e){e.clear();for(let n=0;n{let l=a.target.result;if(!(l.startsWith("{")||l.startsWith("["))){alert(lt.wrongFileFormat(s.name));return}let h=[];try{h=JSON.parse(l),Array.isArray(h)||(h=[h])}catch{alert(lt.noJson(s.name));return}for(let c of h)if(c.modules==null||c.name==null||c.settings==null){alert(lt.wrongFileFormat(s.name));return}else e.addNode(c.isFolder,c.name,c.isFolder?void 0:"img_workspace-dark",c)},i.readAsText(s)}}fillDestTreeview(t){t.clear();let e=this.main.workspaceList;for(let i of e)t.addNode(i.isFolder,i.name,"img_workspace-dark",i)}}class tv{constructor(t){r(this,"dialog");this.main=t,this.dialog=new go}show(){this.dialog.initAndOpen(),this.dialog.heading(Rt.reportBug()),this.dialog.description(Rt.bugReport()+":");let t=R.makeElement(this.dialog.$dialogMain[0],"textarea","jo_issuereporterr_textfield"),e=this.dialog.addCheckbox(Rt.sendCopyOfWorkspace(),!0,"jo_cbIssueAddWorkspace"),i=this.dialog.input("text",Rt.email()),n=this.dialog.input("text",Rt.firstName()),s=this.dialog.input("text",Rt.lastName());this.dialog.buttons([{caption:Rt.cancel(),color:"#a00000",callback:()=>{this.dialog.close()}},{caption:Rt.send(),color:"green",callback:async()=>{let a={workspace_id:e()?this.main.getCurrentWorkspace().id:null,description:t.value,mail:i.val(),rufname:n.val(),familienname:s.val()};(await et("/servlet/reportIssue",a)).success&&alert(Rt.thanks()),this.dialog.close()}}])}}class k{}r(k,"Saving",()=>d({de:"Speichere...",en:"saving...",fr:"enregistrement..."})),r(k,"Saved",()=>d({de:"Gespeichert",en:"saved",fr:"enregistré"})),r(k,"OptionDefault",()=>d({de:"Standard",en:"default",fr:"par défaut"})),r(k,"OptionTrue",()=>d({de:"Ja",en:"true",fr:"Oui"})),r(k,"OptionFalse",()=>d({de:"Nein",en:"false",fr:"Non"})),r(k,"CloseButton",()=>d({de:"Schließen",en:"Close",fr:"Fermer"})),r(k,"SettingsHeading",()=>d({de:"Einstellungen",en:"Settings",fr:"Paramètres"})),r(k,"UserSettingsTabHeading",()=>d({de:"Meine Einstellungen",en:"My Settings",fr:"Mes paramètres"})),r(k,"ClassSettingsTabHeading",()=>d({de:"Klassen-Einstellungen für ",en:"Class Settings for ",fr:"Paramètres de la classe pour "})),r(k,"SchoolSettingsTabHeading",()=>d({de:"Schul-Einstellungen",en:"School Settings",fr:"Paramètres de l'école"})),r(k,"ScopeUser",()=>d({de:"Benutzer",en:"User",fr:"Utilisateur"})),r(k,"ScopeClass",()=>d({de:"Klasse",en:"Class",fr:"Classe"})),r(k,"ScopeSchool",()=>d({de:"Schule",en:"School",fr:"École"})),r(k,"EditorSettingsName",()=>d({de:"Editoreinstellungen",en:"Editor Settings",fr:"Paramètres de l'éditeur"})),r(k,"SettingDisabledByHigherPrecedence",()=>d({de:"Diese Einstellung wird von einer klassen- oder schulweiten Einstellung mit höherer Präzedenz überschrieben und kann daher nicht geändert werden.",en:"This setting is overridden by a class- or school-wide setting with higher precedence and therefore cannot be changed.",fr:"Ce paramètre est remplacé par un paramètre de priorité supérieure au niveau de la classe ou de l'école et ne peut donc pas être modifié."})),r(k,"EditorSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen des Editors anpassen.",en:"Here you can adjust the editor settings.",fr:"Ici, vous pouvez ajuster les paramètres de l'éditeur."})),r(k,"HoverVerbosityName",()=>d({de:"Texte beim Hovern über Code",en:"Hover-Verbosity",fr:"Verbosité des infobulles"})),r(k,"HoverVerbosityDescription",()=>d({de:"Menge an Informationen, die in Hover-Infoballons angezeigt werden.",en:"Information amount displayed in hover tooltips.",fr:"Quantité d'informations affichées dans les infobulles."})),r(k,"ShowHelpOnKeywordsAndOperators",()=>d({de:"Hilfstexte für Schlüsselwörter und Operatoren anzeigen",en:"Show help texts for keywords and operators",fr:"Afficher les textes d'aide pour les mots-clés et les opérateurs"})),r(k,"ShowMethodDeclaration",()=>d({de:"Methodendeklarationen anzeigen",en:"Show method declarations",fr:"Afficher les déclarations de méthodes"})),r(k,"None",()=>d({de:"Keine",en:"None",fr:"Aucun"})),r(k,"Declarations",()=>d({de:"Deklarationen",en:"Declarations",fr:"Déclarations"})),r(k,"DeclarationsAndComments",()=>d({de:"Deklarationen und Kommentare",en:"Declarations and Comments",fr:"Déclarations et commentaires"})),r(k,"ShowClassDeclaration",()=>d({de:"Klassendeklarationen anzeigen",en:"Show class declaration",fr:"Afficher la déclarations de la classes"})),r(k,"ShowStructureStatementHelp",()=>d({de:"Hilfe für Strukturanweisungen anzeigen",en:"Show help for structure statements",fr:"Afficher l'aide pour les instructions de structure"})),r(k,"TypingAssistanceName",()=>d({de:"Unterstützung bei der Eingabe von Code",en:"Typing Assistance",fr:"Assistance à la saisie de code"})),r(k,"EditorQuickFixSettingsName",()=>d({de:"Quick-Fix-Einstellungen",en:"Quick Fix Settings",fr:"Paramètres de correction rapide"})),r(k,"EditorQuickFixSettingsDescription",()=>d({de:"Hier können Sie einstellen, welche Quick-Fixes angeboten werden sollen. Im Gegensatz zu den meisten anderen Einstellungen gilt hier: Klasseneinstellung vor Schuleinstellung vor User-Einstellung.",en:"Here you can set which quick fixes should be offered. In contrast to most other settings, here class setting takes precedence over school setting which takes precedence over user setting.",fr:"Ici, vous pouvez définir les corrections rapides qui doivent être proposées. Contrairement à la plupart des autres paramètres, ici la configuration de la classe a la priorité sur la configuration de l'école qui a la priorité sur la configuration de l'utilisateur."})),r(k,"EditorQuickFixGetterSetterName",()=>d({de:"Automatische Erstellung von Getter- und Setter-Methoden",en:"Automatic generation of getter and setter methods",fr:"Génération automatique des méthodes getter et setter"})),r(k,"EditorQuickFixGetterSetterDescription",()=>d({de:"Befindet sich der Cursor in einem Attribut einer Klasse, so erscheint daneben eine Glühbirne, über die angeboten wird, automatisch eine Getter- und Setter-Methode für dieses Attribut zu erstellen.",en:"If the cursor is on an attribute of a class, a light bulb appears next to it, offering to automatically create a getter and setter method for that attribute.",fr:"Si le curseur se trouve sur un attribut d'une classe, une ampoule apparaît à côté, offrant de créer automatiquement une méthode getter et setter pour cet attribut."})),r(k,"offer",()=>d({de:"Anbieten",en:"Offer",fr:"Proposer"})),r(k,"dontOffer",()=>d({de:"Nicht anbieten",en:"Do not offer",fr:"Ne pas proposer"})),r(k,"EditorQuickFixGenerateConstructorName",()=>d({de:"Automatische Erstellung von Konstruktoren",en:"Automatic generation of constructors",fr:"Génération automatique des constructeurs"})),r(k,"EditorQuickFixGenerateConstructorDescription",()=>d({de:"Befindet sich der Cursor in einer Klasse, aber nicht in einer Methode, so erscheint in der kontextsensitiven Hilfe ( + ) ein Menüpunkt zur automatischen Erstellung eines Konstruktors.",en:"If the cursor is in a class but not in a method, a menu item for automatically creating a constructor appears in the context-sensitive help ( + ).",fr:"Si le curseur se trouve dans une classe mais pas dans une méthode, un élément de menu pour créer automatiquement un constructeur apparaît dans l'aide contextuelle ( + )."})),r(k,"EditorViewSettings",()=>d({de:"Anzeigeeinstellungen des Editors",en:"Editor View Settings",fr:"Paramètres d'affichage de l'éditeur"})),r(k,"EditorViewSettingsDescription",()=>d({de:"Hier können Sie die Anzeigeeinstellungen des Editors anpassen.",en:"You can adjust the editor view settings here.",fr:"Vous pouvez ajuster les paramètres d'affichage de l'éditeur ici."})),r(k,"EditorFormatterSettings",()=>d({de:"Code-Formatter-Einstellungen",en:"Editor Formatter Settings",fr:"Paramètres du formateur de code"})),r(k,"EditorFormatterSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen für den Code-Formatter anpassen.",en:"Here you can adjust the settings for the code formatter.",fr:"Ici, vous pouvez ajuster les paramètres du formateur de code."})),r(k,"ForceSpacesAfterIfForWhileDoName",()=>d({de:"Anzahl von Leerzeichen nach if, for, while und do erzwingen",en:"Force number of spaces after if, for, while and do",fr:"Forcer le nombre d'espaces après if, for, while et do"})),r(k,"ForceSpacesAfterIfForWhileDoDescription",()=>d({de:"Erzwinge eine bestimmte Anzahl von Leerzeichen nach if, for, while und do",en:"Force a specific number of spaces after if, for, while and do",fr:"Forcer un nombre spécifique d'espaces après if, for, while et do"})),r(k,"one",()=>d({de:"1",en:"1",fr:"1"})),r(k,"zero",()=>d({de:"0",en:"0",fr:"0"})),r(k,"no",()=>d({de:"Nein, nicht erzwingen",en:"No, do not force",fr:"Non, ne pas forcer"})),r(k,"TypingAssistanceDescription",()=>d({de:"Hier können Sie die Eingabeunterstützung des Editors anpassen.",en:"Here you can adjust the typing assistance of the editor.",fr:"Ici, vous pouvez ajuster l'assistance à la saisie de l'éditeur."})),r(k,"AutoClosingBracketsName",()=>d({de:"Automatisches Schließen von Klammern",en:"Auto Closing Brackets",fr:"Fermeture automatique des parenthèses"})),r(k,"BracketPairLines",()=>d({de:"Linien zwischen Klammerpaaren anzeigen",en:"Display lines between bracket pairs",fr:"Afficher les lignes entre les paires de parenthèses"})),r(k,"StickyScroll",()=>d({de:"Sticky Scroll",en:"Sticky Scroll",fr:"Défilement fixe"})),r(k,"StickyScrollDescription",()=>d({de:"Zeigt die aktuellen Blocküberschriften (z.B. Methoden- oder Klassennamen) immer oben im Editor an, auch wenn diese nicht mehr im sichtbaren Bereich sind.",en:"Always displays the current block headers (e.g., method or class names) at the top of the editor, even when they are no longer in the visible area.",fr:"Affiche toujours les en-têtes de bloc actuels (par exemple, les noms de méthodes ou de classes) en haut de l'éditeur, même lorsqu'ils ne sont plus dans la zone visible."})),r(k,"BracketPairLinesDescription",()=>d({de:"Vertikale Linien zwischen passenden Klammerpaaren anzeigen, gegebenfalls um Unterstreichung des Scope-Beginns.",en:"Display vertical lines between matching bracket pairs, possibly with underlined scope-start.",fr:"Afficher des lignes verticales entre les paires de parenthèses correspondantes, éventuellement avec le début du scope souligné."})),r(k,"BracketPairLinesOff",()=>d({de:"Keine Linien anzeigen",en:"Do not display lines",fr:"Ne pas afficher de lignes"})),r(k,"BracketPairLinesVertical",()=>d({de:"Vertikale Linien anzeigen (entspricht Scope)",en:"Display vertical lines (according to scope)",fr:"Afficher des lignes verticales (selon le scope)"})),r(k,"BracketPairLinesVerticalAndUnderlined",()=>d({de:"Vertikale Linien und Unterstreichung anzeigen",en:"Display vertical lines and underline",fr:"Afficher des lignes verticales et souligner"})),r(k,"AutoSemicolonsName",()=>d({de:"Automatisches Ergänzen von Strichpunkten",en:"Auto Semicolons",fr:"Point-virgules automatiques"})),r(k,"AutoSemicolonsDescription",()=>d({de:"Fehlende Strichpunkte am Ende der Zeile werden in den meisten Fällen automatisch ergänzt.",en:"Missing semicolons at the end of the line are automatically added in most cases.",fr:"Les points-virgules manquants à la fin de la ligne sont automatiquement ajoutés dans la plupart des cas."})),r(k,"On",()=>d({de:"Ein",en:"On",fr:"Activé"})),r(k,"Off",()=>d({de:"Aus",en:"Off",fr:"Désactivé"})),r(k,"AutoClosingQuotesName",()=>d({de:"Automatisches Schließen von Anführungszeichen",en:"Auto Closing Quotes",fr:"Fermeture automatique des guillemets"})),r(k,"AutoClosingBracketsDescription",()=>d({de:"Bei Eingabe von öffnenden Klammern wird automatisch die schließende Klammer hinzugefügt.",en:"Automatically add closing brackets when typing opening brackets.",fr:"Ajoute automatiquement les parenthèses fermantes lors de la saisie des parenthèses ouvrantes."})),r(k,"AutoClosingQuotesDescription",()=>d({de:"Bei Eingabe eines Anführungszeichens wird automatisch ein zweites hinter dem Cursor hinzugefügt.",en:"Automatically add a second quote behind the cursor when typing a quote.",fr:"Ajoute automatiquement un deuxième guillemet derrière le curseur lors de la saisie d'un guillemet."})),r(k,"AutoClosingBracketsAlways",()=>d({de:"Immer",en:"Always",fr:"Toujours"})),r(k,"AutoClosingBracketsNever",()=>d({de:"Nie",en:"Never",fr:"Jamais"})),r(k,"AutoClosingBracketsBeforeWhitespace",()=>d({de:"Nur vor Leerzeichen",en:"Only before whitespace",fr:"Seulement avant les espaces"})),r(k,"ClassDiagramSettingsName",()=>d({de:"Klassendiagramm",en:"Class Diagram",fr:"Diagramme de classes"})),r(k,"ClassDiagramSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen für das Klassendiagramm anpassen.",en:"Here you can adjust the settings for the class diagram.",fr:"Ici, vous pouvez ajuster les paramètres du diagramme de classes."})),r(k,"ClassDiagramTypeConventionName",()=>d({de:"Darstellungsweise von Datentypen",en:"Type Representation",fr:"Représentation des types"})),r(k,"ClassDiagramBackground",()=>d({de:"Hintergrund beim Exportieren als png-Datei",en:"Background when exporting as png file",fr:"Arrière-plan lors de l'exportation en fichier png"})),r(k,"classDiagramOmitVoidReturnType",()=>d({de:'Rückgabetyp "void" im Klassendiagramm weglassen',en:'Omit "void" return type in class diagram',fr:'Omettre le type de retour "void" dans le diagramme de classes'})),r(k,"ClassDiagramOmitVoidReturnTypeDescription",()=>d({de:'Legt fest, ob im Klassendiagramm bei Methoden der Rückgabetyp "void" weggelassen werden soll.',en:'Determines whether the return type "void" should be omitted in the class diagram for methods.',fr:'Détermine si le type de retour "void" doit être omis dans le diagramme de classes pour les méthodes.'})),r(k,"show",()=>d({de:"anzeigen",en:"show",fr:"afficher"})),r(k,"omit",()=>d({de:"weglassen",en:"omit",fr:"omettre"})),r(k,"ClassDiagramBackgroundDescription",()=>d({de:"Legt fest, ob der Hintergrund des Klassendiagramms beim Exportieren als png-Datei transparent oder weiß sein soll.",en:"Determines whether the background of the class diagram should be transparent or white when exporting as a png file.",fr:"Détermine si l'arrière-plan du diagramme de classes doit"})),r(k,"ClassDiagramTypeConventionDescription",()=>d({de:"Wenn Datentypen im Klassendiagramm angezeigt werden, kann dies entweder in der Art von Java (z.B. String name) erfolgen oder in der Art von Pascal (name: String).",en:"If data types are displayed in the class diagram, they can be shown in either Java style (e.g., String name) or Pascal style (name: String).",fr:"Si les types de données sont affichés dans le diagramme de classes, ils peuvent être présentés dans le style Java (par exemple, String name) ou dans le style Pascal (name: String)."})),r(k,"ClassDiagramTypeConventionJava",()=>d({de:"Java-Stil (z.B. String name)",en:"Java Style (e.g., String name)",fr:"Style Java (par exemple, String name)"})),r(k,"ClassDiagramTypeConventionPascal",()=>d({de:"Pascal-Stil (name: String)",en:"Pascal Style (name: String)",fr:"Style Pascal (name: String)"})),r(k,"ClassDiagramBackgroundTransparent",()=>d({de:"durchsichtig",en:"transparent",fr:"transparent"})),r(k,"ClassDiagramBackgroundWhite",()=>d({de:"weiß",en:"white",fr:"blanc"})),r(k,"CompilerSettingsName",()=>d({de:"Compiler-Einstellungen",en:"Compiler settings"})),r(k,"CompilerSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen des Compilers vornehmen.",en:"Here you can adjust the compiler settings."})),r(k,"ExplorerSettingsName",()=>d({de:"Explorer-Einstellungen",en:"Explorer settings"})),r(k,"ExplorerSettingsDescription",()=>d({de:"Einstellungen für den Datei- und Workspaceexplorer (im Hauptfenster links).",en:"Settings for file- and workspace explorer (in the main window on the left)."})),r(k,"CompilerShadowedSymbolErrorLevelName",()=>d({de:"Errorlevel bei verdeckten Symbolen",en:"Error level for shadowed symbols"})),r(k,"CompilerShadowedSymbolErrorLevelDescription",()=>d({de:"Welches Errorlevel soll der Fehler haben, wenn eine Variable in einem inneren Scope eine andere gleichnamige Variable in einem äußeren Scope verdeckt?",en:"What error level should the error have if a variable in an inner scope shadows another variable with the same name in an outer scope?"})),r(k,"ExplorerFileOrderName",()=>d({de:"Sortierung des Dateibaums",en:"Order of file treeview"})),r(k,"ExplorerFileOrderDescription",()=>d({de:"Hier können Sie einstellen, ob der Dateibaum grundsätzlich alphabetisch sortiert werden soll oder der Nutzer durch drag and drop eine davon abweichende Sortierung festlegen kann.",en:"You can set here whether the file tree should be sorted alphabetically by default or whether the user can define a different sorting by drag and drop."})),r(k,"ExplorerWorkspaceOrderName",()=>d({de:"Sortierung des Workspacebaums",en:"Order of workspace treeview"})),r(k,"ExplorerWorkspaceOrderDescription",()=>d({de:"Hier können Sie einstellen, ob der Workspacebaum grundsätzlich alphabetisch sortiert werden soll oder der Nutzer durch drag and drop eine davon abweichende Sortierung festlegen kann.",en:"You can set here whether the workspace tree should be sorted alphabetically by default or whether the user can define a different sorting by drag and drop."})),r(k,"ExplorerOrderComparator",()=>d({de:"Immer alphabetisch",en:"Always alphabetical",fr:"Toujours alphabétique"})),r(k,"ExplorerOrderUserDefined",()=>d({de:"Nutzerdefinierte Sortierung",en:"User-defined order",fr:"Ordre défini par l'utilisateur"})),r(k,"ErrorLevelIgnore",()=>d({de:"Ignorieren",en:"Ignore",fr:"Ignorer"})),r(k,"ErrorLevelWarning",()=>d({de:"Warnung",en:"Warning",fr:"Avertissement"})),r(k,"ErrorLevelError",()=>d({de:"Fehler",en:"Error",fr:"Erreur"})),r(k,"ErrorLevelInfo",()=>d({de:"Info",en:"Info",fr:"Info"})),r(k,"ContextSensitiveHelpName",()=>d({de:"Kontextsensitive Hilfe",en:"Context-sensitive help"})),r(k,"ContextSensitiveHelpDescription",()=>d({de:"Hier können Sie einstellen, ob in bestimmten Bereichen der Anwendung kontextsensitive Hilfetexte angezeigt werden sollen.",en:"Here you can set whether context-sensitive help texts should be displayed in certain areas of the application."})),r(k,"ContextSensitiveHelpParameterHintsName",()=>d({de:"Parameterhinweise",en:"Parameter hints"})),r(k,"ContextSensitiveHelpParameterHintsDescription",()=>d({de:"Hier können Sie einstellen, ob dann, wenn sich der Cursor in einem Methodenaufruf befindet, Hinweise zu den Parametern dieser Methode angezeigt werden sollen.
",en:"Here you can set whether hints about the parameters of a method should be displayed whenever the cursor is inside a method call."})),r(k,"ClassDiagramDrawCompositionDiamond",()=>d({de:"Kompositionsbeziehungen mit Raute darstellen",en:"Draw composition relationships with diamond",fr:"Dessiner les relations de composition avec un losange"})),r(k,"ClassDiagramDrawCompositionDiamondDescription",()=>d({de:"Hier können Sie einstellen, ob Kompositionsbeziehungen mit einer Raute dargestellt werden sollen oder nur als einfache Linien.",en:"Here you can set whether composition relationships should be displayed with a diamond or as simple lines.",fr:"Ici, vous pouvez définir si les relations de composition doivent être affichées avec un losange ou sous forme de lignes simples."})),r(k,"CompositionDiamondYes",()=>d({de:"Ja, als Raute darstellen",en:"Yes, display with diamond",fr:"Oui, afficher avec un losange"})),r(k,"CompositionDiamondNo",()=>d({de:"Nein, nur einfache Linien",en:"No, display as simple lines",fr:"Non, afficher sous forme de lignes simples"}));const iv="data:image/png;base64,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",nv="data:image/png;base64,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",rv="data:image/png;base64,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",sv="data:image/png;base64,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",av="data:image/png;base64,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",ov=""+new URL("assets/explorer-B4AQnIGl.png",import.meta.url).href,lv="data:image/png;base64,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",dv="data:image/png;base64,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",hv="data:image/png;base64,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";var pg=[{settingType:"group",name:k.EditorSettingsName,description:k.EditorSettingsDescription,settings:[{settingType:"group",name:k.HoverVerbosityName,description:k.HoverVerbosityDescription,settings:[{key:"editor.hoverVerbosity.showHelpOnKeywordsAndOperators",settingType:"setting",name:k.ShowHelpOnKeywordsAndOperators,description:void 0,type:"boolean",image:iv},{key:"editor.hoverVerbosity.showMethodDeclaration",settingType:"setting",name:k.ShowMethodDeclaration,description:void 0,type:"enumeration",optionValues:["none","declarations","declarationsAndComments"],optionTexts:[k.None,k.Declarations,k.DeclarationsAndComments],image:nv},{key:"editor.hoverVerbosity.showClassDeclaration",settingType:"setting",name:k.ShowClassDeclaration,description:void 0,type:"enumeration",optionValues:["none","declarations","declarationsAndComments"],optionTexts:[k.None,k.Declarations,k.DeclarationsAndComments],image:rv}]},{settingType:"group",name:k.ContextSensitiveHelpName,description:k.ContextSensitiveHelpDescription,settings:[{key:"editor.contextSensitiveHelp.StructureStatements",settingType:"setting",name:k.ShowStructureStatementHelp,description:void 0,type:"enumeration",optionValues:["false","true"],optionTexts:[k.OptionFalse,k.OptionTrue],image:dv},{key:"editor.contextSensitiveHelp.ParameterHints",settingType:"setting",name:k.ContextSensitiveHelpParameterHintsName,description:k.ContextSensitiveHelpParameterHintsDescription,type:"enumeration",optionValues:["false","true"],optionTexts:[k.OptionFalse,k.OptionTrue],image:lv,action:(p,t)=>{p.getMainEditor().updateOptions({parameterHints:{enabled:t==="true",cycle:!0}})}}]},{settingType:"group",name:k.TypingAssistanceName,description:k.TypingAssistanceDescription,settings:[{key:"editor.autoClosingBrackets",settingType:"setting",name:k.AutoClosingBracketsName,description:k.AutoClosingBracketsDescription,type:"enumeration",optionValues:["always","beforeWhitespace","never"],optionTexts:[k.AutoClosingBracketsAlways,k.AutoClosingBracketsBeforeWhitespace,k.AutoClosingBracketsNever],action:(p,t)=>{p.getMainEditor().updateOptions({autoClosingBrackets:t})}},{key:"editor.autoClosingQuotes",settingType:"setting",name:k.AutoClosingQuotesName,description:k.AutoClosingQuotesDescription,type:"enumeration",optionValues:["always","beforeWhitespace","never"],optionTexts:[k.AutoClosingBracketsAlways,k.AutoClosingBracketsBeforeWhitespace,k.AutoClosingBracketsNever],action:(p,t)=>{p.getMainEditor().updateOptions({autoClosingQuotes:t})}},{key:"editor.autoSemicolons",settingType:"setting",name:k.AutoSemicolonsName,description:k.AutoSemicolonsDescription,type:"boolean",optionTexts:[k.On,k.Off]}]},{settingType:"group",name:k.EditorFormatterSettings,description:k.EditorFormatterSettingsDescription,settings:[{key:"formatter.forceSpacesAfterIfForWhileDo",settingType:"setting",name:k.ForceSpacesAfterIfForWhileDoName,description:k.ForceSpacesAfterIfForWhileDoDescription,type:"enumeration",optionValues:["0","1","no"],optionTexts:[k.zero,k.one,k.no],action:(p,t)=>{p.editor.editor.getAction("editor.action.formatDocument").run()}}]},{settingType:"group",name:k.EditorViewSettings,description:k.EditorViewSettingsDescription,settings:[{key:"editor.bracketPairLines",settingType:"setting",name:k.BracketPairLines,description:k.BracketPairLinesDescription,type:"enumeration",optionValues:["off","vertical","verticalAndUnderlined"],optionTexts:[k.BracketPairLinesOff,k.BracketPairLinesVertical,k.BracketPairLinesVerticalAndUnderlined],action:(p,t)=>{p.getMainEditor().updateOptions({guides:{bracketPairs:t!=="off",highlightActiveBracketPair:t!=="off",bracketPairsHorizontal:t==="verticalAndUnderlined"}})},image:sv},{key:"editor.stickyScroll",settingType:"setting",name:k.StickyScroll,description:k.StickyScrollDescription,type:"enumeration",optionValues:["off","on"],optionTexts:[k.Off,k.On],action:(p,t)=>{p.getMainEditor().updateOptions({stickyScroll:{enabled:t!=="off"}})}}]},{settingType:"group",name:k.EditorQuickFixSettingsName,description:k.EditorQuickFixSettingsDescription,settings:[{key:"editor.quickFix.getterAndSetter",settingType:"setting",name:k.EditorQuickFixGetterSetterName,description:k.EditorQuickFixGetterSetterDescription,type:"enumeration",optionValues:["offer","dontOffer"],optionTexts:[k.offer,k.dontOffer],action:(p,t)=>{p.getCompiler().forceRecompilation()}},{key:"editor.quickFix.generateConstructor",settingType:"setting",name:k.EditorQuickFixGenerateConstructorName,description:k.EditorQuickFixGenerateConstructorDescription,type:"enumeration",optionValues:["offer","dontOffer"],optionTexts:[k.offer,k.dontOffer]}]}]},{settingType:"group",name:k.ClassDiagramSettingsName,description:k.ClassDiagramSettingsDescription,image:av,settings:[{key:"classDiagram.typeConvention",settingType:"setting",name:k.ClassDiagramTypeConventionName,description:k.ClassDiagramTypeConventionDescription,type:"enumeration",optionValues:["java","pascal"],optionTexts:[k.ClassDiagramTypeConventionJava,k.ClassDiagramTypeConventionPascal],action:(p,t)=>{p.drawClassDiagrams(!1)}},{key:"classDiagram.background",settingType:"setting",name:k.ClassDiagramBackground,description:k.ClassDiagramBackgroundDescription,type:"enumeration",optionValues:["transparent","white"],optionTexts:[k.ClassDiagramBackgroundTransparent,k.ClassDiagramBackgroundWhite]},{key:"classDiagram.omitVoidReturnType",settingType:"setting",name:k.classDiagramOmitVoidReturnType,description:k.ClassDiagramOmitVoidReturnTypeDescription,type:"enumeration",optionValues:["show","omit"],optionTexts:[k.show,k.omit],action:(p,t)=>{p.drawClassDiagrams(!1)}},{key:"classDiagram.drawCompositionDiamond",settingType:"setting",name:k.ClassDiagramDrawCompositionDiamond,description:k.ClassDiagramDrawCompositionDiamondDescription,type:"enumeration",optionValues:["yes","no"],optionTexts:[k.CompositionDiamondYes,k.CompositionDiamondNo],action:(p,t)=>{p.drawClassDiagrams(!1)}}]},{settingType:"group",name:k.ExplorerSettingsName,description:k.ExplorerSettingsDescription,image:ov,settings:[{key:"explorer.fileOrder",settingType:"setting",name:k.ExplorerFileOrderName,description:k.ExplorerFileOrderDescription,type:"enumeration",optionValues:["comparator","user-defined"],optionTexts:[k.ExplorerOrderComparator,k.ExplorerOrderUserDefined],action:(p,t)=>{let e=p.projectExplorer.fileTreeview;e.config.orderBy=t,e.sort()}},{key:"explorer.workspaceOrder",settingType:"setting",name:k.ExplorerWorkspaceOrderName,description:k.ExplorerWorkspaceOrderDescription,type:"enumeration",optionValues:["comparator","user-defined"],optionTexts:[k.ExplorerOrderComparator,k.ExplorerOrderUserDefined],action:(p,t)=>{let e=p.projectExplorer.workspaceTreeview;e.config.orderBy=t,e.sort()}}]},{settingType:"group",name:k.CompilerSettingsName,description:k.CompilerSettingsDescription,settings:[{key:"compiler.shadowedSymbolErrorLevel",settingType:"setting",name:k.CompilerShadowedSymbolErrorLevelName,description:k.CompilerShadowedSymbolErrorLevelDescription,type:"enumeration",optionValues:["ignore","info","warning","error"],optionTexts:[k.ErrorLevelIgnore,k.ErrorLevelInfo,k.ErrorLevelWarning,k.ErrorLevelError],action:(p,t)=>{p.getCompiler().forceRecompilation()},image:hv}]}];class cv{constructor(t){r(this,"userSettings");r(this,"ownClassSettings");r(this,"classSettings");r(this,"schoolSettings");r(this,"currentScope","user");r(this,"currentSettingsGroup",null);r(this,"currentSettings",null);r(this,"currentClassId",null);r(this,"$settingsLeftMenuDiv");r(this,"$settingsMainDiv");r(this,"settingsExplorer");this.main=t,this.userSettings=t.settings.values.user||{},this.ownClassSettings=t.settings.values.class,this.schoolSettings=t.settings.values.school}async open(){await this.getSettingsFromServer();let t=new go;t.initAndOpen(),this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{t.close()}),t.heading(k.SettingsHeading());let e=y("
");t.addDiv(e);let i=y('
');t.addDiv(i),this.$settingsLeftMenuDiv=y('
'),i.append(this.$settingsLeftMenuDiv),this.$settingsMainDiv=y('
'),i.append(this.$settingsMainDiv);let n=new ym(e[0],!0),s=new wn(k.UserSettingsTabHeading(),[]);if(s.onShow=()=>{this.showSettingsData("user")},n.addTab(s),n.setActive(s),this.main.user.is_teacher&&this.classSettings&&this.classSettings.length>0){let a=new wn(k.ClassSettingsTabHeading(),[]);a.onShow=()=>{this.showSettingsData("class")},n.addTab(a);let l=y('');a.headingDiv.append(l[0]),so(l,this.classSettings.map(h=>({value:h.classId,object:h,caption:h.className})).sort((h,c)=>h.caption.localeCompare(c.caption))),this.currentClassId=this.classSettings[0].classId,l.on("change",()=>{let h=ao(l);this.currentClassId=h.classId,this.currentScope=="class"&&this.showSettingsData()})}if(this.main.user.is_schooladmin&&this.schoolSettings){let a=new wn(k.SchoolSettingsTabHeading(),[]);a.onShow=()=>{this.showSettingsData("school")},n.addTab(a)}t.buttons([{caption:k.CloseButton(),color:"green",callback:()=>{window.history.back()}}]),this.initSettingsExplorer()}async getSettingsFromServer(){let t=await et("/servlet/getSettings",{});t.success&&(this.classSettings=t.classSettings,this.schoolSettings=t.schoolSettings)}showSettingsData(t){if(t&&(this.currentScope=t),this.$settingsMainDiv.empty(),!!this.currentSettingsGroup){if(this.currentSettingsGroup.image){let e=y(``);this.$settingsMainDiv.append(e)}this.$settingsMainDiv.append(y(`
${this.currentSettingsGroup.name()}
`)),this.currentSettingsGroup.description&&this.$settingsMainDiv.append(y(`
${this.currentSettingsGroup.description()}
`));for(let e of this.currentSettingsGroup.settings.filter(i=>i.settingType=="setting")){let i=y('
');this.$settingsMainDiv.append(i),this.renderSetting(e,i)}}}renderSetting(t,e){if(t.image){e.append(y('
'));let l=y(``);e.append(l)}e.append(y(`
${t.name()}
`)),t.description&&e.append(y(`
${t.description()}
`));let i=t.key,n=this.getCurrentSettingValues()[i],s=this.getDefaultSettingValue(i,!(this.main.user.is_teacher||this.main.user.is_schooladmin)),a=s.isForced;switch(t.type){case"boolean":let l=[k.OptionTrue(),k.OptionFalse()];t.optionTexts&&(l=t.optionTexts.map(f=>f())),l.push(k.OptionDefault()+": "+(s?l[0]:l[1]));let h=[!0,!1,void 0];this.appendSelectElement(e,l,h,n,async(f,b)=>{await this.storeAndSave(t,t.key,f,b)},a);break;case"string":this.appendInputElement(e,n,s.value,async(f,b)=>{await this.storeAndSave(t,t.key,f,b)},a);break;case"enumeration":let c=t.optionTexts.map(f=>f()),u=t.optionValues.indexOf(s.value);u==-1&&(u=0),c.push(k.OptionDefault()+": "+c[u]);let g=t.optionValues.slice();g.push(void 0),this.appendSelectElement(e,c,g,n,async(f,b)=>{await this.storeAndSave(t,t.key,f,b)},a);break}if(t.image&&e.append(y('
')),a){let l=y(`
${k.SettingDisabledByHigherPrecedence()}
`);e.append(l)}}async storeAndSave(t,e,i,n){if(this.getCurrentSettingValues()[e]!==i){this.getCurrentSettingValues()[e]=i,t.action&&t.action(this.main,i);let a={userId:this.currentScope=="user"?this.main.user.id:void 0,klasseId:this.currentScope=="class"?this.currentClassId:void 0,schuleId:this.currentScope=="school"?this.main.user.schule_id:void 0,settings:this.getCurrentSettingValues()};n.text(k.Saving()+"..."),n.css("color","var(--loginMessageColor)"),n.show(),await et("/servlet/updateSettings",a),n.text(`-> ${k.Saved()} ✓`),n.css("color","var(--loginButtonBackground)")}}wrapWithSavingMessageAndAppendToParent(t,e){let i=y("
");i.append(t);let n=y("
");return i.append(n),n.hide(),e.append(i),t.on("click",()=>{n.text("")}),n}appendInputElement(t,e,i,n,s=!1){let l=y(``);typeof e<"u"&&l.val(e);let h=this.wrapWithSavingMessageAndAppendToParent(l,t);l.on("focusout",async()=>{let c=l.val();c==""&&(c=void 0),await n(c,h)}),l.on("change",()=>{h.hide()})}appendSelectElement(t,e,i,n,s,a=!1){let h=y(``),c=this.wrapWithSavingMessageAndAppendToParent(h,t),u=[];for(let f=0;ff.object===n);h[0].selectedIndex=g,h.on("change",async()=>{await s(ao(h),c)})}getDefaultSettingValue(t,e){let i,n=Jp[t]||"userClassSchoolDefault",s=!1;return this.currentScope=="user"&&this.ownClassSettings&&(i=this.ownClassSettings[t],typeof i<"u"&&n==="classSchoolUserDefault"&&(s=!0)),typeof i>"u"&&(i=this.schoolSettings[t],typeof i<"u"&&n==="classSchoolUserDefault"&&(s=!0)),typeof i>"u"&&(i=this.main.settings.values.default[t]),{value:i,isForced:s&&e}}getCurrentSettingValues(){var t;switch(this.currentScope){case"user":return this.userSettings;case"class":return this.main.user.is_schooladmin||this.main.user.is_admin||this.main.user.is_teacher?((t=this.classSettings.find(e=>e.classId==this.currentClassId))==null?void 0:t.settings)||{}:this.ownClassSettings;case"school":return this.schoolSettings}return{}}initSettingsExplorer(){this.settingsExplorer=new Zt(this.$settingsLeftMenuDiv[0],{withSelection:!0,selectMultiple:!1,captionLine:{enabled:!1},buttonAddElements:!1,buttonAddFolders:!1,withFolders:!0,withDeleteButtons:!1,isDragAndDropSource:!1,orderBy:"comparator"});for(let t of pg.filter(e=>e.settingType==="group"))this.addSettingsToExplorer(t);this.settingsExplorer.nodeClickedCallback=t=>{this.currentSettingsGroup=t,this.showSettingsData()}}addSettingsToExplorer(t,e=null){this.settingsExplorer.addNode(t.settings.find(i=>i.settingType==="group")!=null,t.name(),void 0,t,e),t.settings.filter(i=>i.settingType==="group").forEach(i=>{this.addSettingsToExplorer(i,t)})}}class Je{}r(Je,"importRepository",()=>d({de:"Repository importieren",en:"Import repository"})),r(Je,"importRepositoryDescription",()=>d({de:"1. Wählen Sie eine Datei aus, die das exportierte Repository enthält, das Sie importieren möchten, oder ziehen Sie sie in das gestrichelte Rechteck.",en:"1. Select a file that contains the exported repository you want to import or drag them into the dashed rectangle."})),r(Je,"renameDescription",()=>d({de:"2. Optional: Geben Sie einen neuen Namen für das Repository ein. Wenn Sie keinen Namen angeben, wird der Name aus der Exportdatei verwendet.",en:"2. Optional: Enter a new name for the repository. If you do not provide a name, the name from the export file will be used."})),r(Je,"filesSelected",()=>d({de:"Dateien ausgewählt",en:"files selected"})),r(Je,"newName",()=>d({de:"Neuer Name",en:"New name"})),r(Je,"import",()=>d({de:"Importieren",en:"Import"})),r(Je,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(Je,"noFilesSelected",()=>d({de:"Es wurden keine Dateien ausgewählt. Bitte wählen Sie eine Datei aus.",en:"No files selected. Please select a file."})),r(Je,"wrongFileFormat",t=>d({de:`Die Datei "${t}" ist keine gültige Exportdatei für ein Repository. Bitte wählen Sie eine gültige Datei aus.`,en:`The file "${t}" is not a valid export file for a repository. Please select a valid file.`})),r(Je,"importSuccessfully",t=>d({de:`Das Repository aus der Datei "${t}" wurde erfolgreich importiert.`,en:`The repository from the file "${t}" has been successfully imported.`})),r(Je,"exportTipp",()=>d({de:'Tipp: Sie können ein Repository als Datei exportieren, indem Sie in der Workspace-Liste auf einen Workspace rechtsklicken, der mit dem Repository verbunden ist, und dann "Repository als Datei Exportieren" auswählen.',en:'Hint: To export a repository as a file right-click on a workspace in the workspace list that is connected to the repository and select "Export repository as file".'}));class uv{static async exportRepository(t,e){let n=await et("/servlet/getRepository",{repository_id:t,workspace_id:e});if(!n.success)return;let s=n.repository,a;if(s.spritesheet_id)try{let l=new ws;await l.load(s.spritesheet_id),l.zipFile!=null&&(a=mg(l.zipFile))}catch{console.log("Fehler beim Laden des Spritesheets.")}return{name:s.name,files:s.files,history:s.history,description:s.description,spritesheetBase64:a}}}class mv{constructor(t){this.main=t}async importRepository(t){if(t.spritesheetBase64){let e=Am(t.spritesheetBase64);try{let i=await $l.uploadSpritesheet(e,null,!1);t.spritesheet_id=i,t.spritesheetBase64=void 0}catch{}}await et("/servlet/importRepository",t)}}const pv=""+new URL("assets/lightbulb-CnOCH59Y.png",import.meta.url).href;class gv{constructor(t){r(this,"dialog");r(this,"files");r(this,"$newNameInput");this.main=t,this.dialog=new go}show(){this.dialog.initAndOpen(),this.dialog.heading(Je.importRepository()),this.dialog.description(Je.importRepositoryDescription());let t=y('');this.dialog.addDiv(t),t.on("change",n=>{this.files=n.originalEvent.target.files});let e=y(`
${lt.dragFilesHere()}
`);this.dialog.addDiv(e);let i=y('
');e.append(i),this.dialog.description("").text(Je.renameDescription()),this.$newNameInput=this.dialog.input("text",Je.newName()),e.on("dragover",n=>{n.stopPropagation(),n.preventDefault(),n.originalEvent.dataTransfer.dropEffect="copy"}),e.on("drop",n=>{n.stopPropagation(),n.preventDefault(),this.files=n.originalEvent.dataTransfer.files,i.text(this.files.length+" "+Je.filesSelected())}),this.dialog.buttons([{caption:Je.import(),color:"#18a000ff",callback:()=>{this.importFiles()}},{caption:Je.cancel(),color:"#caaf17ff",callback:()=>{this.dialog.close()}}]),this.dialog.addDiv(y('
')),this.dialog.addDiv(y("")),this.dialog.description(``+Je.exportTipp())}async importFiles(){if(!this.files||this.files.length===0){alert(Je.noFilesSelected());return}let t=this.files[0];var e=new FileReader;e.onload=async i=>{var h,c;let n=i.target.result;if(!n.startsWith("{")){alert(Je.wrongFileFormat(t.name));return}let s;try{s=JSON.parse(n)}catch{alert(Je.wrongFileFormat(t.name));return}let a=(c=(h=this.$newNameInput.val())==null?void 0:h.toString())==null?void 0:c.trim();a&&a.length>0&&(s.name=a);var l=new mv(this.main);await l.importRepository(s),alert(Je.importSuccessfully(t.name)),this.dialog.close()},e.readAsText(t)}}class fv{constructor(t){r(this,"currentSubmenu",{});r(this,"openSubmenusOnMousemove",!1);this.main=t}initGUI(t,e){let i=this,n=this.main.getMainEditor(),s={items:[{identifier:T.File(),subMenu:{items:[{identifier:T.ImportWorkspace(),action:()=>{new ev(this.main).show()}},{identifier:T.ExportCurrentWorkspace(),action:async()=>{var u;let a=this.main.currentWorkspace;a==null&&alert(T.NoWorkspaceSelected());let l=a.name.replace(/\//g,"_"),h=(u=this.main.pruefungManagerForStudents)==null?void 0:u.pruefung,c=this.main.user;h!=null&&(l=h.name.replace(/\//g,"_")+" ("+c.familienname+" "+c.rufname+"; "+c.username+")"),Or(await Lr.exportWorkspace(a),l+".json")}},{identifier:T.ExportAllWorkspaces(),action:async()=>{let a="all_workspaces";this.main.user;let l=await Lr.exportAllWorkspaces(this.main);Or(l,a+".json")}}]}},{identifier:T.Edit(),subMenu:{items:[{identifier:T.Undo(),action:()=>{n.trigger(".","undo",{})}},{identifier:T.Redo(),action:()=>{n.trigger(".","redo",{})}},{identifier:"-"},{identifier:T.Copy(),action:()=>{n.getAction("editor.action.clipboardCopyAction").run()}},{identifier:T.Cut(),action:()=>{n.getAction("editor.action.clipboardCutAction").run()}},{identifier:T.CopyToTop(),action:()=>{n.getAction("editor.action.copyLinesUpAction").run()}},{identifier:T.CopyToBottom(),action:()=>{n.getAction("editor.action.copyLinesDownAction").run()}},{identifier:T.MoveToTop(),action:()=>{n.getAction("editor.action.moveLinesUpAction").run()}},{identifier:T.MoveToBottom(),action:()=>{n.getAction("editor.action.moveLinesDownAction").run()}},{identifier:"-"},{identifier:T.Find(),action:()=>{n.getAction("actions.find").run()}},{identifier:T.Replace(),action:()=>{n.getAction("editor.action.startFindReplaceAction").run()}},{identifier:"-"},{identifier:T.ToggleComment(),action:()=>{n.getAction("editor.action.commentLine").run()}},{identifier:T.AutoFormat(),action:()=>{n.getAction("editor.action.formatDocument").run()}},{identifier:"-"},{identifier:T.FindCorrespondingBracket(),action:()=>{n.getAction("editor.action.jumpToBracket").run()}},{identifier:"-"},{identifier:T.FoldAll(),action:()=>{n.getAction("editor.foldAll").run()}},{identifier:T.UnfoldAll(),action:()=>{n.getAction("editor.unfoldAll").run()}},{identifier:"-"},{identifier:T.TriggerSuggest(),action:()=>{n.focus(),setTimeout(()=>{n.getAction("editor.action.triggerSuggest").run()},200)}},{identifier:T.TriggerParameterHint(),action:()=>{n.getAction("editor.action.triggerParameterHints").run()}},{identifier:T.GoToDefinition(),action:()=>{n.focus(),setTimeout(()=>{n.getAction("editor.action.revealDefinition").run()},200)}}]}},{identifier:T.View(),subMenu:{items:[{identifier:T.Theme(),subMenu:{items:[{identifier:T.Dark(),action:()=>{i.switchTheme("dark")}},{identifier:T.Light(),action:()=>{i.switchTheme("light")}}]}},{identifier:"-"},{identifier:T.HighContrastOnOff(),action:()=>{n.getAction("editor.action.toggleHighContrast").run()}},{identifier:"-"},{identifier:T.LinebreakOnOff(),action:()=>{let a=this.main.editor.editor.getOption(H.EditorOption.wordWrap);a=a=="on"?"off":"on",this.main.editor.editor.updateOptions({wordWrap:a})}},{identifier:T.SetDefaultFontSize(),action:()=>{this.main.editor.setFontSize(14)}}]}},{identifier:T.Repository(),subMenu:{items:[{identifier:T.ConfigureOwnRepositories(),action:()=>{this.main.repositoryUpdateManager.show(null)}},{identifier:T.Checkout(),action:()=>{this.main.repositoryCheckoutManager.show(null)}},{identifier:T.importRepository(),action:()=>{new gv(this.main).show()}}]}},{identifier:T.Sprites(),subMenu:{items:[{identifier:T.AddOwnSprites(),action:()=>{this.main.spriteManager.show()}},{identifier:"-"},{identifier:T.SpriteCatalogue(),link:e+"spriteLibrary.html?csrfToken="+Ue+"&lang="+(t.gui_state.language??"de")}]}},{identifier:T.Help(),subMenu:{items:[{identifier:T.VideoTutorials(),link:"https://www.learnj.de/doku.php?id=api:ide_manual:start"},{identifier:T.JavaTutorial(),link:"https://www.learnj.de/doku.php"},{identifier:"-"},{identifier:T.APIDoc(),link:"https://www.learnj.de/doku.php?id=api:documentation:start"},{identifier:T.APIReference(),link:e+"api_documentation.html?csrfToken="+Ue+"&lang="+(t.gui_state.language??"de")},{identifier:"-"},{identifier:T.Shortcuts(),link:e+"shortcuts.html?csrfToken="+Ue+"&lang="+(t.gui_state.language??"de")},{identifier:"-"},{identifier:T.Changelog(),link:"https://www.learnj.de/doku.php?id=javaonline:changelog"},{identifier:T.Roadmap(),link:"https://www.learnj.de/doku.php?id=javaonline:roadmap"},{identifier:"-"},{identifier:T.EditorCommandPalette(),action:()=>{setTimeout(()=>{i.main.getMainEditor().focus(),n.getAction("editor.action.quickCommand").run()},500)}},{identifier:"-"},{identifier:T.ChangePassword(),action:()=>{new ug(i.main).show()}},{identifier:"-"},{identifier:T.BugReport(),action:()=>{new tv(this.main).show()}},{identifier:"-"},{identifier:T.About(),link:"https://www.learnj.de/doku.php?id=javaonline:ueber"},{identifier:T.Imprint(),link:"https://www.learnj.de/doku.php?id=ide:impressum"},{identifier:T.PrivacyPolicy(),link:"https://www.learnj.de/doku.php?id=ide:datenschutzerklaerung"},{identifier:"
"+T.Version()+" 2.2.1 (24.4.2026, 22:38 Uhr)
",noHoverAnimation:!0}]}}]};t!=null&&(t.is_admin||t.is_schooladmin||t.is_teacher)&&s.items[0].subMenu.items.push({identifier:T.ClassesUserTests(),link:e+"administration_mc.html?csrfToken="+Ue+"&lang="+(t.gui_state.language??"de")}),t!=null&&t.is_admin&&s.items[0].subMenu.items.push({identifier:T.ServerStatistics(),link:e+"statistics.html?csrfToken="+Ue+"&lang="+(t.gui_state.language??"de")},{identifier:T.ShutdownServer(),action:()=>{confirm(T.ReallyShutdownServer())&&Re("shutdown",{},()=>{alert(T.ServerShutdownDone())},a=>{alert(a)})}}),s.items[0].subMenu.items.push({identifier:T.Settings(),action:()=>{new cv(i.main).open()}},{identifier:T.SaveAndExit(),action:()=>{y("#buttonLogout").trigger("click")}}),y("#mainmenu").empty(),this.initMenu(s,0)}switchTheme(t){this.main.viewModeController.setTheme(t)}initMenu(t,e){t.level=e,e==0?t.$element=y("#mainmenu"):(t.$element=y('
'),y("body").append(t.$element)),t.$element.data("model",t);for(let n of t.items){if(n.identifier=="-")n.$element=y('
');else{let s=n.noHoverAnimation?' class="jo_menuitem_nohover"':"";if(n.$element=y(`${n.identifier}`),n.link!=null){let a=y('');a.attr("style","color: var(--fontColorNormal) !important"),a.on("pointerdown",l=>{l.stopPropagation()}),a.on("pointerup",l=>{l.stopPropagation(),setTimeout(()=>{t.$element.hide()},500)}),a.append(n.$element),n.$element=a}n.subMenu!=null&&this.initMenu(n.subMenu,e+1),this.initMenuitemCallbacks(t,n),e==0&&n.$element.addClass("jo_mainmenuitem")}t.$element.append(n.$element),n.$element.data("model",n)}let i=this;y(document).on("pointerdown",()=>{for(let n=0;n<5;n++)i.currentSubmenu[n]!=null&&(i.currentSubmenu[n].hide(),i.currentSubmenu[n]=null);i.openSubmenusOnMousemove=!1})}initMenuitemCallbacks(t,e){let i=this;e.action!=null&&(e.$element.on("pointerdown",n=>{n.stopPropagation()}),e.$element.on("pointerup",n=>{n.stopPropagation(),e.action(e.identifier);for(let s=0;s<5;s++)i.currentSubmenu[s]!=null&&(i.currentSubmenu[s].hide(),i.currentSubmenu[s]=null);i.openSubmenusOnMousemove=!1})),e.subMenu!=null?(e.$element.on("pointerdown",n=>{i.opensubmenu(e),i.openSubmenusOnMousemove=!0,n.stopPropagation()}),e.$element.on("mousemove.mainmenu",()=>{i.openSubmenusOnMousemove?i.opensubmenu(e):i.currentSubmenu[t.level+1]!=null&&(i.currentSubmenu[t.level+1].hide(),i.currentSubmenu[t.level+1]=null)})):e.$element.on("mousemove.mainmenu",()=>{i.currentSubmenu[t.level+1]!=null&&(i.currentSubmenu[t.level+1].hide(),i.currentSubmenu[t.level+1]=null)})}opensubmenu(t){let e=t.subMenu,i,n;e.level==1?(i=t.$element.position().left,n=30):(i=t.$element.offset().left+t.$element.width(),n=t.$element.offset().top),e.$element.css({top:""+n+"px",left:""+i+"px"}),this.currentSubmenu[e.level]!=null&&this.currentSubmenu[e.level].hide(),e.$element.show(),this.currentSubmenu[e.level]=e.$element}}class gg{constructor(t,e){r(this,"color","");r(this,"lastSpan","");r(this,"$lastSpan");r(this,"$lastDiv");r(this,"$outputDiv");r(this,"maxLines",2e3);r(this,"$lines",[]);r(this,"newLines",0);r(this,"printCommands",[]);r(this,"currentLinelength",0);r(this,"beginOfLineState",!0);this.$runDiv=t,this.main=e,y(()=>{this.$outputDiv=t.find(".jo_output"),this.clear();let i=this,n=0,s=!1,a=performance.now();setInterval(()=>{i.printCommands.length>0&&(i.flush(),performance.now()-a>200?i.$outputDiv[0].scrollTop=i.$outputDiv[0].scrollHeight:s=!0,a=performance.now()),n++%20==0&&s&&setTimeout(()=>{i.$outputDiv[0].scrollTop=i.$outputDiv[0].scrollHeight,s=!1},200)},50)})}isTestPrintManager(){return!1}showProgramEnd(){let t=this.$runDiv.find(".jo_run-programend");t.show(),t.addClass("jo_programendkf"),setTimeout(()=>{t.removeClass("jo_programendkf"),t.hide()},3e3)}flush(){if(this.newLines>=this.maxLines){this.$outputDiv.empty();let t=this.printCommands.length-1,e=0;for(;t>=0;){if(this.printCommands[t].newLine&&(e++,e>=this.maxLines)){this.printCommands.splice(0,t+1);break}t--}}this.newLines=0,this.$lastSpan!=null&&(this.$lastSpan.remove(),this.lastSpan.endsWith("")&&(this.lastSpan=this.lastSpan.substring(0,this.lastSpan.length-7)));for(let t of this.printCommands)if(this.beginOfLineState&&t.text.startsWith(" ")?t.text.match(/^( *)(.*)$/)[2].length>0&&(this.beginOfLineState=!1):t.text.length>0&&(this.beginOfLineState=!1),t.text=t.text.replace(//g,">"),t.color==null&&(t.color="var(--defaultOutputColor)"),(this.lastSpan==""||this.color!=t.color)&&(this.lastSpan!=""&&(this.lastSpan+=""),this.lastSpan+='',t.newLine&&t.text==""&&(this.lastSpan+="​"),this.color=t.color),this.currentLinelength<=1e4&&(this.lastSpan+=t.text,this.currentLinelength+=t.text.length),t.newLine){this.beginOfLineState=!0,this.lastSpan.endsWith("")||(this.lastSpan+=""),this.$lastSpan=y(this.lastSpan),this.$lastDiv.append(this.$lastSpan),this.lastSpan="",this.$lastSpan=null,this.$lastDiv=y("
");let e=this.main.getInterpreter().inputManager.$input;e!=null?this.$lastDiv.insertBefore(e):this.$outputDiv.append(this.$lastDiv),this.$lines.push(this.$lastDiv),this.currentLinelength=0}if(this.lastSpan!=""&&(this.lastSpan.endsWith("")||(this.lastSpan+=""),this.$lastSpan=y(this.lastSpan),this.$lastDiv.append(this.$lastSpan)),this.$lines.length>this.maxLines*1.5){let t=this,e=t.$lines.length-t.maxLines,i=t.$lines.splice(0,e);for(let n of i)n.remove()}this.printCommands=[]}clear(){this.$outputDiv.empty(),this.$lastDiv=y("
"),this.$lines.push(this.$lastDiv),this.$outputDiv.append(this.$lastDiv),this.currentLinelength=0,this.color="",this.lastSpan="",this.printCommands=[]}print(t,e,i){if(t==null&&(t=""),e&&(t+=` `),t!=""){if(i==null?i="var(--defaultPrintColor)":i=Qi.convertToInt(i),typeof i=="number"){for(i=i.toString(16);i.length<6;)i="0"+i;i="#"+i}if(t=t.toString(),t.indexOf(` `)>=0){let n=t.split(` `);for(let s=0;s'),this.$bar=y('
'),this.$grip=y('
'),this.$display=y('
100 '+Pr.stepsPerSecond()+"
"),this.$grip.append(this.$display),this.$outer.append(this.$bar,this.$grip),t.append(this.$outer)}setInterpreter(t){this.interpreter=t}initGUI(){let t,e,i=this;i.overallWidth=Ql(this.$outer.css("width")),i.gripWidth=Ql(i.$grip.css("width")),i.xMax=i.overallWidth-i.gripWidth;let n=window.PointerEvent?"pointer":"mouse";i.$outer.on(n+"down",s=>{let a=s.pageX-i.$outer.offset().left-4;i.setSpeed(a),i.$grip.css("left",a+"px"),i.$grip.trigger(n+"down",[s.clientX])}),this.$grip.on(n+"down",(s,a)=>{a==null&&(a=s.clientX),t=a,e=i.position,y(".joe_controlPanel_top").css("z-index","1000"),i.$display.show(),y(document).on(n+"move.speedcontrol",l=>{let h=l.clientX-t;i.setSpeed(e+h)}),y(document).on(n+"up.speedcontrol",()=>{y(document).off(n+"up.speedcontrol"),y(document).off(n+"move.speedcontrol"),i.$display.hide(),y(".joe_controlPanel_top").css("z-index","0")}),s.stopPropagation()}),this.setSpeed(this.initialSpeed)}getSpeedInStepsPerSecond(){return this.interpreter.getStepsPerSecond()}setSpeedInStepsPerSecond(t){if(t=="max"&&(t=this.maxSpeed),t>this.intervalBorders[this.intervalBorders.length-1]){this.$grip.css("left",this.xMax+"px");return}t=Math.max(t,1);for(let e=0;e=i&&t<=n){let s=this.xMax/(this.intervalBorders.length-1),a=Math.round(s*e+s*(t-i)/(n-i));this.$grip.css("left",a+"px"),this.position=a;break}}this.setInterpreterSpeed(t)}setSpeed(t){t<0&&(t=0),t>this.xMax&&(t=this.xMax),this.position=t,this.$grip.css("left",t+"px");let e=this.xMax/(this.intervalBorders.length-1),i=Math.floor(t/e);i==this.intervalBorders.length-1&&i--;let n=(t-i*e)/e,s=this.intervalBorders[i],a=this.intervalBorders[i+1],l=s+(a-s)*n;l>=this.intervalBorders[this.intervalBorders.length-1]-10&&(l=1e11),this.setInterpreterSpeed(l)}setInterpreterSpeed(t){let e=!1,i=""+wm.printMillions(t);t>=this.intervalBorders[this.intervalBorders.length-1]-10-10&&(i=Pr.maximumSpeed(),e=!0),this.$display.html(i+(e?"":" "+Pr.stepsPerSecond())),this.interpreter.setStepsPerSecondPerSpeedControl(t,e),this.interpreter.hideProgrampointerPosition()}static printMillions(t){return t<1e6?""+Math.trunc(t):(t=Math.trunc(t/1e3)*1e3/1e6,t+" "+Pr.millions())}}class fg{constructor(t,e,i){r(this,"speedControl");r(this,"buttonData",[{actionIdentifier:"interpreter.start",title:T.ProgramRun(),iconClass:"img_start-dark jo_button"},{actionIdentifier:"interpreter.pause",title:T.ProgramPause(),iconClass:"img_pause-dark jo_button"},{actionIdentifier:"interpreter.stop",title:T.ProgramStop(),iconClass:"img_stop-dark jo_button"},{actionIdentifier:"interpreter.stepOver",title:T.ProgramStepOver(),iconClass:"img_step-over-dark jo_button"},{actionIdentifier:"interpreter.stepInto",title:T.ProgramStepInto(),iconClass:"img_step-into-dark jo_button"},{actionIdentifier:"interpreter.stepOut",title:T.ProgramStepOut(),iconClass:"img_step-out-dark jo_button"},{actionIdentifier:"interpreter.gotoCursor",title:T.ProgramGotoCursor(),iconClass:"img_goto-cursor-dark jo_button"},{actionIdentifier:"interpreter.restart",title:T.ProgramRestart(),iconClass:"img_restart-dark jo_button"},{actionIdentifier:"interpreter.startTests",title:T.ProgramExecuteAllTests(),iconClass:"img_test-start jo_button jo_start-test-button"}]);for(let n of this.buttonData){let s=y(`
`);n.$button=s,t.append(s),i.registerButton(n.actionIdentifier,s),n.actionIdentifier=="interpreter.pause"&&s.hide()}this.speedControl=new wm(t,e),this.speedControl.initGUI()}getButton(t){var e;return(e=this.buttonData.find(i=>i.actionIdentifier==t))==null?void 0:e.$button}}class bv{constructor(t,e,i){r(this,"$dialog");r(this,"$dialogMain");r(this,"studentCount",0);this.classes=t,this.workspace=e,this.main=i,this.init()}init(){this.$dialog=y("#dialog"),y("#main").css("display","none"),this.$dialog.append(y(`
${di.distributeWorkspaceToIndividualStudents()}
${di.workspace()}:
${this.workspace.name}
${di.filterList()}:
${di.selectMultiple()}
`));let t=y(".jo_ds_student_list"),e=this,i=[];for(let a of this.classes)for(let l of a.students)i.push(l),l.klass=a;i.sort((a,l)=>a.klasse_id!=l.klasse_id?a.klasse_id-l.klasse_id:a.familienname!=l.familienname?a.familienname.localeCompare(l.familienname):a.rufname.localeCompare(l.rufname));let n=0,s=[];for(let a of i){let l=y('
'),h=y(`
${a.klass.name}
`),c=y(`
${a.rufname} ${a.familienname}
`);l.append(h,c),t.append(l),s.push(l),l.on("mousedown",u=>{let g=s.indexOf(l);if(u.ctrlKey||u.metaKey)l.toggleClass("jo_active"),n=g;else if(s.forEach(f=>f.removeClass("jo_active")),l.addClass("jo_active"),u.shiftKey){let f=Math.min(n,g),b=Math.max(n,g);for(let A=f;A<=b;A++)s[A].is(":visible")&&s[A].addClass("jo_active")}else n=g;e.studentCount=s.reduce((f,b)=>f+(b.hasClass("jo_active")?1:0),0),console.log(e.studentCount),y(".jo_ds_selected_message").text(`${e.studentCount} ${di.studentsSelected()}`)}),l.data("student",a),l.data("klass",a.klass)}y(".jo_ds_filterdiv>input").on("input",()=>{let a=y(".jo_ds_filterdiv>input").val();if(a==null||a=="")y(".jo_ds_student_line").show();else{let l=a.toLocaleLowerCase();y(".jo_ds_student_line").each((h,c)=>{let u=y(c),g=u.data("klass"),f=u.data("student");(g.name+" "+f.rufname+" "+f.familienname).toLocaleLowerCase().indexOf(l)>=0?u.show():u.hide()})}}),this.$dialogMain=this.$dialog.find(".dialog-main"),this.$dialog.css("visibility","visible"),y("#jo_ds_cancel_button").on("click",()=>{window.history.back()}),y("#jo_ds_distribute_button").on("click",()=>{e.distributeWorkspace()}),this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{e.close()}),y(".jo_ds_filterdiv>input")[0].focus()}distributeWorkspace(){let t=[];y(".jo_ds_student_line").each((e,i)=>{let n=y(i);if(n.hasClass("jo_active")){let s=n.data("student");t.push(s.id)}}),window.history.back(),this.main.networkManager.sendDistributeWorkspace(this.workspace,null,t,e=>{if(e==null){let n=this.main.networkManager.updateFrequencyInSeconds;alert(di.workspaceDistributed(this.workspace.name,t.length+"",n+""))}else alert(e)})}close(){this.$dialog.css("visibility","hidden"),this.$dialog.empty(),y("#main").css("display","")}}class yv{constructor(t,e){r(this,"libraries",vm.libraries);this.workspace=t,this.main=e}open(){let t=new go;t.initAndOpen(),t.heading(us.workspaceSettings(this.workspace.name)),t.subHeading(us.usedLibraries());let e=this.workspace.settings.libraries;for(let i of this.libraries){let n=t.addCheckbox(i.identifier+" ("+i.description+")",e.indexOf(i.id)>=0,i.id);i.checkboxState=n}t.buttons([{caption:us.cancel(),color:"#a00000",callback:()=>{t.close()}},{caption:us.OK(),color:"green",callback:()=>{let i=!1,n=[];for(let s of this.libraries){let a=s.checkboxState();i=i||a!=e.indexOf(s.id)>=0,a&&n.push(s.id)}i&&(this.workspace.settings.libraries=n,this.workspace.saved=!1,this.workspace.getFiles().forEach(s=>this.main.getCompiler().setFileDirty(s)),this.main.getCompiler().triggerCompile(),this.workspace.setLibraries(this.main.getCompiler()),this.main.networkManager.sendUpdatesAsync(!0)),t.close()}}])}}class vv{constructor(t,e){r(this,"accordion");r(this,"fileTreeview");r(this,"workspaceTreeview");r(this,"synchronizedButton");r(this,"lastOpenFile",null);this.main=t,this.$projectexplorerDiv=e}initGUI(){this.accordion=new sm(this.$projectexplorerDiv[0]),this.initFilelistPanel(),this.initWorkspacelistPanel(),this.main.user.is_teacher||this.accordion.onResize(!0),this.workspaceTreeview.addDragDropSource({treeview:this.workspaceTreeview,dropInsertKind:"asElement",defaultDragKind:"move"}),this.workspaceTreeview.addDragDropSource({treeview:this.fileTreeview,dropInsertKind:"intoElement",defaultDragKind:"copy",dragKindWithShift:"move"}),this.fileTreeview.addDragDropSource({treeview:this.fileTreeview,dropInsertKind:"asElement",defaultDragKind:"move"})}initFilelistPanel(){this.fileTreeview=new Zt(this.accordion,{captionLine:{enabled:!0},withSelection:!0,selectMultiple:!0,selectWholeFolders:!0,withFolders:!0,isDragAndDropSource:!0,buttonAddElements:!0,buttonAddFolders:!0,withDeleteButtons:!0,confirmDelete:!0,defaultIconClass:"img_file-dark-java",buttonAddElementsCaption:K.newFile(),comparator:(t,e)=>t.name>e.name?1:t.namet.id,parentKeyExtractor:t=>t.parent_folder_id,orderExtractor:t=>(t==null?void 0:t.sorting_order)||0,orderSetter(t,e){t.sorting_order=e},orderBy:this.main.settings.getValue("explorer.fileOrder")}),this.fileTreeview.newNodeCallback=async(t,e)=>{if(this.main.currentWorkspace==null)return this.fileTreeview.getCurrentlySelectedNodes().length>0&&this.fileTreeview.getCurrentlySelectedNodes()[0].isFolder?alert(K.firstChooseWorkspaceBecauseFolderIsSelected()):alert(K.firstChooseWorkspace()),null;let i=new Ge(this.main,t);i.isFolder=e.isFolder;let n=e.getParent();return n.isRootNode()||(i.parent_folder_id=n.externalObject.id),e.isFolder||(e.iconClass=Ai.filenameToFileType(t).iconclass),this.main.getCurrentWorkspace().addFile(i),i.isFolder||this.setFileActive(i),this.main.user.is_testuser||await this.main.networkManager.sendCreateFile(i,this.main.currentWorkspace,this.main.workspacesOwnerId)?i:(this.fileTreeview.removeNodeAndItsFolderContents(e),this.setFileActive(null),null)},this.fileTreeview.renameCallback=async(t,e,i)=>{if(e.length>80&&(alert(T.FilenameHasBeenTruncated(80)),e=e.substring(0,80)),t.name=e,t.setSaved(!1),!t.isFolder){let s=t.isFolder?void 0:Ai.filenameToFileType(e);i.iconClass=s.iconclass,H.setModelLanguage(t.getMonacoModel(),s.language)}if(this.main.user.is_testuser)return{correctedName:e,success:!0};let n=await this.main.networkManager.sendUpdatesAsync(!0);return{correctedName:e,success:n}},this.fileTreeview.deleteCallback=async(t,e)=>{var s;let i=[t];if(t.isFolder&&(i=i.concat(t.getFolderContentsRecursively(this.fileTreeview.getAllExternalObjects())),i.length>1&&!confirm(K.confirmDeleteFileFolderRecursively(i.length))))return!1;let n=this.main.user.is_testuser||await this.main.networkManager.sendDeleteWorkspaceOrFileAsync("file",i.map(a=>a.id));if(n){for(let a of i)this.main.getCurrentWorkspace().removeFile(a);if((s=this.main.getCompiler())==null||s.triggerCompile(),e.hasFocus){let a=this.main.getCurrentWorkspace().getFiles();a.length==0?(this.fileTreeview.setCaption(K.noFile()),this.setFileActive(null)):this.setFileActive(a[0])}}return n},this.fileTreeview.contextMenuProvider=(t,e)=>{let i=[];return i.push({caption:K.duplicate(),callback:async(n,s)=>{let a=n,l=new Ge(this.main,a.name+" - "+K.copy(),a.getText());l.remote_version=a.remote_version;let h=this.main.getCurrentWorkspace();if(h.addFile(l),await this.main.networkManager.sendCreateFile(l,h,this.main.workspacesOwnerId)){let u=this.fileTreeview.addNode(!1,l.name,Ai.filenameToFileType(l.name).iconclass,l,s.parentKey);this.setFileActive(l),u.renameNode()}}},{caption:K.exportAsFile(),callback:async(n,s)=>{Or(n.getText(),n.name)}}),this.main.user.is_teacher||this.main.user.is_admin||this.main.user.is_schooladmin||(t.submitted_date==null?i.push({caption:K.markAsAssignment(),callback:(n,s)=>{t.submitted_date=pp(new Date),t.setSaved(!1),this.main.networkManager.sendUpdatesAsync(!0),this.renderHomeworkButton(t)}}):i.push({caption:K.removeAssignmentLabel(),callback:(n,s)=>{t.submitted_date=null,t.setSaved(!1),this.main.networkManager.sendUpdatesAsync(!0),this.renderHomeworkButton(t)}})),i},this.fileTreeview.nodeClickedCallback=t=>{t.isFolder||this.setFileActive(t)},this.fileTreeview.dropEventCallback=async(t,e,i,n)=>{if(t!=this.fileTreeview||!e.isFolder)return;let s=t.getCurrentlySelectedNodes();switch(n){case"move":let a=e.ownKey;s=this.fileTreeview.reduceNodesToMove(s);for(let l of s){let h=l.externalObject;h&&(h.parent_folder_id=a),h.setSaved(!1)}await this.main.networkManager.sendUpdatesAsync(!0)&&(e.insertNodes(i,s),e.reorder());break}},this.fileTreeview.orderChangedCallback=async t=>(this.main.networkManager.sendUpdateFileOrder(t.map(e=>e.externalObject)),!0),this.synchronizedButton=this.fileTreeview.captionLineAddIconButton("img_open-change-dark","right",()=>{this.main.getCurrentWorkspace().synchronizeWithRepository()},K.synchronizeWorkspaceWithRepository()),this.synchronizedButton.setVisible(!1)}renderHomeworkButton(t){let e=this.fileTreeview.findNodeByElement(t);if(!e)return;let i=e.getIconButtonByTag("Homework");i||(i=e.addIconButton("img_homework",void 0,"",!0),i.tag="Homework");let n=null,s="";t.submitted_date!=null&&(n="img_homework",s=K.labeledAsAssignment()+": "+t.submitted_date,t.text_before_revision&&(n="img_homework-corrected",s=K.assignmentIsCorrected())),n?(i.iconClass=n,i.title=s,i.setVisible(!0)):i.setVisible(!1)}initWorkspacelistPanel(){this.workspaceTreeview=new Zt(this.accordion,{captionLine:{enabled:!0,text:K.WORKSPACES()},withSelection:!0,withFolders:!0,selectMultiple:!0,isDragAndDropSource:!0,withDeleteButtons:!0,confirmDelete:!0,buttonAddElements:!0,buttonAddElementsCaption:K.newWorkspace()+"...",buttonAddFolders:!0,minHeight:150,flexWeight:"1",defaultIconClass:"img_workspace-dark",comparator:(t,e)=>t.name>e.name?1:t.namet.id,parentKeyExtractor:t=>t.parent_folder_id,readOnlyExtractor:t=>t.readonly||t.pruefung_id!=null,orderBy:this.main.settings.getValue("explorer.workspaceOrder"),orderExtractor:t=>t.sorting_order,orderSetter:(t,e)=>t.sorting_order=e}),this.workspaceTreeview.newNodeCallback=async(t,e)=>{var a;let i=this.main.user.id;this.main.workspacesOwnerId!=null&&(i=this.main.workspacesOwnerId);let n=new wi(t,this.main,i);if(n.isFolder=e.isFolder,n.parent_folder_id=((a=e.getParent().externalObject)==null?void 0:a.id)??null,this.main.workspaceList.push(n),this.main.user.is_testuser||await this.main.networkManager.sendCreateWorkspace(n,this.main.workspacesOwnerId))return e.isFolder||(this.fileTreeview.addElementsButton.setVisible(!0),this.fileTreeview.addFolderButton.setVisible(!0),this.setWorkspaceActive(n),n.renderSynchronizeButton(e)),n},this.workspaceTreeview.renameCallback=async(t,e,i)=>{if(e=e.substring(0,80),t.name=e,t.saved=!1,this.main.user.is_testuser)return{correctedName:e,success:!0};let n=await this.main.networkManager.sendUpdatesAsync();return{correctedName:e,success:n}},this.workspaceTreeview.deleteCallback=async t=>{let e=[t];if(t.isFolder&&(e=e.concat(t.getFolderContentsRecursively(this.workspaceTreeview.getAllExternalObjects())),e.length>1&&!confirm(K.confirmDeleteWorkspaceFolderRecursively(e.length))))return!1;let i=this.main.user.is_testuser||await this.main.networkManager.sendDeleteWorkspaceOrFileAsync("workspace",e.map(n=>n.id));if(i){for(let n of e)this.main.removeWorkspace(n);this.main.workspaceList.indexOf(this.main.currentWorkspace)<0&&this.setWorkspaceActive(null)}return i},this.workspaceTreeview.nodeClickedCallback=async t=>{t!=null&&!t.isFolder&&(this.setWorkspaceActive(t,!1,!1),this.fileTreeview.addElementsButton.setVisible(!0),this.fileTreeview.addFolderButton.setVisible(!0))},this.workspaceTreeview.dropEventCallback=(t,e,i,n)=>{t==this.workspaceTreeview?this.moveOrCopyWorkspaces(this.workspaceTreeview.getOrderedListOfCurrentlySelectedNodes(),e,i,n):t==this.fileTreeview&&this.moveOrCopyFilesToOtherWorkspaces(this.fileTreeview.getOrderedListOfCurrentlySelectedNodes(),e,n)},this.workspaceTreeview.contextMenuProvider=(t,e)=>{let i=[];return t.readonly||(i.push({caption:K.newWorkspace()+"...",callback:()=>{for(;!e.isFolder&&!e.isRootNode&&e!=null;)e=e.getParent();this.workspaceTreeview.selectNodeAndSetFocus(e,!1),this.workspaceTreeview.addNewNode(!1)}}),e.isFolder?i.push({caption:K.exportFolder(),callback:async()=>{let n=t.name.replace(/\//g,"_");Or(await Lr.exportFolder(t,this.workspaceTreeview),n+".json")}}):(i.push({caption:K.duplicate(),callback:async()=>{var s;await this.main.networkManager.sendUpdatesAsync();let n=await this.main.networkManager.sendDuplicateWorkspace(t);if(n.message==null&&n.workspace!=null){let a=wi.restoreFromData(n.workspace,this.main);this.main.rightDiv.classDiagram.duplicateSerializedClassDiagram(t.id,a.id),this.main.workspaceList.push(a),this.workspaceTreeview.addNode(!1,a.name,e.iconClass,a,((s=e.getParent())==null?void 0:s.ownKey)??null)}else n.message!=null&&alert(n.message)}},{caption:K.exportToFile(),callback:async()=>{let n=t.name.replace(/\//g,"_");Or(await Lr.exportWorkspace(t),n+".json")}}),this.main.user.is_teacher&&this.main.teacherExplorer.classPanel.size(!0)>0&&(i.push({caption:"-",callback:()=>{}}),i.push({caption:K.distributeToClass()+"...",callback:()=>{},subMenu:this.main.teacherExplorer.classPanel.nodes.filter(n=>!n.isRootNode()).map(n=>{let s=n.externalObject;return{caption:s.name,callback:()=>{this.main.networkManager.sendDistributeWorkspace(t,s,null,a=>{if(a==null){let l=this.main.networkManager;l.updateFrequencyInSeconds*l.forcedUpdateEvery,alert(K.workspaceDistributed(t.name,s.name))}else alert(a)})}}})},{caption:K.distributeToStudents(),callback:()=>{let n=this.main.teacherExplorer.classPanel.getAllExternalObjects();new bv(n,t,this.main)}})),this.main.repositoryOn&&this.main.workspacesOwnerId==this.main.user.id&&(i.push({caption:"-",callback:()=>{}}),t.repository_id==null?i.push({caption:K.createRepository(),callback:()=>{this.main.repositoryCreateManager.show(t)}}):i.push({caption:K.synchronizeWorkspaceWithRepository(),callback:()=>{t.synchronizeWithRepository()}},{caption:K.exportRepository(),callback:async()=>{let n="Repository "+t.name.replace(/\//g,"_");Or(await uv.exportRepository(t.repository_id,t.id),n+".json")}},{caption:K.detachFromRepository(),color:"#ff8080",callback:async()=>{t.repository_id=null,t.saved=!1,await this.main.networkManager.sendUpdatesAsync(!0),e.iconClass="img_workspace-dark",t.renderSynchronizeButton(e)}})),i.push({caption:"-",callback:()=>{}}),i.push({caption:K.settings()+"...",callback:()=>{new yv(t,this.main).open()}}))),i},this.workspaceTreeview.orderChangedCallback=async t=>(this.main.networkManager.sendUpdateWorkspaceOrder(t.map(e=>e.externalObject)),!0)}async moveOrCopyFilesToOtherWorkspaces(t,e,i){if(e.isFolder){alert(T.cantMoveFilesToWorkspaceFolder());return}let n=e.externalObject,s=this.main.getCurrentWorkspace();if(s!=n)switch(i){case"move":let a=t.map(h=>h.externalObject.id);for(let h of t){let c=h.externalObject;a.indexOf(c.parent_folder_id)<0&&(c.parent_folder_id=null),c.sorting_order=1e4,(this.main.user.is_testuser||await this.main.networkManager.moveFile(c.id,n.id))&&(s.removeFile(c),n.addFile(c),this.fileTreeview.removeNodeAndItsFolderContents(h))}break;case"copy":let l=new Map;for(let h of t){let c=h.externalObject,u=c.id,g=l.get(c.parent_folder_id)||null,f=new Ge(this.main,c.name,c.getText());f.parent_folder_id=g,f.isFolder=c.isFolder,f.sorting_order=1e4,(this.main.user.is_testuser||await this.main.networkManager.sendCreateFile(f,n,n.owner_id))&&n.addFile(f),l.set(u,f.id)}break}}async moveOrCopyWorkspaces(t,e,i,n){switch(n){case"move":let s=e.ownKey;t=this.workspaceTreeview.reduceNodesToMove(t);for(let a of t){let l=a.externalObject;l&&(l.parent_folder_id=s),l.saved=!1}(this.main.user.is_testuser||await this.main.networkManager.sendUpdatesAsync(!0))&&(e.insertNodes(i,t),e.reorder());break}}renderFiles(t){let e=t==null?K.noWorkspace():t.name;if(this.fileTreeview.setCaption(e),this.fileTreeview.clear(),t!=null){let i=t.getFiles().slice();for(let n of i)this.fileTreeview.addNode(n.isFolder,n.name,n.isFolder?void 0:Ai.filenameToFileType(n.name).iconclass,n),this.renderHomeworkButton(n);this.fileTreeview.sort()}}renderWorkspaces(t){this.fileTreeview.clear(),this.workspaceTreeview.clear();for(let e of t){let i=e.repository_id==null?"img_workspace-dark":"img_workspace-dark-repository";e.isFolder&&(i=void 0);let n=this.workspaceTreeview.addNode(e.isFolder,e.name,i,e);e.name=="_Prüfungen"&&e.readonly&&(n.renderCaptionAsHtml=!0,n.caption='Prüfungen',n.readOnly=!0),e.pruefung_id&&(n.readOnly=!0),e.renderSynchronizeButton(n)}this.workspaceTreeview.sort(),this.workspaceTreeview.collapseAllButRootnode()}renderErrorCount(t,e){var i;if(e!=null)for(let n of t.getFiles()){let s=e.get(n),a=s==null||s==0?"":"("+s+")";(i=this.fileTreeview.findNodeByElement(n))==null||i.setRightPartOfCaptionErrors(a)}}showRepositoryButtonIfNeeded(t){t.repository_id!=null&&t.owner_id==this.main.user.id?(this.synchronizedButton.setVisible(!0),this.main.user.gui_state.helperHistory.repositoryButtonDone||ar.showHelper("repositoryButton",this.main,y(this.synchronizedButton.parent))):this.synchronizedButton.setVisible(!1)}setWorkspaceActive(t,e=!1,i=!0){var a;if(this.main.editor.editor.setModel(null),(a=this.main.getCurrentWorkspace())==null||a.disposeMonacoModels(),uo.close(),this.main.interpreter.scheduler.state==Q.running&&this.main.interpreter.stop(!1),this.main.currentWorkspace=t,this.renderFiles(t),t==null){this.fileTreeview.addElementsButton.setVisible(!1),this.fileTreeview.addFolderButton.setVisible(!1),this.main.getMainEditor().setModel(null),this.fileTreeview.setCaption(K.selectWorkspace()),this.synchronizedButton.setVisible(!1),this.setFileActive(null);return}i&&this.workspaceTreeview.selectElement(t,!1),t.createMonacoModels(),t.setLibraries(this.main.getCompiler());let n=t.getFiles();t.currentlyOpenFile!=null?this.setFileActive(t.currentlyOpenFile):n.length>0?this.setFileActive(n[0]):this.setFileActive(null),n.length==0&&!this.main.user.gui_state.helperHistory.newFileHelperDone&&ar.showHelper("newFileHelper",this.main,y(this.fileTreeview.addElementsButton.parent)),this.showRepositoryButtonIfNeeded(t),new ws().initializeSpritesheetForWorkspace(t,this.main).then(()=>{var l;for(let h of n)this.main.getCompiler().setFileDirty(h);(l=this.main.bottomDiv.gradingManager)==null||l.setValues(t),this.main.getCompiler().triggerCompile()})}setFileActive(t){var i,n;if(t!=null&&t.isFolder)return;this.main.bottomDiv.homeworkManager.hideRevision();let e=this.main.getMainEditor();(i=this.lastOpenFile)==null||i.saveViewState(e),t==null?(e.setModel(H.createModel(K.noFile(),"text")),e.updateOptions({readOnly:!0}),this.fileTreeview.setCaption(K.noFile())):(e.updateOptions({readOnly:((n=this.main.getCurrentWorkspace())==null?void 0:n.readonly)&&!this.main.user.is_teacher}),e.setModel(t.getMonacoModel()),[Q.running,Q.paused].indexOf(this.main.getInterpreter().scheduler.state)<0&&setTimeout(()=>{e.focus()},100),t.text_before_revision!=null?this.main.bottomDiv.homeworkManager.showHomeWorkRevisionButton():this.main.bottomDiv.homeworkManager.hideHomeworkRevisionButton(),this.main.getInterpreter().onFileSelected())}setActiveAfterExternalModelSet(t){var e;this.fileTreeview.selectElement(t,!1),this.lastOpenFile=t,this.main.editor.dontPushNextCursorMove++,t.restoreViewState(this.main.getMainEditor()),this.main.editor.dontPushNextCursorMove--,this.setCurrentlyEditedFile(t),(e=this.main.getDisassembler())==null||e.disassemble(),this.main.getInterpreter().showProgramPointer(),setTimeout(()=>{this.main.getMainEditor().getOptions().get(H.EditorOption.readOnly)||this.main.getMainEditor().focus()},300)}setCurrentlyEditedFile(t){if(t==null)return;let e=this.main.currentWorkspace;e.currentlyOpenFile!=t&&(e.currentlyOpenFile=t,e.saved=!1)}setExplorerColor(t,e){let i;t==null?(t="transparent",i=K.myWorkspaces()):i=e,this.fileTreeview.getNodeDiv().style.backgroundColor=t,this.workspaceTreeview.getNodeDiv().style.backgroundColor=t,this.workspaceTreeview.setCaption(i)}getNewFile(t){return Ge.restoreFromData(this.main,t)}async fetchAndRenderOwnWorkspaces(){await this.fetchAndRenderWorkspaces(this.main.user)}async fetchAndRenderWorkspaces(t,e,i=null){await this.main.networkManager.sendUpdatesAsync();let n={ws_userId:t.id,userId:this.main.user.id},s=await et("/servlet/getWorkspaces",n);if(s.success==!0){this.main.workspacesOwnerId==this.main.user.id&&e!=null&&(e.ownWorkspaces=this.main.workspaceList.slice(),e.currentOwnWorkspace=this.main.currentWorkspace);let a=(e==null?void 0:e.classPanelMode)=="tests";t.id!=this.main.user.id&&a&&(s.workspaces.workspaces=s.workspaces.workspaces.filter(l=>l.pruefung_id==i.id)),this.main.workspacesOwnerId=t.id,this.main.restoreWorkspaces(s.workspaces,!1),t.id!=this.main.user.id&&(this.main.projectExplorer.setExplorerColor("rgba(255, 0, 0, 0.2",t.familienname+", "+t.rufname),this.main.teacherExplorer.homeButton.setVisible(!0),ar.showHelper("homeButtonHelperNew",this.main,this.main.teacherExplorer.homeButton.divElement),this.main.networkManager.updateFrequencyInSeconds=this.main.networkManager.teacherUpdateFrequencyInSeconds,this.main.networkManager.secondsTillNextUpdate=this.main.networkManager.teacherUpdateFrequencyInSeconds,a||(this.main.bottomDiv.homeworkManager.attachToWorkspaces(this.main.workspaceList),this.main.bottomDiv.showHomeworkTab())),i!=null?(this.workspaceTreeview.addElementsButton.setVisible(!1),this.workspaceTreeview.addFolderButton.setVisible(!1)):(this.workspaceTreeview.addElementsButton.setVisible(!0),this.workspaceTreeview.addFolderButton.setVisible(!0))}}markFilesAsStartable(t,e){for(let i of this.fileTreeview.nodes.filter(n=>!n.isRootNode())){let n=i.getIconButtonByTag("Start"),s=i.externalObject;n||(n=i.addIconButton("img_start-dark",()=>{this.main.getInterpreter().start(s)},T.startMainProgram(),!0)),n.tag="Start",n.setVisible(t.indexOf(s)>=0),n.setActive(e)}}show(){this.$projectexplorerDiv.css("display","")}hide(){this.$projectexplorerDiv.css("display","none")}}const Ro=class Ro{constructor(t,e){r(this,"position",0);r(this,"yMax");r(this,"$grip");r(this,"$zoomcontrolDisplay");r(this,"gripHeight",10);r(this,"overallHeight",150);r(this,"zoomMin",.2);r(this,"zoomMax",2);this.callback=e;let i=y('
');t.append(i);let n=y('
');i.append(n),this.$grip=y('
'),i.append(this.$grip),this.$zoomcontrolDisplay=y('
'),this.$grip.append(this.$zoomcontrolDisplay);let s,a,l=this;l.overallHeight=Ql(i.css("height")),l.gripHeight=Ql(l.$grip.css("height")),l.yMax=l.overallHeight-l.gripHeight;let h=window.PointerEvent?"pointer":"mouse";n.on(h+"down",u=>{let g=u.pageY-i.offset().top-4;l.setZoom(g),l.$grip.css("top",g+"px"),l.$grip.trigger(h+"down",[u.clientY])}),this.$grip.on(h+"down",(u,g)=>{g==null&&(g=u.clientY),s=g,a=l.position,this.$zoomcontrolDisplay.show(),y(document).on(h+"move.zoomcontrol",f=>{let b=f.clientY-s;l.setZoom(a+b)}),y(document).on(h+"up.zoomcontrol",()=>{y(document).off(h+"up.zoomcontrol"),y(document).off(h+"move.zoomcontrol"),this.$zoomcontrolDisplay.hide()}),u.stopPropagation()}),t.on(h+"enter",u=>{Ro.preventFading||i.fadeIn()}),t.on(h+"leave",u=>{Ro.preventFading||i.fadeOut()});let c=(1-this.zoomMin)/(this.zoomMax-this.zoomMin);this.position=c*(this.overallHeight-this.gripHeight),this.$grip.css("top",this.position+"px")}setZoom(t){t<0&&(t=0),t>this.yMax&&(t=this.yMax),this.position=t,this.$grip.css("top",t+"px");let e=t/(this.overallHeight-this.gripHeight);e=this.zoomMin+e*(this.zoomMax-this.zoomMin);let i=Math.round(e*100)+" %";this.$zoomcontrolDisplay.html(i),this.callback!=null&&this.callback(e)}};r(Ro,"preventFading",!1);let Ks=Ro;var Ke=.2;class Av{constructor(t,e){r(this,"zoomControl");r(this,"zoomfactor",1);r(this,"$canvas");r(this,"svgElement");r(this,"$menuButton");r(this,"defs");r(this,"style");r(this,"inlineStyles",{});r(this,"marginCm",1);r(this,"minDistance",2);r(this,"minWidthHeightCm",10);r(this,"widthCm",this.minWidthHeightCm);r(this,"heightCm",this.minWidthHeightCm);this.main=e,this.$menuButton=y('
'),t.append(this.$menuButton);let i=y("
");t.append(i),i.addClass("jo_scrollable"),i.css({overflow:"auto",position:"relative",width:"100%",height:"100%"}),this.$canvas=y('
'),i.append(this.$canvas),this.zoomControl=new Ks(t,h=>{this.$canvas.css({transform:"scale("+h+")"}),this.zoomfactor=h});let n="http://www.w3.org/2000/svg";this.svgElement=document.createElementNS(n,"svg"),y(this.svgElement).addClass("jo_diagram-svg svg_all_pointer_events"),this.$canvas[0].appendChild(this.svgElement),this.adjustCenterRectangle();let s=y(this.svgElement),a,l;s.on("mousedown",h=>{a=h.screenX,l=h.screenY,y(document).on("mousemove.diagram",c=>{let u=c.screenX-a,g=c.screenY-l;a=c.screenX,l=c.screenY,i.scrollLeft(i.scrollLeft()-u),i.scrollTop(i.scrollTop()-g)}),y(document).on("mouseup.diagram",()=>{y(document).off("mousemove.diagram"),y(document).off("mouseup.diagram")})})}adjustCenterRectangle(){}setSize(t,e){tc.leftCm&&(e=c.leftCm),nc.topCm&&(i=c.topCm),sthis.widthCm||n-e<=this.widthCm&&this.widthCm>this.minWidthHeightCm){let c=0;if(l=Math.max(this.minWidthHeightCm,n-e),e<0&&(c=-e),e>0&&n>l&&(c=l-n),a=c!=0,a)for(let u of t)u.move(c,0,!0,!0)}if(i<0||s>this.heightCm||s-i<=this.heightCm&&this.heightCm>this.minWidthHeightCm){let c=0;if(h=Math.max(this.minWidthHeightCm,s-i),i<0&&(c=-i),i>0&&s>h&&(c=h-s),a=c!=0,a)for(let u of t)u.move(0,c,!0,!0)}return this.setSize(l,h),{isAdjusted:a}}insertStyleElement(t=null){let e="http://www.w3.org/2000/svg";this.style==null&&(this.defs=document.createElementNS(e,"defs"),this.style=document.createElementNS(e,"style"),this.defs.appendChild(this.style),this.svgElement.appendChild(this.defs)),t!=null&&(this.inlineStyles=t,this.refreshInlineStyles())}createElement(t,e=null,i){let s=y(document.createElementNS("http://www.w3.org/2000/svg",t));return i!=null&&s.attr(i),e!=null&&e.appendChild(s[0]),s}refreshInlineStyles(){let t="";for(let e in this.inlineStyles){let i=this.inlineStyles[e];if(i!=null){t+=e+`{ `;for(let n in i)t+=" "+n+":"+i[n]+`; `;t+=`} `}else t+=e+` `}this.style.textContent=t}findFreeSpace(t,e,i,n){let s=0,a=!1,l=0,h=0;for(;!a;){let c=s,u=0;for(u=0;u<=s;u++)if(l=this.marginCm+u*Ke,h=this.marginCm+c*Ke,this.isFree(t,e,i,l,h,n)){a=!0;break}if(a)break;for(u--,c=0;c<=s-1;c++)if(l=this.marginCm+u*Ke,h=this.marginCm+c*Ke,this.isFree(t,e,i,l,h,n)){a=!0;break}s+=2}return{x:l,y:h}}isFree(t,e,i,n,s,a){for(let l of t){let h=Math.abs(l.leftCm+l.widthCm/2-n-e/2)<=(l.widthCm+e)/2+a,c=Math.abs(l.topCm+l.heightCm/2-s-i/2)<=(l.heightCm+i)/2+a;if(h&&c)return!1}return!0}}var Gl=(p=>(p[p.left=0]="left",p[p.center=1]="center",p[p.right=2]="right",p))(Gl||{});const Go=class Go{constructor(t){r(this,"$element");r(this,"leftCm",0);r(this,"topCm",0);r(this,"widthCm");r(this,"heightCm");r(this,"lines",[]);r(this,"backgroundColor","#ffffff");this.parent=t}getRoutingRectangle(){return{left:Math.round(this.leftCm/Ke),top:Math.round(this.topCm/Ke),width:Math.round(this.widthCm/Ke),height:Math.round(this.heightCm/Ke)}}show(){this.$element!=null&&this.$element.show()}hide(){this.$element!=null&&this.$element.hide()}detach(){this.$element!=null&&this.$element.detach()}remove(){this.$element!=null&&(this.$element.remove(),this.$element=null)}appendTo(t){t.append(this.$element)}clear(){this.$element!=null&&(this.$element.empty(),this.lines=[])}move(t,e,i,n=!1){this.leftCm+=t,this.topCm+=e;let s=this.leftCm,a=this.topCm;i&&(s=Math.round(s/Ke)*Ke,a=Math.round(a/Ke)*Ke),n&&(this.leftCm=s,this.topCm=a),y(this.$element).css("transform","translate("+s+"cm,"+a+"cm)")}moveTo(t,e,i){this.move(t-this.leftCm,e-this.topCm,i)}createElement(t,e=null,i){let s=y(document.createElementNS("http://www.w3.org/2000/svg",t));return i!=null&&s.attr(i),e!=null&&e.appendChild(s[0]),s}createTextElement(t,e=null,i){let n=this.createElement("text",e,{font:"16px Roboto","font-family":"sans-serif",fill:"#000","alignment-baseline":"hanging","dominant-baseline":"hanging"});return i!=null&&n.attr(i),n.text(t),n}getTextMetrics(t){let e=t[0].getBBox();return{height:e.height*Go.cmPerPx,width:e.width*Go.cmPerPx}}addTextLine(t){this.lines.push(t),t.type=="text"&&(t.alignment==null&&(t.alignment=0),t.bold==null&&(t.bold=!1),t.italics==null&&(t.italics=!1))}render(){let t=this.$element;t==null&&(t=this.createElement("g",this.parent),t.addClass("svg_draggable"),t.addClass("svg_all_pointer_events"),this.$element=t,y(this.$element).css("transform","translate("+this.leftCm+"cm,"+this.topCm+"cm)"));let e=this.createElement("rect",t[0]),i=.1,n=0,s=!0;for(let u of this.lines)if(u.type=="text"){s&&(i+=.1),s=!1,u.yCm=i,u.$element=this.createTextElement(u.text,t[0],{"font-weight":u.bold?"bold":"normal","font-size":"12pt","font-style":u.italics?"italic":"normal","text-anchor":u.alignment==0?"start":u.alignment==1?"middle":"end",cursor:u.onClick==null?"":"pointer"}),u.$element.css("transform","translate(0cm,0cm)");let g=this.getTextMetrics(u.$element);u.textHeightCm=g.height,u.textWidthCm=g.width,n=Math.max(n,u.textWidthCm),i+=u.textHeightCm,u.tooltip!=null&&this.createElement("title",u.$element[0]).text(u.tooltip)}else u.yCm=i+u.thicknessCm/2,i+=u.thicknessCm+.1,s=!0;let a=2*.05+2*.2+n;this.widthCm=(Math.trunc(a/Ke)+1)*Ke,this.heightCm=(Math.trunc(i/Ke)+1)*Ke;let l=.05+.2,h=a/2,c=a-l;e.css({width:this.widthCm+"cm",height:this.heightCm+"cm",fill:this.backgroundColor,stroke:"#000","stroke-width":"0.05cm"});for(let u of this.lines)if(u.type=="text"){let g;switch(u.alignment){case 1:g=h;break;case 0:g=l;break;case 2:g=c;break}let f=this.createElement("g",t[0]);f.append(u.$element),u.$element=f,u.$element.css("transform","translate("+g+"cm,"+u.yCm+"cm)"),u.onClick!=null&&(u.$element.addClass("clickable"),u.$element.on("mousedown",b=>{u.onClick(),b.stopPropagation()}))}else u.$element=this.createElement("line",t[0],{x1:"0",y1:u.yCm+"cm",x2:this.widthCm+"cm",y2:u.yCm+"cm"}),u.$element.css({stroke:"#000","stroke-width":u.thicknessCm+"cm"})}};r(Go,"cmPerPx",2.54/96);let im=Go;class hl extends im{constructor(e,i,n,s){super(e.svgElement);r(this,"className");r(this,"klass");r(this,"filename");r(this,"hashedSignature");r(this,"documentation");r(this,"active",!0);r(this,"withMethods",!0);r(this,"withFields",!0);r(this,"inDebounce");r(this,"isSystemClass");r(this,"$dropdownTriangle");if(this.diagram=e,this.klass=s,s!=null){this.attachToClass(this.klass),this.isSystemClass=s.module instanceof sa,this.withFields=!1;//!this.isSystemClass; this.withMethods=!1}this.moveTo(i,n,!0)}copy(){let e=new hl(this.diagram,this.leftCm,this.topCm,null);return e.className=this.className,e.filename=this.filename,e.hashedSignature=this.hashedSignature,e.documentation=this.documentation,e.active=!1,e.withMethods=this.withMethods,e.withFields=this.withFields,e.isSystemClass=this.isSystemClass,e}serialize(){return{className:this.className,filename:this.filename,hashedSignature:this.hashedSignature,withAttributes:this.withFields,withMethods:this.withMethods,isSystemClass:this.isSystemClass,leftCm:this.leftCm,topCm:this.topCm}}static deserialize(e,i){let n=new hl(e,i.leftCm,i.topCm,null);return n.hashedSignature=i.hashedSignature,n.className=i.className,n.filename=i.filename,n.withFields=i.withAttributes,n.withMethods=i.withMethods,n.isSystemClass=i.isSystemClass,n}documentationToString(e){return e?typeof e=="string"?e:e():""}attachToClass(e){this.klass=e;let i=this.getSignature(e);this.className!=e.identifier||this.hashedSignature!=i||this.widthCm<.7||this.documentation!=e.documentation?(this.isSystemClass=e.module instanceof sa,this.renderLines()):this.addMouseEvents(),this.className=e.identifier,this.filename=e.module.file.name,this.hashedSignature=i,this.documentation=this.documentationToString(e.documentation)}jumpToDeclaration(e){this.diagram.main.showProgramPosition(this.klass.module.file,e.identifierRange)}renderLines(){var i,n;this.clear();let e=this.diagram.currentClassBoxes.parametersWithTypes;if(this.addTextLine({type:"text",text:(this.klass instanceof Dt?"<> ":this.klass.isAbstract()?"<> ":"")+this.klass.identifier,tooltip:this.klass.getDeclaration(),alignment:Gl.center,bold:!0,italics:this.klass instanceof Dt||this.klass.isAbstract(),onClick:this.isSystemClass?void 0:()=>{this.jumpToDeclaration(this.klass)}}),this.klass instanceof je&&this.withFields){this.addTextLine({type:"line",thicknessCm:.05});for(let s of this.klass.getFields().filter(a=>{var l;return((l=a.type)==null?void 0:l.identifier)!="Class"})){let a=this.getVisibilityText(s.visibility);switch(this.diagram.main.getSettings().getValue("classDiagram.typeConvention")){default:a+=((i=s.type)==null?void 0:i.toString())+" "+s.identifier;break;case"pascal":a+=s.identifier+": "+((n=s.type)==null?void 0:n.toString());break}this.addTextLine({type:"text",text:a,tooltip:s.getDeclaration(),alignment:Gl.left,onClick:this.isSystemClass?void 0:()=>{this.jumpToDeclaration(s)}})}}if(this.withMethods){this.addTextLine({type:"line",thicknessCm:.05});let s=["string toJson()",this.klass.identifier+" fromJson(string)"];this.klass.getOwnMethods().filter(a=>s.indexOf(a.getSignature())<0).filter(a=>!a.isConstructor||a.identifier==this.klass.identifier).forEach(a=>{let l=this.getVisibilityText(a.visibility)+a.identifier+"()",h=a.isConstructor||a.returnParameterType==null?"":a.returnParameterType.toString();if(this.diagram.main.getSettings().getValue("classDiagram.omitVoidReturnType")=="omit"&&h==="void"&&(h=""),e)switch(this.diagram.main.getSettings().getValue("classDiagram.typeConvention")){default:h!==""&&(h+=" "),l=this.getVisibilityText(a.visibility)+h+a.identifier+"("+a.parameters.map(c=>c.type.toString()+" "+c.identifier).join(", ")+")";break;case"pascal":h!==""&&(h=" : "+h),l=this.getVisibilityText(a.visibility)+a.identifier+"("+a.parameters.map(c=>c.identifier+": "+c.type.toString()).join(", ")+")"+h;break}this.addTextLine({type:"text",text:l,tooltip:a.getDeclaration(),alignment:Gl.left,italics:this.klass instanceof Dt||a.isAbstract,onClick:this.isSystemClass?void 0:()=>{this.jumpToDeclaration(a)}})})}this.backgroundColor=this.isSystemClass?"#aaaaaa":"#ffffff",this.render(),this.$dropdownTriangle=this.createElement("path",this.$element[0],{d:this.getTrianglePath(),class:"dropdown-triangle",style:"transform: translate("+(this.widthCm-.35)+"cm,0.05cm)"}),this.addMouseEvents()}getTrianglePath(){return this.withMethods?"M 0 8 L 11 8 L 5.5 2 L 0 8":"M 0 2 L 11 2 L 5.5 8 L 0 2"}detach(){var e;(e=this.$element)==null||e.off("mousedown.diagramElement"),y(document).off("mouseup.diagramElement"),y(document).off("mousemove.diagramElement"),super.detach()}addMouseEvents(){let e=this;this.$dropdownTriangle!=null&&(this.$dropdownTriangle.off("mouseup.dropdowntriangle"),this.$dropdownTriangle.off("mousedown.dropdowntriangle")),this.$dropdownTriangle.on("mousedown.dropdowntriangle",i=>{i.stopPropagation()}),this.$dropdownTriangle.on("mouseup.dropdowntriangle",i=>{i.stopPropagation(),this.withMethods=!this.withMethods,this.withFields=!this.withFields,this.$dropdownTriangle.attr("d",this.getTrianglePath()),this.renderLines(),this.diagram.adjustClassDiagramSize(),this.diagram.updateArrows()}),this.$element.on("mousedown.diagramElement",i=>{if(i.stopPropagation(),i.stopImmediatePropagation(),i.button!=0)return;let n=i.screenX,s=i.screenY;e.$element.find("rect").addClass("dragging"),y(document).off("mouseup.diagramElement"),y(document).off("mousemove.diagramElement"),y(document).on("mousemove.diagramElement",a=>{let l=.024583333333333332/this.diagram.zoomfactor,h=(a.screenX-n)*l,c=(a.screenY-s)*l;n=a.screenX,s=a.screenY,e.move(h,c,!0),clearTimeout(e.inDebounce),e.inDebounce=setTimeout(()=>{e.diagram.updateArrows()},200)}),y(document).on("mouseup.diagramElement",()=>{e.move(0,0,!0,!0);let a=e.diagram;a.adjustClassDiagramSize(),a.updateArrows(),e.$element.find("rect").removeClass("dragging"),y(document).off("mouseup.diagramElement"),y(document).off("mousemove.diagramElement"),a.dirty=!0})})}getVisibilityText(e){switch(e){case m.keywordPrivate:return"-";case m.keywordProtected:return"#";case m.keywordPublic:return"+"}}getSignature(e){var s;let i="";if(e instanceof je&&this.withFields&&e.fields.length>0)for(let a of e.fields)i+=this.getVisibilityText(a.visibility)+((s=a.type)==null?void 0:s.toString())+" "+a.identifier;let n=e.getOwnMethods();if(this.withMethods&&n.length>0)for(let a of n){if(a.isConstructor)continue;let l=a.returnParameterType==null?"void":a.returnParameterType.toString();i+=this.getVisibilityText(a.visibility)+l+" "+a.identifier+"("+a.parameters.map(h=>h.type.toString()+" "+h.identifier).join(", ")+")"}return pf(i)}hasSignatureAndFileOf(e){return e.module.file.name==this.filename&&this.getSignature(e)==this.hashedSignature}}const as=class as{static makeHead(t,e,i){let n=e.x-t.x,s=e.y-t.y,a=Math.sqrt(n*n+s*s);if(a<1e-5)return{path:"",stroke:"none",fill:"none"};let l=n/a,h=s/a;e.x-=l*.2,e.y-=h*.2;let c="M "+e.x*Ke/Hs.cmPerPx+" "+e.y*Ke/Hs.cmPerPx,u=this.arrows[i];for(let g of u.steps){let f=g.r/180*Math.PI,b=l*Math.cos(f)-h*Math.sin(f),A=l*Math.sin(f)+h*Math.cos(f);c+=" l "+b*g.f/Hs.cmPerPx+" "+A*g.f/Hs.cmPerPx,l=b,h=A}return{path:c,fill:u.fill,stroke:u.stroke}}};r(as,"rauteAlpha",60),r(as,"arrows",{inheritance:{steps:[{r:150,f:.4},{r:120,f:.4},{r:120,f:.4}],stroke:"#000000",fill:"#ffffff","stroke-dasharray":void 0},realization:{steps:[{r:150,f:.4},{r:120,f:.4},{r:120,f:.4}],stroke:"#000000",fill:"#ffffff","stroke-dasharray":"4"},composition:{steps:[{r:90+as.rauteAlpha,f:.28},{r:180-2*as.rauteAlpha,f:.28},{r:2*as.rauteAlpha,f:.28},{r:180-2*as.rauteAlpha,f:.28}],stroke:"#000000",fill:"#ffffff","stroke-dasharray":void 0}});let Vd=as;const _s=class _s{constructor(t,e,i){r(this,"$element");this.parent=t,this.routingArrow=e,this.color=i}show(){this.$element!=null&&this.$element.show()}hide(){this.$element!=null&&this.$element.hide()}detach(){this.$element!=null&&this.$element.detach()}remove(){this.$element!=null&&this.$element.remove()}appendTo(t){t.append(this.$element)}clear(){this.$element!=null&&this.$element.empty()}createElement(t,e=null,i){let s=y(document.createElementNS("http://www.w3.org/2000/svg",t));return i!=null&&s.attr(i),e!=null&&e.appendChild(s[0]),s}createTextElement(t,e=null,i){let n=this.createElement("text",e,{font:"16px Roboto","font-family":"sans-serif",fill:"#000","alignment-baseline":"hanging"});return i!=null&&n.attr(i),n.text(t),n}getTextMetrics(t){let e=t[0].getBBox();return{height:e.height*_s.cmPerPx,width:e.width*_s.cmPerPx}}render(t=!0){let e=this.$element;e==null?(e=this.createElement("g",this.parent),this.$element=e,e.css("stroke",this.color)):e.empty();let i=this.routingArrow.minimalPoints;if(i==null||i.length<2)return;let n="M "+this.getPathCoordinates(i[0]);for(let l=1;l1&&i[i.length-1].x==i[i.length-2].x&&i[i.length-1].y==i[i.length-2].y;)i.pop();if(i.length>1&&this.routingArrow.endsOnArrowWithIdentifier==null&&(this.routingArrow.arrowType!="composition"||t)){let l=Vd.makeHead(i[i.length-2],i[i.length-1],this.routingArrow.arrowType);this.createElement("path",e[0],{d:l.path}).css({stroke:this.color,"stroke-width":"0.2 cm",fill:l.fill})}}getPathCoordinates(t){let e=t.x*Ke/_s.cmPerPx,i=t.y*Ke/_s.cmPerPx;return""+e+" "+i}};r(_s,"cmPerPx",2.54/96);let Hs=_s;class Qm{registerUsedSystemClasses(t,e){var i;t.getExtends()&&((i=t.getExtends())==null?void 0:i.module)instanceof sa&&e.add(this.getTypeWithoutGenerics(t.getExtends()));for(let n of t.getImplements())n.module instanceof sa&&e.add(this.getTypeWithoutGenerics(n));for(let n of this.getCompositeData(t))n.klass&&n.klass.module instanceof sa&&e.add(n.klass)}getTypeWithoutGenerics(t){return t instanceof Xt||t instanceof Fn?t.isGenericVariantOf:t}getCompositeData(t){var n;let e=[],i=new Map;for(let s of t.fields){let a=s.type;if(a&&s.type instanceof je||s.type instanceof Dt||s.type instanceof ke){for(["ArrayList","List","LinkedList"].indexOf(a.identifier)>=0&&a instanceof Xt&&((n=a.genericTypeParameters)==null?void 0:n.length)==1&&(a=a.typeMap.get(a.genericTypeParameters[0]));a instanceof ke;)a=a.elementType;if(!a)continue;let l=i.get(s.type);l==null?(l={klass:a,identifier:s.identifier},i.set(s.type,l),e.push(l)):l.identifier+=", "+s.identifier}}return e}}function wv(p){return new Worker(""+new URL("assets/Router-BNhqrOpo.js",import.meta.url).href,{name:p==null?void 0:p.name})}class ci{}r(ci,"showSystemClasses",()=>d({de:"Systemklassen einblenden",en:"Show system classes",fr:"Afficher les classes système"})),r(ci,"hideSystemClasses",()=>d({de:"Systemklassen ausblenden",en:"Hide system classes",fr:"Masquer les classes système"})),r(ci,"showParameters",()=>d({de:"Parameter einblenden",en:"show parameters",fr:"Afficher les paramètres"})),r(ci,"hideParameters",()=>d({de:"Parameter ausblenden",en:"hide parameters",fr:"Masquer les paramètres"})),r(ci,"connectionsColored",()=>d({de:"Verbindungen farbig",en:"Colored connections",fr:"Connexions colorées"})),r(ci,"connectionsBlack",()=>d({de:"Verbindungen schwarz",en:"Black connections",fr:"Connexions noires"})),r(ci,"downloadAsPng",()=>d({de:"Klassendiagramm als PNG-Datei herunterladen",en:"Download class diagram as PNG file",fr:"Télécharger le diagramme de classes au format PNG"})),r(ci,"classDiagram",()=>d({de:"Klassendiagramm",en:"Class_Diagram",fr:"Diagramme_de_classes"}));class kv extends Av{constructor(e,i){var s;super(e,i);r(this,"classBoxesRepository",{});r(this,"arrows",[]);r(this,"currentWorkspaceId",null);r(this,"currentWorkspace");r(this,"currentClassBoxes");r(this,"version",0);r(this,"straightArrowSectionAfterRectangle",2);r(this,"distanceFromRectangles",2);r(this,"slotDistance",2);r(this,"dirty",!1);r(this,"routingWorker");r(this,"basecolors",["#0075dc","#993f00","#005c31","#ff5005","#2bce48","#0000ff","#ffa405","#ffa8bb","#740aff","#990000","#ff0000"]);r(this,"blackcolors",["#000000"]);r(this,"colors",this.basecolors);this.$htmlElement=e;let n=this;if(!i.isEmbedded()){let a=(s=i.user.gui_state)==null?void 0:s.classDiagram;a&&this.deserialize(a)}this.$menuButton.on("click",a=>{a.preventDefault();let l=n.currentClassBoxes.displaySystemClasses==!0,h=n.currentClassBoxes.parametersWithTypes==!0,c=n.currentClassBoxes.allArrowsBlack||!1;Ln([{caption:l?ci.hideSystemClasses():ci.showSystemClasses(),callback:()=>{n.currentClassBoxes.displaySystemClasses=!l,n.drawDiagram(n.currentWorkspace,!1)}},{caption:h?ci.hideParameters():ci.showParameters(),callback:()=>{n.currentClassBoxes.parametersWithTypes=!h,n.currentClassBoxes.active.forEach(u=>{u.hashedSignature=-1}),n.drawDiagram(n.currentWorkspace,!1)}},{caption:c?ci.connectionsColored():ci.connectionsBlack(),callback:()=>{n.currentClassBoxes.allArrowsBlack=!c,n.currentClassBoxes.allArrowsBlack?n.colors=n.blackcolors:n.colors=n.basecolors,n.drawDiagram(n.currentWorkspace,!1)}},{caption:ci.downloadAsPng(),callback:async()=>{let u=5;this.currentClassBoxes.active.forEach(w=>w.$dropdownTriangle.hide()),this.svgElement.style.transformOrigin="top left",this.svgElement.style.transform="scale("+u*100+"%)";var g=new XMLSerializer,f=` `,b=f+g.serializeToString(this.svgElement)+"";this.currentClassBoxes.active.forEach(w=>w.$dropdownTriangle.hide()),this.svgElement.style.transformOrigin="",this.svgElement.style.transform="",await et("servlet/svgPost",{svg:b});var A=new Image;let S=this;A.onload=function(){let w=document.createElement("canvas"),C=S.svgElement.parentElement.getBoundingClientRect(),q=C.width/S.zoomfactor*u,I=C.height/S.zoomfactor*u;w.width=q,w.height=I;let W=w.getContext("2d");switch(i.getSettings().getValue("classDiagram.background")){case"transparent":W.clearRect(0,0,q,I);break;case"white":W.fillStyle="#ffffff",W.fillRect(0,0,q,I);break}W.drawImage(A,0,0,q,I),w.toBlob(te=>{Or(te,ci.classDiagram()+".png",!0)}),w.remove()},A.src="proxy.php?url=https%3A%2F%2Fwww.learnj.de%2Fservlet%2FsvgGet%3FcsrfToken%3D"+Ue}}],a.pageX+2,a.pageY+2),a.stopPropagation()})}duplicateSerializedClassDiagram(e,i){let n=this.classBoxesRepository[e];if(!n)return;let s={inactive:n.active.map(a=>a.copy()).concat(n.inactive.map(a=>a.copy())),active:[],displaySystemClasses:n.displaySystemClasses,parametersWithTypes:n.parametersWithTypes,allArrowsBlack:n.allArrowsBlack};this.classBoxesRepository[i]=s,this.dirty=!0}clearAfterLogout(){this.classBoxesRepository={},this.arrows.forEach(e=>{e.remove()}),y(this.svgElement).find(":not(.centerRectangle)").remove()}serialize(){if(this.currentClassBoxes==null)return;let e={classBoxes:[],displaySystemClasses:this.currentClassBoxes.displaySystemClasses,parametersWithTypes:this.currentClassBoxes.parametersWithTypes};for(let i in this.classBoxesRepository){let n=this.classBoxesRepository[i];for(let s of n.active){let a=s.serialize();a.workspaceId=Number.parseInt(i),e.classBoxes.push(a)}}return e}deserialize(e){for(let i of e.classBoxes){let n=this.classBoxesRepository[i.workspaceId];n==null&&(n={active:[],inactive:[],displaySystemClasses:!1,parametersWithTypes:!1,allArrowsBlack:!1},this.classBoxesRepository[i.workspaceId]=n),n.inactive.push(hl.deserialize(this,i)),n.displaySystemClasses=e.displaySystemClasses,n.parametersWithTypes=e.parametersWithTypes}}adjustClassDiagramSize(){let e=this.classBoxesRepository[this.currentWorkspaceId];this.adjustSizeAndElements(e.active)}getClassBoxes(e){let i=this.classBoxesRepository[e.id];return i==null&&(i={active:[],inactive:[],displaySystemClasses:!1,parametersWithTypes:!1,allArrowsBlack:!1},this.classBoxesRepository[e.id]=i),i}switchToWorkspace(e){let i=this.getClassBoxes(e);if(this.currentWorkspaceId!=e.id){if(this.currentWorkspaceId!=null){let n=this.classBoxesRepository[this.currentWorkspaceId];if(n!=null){for(let s of n.active)s.detach();for(let s of n.inactive)s.detach()}}for(let n of i.active)this.svgElement.appendChild(n.$element[0]);for(let n of i.inactive)n.$element!=null&&this.svgElement.appendChild(n.$element[0]);this.adjustSizeAndElements(i.active)}return this.currentWorkspaceId=e.id,i}drawDiagram(e,i){if(e==null)return;this.currentWorkspace=e,this.currentClassBoxes=this.switchToWorkspace(e);let n=[],s=!1,a=[],l=new Set,h=new Qm;for(let u of e.getFiles()){let g=this.main.getCompiler().findModuleByFile(u);if(!g)return;let f=g.types;f!=null&&(s=!0,f.filter(b=>(b instanceof je||b instanceof Dt)&&!b.isMainClass).forEach(b=>{let A=this.findAndEnableClass(b,this.currentClassBoxes,a);A!=null&&n.push(A),b instanceof je&&h.registerUsedSystemClasses(b,l)}))}let c;for(c=new Set;c.size0;for(let u of a){let g=new hl(this,Math.random()*10*Ke,Math.random()*10*Ke,u);g.renderLines();let f=this.findFreeSpace(n,g.widthCm,g.heightCm,this.minDistance);g.moveTo(f.x,f.y,!0),n.push(g)}if(a.length>0&&this.adjustSizeAndElements(n),!!s){for(let u of this.currentClassBoxes.active)u.hide(),u.active=!1,this.currentClassBoxes.inactive.push(u);this.currentClassBoxes.active=n,i||(this.adjustClassDiagramSize(),this.updateArrows())}}updateArrows(){this.$htmlElement.find(".jo_classdiagram-spinner").hide();let e=0,i=this.drawArrows();this.version++,i.version=this.version,this.routingWorker!=null&&this.routingWorker.terminate(),this.routingWorker=new wv;let n=this;this.routingWorker.onmessage=function(s){let a=s.data;if(a.version==n.version){n.$htmlElement.find(".jo_classdiagram-spinner").hide(),n.arrows.forEach(u=>{u.remove()});let l={},h=a.arrows.length+1,c;do c=h,h=0,a.arrows.forEach(u=>{u.color==null&&(h++,u.endsOnArrowWithIdentifier==null?(u.color=n.colors[e],l[u.identifier]=u.color,e++,e>n.colors.length-1&&(e=0)):u.color=l[u.endsOnArrowWithIdentifier])});while(h{u.color==null&&(u.color="#ff0000")}),a.arrows.forEach(u=>{let g=new Hs(n.svgElement,u,u.color);g.render(n.main.getSettings().getValue("classDiagram.drawCompositionDiamond")=="yes"),n.arrows.push(g)})}},this.routingWorker.postMessage(i),this.$htmlElement.find(".jo_classdiagram-spinner").show()}drawArrows(){let e={rectangles:[],arrows:[],xMax:Math.ceil(this.widthCm/Ke),yMax:Math.ceil(this.heightCm/Ke),straightArrowSectionAfterRectangle:this.straightArrowSectionAfterRectangle,distanceFromRectangles:this.distanceFromRectangles,slotDistance:this.slotDistance},i=this.classBoxesRepository[this.currentWorkspaceId];i.active.forEach(s=>{e.rectangles.push(s.getRoutingRectangle())});let n=new Qm;return i.active.forEach(s=>{if(s.klass instanceof je){if(s.klass.getExtends()!=null){let a=this.findClassbox(n.getTypeWithoutGenerics(s.klass.getExtends()),i.active);a!=null&&this.drawArrwow(s,a,"inheritance",e)}for(let a of s.klass.getImplements()){let l=this.findClassbox(n.getTypeWithoutGenerics(a),i.active);l!=null&&this.drawArrwow(s,l,"realization",e)}for(let a of n.getCompositeData(s.klass)){let l=this.findClassbox(a.klass,i.active);l!=null&&this.drawArrwow(l,s,"composition",e)}}}),e}drawArrwow(e,i,n,s){e.getRoutingRectangle(),i.getRoutingRectangle();let a=this.classBoxesRepository[this.currentWorkspaceId];s.arrows.push({arrowType:n,destRectangleIndex:a.active.indexOf(i),sourceRectangleIndex:a.active.indexOf(e),destinationIdentifier:i.className,identifier:e.className+"(extends)"+i.className})}findClassbox(e,i){for(let n of i)if(n.klass==e)return n;return null}findAndEnableClass(e,i,n){let s=0;for(;s0&&(e[0].style.display="none")}this.isWholePage=t==1,this.isWholePage?(this.main.isEmbedded()&&(document.body.classList.add("joeCssFence"),this.main.embeddedFullpageController.primaryButton.setVisible(!1)),this.wholeWindowElement=R.makeDiv(document.body,"jo_wholeWindow"),fa(this.rightDivElement,this.wholeWindowElement),fa(this.originalControlsContainer,this.newControlsContainer),y(".jo_graphics").trigger("sizeChanged")):(this.main.isEmbedded()&&(document.body.classList.remove("joeCssFence"),this.main.embeddedFullpageController.primaryButton.setVisible(!0)),fa(this.wholeWindowElement,this.rightDivElement),fa(this.newControlsContainer,this.originalControlsContainer),this.wholeWindowElement.remove(),y(".jo_graphics").trigger("sizeChanged"))}adjustWidthToWorld(){let t=y(this.outputTab.bodyDiv),e=this.main.getInterpreter().retrieveObject("WorldClass");if(e!=null&&this.isWholePage){let i=window.innerHeight-this.tabManager.headingsDiv.getBoundingClientRect().height-6,n=window.innerWidth/i,s=e.width/e.height;if(s<=n){let a=s*i;t.css("width",a+"px"),t.css("height",i+"px")}else{let a=window.innerWidth/s;t.css("width",window.innerWidth+"px"),t.css("height",a+"px")}}}initGUI(){this.tabManager=new ym(this.rightDivInner),this.coordinatesDiv=R.makeDiv(void 0,"jo_coordinates"),this.tabManager.insertIntoRightDiv(this.coordinatesDiv),this.newControlsContainer=R.makeDiv(void 0,"jo_control-container"),this.tabManager.insertIntoRightDiv(this.newControlsContainer),this.tabManager.addTab(this.outputTab=new wn(yn.output(),["jo_run"])),R.makeDiv(this.outputTab.bodyDiv,"jo_run-programend").textContent=yn.programEnd();let t=y(`
${yn.inputNumber()}
OK
`);this.outputTab.bodyDiv.appendChild(t[0]);let e=y(`
`);this.outputTab.bodyDiv.appendChild(e[0]),this.withClassDiagram&&(this.tabManager.addTab(this.classDiagramTab=new wn(yn.classDiagram(),["jo_classdiagram"])),this.classDiagramTab.bodyDiv.appendChild(y(``)[0]),this.classDiagramTab.onShow=()=>{this.main.drawClassDiagrams(!1)},setTimeout(()=>{this.classDiagram=new kv(y(this.classDiagramTab.bodyDiv),this.main)},100)),this.outputTab.show(),this.wholeWindowButton=new ro(this.tabManager.tabheadingRightDiv,["img_whole-window-dark","img_whole-window-back-dark"],(i,n)=>{this.onWholeWindowButtonClicked(n)},[yn.wholeWindow(),yn.backToNormalSize()],!0,"append")}isClassDiagramActive(){return this.classDiagramTab?this.classDiagramTab.isActive():!1}}class Ym{constructor(t,e){r(this,"sliderknobDiv");r(this,"transparentOverlay");r(this,"sliderknobBeginCallback");r(this,"sliderknobEndCallback");r(this,"DX",-8);r(this,"DY",-8);r(this,"xStart");r(this,"yStart");r(this,"touchIdentifier");this.neighbours=t,this.sliderMovedCallback=e,this.init()}init(){this.initSliderknobPosition(),this.initPointerEvents(),this.initTouchEvents()}initTouchEvents(){this.sliderknobDiv.addEventListener("touchstart",t=>{if(t.preventDefault(),t.touches.length>0&&typeof this.touchIdentifier>"u"){let e=t.touches[0];this.xStart=e.clientX,this.yStart=e.clientY,this.touchIdentifier=e.identifier}}),this.sliderknobDiv.addEventListener("touchmove",t=>{for(let e=0;e{for(let e=0;e{t.stopPropagation(),t.preventDefault()}),this.sliderknobDiv.addEventListener("pointerdown",t=>{t.preventDefault(),t.stopPropagation(),this.dragStart(t.clientX,t.clientY),this.transparentOverlay=R.makeDiv(document.body),this.transparentOverlay.style.cursor="nwse-resize",this.transparentOverlay.style.position="absolute",this.transparentOverlay.style.left="0",this.transparentOverlay.style.top="0",this.transparentOverlay.style.bottom="0",this.transparentOverlay.style.right="0",this.transparentOverlay.style.zIndex="1000",this.transparentOverlay.addEventListener("mousemove",e=>{e.preventDefault(),e.stopPropagation()}),this.transparentOverlay.addEventListener("pointermove",e=>{e.stopPropagation(),e.preventDefault(),this.dragMove(e.clientX,e.clientY)}),this.transparentOverlay.onmousemove=e=>{e.stopPropagation()},this.transparentOverlay.addEventListener("pointerup",()=>{this.transparentOverlay.remove(),this.dragEnd()})})}dragEnd(){this.sliderknobEndCallback&&this.sliderknobEndCallback()}dragMove(t,e){let i=t-this.xStart,n=e-this.yStart;for(let s of this.neighbours)for(let a of s.neighbourOrientation)switch(a){case"top":s.element.style.height=s.oldHeight+n+"px";break;case"bottom":s.element.style.height=s.oldHeight-n+"px";break;case"left":s.element.style.width=s.oldWidth+i+"px";break;case"right":s.element.style.width=s.oldWidth-i+"px";break}this.sliderMovedCallback&&this.sliderMovedCallback()}dragStart(t,e){this.xStart=t,this.yStart=e;for(let i of this.neighbours){let n=i.element.getBoundingClientRect();i.oldWidth=n.width,i.oldHeight=n.height}this.sliderknobBeginCallback&&this.sliderknobBeginCallback()}initSliderknobPosition(){this.sliderknobDiv=R.makeDiv(void 0,"jo_sliderknob","img_knob","jo_button","jo_active"),this.sliderknobDiv.draggable=!1,this.sliderknobDiv.style.zIndex="10",document.body.append(this.sliderknobDiv);let t=0,e=0;for(let i of this.neighbours){let n=i.element.getBoundingClientRect();for(let s of i.neighbourOrientation)switch(s){case"top":e=n.top+n.height;break;case"bottom":e=n.top,new ResizeObserver(()=>{this.sliderknobDiv.style.top=i.element.getBoundingClientRect().top+this.DY+window.scrollY+"px"}).observe(i.element);break;case"left":t=n.left+n.width;break;case"right":t=n.left,new ResizeObserver(()=>{this.sliderknobDiv.style.left=i.element.getBoundingClientRect().left+this.DX+window.scrollX+"px"}).observe(i.element);break}}this.sliderknobDiv.style.top=e+window.scrollY+this.DY+"px",this.sliderknobDiv.style.left=t+window.scrollX+this.DX+"px"}}class Cv{constructor(t){r(this,"main");this.main=t}initSliders(){let t=y("#leftpanel"),e=y("#editor");y("#editor>.monaco-editor");let i=y("#rightdiv"),n=y("#bottomdiv-outer");new Vr(t[0],!1,!1,s=>{this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()},e[0]),new Vr(i[0],!0,!1,s=>{this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()},e[0]),new Vr(n[0],!0,!0,s=>{this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()},e[0]),new Ym([{element:t[0],neighbourOrientation:["left"]},{element:e[0],neighbourOrientation:["right","top"]},{element:n[0],neighbourOrientation:["bottom"]}],()=>{this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()}),new Ym([{element:i[0],neighbourOrientation:["right"]},{element:n[0],neighbourOrientation:["bottom"]},{element:e[0],neighbourOrientation:["left","top"]}],()=>{this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()})}initSlidersOld(){let t=this,e=window.PointerEvent?"pointer":"mouse",i=y('
');y("#slider2").append(i),i.on(e+"down",s=>{let a=s.clientY,l=s.clientX;s.stopPropagation(),Ks.preventFading=!0,y(document).on(e+"move.knobleft",h=>{let c=h.clientY-a,u=h.clientX-l;h.stopPropagation(),t.moveLeftPanel(u),t.moveBottomDiv(c),l+=u,a+=c}),y(document).on(e+"up.knobleft",()=>{y(document).off(e+"move.knobleft"),y(document).off(e+"up.knobleft"),Ks.preventFading=!1})});let n=y('
');y("#slider2").append(n),n.on(e+"down",s=>{let a=s.clientY,l=s.clientX;s.stopPropagation(),Ks.preventFading=!0,y(document).on(e+"move.knobright",h=>{let c=h.clientY-a,u=h.clientX-l;h.stopPropagation(),t.moveRightDiv(u),t.moveBottomDiv(c),l+=u,a+=c}),y(document).on(e+"up.knobright",()=>{y(document).off(e+"move.knobright"),y(document).off(e+"up.knobright"),Ks.preventFading=!1})})}moveRightDiv(t){let e=y("#editor>.monaco-editor"),i=y("#rightdiv"),n=Number.parseInt(i.css("width").replace("px",""));i.css("width",n-t+"px");let s=Number.parseInt(e.css("width").replace("px",""));e.css("width",s+t+"px"),this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout(),y(".jo_graphics").trigger("sizeChanged"),n+=t}moveBottomDiv(t){let e=y("#editor>.monaco-editor"),i=y("#bottomdiv-outer"),n=Number.parseInt(i.css("height").replace("px",""));i.css("height",n-t+"px");let s=Number.parseInt(e.css("height").replace("px",""));e.css("height",s+t+"px"),this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()}moveLeftPanel(t){let e=y("#leftpanel"),i=y("#editor>.monaco-editor"),n=Number.parseInt(e.css("width").replace("px",""));e.css("width",n+t+"px");let s=Number.parseInt(i.css("width").replace("px",""));i.css("width",s-t+"px"),this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()}}function Kl(p,t=!1){var e,i;return p.vidis_akronym?p.username&&p.username.length>0?p.username:p.vidis_akronym:((e=p.familienname)==null?void 0:e.length)>0&&((i=p.rufname)==null?void 0:i.length)>0?t?p.familienname+", "+p.rufname:p.rufname+" "+p.familienname:p.username}var Zm={preparing:"Vorbereitung",running:"Prüfung läuft",correcting:"Korrektur",opening:"Herausgabe"};class Xm{constructor(t,e,i){r(this,"$html");r(this,"isActive",!0);r(this,"listeners",[]);r(this,"linkedToggleButtons",new Set);var n;this._caption=t,this.$parent=e,this._isChecked=i,this.$html=y(`
${t}
`),(n=this.$parent)==null||n.append(this.$html),this.$html.on("pointerdown",s=>{s.stopPropagation(),this._isChecked||(this.checked=!this._isChecked)})}onChange(t){this.listeners.push(t)}linkTo(...t){t==null||t.forEach(e=>{this.linkedToggleButtons.add(e),e.linkedToggleButtons.add(this)})}get caption(){return this._caption}set caption(t){this._caption=t,this.$html.text(t)}setActive(t){this.isActive=t,this.$html.toggleClass("active",t)}get checked(){return this._isChecked}set checked(t){this._isChecked=t,this.$html.toggleClass("checked",t),this.listeners.forEach(e=>e(t)),t&&this.linkedToggleButtons.forEach(e=>e.checked=!1)}}class Sv{constructor(t,e){r(this,"studentPanel");r(this,"classPanel");r(this,"ownWorkspaces");r(this,"currentOwnWorkspace");r(this,"pruefungen",[]);r(this,"classPanelMode","classes");r(this,"currentPruefung",null);r(this,"homeButton");this.main=t,this.classData=e,this.fetchPruefungen()}removePanels(){this.classPanel.setVisible(!1),this.studentPanel.setVisible(!1)}initGUI(){this.initStudentPanel(),this.initClassPanel(),this.main.projectExplorer.accordion.onResize(!0),this.renderClasses(this.classData),Mi.subscribe("onPruefungChanged",async()=>{await this.fetchPruefungen(),this.classPanelMode=="tests"&&this.renderPruefungen()}),Mi.subscribe("onClassesChanged",async()=>{let t=await et("/servlet/getClassesData",{wholeSchool:!1});if(this.classData=t.classDataList,this.classPanelMode=="classes"){let e=null,i=this.classPanel.getCurrentlySelectedNodes();if((i==null?void 0:i.length)>0&&(e=i[0].externalObject),this.renderClasses(this.classData),e!=null){let n=this.classData.find(s=>s.id==e.id);n!=null&&(this.classPanel.selectElement(n,!1),this.renderStudents(n.students))}this.main.currentWorkspace.owner_id!=this.main.user.id&&this.onHomeButtonClicked()}}),this.homeButton=this.studentPanel.captionLineAddIconButton("img_home-dark","right",()=>{this.onHomeButtonClicked()},K.displayOwnWorkspaces()),this.homeButton.setVisible(!1)}initStudentPanel(){this.studentPanel=new Zt(this.main.projectExplorer.accordion,{captionLine:{enabled:!0,text:Ii.students()},withSelection:!0,selectMultiple:!1,isDragAndDropSource:!1,buttonAddElements:!1,withDeleteButtons:!1,buttonAddFolders:!1,defaultIconClass:"img_user-dark",flexWeight:"1",minHeight:100,withFolders:!1,comparator:(t,e)=>t.vidis_akronym&&e.vidis_akronym?Kl(t)>Kl(e)?1:-1:t.familienname>e.familienname?1:e.familienname>t.familienname?-1:t.rufname>e.rufname?1:e.rufname>t.rufname?-1:0,orderBy:"comparator"}),this.studentPanel.nodeClickedCallback=t=>{this.classPanelMode=="classes"?this.main.projectExplorer.fetchAndRenderWorkspaces(t,this):this.main.projectExplorer.fetchAndRenderWorkspaces(t,this,this.currentPruefung)}}restoreOwnWorkspaces(){let t=this.main;t.getMainEditor().updateOptions({readOnly:!0}),t.workspaceList=this.ownWorkspaces,t.currentWorkspace=this.currentOwnWorkspace,t.workspacesOwnerId=t.user.id,t.projectExplorer.setExplorerColor(null),t.projectExplorer.renderWorkspaces(t.workspaceList),t.currentWorkspace==null&&t.workspaceList.length>0&&(t.currentWorkspace=t.workspaceList[0]),t.currentWorkspace!=null&&t.projectExplorer.setWorkspaceActive(t.currentWorkspace,!0),this.studentPanel.selectElement(null,!1)}initClassPanel(){let t=this,e=y('
'),i=new Xm(Ii.classes(),e,!0),n=new Xm(Ii.tests(),e,!1);i.linkTo(n),this.classPanel=new Zt(this.main.projectExplorer.accordion,{captionLine:{enabled:!0,element:e[0]},withSelection:!0,selectMultiple:!1,isDragAndDropSource:!1,buttonAddElements:!1,withDeleteButtons:!1,buttonAddFolders:!1,defaultIconClass:"img_class-dark",flexWeight:"1",minHeight:100,withFolders:!1,orderBy:"comparator"});let s=this.classPanel.captionLineAddIconButton("img_gear-dark","right",()=>{window.open(`administration_mc.html?csrfToken=${Ue}&menuItem=manageTests`,"_blank").focus()},Ii.createNewTest());s.setVisible(!1),this.classPanel.nodeClickedCallback=a=>{t.main.networkManager.sendUpdatesAsync().then(()=>{if(this.classPanelMode=="classes"){let l=a;l!=null&&this.renderStudents(l.students)}else this.onSelectPruefung(a)})},n.onChange(async a=>{s.setVisible(!0),t.classPanelMode=a?"tests":"classes",t.main.networkManager.sendUpdatesAsync().then(()=>{if(a){t.main.workspacesOwnerId==t.main.user.id&&(t.ownWorkspaces=t.main.workspaceList.slice(),t.currentOwnWorkspace=t.main.currentWorkspace),this.renderPruefungen();let l=this.pruefungen.find(h=>["preparing","running"].indexOf(h.state)<0);l!=null&&this.classPanel.selectElement(l,!0)}else this.renderClasses(this.classData),this.onHomeButtonClicked()})})}onSelectPruefung(t){this.currentPruefung=t;let e=this.main.projectExplorer;if(t.state=="preparing"||t.state=="running")alert(Ii.testIsInState(Zm[t.state])),e.fileTreeview.clear(),e.fileTreeview.setCaption("---"),e.workspaceTreeview.clear(),this.studentPanel.clear(),this.main.getMainEditor().setModel(H.createModel(Ii.noFile(),"text"));else{let i=this.classData.find(n=>n.id==t.klasse_id);i!=null&&(this.renderStudents(i.students),i.students.length>0&&this.studentPanel.selectElement(i.students[0],!0))}}renderStudents(t){this.studentPanel.clear(),this.studentPanel.setCaption(t.length+" "+Ii.students()),t.sort(this.studentPanel.config.comparator);for(let e=0;ee.name.localeCompare(i.name));for(let e of t)this.classPanel.addNode(!1,e.name,"img_class-dark",e)}renderPruefungen(){this.classPanel.clear(),this.pruefungen.forEach(t=>this.addPruefungToClassPanel(t))}addPruefungToClassPanel(t){this.classPanel.addNode(!1,t.name,"img_test-state-preparing",t),this.updateClassNameAndState(t)}updateClassNameAndState(t){let e=this.classPanel.findNodeByElement(t);if(!e)return;let i=this.classData.find(n=>n.id==t.klasse_id);i!=null&&(e.renderCaptionAsHtml=!0,e.caption=`${t.name} (${i.name})`),e.iconClass="img_test-state-"+t.state,e.iconTooltip=Zm[t.state]}async fetchPruefungen(){let t=await et("/servlet/getPruefungenForLehrkraft",{});this.pruefungen=t.pruefungen}async onHomeButtonClicked(){let t=this.main.projectExplorer;await this.main.networkManager.sendUpdatesAsync(),this.main.bottomDiv.hideHomeworkTab(),t.workspaceTreeview.addElementsButton.setVisible(!0),t.workspaceTreeview.addFolderButton.setVisible(!0),this.homeButton.setVisible(!1),t.fileTreeview.addElementsButton.setVisible(this.main.workspaceList.length>0),t.fileTreeview.addFolderButton.setVisible(this.main.workspaceList.length>0),this.main.teacherExplorer.restoreOwnWorkspaces(),this.main.networkManager.updateFrequencyInSeconds=this.main.networkManager.ownUpdateFrequencyInSeconds}}class xv{constructor(t,e){r(this,"$buttonEditorFullscreen");r(this,"$buttonPresentationMode");r(this,"$buttonMonitorMode");r(this,"$buttonMap",{});r(this,"highContrast",!1);r(this,"editorHasFullWidth",!1);r(this,"rightDivWidth");r(this,"editorWidth");this.$buttonsContainer=t,this.main=e,this.$buttonEditorFullscreen=y(`
`),this.$buttonPresentationMode=y(`
`),this.$buttonMonitorMode=y(`
`),t.append(this.$buttonEditorFullscreen,this.$buttonPresentationMode,this.$buttonMonitorMode),this.$buttonMap={presentation:this.$buttonPresentationMode,monitor:this.$buttonMonitorMode};let i=this.main.actionManager;i.registerAction("editor.fullwidth",[],fn.fullWidth(),()=>{this.toggleEditorFullwidth()}),i.registerButton("editor.fullwidth",this.$buttonEditorFullscreen),i.registerAction("viewmode.presentation",[],fn.presentation(),()=>{this.setMode("presentation")}),i.registerButton("viewmode.presentation",this.$buttonPresentationMode),i.registerAction("viewmode.monitor",[],fn.monitor(),()=>{this.setMode("monitor")}),i.registerButton("viewmode.monitor",this.$buttonMonitorMode)}toggleEditorFullwidth(){this.editorHasFullWidth?(this.$buttonEditorFullscreen.removeClass("img_whole-window-back-dark"),this.$buttonEditorFullscreen.addClass("img_whole-window-dark"),this.$buttonEditorFullscreen.attr("title",fn.fullWidth()),y("#rightdiv").css("width",this.rightDivWidth+"px"),y("#editor>.monaco-editor").css("width",this.editorWidth+"px"),y("#rightdiv").show(600),y("#leftpanel").show(600),y("#controls").show()):(this.$buttonEditorFullscreen.removeClass("img_whole-window-dark"),this.$buttonEditorFullscreen.addClass("img_whole-window-back-dark"),this.$buttonEditorFullscreen.attr("title",fn.defaultWidth()),this.rightDivWidth=Number.parseInt(y("#rightdiv").css("width").replace("px","")),this.editorWidth=Number.parseInt(y("#editor>.monaco-editor").css("width").replace("px","")),y("#rightdiv").hide(600),y("#leftpanel").hide(600),y("#controls").hide(),this.main.getInterpreter().stop(!1)),setTimeout(()=>{this.main.getMainEditor().layout()},800),this.editorHasFullWidth=!this.editorHasFullWidth}setMode(t,e=!0){let i=t=="presentation"?"monitor":"presentation";this.$buttonMap[t].addClass("jo_pressed"),this.$buttonMap[i].removeClass("jo_pressed");let s=this.main.user.gui_state.viewModes,a=s[t];s.viewModeChosen=t,this.main.themeManager.switchTheme(a.theme),this.main.editor.setFontSize(a.fontSize),this.highContrast!=a.highContrast&&(this.main.getMainEditor().getAction("editor.action.toggleHighContrast").run(),this.highContrast=!this.highContrast),e&&this.saveSettings()}saveFontSize(t){let e=this.getChosenViewMode();e.fontSize=t,this.saveSettings()}setTheme(t){let e=this.getChosenViewMode();e.theme=t,this.main.themeManager.switchTheme(e.theme),this.saveSettings()}toggleHighContrast(){let t=this.getChosenViewMode();t.highContrast=!t.highContrast,this.main.getMainEditor().getAction("editor.action.toggleHighContrast").run(),this.saveSettings()}getChosenViewMode(){let t=this.main.user.gui_state.viewModes;return t[t.viewModeChosen]}saveSettings(){this.main.gui_state_dirty=!0}initViewMode(){let t=this.main.user.gui_state;t.viewModes==null&&(t.viewModes={monitor:null,presentation:null,viewModeChosen:"monitor"}),t.viewModes.monitor==null&&(t.viewModes.monitor={fontSize:14,highContrast:!1,theme:"dark"},t.viewModes.presentation={fontSize:18,highContrast:!1,theme:"light"},this.saveSettings()),this.setMode(t.viewModes.viewModeChosen,!1)}}class Tv{constructor(t){r(this,"backButtonListener");r(this,"oneTimeBackButtonListener");this.main=t;let e=this;history.pushState("PreventLeavingSite",""),window.addEventListener("popstate",i=>{i.state=="PreventLeavingSite"?(history.pushState("PreventLeavingSite",""),e.main.editor.pushHistoryState(!1,e.main.editor.getPositionForHistory())):this.oneTimeBackButtonListener==null&&this.backButtonListener(i),this.oneTimeBackButtonListener!=null&&(this.oneTimeBackButtonListener(),this.oneTimeBackButtonListener=null)})}registerBackButtonListener(t){this.backButtonListener=t}registerOneTimeBackButtonListener(t){this.oneTimeBackButtonListener=t,history.pushState({},"")}}class yg{}r(yg,"pruefungLaeuft",()=>d({de:"Prüfung läuft!",en:"Test is running!"}));class $v{constructor(t){r(this,"pruefung");r(this,"$pruefungLaeuft");r(this,"timer");this.main=t,y("#pruefunglaeuft").remove(),this.$pruefungLaeuft=y(`
${yg.pruefungLaeuft()}
`),y(".jo_projectexplorer").prepend(this.$pruefungLaeuft),Mi.subscribe("startPruefung",async e=>{this.startPruefung(e.pruefung)}),Mi.subscribe("stopPruefung",e=>{this.stopPruefung(!0)})}close(){this.pruefung!=null&&(Mi.unsubscribe("startPruefung"),Mi.unsubscribe("stopPruefung"),this.timer!=null&&clearInterval(this.timer),this.main.networkManager.sendUpdatesAsync(!0,!1,!1).then(()=>{let t=this.main.projectExplorer;t.workspaceTreeview.setVisible(!0),t.fetchAndRenderOwnWorkspaces()}),this.pruefung=null)}async startPruefung(t){if(this.pruefung!=null)return;let e=[];if(e.length==0&&(await this.main.networkManager.sendUpdatesAsync(!0,!1,!1),e=this.main.workspaceList.filter(a=>a.pruefung_id==t.id),e.length==0)){console.log("Workspace for Puefung not found, retrying...");return}if(this.pruefung!=null)return;this.pruefung=t;let i=e[0];this.main.workspaceList=[i],this.main.currentWorkspace=i;let n=this.main.projectExplorer;n.workspaceTreeview.clear(),n.fileTreeview.clear(),n.workspaceTreeview.setVisible(!1),n.fileTreeview.addElementsButton.setVisible(!0),n.fileTreeview.addFolderButton.setVisible(!0),this.main.bottomDiv.errorManager.clearErrors(),this.main.bottomDiv.console.clear(),this.main.jUnitTestrunner.clearOutput(),this.main.jUnitTestrunner.clearTree(),this.main.disassembler.clear(),n.setWorkspaceActive(i),i.saved=!1,this.main.getInterpreter().resetRuntime(),y("#pruefunglaeuft").css("display","block"),this.timer!=null&&(clearInterval(this.timer),this.timer=null);let s=()=>{let a={pruefungId:this.pruefung.id,running:!0};et("/servlet/reportPruefungState",a).then(l=>{l.pruefungState!="running"&&this.stopPruefung(!0)})};s(),this.timer=setInterval(s,5e3)}async stopPruefung(t){if(this.main.networkManager.savePruefungWorkspace(this.main.currentWorkspace),console.log("Stopping pruefung..."),this.timer!=null&&clearInterval(this.timer),this.timer=null,this.pruefung==null)return;this.main.getInterpreter().resetRuntime();let e={pruefungId:this.pruefung.id,running:!1};et("/servlet/reportPruefungState",e),this.pruefung=null,this.main.projectExplorer.workspaceTreeview.setVisible(!0),y("#pruefunglaeuft").css("display","none"),t&&(this.main.workspaceList=[],this.main.projectExplorer.renderWorkspaces(this.main.workspaceList),await this.main.projectExplorer.fetchAndRenderOwnWorkspaces())}}class Ev{constructor(t){r(this,"logoutAfterMinutes",20);r(this,"counterInMinutes",this.logoutAfterMinutes);let e=this;setInterval(()=>{e.counterInMinutes--,e.counterInMinutes==0&&(t?t.logout():e.logout())},60*1e3),document.body.addEventListener("keydown",()=>{e.reset()}),document.body.addEventListener("mousedown",()=>{e.reset()})}reset(){this.counterInMinutes=this.logoutAfterMinutes}logout(){Re("logout",{currentWorkspaceId:null},()=>{window.location.href="proxy.php?url=https%3A%2F%2Fwww.learnj.de%2Findex.html"})}}class Gi{}r(Gi,"pleaseWaitWhileSaving",()=>d({de:"Bitte warten, der letzte Bearbeitungsstand wird noch gespeichert ...",en:"Saving last edits -> please wait ..."})),r(Gi,"wrongUsernameOrPassword",()=>d({de:"Fehler: Benutzername und/oder Passwort ist falsch.",en:"Error: Wrong username and/or password"})),r(Gi,"pleaseWait",()=>d({de:"Bitte warten ...",en:"Please wait ..."})),r(Gi,"loginFailed",()=>d({de:"Login gescheitert: ",en:"Login failed: "})),r(Gi,"done",()=>d({de:"fertig!",en:"Done!"})),r(Gi,"webGLNotSupported",()=>d({de:"Von diesem Browser wird WebGL nicht unterstützt. Es kann daher sein, dass die Grafikfunktionen der Online-IDE nicht oder nur eingeschränkt funktionieren. Bitte verwenden Sie einen aktuellen Browser wie Chrome, Firefox, Edge oder Safari.",en:"WebGL is not supported by this browser. Therefore, the graphics functions of the online IDE may not work or only work to a limited extent. Please use a modern browser such as Chrome, Firefox, Edge or Safari."}));class vg{constructor(t,e,i,n){r(this,"hieararchyTexts",[k.ScopeUser,k.ScopeClass,k.ScopeSchool]);r(this,"values",{user:{},class:{},school:{},default:{}});this.user=t;for(let s of pg)this.setDefaultValues(s);this.values.user=e||{},this.values.class=i||{},this.values.school=n||{}}setDefaultValues(t){if(t.settingType==="setting"){let e=Xp[t.key];e!==void 0&&(this.values.default[t.key]=e)}else if(t.settingType==="group")for(let e of t.settings)this.setDefaultValues(e)}setValue(t,e,i){this.values[t][e]=i}getValue(t,e){var s,a;if(e)return this.values[e][t];let i=Jp[t]||"userClassSchoolDefault";((s=this.user)!=null&&s.is_teacher||(a=this.user)!=null&&a.is_schooladmin)&&(i="userClassSchoolDefault");let n=Jb[i];for(let l of n)if(this.values[l]&&this.values[l][t]!==void 0)return this.values[l][t]}}class Iv{constructor(t){r(this,"loggedInWithVidis",!1);r(this,"vidis_id_token","");this.main=t,new Ev(this)}initGUI(){let t=this;y("#login").css("display","flex"),y("#bitteWarten").css("display","none");let e=y("#login-spinner>img");y("#login-username").focus(),y("#login-username").on("keydown",n=>{n.key=="Enter"&&y("#login-password").focus()}),y("#login-password").on("keydown",n=>{n.key=="Enter"&&y("#login-button").trigger("click")}),y("#login-password").on("keydown",n=>{n.key=="Tab"&&(n.preventDefault(),y("#login-button").focus(),y("#login-button").addClass("jo_active")),n.key=="Enter"&&y("#login-button").trigger("click")}),y("#login-button").on("keydown",n=>{n.key=="Tab"?(n.preventDefault(),y("#login-username").focus(),y("#login-button").removeClass("jo_active")):y("#login-button").trigger("click")}),y("#jo_testuser-login-button").on("click",()=>{y("#login-username").val("Testuser"),y("#login-password").val(""),y("#login-button").trigger("click")});let i=!1;y("#login-button").on("click",()=>{Br.init(),e.show(),!i&&(i=!0,setTimeout(()=>{i=!1},1e3),this.sendLoginRequest(null))}),y("#buttonLogout").on("click",()=>{t.logout()})}logout(){let t=window.location.href.indexOf("silent")>=0;if(!this.main.user||this.main.user.is_testuser){window.location.assign("/"+(t?"?silent=true":""));return}this.main.interpreter.eventManager.fire("resetRuntime"),y("#bitteWartenText").html(Gi.pleaseWaitWhileSaving()),y("#bitteWarten").css("display","flex"),this.main.workspacesOwnerId!=this.main.user.id&&this.main.teacherExplorer.onHomeButtonClicked(),this.main.networkManager.sendUpdatesAsync().then(()=>{var i,n,s;(i=this.main.pruefungManagerForStudents)==null||i.stopPruefung(!1),this.main.rightDiv.classDiagram.clearAfterLogout();let e={currentWorkspaceId:((n=this.main.currentWorkspace)==null?void 0:n.pruefung_id)==null?(s=this.main.currentWorkspace)==null?void 0:s.id:null};Re("logout",e,()=>{this.loggedInWithVidis?window.location.assign("https://aai-test.vidis.schule/auth/realms/vidis/protocol/openid-connect/logout?ID_TOKEN_HINT="+this.main.user.vidis_sub+"&post_logout_redirect_uri=https%3A%2F%2Fwww.online-ide.de"):(y("#bitteWartenText").html(Gi.done()),window.location.assign("/"+(t?"?silent=true":"")))})}),Mi.getInstance().close(),uo.close()}sendLoginRequest(t){let e=this,i="login",n={username:y("#login-username").val(),password:y("#login-password").val(),singleUseToken:t};n.username=="",Re(i,n,s=>{var a,l,h,c,u,g;if(!s.success)y("#login-message").html(Gi.wrongUsernameOrPassword()),y("#login-spinner>img").hide();else{y("#login").hide(),y("#main").css("visibility","visible"),y("#bitteWartenText").html(Gi.pleaseWait()),y("#bitteWarten").css("display","flex");let f=s.user;f.is_testuser=s.isTestuser,(f.gui_state==null||f.gui_state.helperHistory==null)&&(f.gui_state={helperHistory:{consoleHelperDone:!1,newFileHelperDone:!1,newWorkspaceHelperDone:!1,speedControlHelperDone:!1,homeButtonHelperDone:!1,stepButtonHelperDone:!1,repositoryButtonDone:!1,folderButtonDone:!1},viewModes:null,classDiagram:null,language:"de"}),e.main.user=f,e.main.settings=new vg(f,s.userSettings,s.classSettings,s.schoolSettings),e.main.languagemanager.setLanguage(f.gui_state.language),Ws.sqlIdeURL=s.sqlIdeForOnlineIdeClient+"/servlet/",this.main.startupAfterLogin(),e.main.mainMenu.initGUI(f,""),(a=e.main.bottomDiv.gradingManager)==null||a.initGUI(),y("#bitteWarten").hide(),y("#login-spinner>img").hide(),y("#menupanel-username").html(Mh(Kl(f))),new Zy(e.main).init(),f.is_teacher&&e.main.initTeacherExplorer(s.classdata),e.main.workspacesOwnerId=f.id,e.main.restoreWorkspaces(s.workspaces,!0),e.main.networkManager.initializeTimer(),(h=(l=e.main.rightDiv)==null?void 0:l.classDiagram)==null||h.clear(),f.gui_state.classDiagram!=null&&((u=(c=e.main.rightDiv)==null?void 0:c.classDiagram)==null||u.deserialize(f.gui_state.classDiagram)),e.main.viewModeController.initViewMode(),e.main.bottomDiv.hideHomeworkTab(),e.main.networkManager.initializeSSE(),(g=this.main.pruefungManagerForStudents)==null||g.close(),!f.is_teacher&&!f.is_admin&&!f.is_schooladmin&&(this.main.pruefungManagerForStudents=new $v(this.main),s.activePruefung!=null&&(this.main.workspaceList.filter(A=>A.pruefung_id==s.activePruefung.id)[0].getWorkspaceData(!0),this.main.pruefungManagerForStudents.startPruefung(s.activePruefung))),jg()||alert(Gi.webGLNotSupported())}},s=>{y("#login-message").html(Gi.loginFailed()+s),y("#login-spinner>img").hide()})}loginWithVidisOrAutoLogin(t,e){this.loggedInWithVidis=e,y("#login").hide(),y("#main").css("visibility","visible"),y("#bitteWartenText").html(Gi.pleaseWait()),y("#bitteWarten").css("display","flex"),this.sendLoginRequest(t)}showLoginForm(){var t,e;y("#login").show(),y("#main").css("visibility","hidden"),y("#bitteWarten").css("display","none"),y("#login-message").empty(),this.main.interpreter.setState(Q.not_initialized),this.main.getMainEditor().setModel(H.createModel("","myJava")),this.main.projectExplorer.fileTreeview.clear(),this.main.projectExplorer.fileTreeview.setCaption(""),this.main.projectExplorer.workspaceTreeview.clear(),(e=(t=this.main.bottomDiv)==null?void 0:t.console)==null||e.clear(),this.main.interpreter.printManager.clear(),this.main.teacherExplorer!=null&&(this.main.teacherExplorer.removePanels(),this.main.teacherExplorer=null),this.main.currentWorkspace=null,this.main.user=null}}class Ag{constructor(t,e){r(this,"currentModule");r(this,"currentType");r(this,"disassembledSteps",[]);r(this,"stepToHtmlElementMap",new Map);r(this,"currentElementAtProgramPointer");r(this,"disassemblerDiv");r(this,"lastMarkedElement");this.main=e,t.innerHTML="",this.disassemblerDiv=R.makeDiv(t,"jo_disassemblerDiv","jo_scrollable"),this.main.getCompiler().eventManager.on("compilationFinishedWithNewExecutable",n=>{setTimeout(()=>{this.currentModule=void 0,this.disassemble()},300)}),this.main.getInterpreter().eventManager.on("showProgramPointer",()=>{let n=this.main.getInterpreter().scheduler.getNextStep();n?this.showProgramPointer(n):this.hideProgramPointer()}),this.main.getInterpreter().eventManager.on("stop",()=>{this.unmarkException()}),this.main.getInterpreter().eventManager.on("hideProgramPointer",()=>{this.hideProgramPointer()}),this.disassemble()}disassemble(){var e;let t=(e=this.main.getCurrentWorkspace())==null?void 0:e.getCurrentlyEditedModule();t&&this.disassembleModule(t)}disassembleModule(t){if(t&&t!=this.currentModule){this.clear(),this.currentModule=t,this.currentType=void 0;for(let e of t.getCodeFragments())this.dissassembleFragment(e,0)}}markProgramPointer(t){this.unmarkProgramPointer(),t.classList.add("jo_revealDisassemblerPosition"),this.lastMarkedElement=t}unmarkProgramPointer(){for(let t of this.disassemblerDiv.children)t.classList.remove("jo_revealDisassemblerPosition")}markException(t){this.unmarkException();let e=this.findHtmlElementForStep(t);e==null||e.classList.add("jo_revealDisassemblerException"),e==null||e.scrollIntoView({block:"nearest",inline:"nearest"})}unmarkException(){for(let t of this.disassemblerDiv.children)t.classList.remove("jo_revealDisassemblerException")}showElementpositionInMonacoModel(t,e){if(!t||!e)return;let i=this.main.getInterpreter().programPointerManager;if(!i)return;let n={programOrmoduleOrFile:t,range:e};i.show(n,{key:"disassemblerPosition",isWholeLine:!0,className:"jo_revealDisassemblerPosition",minimapColor:"#d6c91b56",rulerColor:"#d6c91b56",beforeContentClassName:"jo_revealDisassemblerPositionBefore"})}hideElementPositionsInMonacoModel(){var t;(t=this.main.getInterpreter().programPointerManager)==null||t.hide("disassemblerPosition")}showProgramPointer(t){this.hideProgramPointer(),this.currentElementAtProgramPointer=this.findHtmlElementForStep(t),this.currentElementAtProgramPointer&&(this.currentElementAtProgramPointer.classList.add("jo_revealProgramPointer"),this.currentElementAtProgramPointer.scrollIntoView({block:"nearest",inline:"nearest"}))}findHtmlElementForStep(t){let e=this.stepToHtmlElementMap.get(t);return e||(this.currentModule=void 0,this.disassembleModule(t.module),this.stepToHtmlElementMap.get(t))}hideProgramPointer(){this.currentElementAtProgramPointer&&this.currentElementAtProgramPointer.classList.remove("jo_revealProgramPointer"),this.currentElementAtProgramPointer=void 0}clear(){this.currentModule=void 0,this.disassemblerDiv.innerHTML="",this.disassembledSteps=[],this.stepToHtmlElementMap.clear(),this.currentType=void 0}dissassembleFragment(t,e){typeof this.currentType<"u"&&this.currentType!=t.type&&this.insertHorizontalLine(2),this.currentType!=t.type&&(this.currentType=t.type,this.insertTypeHeading(t.type,e)),this.insertSignature(t.signature,t.methodDeclarationRange,e),this.insertCode(t,e)}insertHorizontalLine(t){let e=R.makeDiv(this.disassemblerDiv,"jo_disassemblerHorizontalLine");e.style.borderTopWidth=t+"px"}insertTypeHeading(t,e){let i=R.makeDiv(this.disassemblerDiv,"jo_disassemblerHeading");i.style.marginLeft=e+"px",t instanceof je&&t.isMainClass?i.textContent="Main method:":i.textContent=t.getDeclaration();let n=t.module;t.identifierRange&&n&&(i.addEventListener("pointerdown",s=>{this.showElementpositionInMonacoModel(n.file,t.identifierRange),this.markProgramPointer(i)}),i.classList.add("jo_disassemblerLink"))}insertSignature(t,e,i){let n=R.makeDiv(this.disassemblerDiv,"jo_disassemblerSignature");H.colorize(t,"myJava",{tabSize:3}).then(a=>{n.innerHTML=a});let s=this.currentModule;e&&s&&(n.addEventListener("pointerdown",a=>{this.showElementpositionInMonacoModel(s==null?void 0:s.file,e),this.markProgramPointer(n)}),n.classList.add("jo_disassemblerLink"),n.style.marginLeft=i+"px")}insertCode(t,e){let i=0;for(let n of t.program.stepsSingle){let s=R.makeDiv(this.disassemblerDiv,"jo_disassemblerStep");s.style.marginLeft=e+"px";let a=R.makeSpan(s,"jo_disassemblerStepIndex");a.textContent=i+":";let l=R.makeSpan(s,"jo_disassemblerCodeSpan"),h=n.codeAsString.trim(),c=new RegExp("(.*)return "+(i+1)+";(s*)$","s"),u=h.match(c);u&&(h=u[1].trim());let g=h.replaceAll(/\/\/ Label \d*\s*/g,"");g!==h&&a.classList.add("jo_disassemblerStepWithLabel"),g=g.replaceAll(/(return) (\d*)/g,"jumpTo($2)"),h=g,i++,H.colorize(h,"javascript",{tabSize:3}).then(b=>{b=b.replaceAll(" "," "),l.innerHTML=b});let f=n.range;if(f){f.startLineNumber&&f.endLineNumber&&f.startColumn&&f.endColumn&&(this.disassembledSteps.push({element:s,range:f}),this.stepToHtmlElementMap.set(n,s));let b=this.currentModule;f.startLineNumber&&f.startColumn&&(s.addEventListener("pointerdown",A=>{this.showElementpositionInMonacoModel(b.file,f),this.markProgramPointer(s)}),s.classList.add("jo_disassemblerLink"))}(n.lambdaObject||n.innerClass)&&this.insertLambdaOrInnerClass(n,e+10)}}insertLambdaOrInnerClass(t,e){if(!t.innerClass)return;let i=t.innerClass;t.lambdaObject&&(i=t.lambdaObject.constructor);let n=i.type,s=t.innerClass?"Inner class:":"Lambda object:";this.insertHorizontalLine(1);let a=R.makeDiv(this.disassemblerDiv,"jo_disassemblerLambdaHeading");a.style.marginLeft=e+"px",a.textContent=s,this.insertSignature(n.getDeclaration(),n.identifierRange,e);let l=n.getOwnMethods().filter(h=>typeof h.program<"u").map(h=>({type:n,program:h.program,signature:h.getSignature(),methodDeclarationRange:h.identifierRange}));for(let h of l)this.insertSignature(h.signature,h.methodDeclarationRange,e),this.insertCode(h,e);this.insertHorizontalLine(1)}}class wg{constructor(t){r(this,"key","ExceptionMarker");this.main=t}markException(t,e){this.removeExceptionMarker();let i=t.file,n=t.range;if(!i||!n)return;let s=this.main.getInterpreter().programPointerManager;if(!s)return;this.main.showFile(i);let a={programOrmoduleOrFile:i,range:n};s.show(a,{key:this.key,isWholeLine:!0,className:"jo_revealExceptionPosition",minimapColor:"#d61bd056",rulerColor:"#d61bd056",beforeContentClassName:"jo_revealExceptionPositionBefore"}),setTimeout(()=>{var l;(l=this.main.getDisassembler())==null||l.markException(e),this.main.getInterpreter().eventManager.once("stop",()=>{this.removeExceptionMarker()})},1e3)}removeExceptionMarker(){var t,e;(e=(t=this.main.getInterpreter())==null?void 0:t.programPointerManager)==null||e.hide(this.key)}}class Fe{}r(Fe,"ExecuteAllTestsInWorkspace",()=>d({de:"Führt alle im aktuellen Workspace enthaltenen JUnit-Tests aus.",en:"Executes all JUnit-tests in current workspace."})),r(Fe,"allTests",()=>d({de:"Alle Tests",en:"All tests"})),r(Fe,"failed",()=>d({de:"schlug fehl",en:"failed"})),r(Fe,"expectedValue",()=>d({de:"Erwarteter Wert: ",en:"Expected Value: "})),r(Fe,"actualValue",()=>d({de:"Erhaltener Wert: ",en:"Actual value: "})),r(Fe,"runningAllTestsOfClass",t=>d({de:`Führe alle Tests der Klasse ${t} aus:`,en:`Running all tests of class ${t}:`})),r(Fe,"runningAllTestsOfWorkspace",t=>d({de:`Führe alle Tests des Workspaces ${t} aus:`,en:`Running all tests of workspace ${t}:`})),r(Fe,"executingTestMethod",(t,e)=>d({de:`Führe ${t}.${e} aus ...`,en:`Running ${t}.${e} ...`})),r(Fe,"couldntGetMainThread",()=>d({de:"Fehler: Konnte den main thread nicht erhalten.",en:"Error: Couldn't get main thread."})),r(Fe,"line",(t,e)=>d({de:`Zeile ${t}`,en:`line ${t}`})),r(Fe,"noTestsAvailableHtml",t=>d({de:`
In deinem Workspace gibt es noch keine JUnit-Tests. Wenn du wissen möchtest, was ein JUnit-Test ist und wie man einen schreibt, schau' dir die ausführliche Anleitung auf www.learnj.de dazu an.

Hier ein kurzer Beispieltest:
${t}

look here!.

Here a quick example:
${t}

Hint:
  • Each test-method is preceeded by a @Test-annotation.
  • To the left of the test-method's declaration you get a small button with which you can start the test.
  • A test method must be parameterless and must have return-type void.
  • If you also preceed your Test class with @Test then you get a button left to it's declaration which you can use to start all tests of this class.
`})),r(Fe,"noTestsAvailableExampleProgram",()=>d({de:`@Test class MyFirstTestClass { @Test void testSquareRoot() { double squareRootOfFour = Math.sqrt(4); assertEquals(2.0, squareRootOfFour, "There seems to be something wrong with Math.sqrt!"); } @Test void testDivision() { double n = 5 / 2 * 3; println(n); assertEquals(7.5, n, "5/2 * 3 doesn't yield 7.5 -> mysterious..."); } }`})),r(Fe,"testsFound",t=>d({de:`In diesem Workspace wurden ${t} Testmethoden gefunden.
Klicke auf die Test-Buttons , um sie zu starten!`,en:`${t} test methods found in this workspace.
Click the test-buttons to start them!`}));class Dv{constructor(t){r(this,"assertionResults",[]);this.main=t}notifyOnAssertTrue(t,e,i,n){i!==!0&&this.addFailedResult(t,e,"notifyOnAssertTrue","true","false",n)}notifyOnAssertFalse(t,e,i,n){i!==!1&&this.addFailedResult(t,e,"notifyOnAssertFalse","false","true",n)}notifyOnAssertEqualsBoolean(t,e,i,n,s){n!==i&&this.addFailedResult(t,e,"notifyOnAssertEquals",""+i,""+n,s)}notifyOnAssertEqualsNumber(t,e,i,n,s){Math.abs(n-i)>1e-14&&this.addFailedResult(t,e,"notifyOnAssertEquals",""+i,""+n,s)}notifyOnAssertEqualsString(t,e,i,n,s){i!==n&&this.addFailedResult(t,e,"notifyOnAssertEquals",i??"null",n??"null",s)}notifyOnAssertEqualsObject(t,e,i,n,s){i!==n&&this.addFailedResult(t,e,"notifyOnAssertEquals",i,n,s)}notifyOnFail(t,e,i){this.addFailedResult(t,e,"notifyOnFail","---","---",i)}addFailedResult(t,e,i,n,s,a){let l="",h=e.getValidRangeOrUndefined();h&&(l=` (${Fe.line(h.startLineNumber,h.startColumn)})`);let c=`
${i} ${Fe.failed()}${l}:
Details: ${a}
${Fe.expectedValue()}${n}
${Fe.actualValue()}${s}
`,u=R.makeDiv(void 0);u.innerHTML=c,h&&u.getElementsByClassName("jo_junitLink")[0].addEventListener("click",()=>{this.main.showProgramPosition(e.module.file,h)}),this.assertionResults.push({state:"failed",messageHtmlElement:u})}}class Ld{constructor(t,e,i,n,s){r(this,"children",[]);r(this,"treeviewNode");r(this,"testProgress",{overall:0,passed:0,failed:0});r(this,"assertionResults",[]);this.testrunner=t,this.parent=e,this.moduleManager=i,this.klass=n,this.method=s,this.treeviewNode=new Zl(t.testTreeview,!this.method,"","img_test-start",this,e),this.treeviewNode.onIconClicked=a=>{t.clearOutput(),a==null||a.runTests()},this.treeviewNode.onClickHandler=()=>{this.method?this.jumpToMethod(this.method):this.klass&&this.testrunner.main.showProgramPosition(this.klass.module.file,this.klass.identifierRange)},this.addChildren(),this.setCaption()}jumpToMethod(t){this.method&&this.testrunner.main.showProgramPosition(this.method.module.file,this.method.identifierRange)}addChildren(){var t;if(!this.method){if(this.klass){for(let e of this.klass.getOwnMethods().filter(i=>{var n;return!i.isConstructor&&i.hasAnnotation("Test")&&((n=i.returnParameterType)==null?void 0:n.identifier)=="void"&&i.parameters.length==0}))this.children.push(new Ld(this.testrunner,this,void 0,void 0,e));return}if((t=this.moduleManager)!=null&&t.modules)for(let e of this.moduleManager.modules)for(let i of e.types.filter(n=>n instanceof je))i.getOwnMethods().filter(s=>{var a;return!s.isConstructor&&s.hasAnnotation("Test")&&((a=s.returnParameterType)==null?void 0:a.identifier)=="void"&&s.parameters.length==0}).length>0&&this.children.push(new Ld(this.testrunner,this,void 0,i,void 0))}}setCaption(){let t="";this.method?t=`${this.method.identifier}`:this.klass?t=`${this.klass.identifier}`:t=Fe.allTests(),this.treeviewNode.renderCaptionAsHtml=!0,this.treeviewNode.caption=`${t}`,this.calculateTestProgress();let e=`${this.testProgress.passed}${this.testProgress.overall-this.testProgress.passed-this.testProgress.failed}${this.testProgress.failed}`;this.treeviewNode.setRightPartOfCaptionHtml(e)}async runTests(t){let e=!t;if(e&&(this.reset(),this.calculateTestProgress(),this.testrunner.progressbar.showProgress(this.testProgress.overall,this.testProgress.passed,this.testProgress.failed)),this.method)this.treeviewNode.setSelected(!0),this.treeviewNode.scrollIntoView(),await this.runSingleTest(this.method),t&&t(this.testProgress.passed>0),this.setCaption(),e&&this.testrunner.progressbar.showProgress(this.testProgress.overall,this.testProgress.passed,this.testProgress.failed);else for(let n of this.children)await n.runTests(s=>{this.setCaption(),e?this.testrunner.progressbar.showProgress(this.testProgress.overall,this.testProgress.passed,this.testProgress.failed):t&&t(s)});let i=this.parent;for(;i!=null;)i.setCaption(),i=i.parent}async runSingleTest(t){return new Promise((i,n)=>{let s=new Dv(this.testrunner.main),a=this.testrunner.main.getInterpreter();a.attachAssertionObserver(s);let l=a.scheduler.initJUnitTestMethodAndReturnMainThread(a.executable,t,()=>{let h=s.assertionResults;if(this.testrunner.eraseExecutingTestCaption(),(l==null?void 0:l.state)==B.terminatedWithException){let c=R.makeDiv(void 0);if(c.innerHTML=`
Test exited with exception:
`,l.exception){let u=um.getHtmlWithLinks(l.exception,l.stackTrace,this.testrunner.main);u.classList.add("jo_junitFailBlock"),c.append(u)}h.push({state:"failed",messageHtmlElement:c}),h.push()}this.evaluateAssertionResults(h),i()});if(!l){i(),this.testrunner.printError("Error: couldn't get main tread.");return}this.method&&this.testrunner.printExecutingTestCaption(this.method),a.setState(Q.paused),l.state=B.running,a.start()})}evaluateAssertionResults(t){t.length==0?this.testProgress.passed++:(this.testProgress.failed++,this.assertionResults=t),this.printResults(),this.setCaption()}printResults(){var t,e;if(this.method){let i=Fe.executingTestMethod(this.method.classEnumInterface.identifier,this.method.identifier);this.assertionResults.length==0?i+='':i+='',this.testrunner.printLine(i,"jo_junitReportFirstLine").getElementsByClassName("jo_junitLink")[0].addEventListener("click",()=>{this.method&&this.jumpToMethod(this.method)});for(let a of this.assertionResults)this.testrunner.printResult(a)}else{this.klass?this.testrunner.printLine(Fe.runningAllTestsOfClass(this.klass.identifier),"jo_junitCaption"):this.testrunner.printLine(Fe.runningAllTestsOfWorkspace(((e=(t=this.moduleManager)==null?void 0:t.workspace)==null?void 0:e.getIdentifier())||"---"),"jo_junitCaption");for(let i of this.children)i.printResults()}}calculateTestProgress(){this.method?this.testProgress.overall=1:(this.testProgress.passed=0,this.testProgress.failed=0,this.testProgress.overall=0,this.children.forEach(t=>{t.calculateTestProgress(),this.testProgress.overall+=t.testProgress.overall,this.testProgress.passed+=t.testProgress.passed,this.testProgress.failed+=t.testProgress.failed}))}reset(){this.testProgress={overall:0,passed:0,failed:0},this.children.forEach(t=>t.reset())}}const km="data:image/gif;base64,R0lGODlhEAAQAPQAAAAAANDQ0AQEBKKiomNjY8vLy7CwsCAgIEZGRr29vW9vb3x8fBUVFVNTUy0tLZWVlYmJiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAAFUCAgjmRpnqUwFGwhKoRgqq2YFMaRGjWA8AbZiIBbjQQ8AmmFUJEQhQGJhaKOrCksgEla+KIkYvC6SJKQOISoNSYdeIk1ayA8ExTyeR3F749CACH5BAkKAAAALAAAAAAQABAAAAVoICCKR9KMaCoaxeCoqEAkRX3AwMHWxQIIjJSAZWgUEgzBwCBAEQpMwIDwY1FHgwJCtOW2UDWYIDyqNVVkUbYr6CK+o2eUMKgWrqKhj0FrEM8jQQALPFA3MAc8CQSAMA5ZBjgqDQmHIyEAIfkECQoAAAAsAAAAABAAEAAABWAgII4j85Ao2hRIKgrEUBQJLaSHMe8zgQo6Q8sxS7RIhILhBkgumCTZsXkACBC+0cwF2GoLLoFXREDcDlkAojBICRaFLDCOQtQKjmsQSubtDFU/NXcDBHwkaw1cKQ8MiyEAIfkECQoAAAAsAAAAABAAEAAABVIgII5kaZ6AIJQCMRTFQKiDQx4GrBfGa4uCnAEhQuRgPwCBtwK+kCNFgjh6QlFYgGO7baJ2CxIioSDpwqNggWCGDVVGphly3BkOpXDrKfNm/4AhACH5BAkKAAAALAAAAAAQABAAAAVgICCOZGmeqEAMRTEQwskYbV0Yx7kYSIzQhtgoBxCKBDQCIOcoLBimRiFhSABYU5gIgW01pLUBYkRItAYAqrlhYiwKjiWAcDMWY8QjsCf4DewiBzQ2N1AmKlgvgCiMjSQhACH5BAkKAAAALAAAAAAQABAAAAVfICCOZGmeqEgUxUAIpkA0AMKyxkEiSZEIsJqhYAg+boUFSTAkiBiNHks3sg1ILAfBiS10gyqCg0UaFBCkwy3RYKiIYMAC+RAxiQgYsJdAjw5DN2gILzEEZgVcKYuMJiEAOwAAAAAAAAAAAA==";class jv{constructor(t){r(this,"mainDiv");r(this,"textDiv");r(this,"barDiv");r(this,"graphicDiv");this.mainDiv=R.makeDiv(t,"jo_junitProgressbarMain");let e=R.makeDiv(this.mainDiv,"jo_junitProgressbarBarOuter");this.barDiv=R.makeDiv(e,"jo_junitProgressbarBarInner"),this.textDiv=R.makeDiv(e,"jo_junitProgressbarText"),this.graphicDiv=R.makeDiv(e,"jo_junitProgressbarGraphic"),this.graphicDiv.innerHTML=``}hide(){this.mainDiv.style.display="none"}show(){this.mainDiv.style.display="block"}showProgress(t,e,i){this.mainDiv.style.display="block";let n=Math.round((e+i)/t*100);i>0?this.barDiv.style.backgroundColor="#ed2f2f4c":this.barDiv.style.backgroundColor="#21ff294c",this.barDiv.style.width=n+"%";let s=`${n} % (${e}${t-e-i}${i})`;this.graphicDiv.style.display=n<100?"block":"none",this.textDiv.innerHTML=s}}class kg{constructor(t,e){r(this,"decorationInfoList",[]);r(this,"mouseDownHandler",new Map);r(this,"mainDiv");r(this,"outputDiv");r(this,"rightDiv");r(this,"testTreeview");r(this,"executingTestDiv");r(this,"progressbar");this.main=t,this.registerHandler(),this.initGUI(e)}initGUI(t){if(this.mainDiv)return;this.mainDiv=R.makeDiv(t,"jo_junitTestrunnerMain");let e=R.makeDiv(this.mainDiv,"jo_junitTestrunnerLeft");this.rightDiv=R.makeDiv(this.mainDiv,"jo_junitTestrunnerRight"),this.progressbar=new jv(this.rightDiv),this.outputDiv=R.makeDiv(this.rightDiv,"jo_junitTestrunnerOutput","jo_scrollable"),this.testTreeview=new Zt(e,{captionLine:{enabled:!1},initialExpandCollapseState:"expanded",buttonAddFolders:!1,buttonAddElements:!1,withDeleteButtons:!1,isDragAndDropSource:!1,contextMenu:{},withSelection:!0,orderBy:"comparator"}),this.testTreeview.contextMenuProvider=(i,n)=>[{caption:i.children.length>0?"Tests starten":"Test starten",callback:(s,a)=>{s.runTests()}}],new Vr(e,!1,!1,()=>{})}registerHandler(){this.main.getActionManager().registerAction("interpreter.startTests",[],Fe.ExecuteAllTestsInWorkspace(),e=>{this.executeAllTests()});let t=this.main.getMainEditor();t.onMouseDown(e=>{var s;if(e.target.type!=H.MouseTargetType.GUTTER_LINE_DECORATIONS)return;let i=t.getModel(),n=(s=this.main.getCurrentWorkspace())==null?void 0:s.getModuleForMonacoModel(i);n&&this.onMarginMouseDown(n,e.target.position.lineNumber)}),this.main.getInterpreter().eventManager.on("afterExcecutableInitialized",this.onAfterExecutableInitialized,this)}onMarginMouseDown(t,e){let i=this.mouseDownHandler.get(t);if(i){let n=i.get(e);n&&n()}}onAfterExecutableInitialized(t){this.markTestsInEditor(t),this.testTreeview.clear(),new Ld(this,void 0,t.moduleManager,void 0,void 0)}markTestsInEditor(t){if(this.decorationInfoList.forEach(e=>{e.model.isDisposed()||e.model.deltaDecorations(e.decorations,[])}),this.decorationInfoList=[],this.mouseDownHandler.clear(),t){let e=t.getTestMethods(),i=0;if(e.forEach((n,s)=>i+=n.length),i==0){let n=Fe.noTestsAvailableExampleProgram();H.colorize(n,"myJava",{}).then(s=>{this.outputDiv.setHTMLUnsafe(Fe.noTestsAvailableHtml(s))})}else this.outputDiv.setHTMLUnsafe(Fe.testsFound(i));e.forEach((n,s)=>{let a=[],l=s.module.file;if(!(l instanceof Ge))return;let h=l.getMonacoModel();if(!h)return;let c=s.getAnnotation("Test");c&&a.push(this.getDecoration(!1,s.module,c.range.startLineNumber,"Alle JUnit-Tests der Klasse ausführen",()=>{this.executeAllTestsOfClass(s)}));for(let u of n){let g=u.getAnnotation("Test");g&&a.push(this.getDecoration(!1,s.module,g==null?void 0:g.range.startLineNumber,"Diesen JUnit-Test ausführen",()=>{this.executeTestMethod(u)}))}this.decorationInfoList.push({model:h,decorations:h.deltaDecorations([],a)})})}}getDecoration(t,e,i,n,s){let a=this.mouseDownHandler.get(e);return a||(a=new Map,this.mouseDownHandler.set(e,a)),a.set(i,s),{range:{startLineNumber:i,endLineNumber:i,startColumn:1,endColumn:1},options:{marginClassName:"jo_margin_start_test",stickiness:H.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges}}}printLine(t,e){let i=R.makeDiv(this.outputDiv,e);return i.innerHTML=t,i}printResult(t){t.messageHtmlElement&&this.outputDiv.appendChild(t.messageHtmlElement)}printExecutingTestCaption(t){this.executingTestDiv=R.makeDiv(this.outputDiv),this.executingTestDiv.style.marginTop="5px",this.executingTestDiv.innerHTML=Fe.executingTestMethod(t.classEnumInterface.identifier,t.identifier)+``}eraseExecutingTestCaption(){var t;(t=this.executingTestDiv)==null||t.remove()}printError(t){let e=R.makeDiv(this.outputDiv);e.innerHTML=Fe.couldntGetMainThread()}clearOutput(){this.outputDiv.innerHTML=""}findTreeviewEntry(t,e){var i,n,s;return e?(i=this.testTreeview.nodes.find(a=>{var l;return((l=a.externalObject)==null?void 0:l.method)==e}))==null?void 0:i.externalObject:t?(n=this.testTreeview.nodes.find(a=>{var l;return((l=a.externalObject)==null?void 0:l.klass)==t}))==null?void 0:n.externalObject:(s=this.testTreeview.nodes.find(a=>{var l,h;return!((l=a.externalObject)!=null&&l.klass)&&!((h=a.externalObject)!=null&&h.method)}))==null?void 0:s.externalObject}async executeAllTests(){var e;let t=(e=this.testTreeview.nodes.find(i=>{var n;return(n=i.getParent())==null?void 0:n.isRootNode()}))==null?void 0:e.externalObject;await this.executeTests(t)}async executeAllTestsOfClass(t){let e=this.findTreeviewEntry(t,void 0)||void 0;await this.executeTests(e)}async executeTestMethod(t){let e=this.findTreeviewEntry(void 0,t)||void 0;await this.executeTests(e)}async executeTests(t){this.main.getInterpreter().printManager.clear(),this.main.showJUnitDiv(),t&&(t.treeviewNode.setSelected(!0),this.clearOutput(),await(t==null?void 0:t.runTests()))}clearTree(){var t;(t=this.testTreeview)==null||t.clear()}}class Co{constructor(){r(this,"repositoryOn",!0);r(this,"workspaceList",[]);r(this,"workspacesOwnerId");r(this,"editor");r(this,"currentWorkspace");r(this,"projectExplorer");r(this,"teacherExplorer");r(this,"networkManager");r(this,"actionManager");r(this,"mainMenu");r(this,"synchronizationManager");r(this,"repositoryCreateManager");r(this,"repositoryUpdateManager");r(this,"repositoryCheckoutManager");r(this,"pruefungManagerForStudents");r(this,"spriteManager");r(this,"windowStateManager",new Tv(this));r(this,"login");r(this,"debugger");r(this,"disassembler");r(this,"bottomDiv");r(this,"user");r(this,"gui_state_dirty",!1);r(this,"themeManager");r(this,"rightDiv");r(this,"programControlButtons");r(this,"debounceDiagramDrawing");r(this,"viewModeController");r(this,"languagemanager");r(this,"language");r(this,"interpreter");r(this,"settings");r(this,"jUnitTestrunner")}showFile(t){!t||!(t instanceof Ge)||this.projectExplorer.setFileActive(t)}getDisassembler(){return this.disassembler}addWorkspace(t){this.workspaceList.push(t)}getInterpreter(){return this.interpreter}getLanguage(){return this.language}getCompiler(){return this.language.getCompiler(this)}getRepl(){var t;return(t=this.language)==null?void 0:t.getRepl(this)}getMainEditor(){return this.editor.editor}getReplEditor(){return this.bottomDiv.console.editor}isEmbedded(){return!1}getDebugger(){return this.debugger}getRightDiv(){return this.rightDiv}getBottomDiv(){return this.bottomDiv}getActionManager(){return this.actionManager}setFileActive(t){this.projectExplorer.setFileActive(t)}getSettings(){return this.settings}startupBeforeLogin(){Af(),this.languagemanager=new Cf(this,document.body),this.login=new Iv(this);let t=Wl("singleUseToken"),e=Wl("vidis")=="true";e&&(this.login.vidis_id_token=Wl("vidis-id-token")||""),t?(this.login.initGUI(),this.login.loginWithVidisOrAutoLogin(t,e)):this.login.initGUI()}startupAfterLogin(){this.actionManager=new kp(null),this.actionManager.init(),this.mainMenu=new fv(this),this.projectExplorer=new vv(this,y("#leftpanel>.jo_projectexplorer")),this.projectExplorer.initGUI(),this.bottomDiv=new Cg(this,y("#bottomdiv-outer>.jo_bottomdiv-inner"),!0,!0,!0,!1),this.networkManager=new Dy(this,this.bottomDiv.$updateTimer),this.rightDiv=new bg(this,document.body,!0),this.rightDiv.initGUI(),window.UZIP=null,this.viewModeController=new xv(y("#view-mode"),this),this.editor=new lg(this,!0,!1),this.editor.initGUI(y("#editor"));let t=this;y(window).on("resize",g=>{y("#bottomdiv-outer").css("height","150px"),y("#editor").css("height",window.innerHeight-150-30-2+"px"),t.editor.editor.layout(),y("#editor").css("height","")}),y(window).trigger("resize"),this.themeManager=new lp(y(".joeCssFence")[0]),this.themeManager.switchTheme("dark");let e=new dp(this);this.debugger=new wp(y("#leftpanel>.jo_debugger")[0],!0,this),this.debugger.hide();let i=new hg(y("#rightdiv-inner .jo_run"),this),n=new gg(y("#rightdiv-inner .jo_run"),this),s=new dg(this),a=new Cp(y("#rightdiv-inner .jo_graphics")[0],y("#rightdiv-inner .jo_coordinates")[0]),l=new _p(y(window),this),h=new qp(this),c=new wg(this);this.interpreter=new ra(n,this.actionManager,a,l,e,this.debugger,h,i,s,c,this);let u=new mm;this.language=Dd.registerMain(this,u),this.jUnitTestrunner=new kg(this,this.bottomDiv.jUnitTab.bodyDiv),this.getCompiler().eventManager.on("compilationFinishedWithNewExecutable",this.onCompilationFinished,this),this.getCompiler().eventManager.on("compilationFinished",()=>{var g;(g=this.getInterpreter())==null||g.onFileSelected()},this),this.disassembler=new Ag(this.bottomDiv.disassemblerTab.bodyDiv,this),this.programControlButtons=new fg(y("#controls"),this.interpreter,this.actionManager),new zp(this),this.getMainEditor().updateOptions({readOnly:!0}),this.bottomDiv.initGUI(),this.repositoryOn&&(this.synchronizationManager=new Wy(this),this.repositoryCreateManager=new Ry(this),this.repositoryCreateManager.initGUI(),this.repositoryUpdateManager=new Gy(this),this.repositoryUpdateManager.initGUI(),this.repositoryCheckoutManager=new Ny(this),this.repositoryCheckoutManager.initGUI()),this.spriteManager=new $l(this),setTimeout(()=>{this.getMainEditor().layout(),new Cv(this).initSliders()},200),y(window).on("unload",async function(){navigator.sendBeacon&&t.user!=null&&(await t.networkManager.sendUpdatesAsync(!1,!0),t.interpreter.eventManager.fire("resetRuntime"),uo.close(),Mi.getInstance().close())})}initTeacherExplorer(t){this.teacherExplorer!=null&&this.teacherExplorer.removePanels(),this.teacherExplorer=new Sv(this,t),this.teacherExplorer.initGUI()}onCompilationFinished(t){this.interpreter.setExecutable(t),setTimeout(()=>{var i,n;let e=(n=(i=this.bottomDiv)==null?void 0:i.errorManager)==null?void 0:n.showErrors(this.currentWorkspace);this.projectExplorer.renderErrorCount(this.currentWorkspace,e),this.drawClassDiagrams(!this.rightDiv.isClassDiagramActive())},20)}drawClassDiagrams(t){clearTimeout(this.debounceDiagramDrawing),this.debounceDiagramDrawing=setTimeout(()=>{var e,i;(i=(e=this.rightDiv)==null?void 0:e.classDiagram)==null||i.drawDiagram(this.currentWorkspace,t)},500)}removeWorkspace(t){this.workspaceList.splice(this.workspaceList.indexOf(t),1)}restoreWorkspaces(t,e){this.workspaceList=[],this.currentWorkspace=null,this.getMainEditor().updateOptions({readOnly:!0});for(let i of t.workspaces){let n=wi.restoreFromData(i,this);this.workspaceList.push(n),i.id==this.user.currentWorkspace_id&&(this.currentWorkspace=n)}e&&new Qy().start(this.workspaceList,this.networkManager,this),this.projectExplorer.renderWorkspaces(this.workspaceList),this.currentWorkspace==null&&this.workspaceList.length>0&&(this.currentWorkspace=this.workspaceList[0]),this.currentWorkspace!=null?this.projectExplorer.setWorkspaceActive(this.currentWorkspace,!0):this.projectExplorer.setFileActive(null),this.workspaceList.length==0&&ar.showHelper("newWorkspaceHelper",this,y(this.projectExplorer.workspaceTreeview.addFolderButton.parent)),!this.user.gui_state.helperHistory.folderButtonDone&&this.projectExplorer.workspaceTreeview.size(!0)>5?ar.showHelper("folderButton",this,y(this.projectExplorer.workspaceTreeview.addFolderButton.parent)):Math.random()<.9&&ar.showHelper("spritesheetHelper",this)}restoreWorkspaceFromData(t){return wi.restoreFromData(t,this)}getCurrentWorkspace(){return this.currentWorkspace}adjustWidthToWorld(){this.rightDiv.adjustWidthToWorld()}showJUnitDiv(){this.bottomDiv.showJunitTab()}showProgramPosition(t,e,i=!0){this.showFile(t),e&&(e.startLineNumber&&(e=ee.getStartPosition(e)),i&&this.getMainEditor().setPosition(e),this.getMainEditor().revealPositionInCenterIfOutsideViewport(e),this.getMainEditor().focus())}markFilesAsStartable(t,e){this.projectExplorer.markFilesAsStartable(t,e)}onStartFileClicked(t){this.interpreter.start(t)}hideDebugger(){this.debugger.hide(),this.projectExplorer.show()}showDebugger(){this.debugger.show(),this.projectExplorer.hide()}}class ar{static openHelper(t,e,i){let n=y(".jo_arrow_box");n.removeClass(["jo_arrow_box_left","jo_arrow_box_right","jo_arrow_box_top","jo_arrow_box_bottom"]),n.addClass("jo_arrow_box_"+i),n.css({left:"",right:"",top:"",bottom:""});let s=e.offset(),a=y("body"),l=34;switch(i){case"bottom":n.css({left:s.left+e.width()/2-l,bottom:a.height()-s.top+l});break;case"top":n.css({left:s.left+e.width()/2-l,top:s.top+e.height()+26});break;case"left":n.css({left:s.left+e.width()+l,top:s.top+e.height()/2-l});break;case"right":n.css({right:a.width()-s.left,top:s.top+e.height()/2-l});break}n.find("span").html(t);let h=n.find(".jo_button");h.on("click",c=>{c.stopPropagation(),h.off("click"),ar.close()}),n.fadeIn(800)}static close(){y(".jo_arrow_box").fadeOut(800)}static showHelper(t,e,i){i=i instanceof y?i:y(i);let n;if(e instanceof Co)n=e;else return;let s=n.user.gui_state.helperHistory;if(t=="speedControlHelper"&&s.speedControlHelperDone&&(t="stepButtonHelper"),t=="spritesheetHelper"&&!s.newFileHelperDone)return;let a=t+"Done";if(s!=null&&(s[a]==null||!s[a])){s[a]=!0,n.networkManager.sendUpdateGuiState();let l="",h="left";switch(t){case"folderButton":l=T.HelperFolder(),h="top";break;case"repositoryButton":l=T.HelperRepositoryButton(),h="top";break;case"speedControlHelper":l=T.HelperSpeedControl(),h="top",i=n.programControlButtons.speedControl.$grip;break;case"newFileHelper":l=T.HelperNewFile(),h="left";break;case"newWorkspaceHelper":l=T.HelperNewWorkspace(),h="left";break;case"homeButtonHelperNew":l=T.HelperHome(),h="top";break;case"stepButtonHelper":l=T.HelperStepButtons(),h="top",i=n.programControlButtons.getButton("interpreter.stepOver");break;case"consoleHelper":l=T.HelperConsole(),h="bottom",i=y(n.bottomDiv.console.consoleCommandline);break;case"spritesheetHelper":l=T.HelperSpritesheet(),h="top",i=y("#mainmenu").find('div:contains("Sprites")');break}l!=""&&i!=null&&i.length>0&&ar.openHelper(l,i,h)}}}class Wi{static isArray(t){return Array.isArray(t)}static isObject(t){return!(typeof t!="object"||!t.constructor.type||t.constructor.isPrimitiveTypeWrapper)}static isEnum(t){return t instanceof Vi}static isPrimitiveTypeOrNull(t){return t===null?!0:!(typeof t=="object"||Array.isArray(t))}static getTypeAsString(t){return Wi.getTypeIntern(t)}static getTypeIntern(t){if(t==null)return"null";if(Array.isArray(t)){if(t.length==0)return"[]";let e=t[0];return Wi.getTypeIntern(e)+"[]"}if(typeof t=="object")return t.constructor.type?t.constructor.type.toString():"Object";switch(typeof t){case"string":return"String";case"boolean":return"boolean";case"number":return Math.trunc(t)==t?"int":"double"}return""}static hasChildren(t){return t&&(Wi.isArray(t)||Wi.isObject(t)&&!Wi.isPrimitiveTypeOrNull(t)&&!Wi.isEnum(t))}static getChildren(t){let e=[];if(Array.isArray(t)){let i=0;for(let n of t)e.push({identifier:""+i++,value:n})}else if(Wi.isObject(t)){let i=t.constructor.type;if(t.getElements){let n=0;for(let s of t.getElements())e.push({identifier:"["+n+++"]",value:s})}else{let n=i.getFields();i instanceof Gt&&(n=i.getOwnAndInheritedFields());for(let s of n)s.internalName&&e.push({identifier:s.identifier,value:t[s.internalName]})}}return e}static renderValue(t,e=20,i,n){if(t==null)return"null";if(typeof t=="object"&&!Array.isArray(t)){let s=t.constructor.type;return t instanceof Vi?Wi.renderEnum(t,s).substring(0,e):s.isPrimitiveTypeWrapper?t.debugOutput().substring(0,e):s.toString()+"-object"}else return Array.isArray(t)?"["+t.length+"]":Wi.renderPrimitiveValue(t,i).substring(0,e)}static renderPrimitiveValue(t,e){switch(typeof t){case"string":let i=JSON.stringify(t);return e&&e.identifier=="char"&&(i.startsWith('"')&&i.endsWith('"')&&(i=i.substring(1,i.length-2)),i="'"+i+"'"),i;default:return""+t}}static renderEnum(t,e){return e.identifier+"."+t.name}}class Us{constructor(t,e,i,n,s,a,l,h=null){r(this,"caption");r(this,"parent");r(this,"children");r(this,"canOpen");r(this,"isOpen",!1);r(this,"identifier");r(this,"value");r(this,"$consoleEntry");this.isCommand=t,this.valueAsString=n,this.withBottomBorder=l,this.color=h,this.caption=e,this.parent=a,a!=null&&a.children.push(this),this.value=i,this.identifier=s,this.render()}getLevel(){return this.parent==null?0:this.parent.getLevel()+1}getIndent(){return this.getLevel()==0?0:15}render(){this.$consoleEntry=y("
"),this.$consoleEntry.addClass("jo_consoleEntry"),this.$consoleEntry.css("margin-left",""+this.getIndent()+"px"),this.withBottomBorder&&this.$consoleEntry.addClass("jo_withBorder");let t=y('
');this.$consoleEntry.append(t),Wi.hasChildren(this.value)?(this.canOpen=!0,this.$consoleEntry.addClass("jo_canOpen"),this.$consoleEntry.append(y('
')),this.$consoleEntry.find(".jo_ceFirstline").on("mousedown",e=>{this.value!=null?(this.children==null&&this.onFirstOpening(),this.$consoleEntry.toggleClass("jo_expanded"),this.isOpen=!this.isOpen):this.children=null,e.stopPropagation()})):this.caption==null&&this.getLevel()==0&&this.$consoleEntry.addClass("jo_cannotOpen"),this.renderValue()}onFirstOpening(){this.children=[];let t=this.$consoleEntry.find(".jo_ceChildContainer"),e=Wi.getChildren(this.value);for(let i=0;i100){let i=new Us(!1,null,""+(e.length-100)+" weitere Elemente...",void 0,null,this,!1,"var(--console-fieldidentifier)");i.render(),t.append(i.$consoleEntry)}}renderValue(){let t=this.$consoleEntry.find(".jo_ceFirstline");if(this.isCommand){if(this.caption!=null)if(typeof this.caption=="string")H.colorize(this.caption,"myJava",{tabSize:3}).then(e=>{t.append(y(e))});else{let e=y('');e.append(this.caption),t.append(e)}else t.append(y('Kein Wert zurückgegeben.'));return}else{if(this.identifier!=null){let n=y(''+this.identifier+" ");this.color!=null&&n.css("color",this.color),t.append(n)}let e=y(''),i=this.valueAsString||Wi.renderValue(this.value,30);if(this.value!=null&&typeof this.value=="object"&&!i.endsWith("-object")){let n=this.value.constructor.type;n&&n.identifier.toLowerCase()!="string"&&(i=n.identifier+" "+i)}e.text(i.substring(0,100)+(i.length>100?"...":"")),t.append(e)}}detachValue(){this.value=void 0,this.$consoleEntry.removeClass("jo_canOpen"),this.getLevel()==0&&this.caption==null&&this.$consoleEntry.addClass("jo_cannotOpen")}}class Mv{constructor(t,e){r(this,"editor");r(this,"history",[]);r(this,"historyPos",0);r(this,"statements",[]);r(this,"timerHandle");r(this,"consoleEntries",[]);r(this,"tab");r(this,"errorMarker",new mm);r(this,"lastStatement","");r(this,"lastCompileTime",0);r(this,"consoleTop");r(this,"consoleCommandline");if(this.main=t,this.tabManager=e,e==null)return;this.tab=new wn(cs.console(),["jo_editorFontSize","jo_consoleTab"]),e.addTab(this.tab);let i=R.makeDiv(this.tab.bodyDiv,"jo_console-inner");this.consoleTop=R.makeDiv(i,"jo_scrollable","jo_console-top"),this.consoleCommandline=R.makeDiv(i,"jo_commandline")}initConsoleClearButton(){let t=this,e=y(this.tab.bodyDiv),i=y(``);this.tabManager.insertIntoRightDiv(i[0]);let n=y(``);this.tabManager.insertIntoRightDiv(n[0]),e.on("myshow",()=>{i.show(),n.show(),t.editor.layout()}),e.on("myhide",()=>{i.hide(),n.hide()}),i.on("mousedown",s=>{s.stopPropagation(),t.clear()}),n.on("mousedown",s=>{s.stopPropagation(),t.copyToClipboard()})}initGUI(){if(this.tabManager==null)return;this.initConsoleClearButton(),this.tab.onShow=()=>{this.editor.layout()},this.editor=H.create(this.consoleCommandline,{value:[""].join(` `),automaticLayout:!1,renderLineHighlight:"none",guides:{bracketPairs:!1,highlightActiveIndentation:!1,indentation:!1},overviewRulerLanes:0,lineNumbers:"off",glyphMargin:!1,folding:!1,lineDecorationsWidth:0,lineNumbersMinChars:0,fixedOverflowWidgets:!0,language:"myJava",fontSize:14,fontFamily:window.javaOnlineFont==null?"Consolas, Roboto Mono":window.javaOnlineFont,fontWeight:"500",roundedSelection:!0,occurrencesHighlight:"multiFile",suggest:{localityBonus:!0,snippetsPreventQuickSuggestions:!1},minimap:{enabled:!1},scrollbar:{vertical:"hidden",horizontal:"hidden"},theme:"myCustomThemeDark",acceptSuggestionOnEnter:"on"}),this.editor.layout();let t=this;this.editor.addAction({id:"action_enter",label:"Enter key",keybindings:[Ao.Enter],precondition:"!suggestWidgetVisible",run:()=>{var i;(i=this.editor.getModel())!=null&&i.getValue()&&setTimeout(async()=>{var a,l,h,c;let n=t.editor.getModel().getValue(H.EndOfLinePreference.LF,!1);if(!n||n=="")return;t.history.push(n),t.statements.push(n),t.historyPos=0;let s=await t.main.getRepl().executeAsync(n,!1);this.showCompilationErrors(s==null?void 0:s.errors),typeof s<"u"&&(typeof s.value>"u"&&((a=s.errors)==null?void 0:a.length)>0&&((l=s.errors)!=null&&l.find(u=>u.level=="error"))?t.writeConsoleError(n,(h=s.errors)==null?void 0:h.find(u=>u.level=="error")):t.writeConsoleEntry(n,s),(c=this.editor.getModel())==null||c.setValue("")),setTimeout(()=>{this.editor.focus()},100)},10)}}),this.editor.addAction({id:"action_arrow_up",label:"ArrowUp",keybindings:[Ao.UpArrow],precondition:"!suggestWidgetVisible && !parameterHintsVisible",run:()=>{let e=t.history.length-(t.historyPos+1);if(e>=0){t.historyPos++;let i=t.history[e];t.editor.setValue(i),t.editor.setPosition({lineNumber:1,column:i.length+1}),this.compileAndShowErrors()}}}),this.editor.addAction({id:"action_arrow_down",label:"ArrowDown",keybindings:[Ao.DownArrow],precondition:"!suggestWidgetVisible && !parameterHintsVisible",run:()=>{let e=t.history.length-(t.historyPos-1);if(e<=t.history.length-1){t.historyPos--;let i=t.history[e];t.editor.setValue(i),t.editor.setPosition({lineNumber:1,column:i.length+1})}else t.editor.setValue(""),t.historyPos=0;this.compileAndShowErrors()}}),this.editor.onDidChangeModelContent(e=>{var n;let i=(n=this.editor.getModel())==null?void 0:n.getValue();i&&i!=this.lastStatement&&(this.lastStatement=i,this.compileAndShowErrors())}),y(this.tab.headingDiv).on("mousedown",()=>{ar.showHelper("consoleHelper",this.main),setTimeout(()=>{t.editor.focus()},500)})}compileAndShowErrors(){setTimeout(()=>{if(performance.now()-this.lastCompileTime>390){let t=this.compile();t&&this.showCompilationErrors(t.module.errors),this.lastCompileTime=performance.now()}},400)}compile(){let t=this.editor.getModel().getValue(H.EndOfLinePreference.LF,!1);return this.main.getRepl().compile(t,!1)}execute(){}showCompilationErrors(t){var i;if(!t)return;let e=(i=this.main.getReplEditor())==null?void 0:i.getModel();e&&this.errorMarker.markErrors(t,e)}showTab(){this.tab.show()}replReturnValueToOutput(t){if(typeof t>"u"||!t.text)return;let e=t.type?t.type.toString()+" ":"",i=t.text;switch(i.value&&(i=i.value),e){case"string ":case"String ":t.value?i='"'+i+'"':i="null";break;case"char ":case"Character ":i="'"+i+"'";break}return i.length>200&&(i=i.substring(0,200)+" ..."),i}writeConsoleError(t,e){if(this.tabManager==null)return;let i=y(this.consoleTop),n=new Us(!0,t,null,null,null,null,!1);this.consoleEntries.push(n),i.append(n.$consoleEntry);let s=new Us(!1,null,e.message,e.message,cs.error()+":",null,!0,"#ff0000");this.consoleEntries.push(s),i.append(s.$consoleEntry),setTimeout(()=>{i[0].scrollTop=i[0].scrollHeight},30)}writeConsoleEntry(t,e,i=null){if(this.tabManager==null)return;let n=y(this.consoleTop),s=new Us(!0,t,null,null,null,null,e==null,i);this.consoleEntries.push(s),n.append(s.$consoleEntry);let a=this.replReturnValueToOutput(e);if(a){let l=new Us(!1,null,e.value,a,null,null,!0,i);this.consoleEntries.push(l),n.append(l.$consoleEntry)}setTimeout(()=>{n[0].scrollTop=n[0].scrollHeight},30)}clear(){y(this.consoleTop).children().remove(),this.consoleEntries=[],this.statements=[]}detachValues(){for(let t of this.consoleEntries)t.detachValue()}clearExceptions(){if(this.tabManager==null)return;y(this.consoleTop).find(".jo_exception").parents(".jo_consoleEntry").remove()}copyToClipboard(){Yl(this.statements.join(` `))}}class Pv{constructor(t,e){r(this,"oldDecorations",new Map);r(this,"$errorDiv");r(this,"minimapColor",{});r(this,"tab");this.main=t,this.minimapColor.error="#bc1616",this.minimapColor.warning="#cca700",this.minimapColor.info="#75beff",this.tab=new wn(sr.errors(),["jo_active","jo_scrollable","jo_editorFontSize","jo_errorsTab"]),e.addTab(this.tab),this.$errorDiv=y(this.tab.bodyDiv)}showErrors(t){let e=new Map;this.$errorDiv.empty();let i=!1;for(let n of t.getFiles()){let s=[],a=this.main.getCompiler().getSortedAndFilteredErrors(n);e.set(n,a.filter(l=>l.level=="error").length);for(let l of a)this.processError(l,n,s);if(s.length>0&&this.$errorDiv.length>0){i=!0;let l=y('
'+n.name+" 
");this.$errorDiv.append(l);for(let h of s)this.$errorDiv.append(h)}}return!i&&this.$errorDiv.length>0&&this.$errorDiv.append(y(`
${sr.noErrorsFound()}
`)),e}processError(t,e,i){let n=y('
'),s=y('['+t.range.startLineNumber+'/'+t.range.startColumn+"]: "),a="";switch(t.level){case"error":a=`${sr.error()}: `;break;case"warning":a=`${sr.warning()}: `;break;case"info":a=`${sr.info()}: `;break}let l=y('
'+a+t.message+"
");n.append(s).append(l);let h=this;n.on("mousedown",c=>{this.$errorDiv.find(".jo_error-line").removeClass("jo_active"),n.addClass("jo_active"),h.showError(e,t)}),i.push(n)}showError(t,e){var i;this.main instanceof Co&&t!=((i=this.main.getCurrentWorkspace())==null?void 0:i.getCurrentlyEditedFile())&&(this.main.editor.dontDetectLastChange(),this.main.projectExplorer.setFileActive(t)),this.main instanceof xg&&this.main.setFileActive(t),this.main.getMainEditor().revealRangeInCenter(e.range),this.main.getMainEditor().setPosition(ee.getStartPosition(e.range)),setTimeout(()=>{this.main.getMainEditor().focus()},10)}hideAllErrorDecorations(){var e;let t=(e=this.main.getCurrentWorkspace())==null?void 0:e.getFiles();for(let i of t){let n=i.getMonacoModel(),s=this.oldDecorations.get(n)||[];s=n.deltaDecorations(s,[]),this.oldDecorations.delete(n)}}clearErrors(){this.$errorDiv.empty()}}class Bv{constructor(t,e){r(this,"$homeworkTabLeft");r(this,"$homeworkTabRight");r(this,"$showRevisionButton");r(this,"showRevisionActive",!1);r(this,"diffEditor");r(this,"tab");this.main=t,this.tabManager=e,this.tab=new wn(li.homework(),["jo_homeworkTab"]),e.addTab(this.tab)}initGUI(){let t=this,e=y(this.tab.bodyDiv);e.append(this.$homeworkTabLeft=M("","jo_homeworkTabLeft jo_scrollable")),e.append(this.$homeworkTabRight=M("","jo_homeworkTabRight jo_scrollable")),this.$showRevisionButton=M("","jo_button jo_active jo_homeworkRevisionButton",""),y("#view-mode").prepend(this.$showRevisionButton),this.$showRevisionButton.on("click",()=>{var i;this.showRevisionActive?this.hideRevision():this.showRevision((i=t.main.getCurrentWorkspace())==null?void 0:i.getCurrentlyEditedFile())}),this.$showRevisionButton.hide(),y("#diffEditor").hide()}showHomeWorkRevisionButton(){this.$showRevisionButton.text(this.showRevisionActive?li.defaultView():li.showRemarks()),this.$showRevisionButton.show()}hideHomeworkRevisionButton(){this.$showRevisionButton.hide()}showRevision(t){y("#editor").hide(),y("#diffEditor").show();var e=H.createModel(t.text_before_revision,"myJava"),i=H.createModel(t.getText(),"myJava");this.diffEditor=H.createDiffEditor(document.getElementById("diffEditor"),{enableSplitViewResizing:!0,originalEditable:!1,readOnly:!0,renderSideBySide:!0}),this.diffEditor.setModel({original:e,modified:i}),this.showRevisionActive=!0,this.showHomeWorkRevisionButton()}hideRevision(){this.showRevisionActive&&(y("#diffEditor").hide(),this.diffEditor.dispose(),this.diffEditor=null,y("#editor").show(),this.showRevisionActive=!1,this.showHomeWorkRevisionButton())}attachToWorkspaces(t){let e=[],i={};t.forEach(a=>{a.getFiles().forEach(l=>{let h=l.submitted_date;if(h!=null){let c=ff(h),u=gf(c),g=i[u];g==null&&(g={date:c,day:u,modules:[]},i[u]=g,e.push(g)),g.modules.push({file:l,workspace:a})}})}),this.$homeworkTabLeft.empty(),this.$homeworkTabRight.empty();let n=this;this.$homeworkTabLeft.append(M("","jo_homeworkHeading",li.filingDays()+":")),e.sort((a,l)=>a.date.getFullYear()!=l.date.getFullYear()?-Math.sign(a.date.getFullYear()-l.date.getFullYear()):a.date.getMonth()!=l.date.getMonth()?-Math.sign(a.date.getMonth()-l.date.getMonth()):a.date.getDate()!=l.date.getDate()?-Math.sign(a.date.getDate()-l.date.getDate()):0);let s=!0;e.forEach(a=>{a.modules.sort((h,c)=>h.file.name.localeCompare(c.file.name));let l=M("","jo_homeworkDate",a.day);this.$homeworkTabLeft.append(l),l.on("click",h=>{this.$homeworkTabLeft.find(".jo_homeworkDate").removeClass("jo_active"),l.addClass("jo_active"),n.select(a)}),s&&(s=!1,l.addClass("jo_active"),n.select(a))})}select(t){this.$homeworkTabRight.empty(),this.$homeworkTabRight.append(M("","jo_homeworkHeading",li.givenFiles()+":"));let e=this;t.modules.forEach(i=>{let n=y(`
${li.workspace()} ${i.workspace.name}, ${li.file()} ${i.file.name} (${li.dateFiled()}: ${i.file.submitted_date} )
`);e.$homeworkTabRight.append(n),n.on("click",()=>{e.main.projectExplorer.setWorkspaceActive(i.workspace,!0),e.main.projectExplorer.setFileActive(i.file),e.main.projectExplorer.fileTreeview.selectElement(i.file,!1)})})}}const D=class D{};r(D,"schoolsWithAdmins",()=>d({de:"Schulen mit Admins",en:"Schools with admins"})),r(D,"schools",()=>d({de:"Schulen",en:"Schools"})),r(D,"identifier",()=>d({de:"Bezeichnung",en:"Identifier"})),r(D,"abbreviation",()=>d({de:"Kürzel",en:"Abbr."})),r(D,"vidisID",()=>d({de:"Vidis-Kennung",en:"Vidis-id"})),r(D,"classes",()=>d({de:"Klassen",en:"classes"})),r(D,"users",()=>d({de:"Users",en:"Users"})),r(D,"teachers",()=>d({de:"Lehrkräfte",en:"Teachers"})),r(D,"changePassword",()=>d({de:"Passwort ändern...",en:"Change password..."})),r(D,"moveToSchool",()=>d({de:"Versetzen in Schule...",en:"Move to school..."})),r(D,"username",()=>d({de:"Benutzername",en:"Username"})),r(D,"firstName",()=>d({de:"Rufname",en:"First name"})),r(D,"name",()=>d({de:"Name",en:"Name"})),r(D,"lastName",()=>d({de:"Familienname",en:"Last name"})),r(D,"vidisAbbreviation",()=>d({de:"Vidis-Kürzel",en:"Vidis-Abbr."})),r(D,"isAdmin",()=>d({de:"Admin",en:"Admin"})),r(D,"locked",()=>d({de:"Locked",en:"Locked"})),r(D,"selectTeacherToMove",()=>d({de:"Zum Verschieben in eine andere Schule muss genau eine Lehrkraft ausgewählt werden.",en:"Select teacher to move."})),r(D,"schoolsIdenticalThereforeNothingToDo",()=>d({de:"Die gewählte Schule stimmt mit der bisherigen Schule überein, es wird daher nichts verändert.",en:"Selected school is equal to old school, therefore nothing to do."})),r(D,"errorMovingTeacher",()=>d({de:"Fehler beim Versetzen der Lehrkraft: ",en:"Error moving teacher to other school: "})),r(D,"chooseAdminToChangePassword",()=>d({de:"Zum Ändern eines Passworts muss genau ein Admin ausgewählt werden.",en:"Select one admin to change her/his password."})),r(D,"pleaseWaitForPasswordHashing",()=>d({de:"Bitte warten, das Hashen
des Passworts kann
bis zu 1 Minute
dauern...",en:"Please wait. Password hashing
may take up to 1 minute."})),r(D,"passwordChangedSuccessfully",(t,e,i)=>d({de:"Das Passwort für "+t+" "+e+" ("+i+") wurde erfolgreich geändert.",en:""})),r(D,"errorSettingPassword",()=>d({de:"Fehler beim Ändern des Passworts: ",en:"Error when setting password: "})),r(D,"nameOfSchool",()=>d({de:"Name der Schule",en:"Name of school"})),r(D,"teachersOfSchool",()=>d({de:"Lehrkräfte der Schule ",en:"Teachers of school "})),r(D,"errorFetchingData",()=>d({de:"Fehler beim Holen der Daten: ",en:"Error fetching data: "})),r(D,"selectSchoolToAddTeachers",()=>d({de:"Wenn Sie Lehrkräfte hinzufügen möchten, muss links genau eine Schule ausgewählt sein.",en:"Select a school (in left table) to add teachers."})),r(D,"classesWithStudents",()=>d({de:"Klassen mit Schülern",en:"Classes with students"})),r(D,"count",()=>d({de:"Anz.",en:"Count"})),r(D,"teacher",()=>d({de:"Lehrkraft",en:"Teacher"})),r(D,"secondTeacher",()=>d({de:"Zweitlehrkraft",en:"Second teacher"})),r(D,"noSecondTeacher",()=>d({de:"Keine Zweitlehrkraft",en:"No second teacher"})),r(D,"students",()=>d({de:"Schüler/-innen",en:"Students"})),r(D,"changeClass",()=>d({de:"Klasse ändern...",en:"Change class..."})),r(D,"classWord",()=>d({de:"Klasse",en:"class"})),r(D,"nickname",()=>d({de:"Nickname (kein Klartext!)",en:"Nickname (not real name!)"})),r(D,"vidisClass",()=>d({de:"Vidis-Klasse",en:"Vidis-class"})),r(D,"movedStudentsSuccessfully",t=>d({de:"Die Schüler/-innen wurden erfolgreich in die Klasse "+t+" verschoben.",en:"Successfully moved students to class "+t+"."})),r(D,"errorMovingStudents",()=>d({de:"Fehler beim Versetzen der Schüler/-innen: ",en:"Error moving students to other class: "})),r(D,"selectStudentToSetPassword",()=>d({de:"Zum Ändern eines Passworts muss genau ein Schüler ausgewählt werden.",en:"Select student to set password."})),r(D,"errorDeletingStudents",()=>d({de:"Fehler beim Löschen der Schüler/-innen: ",en:"Error deleting students: "})),r(D,"selectClassToAddStudents",()=>d({de:"Bitte wählen Sie links die Klasse aus, der die Schülerin/der Schüler hinzugefügt werden soll.",en:"Select class (in table on left side) to which new student belongs to."})),r(D,"errorCreatingUser",()=>d({de:"Beim Anlegen des Benutzers ist ein Fehler aufgetreten: ",en:"Error adding user: "})),r(D,"newClass",()=>d({de:"Neue Klasse: ",en:"New Class: "})),r(D,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(D,"ok",()=>d({de:"OK",en:"OK"})),r(D,"chooseNewClass",()=>d({de:"Neue Klasse wählen",en:"Choose new class"})),r(D,"exportImportSchools",()=>d({de:"Schulen exp./imp.",en:"Export/import schools"})),r(D,"exportSelectedSchools",()=>d({de:"Selektierte Schulen exportieren",en:"Export selected schools"})),r(D,"importSchools",()=>d({de:"Schulen importieren:",en:"Import schools:"})),r(D,"pleaseWaitForDataUpload",()=>d({de:"Die Daten werden hochgeladen. Bitte warten...",en:"Please wait for data to upload..."})),r(D,"errorSendingFiles",()=>d({de:"Fehler beim Senden der Dateien.",en:"Error sending files."})),r(D,"moveTeacher",()=>d({de:"Lehrkraft verschieben: ",en:"Move teacher: "})),r(D,"oldSchool",()=>d({de:"Bisherige Schule",en:"Current school"})),r(D,"newSchool",()=>d({de:"Neue Schule",en:"New school"})),r(D,"nameOfTest",()=>d({de:"Name der Prüfung: ",en:"Test name: "})),r(D,"templateWorkspace",()=>d({de:"Vorlage-Worksp.",en:"Template worksp."})),r(D,"createNewTest",()=>d({de:"Neue Prüfung anlegen",en:"Create new test"})),r(D,"newPassword",()=>d({de:"Neues Passwort:",en:"New Password:"})),r(D,"setPasswordFor",()=>d({de:"Passwort setzen für: ",en:"Set password for: "})),r(D,"manageTests",()=>d({de:"Prüfungen verwalten",en:"Manage tests"})),r(D,"noTemplateWorkspace",()=>d({de:"Kein Vorlage-Workspace",en:"No template workspace"})),r(D,"pruefungen",()=>d({de:"Prüfungen",en:"Tests"})),r(D,"date",()=>d({de:"Datum",en:"Date"})),r(D,"state",()=>d({de:"Zustand",en:"State"})),r(D,"mark",()=>d({de:"Note",en:"Mark"})),r(D,"points",()=>d({de:"Punkte",en:"Points"})),r(D,"comment",()=>d({de:"Kommentar",en:"Comment"})),r(D,"markShort",()=>d({de:"N",en:"M"})),r(D,"pointsShort",()=>d({de:"P",en:"P"})),r(D,"attendanceShort",()=>d({de:"anw.",en:"att."})),r(D,"attendance",()=>d({de:"Anwesend",en:"Attendance"})),r(D,"manual",()=>d({de:"händisch",en:"manual"})),r(D,"modeShort",()=>d({de:"abw./verl.",en:"abs./ext."})),r(D,"groupShort",()=>d({de:"Gr.",en:"Gr."})),r(D,"groupLong",()=>d({de:"Gruppe (A oder B)",en:"Group (A or B)"})),r(D,"modeLong",()=>d({de:"Abwesend/verlängert",en:"Absent/extended"})),r(D,"stateOfSelectedTest",()=>d({de:"Zustand der ausgewählten Prüfung:",en:"State of selected test:"})),r(D,"templateWorkspacesCaption",()=>d({de:"Vorlage-Workspaces der selektierten Prüfung:",en:"Template workspaces of selected test:"})),r(D,"groupA",()=>d({de:"Gruppe A:",en:"Group A:"})),r(D,"groupB",()=>d({de:"Gruppe B:",en:"Group B:"})),r(D,"preparation",()=>d({de:"Vorbereitung",en:"Preparation"})),r(D,"testRunning",()=>d({de:"Prüfung läuft",en:"Test running"})),r(D,"correction",()=>d({de:"Korrektur",en:"Correction"})),r(D,"issueTest",()=>d({de:"Herausgabe",en:"Issue test"})),r(D,"stateBack",()=>d({de:"Zustand zurück",en:"State back"})),r(D,"stateForward",()=>d({de:"Zustand vor",en:"State forward"})),r(D,"cantSetTestToState",t=>d({de:"Die Prüfung läuft schon. Sie kann nicht mehr in den Zustand "+t+" versetzt werden.",en:"Test is already running, therefore it can't be set to state "+t+"."})),r(D,"sureToStartTestAgain",()=>d({de:"Soll die Prüfung wirklich sofort erneut gestartet werden?",en:"Are you sure to start test again?"})),r(D,"sureToStartTest",()=>d({de:"Soll die Prüfung wirklich sofort gestartet werden?",en:"Are you sure to start test?"})),r(D,"actionsForSelectedTest",()=>d({de:"Aktionen für die ausgewählte Prüfung:",en:"Actions for selected test:"})),r(D,"printAll",()=>d({de:"Alle Arbeiten drucken...",en:"Print all student tests..."})),r(D,"file",()=>d({de:"Datei: ",en:"File: "})),r(D,"studentsFile",()=>d({de:"Datei der Schülerin/des Schülers:",en:"Student's file"})),r(D,"alterClassOnlyInStatePreparation",()=>d({de:'Die Klasse kann nur im Zustand "Vorbereitung" noch geändert werden.',en:'You can alter class only in state "Preparation".'})),r(D,"alterTemplateWorkspaceOnlyInStatePreparation",()=>d({de:'Der Vorlagenworkspace kann nur im Zustand "Vorbereitung" noch geändert werden.',en:'You can alter template workspace only in state "Preparation".'})),r(D,"noTestSelected",()=>d({de:"Keine Prüfung ausgewählt.",en:"No test selected."})),r(D,"nextUpdatein",()=>d({de:"Nächstes Update in ",en:"Next update in "})),r(D,"error",()=>d({de:"Es ist ein Fehler aufgetreten: ",en:"Error: "})),r(D,"importStudents",()=>d({de:"Schülerdatenimport",en:"Import students"})),r(D,"password",()=>d({de:"Passwort",en:"Password"})),r(D,"step4Description",t=>d({de:`Die Schüler/innen wurden erfolgreich angelegt und der Klasse/den Klassen (ersatzweise: ${t}) zugeordnet. Eine Liste der Zugangsdaten zum Ausdrucken erhalten Sie durch Klick auf den Button "Drucken...". `,en:`Student accounts have been successfully created and moved to given class (default: ${t}). Click "Print..." to get a list of credentials.`})),r(D,"step4Done",()=>d({de:"Schritt 4: Fertig!",en:"Step 4: Done!"})),r(D,"printDots",()=>d({de:"Drucken...",en:"Print..."})),r(D,"sname",()=>d({de:"Name",en:"Name"})),r(D,"step3Description",t=>d({de:`Die Schüler/innen können jetzt angelegt und der Klasse ${t} zugeordnet werden.`,en:`Ready to create student accounts and connect them to class ${t}.`})),r(D,"step3Heading",()=>d({de:"Schritt 3: Benutzer anlegen",en:"Step 3: Create users"})),r(D,"back",()=>d({de:"Zurück",en:"Back"})),r(D,"createUsers",()=>d({de:"Benutzer anlegen",en:"Create users"})),r(D,"waitForUserCreation",()=>d({de:"Die Benutzer werden angelegt. Bitte warten...",en:"Creating user accounts. Please wait..."})),r(D,"step2Description",()=>d({de:`Bitte wählen Sie im Auswahlfeld die Klasse aus, in die die Schülerdaten importiert werden sollen, für die in den Eingabedaten keine Klasse angegeben ist. Sie können die Daten in der Tabelle noch bearbeiten, bevor Sie sie zur Überprüfung (noch kein Import!) absenden.`,en:"Please choose class to import users to if no class is specified in input data. You may edit user data in table left before its imported."})),r(D,"step2heading",()=>d({de:"Schritt 2: Daten überprüfen",en:"Step 2: Check data"})),r(D,"checkingData",()=>d({de:"Daten überprüfen...",en:"Checking data..."})),r(D,"errorLog",()=>d({de:"Fehlerprotokoll",en:"Error log"})),r(D,"step1description",()=>d({de:` Zum Importieren wird eine Tabelle mit den Spalten Rufname, Familienname, Username, (optional:) Klasse und (ebenso optional:) Passwort benötigt, wobei die Daten in den Zellen jeweils mit Tab-Zeichen getrennt sind. Sie erhalten dieses Format beispielsweise, indem Sie eine Tabelle in Excel in die Zwischenablage kopieren.
Falls die erste Zeile Spaltenköpfe mit den korrekten Bezeichnern (Klasse, Rufname, Familienname, Username, Passwort) enthält, kümmert sich der Import-Algorithmus um die richtige Reihenfolge und blendet ggf. auch überflüssige Spalten aus. Falls eine Zeile kein Passwort enthält, setzt die Online-IDE ein Zufallspasswort.
Passwortregeln: Aus den Kategorien Kleinbuchstaben, Großbuchstaben, Ziffern und Sonderzeichen müssen mindestens drei in jedem Passwort vertreten sein. Die Mindestlänge beträgt 8 Zeichen.
Bitte fügen Sie den Inhalt der Tabelle per Copy-Paste in dieses Eingabefeld ein:`,en:`To import student data you need a tab-separated table with colums FirstName, LastName, Username, Class (optional) and password(optional).
You get this format from Excel or other spreadsheet software by copying to clipboard.
Password rules: At least three of the following categories must be represented in each password: lowercase letters, uppercase letters, digits, and special characters. Minimum length is 8 characters.
Column order is arbitrary if you provide a first row with header-identifiers given above. Random passwords are generated for each student without one.
Please insert table in textfield below by copy/paste.`})),r(D,"step1heading",()=>d({de:"Schritt 1: Daten einlesen",en:"Step 1: Import data per copy/paste"})),r(D,"continue",()=>d({de:"Weiter",en:"Continue"})),r(D,"usernamesAlreadyUsed",()=>d({de:"Diese Benutzernamen sind schon anderen Benutzern zugeordnet und können daher nicht verwendet werden:",en:"These usernames are already in use and are therefore not possible:"})),r(D,"testCantBeDeleted",()=>d({de:"Die Prüfung läuft noch, sie kann daher nicht gelöscht werden.",en:"Test is still running, therefore it can't be deleted."})),r(D,"running",()=>d({de:"läuft",en:"running"})),r(D,"stopped",()=>d({de:"angehalten",en:"stopped"})),r(D,"modeNormal",()=>d({de:"Normal",en:"regular"})),r(D,"modeManualOff",()=>d({de:"Abwesend",en:"absent"})),r(D,"modeManualOn",()=>d({de:"Verlängert",en:"extended"})),r(D,"modeToText",t=>{switch(t){case"normal":return D.modeNormal();case"manualOff":return D.modeManualOff();case"manualOn":return D.modeManualOn();default:return D.modeNormal()}});let Fd=D;class Ov{constructor(t,e){r(this,"$gradingTab");r(this,"$gradingMark");r(this,"$gradingPoints");r(this,"$gradingCommentMarkdown");r(this,"$group");r(this,"$attendence");r(this,"$l3");r(this,"$l4");r(this,"dontFireOnChange",!1);r(this,"tab");this.main=t,this.tab=new wn(Ni.evaluation(),["jo_gradingTab"]),e.addTab(this.tab),this.$gradingTab=y(this.tab.bodyDiv),Mi.getInstance().subscribe("onGradeChangedInPruefungAdministration",()=>{this.setValues(this.main.currentWorkspace)})}initGUI(){let t=this;this.$gradingTab.empty(),this.$gradingTab.css("display","none");let e=M(null,"jo_grading_upperRow");this.$gradingMark=y(''),this.$gradingPoints=y(''),this.$group=y("
"),this.$attendence=y("
"),this.$gradingMark.on("input",()=>{t.onChange()}),this.$gradingPoints.on("input",()=>{t.onChange()});let i=M(null,"jo_grading_markdiv"),n=M(null,"jo_grading_markdiv");this.$l3=M(null,"jo_grading_markdiv"),this.$l4=M(null,"jo_grading_markdiv"),i.append(M(null,null,Ni.points()+": "),this.$gradingPoints),n.append(M(null,null,Ni.grade()+": "),this.$gradingMark),this.$l3.append(M(null,null,Fd.groupLong()+": "),this.$group),this.$l4.append(M(null,null,Fd.attendance()+": "),this.$attendence),e.append(i,n,this.$l3,this.$l4),this.$gradingCommentMarkdown=y(``),this.$gradingCommentMarkdown.on("input",()=>{t.onChange()}),t.main.user.is_teacher?(this.$gradingCommentMarkdown.removeAttr("readonly"),this.$gradingMark.removeAttr("readonly"),this.$gradingPoints.removeAttr("readonly")):(this.$gradingCommentMarkdown.attr("readonly","readonly"),this.$gradingMark.attr("readonly","readonly"),this.$gradingPoints.attr("readonly","readonly")),this.$gradingTab.append(e,this.$gradingCommentMarkdown)}setValues(t){var a;if(t==null)return;let e=!1;if(this.main.user.is_teacher?e=this.main.workspacesOwnerId==this.main.user.id:(e=this.isEmptyOrNull(t.grade)&&this.isEmptyOrNull(t.points)&&this.isEmptyOrNull(t.comment),this.$l3.css("display","none"),this.$l4.css("display","none")),e&&this.$gradingTab.removeClass("jo_active"),this.tab.setVisible(!e),e)return;this.dontFireOnChange=!0,this.$gradingMark.val(t.grade==null?"":t.grade),this.$gradingPoints.val(t.points==null?"":t.points),this.$gradingCommentMarkdown.val(t.comment==null?"":t.comment);let i="A",n=Ni.yes(),s=(a=this.main.teacherExplorer.pruefungen)==null?void 0:a.find(l=>l.id==t.pruefung_id);if(s!=null){if(s.pruefungStudentGroups!=null){let l=s.pruefungStudentGroups.studentGroups.find(h=>h.student_id==t.owner_id);l!=null&&(i=l.group)}if(s.pruefungStudentModes!=null){let l=s.pruefungStudentModes.studentModes.find(h=>h.student_id==t.owner_id);l!=null&&l.mode=="manualOff"&&(n=Ni.no())}}this.$group.text(i),this.$attendence.text(n),this.dontFireOnChange=!1}onChange(){var e,i,n;if(this.dontFireOnChange)return;let t=this.main.currentWorkspace;t!=null&&(t.grade=(e=this.$gradingMark.val())==null?void 0:e.trim(),t.points=(i=this.$gradingPoints.val())==null?void 0:i.trim(),t.comment=(n=this.$gradingCommentMarkdown.val())==null?void 0:n.trim(),t.saved=!1)}isEmptyOrNull(t){return t==null||t.trim().length==0}}const Vv="data:image/svg+xml,%3csvg%20width='105'%20height='105'%20viewBox='0%200%20105%20105'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23fff'%3e%3ccircle%20cx='12.5'%20cy='12.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='0s'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='12.5'%20cy='52.5'%20r='12.5'%20fill-opacity='.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='100ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='52.5'%20cy='12.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='300ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='52.5'%20cy='52.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='600ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='92.5'%20cy='12.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='800ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='92.5'%20cy='52.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='400ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='12.5'%20cy='92.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='700ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='52.5'%20cy='92.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='500ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='92.5'%20cy='92.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='200ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3c/svg%3e";class Cg{constructor(t,e,i,n,s,a){r(this,"tabManager");r(this,"console");r(this,"errorManager");r(this,"homeworkManager");r(this,"gradingManager");r(this,"disassemblerTab");r(this,"jUnitTab");r(this,"$dbBusyImage");r(this,"$networkBusyImage");r(this,"$updateTimer");this.main=t,this.$bottomDiv=e,this.tabManager=new ym(e[0]),s&&(this.errorManager=new Pv(t,this.tabManager),this.errorManager.tab.show()),i&&(this.console=new Mv(t,i?this.tabManager:null)),a||(this.homeworkManager=new Bv(t,this.tabManager),this.gradingManager=new Ov(t,this.tabManager)),n&&(this.disassemblerTab=new wn(qa.code(),["jo_scrollable","jo_pcodeTab"]),this.tabManager.addTab(this.disassemblerTab)),this.jUnitTab=new wn(qa.testRunner(),["jo_testrunnerTab"]),this.tabManager.addTab(this.jUnitTab),a||(this.$dbBusyImage=y(``),this.tabManager.insertIntoRightDiv(this.$dbBusyImage[0]),this.$networkBusyImage=y(``),this.tabManager.insertIntoRightDiv(this.$networkBusyImage[0]),this.$updateTimer=y(`
`),this.tabManager.insertIntoRightDiv(this.$updateTimer[0]))}initGUI(){gp(this.$bottomDiv),this.console!=null&&this.console.initGUI(),this.homeworkManager!=null&&this.homeworkManager.initGUI(),this.$bottomDiv.find(".jo_tabs").children().first().trigger("click")}showHomeworkTab(){this.homeworkManager.tab.setVisible(!0)}showJunitTab(){this.jUnitTab.show()}hideHomeworkTab(){this.homeworkManager.tab.setVisible(!1)}showHideDBBusyIcon(t){let e=t?"block":"none";this.$dbBusyImage.css("display",e)}}class Sg{}r(Sg,"NewFileName",()=>d({de:"Neue Datei",en:"new file"}));class Lv{constructor(t,e){r(this,"treeview");this.$fileListDiv=t,this.main=e,this.treeview=new Zt(t[0],{captionLine:{enabled:!0,text:"Programmdateien"},withSelection:!0,selectMultiple:!1,buttonAddElements:!0,buttonAddElementsCaption:"Dateien hinzufügen",buttonAddFolders:!1,comparator:(i,n)=>i.name.localeCompare(n.name),keyExtractor:i=>i.id,parentKeyExtractor:i=>i.parent_folder_id,withDeleteButtons:!0,confirmDelete:!0,orderBy:"comparator",scrollToSelectedElement:!1}),this.treeview.newNodeCallback=async(i,n)=>{let s=this.main.addFile({text:"",title:i}),a=Ai.filenameToFileType(s.name);return n.iconClass=a.iconclass,n.readOnly=a.suffix==".md",n.externalObject=s,this.treeview.selectNodeAndSetFocus(n,!0),s},this.treeview.renameCallback=async(i,n,s)=>(n=n.substring(0,30),i.name=n,i.setSaved(!1),{correctedName:n,success:!0}),this.treeview.deleteCallback=async(i,n)=>{let s=this.treeview.nodes.filter(a=>!a.isRootNode()&&a.externalObject!=i).map(a=>a.externalObject);return this.main.removeFile(i),n!=null&&n.hasFocus&&(s.length>0?this.selectFile(s[0],!0):this.selectFirstFileIfPresent()),this.treeview.nodes.forEach(a=>{var l;return(l=a.externalObject)==null?void 0:l.setSaved(!1)}),this.main.showResetButton(),!0},this.treeview.nodeClickedCallback=i=>{this.selectFile(i,!1)}}selectFirstFileIfPresent(){if(this.treeview.nodes.length>1)this.treeview.selectNodeAndSetFocus(this.treeview.nodes[1],!0);else{let t=this.main.getMainEditor(),e=H.createModel("Keine Datei vorhanden.","plaintext");t.setModel(e),t.updateOptions({readOnly:!0})}}getUniqueFilename(){let t=Sg.NewFileName(),e=0,i=t+" "+e+".java";for(;this.treeview.nodes.some(n=>n.caption==(i=t+" "+e+".java"));)e++;return i}removeAllFiles(){this.treeview.clear(),this.selectFirstFileIfPresent()}addFile(t){let e=Ai.filenameToFileType(t.name),i=e.iconclass,n=this.treeview.addNode(!1,t.name,i,t);n.readOnly=e.suffix==".md"}removeFile(t,e=!0){this.treeview.removeElementAndItsFolderContents(t),this.selectFirstFileIfPresent(),this.treeview.nodes.forEach(i=>{var n;return(n=i.externalObject)==null?void 0:n.setSaved(!1)})}renameElement(t,e){let i=t.$fileDiv.find(".jo_filename"),n=t.file.name.indexOf("."),s=n==null?null:{start:0,end:n};am(i,i,a=>{var h;t.file.name=a,i.html(a),t.$fileDiv.removeClass("jo_java jo_emptyFile jo_xml jo_json jo_text");let l=Ai.filenameToFileType(a);t.$fileDiv.addClass("jo_"+l.iconclass),H.setModelLanguage((h=t.file)==null?void 0:h.getMonacoModel(),l.language),e!=null&&e()},s)}selectFile(t,e=!0){if(!t)return;switch(Ai.filenameToFileType(t.name).suffix){case".java":this.main.$hintDiv.hide(),this.main.$monacoDiv.show(),this.main.setFileActive(t),e&&setTimeout(()=>{this.main.getMainEditor().focus()},100),this.main.interpreter.onFileSelected();break;case".md":this.main.$monacoDiv.hide(),this.main.$hintDiv.show();let n={},s=[],a=jm({highlight:function(l,h){return s.push(l),""}});a.renderer.rules.code_inline=function(l,h,c,u,g){var f=l[h];return s.push(f.content),""},a.render(t.getText()),this.colorize(s,n,()=>{let l=jm({highlight:function(c,u){return n[c]}});l.renderer.rules.code_inline=function(c,u,g,f,b){var A=c[u];return n[A.content].replace("
","")};let h=l.render(t.getText());this.main.$hintDiv.html(h)});break}}colorize(t,e,i){let n=this;if(t.length>0){let s=t.pop();H.colorize(s,"myJava",{tabSize:3}).then(a=>{e[s]=a,n.colorize(t,e,i)})}else i()}getFiles(){return this.treeview.nodes.filter(t=>!t.isRootNode()&&t.externalObject).map(t=>t.externalObject)}markFilesAsStartable(t,e){for(let i of this.treeview.nodes.filter(n=>!n.isRootNode())){let n=i.getIconButtonByTag("Start"),s=i.externalObject;n||(n=i.addIconButton("img_start-dark",()=>{this.main.onStartFileClicked(s)},"Starte das in dieser Datei enthaltene Hauptprogramm",!0)),n.tag="Start",n.setVisible(t.indexOf(s)>=0),n.setActive(e)}}renderErrorCount(t,e){if(e!=null)for(let i of t.getFiles()){let n=e.get(i),s=n==null||n==0?"":"("+n+")";this.treeview.findNodeByElement(i).setRightPartOfCaptionErrors(s)}}markAsSelectedButDontInvokeCallback(t){let e=this.treeview.findNodeByElement(t);e&&(this.treeview.unselectAllNodes(!0),e.setSelected(!0),e.setFocus(!0))}}class Fv{constructor(){r(this,"db")}open(t){if(window.indexedDB){let e=window.indexedDB.open("LearnJ",1),i=this;e.onerror=function(n){console.log("Couldn't open IndexedDB: "+n.type)},e.onsuccess=function(n){i.db=e.result,i.db.onerror=function(s){console.log("Datenbankfehler: "+s.target.error.message)},t()},e.onupgradeneeded=function(n){i.db=n.target.result;let s=i.db.createObjectStore("scripts",{keyPath:"scriptId",autoIncrement:!1});s.transaction.oncomplete=function(a){}}}else console.log("IndexedDB not available.")}writeScript(t,e){this.db.transaction("scripts","readwrite").objectStore("scripts").put({scriptId:t,script:e})}removeScript(t){this.db.transaction("scripts","readwrite").objectStore("scripts").delete(t)}getScript(t,e){let n=this.db.transaction("scripts","readwrite").objectStore("scripts").get(t);n.onerror=s=>{e(null)},n.onsuccess=s=>{n.result==null?e(null):e(n.result.script)}}}class _v{constructor(t){this.file=t}getName(){return this.file.name}getText(){return this.file.getText()}}class zv{constructor(t){this.ide=t}getFiles(){return this.ide.getCurrentWorkspace().getFiles().map(t=>new _v(t))}}const Ko=class Ko{static registerIDE(t){Ko.ideMap.set(t.config.id,new zv(t))}getIDE(t){return Ko.ideMap.get(t)}};r(Ko,"ideMap",new Map);let _d=Ko;class qv{constructor(t,e,i){r(this,"wholeWindowElement");r(this,"primaryButton");r(this,"additionalButtonTopRight");this.mainEmbedded=t,this.mainDiv=e,this.primaryButton=new ro(i,["img_whole-window-dark","img_whole-window-back-dark"],(n,s)=>{this.onWholeWindowButtonClicked(s)},["IDE im Vollbild darstellen","IDE in Normalgröße darstellen"],!0,"append"),this.primaryButton.divElement.style.marginLeft="10px",this.primaryButton.divElement.style.marginRight="10px"}onWholeWindowButtonClicked(t){var e,i,n,s;switch(t){case 0:this.mainEmbedded.rightDiv.wholeWindowButton.setVisible(!0),(e=this.mainEmbedded.horizontalSlider)==null||e.restorePosition(),(i=this.mainEmbedded.verticalSlider)==null||i.restorePosition(),this.additionalButtonTopRight.remove(),document.body.classList.remove("joeCssFence"),fa(this.wholeWindowElement,this.mainDiv);break;case 1:this.additionalButtonTopRight=new ro(this.mainEmbedded.rightDiv.tabManager.tabheadingRightDiv,["img_whole-window-back"],(a,l)=>{this.onWholeWindowButtonClicked(0)},["IDE in Normalgröße darstellen"],!0,"append"),this.mainEmbedded.rightDiv.wholeWindowButton.setVisible(!1),(n=this.mainEmbedded.horizontalSlider)==null||n.savePosition(),(s=this.mainEmbedded.verticalSlider)==null||s.savePosition(),document.body.classList.add("joeCssFence"),this.wholeWindowElement=R.makeDiv(document.body,"jo_wholeWindow","jo_wholeWindow_embeddedFullpage"),fa(this.mainDiv,this.wholeWindowElement);break}}}class xg{constructor(t,e){r(this,"config");r(this,"editor");r(this,"currentWorkspace");r(this,"actionManager");r(this,"language");r(this,"interpreter");r(this,"$runDiv");r(this,"debugger");r(this,"$debuggerDiv");r(this,"$alternativeDebuggerDiv");r(this,"bottomDiv");r(this,"$filesDiv");r(this,"ListDiv");r(this,"disassembler");r(this,"$hintDiv");r(this,"$monacoDiv");r(this,"$resetButton");r(this,"rightDiv");r(this,"$rightDivInner");r(this,"fileExplorer");r(this,"debounceDiagramDrawing");r(this,"indexedDB");r(this,"programControlButtons");r(this,"breakpointManager");r(this,"compileRunsAfterCodeReset",0);r(this,"settings");r(this,"lastActiveFile");r(this,"horizontalSlider");r(this,"verticalSlider");r(this,"embeddedFullpageController");this.$outerDiv=t,this.scriptList=e,this.readConfig(t),this.initGUI(t),this.initScripts().then(()=>{this.currentWorkspace.setLibraries(this.getCompiler()),this.loadUserSpritesheet().then(()=>{this.config.hideStartPanel||(this.indexedDB=new Fv,this.indexedDB.open(()=>{this.config.id!=null&&this.readScripts(async()=>{if(this.fileExplorer&&(this.getCompiler().setFiles(this.fileExplorer.getFiles()),this.fileExplorer.selectFirstFileIfPresent()),this.fileExplorer==null){let i=this.currentWorkspace.getFiles();this.getCompiler().setFiles(i),i.length>0&&this.setFileActive(i[0])}this.readClassDiagram(),this.getCompiler().triggerCompile()}),this.config.enableFileAccess&&(window.online_ide_access=new _d,_d.registerIDE(this))}))})})}isEmbedded(){return!0}getCompiler(){return this.language.getCompiler(this)}getInterpreter(){return this.interpreter}getCurrentWorkspace(){return this.currentWorkspace}getDebugger(){return this.debugger}getMonacoEditor(){return this.editor.editor}getRightDiv(){return this.rightDiv}getBottomDiv(){return this.bottomDiv}getActionManager(){return this.actionManager}addWorkspace(t){}getLanguage(){return this.language}getRepl(){var t;return(t=this.language)==null?void 0:t.getRepl(this)}getMainEditor(){return this.editor.editor}getReplEditor(){var t;return(t=this.bottomDiv)==null?void 0:t.console.editor}getSettings(){let t=this.config.settings||{};return this.settings||(this.settings=new vg(void 0,t,{},{})),this.settings}onCompilationFinished(t){var e,i;if(this.interpreter.setExecutable(t),this.bottomDiv&&this.fileExplorer){let n=(i=(e=this.bottomDiv)==null?void 0:e.errorManager)==null?void 0:i.showErrors(this.currentWorkspace);this.fileExplorer.renderErrorCount(this.currentWorkspace,n)}this.drawClassDiagrams(!this.rightDiv.isClassDiagramActive())}adjustWidthToWorld(){this.rightDiv.adjustWidthToWorld()}readClassDiagram(){if(!this.config.withClassDiagram)return;let t=()=>{var e;(e=this.rightDiv)!=null&&e.classDiagram?this.indexedDB.getScript(this.config.id+"-classDiagram",i=>{i!=null&&(this.rightDiv.classDiagram.clear(),this.rightDiv.classDiagram.deserialize(JSON.parse(i)),this.drawClassDiagrams(!1))}):setTimeout(()=>{t()},300)};t()}async tryLoadingWorkspaceFromURL(){if(!this.config.workspaceURLParameterName)return;let t=Wl(this.config.workspaceURLParameterName);if(t)try{let i=await(await fetch(t)).json();Array.isArray(i)||(i=[i]);let n=i[0];this.scriptList=n.modules.map(s=>({title:s.name,text:s.text}))}catch(e){console.log("Error retreiving or converting data from URL "+t+" to json."),console.error(e);return}}async initScripts(){var t;if((t=this.fileExplorer)==null||t.removeAllFiles(),await this.tryLoadingWorkspaceFromURL(),this.initWorkspace(this.scriptList),this.config.withFileList){for(let e of this.currentWorkspace.getFiles())this.fileExplorer.addFile(e);this.fileExplorer.selectFirstFileIfPresent()}else this.setFileActive(this.currentWorkspace.getFirstFile());this.getCompiler().triggerCompile()}readConfig(t){let e=t.data("java-online");e!=null&&typeof e=="string"?this.config=JSON.parse(e.split("'").join('"')):this.config={},typeof this.config.cacheUserEdits!="boolean"&&(this.config.cacheUserEdits=!0),this.config.hideEditor==null&&(this.config.hideEditor=!1),this.config.hideStartPanel==null&&(this.config.hideStartPanel=!1),this.config.withBottomPanel==null&&(this.config.withBottomPanel=this.config.withConsole||this.config.withPCode||this.config.withFileList||this.config.withErrorList),this.config.hideEditor&&(this.config.withBottomPanel=!1,this.config.withClassDiagram=!1,this.config.withFileList=!1,this.config.withConsole=!1,this.config.withPCode=!1,this.config.withErrorList=!1),this.config.withBottomPanel&&(this.config.withFileList==null&&(this.config.withFileList=!0),this.config.withPCode==null&&(this.config.withPCode=!0),this.config.withConsole==null&&(this.config.withConsole=!0),this.config.withErrorList==null&&(this.config.withErrorList=!0)),this.config.speed==null&&(this.config.speed="max"),this.config.libraries==null&&(this.config.libraries=[]),this.config.jsonFilename==null&&(this.config.jsonFilename="workspace.json")}setFileActive(t){var e;if(t){this.lastActiveFile&&this.lastActiveFile.saveViewState(this.getMainEditor()),this.config.withFileList&&this.fileExplorer.markAsSelectedButDontInvokeCallback(t),this.lastActiveFile=t,this.getMainEditor().updateOptions({readOnly:!1,lineNumbersMinChars:4});try{this.editor.editor.setModel(t.getMonacoModel())}catch{console.log("Catched!")}t.restoreViewState(this.getMainEditor()),(e=this.disassembler)==null||e.disassemble()}}eraseDokuwikiSearchMarkup(t){return t.replace(/(.*?)<\/span>/g,"$1")}readScripts(t){let e=this.currentWorkspace.getFiles();if(e.forEach(n=>{n.getMonacoModel(),n.setSaved(!0)}),!this.config.cacheUserEdits){t();return}let i=this;this.indexedDB.getScript(this.config.id,n=>{var s;if(n==null)setTimeout(()=>{setInterval(()=>{i.saveScripts()},1e3)},2e3),t();else{let a=JSON.parse(n),l=a.length;for(let h of e.slice())(s=i.fileExplorer)==null||s.removeFile(h,!1);i.currentWorkspace.removeAllFiles();for(let h of a){let c=this.config.id+h;this.indexedDB.getScript(c,u=>{var g;if(u!=null){u=this.eraseDokuwikiSearchMarkup(u);let f=new Ge(this,h,u);f.getMonacoModel(),f.setSaved(!0),(g=i.fileExplorer)==null||g.addFile(f),i.currentWorkspace.addFile(f),i.showResetButton()}l--,l==0&&(setInterval(()=>{i.saveScripts()},1e3),t())})}}})}saveScripts(){var s;let t=this.currentWorkspace.getFiles(),e=[],i=!1;if(t.forEach(a=>i=i||!a.isSaved()),i){for(let a of t){e.push(a.name);let l=this.config.id+a.name;this.indexedDB.writeScript(l,a.getText()),a.setSaved(!0)}this.indexedDB.writeScript(this.config.id,JSON.stringify(e))}let n=(s=this.rightDiv)==null?void 0:s.classDiagram;n&&n.dirty&&(this.indexedDB.writeScript(this.config.id+"-classDiagram",JSON.stringify(n.serialize())),n.dirty=!1)}deleteScriptsInDB(){this.indexedDB.getScript(this.config.id,t=>{if(t!=null){let e=JSON.parse(t);for(let i of e){let n=this.config.id+i;this.indexedDB.removeScript(n)}this.indexedDB.removeScript(this.config.id)}}),this.indexedDB.removeScript(this.config.id+"-classDiagram")}initWorkspace(t){this.currentWorkspace=new wi("Embedded-Workspace",this,0),this.currentWorkspace.settings.libraries=this.config.libraries,this.currentWorkspace.id=0;for(let e of t)this.addFile(e)}addFile(t){Ai.filenameToFileType(t.title);let e=new Ge(this,t.title,t.text);e.id=this.currentWorkspace.getFiles().length,this.currentWorkspace.addFile(e);let i=this;return e.getMonacoModel().onDidChangeContent(()=>{i.considerShowingCodeResetButton()}),e}removeFile(t){var e;this.currentWorkspace.removeFile(t),(e=this.getCompiler())==null||e.triggerCompile()}initGUI(t){t.css({"background-image":"none","background-size":"100%"});let e=y('
'),i=this.makeCodeResetModalWindow(t),n=this.makeRightDiv(),s=y('
');this.$monacoDiv=y('
'),this.$hintDiv=y('
'),this.$resetButton=y('
Code Reset
'),s.append(this.$monacoDiv,this.$hintDiv,this.$resetButton),this.$resetButton.hide(),this.$resetButton.on("click",()=>{i.show()}),this.$hintDiv.hide();let a=y('
'),l=y('
'),h=y(''),c=this;h.find("input").on("change",te=>{var Y=te.originalEvent.target.files;c.loadWorkspaceFromFile(Y[0])});let u=y('
');if(u.on("click",()=>{c.saveWorkspaceToFile()}),a.append(h,u),this.config.withBottomPanel){let te=y('
');l.append(a),te.append(l),this.config.withFileList&&(this.$filesDiv=this.makeFilesDiv(),te.prepend(this.$filesDiv),new Vr(this.$filesDiv[0],!1,!1,()=>{}),this.fileExplorer=new Lv(this.$filesDiv,this)),gp(l),e.append(s,te),this.verticalSlider=new Vr(te[0],!0,!0,()=>{this.editor.editor.layout()})}else e.prepend(s);this.config.withBottomPanel||(this.config.hideEditor?n.prepend(a):(e.prepend(a),a.addClass("joe_controlPanel_top"),s.css({position:"relative",height:"1px"}))),t.addClass("joe_javaOnlineDiv"),t.append(e,n),this.config.hideEditor||(this.horizontalSlider=new Vr(n[0],!0,!1,()=>{this.editor.editor.layout()})),this.actionManager=new kp(t),this.actionManager.init(),this.editor=new lg(this,!1,!0),this.editor.initGUI(this.$monacoDiv),this.$monacoDiv.find(".monaco-editor").css("z-index","10"),t.attr("tabindex")==null&&t.attr("tabindex","0"),this.config.withBottomPanel&&(this.bottomDiv=new Cg(this,l,this.config.withConsole,this.config.withPCode,this.config.withErrorList,!0),this.bottomDiv.initGUI());let g=this.$rightDivInner.find(".jo_graphics")[0],f=this.$rightDivInner.find(".jo_coordinates")[0];this.debugger=new wp(this.$debuggerDiv[0],!1,this);let b=new dp(this),A=new hg(this.$runDiv,this),S=new gg(this.$runDiv,this),w=new dg(this),C=new _p(y("html"),this),q=new qp(this);this.interpreter=new ra(S,this.actionManager,new Cp(g,f),C,b,this.debugger,q,A,w,new wg(this),this);let I=new mm;this.language=Dd.registerMain(this,I),this.config.withBottomPanel&&new kg(this,this.bottomDiv.jUnitTab.bodyDiv),this.getCompiler().eventManager.on("compilationFinishedWithNewExecutable",this.onCompilationFinished,this),this.config.withBottomPanel&&this.config.withPCode&&(this.disassembler=new Ag(this.bottomDiv.disassemblerTab.bodyDiv,this)),this.programControlButtons=new fg(a,this.interpreter,this.actionManager),new zp(this);let W=y('
');W[0].title="Über die Online-IDE...",a.append(W),W.on("mousedown",te=>{te.preventDefault(),te.stopPropagation(),Ln([{caption:"Über die Online-IDE ...",link:"https://www.online-ide.de",callback:()=>{}}],te.pageX+2,te.pageY+2)}),this.embeddedFullpageController=new qv(this,this.$outerDiv[0],a[0]),setTimeout(()=>{this.editor.editor.layout(),this.programControlButtons.speedControl.setSpeedInStepsPerSecond(this.config.speed)},200),this.config.hideEditor&&(e.hide(),n.css("flex","1"),this.config.hideStartPanel?t.find(".joe_controlsDiv").hide():(t.find(".joe_rightDivInner").css("height","calc(100% - 24px)"),t.find(".joe_controlsDiv").css("padding","2px"),t.find(".jo_speedcontrol-outer").css("z-index","10")))}hideDebugger(){this.$debuggerDiv.hide(),this.$alternativeDebuggerDiv.show()}showDebugger(){this.$debuggerDiv.show(),this.$alternativeDebuggerDiv.hide()}makeCodeResetModalWindow(t){let e=y(`
Warnung:
Soll der Code wirklich auf den Ausgangszustand zurückgesetzt werden?
Alle von Dir gemachten Änderungen werden damit verworfen.
Abbrechen
OK
`);return e.hide(),t.append(e),this.$outerDiv.find(".joe_codeResetModalCancel").on("click",()=>{e.hide()}),this.$outerDiv.find(".joe_codeResetModalOK").on("click",async()=>{await this.initScripts(),this.currentWorkspace.getFiles().forEach(i=>i.setSaved(!0)),this.deleteScriptsInDB(),e.hide(),this.$resetButton.hide(),this.compileRunsAfterCodeReset=1}),e}makeFilesDiv(){return y('
')}considerShowingCodeResetButton(){this.compileRunsAfterCodeReset++,this.compileRunsAfterCodeReset==3&&this.$resetButton.fadeIn(1e3)}drawClassDiagrams(t){clearTimeout(this.debounceDiagramDrawing),this.debounceDiagramDrawing=setTimeout(()=>{var e,i;(i=(e=this.rightDiv)==null?void 0:e.classDiagram)==null||i.drawDiagram(this.currentWorkspace,t)},500)}async saveWorkspaceToFile(){let t=prompt("Bitte geben Sie den Dateinamen ein",this.config.jsonFilename);if(t==null){alert("Der Dateiname ist leer, daher wird nichts gespeichert.");return}t.endsWith(".json")||(t=t+".json");let e=this.currentWorkspace,i=await Lr.exportWorkspace(e);Or(i,t)}loadWorkspaceFromFile(t){let e=this;if(t!=null){var i=new FileReader;i.onload=async n=>{let s=n.target.result,a=JSON.parse(s);if(Array.isArray(a)){if(a.length==0){alert(`
Das Format der Datei ${t.name} passt nicht.
`);return}a=a[0]}if(a.modules==null||a.name==null||a.settings==null){alert(`
Das Format der Datei ${t.name} passt nicht.
`);return}let l=new wi(a.name,this,0);l.settings=a.settings,l.id=0;for(let h of a.modules){let c=new Ge(this,h.name,h.text);l.addFile(c)}if(e.currentWorkspace=l,a.spritesheetBase64){let h=Am(a.spritesheetBase64);await new ws().initializeSpritesheetForWorkspace(l,this,h)}e.fileExplorer!=null?(e.fileExplorer.removeAllFiles(),l.getFiles().forEach(h=>e.fileExplorer.addFile(h)),e.fileExplorer.selectFirstFileIfPresent()):this.setFileActive(this.currentWorkspace.getFirstFile()),this.getCompiler().triggerCompile(),e.saveScripts(),this.showResetButton()},i.readAsText(t)}}showResetButton(){this.$resetButton.fadeIn(1e3)}makeRightDiv(){let t=y('
');if(this.$rightDivInner=y('
'),t.append(this.$rightDivInner),this.$outerDiv.append(t),this.rightDiv=new bg(this,this.$outerDiv[0],this.config.withClassDiagram),this.rightDiv.initGUI(),this.$debuggerDiv=y('
'),this.$alternativeDebuggerDiv=y(`
Tipp:
Die Variablen sind nur dann sichtbar, wenn das Programm
  • im Einzelschrittmodus ausgeführt wird(Klick auf ),
  • an einem Breakpoint hält (Setzen eines Breakpoints mit Mausklick links neben den Zeilennummern und anschließendes Starten des Programms mit ) oder
  • in sehr niedriger Geschwindigkeit ausgeführt wird (weniger als 10 Schritte/s).
`),!this.config.hideEditor){let e=new wn("Debugger",["jo_scrollable","jo_editorFontSize","jo_variablesTab"]);this.rightDiv.tabManager.addTab(e);let i=y(e.bodyDiv);this.$debuggerDiv.hide(),i.append(this.$debuggerDiv,this.$alternativeDebuggerDiv)}return this.$runDiv=y(this.rightDiv.outputTab.bodyDiv),t}async loadUserSpritesheet(){this.config.spritesheetURL!=null&&await new ws().initializeSpritesheetForWorkspace(this.currentWorkspace,this,this.config.spritesheetURL)}showFile(t){var e;t&&((e=this.fileExplorer)==null||e.selectFile(t,!1))}getDisassembler(){return this.disassembler}showJUnitDiv(){var t;(t=this.bottomDiv)==null||t.showJunitTab()}showProgramPosition(t,e,i=!0){this.showFile(t),e&&(e.startLineNumber&&(e=ee.getStartPosition(e)),i&&this.getMainEditor().setPosition(e),this.getMainEditor().revealPositionInCenterIfOutsideViewport(e),this.getMainEditor().focus())}markFilesAsStartable(t,e){var i;(i=this.fileExplorer)==null||i.markFilesAsStartable(t,e)}onStartFileClicked(t){this.interpreter.start(t)}}function Wv(){fetch(Gp).then(p=>p.json()).then(p=>{to.load(pm).then(t=>{let e=t.source;e.minFilter="nearest",e.magFilter="nearest",p.meta.size.w=t.width,p.meta.size.h=t.height;let i=new tp(t,p);i.parse().then(()=>{to.cache.set("spritesheet",i)})})})}function Nv(){self.MonacoEnvironment={getWorker:(p,t)=>{switch(t){case"json":return new Fg;case"css":case"scss":case"less":return new Lg;case"html":case"handlebars":case"razor":return new Vg;case"typescript":case"javascript":return new Og;default:return new Bg}}}}class Rv{constructor(){r(this,"startupComplete",2)}initGUI(){this.checkStartupComplete()}initEditor(){this.checkStartupComplete()}checkStartupComplete(){this.startupComplete--,this.startupComplete==0&&this.start()}start(){this.initJavaOnlineDivs()}async initJavaOnlineDivs(){let t=[];y(".java-online").addClass("notranslate").each((e,i)=>{let n=y(i),s=[];n.find("script").each((a,l)=>{let h=y(l),c=h.attr("src"),u=h.text().trim(),g={title:h.attr("title"),text:u};h.data("type")=="hint"&&!g.title.endsWith(".md")&&(g.title+=".md"),c!=null&&(g.url=c),g.text=this.eraseDokuwikiSearchMarkup(g.text),s.push(g)}),t.push([n,s])});for(let e of t)new lp(e[0][0]).switchTheme("dark"),await this.initDiv(e[0],e[1])}eraseDokuwikiSearchMarkup(t){return t.replace(/(.*?)<\/span>/g,"$1")}async initDiv(t,e){t.addClass("joeCssFence");for(let i of e)if(i.url!=null){const n=await fetch(i.url);i.text=await n.text()}new xg(t,e)}}y(function(){let p=new Rv;Nv(),p.initEditor(),p.initGUI(),Wv(),console.log("Online-IDE embedded Version 2.2.1 vom 24.4.2026, 22:38 Uhr")});export{AA as _,kA as a,yA as c,vA as g}; //# sourceMappingURL=online-ide-embedded.js.map