@pie-players/pie-section-player 0.3.73 → 0.3.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/README.md +395 -149
  2. package/dist/browser/assets/evaluation-worker-CORp9m0K.js +156459 -0
  3. package/dist/browser/chunks/ItemToolBar-jx38w99s-58defccc.js +1 -0
  4. package/dist/browser/chunks/PUA-tLuTiQ7--f2b27953.js +1 -0
  5. package/dist/browser/chunks/ToolCoordinator-cc2dc319.js +1 -0
  6. package/dist/browser/chunks/accents-BTUYmhn9-cafeb96e.js +1 -0
  7. package/dist/browser/chunks/accents-b-i-CngHZsLL-e0eb98fd.js +1 -0
  8. package/dist/browser/chunks/arabic-BzEHMVZD-30ac1ade.js +1 -0
  9. package/dist/browser/chunks/arrows-VjxlU-jv-2e17c192.js +1 -0
  10. package/dist/browser/chunks/base-dfd67c41.js +1 -0
  11. package/dist/browser/chunks/braille-BeWC_Ruq-a3bb8ef9.js +1 -0
  12. package/dist/browser/chunks/braille-d-Dk6J96GO-d832bfbf.js +1 -0
  13. package/dist/browser/chunks/browser-a3c32178.js +37 -0
  14. package/dist/browser/chunks/calculator-element-271c142f.js +13 -0
  15. package/dist/browser/chunks/calligraphic-Cew9cU3x-04cf0735.js +1 -0
  16. package/dist/browser/chunks/catalog-context-46d3e50e.js +1 -0
  17. package/dist/browser/chunks/catalog-owner-d602f784.js +1 -0
  18. package/dist/browser/chunks/cherokee-Cny3FYho-4da7d2f3.js +1 -0
  19. package/dist/browser/chunks/classPrivateFieldGet2-338e0179.js +1 -0
  20. package/dist/browser/chunks/cyrillic-CfCDulXU-5550df0b.js +1 -0
  21. package/dist/browser/chunks/cyrillic-ss-lU7bNGG9-12eb0188.js +1 -0
  22. package/dist/browser/chunks/defineProperty-a20a667d.js +1 -0
  23. package/dist/browser/chunks/devanagari-CDIz2h-r-18c38725.js +1 -0
  24. package/dist/browser/chunks/dist-41b39e7f.js +1 -0
  25. package/dist/browser/chunks/dist-59132a53.js +1 -0
  26. package/dist/browser/chunks/dist-60d7afef.js +1 -0
  27. package/dist/browser/chunks/dist-ca9b9622.js +1 -0
  28. package/dist/browser/chunks/double-struck-BpJEQk8y-500ce8dd.js +1 -0
  29. package/dist/browser/chunks/en-5ff22e17.js +1 -0
  30. package/dist/browser/chunks/es-a0ba6cb6.js +1 -0
  31. package/dist/browser/chunks/focus-trap-44913bf3.js +1 -0
  32. package/dist/browser/chunks/fraktur-rLEq9DEH-44cc14d8.js +1 -0
  33. package/dist/browser/chunks/greek-BlraJTyL-90ce8924.js +1 -0
  34. package/dist/browser/chunks/greek-ss-D-EN2PK0-91610739.js +1 -0
  35. package/dist/browser/chunks/hebrew-GiQZeybp-b583f555.js +1 -0
  36. package/dist/browser/chunks/latin-b-BhEnC7R2-d13e06ff.js +1 -0
  37. package/dist/browser/chunks/latin-bi-DqiIKv3U-1dec8705.js +1 -0
  38. package/dist/browser/chunks/latin-i-B1xtwaE1-21637466.js +1 -0
  39. package/dist/browser/chunks/latin-xfWFlLkD-5bcea5cf.js +1 -0
  40. package/dist/browser/chunks/logger-8b07fb72.js +1 -0
  41. package/dist/browser/chunks/marrows-DD1NgMQi-15b63755.js +1 -0
  42. package/dist/browser/chunks/math-DpWn1mbG-38eeb914.js +1 -0
  43. package/dist/browser/chunks/math-rendering-ready-9a0fd90a.js +1 -0
  44. package/dist/browser/chunks/mathjax-BKrHE4xs-3ca05bf6.js +232 -0
  45. package/dist/browser/chunks/module-0191e321.js +74 -0
  46. package/dist/browser/chunks/module-shim-58659a86.js +0 -0
  47. package/dist/browser/chunks/module-shim-b4470740.js +12 -0
  48. package/dist/browser/chunks/monospace-D116QD2a-98d484fd.js +1 -0
  49. package/dist/browser/chunks/monospace-ex-DcXpouKS-456b403c.js +1 -0
  50. package/dist/browser/chunks/monospace-l-Ct5wkMDs-f34a4a9e.js +1 -0
  51. package/dist/browser/chunks/mshapes-DCp86WSX-c0055952.js +1 -0
  52. package/dist/browser/chunks/nl-NL-364d61b9.js +1 -0
  53. package/dist/browser/chunks/nl-NL-8b7e6d4b.js +1 -0
  54. package/dist/browser/chunks/overlay-containment-edaaff13.js +1 -0
  55. package/dist/browser/chunks/overlay-placement-e8058232.js +1 -0
  56. package/dist/browser/chunks/phonetics-BwOCw2Y9-d2e3af59.js +1 -0
  57. package/dist/browser/chunks/phonetics-ss-CRtMn02f-579b6135.js +1 -0
  58. package/dist/browser/chunks/pie-api-client-687c319a.js +1 -0
  59. package/dist/browser/chunks/pointer-gesture-ce75f0a7.js +1 -0
  60. package/dist/browser/chunks/preload-helper-6ad28da3.js +1 -0
  61. package/dist/browser/chunks/provider-4c704118.js +1 -0
  62. package/dist/browser/chunks/rolldown-runtime-1287ba31.js +1 -0
  63. package/dist/browser/chunks/runtime-wcU7KOFU-ac86d7b8.js +8536 -0
  64. package/dist/browser/chunks/sanitize-svg-icon-b9082bba.js +3 -0
  65. package/dist/browser/chunks/sans-serif-BYPZKlE9-2efdbcd9.js +1 -0
  66. package/dist/browser/chunks/sans-serif-b-B0kRKiC--b5530dce.js +1 -0
  67. package/dist/browser/chunks/sans-serif-bi-DXWul6mu-5370dba4.js +1 -0
  68. package/dist/browser/chunks/sans-serif-ex-Boux1kMP-aa178f31.js +1 -0
  69. package/dist/browser/chunks/sans-serif-i-676RFaSO-2db54474.js +1 -0
  70. package/dist/browser/chunks/sans-serif-r-DrN9xdZt-0fc72eea.js +1 -0
  71. package/dist/browser/chunks/script-0ohehnXc-526904f4.js +1 -0
  72. package/dist/browser/chunks/shapes-BG47NodJ-d59b0eca.js +1 -0
  73. package/dist/browser/chunks/src-BcptuNS5-ed25d7fd.js +191 -0
  74. package/dist/browser/chunks/sre-0162a7a9.js +53 -0
  75. package/dist/browser/chunks/sre-engine-ace23548.js +1 -0
  76. package/dist/browser/chunks/sre-engine-jd8cc08x-42d270e5.js +1 -0
  77. package/dist/browser/chunks/sre-locales-112320af.js +1 -0
  78. package/dist/browser/chunks/symbols-BqnUxf_t-83087e87.js +1 -0
  79. package/dist/browser/chunks/symbols-b-i-eg9k5hmF-9c461ac2.js +1 -0
  80. package/dist/browser/chunks/tool-annotation-toolbar-997438b4.js +249 -0
  81. package/dist/browser/chunks/tool-answer-eliminator-35483abd.js +13 -0
  82. package/dist/browser/chunks/tool-color-scheme-b7de5cdf.js +26 -0
  83. package/dist/browser/chunks/tool-dictionary-cecff3b4.js +7 -0
  84. package/dist/browser/chunks/tool-graph-cb0338e8.js +11 -0
  85. package/dist/browser/chunks/tool-host-contract-b93b482c.js +1 -0
  86. package/dist/browser/chunks/tool-instance-id-2a92deb0.js +1 -0
  87. package/dist/browser/chunks/tool-line-reader-f8ef3c6a.js +62 -0
  88. package/dist/browser/chunks/tool-periodic-table-43b133b8.js +153 -0
  89. package/dist/browser/chunks/tool-picture-dictionary-33721e91.js +4 -0
  90. package/dist/browser/chunks/tool-protractor-23f77028.js +17 -0
  91. package/dist/browser/chunks/tool-ruler-1d9a03a6.js +15 -0
  92. package/dist/browser/chunks/tool-tts-inline-98c2ce7a.js +179 -0
  93. package/dist/browser/chunks/tts-runtime-config-a7ab1ad4.js +194 -0
  94. package/dist/browser/chunks/variants-2LRNhOUP-966fc49d.js +1 -0
  95. package/dist/browser/chunks/versioned-tag-54a76be9.js +1 -0
  96. package/dist/browser/pie-section-player.js +1727 -0
  97. package/dist/browser.d.ts +10 -0
  98. package/dist/chunks/ItemToolBar-jx38w99s-1287ba31.js +28 -0
  99. package/dist/chunks/module-shim-58659a86.js +2129 -0
  100. package/dist/chunks/{nl-NL-9312c316.js → nl-NL-364d61b9.js} +9 -26
  101. package/dist/chunks/sre-engine-jd8cc08x-42d270e5.js +8 -0
  102. package/dist/components/shared/composition.d.ts +3 -2
  103. package/dist/components/shared/framework-error-latch.d.ts +32 -0
  104. package/dist/components/shared/host-element.d.ts +10 -0
  105. package/dist/components/shared/kernel-host-default-body.d.ts +14 -0
  106. package/dist/components/shared/layout-host-methods.d.ts +385 -0
  107. package/dist/components/shared/missing-tool-providers.d.ts +16 -0
  108. package/dist/components/shared/player-preload.d.ts +14 -10
  109. package/dist/components/shared/section-player-backend-delivery.d.ts +1 -1
  110. package/dist/components/shared/section-player-card-context.d.ts +5 -1
  111. package/dist/components/shared/section-player-host-runtime.d.ts +32 -19
  112. package/dist/components/shared/section-player-layout-context.d.ts +77 -0
  113. package/dist/components/shared/section-player-own-event.d.ts +10 -0
  114. package/dist/components/shared/section-player-runtime-callbacks.d.ts +1 -1
  115. package/dist/components/shared/section-player-shell-layout.svelte.d.ts +3 -11
  116. package/dist/components/shared/section-player-view-state.d.ts +6 -1
  117. package/dist/components/shared/toolkit-ready-wait.d.ts +16 -0
  118. package/dist/contracts/host-hooks.d.ts +4 -12
  119. package/dist/contracts/host-hooks.js +0 -0
  120. package/dist/contracts/runtime-host-contract.d.ts +0 -5
  121. package/dist/contracts/runtime-host-contract.js +0 -0
  122. package/dist/controllers/SectionController.d.ts +14 -0
  123. package/dist/controllers/toolkit-section-contracts.d.ts +1 -17
  124. package/dist/controllers/types.d.ts +25 -11
  125. package/dist/item-section/index.d.ts +22 -0
  126. package/dist/item-section/index.js +37 -0
  127. package/dist/pie-section-player.d.ts +4 -6
  128. package/dist/pie-section-player.js +22006 -41076
  129. package/dist/policies/index.d.ts +5 -16
  130. package/dist/policies/index.js +17 -0
  131. package/dist/policies/types.d.ts +0 -4
  132. package/package.json +33 -68
  133. package/dist/chunks/module-a516757f.js +0 -73997
  134. package/dist/chunks/nl-NL-ef6dd604.js +0 -505
  135. package/dist/chunks/pie-api-client-22de9d9c.js +0 -168
  136. package/dist/chunks/rolldown-runtime-1287ba31.js +0 -20
  137. package/dist/chunks/sre-0162a7a9.js +0 -17637
  138. package/dist/components/item-shell-element.d.ts +0 -1
  139. package/dist/components/shared/shell-registration.d.ts +0 -55
  140. package/dist/contracts/layout-contract.d.ts +0 -17
  141. package/dist/contracts/layout-parity-metadata.d.ts +0 -4
  142. package/dist/contracts/public-events.d.ts +0 -93
  143. package/dist/contracts/stages.d.ts +0 -10
  144. package/dist/policies/guards.d.ts +0 -2
  145. package/dist/utils/z-index.d.ts +0 -5
@@ -0,0 +1,191 @@
1
+ var jxg={};try{typeof JXG=="object"&&!JXG.extend&&(jxg=JXG)}catch{}jxg.extend=function(t,e,r,s){var o,a;r=r||!1,s=s||!1;for(o in e)(!r||r&&e.hasOwnProperty(o))&&(s?a=o.toLowerCase():a=o,t[a]=e[o])};jxg.defineConstant=function(t,e,r,s){s=s||!1,!(s&&jxg.exists(t[e]))&&Object.defineProperty(t,e,{value:r,writable:!1,enumerable:!0,configurable:!1})};jxg.extendConstants=function(t,e,r,s){var o,a;r=r||!1,s=s||!1;for(o in e)(!r||r&&e.hasOwnProperty(o))&&(s?a=o.toUpperCase():a=o,this.defineConstant(t,a,e[o]))};jxg.extend(jxg,{boards:{},readers:{},elements:{},registerElement:function(t,e){t=t.toLowerCase(),this.elements[t]=e},registerReader:function(t,e){for(var r=0,s;r<e.length;r++)s=e[r].toLowerCase(),typeof this.readers[s]!="function"&&(this.readers[s]=t)},shortcut:function(t,e){return function(){return t[e].apply(this,arguments)}},getRef:function(t,e){return jxg.deprecated("JXG.getRef()","Board.select()"),t.select(e)},getReference:function(t,e){return jxg.deprecated("JXG.getReference()","Board.select()"),t.select(e)},getBoardByContainerId:function(t){var e;for(e in JXG.boards)if(JXG.boards.hasOwnProperty(e)&&JXG.boards[e].container===t)return JXG.boards[e];return null},deprecated:function(t,e){var r=t+" is deprecated.";e&&(r+=" Please use "+e+" instead."),jxg.warn(r)},warn:function(t){typeof window=="object"&&window.console&&console.warn?console.warn("WARNING:",t):typeof document=="object"&&document.getElementById("warning")&&(document.getElementById("debug").innerText+="WARNING: "+t+`
2
+ `)},debugInt:function(t){for(var e=0,r;e<arguments.length;e++)r=arguments[e],typeof window=="object"&&window.console&&console.log?console.log(r):typeof document=="object"&&document.getElementById("debug")&&(document.getElementById("debug").innerText+=r+`
3
+ `)},debugWST:function(t){var e=new Error;jxg.debugInt.apply(this,arguments),e&&e.stack&&(jxg.debugInt("stacktrace"),jxg.debugInt(e.stack.split(`
4
+ `).slice(1).join(`
5
+ `)))},debugLine:function(t){var e=new Error;jxg.debugInt.apply(this,arguments),e&&e.stack&&jxg.debugInt("Called from",e.stack.split(`
6
+ `).slice(2,3).join(`
7
+ `))},debug:function(t){jxg.debugInt.apply(this,arguments)},board:function(t,e){return this.JSXGraph.initBoard(t,e)},appBox:function(t,e){var r,s,o,a,n,l,h,d,u,c;if(!JXG.isBrowser)throw new Error("JSXGraph: JXG.appBox needs a browser");if(JXG.isString(t)?(r=document.getElementById(t),s=t):(r=t,s=t.getAttribute("id")),a=document.createElement("div"),u=JXG.copyAttributes(e,JXG.Options,"board").jxgbox,o=(s!==null?s+"_":"")+u.id,a.setAttribute("id",o),a.className+="jxgbox ",a.className+=u.cssclass,a.style=u.cssstyle,n=u.outerbox,n!==null&&JXG.isArray(n)&&(l=JXG.copyAttributes(e,JXG.Options,"board").boundingbox,r.style.position="relative",h=n[2]-n[0],d=n[1]-n[3],a.style.position="absolute",a.style.left=100*(l[0]-n[0])/h+"%",a.style.top=100*(n[1]-l[1])/d+"%",a.style.width=100*(l[2]-l[0])/h+"%",a.style.height=100*(l[1]-l[3])/d+"%"),r.appendChild(a),e.moveTarget=r,c=this.board(a,e),a.style.overflow="visible",c.renderer.type==="svg")c.renderer.svgRoot.style.overflow="visible";else throw new Error("JSXGraph: JXG.appBox needs SVG renderer");return c},themes:{}});var jxg_default=jxg,major=1,minor=13,patch=3,add="",version=major+"."+minor+"."+patch+(add?"-"+add:""),constants={version,licenseText:"JSXGraph v"+version+" © jsxgraph.org",licenseLogo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJMb2dvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNzAuMDc4NzQwMiAxNzAuMDc4NzQwMiI+PHBhdGggZD0iTTY1LjE5NzM0NzMsMTEuMzM4NTgyN2MtOS42NjE5ODczLDAtMTguMzExMDM1Miw0LjQxNzcyNDYtMjQuMDM0NzksMTEuMzM4ODY3MmgxMDYuMjM5ODY4MnYxMDYuMjM5MDEzN2M2LjkyMDY1NDMtNS43MjM4NzcsMTEuMzM3ODkwNi0xNC4zNzI4MDI3LDExLjMzNzg5MDYtMjQuMDM0NDIzOFYxMS4zMzg1ODI3aC05My41NDI5Njg4WiIvPjxwYXRoIGQ9Ik0xMS4zMzg1ODI3LDY1LjE5Njc5OHY5My41NDM0NTdoOTMuNTQyOTY4OGMxNy4xOTMzNTk0LDAsMzEuMTgxNjQwNi0xMy45ODc3OTMsMzEuMTgxNjQwNi0zMS4xODExNTIzVjM0LjAxNTY0NTdINDIuNTIwMjIzM2MtMTcuMTkzMzU5NCwwLTMxLjE4MTY0MDYsMTMuOTg3NzkzLTMxLjE4MTY0MDYsMzEuMTgxMTUyM1pNODUuMDM5NzU0NiwxMzguODk3OTY5OUgzMS4xODEzNTYxdi01My44NTgzOTg0aDExLjMzNzg5MDZ2NDIuNTE5NTMxMmg0Mi41MjA1MDc4djExLjMzODg2NzJaTTkyLjEyNTY5MjEsNTEuMDIzNDU4MmMxNC44NDg2MzI4LDAsMjYuOTI4NzEwOSwxMi4wODA1NjY0LDI2LjkyODcxMDksMjYuOTI5MTk5MnMtMTIuMDgwMDc4MSwyNi45MjkxOTkyLTI2LjkyODcxMDksMjYuOTI5MTk5Mi0yNi45Mjg3MTA5LTEyLjA4MDU2NjQtMjYuOTI4NzEwOS0yNi45MjkxOTkyLDEyLjA4MDA3ODEtMjYuOTI5MTk5MiwyNi45Mjg3MTA5LTI2LjkyOTE5OTJaIi8+PHBhdGggZD0iTTkyLjEyNTY5MjEsOTMuNTQyOTg5NGM4LjU5NjY3OTcsMCwxNS41OTA4MjAzLTYuOTkzNjUyMywxNS41OTA4MjAzLTE1LjU5MDMzMnMtNi45OTQxNDA2LTE1LjU5MDMzMi0xNS41OTA4MjAzLTE1LjU5MDMzMi0xNS41OTA4MjAzLDYuOTkzNjUyMy0xNS41OTA4MjAzLDE1LjU5MDMzMiw2Ljk5NDE0MDYsMTUuNTkwMzMyLDE1LjU5MDgyMDMsMTUuNTkwMzMyWiIvPjwvc3ZnPg==",COORDS_BY_USER:1,COORDS_BY_SCREEN:2,OBJECT_TYPE_ARC:1,OBJECT_TYPE_ARROW:2,OBJECT_TYPE_AXIS:3,OBJECT_TYPE_AXISPOINT:4,OBJECT_TYPE_TICKS:5,OBJECT_TYPE_CIRCLE:6,OBJECT_TYPE_CONIC:7,OBJECT_TYPE_CURVE:8,OBJECT_TYPE_GLIDER:9,OBJECT_TYPE_IMAGE:10,OBJECT_TYPE_LINE:11,OBJECT_TYPE_POINT:12,OBJECT_TYPE_SLIDER:13,OBJECT_TYPE_CAS:14,OBJECT_TYPE_GXTCAS:15,OBJECT_TYPE_POLYGON:16,OBJECT_TYPE_SECTOR:17,OBJECT_TYPE_TEXT:18,OBJECT_TYPE_ANGLE:19,OBJECT_TYPE_INTERSECTION:20,OBJECT_TYPE_TURTLE:21,OBJECT_TYPE_VECTOR:22,OBJECT_TYPE_OPROJECT:23,OBJECT_TYPE_GRID:24,OBJECT_TYPE_TANGENT:25,OBJECT_TYPE_HTMLSLIDER:26,OBJECT_TYPE_CHECKBOX:27,OBJECT_TYPE_INPUT:28,OBJECT_TYPE_BUTTON:29,OBJECT_TYPE_TRANSFORMATION:30,OBJECT_TYPE_FOREIGNOBJECT:31,OBJECT_TYPE_VIEW3D:32,OBJECT_TYPE_POINT3D:33,OBJECT_TYPE_LINE3D:34,OBJECT_TYPE_PLANE3D:35,OBJECT_TYPE_CURVE3D:36,OBJECT_TYPE_SURFACE3D:37,OBJECT_TYPE_MEASUREMENT:38,OBJECT_TYPE_INTERSECTION_LINE3D:39,OBJECT_TYPE_SPHERE3D:40,OBJECT_TYPE_CIRCLE3D:41,OBJECT_TYPE_INTERSECTION_CIRCLE3D:42,OBJECT_TYPE_TEXT3D:43,OBJECT_TYPE_FACE3D:44,OBJECT_TYPE_POLYHEDRON3D:45,OBJECT_TYPE_POLYGON3D:46,OBJECT_CLASS_POINT:1,OBJECT_CLASS_LINE:2,OBJECT_CLASS_CIRCLE:3,OBJECT_CLASS_CURVE:4,OBJECT_CLASS_AREA:5,OBJECT_CLASS_OTHER:6,OBJECT_CLASS_TEXT:7,OBJECT_CLASS_3D:8};jxg_default.extendConstants(jxg_default,constants);var undef,memoizer=function(t){var e,r;return t.memo||(e={},r=Array.prototype.join,t.memo=function(){var s=r.call(arguments);return e[s]!==undef?e[s]:e[s]=t.apply(this,arguments)}),t.memo};jxg_default.Math={eps:1e-6,relDif:function(t,e){var r=Math.abs(t),s=Math.abs(e);return s=Math.max(r,s),s===0?0:Math.abs(t-e)/s},mod:function(t,e){return t-Math.floor(t/e)*e},wrap:function(t,e,r){return e+this.mod(t-e,r-e)},clamp:function(t,e,r){return Math.min(Math.max(t,e),r)},wrapAndClamp:function(t,e,r,s){var o=.5*(e+r),a=.5*s;return this.clamp(this.wrap(t,o-a,o+a),e,r)},vector:function(t,e){var r,s;for(e=e||0,r=[],s=0;s<t;s++)r[s]=e;return r},matrix:function(t,e,r){var s,o,a;for(r=r||0,e=e||t,s=[],o=0;o<t;o++)for(s[o]=[],a=0;a<e;a++)s[o][a]=r;return s},identity:function(t,e){var r,s;for(e===undef&&typeof e!="number"&&(e=t),r=this.matrix(t,e),s=0;s<Math.min(t,e);s++)r[s][s]=1;return r},frustum:function(t,e,r,s,o,a){var n=this.matrix(4,4);return n[0][0]=o*2/(e-t),n[0][1]=0,n[0][2]=(e+t)/(e-t),n[0][3]=0,n[1][0]=0,n[1][1]=o*2/(s-r),n[1][2]=(s+r)/(s-r),n[1][3]=0,n[2][0]=0,n[2][1]=0,n[2][2]=-(a+o)/(a-o),n[2][3]=-(a*o*2)/(a-o),n[3][0]=0,n[3][1]=0,n[3][2]=-1,n[3][3]=0,n},projection:function(t,e,r,s){var o=r*Math.tan(t/2),a=o*e;return this.frustum(-a,a,-o,o,r,s)},matVecMult:function(t,e){var r,s,o,a=t.length,n=e.length,l=[];if(n===3)for(r=0;r<a;r++)l[r]=t[r][0]*e[0]+t[r][1]*e[1]+t[r][2]*e[2];else for(r=0;r<a;r++){for(o=0,s=0;s<n;s++)o+=t[r][s]*e[s];l[r]=o}return l},vecMatMult:function(t,e){var r,s,o,a=e.length,n=t.length,l=[];if(n===3)for(r=0;r<a;r++)l[r]=t[0]*e[0][r]+t[1]*e[1][r]+t[2]*e[2][r];else for(r=0;r<n;r++){for(o=0,s=0;s<a;s++)o+=t[s]*e[s][r];l[r]=o}return l},matMatMult:function(t,e){var r,s,o,a,n=t.length,l=n>0?e[0].length:0,h=e.length,d=this.matrix(n,l);for(r=0;r<n;r++)for(s=0;s<l;s++){for(o=0,a=0;a<h;a++)o+=t[r][a]*e[a][s];d[r][s]=o}return d},matNumberMult:function(t,e){var r,s,o=t.length,a=o>0?t[0].length:0,n=this.matrix(o,a);for(r=0;r<o;r++)for(s=0;s<a;s++)n[r][s]=t[r][s]*e;return n},matMatAdd:function(t,e){var r,s,o=t.length,a=o>0?t[0].length:0,n=this.matrix(o,a);for(r=0;r<o;r++)for(s=0;s<a;s++)n[r][s]=t[r][s]+e[r][s];return n},transpose:function(t){var e,r,s,o=t.length,a=t.length>0?t[0].length:0;for(e=this.matrix(a,o),r=0;r<a;r++)for(s=0;s<o;s++)e[r][s]=t[s][r];return e},inverse:function(t){var e,r,s,o,a,n=this.eps*this.eps,l,h,d=t.length,u=[],c=[],p=[];for(e=0;e<d;e++){for(u[e]=[],r=0;r<d;r++)u[e][r]=t[e][r];c[e]=e}for(r=0;r<d;r++){for(l=Math.abs(u[r][r]),o=r,e=r+1;e<d;e++)Math.abs(u[e][r])>l&&(l=Math.abs(u[e][r]),o=e);if(l<=n)return jxg_default.warn("JXG.Math.inverse: singular matrix"),[];if(o>r){for(s=0;s<d;s++)h=u[r][s],u[r][s]=u[o][s],u[o][s]=h;h=c[r],c[r]=c[o],c[o]=h}for(a=1/u[r][r],e=0;e<d;e++)u[e][r]*=a;for(u[r][r]=a,s=0;s<d;s++)if(s!==r){for(e=0;e<d;e++)e!==r&&(u[e][s]-=u[e][r]*u[r][s]);u[r][s]=-a*u[r][s]}}for(e=0;e<d;e++){for(s=0;s<d;s++)p[c[s]]=u[e][s];for(s=0;s<d;s++)u[e][s]=p[s]}return u},trace:function(t){var e,r,s,o=0;if(r=t.length,s=t.length>0?t[0].length:0,r!==s)return NaN;for(e=0;e<s;e++)o+=t[e][e];return o},innerProduct:function(t,e,r){var s,o=0;for((r===undef||!type_default.isNumber(r))&&(r=t.length),s=0;s<r;s++)o+=t[s]*e[s];return o},crossProduct:function(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]},norm:function(t,e){var r,s=0;for((e===undef||!type_default.isNumber(e))&&(e=t.length),r=0;r<e;r++)s+=t[r]*t[r];return Math.sqrt(s)},axpy:function(t,e,r){var s,o=e.length,a=[];for(s=0;s<o;s++)a[s]=t*e[s]+r[s];return a},factorial:memoizer(function(t){return t<0?NaN:(t=Math.floor(t),t===0||t===1?1:t*this.factorial(t-1))}),binomial:memoizer(function(t,e){var r,s;if(e>t||e<0)return NaN;if(e=Math.round(e),t=Math.round(t),e===0||e===t)return 1;for(r=1,s=0;s<e;s++)r*=t-s,r/=s+1;return r}),cosh:Math.cosh||function(t){return(Math.exp(t)+Math.exp(-t))*.5},sinh:Math.sinh||function(t){return(Math.exp(t)-Math.exp(-t))*.5},acosh:Math.acosh||function(t){return Math.log(t+Math.sqrt(t*t-1))},asinh:Math.asinh||function(t){return t===-1/0?t:Math.log(t+Math.sqrt(t*t+1))},cot:function(t){var e=Math.tan(t);return Math.abs(e)<this.eps?NaN:1/e},acot:function(t){return(t>=0?.5:-.5)*Math.PI-Math.atan(t)},nthroot:function(t,e){var r;return e<=0||Math.floor(e)!==e?NaN:(r=1/e,t===0?0:t>0?Math.exp(r*Math.log(t)):e%2===1?-Math.exp(r*Math.log(-t)):NaN)},cbrt:Math.cbrt||function(t){return this.nthroot(t,3)},pow:function(t,e){return t===0?e===0?1:0:Math.floor(e)===e?Math.pow(t,e):t>0?Math.exp(e*Math.log(t)):NaN},ratpow:function(t,e,r){var s;return e===0?1:r===0?NaN:(s=this.gcd(e,r),this.nthroot(this.pow(t,e/s),r/s))},log10:function(t){return Math.log(t)/Math.log(10)},log2:function(t){return Math.log(t)/Math.log(2)},log:function(t,e){return e!==void 0&&type_default.isNumber(e)?e<=0||Math.abs(e-1)<this.eps?NaN:Math.log(t)/Math.log(e):Math.log(t)},sign:Math.sign||function(t){return t=+t,t===0||isNaN(t)?t:t>0?1:-1},squampow:function(t,e){var r;if(Math.floor(e)===e){for(r=1,e<0&&(t=1/t,e*=-1);e!==0;)e&1&&(r*=t),e>>=1,t*=t;return r}return this.pow(t,e)},gcd:function(t,e){var r,s=!0;if(t=Math.abs(t),e=Math.abs(e),!(type_default.isNumber(t)&&type_default.isNumber(e)))return NaN;for(e>t&&(r=t,t=e,e=r);s;){if(t%=e,t===0)return e;if(e%=t,e===0)return t}},lcm:function(t,e){var r;return type_default.isNumber(t)&&type_default.isNumber(e)?(r=t*e,r!==0?r/this.gcd(t,e):0):NaN},roundToStep:function(t,e,r,s){var o=t,a,n;if(!type_default.exists(e)&&!type_default.exists(r)&&!type_default.exists(s))return o;if(jxg_default.exists(s)&&(o=Math.min(o,s)),jxg_default.exists(r)&&(o=Math.max(o,r)),n=r||0,jxg_default.exists(e)){if(a=(o-n)/e,Number.isInteger(a))return o;a=Math.round(a),o=n+a*e}return jxg_default.exists(s)&&(o=Math.min(o,s)),jxg_default.exists(r)&&(o=Math.max(o,r)),o},erf:function(t){return this.ProbFuncs.erf(t)},erfc:function(t){return this.ProbFuncs.erfc(t)},erfi:function(t){return this.ProbFuncs.erfi(t)},ndtr:function(t){return this.ProbFuncs.ndtr(t)},ndtri:function(t){return this.ProbFuncs.ndtri(t)},hypot:function(){var t,e=arguments.length,r,s;for(t=0,s=0;t<e;t++)r=arguments[t],s+=r*r;return Math.sqrt(s)},hstep:function(t){return t>0?1:t<0?0:.5},gamma:function(t){var e,r,s,o,a,n=7,l=[1,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,15056327351493116e-23];if(t<.5)r=Math.PI/(Math.sin(Math.PI*t)*this.gamma(1-t));else{for(t-=1,e=l[0],a=l.length,o=1;o<a;o++)e+=l[o]/(t+o);s=t+n+.5,r=Math.sqrt(2*Math.PI)*Math.pow(s,t+.5)*Math.exp(-s)*e}return r},lt:function(t,e){return t<e},leq:function(t,e){return t<=e},gt:function(t,e){return t>e},geq:function(t,e){return t>=e},eq:function(t,e){return t===e},neq:function(t,e){return t!==e},and:function(t,e){return t&&e},not:function(t){return!t},or:function(t,e){return t||e},xor:function(t,e){return(t||e)&&!(t&&e)},decToFraction:function(t,e){var r,s,o,a,n,l,h,d,u,c=0,p=20;for(e=type_default.def(e,.001),t=Math.round(t*1e12)*1e-12,s=t<0?-1:1,t=Math.abs(t),r=Math.floor(t),t-=Math.floor(t),o=0,l=1,a=n=o,u=0,h=d=1;t-Math.floor(t)>e&&c<p;)t=1/(t-o),o=Math.floor(t),a=l+o*n,h=u+o*d,l=n,u=d,n=a,d=h,c++;return[s,r,a,h]},normalize:function(t){var e,r,s=2*t[3],o=t[4]/s;return t[5]=o,t[6]=-t[1]/s,t[7]=-t[2]/s,isFinite(o)?Math.abs(o)>=1?(t[0]=(t[6]*t[6]+t[7]*t[7]-o*o)/(2*o),t[1]=-t[6]/o,t[2]=-t[7]/o,t[3]=1/(2*o),t[4]=1):(r=o<=0?-1:1,t[0]=r*(t[6]*t[6]+t[7]*t[7]-o*o)*.5,t[1]=-r*t[6],t[2]=-r*t[7],t[3]=r/2,t[4]=r*o):(e=this.hypot(t[1],t[2]),t[0]/=e,t[1]/=e,t[2]/=e,t[3]=0,t[4]=1),t},toGL:function(t){var e,r,s;if(typeof Float32Array=="function"?e=new Float32Array(16):e=new Array(16),t.length!==4&&t[0].length!==4)return e;for(r=0;r<4;r++)for(s=0;s<4;s++)e[r+4*s]=t[r][s];return e},Vieta:function(t){var e=t.length,r=[],s,o,a;for(r=t.slice(),s=1;s<e;++s){for(a=r[s],r[s]*=r[s-1],o=s-1;o>=1;--o)r[o]+=r[o-1]*a;r[0]+=a}return r}};var math_default=jxg_default.Math;jxg_default.extend(jxg_default,{isBoard:function(t){return t!==null&&typeof t=="object"&&this.isNumber(t.BOARD_MODE_NONE)&&this.isObject(t.objects)&&this.isObject(t.jc)&&this.isFunction(t.update)&&!!t.containerObj&&this.isString(t.id)},isId:function(t,e){return typeof e=="string"&&!!t.objects[e]},isName:function(t,e){return typeof e=="string"&&!!t.elementsByName[e]},isGroup:function(t,e){return typeof e=="string"&&!!t.groups[e]},isString:function(t){return typeof t=="string"},isNumber:function(t,e,r){var s=typeof t=="number"||Object.prototype.toString.call(t)==="[Object Number]";return e=e||!1,r=r===void 0?!0:r,e&&(s=s||""+parseFloat(t)===t),r||(s=s&&!isNaN(t)),s},isFunction:function(t){return typeof t=="function"},isArray:function(t){var e;return Array.isArray?e=Array.isArray(t):e=t!==null&&typeof t=="object"&&typeof t.splice=="function"&&typeof t.join=="function",e},isObject:function(t){return typeof t=="object"&&!this.isArray(t)},isDocumentOrFragment:function(t){return this.isObject(t)&&(t.nodeType===9||t.nodeType===11)},isPoint:function(t){return t!==null&&typeof t=="object"&&this.exists(t.elementClass)?t.elementClass===constants.OBJECT_CLASS_POINT:!1},isPoint3D:function(t){return t!==null&&typeof t=="object"&&this.exists(t.type)?t.type===constants.OBJECT_TYPE_POINT3D:!1},isPointType:function(t,e){var r,s;return this.isArray(e)||this.isFunction(e)&&(r=e(),this.isArray(r)&&r.length>1)?!0:(s=t.select(e),this.isPoint(s))},isPointType3D:function(t,e){var r,s;return this.isArray(e)&&e.length>=3||this.isFunction(e)&&(r=e(),this.isArray(r)&&r.length>=3)?!0:(s=t.select(e),this.isPoint3D(s))},isTransformationOrArray:function(t){if(t!==null){if(this.isArray(t)&&t.length>0)return this.isTransformationOrArray(t[0]);if(typeof t=="object")return t.type===constants.OBJECT_TYPE_TRANSFORMATION}return!1},isEmpty:function(t){return Object.keys(t).length===0},exists:function(t,e){var r=!(t==null||t===null);return e=e||!1,e?r&&t!=="":r},def:function(t,e){return this.exists(t)?t:e},str2Bool:function(t){return this.exists(t)?typeof t=="boolean"?t:this.isString(t)?t.toLowerCase()==="true":!1:!0},cssParse:function(t){var e=t;return this.isString(e)?(e=e.replace(/\s*;\s*$/g,""),e=e.replace(/\s*;\s*/g,'","'),e=e.replace(/\s*:\s*/g,'":"'),e=e.trim(),e='{"'+e+'"}',JSON.parse(e)):{}},css2js:function(t){var e=[],r,s,o,a,n,l=jxg_default.trim(t).replace(/;$/,"").split(";");for(s=l.length,r=0;r<s;++r)jxg_default.trim(l[r])!==""&&(n=l[r].split(":"),o=jxg_default.trim(n[0].replace(/-([a-z])/gi,function(h,d){return d.toUpperCase()})),a=jxg_default.trim(n[1]),e.push({key:o,val:a}));return e},cssStringify:function(t){var e="",r,s;if(!this.isObject(t))return"";for(r in t)t.hasOwnProperty(r)&&(s=t[r],(this.isString(s)||this.isNumber(s))&&(e+=r+":"+s+"; "));return e=e.trim(),e},createEvalFunction:function(t,e,r){var s=[],o,a,n,l={};for(a=0;a<r;a++){s[a]=this.createFunction(e[a],t);for(n in s[a].deps)l[n]=s[a].deps}return o=function(h){return s[h]()},o.deps=l,o},createFunction:function(t,e,r,s){var o=null;return this.isString(t)?o=e.jc.snippet(t,!0,r,!1):this.isFunction(t)?(o=t,o.deps=this.isObject(t.deps)?t.deps:{}):(this.isNumber(t)||this.isArray(t))&&(o=function(){return t},o.deps={}),o!==null&&(o.origin=t,o.variable=r),o},providePoints:function(t,e,r,s,o){var a,n,l,h=0,d=[],u,c;for(this.isArray(e)||(e=[e]),l=e.length,this.exists(o)&&(h=o.length),h===0&&(u=this.copyAttributes(r,t.options,s)),a=0;a<l;++a)if(h>0&&(n=Math.min(a,h-1),u=this.copyAttributes(r,t.options,s,o[n].toLowerCase())),this.isArray(e[a])&&e[a].length>1?(d.push(t.create("point",e[a],u)),d[d.length-1]._is_new=!0):this.isFunction(e[a])?(c=e[a](),this.isArray(c)&&c.length>1&&(d.push(t.create("point",[e[a]],u)),d[d.length-1]._is_new=!0)):d.push(t.select(e[a])),!this.isPoint(d[a]))return!1;return d},providePoints3D:function(t,e,r,s,o){var a,n,l,h=0,d=[],u,c;for(this.isArray(e)||(e=[e]),l=e.length,this.exists(o)&&(h=o.length),h===0&&(u=this.copyAttributes(r,t.board.options,s)),a=0;a<l;++a){if(h>0&&(n=Math.min(a,h-1),u=this.copyAttributes(r,t.board.options,s,o[n])),this.isArray(e[a])&&e[a].length>0&&e[a].every(p=>this.isArray(p)&&this.isNumber(p[0])))for(n=0;n<e[a].length;n++)d.push(t.create("point3d",e[a][n],u)),d[d.length-1]._is_new=!0;else this.isArray(e[a])&&e[a].every(p=>this.isNumber(p)||this.isFunction(p))?(d.push(t.create("point3d",e[a],u)),d[d.length-1]._is_new=!0):this.isPoint3D(e[a])?d.push(e[a]):this.isFunction(e[a])?(c=e[a](),this.isArray(c)&&c.length>1&&(d.push(t.create("point3d",[e[a]],u)),d[d.length-1]._is_new=!0)):d.push(t.select(e[a]));if(!this.isPoint3D(d[a]))return!1}return d},bind:function(t,e){return function(){return t.apply(e,arguments)}},evaluate:function(t){var e,r,s;if(this.isFunction(t))return t();if(this.isArray(t)){for(r=t.length,s=[],e=0;e<r;e++)s.push(this.evaluate(t[e]));return s}return t},indexOf:function(t,e,r){var s,o=this.exists(r);if(Array.indexOf&&!o)return t.indexOf(e);for(s=0;s<t.length;s++)if(o&&t[s][r]===e||!o&&t[s]===e)return s;return-1},eliminateDuplicates:function(t){var e,r=t.length,s=[],o={};for(e=0;e<r;e++)o[t[e]]=0;for(e in o)o.hasOwnProperty(e)&&s.push(e);return s},swap:function(t,e,r){var s=t[e];return t[e]=t[r],t[r]=s,t},uniqueArray:function(t){var e,r,s,o=[];if(t.length===0)return[];for(e=0;e<t.length;e++){if(s=this.isArray(t[e]),!this.exists(t[e])){t[e]="";continue}for(r=e+1;r<t.length;r++)s&&jxg_default.cmpArrays(t[e],t[r])?t[e]=[]:!s&&t[e]===t[r]&&(t[e]="")}for(r=0,e=0;e<t.length;e++)s=this.isArray(t[e]),!s&&t[e]!==""?(o[r]=t[e],r++):s&&t[e].length!==0&&(o[r]=t[e].slice(0),r++);return t=o,o},toUniqueArrayFloat:function(t,e){var r=t.slice(),s,o;for(r.sort(function(a,n){return a-n}),o=r.length,s=o-1;s>0;s--)Math.abs(r[s]-r[s-1])<e&&r.splice(s,1);return r},isInArray:function(t,e){return jxg_default.indexOf(t,e)>-1},coordsArrayToMatrix:function(t,e){var r,s=[],o=[];for(r=0;r<t.length;r++)e?(s.push(t[r].usrCoords[1]),o.push(t[r].usrCoords[2])):o.push([t[r].usrCoords[1],t[r].usrCoords[2]]);return e&&(o=[s,o]),o},cmpArrays:function(t,e){var r;if(t===e)return!0;if(t.length!==e.length)return!1;for(r=0;r<t.length;r++)if(this.isArray(t[r])&&this.isArray(e[r])){if(!this.cmpArrays(t[r],e[r]))return!1}else if(t[r]!==e[r])return!1;return!0},removeElementFromArray:function(t,e){for(var r=0;r<t.length;r++)if(t[r]===e)return t.splice(r,1),t;return t},trunc:function(t,e){return e=jxg_default.def(e,0),this.toFixed(t,e)},_decimalAdjust:function(t,e,r){return r===void 0||+r==0?Math[t](e):(e=+e,r=+r,isNaN(e)||!(typeof r=="number"&&r%1===0)?NaN:(e=e.toString().split("e"),e=Math[t](+(e[0]+"e"+(e[1]?+e[1]-r:-r))),e=e.toString().split("e"),+(e[0]+"e"+(e[1]?+e[1]+r:r))))},_round10:function(t,e){return this._decimalAdjust("round",t,e)},_floor10:function(t,e){return this._decimalAdjust("floor",t,e)},_ceil10:function(t,e){return this._decimalAdjust("ceil",t,e)},toFixed:function(t,e){return this._round10(t,-e).toFixed(e)},autoDigits:function(t){var e=Math.abs(t),r;return e>=.1?r=this.toFixed(t,2):e>=.01?r=this.toFixed(t,4):e>=1e-4?r=this.toFixed(t,6):r=t,r},parseNumber:function(t,e,r){var s;return this.isString(t)&&t.indexOf("%")>-1?(s=t.replace(/\s+%\s+/,""),parseFloat(s)*e*.01):this.isString(t)&&t.indexOf("fr")>-1?(s=t.replace(/\s+fr\s+/,""),parseFloat(s)*e):this.isString(t)&&t.indexOf("px")>-1?(s=t.replace(/\s+px\s+/,""),s=parseFloat(s),this.isFunction(r)?r(s):this.isNumber(r)?s*r:s):parseFloat(t)},parsePosition:function(t){var e,r,s="",o="";if(t=t.trim(),t!=="")for(e=t.split(/[ ,]+/),r=0;r<e.length;r++)e[r]==="left"||e[r]==="right"?s=e[r]:o=e[r];return{side:s,pos:o}},keys:function(t,e){var r=[],s;for(s in t)e?t.hasOwnProperty(s)&&r.push(s):r.push(s);return r},clone:function(t){var e={};return e.prototype=t,e},cloneAndCopy:function(t,e){var r,s=function(){};s.prototype=t;for(r in e)s[r]=e[r];return s},merge:function(t,e){var r,s,o,a;for(r in e)if(e.hasOwnProperty(r))if(o=e[r],this.isArray(o))for(t[r]||(t[r]=[]),s=0;s<o.length;s++)a=e[r][s],typeof e[r][s]=="object"?t[r][s]=this.merge(t[r][s],a):t[r][s]=e[r][s];else typeof o=="object"?(t[r]||(t[r]={}),t[r]=this.merge(t[r],o)):(typeof t=="boolean"&&(t={}),t[r]=o);return t},deepCopy:function(t,e,r){var s,o,a,n;if(r=r||!1,typeof t!="object"||t===null)return t;if(this.isArray(t))for(s=[],o=0;o<t.length;o++)a=t[o],a!==null&&typeof a=="object"?this.exists(a.board)?s[o]=a.id:s[o]=this.deepCopy(a,{},r):s[o]=a;else{s={};for(o in t)t.hasOwnProperty(o)&&(n=r?o.toLowerCase():o,a=t[o],a!==null&&typeof a=="object"?this.exists(a.board)?s[n]=a.id:s[n]=this.deepCopy(a,{},r):s[n]=a);for(o in e)e.hasOwnProperty(o)&&(n=r?o.toLowerCase():o,a=e[o],a!==null&&typeof a=="object"?this.isArray(a)||!this.exists(s[n])?s[n]=this.deepCopy(a,{},r):s[n]=this.deepCopy(s[n],a,r):s[n]=a)}return s},mergeAttr:function(t,e,r,s){var o,a,n;r=r||!0,s=s||!1;for(o in e)e.hasOwnProperty(o)&&(a=r?o.toLowerCase():o,a!==o&&t.hasOwnProperty(o)&&(t.hasOwnProperty(a)?this.mergeAttr(t[a],t[o],r):t[a]=t[o],delete t[o]),n=e[o],this.isObject(n)&&n!==null&&!this.isDocumentOrFragment(n)&&!this.exists(n.board)&&typeof n.valueOf()!="string"?((t[a]===void 0||t[a]===null||!this.isObject(t[a]))&&(t[a]={}),this.mergeAttr(t[a],n,r)):(!s||this.exists(n))&&(t[a]=n))},keysToLowerCase:function(t){var e,r,s=Object.keys(t),o=s.length,a={};if(typeof t!="object")return t;for(;o--;)e=s[o],t.hasOwnProperty(e)&&(r=t[e],typeof r=="object"&&r!==null&&!this.isArray(r)&&!this.exists(r.nodeType)&&!this.exists(r.board)?a[e.toLowerCase()]=this.keysToLowerCase(r):a[e.toLowerCase()]=r);return a},copyAttributes:function(t,e,r){var s,o,a,n=arguments.length,l,h;for(n<3||n===3&&{circle:1,curve:1,foreignobject:1,image:1,line:1,point:1,polygon:1,text:1,ticks:1,integral:1}[r]?s=jxg_default.deepCopy(e.elements,null,!0):s={},n<4&&this.exists(r)&&this.exists(e.layer[r])&&(s.layer=e.layer[r]),l=e,h=!0,a=2;a<n;a++)if(o=arguments[a],this.exists(l[o]))l=l[o];else{h=!1;break}for(h&&(s=jxg_default.deepCopy(s,l,!0)),l=typeof t=="object"?this.keysToLowerCase(t):{},h=!0,a=3;a<n;a++)if(o=arguments[a].toLowerCase(),this.exists(l[o]))l=l[o];else{h=!1;break}if(h&&this.mergeAttr(s,l,!0),arguments[2]==="board")return s;for(l=e,h=!0,a=2;a<n;a++)if(o=arguments[a],this.exists(l[o]))l=l[o];else{h=!1;break}return h&&this.exists(l.label)&&(s.label=jxg_default.deepCopy(l.label,s.label,!0)),s.label=jxg_default.deepCopy(e.label,s.label,!0),s},copyPrototypeMethods:function(t,e,r){var s;t.prototype[r]=e.prototype.constructor;for(s in e.prototype)e.prototype.hasOwnProperty(s)&&(s==="methodMap"?jxg_default.copyMethodMap(t,e.prototype.methodMap):t.prototype[s]=e.prototype[s])},copyMethodMap:function(t,e){e=e||{},t.prototype.methodMap=t.prototype.methodMap||{},t.prototype.methodMap=this.deepCopy(t.prototype.methodMap,e)},extendInstanceMethodMap:function(t,e,r){e=e||{},t.hasOwnProperty("methodMap")||(t.methodMap=Object.assign({},t.methodMap)),this.isObject(e)?t.methodMap=this.deepCopy(t.methodMap,e):this.isString(e)&&this.exists(r)&&(t.methodMap[e]=r)},getCloneObject:function(t){var e,r,s={};s.id=t.id+"T"+t.numTraces,t.numTraces+=1,s.coords=t.coords,e=this.deepCopy(t.visProp,t.visProp.traceattributes,!0),s.visProp={};for(r in e)e.hasOwnProperty(r)&&r.indexOf("aria")!==0&&r.indexOf("highlight")!==0&&r.indexOf("attractor")!==0&&r!=="label"&&r!=="needsregularupdate"&&r!=="infoboxdigits"&&(s.visProp[r]=t.eval(e[r]));return s.evalVisProp=function(o){return s.visProp[o]},s.eval=function(o){return o},s.visProp.layer=t.board.options.layer.trace,s.visProp.tabindex=null,s.visProp.highlight=!1,s.board=t.board,s.elementClass=t.elementClass,this.clearVisPropOld(s),s.visPropCalc={visible:t.evalVisProp("visible")},s},toJSON:function(t,e){var r,s,o,a,n;if(e=jxg_default.def(e,!1),JSON!==void 0&&JSON.stringify&&!e)try{return a=JSON.stringify(t),a}catch{}switch(typeof t){case"object":if(t){if(r=[],this.isArray(t)){for(o=0;o<t.length;o++)r.push(jxg_default.toJSON(t[o],e));return"["+r.join(",")+"]"}for(s in t)if(t.hasOwnProperty(s)){try{n=jxg_default.toJSON(t[s],e)}catch{n=""}e?r.push(s+":"+n):r.push('"'+s+'":'+n)}return"{"+r.join(",")+"} "}return"null";case"string":return"'"+t.replace(/(["'])/g,"\\$1")+"'";case"number":case"boolean":return t.toString()}return"0"},clearVisPropOld:function(t){return t.visPropOld={cssclass:"",cssdefaultstyle:"",cssstyle:"",fillcolor:"",fillopacity:"",firstarrow:!1,fontsize:-1,lastarrow:!1,left:-1e5,linecap:"",shadow:!1,strokecolor:"",strokeopacity:"",strokewidth:"",tabindex:-1e5,transitionduration:0,top:-1e5,visible:null},t},isInObject:function(t,e){var r;for(r in t)if(t.hasOwnProperty(r)&&t[r]===e)return!0;return!1},escapeHTML:function(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},unescapeHTML:function(t){return t.replace(/<\/?[^>]+>/gi,"").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">")},capitalize:function(t){return t.charAt(0).toUpperCase()+t.substring(1).toLowerCase()},trimNumber:function(t){return t=t.replace(/^0+/,""),t=t.replace(/0+$/,""),(t[t.length-1]==="."||t[t.length-1]===",")&&(t=t.slice(0,-1)),(t[0]==="."||t[0]===",")&&(t="0"+t),t},filterElements:function(t,e){var r,s,o,a,n,l,h,d=t.length,u=[];if(this.exists(e)&&typeof e!="function"&&typeof e!="object")return u;for(r=0;r<d;r++){if(h=!0,o=t[r],typeof e=="object"){for(s in e)if(e.hasOwnProperty(s)&&(a=s.toLowerCase(),typeof o[s]=="function"?n=o[s]():n=o[s],o.visProp&&typeof o.visProp[a]=="function"?l=o.visProp[a]():l=o.visProp&&o.visProp[a],typeof e[s]=="function"?h=e[s](n)||e[s](l):h=n===e[s]||l===e[s],!h))break}else typeof e=="function"&&(h=e(o));h&&u.push(o)}return u},trim:function(t){return t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},toFraction:function(t,e,r){var s=math_default.decToFraction(t,r),o="";return s[1]===0&&s[2]===0?o+="0":(s[0]<0&&(o+="-"),s[2]===0?o+=s[1]:s[2]===1&&s[3]===1||(s[1]!==0&&(o+=s[1]+" "),e===!0?o+="\\frac{"+s[2]+"}{"+s[3]+"}":o+=s[2]+"/"+s[3])),o},concat:function(t,e){var r,s=e.length;for(r=0;r<s;r++)t.push(e[r]);return t},sanitizeHTML:function(t,e){return typeof html_sanitize=="function"&&e?html_sanitize(t,function(){},function(r){return r}):(t&&typeof t=="string"&&(t=t.replace(/</g,"&lt;").replace(/>/g,"&gt;")),t)},evalSlider:function(t){return t&&t.type===constants.OBJECT_TYPE_GLIDER&&typeof t.Value=="function"?t.Value():t},stack2jsxgraph:function(t){var e=t.replace(/%pi/g,"PI").replace(/%e/g,"EULER").replace(/%phi/g,"1.618033988749895").replace(/%gamma/g,"0.5772156649015329").trim();return e[0]==="["&&e[e.length-1]==="]"&&(e=e.slice(1,-1).split(/\s*,\s*/)),e}});var type_default=jxg_default;jxg_default.extendConstants(jxg_default,{});jxg_default.extend(jxg_default,{maxScreenCoord:16777215,isTouchEvent:function(t){return jxg_default.exists(t.touches)},isPointerEvent:function(t){return jxg_default.exists(t.pointerId)},isMouseEvent:function(t){return!jxg_default.isTouchEvent(t)&&!jxg_default.isPointerEvent(t)},getNumberOfTouchPoints:function(t){var e=-1;return jxg_default.isTouchEvent(t)&&(e=t.touches.length),e},isFirstTouch:function(t){var e=jxg_default.getNumberOfTouchPoints(t);return jxg_default.isPointerEvent(t)?t.isPrimary:e===1},isBrowser:typeof window<"u"&&typeof document<"u"&&typeof window=="object"&&typeof document=="object",supportsES6:function(){try{return new Function("(a = 0) => a"),!0}catch{return!1}},supportsVML:function(){return this.isBrowser&&!!document.namespaces},supportsSVG:function(){var t;return this.isBrowser?(t=!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,t):!1},supportsCanvas:function(){var t=!1;return this.isNode()&&(t=!0),t||this.isBrowser&&!!document.createElement("canvas").getContext},isNode:function(){return!this.isBrowser&&typeof process<"u"&&process.release.name.search(/node|io.js/)!==-1},isWebWorker:function(){return!this.isBrowser&&typeof self=="object"&&typeof self.postMessage=="function"},supportsPointerEvents:function(){return!!(this.isBrowser&&window.navigator&&(window.PointerEvent||window.navigator.pointerEnabled||window.navigator.msPointerEnabled))},isTouchDevice:function(){return this.isBrowser&&window.ontouchstart!==void 0},isAndroid:function(){return type_default.exists(navigator)&&navigator.userAgent.toLowerCase().indexOf("android")>-1},isWebkitAndroid:function(){return this.isAndroid()&&navigator.userAgent.indexOf(" AppleWebKit/")>-1},isApple:function(){return type_default.exists(navigator)&&(navigator.userAgent.indexOf("iPad")>-1||navigator.userAgent.indexOf("iPhone")>-1)},isWebkitApple:function(){return"GestureEvent"in window&&("ongesturechange"in window||window!==void 0&&"safari"in window&&"pushNotification"in window.safari)},isMetroApp:function(){return typeof window=="object"&&window.clientInformation&&window.clientInformation.appVersion&&window.clientInformation.appVersion.indexOf("MSAppHost")>-1},isMozilla:function(){return type_default.exists(navigator)&&navigator.userAgent.toLowerCase().indexOf("mozilla")>-1&&navigator.userAgent.toLowerCase().indexOf("apple")===-1},isFirefoxOS:function(){return type_default.exists(navigator)&&navigator.userAgent.toLowerCase().indexOf("android")===-1&&navigator.userAgent.toLowerCase().indexOf("apple")===-1&&navigator.userAgent.toLowerCase().indexOf("mobile")>-1&&navigator.userAgent.toLowerCase().indexOf("mozilla")>-1},isDesktop:function(){return!0},isMobile:function(){return!0},ieVersion:(function(){var t,e,r=3;if(typeof document>"u"||document===null||typeof document!="object")return 0;t=document.createElement("div"),e=t.getElementsByTagName("i");do t.innerHTML="<!--[if gt IE "+ ++r+"]><i></i><![endif]-->";while(e[0]);return r>4?r:void 0})(),getDimensions:function(t,e){var r,s,o,a,n,l,h,d,u,c=/\d+(\.\d*)?px/;if(!this.isBrowser||t===null)return{width:500,height:500};if(e=e||document,r=type_default.isString(t)?e.getElementById(t):t,!type_default.exists(r))throw new Error(`
8
+ JSXGraph: HTML container element '`+t+"' not found.");return s=r.style.display,s!=="none"&&s!==null?r.clientWidth>0&&r.clientHeight>0?{width:r.clientWidth,height:r.clientHeight}:(u=window.getComputedStyle?window.getComputedStyle(r):r.style,{width:c.test(u.width)?parseFloat(u.width):0,height:c.test(u.height)?parseFloat(u.height):0}):(o=r.style,a=o.visibility,n=o.position,l=o.display,o.visibility="hidden",o.position="absolute",o.display="block",h=r.clientWidth,d=r.clientHeight,o.display=l,o.position=n,o.visibility=a,{width:h,height:d})},addEvent:function(t,e,r,s,o){var a=function(){return r.apply(s,arguments)};a.origin=r,typeof s=="object"&&type_default.exists(s.BOARD_MODE_NONE)&&(s["x_internal"+e]=s["x_internal"+e]||[],s["x_internal"+e].push(a)),type_default.exists(t)&&type_default.exists(t.addEventListener)&&(o=o||!1,t.addEventListener(e,a,o)),type_default.exists(t)&&type_default.exists(t.attachEvent)&&t.attachEvent("on"+e,a)},removeEvent:function(t,e,r,s){var o;if(!type_default.exists(s)){jxg_default.debug("no such owner");return}if(!type_default.exists(s["x_internal"+e])){jxg_default.debug("removeEvent: no such type: "+e);return}if(!type_default.isArray(s["x_internal"+e])){jxg_default.debug("owner[x_internal + "+e+"] is not an array");return}if(o=type_default.indexOf(s["x_internal"+e],r,"origin"),o===-1){jxg_default.debug("removeEvent: no such event function in internal list: "+r);return}try{type_default.exists(t)&&type_default.exists(t.removeEventListener)&&t.removeEventListener(e,s["x_internal"+e][o],!1),type_default.exists(t)&&type_default.exists(t.detachEvent)&&t.detachEvent("on"+e,s["x_internal"+e][o])}catch{jxg_default.debug("removeEvent: event not registered in browser: ("+e+" -- "+r+")")}s["x_internal"+e].splice(o,1)},removeAllEvents:function(t,e,r){var s,o;if(r["x_internal"+e]){for(o=r["x_internal"+e].length,s=o-1;s>=0;s--)jxg_default.removeEvent(t,e,r["x_internal"+e][s].origin,r);r["x_internal"+e].length>0&&jxg_default.debug("removeAllEvents: Not all events could be removed.")}},getPosition:function(t,e,r){var s,o,a,n=0,l=0;if(t||(t=window.event),r=r||document,a=t.touches,type_default.exists(a)&&a.length===0&&(a=t.changedTouches),type_default.exists(e)&&type_default.exists(a))if(e===-1){for(o=a.length,s=0;s<o;s++)if(a[s]){t=a[s];break}}else t=a[e];return t.clientX&&(n=t.clientX,l=t.clientY),[n,l]},getOffset:function(t){var e,r=t,s=t,o=r.offsetLeft-r.scrollLeft,a=r.offsetTop-r.scrollTop;for(e=this.getCSSTransform([o,a],r),o=e[0],a=e[1],r=r.offsetParent;r;){for(o+=r.offsetLeft,a+=r.offsetTop,r.offsetParent&&(o+=r.clientLeft-r.scrollLeft,a+=r.clientTop-r.scrollTop),e=this.getCSSTransform([o,a],r),o=e[0],a=e[1],s=s.parentNode;s!==r;)o+=s.clientLeft-s.scrollLeft,a+=s.clientTop-s.scrollTop,e=this.getCSSTransform([o,a],s),o=e[0],a=e[1],s=s.parentNode;r=r.offsetParent}return[o,a]},getStyle:function(t,e){var r,s=t.ownerDocument;return s.defaultView&&s.defaultView.getComputedStyle?r=s.defaultView.getComputedStyle(t,null).getPropertyValue(e):t.currentStyle&&jxg_default.ieVersion>=9?r=t.currentStyle[e]:t.style&&(e=e.replace(/-([a-z]|[0-9])/gi,function(o,a){return a.toUpperCase()}),r=t.style[e]),r},getProp:function(t,e){var r=parseInt(this.getStyle(t,e),10);return isNaN(r)?0:r},getCSSTransform:function(t,e){var r,s,o,a,n,l,h,d,u=["transform","webkitTransform","MozTransform","msTransform","oTransform"];for(l=u.length,r=0,o="";r<l;r++)if(type_default.exists(e.style[u[r]])){o=e.style[u[r]];break}if(o!==""&&(n=o.indexOf("("),n>0)){for(l=o.length,a=o.substring(n+1,l-1),d=a.split(","),s=0,h=d.length;s<h;s++)d[s]=parseFloat(d[s]);o.indexOf("matrix")===0?(t[0]+=d[4],t[1]+=d[5]):o.indexOf("translateX")===0?t[0]+=d[0]:o.indexOf("translateY")===0?t[1]+=d[0]:o.indexOf("translate")===0&&(t[0]+=d[0],t[1]+=d[1])}return type_default.exists(e.style.zoom)&&(o=e.style.zoom,o!==""&&(t[0]*=parseFloat(o),t[1]*=parseFloat(o))),t},getCSSTransformMatrix:function(t){var e,r,s,o,a,n,l,h,d,u=t.ownerDocument,c=["transform","webkitTransform","MozTransform","msTransform","oTransform"],p=[[1,0,0],[0,1,0],[0,0,1]];if(u.defaultView&&u.defaultView.getComputedStyle)d=u.defaultView.getComputedStyle(t,null),s=d.getPropertyValue("-webkit-transform")||d.getPropertyValue("-moz-transform")||d.getPropertyValue("-ms-transform")||d.getPropertyValue("-o-transform")||d.getPropertyValue("transform");else for(l=c.length,e=0,s="";e<l;e++)if(type_default.exists(t.style[c[e]])){s=t.style[c[e]];break}if(s!==""&&(n=s.indexOf("("),n>0)){for(l=s.length,o=s.substring(n+1,l-1),a=o.split(","),r=0,h=a.length;r<h;r++)a[r]=parseFloat(a[r]);s.indexOf("matrix")===0?p=[[1,0,0],[0,a[0],a[1]],[0,a[2],a[3]]]:s.indexOf("scaleX")===0?p[1][1]=a[0]:s.indexOf("scaleY")===0?p[2][2]=a[0]:s.indexOf("scale")===0&&(p[1][1]=a[0],p[2][2]=a[1])}return type_default.exists(t.style.zoom)&&(s=t.style.zoom,s!==""&&(p[1][1]*=parseFloat(s),p[2][2]*=parseFloat(s))),p},timedChunk:function(t,e,r,s){var o=t.slice(),a=function(){var n=+new Date;do e.call(r,o.shift());while(o.length>0&&+new Date-n<300);o.length>0?window.setTimeout(a,1):s(t)};window.setTimeout(a,1)},scaleJSXGraphDiv:function(t,e,r,s){var o,a,n,l,h,d,u,c,p,f,_=s,g,m=4,b;for(n=r.getElementById(t).getBoundingClientRect(),a=n.height,o=n.width,c=r.getElementById(e),d=c._cssFullscreenStore.w,u=c._cssFullscreenStore.h,g=u/d,d>o*_&&(d=o*_,u=d*g),u>a*_&&(u=a*_,d=u/g),l=d,h=u,g<a/o?p=o*_/d:p=a*_/u,f=(a-h)*.5,b=0;b<m;b++)try{c.style.width=l+"px !important",c.style.height=h+"px !important",c.style.margin="0 auto",c.style.transform=c._cssFullscreenStore.transform+" matrix("+p+",0,0,"+p+",0,"+f+")";break}catch(C){jxg_default.debug(`JXG.scaleJSXGraphDiv:
9
+ `+C)}b===m&&jxg_default.debug("JXG.scaleJSXGraphDiv: Could not set any CSS property.")}});var env_default=jxg_default;jxg_default.XML={cleanWhitespace:function(t){for(var e=t.firstChild;type_default.exists(e);)e.nodeType===3&&!/\S/.test(e.nodeValue)?t.removeChild(e):e.nodeType===1&&this.cleanWhitespace(e),e=e.nextSibling},parse:function(t){var e,r,s;return typeof DOMParser=="function"||typeof DOMParser=="object"?s=DOMParser:s=function(){this.parseFromString=function(o){var a;return typeof ActiveXObject=="function"&&(a=new ActiveXObject("MSXML.DomDocument"),a.loadXML(o)),a}},e=new s,r=e.parseFromString(t,"text/xml"),this.cleanWhitespace(r),r}};var xml_default=jxg_default.XML;jxg_default.EventEmitter={eventHandlers:{},suspended:{},trigger:function(t,e){var r,s,o,a,n=t.length,l;for(s=0;s<n;s++)if(a=this.eventHandlers[t[s]],!this.suspended[t[s]]){if(this.suspended[t[s]]=!0,a)for(l=a.length,r=0;r<l;r++)o=a[r],o.handler.apply(o.context,e);this.suspended[t[s]]=!1}return this},on:function(t,e,r){return type_default.isArray(this.eventHandlers[t])||(this.eventHandlers[t]=[]),r=type_default.def(r,this),this.eventHandlers[t].push({handler:e,context:r}),this},off:function(t,e){var r;return!t||!type_default.isArray(this.eventHandlers[t])?this:(e?(r=type_default.indexOf(this.eventHandlers[t],e,"handler"),r>-1&&this.eventHandlers[t].splice(r,1),this.eventHandlers[t].length===0&&delete this.eventHandlers[t]):delete this.eventHandlers[t],this)},eventify:function(t){t.eventHandlers={clicks:0},t.on=this.on,t.off=this.off,t.triggerEventHandlers=this.trigger,t.trigger=this.trigger,t.suspended={}}};var event_default=jxg_default.EventEmitter;jxg_default.Coords=function(t,e,r,s){this.board=r,this.usrCoords=[],this.scrCoords=[],this.emitter=!type_default.exists(s)||s,this.emitter&&event_default.eventify(this),this.setCoordinates(t,e,!1,!0)};jxg_default.extend(jxg_default.Coords.prototype,{normalizeUsrCoords:function(){Math.abs(this.usrCoords[0])>math_default.eps&&(this.usrCoords[1]/=this.usrCoords[0],this.usrCoords[2]/=this.usrCoords[0],this.usrCoords[0]=1)},usr2screen:function(t){var e=Math.round,r=this.board,s=this.usrCoords,o=r.origin.scrCoords;t===!0?(this.scrCoords[0]=e(s[0]),this.scrCoords[1]=e(s[0]*o[1]+s[1]*r.unitX),this.scrCoords[2]=e(s[0]*o[2]-s[2]*r.unitY)):(this.scrCoords[0]=s[0],this.scrCoords[1]=s[0]*o[1]+s[1]*r.unitX,this.scrCoords[2]=s[0]*o[2]-s[2]*r.unitY)},screen2usr:function(){var t=this.board.origin.scrCoords,e=this.scrCoords,r=this.board;this.usrCoords[0]=1,this.usrCoords[1]=(e[1]-t[1])/r.unitX,this.usrCoords[2]=(t[2]-e[2])/r.unitY},distance:function(t,e){var r=0,s,o=this.usrCoords,a=this.scrCoords,n;return t===constants.COORDS_BY_USER?(s=e.usrCoords,n=o[0]-s[0],r=n*n,r>math_default.eps*math_default.eps?Number.POSITIVE_INFINITY:math_default.hypot(o[1]-s[1],o[2]-s[2])):(s=e.scrCoords,math_default.hypot(a[1]-s[1],a[2]-s[2]))},setCoordinates:function(t,e,r,s){var o=this.usrCoords,a=this.scrCoords,n=[o[0],o[1],o[2]],l=[a[0],a[1],a[2]];return t===constants.COORDS_BY_USER?(e.length===2?(o[0]=1,o[1]=e[0],o[2]=e[1]):(o[0]=e[0],o[1]=e[1],o[2]=e[2],this.normalizeUsrCoords()),this.usr2screen(r)):(e.length===2?(a[1]=e[0],a[2]=e[1]):(a[1]=e[1],a[2]=e[2]),this.screen2usr()),this.emitter&&!s&&(l[1]!==a[1]||l[2]!==a[2])&&this.triggerEventHandlers(["update"],[n,l]),this},copy:function(t,e){return e===void 0&&(e=0),this[t].slice(e)},isReal:function(){return!isNaN(this.usrCoords[1]+this.usrCoords[2])&&Math.abs(this.usrCoords[0])>math_default.eps},__evt__update:function(t,e){},__evt:function(){}});var coords_default=jxg_default.Coords;jxg_default.Expect={each:function(t,e,r){var s,o,a=[];if(type_default.exists(t.length))for(o=t.length,s=0;s<o;s++)a.push(e.call(this,t[s],r));return a},coords:function(t,e){var r=t;return t&&t.elementClass===constants.OBJECT_CLASS_POINT?r=t.coords:t.usrCoords&&t.scrCoords&&t.usr2screen&&(r=t),e&&(r=new coords_default(constants.COORDS_BY_USER,r.usrCoords,r.board)),r},coordsArray:function(t,e){var r;return type_default.isArray(t)?r=t:r=this.coords(t).usrCoords,r.length<3&&r.unshift(1),e&&(r=[r[0],r[1],r[2]]),r}};var expect_default=jxg_default.Expect;math_default.ProbFuncs={MAXNUM:17014118346046923e22,SQRTH:.7071067811865476,SQRT2:1.4142135623730951,MAXLOG:708.3964185322641,P:[2461969814735305e-25,.5641895648310689,7.463210564422699,48.63719709856814,196.5208329560771,526.4451949954773,934.5285271719576,1027.5518868951572,557.5353353693994],Q:[13.228195115474499,86.70721408859897,354.9377788878199,975.7085017432055,1823.9091668790973,2246.3376081871097,1656.6630919416134,557.5353408177277],R:[.5641895835477551,1.275366707599781,5.019050422511805,6.160210979930536,7.4097426995044895,2.9788666537210022],S:[2.2605286322011726,9.396035249380015,12.048953980809666,17.08144507475659,9.608968090632859,3.369076451000815],T:[9.604973739870516,90.02601972038427,2232.005345946843,7003.325141128051,55592.30130103949],U:[33.56171416475031,521.3579497801527,4594.323829709801,22629.000061389095,49267.39426086359],M:128,MINV:.0078125,expx2:function(t,e){var r,s,o,a;return t=Math.abs(t),e<0&&(t=-t),o=this.MINV*Math.floor(this.M*t+.5),a=t-o,r=o*o,s=2*o*a+a*a,e<0&&(r=-r,s=-s),r+s>this.MAXLOG?1/0:(r=Math.exp(r)*Math.exp(s),r)},polevl:function(t,e,r){var s,o;if(type_default.exists(e.reduce))return e.reduce(function(a,n){return a*t+n},0);for(o=0,s=0;o<=r;o++)s=s*t+e[o];return s},p1evl:function(t,e,r){var s,o;if(type_default.exists(e.reduce))return e.reduce(function(a,n){return a*t+n},1);for(o=0,s=1;o<r;o++)s=s*t+e[o];return s},ndtr:function(t){var e=t*this.SQRTH,r,s=Math.abs(e);return s<1?r=.5+.5*this.erf(e):(r=.5*this.erfce(s),s=this.expx2(t,-1),r=r*Math.sqrt(s),e>0&&(r=1-r)),r},_underflow:function(t){return t<0?2:0},erfc:function(t){var e,r,s,o,a;return t<0?s=-t:s=t,s<1?1-this.erf(t):(a=-t*t,a<-this.MAXLOG?this._underflow(t):(a=this.expx2(t,-1),s<8?(e=this.polevl(s,this.P,8),r=this.p1evl(s,this.Q,8)):(e=this.polevl(s,this.R,5),r=this.p1evl(s,this.S,6)),o=a*e/r,t<0&&(o=2-o),o===0?this._underflow(t):o))},erfce:function(t){var e,r;return t<8?(e=this.polevl(t,this.P,8),r=this.p1evl(t,this.Q,8)):(e=this.polevl(t,this.R,5),r=this.p1evl(t,this.S,6)),e/r},erf:function(t){var e,r;return Math.abs(t)>1?1-this.erfc(t):(r=t*t,e=t*this.polevl(r,this.T,4)/this.p1evl(r,this.U,5),e)},s2pi:2.5066282746310007,P0:[-59.96335010141079,98.00107541859997,-56.67628574690703,13.931260938727968,-1.2391658386738125],Q0:[1.9544885833814176,4.676279128988815,86.36024213908905,-225.46268785411937,200.26021238006066,-82.03722561683334,15.90562251262117,-1.1833162112133],P1:[4.0554489230596245,31.525109459989388,57.16281922464213,44.08050738932008,14.684956192885803,2.1866330685079025,-.1402560791713545,-.03504246268278482,-.0008574567851546854],Q1:[15.779988325646675,45.39076351288792,41.3172038254672,15.04253856929075,2.504649462083094,-.14218292285478779,-.03808064076915783,-.0009332594808954574],P2:[3.2377489177694603,6.915228890689842,3.9388102529247444,1.3330346081580755,.20148538954917908,.012371663481782003,.00030158155350823543,26580697468673755e-22,6239745391849833e-24],Q2:[6.02427039364742,3.6798356385616087,1.3770209948908132,.21623699359449663,.013420400608854318,.00032801446468212774,28924786474538068e-22,6790194080099813e-24],ndtri:function(t){var e,r,s,o,a,n,l;return t<=0?-1/0:t>=1?1/0:(l=1,r=t,r>.8646647167633873&&(r=1-r,l=0),r>.1353352832366127?(r=r-.5,o=r*r,e=r+r*(o*this.polevl(o,this.P0,4)/this.p1evl(o,this.Q0,8)),e=e*this.s2pi,e):(e=Math.sqrt(-2*Math.log(r)),a=e-Math.log(e)/e,s=1/e,e<8?n=s*this.polevl(s,this.P1,8)/this.p1evl(s,this.Q1,8):n=s*this.polevl(s,this.P2,8)/this.p1evl(s,this.Q2,8),e=a-n,l!==0&&(e=-e),e))},erfi:function(t){return this.ndtri((t+1)*.5)*this.SQRTH}};var probfuncs_default=math_default.ProbFuncs;jxg_default.Math.DoubleBits=function(){var t=new Float64Array(1),e=new Uint32Array(t.buffer),r,s,o,a,n,l,h,d;Float64Array!==void 0&&(t[0]=1,e[1]===1072693248?(r=function(u){return t[0]=u,[e[0],e[1]]},s=function(u,c){return e[0]=u,e[1]=c,t[0]},o=function(u){return t[0]=u,e[0]},a=function(u){return t[0]=u,e[1]},this.doubleBits=r,this.pack=s,this.lo=o,this.hi=a):e[0]===1072693248&&(n=function(u){return t[0]=u,[e[1],e[0]]},l=function(u,c){return e[1]=u,e[0]=c,t[0]},h=function(u){return t[0]=u,e[1]},d=function(u){return t[0]=u,e[0]},this.doubleBits=n,this.pack=l,this.lo=h,this.hi=d))};jxg_default.extend(jxg_default.Math.DoubleBits.prototype,{sign:function(t){return this.hi(t)>>>31},exponent:function(t){return(this.hi(t)<<1>>>21)-1023},fraction:function(t){var e=this.lo(t),r=this.hi(t),s=r&(1<<20)-1;return r&2146435072&&(s+=1<<20),[e,s]},denormalized:function(t){return!(this.hi(t)&2146435072)}});var doubleBits=new jxg_default.Math.DoubleBits,MatInterval=function(t,e){if(t!==void 0&&e!==void 0){if(math_default.IntervalArithmetic.isInterval(t)){if(!math_default.IntervalArithmetic.isSingleton(t))throw new TypeError("JXG.Math.IntervalArithmetic: interval `lo` must be a singleton");this.lo=t.lo}else this.lo=t;if(math_default.IntervalArithmetic.isInterval(e)){if(!math_default.IntervalArithmetic.isSingleton(e))throw new TypeError("JXG.Math.IntervalArithmetic: interval `hi` must be a singleton");this.hi=e.hi}else this.hi=e}else{if(t!==void 0)return Array.isArray(t)?new MatInterval(t[0],t[1]):new MatInterval(t,t);this.lo=this.hi=0}};jxg_default.extend(MatInterval.prototype,{print:function(){console.log("[",this.lo,this.hi,"]")},set:function(t,e){return this.lo=t,this.hi=e,this},bounded:function(t,e){return this.set(math_default.IntervalArithmetic.prev(t),math_default.IntervalArithmetic.next(e))},boundedSingleton:function(t){return this.bounded(t,t)},assign:function(t,e){if(typeof t!="number"||typeof e!="number")throw new TypeError("JXG.Math.Interval#assign: arguments must be numbers");return isNaN(t)||isNaN(e)||t>e?this.setEmpty():this.set(t,e)},setEmpty:function(){return this.set(Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY)},setWhole:function(){return this.set(Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY)},open:function(t,e){return this.assign(math_default.IntervalArithmetic.next(t),math_default.IntervalArithmetic.prev(e))},halfOpenLeft:function(t,e){return this.assign(math_default.IntervalArithmetic.next(t),e)},halfOpenRight:function(t,e){return this.assign(t,math_default.IntervalArithmetic.prev(e))},toArray:function(){return[this.lo,this.hi]},clone:function(){return new MatInterval().set(this.lo,this.hi)}});jxg_default.Math.IntervalArithmetic={Interval:function(t,e){return new MatInterval(t,e)},isInterval:function(t){return t!==null&&typeof t=="object"&&typeof t.lo=="number"&&typeof t.hi=="number"},isSingleton:function(t){return t.lo===t.hi},add:function(t,e){return type_default.isNumber(t)&&(t=this.Interval(t)),type_default.isNumber(e)&&(e=this.Interval(e)),new MatInterval(this.addLo(t.lo,e.lo),this.addHi(t.hi,e.hi))},sub:function(t,e){return type_default.isNumber(t)&&(t=this.Interval(t)),type_default.isNumber(e)&&(e=this.Interval(e)),new MatInterval(this.subLo(t.lo,e.hi),this.subHi(t.hi,e.lo))},mul:function(t,e){var r,s,o,a,n;return type_default.isNumber(t)&&(t=this.Interval(t)),type_default.isNumber(e)&&(e=this.Interval(e)),this.isEmpty(t)||this.isEmpty(e)?this.EMPTY.clone():(r=t.lo,s=t.hi,o=e.lo,a=e.hi,n=new MatInterval,r<0?s>0?o<0?a>0?(n.lo=Math.min(this.mulLo(r,a),this.mulLo(s,o)),n.hi=Math.max(this.mulHi(r,o),this.mulHi(s,a))):(n.lo=this.mulLo(s,o),n.hi=this.mulHi(r,o)):a>0?(n.lo=this.mulLo(r,a),n.hi=this.mulHi(s,a)):(n.lo=0,n.hi=0):o<0?a>0?(n.lo=this.mulLo(r,a),n.hi=this.mulHi(r,o)):(n.lo=this.mulLo(s,a),n.hi=this.mulHi(r,o)):a>0?(n.lo=this.mulLo(r,a),n.hi=this.mulHi(s,o)):(n.lo=0,n.hi=0):s>0?o<0?a>0?(n.lo=this.mulLo(s,o),n.hi=this.mulHi(s,a)):(n.lo=this.mulLo(s,o),n.hi=this.mulHi(r,a)):a>0?(n.lo=this.mulLo(r,o),n.hi=this.mulHi(s,a)):(n.lo=0,n.hi=0):(n.lo=0,n.hi=0),n)},div:function(t,e){return type_default.isNumber(t)&&(t=this.Interval(t)),type_default.isNumber(e)&&(e=this.Interval(e)),this.isEmpty(t)||this.isEmpty(e)?this.EMPTY.clone():this.zeroIn(e)?e.lo!==0?e.hi!==0?this.divZero(t):this.divNegative(t,e.lo):e.hi!==0?this.divPositive(t,e.hi):this.EMPTY.clone():this.divNonZero(t,e)},positive:function(t){return new MatInterval(t.lo,t.hi)},negative:function(t){return type_default.isNumber(t)?new MatInterval(-t):new MatInterval(-t.hi,-t.lo)},isEmpty:function(t){return t.lo>t.hi},isWhole:function(t){return t.lo===-1/0&&t.hi===1/0},zeroIn:function(t){return this.hasValue(t,0)},hasValue:function(t,e){return this.isEmpty(t)?!1:t.lo<=e&&e<=t.hi},hasInterval:function(t,e){return this.isEmpty(t)?!0:!this.isEmpty(e)&&e.lo<=t.lo&&t.hi<=e.hi},intervalsOverlap:function(t,e){return this.isEmpty(t)||this.isEmpty(e)?!1:t.lo<=e.lo&&e.lo<=t.hi||e.lo<=t.lo&&t.lo<=e.hi},divNonZero:function(t,e){var r=t.lo,s=t.hi,o=e.lo,a=e.hi,n=new MatInterval;return s<0?a<0?(n.lo=this.divLo(s,o),n.hi=this.divHi(r,a)):(n.lo=this.divLo(r,o),n.hi=this.divHi(s,a)):r<0?a<0?(n.lo=this.divLo(s,a),n.hi=this.divHi(r,a)):(n.lo=this.divLo(r,o),n.hi=this.divHi(s,o)):a<0?(n.lo=this.divLo(s,a),n.hi=this.divHi(r,o)):(n.lo=this.divLo(r,a),n.hi=this.divHi(s,o)),n},divPositive:function(t,e){return t.lo===0&&t.hi===0?t:this.zeroIn(t)?this.WHOLE:t.hi<0?new MatInterval(Number.NEGATIVE_INFINITY,this.divHi(t.hi,e)):new MatInterval(this.divLo(t.lo,e),Number.POSITIVE_INFINITY)},divNegative:function(t,e){return t.lo===0&&t.hi===0?t:this.zeroIn(t)?this.WHOLE:t.hi<0?new MatInterval(this.divLo(t.hi,e),Number.POSITIVE_INFINITY):new MatInterval(Number.NEGATIVE_INFINITY,this.divHi(t.lo,e))},divZero:function(t){return t.lo===0&&t.hi===0?t:this.WHOLE},fmod:function(t,e){var r,s;return type_default.isNumber(t)&&(t=this.Interval(t)),type_default.isNumber(e)&&(e=this.Interval(e)),this.isEmpty(t)||this.isEmpty(e)?this.EMPTY.clone():(r=t.lo<0?e.lo:e.hi,s=t.lo/r,s<0?s=Math.ceil(s):s=Math.floor(s),this.sub(t,this.mul(e,new MatInterval(s))))},multiplicativeInverse:function(t){return type_default.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)?this.EMPTY.clone():this.zeroIn(t)?t.lo!==0?t.hi!==0?this.WHOLE:new MatInterval(Number.NEGATIVE_INFINITY,this.divHi(1,t.lo)):t.hi!==0?new MatInterval(this.divLo(1,t.hi),Number.POSITIVE_INFINITY):this.EMPTY.clone():new MatInterval(this.divLo(1,t.hi),this.divHi(1,t.lo))},pow:function(t,e){var r,s;if(type_default.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t))return this.EMPTY.clone();if(this.isInterval(e)){if(!this.isSingleton(e))return this.EMPTY.clone();e=e.lo}return e===0?t.lo===0&&t.hi===0?this.EMPTY.clone():this.ONE.clone():e<0?this.pow(this.multiplicativeInverse(t),-e):e%1===0?t.hi<0?(r=this.powLo(-t.hi,e),s=this.powHi(-t.lo,e),(e&1)===1?new MatInterval(-s,-r):new MatInterval(r,s)):t.lo<0?(e&1)===1?new MatInterval(-this.powLo(-t.lo,e),this.powHi(t.hi,e)):new MatInterval(0,this.powHi(Math.max(-t.lo,t.hi),e)):new MatInterval(this.powLo(t.lo,e),this.powHi(t.hi,e)):(console.warn("power is not an integer, you should use nth-root instead, returning an empty interval"),this.EMPTY.clone())},sqrt:function(t){return type_default.isNumber(t)&&(t=this.Interval(t)),this.nthRoot(t,2)},nthRoot:function(t,e){var r,s,o,a,n;if(type_default.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)||e<0)return this.EMPTY.clone();if(this.isInterval(e)){if(!this.isSingleton(e))return this.EMPTY.clone();e=e.lo}return r=1/e,t.hi<0?e%1===0&&(e&1)===1?(s=this.powHi(-t.lo,r),o=this.powLo(-t.hi,r),new MatInterval(-s,-o)):this.EMPTY.clone():t.lo<0?(a=this.powHi(t.hi,r),e%1===0&&(e&1)===1?(n=-this.powHi(-t.lo,r),new MatInterval(n,a)):new MatInterval(0,a)):new MatInterval(this.powLo(t.lo,r),this.powHi(t.hi,r))},exp:function(t){return type_default.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)?this.EMPTY.clone():new MatInterval(this.expLo(t.lo),this.expHi(t.hi))},log:function(t){var e;return type_default.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)?this.EMPTY.clone():(e=t.lo<=0?Number.NEGATIVE_INFINITY:this.logLo(t.lo),new MatInterval(e,this.logHi(t.hi)))},ln:function(t){return this.log(t)},log10:function(t){return this.isEmpty(t)?this.EMPTY.clone():this.div(this.log(t),this.log(new MatInterval(10,10)))},log2:function(t){return this.isEmpty(t)?this.EMPTY.clone():this.div(this.log(t),this.log(new MatInterval(2,2)))},hull:function(t,e){var r=this.isEmpty(t),s=this.isEmpty(e);return r&&s?this.EMPTY.clone():r?e.clone():s?t.clone():new MatInterval(Math.min(t.lo,e.lo),Math.max(t.hi,e.hi))},intersection:function(t,e){var r,s;return this.isEmpty(t)||this.isEmpty(e)?this.EMPTY.clone():(r=Math.max(t.lo,e.lo),s=Math.min(t.hi,e.hi),r<=s?new MatInterval(r,s):this.EMPTY.clone())},union:function(t,e){if(!this.intervalsOverlap(t,e))throw new Error("Interval#unions do not overlap");return new MatInterval(Math.min(t.lo,e.lo),Math.max(t.hi,e.hi))},difference:function(t,e){if(this.isEmpty(t)||this.isWhole(e))return this.EMPTY.clone();if(this.intervalsOverlap(t,e)){if(t.lo<e.lo&&e.hi<t.hi)throw new Error("Interval.difference: difference creates multiple intervals");return e.lo<=t.lo&&e.hi===1/0||e.hi>=t.hi&&e.lo===-1/0?this.EMPTY.clone():e.lo<=t.lo?new MatInterval().halfOpenLeft(e.hi,t.hi):new MatInterval().halfOpenRight(t.lo,e.lo)}return t.clone()},width:function(t){return this.isEmpty(t)?0:this.subHi(t.hi,t.lo)},abs:function(t){return type_default.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)?this.EMPTY.clone():t.lo>=0?t.clone():t.hi<=0?this.negative(t):new MatInterval(0,Math.max(-t.lo,t.hi))},max:function(t,e){var r=this.isEmpty(t),s=this.isEmpty(e);return r&&s?this.EMPTY.clone():r?e.clone():s?t.clone():new MatInterval(Math.max(t.lo,e.lo),Math.max(t.hi,e.hi))},min:function(t,e){var r=this.isEmpty(t),s=this.isEmpty(e);return r&&s?this.EMPTY.clone():r?e.clone():s?t.clone():new MatInterval(Math.min(t.lo,e.lo),Math.min(t.hi,e.hi))},onlyInfinity:function(t){return!isFinite(t.lo)&&t.lo===t.hi},_handleNegative:function(t){var e;return t.lo<0&&(t.lo===-1/0?(t.lo=0,t.hi=1/0):(e=Math.ceil(-t.lo/this.piTwiceLow),t.lo+=this.piTwiceLow*e,t.hi+=this.piTwiceLow*e)),t},cos:function(t){var e,r,s,o,a,n,l,h;return this.isEmpty(t)||this.onlyInfinity(t)?this.EMPTY.clone():(e=new MatInterval().set(t.lo,t.hi),this._handleNegative(e),r=this.PI_TWICE,s=this.fmod(e,r),this.width(s)>=r.lo?new MatInterval(-1,1):s.lo>=this.piHigh?(o=this.cos(this.sub(s,this.PI)),this.negative(o)):(a=s.lo,n=s.hi,l=this.cosLo(n),h=this.cosHi(a),n<=this.piLow?new MatInterval(l,h):n<=r.lo?new MatInterval(-1,Math.max(l,h)):new MatInterval(-1,1)))},sin:function(t){return this.isEmpty(t)||this.onlyInfinity(t)?this.EMPTY.clone():this.cos(this.sub(t,this.PI_HALF))},tan:function(t){var e,r,s;return this.isEmpty(t)||this.onlyInfinity(t)?this.EMPTY.clone():(e=new MatInterval().set(t.lo,t.hi),this._handleNegative(e),s=this.PI,r=this.fmod(e,s),r.lo>=this.piHalfLow&&(r=this.sub(r,s)),r.lo<=-this.piHalfLow||r.hi>=this.piHalfLow?this.WHOLE.clone():new MatInterval(this.tanLo(r.lo),this.tanHi(r.hi)))},asin:function(t){var e,r;return this.isEmpty(t)||t.hi<-1||t.lo>1?this.EMPTY.clone():(e=t.lo<=-1?-this.piHalfHigh:this.asinLo(t.lo),r=t.hi>=1?this.piHalfHigh:this.asinHi(t.hi),new MatInterval(e,r))},acos:function(t){var e,r;return this.isEmpty(t)||t.hi<-1||t.lo>1?this.EMPTY.clone():(e=t.hi>=1?0:this.acosLo(t.hi),r=t.lo<=-1?this.piHigh:this.acosHi(t.lo),new MatInterval(e,r))},acot:function(t){return this.isEmpty(t)?this.EMPTY.clone():new MatInterval(this.acotLo(t.lo),this.acotHi(t.hi))},atan:function(t){return this.isEmpty(t)?this.EMPTY.clone():new MatInterval(this.atanLo(t.lo),this.atanHi(t.hi))},sinh:function(t){return this.isEmpty(t)?this.EMPTY.clone():new MatInterval(this.sinhLo(t.lo),this.sinhHi(t.hi))},cosh:function(t){return this.isEmpty(t)?this.EMPTY.clone():t.hi<0?new MatInterval(this.coshLo(t.hi),this.coshHi(t.lo)):t.lo>=0?new MatInterval(this.coshLo(t.lo),this.coshHi(t.hi)):new MatInterval(1,this.coshHi(-t.lo>t.hi?t.lo:t.hi))},tanh:function(t){return this.isEmpty(t)?this.EMPTY.clone():new MatInterval(this.tanhLo(t.lo),this.tanhHi(t.hi))},equal:function(t,e){return this.isEmpty(t)?this.isEmpty(e):!this.isEmpty(e)&&t.lo===e.lo&&t.hi===e.hi},notEqual:function(t,e){return this.isEmpty(t)?!this.isEmpty(e):this.isEmpty(e)||t.hi<e.lo||t.lo>e.hi},lt:function(t,e){return type_default.isNumber(t)&&(t=this.Interval(t)),type_default.isNumber(e)&&(e=this.Interval(e)),this.isEmpty(t)||this.isEmpty(e)?!1:t.hi<e.lo},gt:function(t,e){return type_default.isNumber(t)&&(t=this.Interval(t)),type_default.isNumber(e)&&(e=this.Interval(e)),this.isEmpty(t)||this.isEmpty(e)?!1:t.lo>e.hi},leq:function(t,e){return type_default.isNumber(t)&&(t=this.Interval(t)),type_default.isNumber(e)&&(e=this.Interval(e)),this.isEmpty(t)||this.isEmpty(e)?!1:t.hi<=e.lo},geq:function(t,e){return type_default.isNumber(t)&&(t=this.Interval(t)),type_default.isNumber(e)&&(e=this.Interval(e)),this.isEmpty(t)||this.isEmpty(e)?!1:t.lo>=e.hi},piLow:33732594261305046e-7/(1<<30),piHigh:3373259426130505e-6/(1<<30),piHalfLow:33732594261305046e-7/(1<<30)*.5,piHalfHigh:3373259426130505e-6/(1<<30)*.5,piTwiceLow:33732594261305046e-7/(1<<30)*2,piTwiceHigh:3373259426130505e-6/(1<<30)*2,identity:function(t){return t},_prev:function(t){return t===1/0?t:this.nextafter(t,-1/0)},_next:function(t){return t===-1/0?t:this.nextafter(t,1/0)},prev:function(t){return this._prev(t)},next:function(t){return this._next(t)},toInteger:function(t){return t<0?Math.ceil(t):Math.floor(t)},addLo:function(t,e){return this.prev(t+e)},addHi:function(t,e){return this.next(t+e)},subLo:function(t,e){return this.prev(t-e)},subHi:function(t,e){return this.next(t-e)},mulLo:function(t,e){return this.prev(t*e)},mulHi:function(t,e){return this.next(t*e)},divLo:function(t,e){return this.prev(t/e)},divHi:function(t,e){return this.next(t/e)},intLo:function(t){return this.toInteger(this.prev(t))},intHi:function(t){return this.toInteger(this.next(t))},logLo:function(t){return this.prev(Math.log(t))},logHi:function(t){return this.next(Math.log(t))},expLo:function(t){return this.prev(Math.exp(t))},expHi:function(t){return this.next(Math.exp(t))},sinLo:function(t){return this.prev(Math.sin(t))},sinHi:function(t){return this.next(Math.sin(t))},cosLo:function(t){return this.prev(Math.cos(t))},cosHi:function(t){return this.next(Math.cos(t))},tanLo:function(t){return this.prev(Math.tan(t))},tanHi:function(t){return this.next(Math.tan(t))},asinLo:function(t){return this.prev(Math.asin(t))},asinHi:function(t){return this.next(Math.asin(t))},acosLo:function(t){return this.prev(Math.acos(t))},acosHi:function(t){return this.next(Math.acos(t))},acotLo:function(t){return this.prev(math_default.acot(t))},acotHi:function(t){return this.next(math_default.acot(t))},atanLo:function(t){return this.prev(Math.atan(t))},atanHi:function(t){return this.next(Math.atan(t))},sinhLo:function(t){return this.prev(math_default.sinh(t))},sinhHi:function(t){return this.next(math_default.sinh(t))},coshLo:function(t){return this.prev(math_default.cosh(t))},coshHi:function(t){return this.next(math_default.cosh(t))},tanhLo:function(t){return this.prev(math_default.tanh(t))},tanhHi:function(t){return this.next(math_default.tanh(t))},sqrtLo:function(t){return this.prev(Math.sqrt(t))},sqrtHi:function(t){return this.next(Math.sqrt(t))},powLo:function(t,e){var r;if(e%1!==0)return this.prev(Math.pow(t,e));for(r=(e&1)===1?t:1,e>>=1;e>0;)t=this.mulLo(t,t),(e&1)===1&&(r=this.mulLo(t,r)),e>>=1;return r},powHi:function(t,e){var r;if(e%1!==0)return this.next(Math.pow(t,e));for(r=(e&1)===1?t:1,e>>=1;e>0;)t=this.mulHi(t,t),(e&1)===1&&(r=this.mulHi(t,r)),e>>=1;return r},disable:function(){this.next=this.prev=this.identity},enable:function(){this.prev=function(t){return this._prev(t)},this.next=function(t){return this._next(t)}},SMALLEST_DENORM:Math.pow(2,-1074),UINT_MAX:-1>>>0,nextafter:function(t,e){var r,s;return isNaN(t)||isNaN(e)?NaN:t===e?t:t===0?e<0?-this.SMALLEST_DENORM:this.SMALLEST_DENORM:(s=doubleBits.hi(t),r=doubleBits.lo(t),e>t==t>0?r===this.UINT_MAX?(s+=1,r=0):r+=1:r===0?(r=this.UINT_MAX,s-=1):r-=1,doubleBits.pack(r,s))}};jxg_default.Math.IntervalArithmetic.PI=new MatInterval(math_default.IntervalArithmetic.piLow,math_default.IntervalArithmetic.piHigh);jxg_default.Math.IntervalArithmetic.PI_HALF=new MatInterval(math_default.IntervalArithmetic.piHalfLow,math_default.IntervalArithmetic.piHalfHigh);jxg_default.Math.IntervalArithmetic.PI_TWICE=new MatInterval(math_default.IntervalArithmetic.piTwiceLow,math_default.IntervalArithmetic.piTwiceHigh);jxg_default.Math.IntervalArithmetic.ZERO=new MatInterval(0);jxg_default.Math.IntervalArithmetic.ONE=new MatInterval(1);jxg_default.Math.IntervalArithmetic.WHOLE=new MatInterval().setWhole();jxg_default.Math.IntervalArithmetic.EMPTY=new MatInterval().setEmpty();var ia_default=jxg_default.Math.IntervalArithmetic;math_default.Extrapolate={upper:15,infty:1e4,wynnEps:function(t,e,r){var s=1e20,o=1e-15,a=1,n,l,h,d,u,c;if(r[e]=t,e===0)c=t;else{for(d=0,l=e;l>0;l--)h=d,d=r[l-1],u=r[l]-d,Math.abs(u)<=o?r[l-1]=s:(n=(e-l+1)%2===1?a:1,r[l-1]=h*n+1/u);c=r[e%2]}return c},aitken:function(t,e,r){var s,o=1e20,a=1e-15,n,l,h,d,u;if(r[e]=t,e<2)s=t;else{for(h=e/2,d=1;d<=h;d++)u=e-2*d,n=r[u+2]-2*r[u+1]+r[u],Math.abs(n)<a?r[u]=o:(l=r[u]-r[u+1],r[u]-=l*l/n);s=r[e%2]}return s},brezinski:function(t,e,r){var s,o=1e20,a=1e-15,n,l,h,d,u,c,p;if(r[e]=t,e<3)s=t;else{for(u=e/3,p=e,c=1;c<=u;c++)p-=3,l=r[p+1]-r[p],h=r[p+2]-r[p+1],d=r[p+3]-r[p+2],n=d*(h-l)-l*(d-h),Math.abs(n)<a?r[p]=o:r[p]=r[p+1]-l*h*(d-h)/n;s=r[e%3]}return s},iteration:function(t,e,r,s,o){var a,n,l,h=NaN,d,u=.5,c=[],p="finite",f=e;for(o=o||0,a=1;a<=this.upper;a++){if(f=o===0?e/(a+1):f*u,n=r(t+f,!0),l=this[s](n,a-1,c),isNaN(l)){p="NaN";break}if(n!==0&&l/n>this.infty){h=l,p="infinite";break}if(d=l-h,Math.abs(d)<1e-7)break;h=l}return[h,p,1-(a-1)/this.upper]},levin:function(t,e,r,s,o,a){var n=1e20,l=1e-15,h,d,u,c=1/(s+e),p;if(o[e]=t/r,a[e]=1/r,e>0&&(o[e-1]=o[e]-o[e-1],a[e-1]=a[e]-a[e-1],e>1))for(u=(s+e-1)*c,h=2;h<=e;h++)d=(s+e-h)*Math.pow(u,h-2)*c,o[e-h]=o[e-h+1]-d*o[e-h],a[e-h]=a[e-h+1]-d*a[e-h],c*=u;return Math.abs(a[0])<l?p=n:p=o[0]/a[0],p},iteration_levin:function(t,e,r,s){var o,a,n,l=NaN,h,d,u,c,p=1,f=.5,_=[],g=[],m="finite",b=e,C="u";for(s=s||0,h=r(t+e,!0),o=1;o<=this.upper;o++){if(b=s===0?e/(o+1):b*f,a=r(t+b,!0),d=a-h,Math.abs(d)<1?C="u":C="t",C==="u"?c=(p+o)*d:c=d,h=a,n=this.levin(a,o-1,c,p,_,g),u=n-l,isNaN(n)){m="NaN";break}if(a!==0&&n/a>this.infty){l=n,m="infinite";break}if(Math.abs(u)<1e-7)break;l=n}return[l,m,1-(o-1)/this.upper]},limit:function(t,e,r){return this.iteration_levin(t,e,r,0)}};var extrapolate_default=math_default.Extrapolate;math_default.Statistics={sum:function(t){var e,r=t.length,s=0;for(e=0;e<r;e++)s+=t[e];return s},prod:function(t){var e,r=t.length,s=1;for(e=0;e<r;e++)s*=t[e];return s},mean:function(t){return t.length>0?this.sum(t)/t.length:0},median:function(t){var e,r;return t.length>0?(ArrayBuffer.isView(t)?(e=new Float64Array(t),e.sort()):(e=t.slice(0),e.sort(function(s,o){return s-o})),r=e.length,r&1?e[parseInt(r*.5,10)]:(e[r*.5-1]+e[r*.5])*.5):0},_getPercentiles:function(t,e){var r,s,o,a,n=[];for(a=t.length,r=0;r<e.length;r++)o=a*e[r]*.01,s=parseInt(o,10),s===o?n.push((t[s-1]+t[s])*.5):n.push(t[s]);return n},percentile:function(t,e){var r,s,o=[];return!type_default.exists(t.length)||t.length===0?(jxg_default.warn("JXG.Math.Statistics.percentile: no data array given."),0):(ArrayBuffer.isView(t)?(r=new Float64Array(t),r.sort()):(r=t.slice(0),r.sort(function(a,n){return a-n})),r=r.filter(function(a){return!isNaN(a)}),type_default.isArray(e)?s=e:s=[e],o=this._getPercentiles(r,s),type_default.isArray(e)?o:o[0])},boxplot:function(t,e){var r,s,o,a,n,l,h,d=[],u=[25,50,75];if(!type_default.exists(t.length)||t.length===0)return jxg_default.warn("JXG.Math.Statistics.boxplot: no data array given."),0;if(type_default.isNumber(e,!1,!1)||(e=1.5),ArrayBuffer.isView(t)?(r=new Float64Array(t),r.sort()):(r=t.slice(0),r.sort(function(c,p){return c-p})),r=r.filter(function(c){return!isNaN(c)}),a=r.length,d=this._getPercentiles(r,u),h=e*(d[2]-d[0]),o=[],e===0)s=r;else for(s=[],l=0;l<a;l++)n=r[l],n>=d[0]-h&&n<=d[2]+h?s.push(n):o.push(n);return d.unshift(this.min(s)),d.push(this.max(s)),d.push(o),d},variance:function(t){var e,r,s,o=t.length;if(o>1){for(e=this.mean(t),r=0,s=0;s<o;s++)r+=(t[s]-e)*(t[s]-e);return r/(t.length-1)}return 0},sd:function(t){return Math.sqrt(this.variance(t))},weightedMean:function(t,e){if(t.length!==e.length)throw new Error("JSXGraph error (Math.Statistics.weightedMean): Array dimension mismatch.");return t.length>0?this.mean(this.multiply(t,e)):0},max:function(t){return Math.max.apply(this,t)},min:function(t){return Math.min.apply(this,t)},range:function(t){return[this.min(t),this.max(t)]},abs:function(t){var e,r,s;if(type_default.isArray(t))if(t.map)s=t.map(Math.abs);else for(r=t.length,s=[],e=0;e<r;e++)s[e]=Math.abs(t[e]);else ArrayBuffer.isView(t)?s=t.map(Math.abs):s=Math.abs(t);return s},add:function(t,e){var r,s,o=[];if(t=type_default.evalSlider(t),e=type_default.evalSlider(e),type_default.isArray(t)&&type_default.isNumber(e))for(s=t.length,r=0;r<s;r++)o[r]=t[r]+e;else if(type_default.isNumber(t)&&type_default.isArray(e))for(s=e.length,r=0;r<s;r++)o[r]=t+e[r];else if(type_default.isArray(t)&&type_default.isArray(e))for(s=Math.min(t.length,e.length),r=0;r<s;r++)o[r]=t[r]+e[r];else o=t+e;return o},div:function(t,e){var r,s,o=[];if(t=type_default.evalSlider(t),e=type_default.evalSlider(e),type_default.isArray(t)&&type_default.isNumber(e))for(s=t.length,r=0;r<s;r++)o[r]=t[r]/e;else if(type_default.isNumber(t)&&type_default.isArray(e))for(s=e.length,r=0;r<s;r++)o[r]=t/e[r];else if(type_default.isArray(t)&&type_default.isArray(e))for(s=Math.min(t.length,e.length),r=0;r<s;r++)o[r]=t[r]/e[r];else o=t/e;return o},divide:function(){jxg_default.deprecated("Statistics.divide()","Statistics.div()"),math_default.Statistics.div.apply(math_default.Statistics,arguments)},mod:function(t,e,r){var s,o,a=[],n=function(l,h){return l%h};if(r=type_default.def(r,!1),r&&(n=math_default.mod),t=type_default.evalSlider(t),e=type_default.evalSlider(e),type_default.isArray(t)&&type_default.isNumber(e))for(o=t.length,s=0;s<o;s++)a[s]=n(t[s],e);else if(type_default.isNumber(t)&&type_default.isArray(e))for(o=e.length,s=0;s<o;s++)a[s]=n(t,e[s]);else if(type_default.isArray(t)&&type_default.isArray(e))for(o=Math.min(t.length,e.length),s=0;s<o;s++)a[s]=n(t[s],e[s]);else a=n(t,e);return a},multiply:function(t,e){var r,s,o=[];if(t=type_default.evalSlider(t),e=type_default.evalSlider(e),type_default.isArray(t)&&type_default.isNumber(e))for(s=t.length,r=0;r<s;r++)o[r]=t[r]*e;else if(type_default.isNumber(t)&&type_default.isArray(e))for(s=e.length,r=0;r<s;r++)o[r]=t*e[r];else if(type_default.isArray(t)&&type_default.isArray(e))for(s=Math.min(t.length,e.length),r=0;r<s;r++)o[r]=t[r]*e[r];else o=t*e;return o},subtract:function(t,e){var r,s,o=[];if(t=type_default.evalSlider(t),e=type_default.evalSlider(e),type_default.isArray(t)&&type_default.isNumber(e))for(s=t.length,r=0;r<s;r++)o[r]=t[r]-e;else if(type_default.isNumber(t)&&type_default.isArray(e))for(s=e.length,r=0;r<s;r++)o[r]=t-e[r];else if(type_default.isArray(t)&&type_default.isArray(e))for(s=Math.min(t.length,e.length),r=0;r<s;r++)o[r]=t[r]-e[r];else o=t-e;return o},TheilSenRegression:function(t){var e,r,s=[],o=[],a=[];for(e=0;e<t.length;e++){for(o.length=0,r=0;r<t.length;r++)Math.abs(t[r].usrCoords[1]-t[e].usrCoords[1])>math_default.eps&&(o[r]=(t[r].usrCoords[2]-t[e].usrCoords[2])/(t[r].usrCoords[1]-t[e].usrCoords[1]));s[e]=this.median(o),a.push(t[e].usrCoords[2]-s[e]*t[e].usrCoords[1])}return[this.median(a),this.median(s),-1]},generateGaussian:function(t,e){var r,s,o;if(this.hasSpare)return this.hasSpare=!1,this.spare*e+t;do r=Math.random()*2-1,s=Math.random()*2-1,o=r*r+s*s;while(o>=1||o===0);return o=Math.sqrt(-2*Math.log(o)/o),this.spare=s*o,this.hasSpare=!0,t+e*r*o},randomNormal:function(t,e){return this.generateGaussian(t,e)},randomUniform:function(t,e){return Math.random()*(e-t)+t},randomExponential:function(t){var e;if(t<=0)return NaN;do e=Math.random();while(e===0);return-Math.log(e)/t},randomGamma:function(t,e,r){var s,o,a,n,l,h;if(t<=0)return NaN;if(e=e||1,r=r||0,t===1)return e*this.randomExponential(1)+r;if(t<1){l=Math.E/(t+Math.E);do{s=Math.random();do o=Math.random();while(o===0);s<l?(a=Math.pow(o,1/t),h=Math.exp(-a)):(a=1-Math.log(o),h=Math.pow(a,t-1)),s=Math.random()}while(s>=h);return e*a+r}do if(n=Math.tan(Math.PI*Math.random()),a=Math.sqrt(2*t-1)*n+t-1,a>0)o=Math.random();else continue;while(a<=0||o>(1+n*n)*Math.exp((t-1)*Math.log(a/(t-1))-Math.sqrt(2*t-1)*n));return e*a+r},randomBeta:function(t,e){var r,s,o;return t<=0||e<=0?NaN:(r=this.randomGamma(t),s=this.randomGamma(e),o=r/(r+s),o)},randomChisquare:function(t){return t<=0?NaN:2*this.randomGamma(t*.5)},randomF:function(t,e){var r,s;return t<=0||e<=0?NaN:(r=this.randomChisquare(t),s=this.randomChisquare(e),r*e/(s*t))},randomT:function(t){var e,r;return t<=0?NaN:(e=this.randomNormal(0,1),r=this.randomChisquare(t),e/Math.sqrt(r/t))},randomBinomial:function(t,e){var r,s,o,a,n,l;if(e<0||e>1||t<0)return NaN;if(e===0)return 0;if(e===1)return t;if(t===0)return 0;if(t===1)return Math.random()<e?1:0;if(e>.5)return t-this.randomBinomial(t,1-e);if(t<100){if(r=-1,s=0,o=Math.log(1-e),o===0)return 0;do r+=1,s+=Math.floor(Math.log(Math.random())/o)+1;while(s<t)}else a=1+Math.floor(t*.5),n=t-a+1,r=this.randomBeta(a,n),r>=e?(l=this.randomBinomial(a-1,e/r),r=l):(l=this.randomBinomial(n-1,(e-r)/(1-r)),r=a+l);return r},randomGeometric:function(t){var e;return t<0||t>1?NaN:(e=Math.random(),Math.ceil(Math.log(e)/Math.log(1-t)))},randomPoisson:function(t){var e=Math.exp(-t),r,s=0,o=1,a,n=7/8;if(t<=0)return NaN;if(t<10){do o*=Math.random(),s+=1;while(o>e);r=s-1}else s=Math.floor(n*t),a=this.randomGamma(s),a<t?r=s+this.randomPoisson(t-a):r=this.randomBinomial(s-1,t/a);return r},randomPareto:function(t,e){return t<=0||e<=0?NaN:e*Math.pow(1-Math.random(),-1/t)},randomHypergeometric:function(t,e,r){var s,o,a=0,n=t+e-r,l=Math.min(t,e),h=l;if(t<1||e<1||r>t+e)return NaN;for(s=r;h*s>0;)o=Math.random(),h-=Math.floor(o+h/(n+s)),s-=1;return a=l-h,t<=e?a:r-a},histogram:function(t,e){var r,s,o,a,n,l,h,d,u,c=[],p=[],f=0;for(l=e.bins||10,d=e.range||!1,d===!1?(a=Math.min.apply(null,t),n=Math.max.apply(null,t)):(a=d[0],n=d[1]),l>0?h=(n-a)/(l-1):h=0,r=0;r<l;r++)c.push(0),p.push(a+r*h);for(s=t.length,r=0;r<s;r++)o=Math.floor((t[r]-a)/h),o>=0&&o<l?c[o]+=1:f+=1;if(e.density)for(u=jxg_default.Math.Statistics.sum(c)+f,r=0;r<l;r++)c[r]/=u*h;if(e.cumulative){if(e.density)for(r=0;r<l;r++)c[r]*=h;for(r=1;r<l;r++)c[r]+=c[r-1]}return[c,p]}};var statistics_default=math_default.Statistics,predefinedButcher={rk4:{s:4,A:[[0,0,0,0],[.5,0,0,0],[0,.5,0,0],[0,0,1,0]],b:[1/6,1/3,1/3,1/6],c:[0,.5,.5,1]},heun:{s:2,A:[[0,0],[1,0]],b:[.5,.5],c:[0,1]},euler:{s:1,A:[[0]],b:[1],c:[0]}};math_default.Numerics={Gauss:function(t,e){var r,s,o,a,n,l=math_default.eps,h=t.length>0?t[0].length:0;if(h!==e.length||h!==t.length)throw new Error("JXG.Math.Numerics.Gauss: Dimensions don't match. A must be a square matrix and b must be of the same length as A.");for(a=[],n=e.slice(0,h),r=0;r<h;r++)a[r]=t[r].slice(0,h);for(s=0;s<h;s++){for(r=h-1;r>s;r--)if(Math.abs(a[r][s])>l)if(Math.abs(a[s][s])<l)type_default.swap(a,r,s),type_default.swap(n,r,s);else for(a[r][s]/=a[s][s],n[r]-=a[r][s]*n[s],o=s+1;o<h;o++)a[r][o]-=a[r][s]*a[s][o];if(Math.abs(a[s][s])<l)throw new Error("JXG.Math.Numerics.Gauss(): The given matrix seems to be singular.")}return this.backwardSolve(a,n,!0),n},backwardSolve:function(t,e,r){var s,o,a,n,l;for(r?s=e:s=e.slice(0,e.length),o=t.length,a=t.length>0?t[0].length:0,n=o-1;n>=0;n--){for(l=a-1;l>n;l--)s[n]-=t[n][l]*s[l];s[n]/=t[n][n]}return s},gaussBareiss:function(t){var e,r,s,o,a,n,l,h,d,u=math_default.eps;if(l=t.length,l<=0)return 0;for(t[0].length<l&&(l=t[0].length),h=[],o=0;o<l;o++)h[o]=t[o].slice(0,l);for(r=1,s=1,e=0;e<l-1;e++){if(n=h[e][e],Math.abs(n)<u){for(o=e+1;o<l&&!(Math.abs(h[o][e])>=u);o++);if(o===l)return 0;for(a=e;a<l;a++)d=h[o][a],h[o][a]=h[e][a],h[e][a]=d;s=-s,n=h[e][e]}for(o=e+1;o<l;o++)for(a=e+1;a<l;a++)d=n*h[o][a]-h[o][e]*h[e][a],h[o][a]=d/r;r=n}return s*h[l-1][l-1]},det:function(t){return t.length===2&&t[0].length===2?t[0][0]*t[1][1]-t[1][0]*t[0][1]:this.gaussBareiss(t)},Jacobi:function(t){var e,r,s,o,a,n,l,h,d,u=math_default.eps*math_default.eps,c=0,p=t.length,f=[[0,0,0],[0,0,0],[0,0,0]],_=[[0,0,0],[0,0,0],[0,0,0]],g=0;for(e=0;e<p;e++){for(r=0;r<p;r++)f[e][r]=0,_[e][r]=t[e][r],c+=Math.abs(_[e][r]);f[e][e]=1}if(p===1)return[_,f];if(c<=0)return[_,f];c/=p*p;do{for(h=0,d=0,r=1;r<p;r++)for(e=0;e<r;e++)if(o=Math.abs(_[e][r]),o>d&&(d=o),h+=o,o>=u){for(o=Math.atan2(2*_[e][r],_[e][e]-_[r][r])*.5,a=Math.sin(o),n=Math.cos(o),s=0;s<p;s++)l=_[s][e],_[s][e]=n*l+a*_[s][r],_[s][r]=-a*l+n*_[s][r],l=f[s][e],f[s][e]=n*l+a*f[s][r],f[s][r]=-a*l+n*f[s][r];for(_[e][e]=n*_[e][e]+a*_[r][e],_[r][r]=-a*_[e][r]+n*_[r][r],_[e][r]=0,s=0;s<p;s++)_[e][s]=_[s][e],_[r][s]=_[s][r]}g+=1}while(Math.abs(h)/c>u&&g<2e3);return[_,f]},NewtonCotes:function(t,e,r){var s,o,a,n=0,l=r&&type_default.isNumber(r.number_of_nodes)?r.number_of_nodes:28,h={trapez:!0,simpson:!0,milne:!0},d=r&&r.integration_type&&h.hasOwnProperty(r.integration_type)&&h[r.integration_type]?r.integration_type:"milne",u=(t[1]-t[0])/l;switch(d){case"trapez":for(n=(e(t[0])+e(t[1]))*.5,s=t[0],o=0;o<l-1;o++)s+=u,n+=e(s);n*=u;break;case"simpson":if(l%2>0)throw new Error("JSXGraph: INT_SIMPSON requires config.number_of_nodes dividable by 2.");for(a=l/2,n=e(t[0])+e(t[1]),s=t[0],o=0;o<a-1;o++)s+=2*u,n+=2*e(s);for(s=t[0]-u,o=0;o<a;o++)s+=2*u,n+=4*e(s);n*=u/3;break;default:if(l%4>0)throw new Error("JSXGraph: Error in INT_MILNE: config.number_of_nodes must be a multiple of 4");for(a=l*.25,n=7*(e(t[0])+e(t[1])),s=t[0],o=0;o<a-1;o++)s+=4*u,n+=14*e(s);for(s=t[0]-3*u,o=0;o<a;o++)s+=4*u,n+=32*(e(s)+e(s+2*u));for(s=t[0]-2*u,o=0;o<a;o++)s+=4*u,n+=12*e(s);n*=2*u/45}return n},Romberg:function(t,e,r){var s,o,a,n,l,h,d,u,c=[],p=0,f=1/0,_=r&&type_default.isNumber(r.max_iterations)?r.max_iterations:20,g=r&&type_default.isNumber(r.eps)?r.eps:r.eps||1e-7;for(s=t[0],o=t[1],a=o-s,l=1,c[0]=.5*a*(e(s)+e(o)),h=0;h<_;++h){for(n=0,a*=.5,l*=2,u=1,d=1;d<l;d+=2)n+=e(s+d*a);for(c[h+1]=.5*c[h]+n*a,p=c[h+1],d=h-1;d>=0;--d)u*=4,c[d]=c[d+1]+(c[d+1]-c[d])/(u-1),p=c[d];if(Math.abs(p-f)<g*Math.abs(p))break;f=p}return p},GaussLegendre:function(t,e,r){var s,o,a,n,l,h,d=0,u=[],c=[],p,f,_=r&&type_default.isNumber(r.n)?r.n:12;if(_>18&&(_=18),u[2]=[.5773502691896257],c[2]=[1],u[4]=[.33998104358485626,.8611363115940526],c[4]=[.6521451548625461,.34785484513745385],u[6]=[.2386191860831969,.6612093864662645,.932469514203152],c[6]=[.46791393457269104,.3607615730481386,.17132449237917036],u[8]=[.1834346424956498,.525532409916329,.7966664774136267,.9602898564975363],c[8]=[.362683783378362,.31370664587788727,.22238103445337448,.10122853629037626],u[10]=[.14887433898163122,.4333953941292472,.6794095682990244,.8650633666889845,.9739065285171717],c[10]=[.29552422471475287,.26926671930999635,.21908636251598204,.1494513491505806,.06667134430868814],u[12]=[.1252334085114689,.3678314989981802,.5873179542866175,.7699026741943047,.9041172563704749,.9815606342467192],c[12]=[.24914704581340277,.2334925365383548,.20316742672306592,.16007832854334622,.10693932599531843,.04717533638651183],u[14]=[.10805494870734367,.31911236892788974,.5152486363581541,.6872929048116855,.827201315069765,.9284348836635735,.9862838086968123],c[14]=[.2152638534631578,.2051984637212956,.18553839747793782,.15720316715819355,.12151857068790319,.08015808715976021,.03511946033175186],u[16]=[.09501250983763744,.2816035507792589,.45801677765722737,.6178762444026438,.755404408355003,.8656312023878318,.9445750230732326,.9894009349916499],c[16]=[.1894506104550685,.18260341504492358,.16915651939500254,.14959598881657674,.12462897125553388,.09515851168249279,.062253523938647894,.027152459411754096],u[18]=[.0847750130417353,.2518862256915055,.41175116146284263,.5597708310739475,.6916870430603532,.8037049589725231,.8926024664975557,.9558239495713977,.9915651684209309],c[18]=[.1691423829631436,.16427648374583273,.15468467512626524,.14064291467065065,.12255520671147846,.10094204410628717,.07642573025488905,.0497145488949698,.02161601352648331],u[3]=[0,.7745966692414834],c[3]=[.8888888888888888,.5555555555555556],u[5]=[0,.5384693101056831,.906179845938664],c[5]=[.5688888888888889,.47862867049936647,.23692688505618908],u[7]=[0,.4058451513773972,.7415311855993945,.9491079123427585],c[7]=[.4179591836734694,.3818300505051189,.27970539148927664,.1294849661688697],u[9]=[0,.3242534234038089,.6133714327005904,.8360311073266358,.9681602395076261],c[9]=[.3302393550012598,.31234707704000286,.26061069640293544,.1806481606948574,.08127438836157441],u[11]=[0,.26954315595234496,.5190961292068118,.7301520055740494,.8870625997680953,.978228658146057],c[11]=[.2729250867779006,.26280454451024665,.23319376459199048,.18629021092773426,.1255803694649046,.05566856711617366],u[13]=[0,.2304583159551348,.44849275103644687,.6423493394403402,.8015780907333099,.9175983992229779,.9841830547185881],c[13]=[.2325515532308739,.22628318026289723,.2078160475368885,.17814598076194574,.13887351021978725,.09212149983772845,.04048400476531588],u[15]=[0,.20119409399743451,.3941513470775634,.5709721726085388,.7244177313601701,.8482065834104272,.937273392400706,.9879925180204854],c[15]=[.2025782419255613,.19843148532711158,.1861610000155622,.16626920581699392,.13957067792615432,.10715922046717194,.07036604748810812,.03075324199611727],u[17]=[0,.17848418149584785,.3512317634538763,.5126905370864769,.6576711592166907,.7815140038968014,.8802391537269859,.9506755217687678,.9905754753144174],c[17]=[.17944647035620653,.17656270536699264,.16800410215645004,.15404576107681028,.13513636846852548,.11188384719340397,.08503614831717918,.0554595293739872,.02414830286854793],s=t[0],o=t[1],n=_+1>>1,p=u[_],f=c[_],h=.5*(o-s),l=.5*(o+s),_&!0)for(d=f[0]*e(l),a=1;a<n;++a)d+=f[a]*(e(l+h*p[a])+e(l-h*p[a]));else for(d=0,a=0;a<n;++a)d+=f[a]*(e(l+h*p[a])+e(l-h*p[a]));return h*d},_rescale_error:function(t,e,r){var s,o,a=22250738585072014e-324,n=2220446049250313e-31;return t=Math.abs(t),r!==0&&t!==0&&(s=Math.pow(200*t/r,1.5),s<1?t=r*s:t=r),e>a/(50*n)&&(o=50*n*e,o>t&&(t=o)),t},_gaussKronrod:function(t,e,r,s,o,a,n){var l=t[0],h=t[1],d,u,c=.5*(l+h),p=.5*(h-l),f=Math.abs(p),_=e(c),g=0,m=_*a[r-1],b=Math.abs(m),C=0,y=0,x=0,v,P,E,w,O,S,M,N=[],j=[];for(r%2===0&&(g=_*o[r/2-1]),d=Math.floor((r-1)/2),v=0;v<d;v++)P=v*2+1,w=p*s[P],O=e(c-w),S=e(c+w),M=O+S,N[P]=O,j[P]=S,g+=o[v]*M,m+=a[P]*M,b+=a[P]*(Math.abs(O)+Math.abs(S));for(d=Math.floor(r/2),v=0;v<d;v++)E=v*2,w=p*s[E],O=e(c-w),S=e(c+w),N[E]=O,j[E]=S,m+=a[E]*(O+S),b+=a[E]*(Math.abs(O)+Math.abs(S));for(y=m*.5,C=a[r-1]*Math.abs(_-y),v=0;v<r-1;v++)C+=a[v]*(Math.abs(N[v]-y)+Math.abs(j[v]-y));return x=(m-g)*p,m*=p,b*=f,C*=f,u=m,n.abserr=this._rescale_error(x,b,C),n.resabs=b,n.resasc=C,u},GaussKronrod15:function(t,e,r){return this._gaussKronrod(t,e,8,[.9914553711208126,.9491079123427585,.8648644233597691,.7415311855993945,.5860872354676911,.4058451513773972,.20778495500789848,0],[.1294849661688697,.27970539148927664,.3818300505051189,.4179591836734694],[.022935322010529224,.06309209262997856,.10479001032225019,.14065325971552592,.1690047266392679,.19035057806478542,.20443294007529889,.20948214108472782],r)},GaussKronrod21:function(t,e,r){return this._gaussKronrod(t,e,11,[.9956571630258081,.9739065285171717,.9301574913557082,.8650633666889845,.7808177265864169,.6794095682990244,.5627571346686047,.4333953941292472,.2943928627014602,.14887433898163122,0],[.06667134430868814,.1494513491505806,.21908636251598204,.26926671930999635,.29552422471475287],[.011694638867371874,.032558162307964725,.054755896574351995,.07503967481091996,.0931254545836976,.10938715880229764,.12349197626206584,.13470921731147334,.14277593857706009,.14773910490133849,.1494455540029169],r)},GaussKronrod31:function(t,e,r){return this._gaussKronrod(t,e,16,[.9980022986933971,.9879925180204854,.9677390756791391,.937273392400706,.8972645323440819,.8482065834104272,.790418501442466,.7244177313601701,.650996741297417,.5709721726085388,.4850818636402397,.3941513470775634,.29918000715316884,.20119409399743451,.1011420669187175,0],[.03075324199611727,.07036604748810812,.10715922046717194,.13957067792615432,.16626920581699392,.1861610000155622,.19843148532711158,.2025782419255613],[.005377479872923349,.015007947329316122,.02546084732671532,.03534636079137585,.04458975132476488,.05348152469092809,.06200956780067064,.06985412131872826,.07684968075772038,.08308050282313302,.08856444305621176,.09312659817082532,.09664272698362368,.09917359872179196,.10076984552387559,.10133000701479154],r)},_workspace:function(t,e){return{limit:e,size:0,nrmax:0,i:0,alist:[t[0]],blist:[t[1]],rlist:[0],elist:[0],order:[0],level:[0],qpsrt:function(){var r=this.size-1,s=this.limit,o,a,n,l,h,d=this.nrmax,u=this.order[d];if(r<2){this.order[0]=0,this.order[1]=1,this.i=u;return}for(o=this.elist[u];d>0&&o>this.elist[this.order[d-1]];)this.order[d]=this.order[d-1],d--;for(r<s/2+2?h=r:h=s-r+1,n=d+1;n<h&&o<this.elist[this.order[n]];)this.order[n-1]=this.order[n],n++;for(this.order[n-1]=u,a=this.elist[r],l=h-1;l>n-2&&a>=this.elist[this.order[l]];)this.order[l+1]=this.order[l],l--;this.order[l+1]=r,u=this.order[d],this.i=u,this.nrmax=d},set_initial_result:function(r,s){this.size=1,this.rlist[0]=r,this.elist[0]=s},update:function(r,s,o,a,n,l,h,d){var u=this.i,c=this.size,p=this.level[this.i]+1;d>a?(this.alist[u]=n,this.rlist[u]=h,this.elist[u]=d,this.level[u]=p,this.alist[c]=r,this.blist[c]=s,this.rlist[c]=o,this.elist[c]=a,this.level[c]=p):(this.blist[u]=s,this.rlist[u]=o,this.elist[u]=a,this.level[u]=p,this.alist[c]=n,this.blist[c]=l,this.rlist[c]=h,this.elist[c]=d,this.level[c]=p),this.size++,p>this.maximum_level&&(this.maximum_level=p),this.qpsrt()},retrieve:function(){var r=this.i;return{a:this.alist[r],b:this.blist[r],r:this.rlist[r],e:this.elist[r]}},sum_results:function(){var r=this.size,s,o=0;for(s=0;s<r;s++)o+=this.rlist[s];return o},subinterval_too_small:function(r,s,o){var a=1.0000000000000222*(Math.abs(s)+22250738585072014e-321);return Math.abs(r)<=a&&Math.abs(o)<=a}}},Qag:function(t,e,r){var s=2220446049250313e-31,o=this._workspace(t,1e3),a=r&&type_default.isNumber(r.limit)?r.limit:15,n=r&&type_default.isNumber(r.epsrel)?r.epsrel:1e-7,l=r&&type_default.isNumber(r.epsabs)?r.epsabs:1e-7,h=r&&type_default.isFunction(r.q)?r.q:this.GaussKronrod15,d={},u,c,p,f,_,g,m,b,C=0,y=0,x=0,v=0,P,E,w,O,S,M,N,j,k,B=0,I=0,X=0,J=0,Y=0,F=0,D,A,T,U;if(a>o.limit&&jxg_default.warn("iteration limit exceeds available workspace"),l<=0&&(n<50*math_default.eps||n<5e-29)&&jxg_default.warn("tolerance cannot be acheived with given epsabs and epsrel"),p=h.apply(this,[t,e,d]),f=d.abserr,_=d.resabs,g=d.resasc,o.set_initial_result(p,f),b=Math.max(l,n*Math.abs(p)),P=50*s*_,f<=P&&f>b)return m=p,jxg_default.warn("cannot reach tolerance because of roundoff error on first attempt"),-1/0;if(f<=b&&f!==g||f===0)return m=p,m;if(a===1)return m=p,jxg_default.warn("a maximum of one iteration was insufficient"),-1/0;u=p,c=f,C=1;do B=0,I=0,X=0,J=0,Y=0,F=0,T=o.retrieve(),M=T.a,N=T.b,j=T.r,k=T.e,E=M,w=.5*(M+N),O=w,S=N,B=h.apply(this,[[E,w],e,d]),J=d.abserr,D=d.resasc,I=h.apply(this,[[O,S],e,d]),Y=d.abserr,A=d.resasc,X=B+I,F=J+Y,c+=F-k,u+=X-j,D!==J&&A!==Y&&(U=j-X,Math.abs(U)<=1e-5*Math.abs(X)&&F>=.99*k&&y++,C>=10&&F>k&&x++),b=Math.max(l,n*Math.abs(u)),c>b&&((y>=6||x>=20)&&(v=2),o.subinterval_too_small(E,O,S)&&(v=3)),o.update(E,w,B,J,O,S,I,Y),T=o.retrieve(),M=T.a,N=T.b,j=T.r,k=T.e,C++;while(C<a&&!v&&c>b);return m=o.sum_results(),m},I:function(t,e){return this.Qag(t,e,{q:this.GaussKronrod15,limit:15,epsrel:1e-7,epsabs:1e-7})},Newton:function(t,e,r){var s,o=0,a=math_default.eps,n=t.apply(r,[e]);for(type_default.isArray(e)&&(e=e[0]);o<50&&Math.abs(n)>a;)s=this.D(t,r)(e),Math.abs(s)>a?e-=n/s:e+=Math.random()*.2-1,n=t.apply(r,[e]),o+=1;return e},root:function(t,e,r){return this.chandrupatla(t,e,r)},generalizedNewton:function(t,e,r,s){var o,a,n,l,h,d,u,c,p,f,_,g,m,b,C=0;for(o=r,a=s,u=t.X(o)-e.X(a),c=t.Y(o)-e.Y(a),f=u*u+c*c,_=this.D(t.X,t),g=this.D(e.X,e),m=this.D(t.Y,t),b=this.D(e.Y,e);f>math_default.eps&&C<10;)n=_(o),l=-g(a),h=m(o),d=-b(a),p=n*d-l*h,o-=(d*u-l*c)/p,a-=(n*c-h*u)/p,u=t.X(o)-e.X(a),c=t.Y(o)-e.Y(a),f=u*u+c*c,C+=1;return Math.abs(o)<Math.abs(a)?[t.X(o),t.Y(o)]:[e.X(a),e.Y(a)]},generalizedDampedNewtonCurves:function(t,e,r,s,o,a){var n,l,h,d,u,c,p,f,_,g,m,b,C,y,x=40,v=0;for(n=r,l=s,m=t.Ft(n),b=e.Ft(l),p=m[1]-b[1],f=m[2]-b[2],g=p*p+f*f,C=function(P,E){var w=math_default.eps,O=t.Ft(P-w),S=t.Ft(P+w),M=e.Ft(E-w),N=e.Ft(E+w);return[[(S[1]-O[1])/(2*w),-(N[1]-M[1])/(2*w)],[(S[2]-O[2])/(2*w),-(N[2]-M[2])/(2*w)]]};g>a&&v<x;)y=C(n,l),h=y[0][0],d=y[0][1],u=y[1][0],c=y[1][1],_=h*c-d*u,n-=o*(c*p-d*f)/_,l-=o*(h*f-u*p)/_,m=t.Ft(n),b=e.Ft(l),p=m[1]-b[1],f=m[2]-b[2],g=p*p+f*f,v+=1;return[n,l,g]},generalizedDampedNewton:function(t,e,r,s,o,a,n){var l,h=[],d,u,c,p,f,_,g,m,b,C,y,x=0;if(n=n||40,h=s.slice(0,r),m=t(h,r),r===2){for(m=t(h,r),f=m[0],_=m[1],C=f*f+_*_;C>a&&x<n;)b=e(h,r),d=b[0][0],u=b[0][1],c=b[1][0],p=b[1][1],g=d*p-u*c,h[0]-=o*(p*f-u*_)/g,h[1]-=o*(d*_-c*f)/g,m=t(h,r),f=m[0],_=m[1],C=f*f+_*_,x+=1;return[h,C]}else{for(m=t(h,r),C=math_default.innerProduct(m,m,r);C>a&&x<n;){for(b=math_default.inverse(e(h,r)),y=math_default.matVecMult(b,m),l=0;l<r;l++)h[l]-=o*y[l];m=t(h,r),C=math_default.innerProduct(m,m,r),x+=1}return[h,C]}},Neville:function(t){var e=[],r=function(s){return function(o,a){var n,l,h,d=math_default.binomial,u=t.length,c=u-1,p=0,f=0;if(!a)for(h=1,n=0;n<u;n++)e[n]=d(c,n)*h,h*=-1;for(l=o,n=0;n<u;n++){if(l===0)return t[n][s]();h=e[n]/l,l-=1,p+=t[n][s]()*h,f+=h}return p/f}};return[r("X"),r("Y"),0,function(){return t.length-1}]},splineDef:function(t,e){var r,s,o,a=Math.min(t.length,e.length),n=[],l=[],h=[],d=[],u=[],c=[];if(a===2)return[0,0];for(s=0;s<a;s++)r={X:t[s],Y:e[s]},h.push(r);for(h.sort(function(p,f){return p.X-f.X}),s=0;s<a;s++)t[s]=h[s].X,e[s]=h[s].Y;for(s=0;s<a-1;s++)d.push(t[s+1]-t[s]);for(s=0;s<a-2;s++)u.push(6*(e[s+2]-e[s+1])/d[s+1]-6*(e[s+1]-e[s])/d[s]);for(n.push(2*(d[0]+d[1])),l.push(u[0]),s=0;s<a-3;s++)o=d[s+1]/n[s],n.push(2*(d[s+1]+d[s+2])-o*d[s+1]),l.push(u[s+1]-o*l[s]);for(c[a-3]=l[a-3]/n[a-3],s=a-4;s>=0;s--)c[s]=(l[s]-d[s+1]*c[s+1])/n[s];for(s=a-3;s>=0;s--)c[s+1]=c[s];return c[0]=0,c[a-1]=0,c},splineEval:function(t,e,r,s){var o,a,n,l,h,d,u,c=Math.min(e.length,r.length),p=1,f=!1,_=[];for(type_default.isArray(t)?(p=t.length,f=!0):t=[t],o=0;o<p;o++){if(t[o]<e[0]||t[o]>e[c-1])return NaN;for(a=1;a<c&&!(t[o]<=e[a]);a++);a-=1,n=r[a],l=(r[a+1]-r[a])/(e[a+1]-e[a])-(e[a+1]-e[a])/6*(s[a+1]+2*s[a]),h=s[a]/2,d=(s[a+1]-s[a])/(6*(e[a+1]-e[a])),u=t[o]-e[a],_.push(n+(l+(h+d*u)*u)*u)}return f?_:_[0]},generatePolynomialTerm:function(t,e,r,s){var o,a=[];for(o=e;o>=0;o--)type_default.concat(a,["(",t[o].toPrecision(s),")"]),o>1?type_default.concat(a,["*",r,"<sup>",o,"<","/sup> + "]):o===1&&type_default.concat(a,["*",r," + "]);return a.join("")},lagrangePolynomial:function(t){var e=[],r=this,s=function(o,a){var n,l,h,d,u=t.length,c=0,p=0;if(!a)for(n=0;n<u;n++){for(e[n]=1,h=t[n].X(),l=0;l<u;l++)l!==n&&(e[n]*=h-t[l].X());e[n]=1/e[n]}for(n=0;n<u;n++){if(h=t[n].X(),o===h)return t[n].Y();d=e[n]/(o-h),p+=d,c+=d*t[n].Y()}return c/p};return s.getTerm=function(o,a,n){return r.lagrangePolynomialTerm(t,o,a,n)()},s.getCoefficients=function(){return r.lagrangePolynomialCoefficients(t)()},s},lagrangePolynomialTerm:function(t,e,r,s){var o=this;return function(){var a=t.length,n=[],l=!0,h,d,u,c;for(r=r||"x",s===void 0&&(s=" * "),h=a-1,n=o.lagrangePolynomialCoefficients(t)(),d="",u=0;u<n.length;u++)c=n[u],!(Math.abs(c)<math_default.eps)&&(jxg_default.exists(e)&&(c=env_default._round10(c,-e)),l?(d+=c>0?c:"-"+-c,l=!1):d+=c>0?" + "+c:" - "+-c,h-u>1?d+=s+r+"^"+(h-u):h-u===1&&(d+=s+r));return d}},lagrangePolynomialCoefficients:function(t){return function(){for(var e=t.length,r=[],s=[],o=[],a,n=0,l,h;n<e;n++)o[n]=0;for(a=0;a<e;a++){for(l=t[a].Y(),h=t[a].X(),r=[],n=0;n<e;n++)n!==a&&(l/=h-t[n].X(),r.push(t[n].X()));for(s=[1].concat(math_default.Vieta(r)),n=0;n<s.length;n++)o[n]+=(n%2===1?-1:1)*s[n]*l}return o}},_initCubicPoly:function(t,e,r,s){return[t,r,-3*t+3*e-2*r-s,2*t-2*e+r+s]},CardinalSpline:function(t,e,r){var s,o=[],a,n,l,h=this;return type_default.isFunction(e)?l=e:l=function(){return e},r===void 0&&(r="uniform"),a=function(d){return function(u,c){var p,f,_,g,m,b,C,y,x,v;if(t.length<2)return NaN;if(!c)for(n=l(),_={X:function(){return 2*t[0].X()-t[1].X()},Y:function(){return 2*t[0].Y()-t[1].Y()},Dist:function(P){var E=this.X()-P.X(),w=this.Y()-P.Y();return math_default.hypot(E,w)}},g={X:function(){return 2*t[t.length-1].X()-t[t.length-2].X()},Y:function(){return 2*t[t.length-1].Y()-t[t.length-2].Y()},Dist:function(P){var E=this.X()-P.X(),w=this.Y()-P.Y();return math_default.hypot(E,w)}},s=[_].concat(t,[g]),v=s.length,o[d]=[],p=0;p<v-3;p++)r==="centripetal"?(C=s[p].Dist(s[p+1]),y=s[p+2].Dist(s[p+1]),x=s[p+3].Dist(s[p+2]),C=Math.sqrt(C),y=Math.sqrt(y),x=Math.sqrt(x),y<math_default.eps&&(y=1),C<math_default.eps&&(C=y),x<math_default.eps&&(x=y),m=(s[p+1][d]()-s[p][d]())/C-(s[p+2][d]()-s[p][d]())/(y+C)+(s[p+2][d]()-s[p+1][d]())/y,b=(s[p+2][d]()-s[p+1][d]())/y-(s[p+3][d]()-s[p+1][d]())/(x+y)+(s[p+3][d]()-s[p+2][d]())/x,m*=y,b*=y,o[d][p]=h._initCubicPoly(s[p+1][d](),s[p+2][d](),n*m,n*b)):o[d][p]=h._initCubicPoly(s[p+1][d](),s[p+2][d](),n*(s[p+2][d]()-s[p][d]()),n*(s[p+3][d]()-s[p+1][d]()));return isNaN(u)?NaN:(v=t.length,u<=0?t[0][d]():u>=v?t[v-1][d]():(p=Math.floor(u),p===u?t[p][d]():(u-=p,f=o[d][p],f===void 0?NaN:((f[3]*u+f[2])*u+f[1])*u+f[0])))}},[a("X"),a("Y"),0,function(){return t.length-1}]},CatmullRomSpline:function(t,e){return this.CardinalSpline(t,.5,e)},regressionPolynomial:function(t,e,r){var s,o,a,n,l,h,d="";if(type_default.isPoint(t)&&type_default.isFunction(t.Value))o=function(){return t.Value()};else if(type_default.isFunction(t))o=t;else if(type_default.isNumber(t))o=function(){return t};else throw new Error("JSXGraph: Can't create regressionPolynomial from degree of type'"+typeof t+"'.");if(arguments.length===3&&type_default.isArray(e)&&type_default.isArray(r))l=0;else if(arguments.length===2&&type_default.isArray(e)&&e.length>0&&type_default.isPoint(e[0]))l=1;else if(arguments.length===2&&type_default.isArray(e)&&e.length>0&&e[0].usrCoords&&e[0].scrCoords)l=2;else throw new Error("JSXGraph: Can't create regressionPolynomial. Wrong parameters.");return h=function(u,c){var p,f,_,g,m,b,C,y,x,v=e.length;if(x=Math.floor(o()),!c){if(l===1)for(a=[],n=[],p=0;p<v;p++)a[p]=e[p].X(),n[p]=e[p].Y();if(l===2)for(a=[],n=[],p=0;p<v;p++)a[p]=e[p].usrCoords[1],n[p]=e[p].usrCoords[2];if(l===0)for(a=[],n=[],p=0;p<v;p++)type_default.isFunction(e[p])?a.push(e[p]()):a.push(e[p]),type_default.isFunction(r[p])?n.push(r[p]()):n.push(r[p]);for(_=[],f=0;f<v;f++)_.push([1]);for(p=1;p<=x;p++)for(f=0;f<v;f++)_[f][p]=_[f][p-1]*a[f];m=n,g=math_default.transpose(_),b=math_default.matMatMult(g,_),C=math_default.matVecMult(g,m),s=math_default.Numerics.Gauss(b,C),d=math_default.Numerics.generatePolynomialTerm(s,x,"x",3)}for(y=s[x],p=x-1;p>=0;p--)y=y*u+s[p];return y},h.getTerm=function(){return d},h},bezier:function(t){var e,r,s=function(o){return function(a,n){var l=Math.floor(a)*3,h=a%1,d=1-h;return n||(r=3*Math.floor((t.length-1)/3),e=Math.floor(r/3)),a<0?t[0][o]():a>=e?t[r][o]():isNaN(a)?NaN:d*d*(d*t[l][o]()+3*h*t[l+1][o]())+(3*d*t[l+2][o]()+h*t[l+3][o]())*h*h}};return[s("X"),s("Y"),0,function(){return Math.floor(t.length/3)}]},bspline:function(t,e){var r,s=function(n,l){var h,d=[];for(h=0;h<n+l+1;h++)h<l?d[h]=0:h<=n?d[h]=h-l+1:d[h]=n-l+2;return d},o=function(n,l,h,d){var u,c,p,f,_,g=[];for(l[d]<=n&&n<l[d+1]?g[d]=1:g[d]=0,u=2;u<=h;u++)for(c=d-u+1;c<=d;c++)c<=d-u+1||c<0?p=0:p=g[c],c>=d?f=0:f=g[c+1],_=l[c+u-1]-l[c],_===0?g[c]=0:g[c]=(n-l[c])/_*p,_=l[c+u]-l[c+1],_!==0&&(g[c]+=(l[c+u]-n)/_*f);return g},a=function(n){return function(l,h){var d,u,c,p=[],f=t.length,_=f-1,g=e;if(_<=0)return NaN;if(_+2<=g&&(g=_+1),l<=0)return t[0][n]();if(l>=_-g+2)return t[_][n]();for(c=Math.floor(l)+g-1,r=s(_,g),p=o(l,r,g,c),d=0,u=c-g+1;u<=c;u++)u<f&&u>=0&&(d+=t[u][n]()*p[u]);return d}};return[a("X"),a("Y"),0,function(){return t.length-1}]},D:function(t,e){return type_default.exists(e)?function(r,s){var o=1e-5,a=o*2;return(t.apply(e,[r+o,s])-t.apply(e,[r-o,s]))/a}:function(r,s){var o=1e-5,a=o*2;return(t(r+o,s)-t(r-o,s))/a}},_riemannValue:function(t,e,r,s){var o,a,n,l;if(s<0&&(r!=="trapezoidal"&&(t=t+s),s*=-1,r==="lower"?r="upper":r==="upper"&&(r="lower")),l=s*.01,r==="right")o=e(t+s);else if(r==="middle")o=e(t+s*.5);else if(r==="left"||r==="trapezoidal")o=e(t);else if(r==="lower"){for(o=e(t),n=t+l;n<=t+s;n+=l)a=e(n),a<o&&(o=a);a=e(t+s),a<o&&(o=a)}else if(r==="upper"){for(o=e(t),n=t+l;n<=t+s;n+=l)a=e(n),a>o&&(o=a);a=e(t+s),a>o&&(o=a)}else r==="random"?o=e(t+s*Math.random()):r==="simpson"?o=(e(t)+4*e(t+s*.5)+e(t+s))/6:o=e(t);return o},riemann:function(t,e,r,s,o){var a,n,l,h,d,u,c,p,f,_,g,m=30,b=[],C=[],y=s,x=0,v,P,E;if(type_default.isArray(t)?(E=t[0],P=t[1]):P=t,e=Math.floor(e),e<=0)return[b,C,x];for(n=(o-s)/e,a=0;a<e;a++){if(r==="simpson"){for(x+=this._riemannValue(y,P,r,n)*n,g=n*.5,c=P(y),p=P(y+g),f=P(y+2*g),h=(f+c-2*p)/(g*g)*.5,d=(f-c)/(2*g),u=p,l=0;l<m;l++)_=l*n/m-g,b.push(y+_+g),C.push(h*_*_+d*_+u);y+=n,v=f}else v=this._riemannValue(y,P,r,n),b.push(y),C.push(v),y+=n,r==="trapezoidal"?(f=P(y),x+=(v+f)*.5*n,v=f):x+=v*n;b.push(y),C.push(v)}for(a=0;a<e;a++){if(r==="simpson"&&E){for(x-=this._riemannValue(y,E,r,-n)*n,g=n*.5,c=E(y),p=E(y-g),f=E(y-2*g),h=(f+c-2*p)/(g*g)*.5,d=(f-c)/(2*g),u=p,l=0;l<m;l++)_=l*n/m-g,b.push(y-_-g),C.push(h*_*_+d*_+u);y-=n,v=f}else E?v=this._riemannValue(y,E,r,-n):v=0,b.push(y),C.push(v),y-=n,E&&(r==="trapezoidal"?(f=E(y),x-=(v+f)*.5*n,v=f):x-=v*n);b.push(y),C.push(v),b.push(y),r==="simpson"?C.push(P(y)):(v=this._riemannValue(y,P,r,n),C.push(v))}return[b,C,x]},riemannsum:function(t,e,r,s,o){return jxg_default.deprecated("Numerics.riemannsum()","Numerics.riemann()[2]"),this.riemann(t,e,r,s,o)[2]},rungeKutta:function(t,e,r,s,o){var a,n,l,h,d,u,c=[],p=[],f=(r[1]-r[0])/s,_=r[0],g=e.length,m=[],b=0;for(type_default.isString(t)&&(t=predefinedButcher[t]||predefinedButcher.euler),u=t.s,c=e.slice(),n=0;n<=s;n++){for(m[b]=c.slice(),b++,h=[],l=0;l<u;l++){for(a=0;a<g;a++)p[a]=0;for(d=0;d<l;d++)for(a=0;a<g;a++)p[a]+=t.A[l][d]*f*h[d][a];for(a=0;a<g;a++)p[a]+=c[a];h.push(o(_+t.c[l]*f,p))}for(a=0;a<g;a++)p[a]=0;for(d=0;d<u;d++)for(a=0;a<g;a++)p[a]+=t.b[d]*h[d][a];for(a=0;a<g;a++)c[a]=c[a]+f*p[a];_+=f}return m},maxIterationsRoot:80,maxIterationsMinimize:500,findBracket:function(t,e,r){var s,o,a,n,l,h,d,u,c,p;if(type_default.isArray(e))return e;for(s=e,a=t.call(r,s),o=s===0?1:s,n=[s-.1*o,s+.1*o,s-1,s+1,s-.5*o,s+.5*o,s-.6*o,s+.6*o,s-1*o,s+1*o,s-2*o,s+2*o,s-5*o,s+5*o,s-10*o,s+10*o,s-50*o,s+50*o,s-100*o,s+100*o],p=n.length,c=0;c<p&&(l=n[c],h=t.call(r,l),!(a*h<=0));c++);return l<s&&(d=s,s=l,l=d,u=a,a=h,h=u),[s,a,l,h]},fzero:function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f,_,g,m,b,C,y=math_default.eps,x=this.maxIterationsRoot,v=0;if(type_default.isArray(e)){if(e.length<2)throw new Error("JXG.Math.Numerics.fzero: length of array x0 has to be at least two.");u=this.findDomain(t,e,r),s=u[0],o=u[1],n=t.call(r,s),l=t.call(r,o)}else d=this.findBracket(t,e,r),s=d[0],n=d[1],o=d[2],l=d[3];if(Math.abs(n)<=y)return s;if(Math.abs(l)<=y)return o;if(n*l>0)return type_default.isArray(e)?this.fminbr(t,[s,o],r):this.Newton(t,s,r);for(a=s,h=n;v<x;){if(c=o-s,Math.abs(h)<Math.abs(l)&&(s=o,o=a,a=s,n=l,l=h,h=n),g=2*y*Math.abs(o)+y*.5,C=(a-o)*.5,Math.abs(C)<=g||Math.abs(l)<=y)return o;Math.abs(c)>=g&&Math.abs(n)>Math.abs(l)&&(_=a-o,s===a?(p=l/n,m=_*p,b=1-p):(b=n/h,p=l/h,f=l/n,m=f*(_*b*(b-p)-(o-s)*(p-1)),b=(b-1)*(p-1)*(f-1)),m>0?b=-b:m=-m,m<.75*_*b-Math.abs(g*b)*.5&&m<Math.abs(c*b*.5)&&(C=m/b)),Math.abs(C)<g&&(C=C>0?g:-g),s=o,n=l,o+=C,l=t.call(r,o),(l>0&&h>0||l<0&&h<0)&&(a=s,h=n),v++}return o},chandrupatla:function(t,e,r){var s,o,a,n,l,h=0,d=this.maxIterationsRoot,u=1+Math.random()*.001,c=.5*u,p=math_default.eps,f=1e-5,_,g,m,b,C,y,x,v,P,E,w,O,S,M,N,j,k,B,I,X,J;if(type_default.isArray(e)){if(e.length<2)throw new Error("JXG.Math.Numerics.fzero: length of array x0 has to be at least two.");s=e[0],a=t.call(r,s),o=e[1],n=t.call(r,o)}else l=this.findBracket(t,e,r),s=l[0],a=l[1],o=l[2],n=l[3];if(a*n>0)return type_default.isArray(e)?this.fminbr(t,[s,o],r):this.Newton(t,s,r);_=s,g=o,C=a,y=n;do{if(b=_+c*(g-_),v=t.call(r,b),Math.sign(v)===Math.sign(C)?(m=_,_=b,x=C,C=v):(m=g,g=_,x=y,y=C),_=b,C=v,P=_,E=C,Math.abs(y)<Math.abs(C)&&(P=g,E=y),w=2*p*Math.abs(P)+.5*f,O=w/Math.abs(g-_),O>.5||E===0)break;S=(_-g)/(m-g),M=(C-y)/(x-y),N=1-Math.sqrt(1-S),j=Math.sqrt(S),N<M&&M<j?(k=(m-_)/(g-_),B=C/(y-C),I=x/(y-x),X=C/(x-C),J=y/(x-y),c=B*I+X*J*k):c=.5*u,c<O&&(c=O),c>1-O&&(c=1-O),h++}while(h<=d);return P},findDomain:function(t,e,r,s){var o,a,n,l,h,d=.3819660112501453,u=.001,c,p=20;if(s===void 0&&(s=!0),!type_default.isArray(e)||e.length<2)throw new Error("JXG.Math.Numerics.findDomain: length of array x0 has to be at least two.");if(h=e.slice(),o=h[0],a=h[1],l=t.call(r,o),isNaN(l)){for(c=0;a-o>u&&c<p;)n=(a-o)*d+o,l=t.call(r,n),isNaN(l)?o=n:a=n,c++;s?h[0]=o:h[0]=a}if(o=h[0],a=h[1],l=t.call(r,a),isNaN(l)){for(c=0;a-o>u&&c<p;)n=a-(a-o)*d,l=t.call(r,n),isNaN(l)?a=n:o=n,c++;s?h[1]=a:h[1]=o}return h},fminbr:function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f,_,g,m,b,C,y,x=(3-Math.sqrt(5))*.5,v=math_default.eps,P=math_default.eps,E=this.maxIterationsMinimize,w=0;if(!type_default.isArray(e)||e.length<2)throw new Error("JXG.Math.Numerics.fminbr: length of array x0 has to be at least two.");for(c=this.findDomain(t,e,r),s=c[0],o=c[1],n=s+x*(o-s),d=t.call(r,n),a=n,l=n,h=d,u=d;w<E;){if(p=o-s,f=(s+o)*.5,_=P*Math.abs(a)+v/3,Math.abs(a-f)+p*.5<=2*_)return a;g=x*(a<f?o-a:s-a),Math.abs(a-l)>=_&&(C=(a-l)*(h-d),b=(a-n)*(h-u),m=(a-n)*b-(a-l)*C,b=2*(b-C),b>0?m=-m:b=-b,Math.abs(m)<Math.abs(g*b)&&m>b*(s-a+2*_)&&m<b*(o-a-2*_)&&(g=m/b)),Math.abs(g)<_&&(g>0?g=_:g=-_),C=a+g,y=t.call(r,C),y<=h?(C<a?o=a:s=a,n=l,l=a,a=C,d=u,u=h,h=y):(C<a?s=C:o=C,y<=u||l===a?(n=l,l=C,d=u,u=y):(y<=d||n===a||n===l)&&(n=C,d=y)),w+=1}return a},glomin:function(t,e){var r,s,o,a,n,l,h,d,u,c,p,f,_,g,m,b,C,y,x,v,P,E,w,O,S,M,N,j,k=1e7,B=math_default.eps,I=math_default.eps*math_default.eps,X=math_default.eps*math_default.eps*math_default.eps;if(S=e[0],M=e[1],N=t(S)<t(M)?S:M,r=M,j=r,s=S,C=t(M),P=C,x=t(S),b=x,C<b?b=C:j=S,k<=0||M<=S)return b;for(u=.5*(1+16*X)*k,N<=S||M<=N?m=.5*(S+M):m=N,y=t(m),d=3,a=s-m,h=9/11,y<b&&(j=m,b=y);;){if(n=s-r,l=m-r,O=M-s,E=x-y,w=x-C,_=n*n*E-a*a*w,c=_,f=2*(a*w-n*E),p=f,d<1e6||x<=b)for(;p*(_*(P-x)+O*p*(x-b+B))<O*u*_*(O*p-_)&&(o=s+_/p,v=t(o),v<b&&(j=o,b=v)),d=1611*d%1048576,p=1,_=(M-S)*1e-5*d,!(O<=_););else for(d=1611*d%1048576,p=1,_=(M-S)*1e-5*d;_<O;)p*(_*(P-x)+O*p*(x-b+B))<O*u*_*(O*p-_)&&(o=s+_/p,v=t(o),v<b&&(j=o,b=v)),d=1611*d%1048576,p=1,_=(M-S)*1e-5*d;for(_=u*a*n*l,g=Math.sqrt((x-b+B)/u),h=.5*(1+h),c=h*(c+2*_*g),p=p+.5*f,_=-.5*(a+(E+2.01*I)/(a*u)),_<g||a<0?_=s+g:_=s+_,0<c*p?o=s+c/p:o=_;o=Math.max(o,_),M<=o?(o=M,v=P):v=t(o),v<b&&(j=o,b=v),a=o-s,!(o<=_||(c=2*(x-v)/(k*a),(1+9*X)*a<=Math.abs(c))||.5*u*(a*a+c*c)<=x-b+(v-b)+2*B);)o=.5*(s+o),h=.9*h;if(M<=o)break;r=m,m=s,s=o,C=y,y=x,x=v}return[j,b]},polzeros:function(t,e,r,s,o){var a,n,l,h,d=!1,u=[],c=[],p=[],f=function(C,y,x){var v,P,E=C.length-1;if(x=x||!1,x)for(P=jxg_default.C.mult(E,C[E]),v=E-1;v>0;v--)P.mult(y),P.add(jxg_default.C.mult(C[v],v));else for(P=jxg_default.C.copy(C[E]),v=E-1;v>=0;v--)P.mult(y),P.add(C[v]);return P},_=function(C,y,x){var v,P,E=C.length-1;if(x=x||!1,x)for(P=jxg_default.C.mult(E,C[0]),v=E-1;v>0;v--)P.mult(y),P.add(jxg_default.C.mult(C[E-v],v));else for(P=jxg_default.C.copy(C[0]),v=E-1;v>=0;v--)P.mult(y),P.add(C[E-v]);return P},g=function(C,y){var x,v,P=C.length-1;for(v=C[P],x=P-1;x>=0;x--)v=v*y+C[x];return v},m=function(C){var y,x,v=C.length-1,P=Math.PI*2/v,E=Math.PI/v*.5,w,O,S=[];for(w=jxg_default.C.mult(-1,C[v-1]),w.div(jxg_default.C.mult(v,C[v])),O=jxg_default.C.div(f(C,w),C[v]),x=Math.pow(jxg_default.C.abs(O),1/v),x===0&&(x=1),y=0;y<v;y++)C=new jxg_default.Complex(x*Math.cos(P*y+E),x*Math.sin(P*y+E)),S[y]=jxg_default.C.add(w,C);return S},b=function(C,y,x,v){var P,E,w,O=[],S=[],M,N,j=0,k,B,I,X,J=v.length;for(E=0;E<J;E++)O.push(!1);for(E=0;E<C.length;E++)S.push(jxg_default.C.abs(C[E])*(4*E+1));for(P=0;P<x&&j<J;P++)for(E=0;E<J;E++)if(!O[E]){if(k=f(C,v[E]),N=jxg_default.C.abs(v[E]),jxg_default.C.abs(k)<y*g(S,N)){if(O[E]=!0,j++,j===J)break;continue}for(N>1?(M=jxg_default.C.div(1,v[E]),X=_(C,M,!0),X.div(_(C,M)),X.mult(M),k=jxg_default.C.sub(J,X),k=jxg_default.C.div(v[E],k)):k.div(f(C,v[E],!0)),B=new jxg_default.Complex(0),w=0;w<J;w++)w!==E&&(I=jxg_default.C.sub(v[E],v[w]),I=jxg_default.C.div(1,I),B.add(I));B.mult(k),B=jxg_default.C.sub(1,B),k.div(B),v[E].sub(k)}return P};for(r=r||Number.EPSILON,s=s||30,n=t.length,jxg_default.isNumber(e)&&e>=0&&e<n-1&&(n=e+1),a=0;a<n;a++)u.push(new jxg_default.Complex(t[a]));for(a=0;a<n;a++)if(u[a].real!==0||u[a].imaginary!==0){l=a;break}for(a=0;a<l;a++)c.push(new jxg_default.Complex(0));for(u=u.slice(l),n=u.length,a=n-1;a>=0&&!(u[a].real!==0||u[a].imaginary!==0);a--)u.pop();if(n=u.length,n===0)return[];if(o)for(a=0;a<n-1;a++)p.push(new jxg_default.Complex(o[a]));else p=m(u);if(h=b(u,r,s,p),p=c.concat(p),d)for(console.log("Iterations:",h),console.log("Roots:"),a=0;a<p.length;a++)console.log(a,p[a].toString(),jxg_default.C.abs(f(u,p[a])));return p.sort(function(C,y){return C.real<y.real?-1:C.real>y.real?1:0}),p},_RDPfindSplit:function(t,e,r,s){var o,a,n,l,h,d,u,c,p,f,_,g=math_default.eps*math_default.eps,m=1e4,b=0,C=e;if(r-e<2)return[-1,0];if(s?(n=t[e].usrCoords,l=t[r].usrCoords):(n=t[e].scrCoords,l=t[r].scrCoords),isNaN(n[1])||isNaN(n[2]))return[NaN,e];if(isNaN(l[1])||isNaN(l[2]))return[NaN,r];for(c=l[1]-n[1],p=l[2]-n[2],c=c===1/0?m:c,c=c===-1/0?-m:c,p=p===1/0?m:p,p=p===-1/0?-m:p,f=c*c+p*p,a=e+1;a<r;a++){if(h=s?t[a].usrCoords:t[a].scrCoords,isNaN(h[1])||isNaN(h[2]))return[NaN,a];d=h[1]-n[1],u=h[2]-n[2],d=d===1/0?m:d,u=u===1/0?m:u,d=d===-1/0?-m:d,u=u===-1/0?-m:u,f>g&&(_=(d*c+u*p)/f,_<0?_=0:_>1&&(_=1),d=d-_*c,u=u-_*p),o=d*d+u*u,o>b&&(b=o,C=a)}return[Math.sqrt(b),C]},_RDP:function(t,e,r,s,o,a){var n=this._RDPfindSplit(t,e,r,a),l=n[1],h;if(isNaN(n[0])){this._RDP(t,e,l-1,s,o,a),o.push(t[l]);do++l,l>r||t[l]===void 0||t[l].usrCoords===void 0?h=!0:h=isNaN(a?t[l].usrCoords[1]+t[l].usrCoords[2]:t[l].scrCoords[1]+t[l].scrCoords[2]);while(l<=r&&h);l<=r&&o.push(t[l]),this._RDP(t,l+1,r,s,o,a)}else n[0]>s?(this._RDP(t,e,l,s,o,a),this._RDP(t,l,r,s,o,a)):o.push(t[r])},RamerDouglasPeucker:function(t,e,r){var s=[],o=[],a,n,l,h=!0;for(l=t.length,a=0;h;){for(;a<l&&isNaN(t[a].scrCoords[1]+t[a].scrCoords[2]);)a+=1;for(n=a+1;n<l&&!isNaN(t[n].scrCoords[1]+t[n].scrCoords[2]);)n+=1;if(n--,a<l&&n>a&&(o=[t[a]],this._RDP(t,a,n,e,o,r),s=s.concat(o)),a>=l)break;n<l-1&&isNaN(t[n+1].scrCoords[1]+t[n+1].scrCoords[2])&&s.push(t[n+1]),a=n+1}return s},RamerDouglasPeuker:function(t,e){return jxg_default.deprecated("Numerics.RamerDouglasPeuker()","Numerics.RamerDouglasPeucker()"),this.RamerDouglasPeucker(t,e)},Visvalingam:function(t,e){var r,s,o,a,n=[],l=[],h=[],d,u,c,p,f;if(s=t.length,s<=2)return t;for(n[0]={used:!0,lft:null,node:null},d=0,r=1;r<s-1;r++)o=Math.abs(jxg_default.Math.Numerics.det([t[r-1].usrCoords,t[r].usrCoords,t[r+1].usrCoords])),isNaN(o)||(f={v:o,idx:r},l.push(f),n[r]={used:!0,lft:d,node:f},n[d].rt=r,d=r);for(n[s-1]={used:!0,rt:null,lft:d,node:null},n[d].rt=s-1,a=-1/0;l.length>e;)l.sort(function(_,g){return g.v-_.v}),r=l.pop().idx,n[r].used=!1,a=n[r].node.v,d=n[r].lft,u=n[r].rt,n[d].rt=u,n[u].lft=d,c=n[d].lft,c!==null&&(o=Math.abs(jxg_default.Math.Numerics.det([t[c].usrCoords,t[d].usrCoords,t[u].usrCoords])),n[d].node.v=o>=a?o:a),p=n[u].rt,p!==null&&(o=Math.abs(jxg_default.Math.Numerics.det([t[d].usrCoords,t[u].usrCoords,t[p].usrCoords])),n[u].node.v=o>=a?o:a);r=0,h=[t[r]];do r=n[r].rt,h.push(t[r]);while(n[r].rt!==null);return h}};var numerics_default=math_default.Numerics;math_default.Geometry={};jxg_default.extend(math_default.Geometry,{angle:function(t,e,r){var s,o,a,n,l=[],h=[],d=[];return jxg_default.deprecated("Geometry.angle()","Geometry.rad()"),t.coords?(l[0]=t.coords.usrCoords[1],l[1]=t.coords.usrCoords[2]):(l[0]=t[0],l[1]=t[1]),e.coords?(h[0]=e.coords.usrCoords[1],h[1]=e.coords.usrCoords[2]):(h[0]=e[0],h[1]=e[1]),r.coords?(d[0]=r.coords.usrCoords[1],d[1]=r.coords.usrCoords[2]):(d[0]=r[0],d[1]=r[1]),s=l[0]-h[0],o=l[1]-h[1],a=d[0]-h[0],n=d[1]-h[1],Math.atan2(s*n-o*a,s*a+o*n)},trueAngle:function(t,e,r){return this.rad(t,e,r)*57.29577951308232},rad:function(t,e,r){var s,o,a,n,l,h,d;return t.coords?(s=t.coords.usrCoords[1],o=t.coords.usrCoords[2]):(s=t[0],o=t[1]),e.coords?(a=e.coords.usrCoords[1],n=e.coords.usrCoords[2]):(a=e[0],n=e[1]),r.coords?(l=r.coords.usrCoords[1],h=r.coords.usrCoords[2]):(l=r[0],h=r[1]),d=Math.atan2(h-n,l-a)-Math.atan2(o-n,s-a),d<0&&(d+=6.283185307179586),d},angleBisector:function(t,e,r,s){var o,a,n,l=t.coords.usrCoords,h=e.coords.usrCoords,d=r.coords.usrCoords,u,c;return type_default.exists(s)||(s=t.board),h[0]===0?new coords_default(constants.COORDS_BY_USER,[1,(l[1]+d[1])*.5,(l[2]+d[2])*.5],s):(u=l[1]-h[1],c=l[2]-h[2],o=Math.atan2(c,u),u=d[1]-h[1],c=d[2]-h[2],a=Math.atan2(c,u),n=(o+a)*.5,o>a&&(n+=Math.PI),u=Math.cos(n)+h[1],c=Math.sin(n)+h[2],new coords_default(constants.COORDS_BY_USER,[1,u,c],s))},reflection:function(t,e,r){var s,o,a,n,l,h,d,u=e.coords.usrCoords,c=t.point1.coords.usrCoords,p=t.point2.coords.usrCoords;return type_default.exists(r)||(r=e.board),l=p[1]-c[1],h=p[2]-c[2],s=u[1]-c[1],o=u[2]-c[2],d=(l*o-h*s)/(l*l+h*h),a=u[1]+2*d*h,n=u[2]-2*d*l,new coords_default(constants.COORDS_BY_USER,[a,n],r)},rotation:function(t,e,r,s){var o,a,n,l,h,d,u=e.coords.usrCoords,c=t.coords.usrCoords;return type_default.exists(s)||(s=e.board),o=u[1]-c[1],a=u[2]-c[2],n=Math.cos(r),l=Math.sin(r),h=o*n-a*l+c[1],d=o*l+a*n+c[2],new coords_default(constants.COORDS_BY_USER,[h,d],s)},perpendicular:function(t,e,r){var s,o,a,n,l,h=t.point1.coords.usrCoords,d=t.point2.coords.usrCoords,u=e.coords.usrCoords;return type_default.exists(r)||(r=e.board),e===t.point1?(s=h[1]+d[2]-h[2],o=h[2]-d[1]+h[1],l=h[0]*d[0],Math.abs(l)<math_default.eps&&(s=d[2],o=-d[1]),n=[l,s,o],a=!0):e===t.point2?(s=d[1]+h[2]-d[2],o=d[2]-h[1]+d[1],l=h[0]*d[0],Math.abs(l)<math_default.eps&&(s=h[2],o=-h[1]),n=[l,s,o],a=!1):Math.abs(math_default.innerProduct(u,t.stdform,3))<math_default.eps?(s=u[1]+d[2]-u[2],o=u[2]-d[1]+u[1],l=d[0],Math.abs(l)<math_default.eps&&(s=d[2],o=-d[1]),a=!0,Math.abs(l)>math_default.eps&&Math.abs(s-u[1])<math_default.eps&&Math.abs(o-u[2])<math_default.eps&&(s=u[1]+h[2]-u[2],o=u[2]-h[1]+u[1],a=!1),n=[l,s,o]):(n=[0,t.stdform[1],t.stdform[2]],n=math_default.crossProduct(n,u),n=math_default.crossProduct(n,t.stdform),a=!0),[new coords_default(constants.COORDS_BY_USER,n,r),a]},circumcenterMidpoint:function(){jxg_default.deprecated("Geometry.circumcenterMidpoint()","Geometry.circumcenter()"),this.circumcenter.apply(this,arguments)},circumcenter:function(t,e,r,s){var o,a,n,l,h=t.coords.usrCoords,d=e.coords.usrCoords,u=r.coords.usrCoords;return type_default.exists(s)||(s=t.board),o=[d[0]-h[0],-d[2]+h[2],d[1]-h[1]],a=[(h[0]+d[0])*.5,(h[1]+d[1])*.5,(h[2]+d[2])*.5],n=math_default.crossProduct(o,a),o=[u[0]-d[0],-u[2]+d[2],u[1]-d[1]],a=[(d[0]+u[0])*.5,(d[1]+u[1])*.5,(d[2]+u[2])*.5],l=math_default.crossProduct(o,a),new coords_default(constants.COORDS_BY_USER,math_default.crossProduct(n,l),s)},distance:function(t,e,r){var s,o=0;for(r||(r=Math.min(t.length,e.length)),s=0;s<r;s++)o+=(t[s]-e[s])*(t[s]-e[s]);return Math.sqrt(o)},affineDistance:function(t,e,r){var s=this.distance(t,e,r);return s>math_default.eps&&(Math.abs(t[0])<math_default.eps||Math.abs(e[0])<math_default.eps)?1/0:s},affineRatio:function(t,e,r){var s=0,o;return type_default.exists(t.usrCoords)&&(t=t.usrCoords),type_default.exists(e.usrCoords)&&(e=e.usrCoords),type_default.exists(r.usrCoords)&&(r=r.usrCoords),o=e[1]-t[1],Math.abs(o)>math_default.eps?s=(r[1]-t[1])/o:s=(r[2]-t[2])/(e[2]-t[2]),s},sortVertices:function(t){for(var e,r=expect_default.each(t,expect_default.coordsArray),s=r.length,o=null;r[0][0]===r[s-1][0]&&r[0][1]===r[s-1][1]&&r[0][2]===r[s-1][2];)o=r.pop(),s--;return e=r[0],r.sort(function(a,n){return(a[2]===e[2]&&a[1]===e[1]?-1/0:Math.atan2(a[2]-e[2],a[1]-e[1]))-(n[2]===e[2]&&n[1]===e[1]?-1/0:Math.atan2(n[2]-e[2],n[1]-e[1]))}),o!==null&&r.push(o),r},signedTriangle:function(t,e,r){var s=expect_default.coordsArray(t),o=expect_default.coordsArray(e),a=expect_default.coordsArray(r);return .5*((o[1]-s[1])*(a[2]-s[2])-(o[2]-s[2])*(a[1]-s[1]))},signedPolygon:function(t,e){var r,s,o=0,a=expect_default.each(t,expect_default.coordsArray);for(e===void 0&&(e=!0),e?a.unshift(a[a.length-1]):a=this.sortVertices(a),s=a.length,r=1;r<s;r++)o+=a[r-1][1]*a[r][2]-a[r][1]*a[r-1][2];return .5*o},GrahamScan:function(t){var e,r,s,o,a,n,l,h,d,u,c,p,f,_,g,m,b,C,y,x,v,P,E=math_default.eps*math_default.eps,w=this,O=[],S=[],M=expect_default.each(t,expect_default.coordsArray),N,j=1024;if(N=M.length,N===0)return[];if(N>j)for(a=M[0][1],l=a,n=M[0][2],h=n,u=M[0][1]-M[0][2],p=u,d=M[0][1]+M[0][2],c=d,f=0,_=0,g=0,m=0,C=0,x=0,b=0,y=0,e=1;e<N;e++)v=M[e][1],v<a?(a=v,f=e):v>l&&(l=v,_=e),v=M[e][2],v<n?(n=v,g=e):v>h&&(h=v,m=e),v=M[e][1]-M[e][2],v<u?(u=v,C=e):v>p&&(p=v,x=e),v=M[e][1]+M[e][2],v<d?(d=v,b=e):v>c&&(c=v,y=e);for(e=0;e<N;e++)P=M[e],(N<=j||[f,_,g,m,b,C,y,x].indexOf(e)>=0||f!==C&&this.signedTriangle(M[f],M[C],P)>=-E||C!==m&&this.signedTriangle(M[C],M[m],P)>=-E||m!==y&&this.signedTriangle(M[m],M[y],P)>=-E||y!==_&&this.signedTriangle(M[y],M[_],P)>=-E||_!==x&&this.signedTriangle(M[_],M[x],P)>=-E||x!==g&&this.signedTriangle(M[x],M[g],P)>=-E||g!==b&&this.signedTriangle(M[g],M[b],P)>=-E||b!==f&&this.signedTriangle(M[b],M[f],P)>=-E)&&O.push({i:e,c:P});for(N=O.length,o=0,a=O[0].c[1],n=O[0].c[2],e=1;e<N;e++)(O[e].c[2]<n||O[e].c[2]===n&&O[e].c[1]<a)&&(a=O[e].c[1],n=O[e].c[2],o=e);for(O=type_default.swap(O,o,0),s=O[0].c,O.sort(function(k,B){var I=k.c,X=B.c,J=w.signedTriangle(s,I,X);return J===0?math_default.hypot(I[1]-s[1],I[2]-s[2])-math_default.hypot(X[1]-s[1],X[2]-s[2]):-J}),r=0,e=0;e<N;e++){for(;r>1&&this.signedTriangle(S[r-2].c,S[r-1].c,O[e].c)<=0;)S.pop(),r--;S.push(O[e]),r++}return S},convexHull:function(t,e){var r,s,o=[];for(s=this.GrahamScan(t),r=0;r<s.length;r++)e?o.push(s[r].c):o.push(t[s[r].i]);return o},isConvex:function(t){var e,r,s,o=math_default.eps*math_default.eps,a,n,l,h,d,u,c,p,f=0;if(type_default.isArray(t)?e=expect_default.each(t,expect_default.coordsArray):type_default.exists(t.type)&&t.type===constants.OBJECT_TYPE_POLYGON&&(e=expect_default.each(t.vertices,expect_default.coordsArray)),r=e.length,r===0||r<3)return!0;for(p=null,a=e[r-2][1],n=e[r-2][2],h=e[r-1][1],d=e[r-1][2],u=Math.atan2(d-n,h-a),s=0;s<r;s++)if(a=h,n=d,l=u,h=e[s][1],d=e[s][2],!(a===h&&n===d)){if(u=Math.atan2(d-n,h-a),c=u-l,c<=-Math.PI?c+=2*Math.PI:c>Math.PI&&(c-=2*Math.PI),p===null){if(c===0)continue;p=c>0?1:-1}else if(p*c<-o)return!1;f+=c}return Math.abs(f/(2*Math.PI))-1<o},calcStraight:function(t,e,r,s){var o,a,n,l,h,d,u,c,p,f;type_default.exists(s)||(s=10),d=t.evalVisProp("straightfirst"),u=t.evalVisProp("straightlast"),Math.abs(e.scrCoords[0])<math_default.eps&&(d=!0),Math.abs(r.scrCoords[0])<math_default.eps&&(u=!0),(d||u)&&(c=[],c[0]=t.stdform[0]-t.stdform[1]*t.board.origin.scrCoords[1]/t.board.unitX+t.stdform[2]*t.board.origin.scrCoords[2]/t.board.unitY,c[1]=t.stdform[1]/t.board.unitX,c[2]=-t.stdform[2]/t.board.unitY,!isNaN(c[0]+c[1]+c[2])&&(o=!1,a=!1,o=!d&&Math.abs(e.usrCoords[0])>=math_default.eps&&e.scrCoords[1]>=0&&e.scrCoords[1]<=t.board.canvasWidth&&e.scrCoords[2]>=0&&e.scrCoords[2]<=t.board.canvasHeight,a=!u&&Math.abs(r.usrCoords[0])>=math_default.eps&&r.scrCoords[1]>=0&&r.scrCoords[1]<=t.board.canvasWidth&&r.scrCoords[2]>=0&&r.scrCoords[2]<=t.board.canvasHeight,n=this.meetLineBoard(c,t.board,s),l=n[0],h=n[1],(o||a||(d||!u||this.isSameDirection(e,r,l)||this.isSameDirection(e,r,h))&&(!d||u||this.isSameDirection(r,e,l)||this.isSameDirection(r,e,h)))&&(o?a||(this.isSameDir(e,r,l,h)?f=h:f=l):a?this.isSameDir(e,r,l,h)?p=l:p=h:this.isSameDir(e,r,l,h)?(p=l,f=h):(f=l,p=h),p&&e.setCoordinates(constants.COORDS_BY_USER,p.usrCoords),f&&r.setCoordinates(constants.COORDS_BY_USER,f.usrCoords))))},calcLineDelimitingPoints:function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f=!1,_=!1;h=t.evalVisProp("straightfirst"),d=t.evalVisProp("straightlast"),Math.abs(e.scrCoords[0])<math_default.eps&&(h=!0),Math.abs(r.scrCoords[0])<math_default.eps&&(d=!0),u=[],u[0]=t.stdform[0]-t.stdform[1]*t.board.origin.scrCoords[1]/t.board.unitX+t.stdform[2]*t.board.origin.scrCoords[2]/t.board.unitY,u[1]=t.stdform[1]/t.board.unitX,u[2]=-t.stdform[2]/t.board.unitY,!isNaN(u[0]+u[1]+u[2])&&(f=!h,_=!d,o=t.board.getBoundingBox(),a=t.getSlope(),a>=0?(n=this.projectPointToLine({coords:{usrCoords:[1,o[2],o[1]]}},t,t.board),l=this.projectPointToLine({coords:{usrCoords:[1,o[0],o[3]]}},t,t.board)):(n=this.projectPointToLine({coords:{usrCoords:[1,o[0],o[1]]}},t,t.board),l=this.projectPointToLine({coords:{usrCoords:[1,o[2],o[3]]}},t,t.board)),!(!f&&!_&&(!h&&!d&&(s=e.distance(constants.COORDS_BY_USER,r),Math.abs(e.distance(constants.COORDS_BY_USER,n)+n.distance(constants.COORDS_BY_USER,r)-s)>math_default.eps||Math.abs(e.distance(constants.COORDS_BY_USER,l)+l.distance(constants.COORDS_BY_USER,r)-s)>math_default.eps)||!h&&d&&!this.isSameDirection(e,r,n)&&!this.isSameDirection(e,r,l)||h&&!d&&!this.isSameDirection(r,e,n)&&!this.isSameDirection(r,e,l)))&&(f?_||(this.isSameDir(e,r,n,l)?p=l:p=n):_?this.isSameDir(e,r,n,l)?c=n:c=l:this.isSameDir(e,r,n,l)?(c=n,p=l):(p=n,c=l),c&&e.setCoordinates(constants.COORDS_BY_USER,c.usrCoords),p&&r.setCoordinates(constants.COORDS_BY_USER,p.usrCoords)))},calcLabelQuadrant:function(t){var e;return t<0&&(t+=2*Math.PI),e=Math.floor((t+Math.PI/8)/(Math.PI/4))%8,["rt","urt","top","ulft","lft","llft","bot","lrt"][e]},isSameDir:function(t,e,r,s){var o=e.usrCoords[1]-t.usrCoords[1],a=e.usrCoords[2]-t.usrCoords[2],n=s.usrCoords[1]-r.usrCoords[1],l=s.usrCoords[2]-r.usrCoords[2];return Math.abs(e.usrCoords[0])<math_default.eps&&(o=e.usrCoords[1],a=e.usrCoords[2]),Math.abs(t.usrCoords[0])<math_default.eps&&(o=-t.usrCoords[1],a=-t.usrCoords[2]),o*n+a*l>=0},isSameDirection:function(t,e,r){var s,o,a,n,l=!1;return s=e.usrCoords[1]-t.usrCoords[1],o=e.usrCoords[2]-t.usrCoords[2],a=r.usrCoords[1]-t.usrCoords[1],n=r.usrCoords[2]-t.usrCoords[2],Math.abs(s)<math_default.eps&&(s=0),Math.abs(o)<math_default.eps&&(o=0),Math.abs(a)<math_default.eps&&(a=0),Math.abs(n)<math_default.eps&&(n=0),(s>=0&&a>=0||s<=0&&a<=0)&&(l=o>=0&&n>=0||o<=0&&n<=0),l},det3p:function(t,e,r){var s,o,a;return type_default.isPoint(t)?s=t.Coords(!0):s=t,type_default.isPoint(e)?o=e.Coords(!0):o=e,type_default.isPoint(r)?a=r.Coords(!0):a=r,(s[1]-a[1])*(o[2]-a[2])-(o[1]-a[1])*(s[2]-a[2])},windingNumber:function(t,e,r){var s=0,o=e.length,a=t[1],n=t[2],l,h,d,u,c,p,f=0;if(o===0)return 0;if(r=r||!1,r&&(f=1),isNaN(a)||isNaN(n)||(type_default.exists(e[0].coords)?(l=e[0].coords,h=e[o-1].coords):(l=e[0],h=e[o-1]),l.usrCoords[1]===a&&l.usrCoords[2]===n))return 1;for(p=0;p<o-f;p++)if(type_default.exists(e[p].coords)?(h=e[p].coords.usrCoords,d=e[(p+1)%o].coords.usrCoords):(h=e[p].usrCoords,d=e[(p+1)%o].usrCoords),!(h[0]===0||d[0]===0||isNaN(h[1])||isNaN(d[1])||isNaN(h[2])||isNaN(d[2]))){if(d[2]===n){if(d[1]===a)return 1;if(h[2]===n&&d[1]>a==h[1]<a)return 0}if(h[2]<n!=d[2]<n)if(c=2*(d[2]>h[2]?1:0)-1,h[1]>=a)if(d[1]>a)s+=c;else{if(u=this.det3p(h,d,t),u===0)return 0;u>0+math_default.eps==d[2]>h[2]&&(s+=c)}else d[1]>a&&(u=this.det3p(h,d,t),u>0+math_default.eps==d[2]>h[2]&&(s+=c))}return s},pnpoly:function(t,e,r,s,o){var a,n,l,h,d,u,c,p,f=r,_=!1;for(s===constants.COORDS_BY_USER?(p=new coords_default(constants.COORDS_BY_USER,[t,e],o),u=p.scrCoords[1],c=p.scrCoords[2]):(u=t,c=e),d=r.length,a=0,n=d-2;a<d-1;n=a++)l=type_default.exists(f[a].coords)?f[a].coords:f[a],h=type_default.exists(f[n].coords)?f[n].coords:f[n],l.scrCoords[2]>c!=h.scrCoords[2]>c&&u<(h.scrCoords[1]-l.scrCoords[1])*(c-l.scrCoords[2])/(h.scrCoords[2]-l.scrCoords[2])+l.scrCoords[1]&&(_=!_);return _},intersectionFunction:function(t,e,r,s,o,a){var n,l=this,h=!1,d=!1;return h=e.elementClass===constants.OBJECT_CLASS_CURVE&&(e.type===constants.OBJECT_TYPE_ARC||e.type===constants.OBJECT_TYPE_SECTOR),d=r.elementClass===constants.OBJECT_CLASS_CURVE&&(r.type===constants.OBJECT_TYPE_ARC||r.type===constants.OBJECT_TYPE_SECTOR),(e.elementClass===constants.OBJECT_CLASS_CURVE||r.elementClass===constants.OBJECT_CLASS_CURVE)&&(e.elementClass===constants.OBJECT_CLASS_CURVE||e.elementClass===constants.OBJECT_CLASS_CIRCLE)&&(r.elementClass===constants.OBJECT_CLASS_CURVE||r.elementClass===constants.OBJECT_CLASS_CIRCLE)?n=function(){return l.meetCurveCurve(e,r,s,o,e.board)}:e.elementClass===constants.OBJECT_CLASS_CURVE&&!h&&r.elementClass===constants.OBJECT_CLASS_LINE||r.elementClass===constants.OBJECT_CLASS_CURVE&&!d&&e.elementClass===constants.OBJECT_CLASS_LINE?n=function(){return l.meetCurveLine(e,r,s,e.board,type_default.evaluate(a))}:e.type===constants.OBJECT_TYPE_POLYGON||r.type===constants.OBJECT_TYPE_POLYGON?e.elementClass===constants.OBJECT_CLASS_LINE?n=function(){var u=e.evalVisProp("straightfirst"),c=e.evalVisProp("straightlast"),p=r.evalVisProp("straightfirst"),f=r.evalVisProp("straightlast"),_=!type_default.evaluate(a)&&(!u||!c||!p||!f);return l.meetPolygonLine(r,e,s,e.board,_)}:r.elementClass===constants.OBJECT_CLASS_LINE?n=function(){var u=e.evalVisProp("straightfirst"),c=e.evalVisProp("straightlast"),p=r.evalVisProp("straightfirst"),f=r.evalVisProp("straightlast"),_=!type_default.evaluate(a)&&(!u||!c||!p||!f);return l.meetPolygonLine(e,r,s,e.board,_)}:n=function(){return l.meetPathPath(e,r,s,e.board)}:e.elementClass===constants.OBJECT_CLASS_LINE&&r.elementClass===constants.OBJECT_CLASS_LINE?n=function(){var u,c,p=e.evalVisProp("straightfirst"),f=e.evalVisProp("straightlast"),_=r.evalVisProp("straightfirst"),g=r.evalVisProp("straightlast");return!type_default.evaluate(a)&&(!p||!f||!_||!g)?(u=l.meetSegmentSegment(e.point1.coords.usrCoords,e.point2.coords.usrCoords,r.point1.coords.usrCoords,r.point2.coords.usrCoords),!p&&u[1]<0||!f&&u[1]>1||!_&&u[2]<0||!g&&u[2]>1?c=[0,NaN,NaN]:c=u[0],new coords_default(constants.COORDS_BY_USER,c,e.board)):l.meet(e.stdform,r.stdform,s,e.board)}:n=function(){var u=l.meet(e.stdform,r.stdform,s,e.board),c=!0,p,f,_;return type_default.evaluate(a)?u:e.elementClass===constants.OBJECT_CLASS_LINE&&(p=e.evalVisProp("straightfirst"),f=e.evalVisProp("straightlast"),(!p||!f)&&(_=l.affineRatio(e.point1.coords,e.point2.coords,u),!f&&_>1+math_default.eps||!p&&_<0-math_default.eps))?new coords_default(jxg_default.COORDS_BY_USER,[0,NaN,NaN],e.board):r.elementClass===constants.OBJECT_CLASS_LINE&&(p=r.evalVisProp("straightfirst"),f=r.evalVisProp("straightlast"),(!p||!f)&&(_=l.affineRatio(r.point1.coords,r.point2.coords,u),!f&&_>1+math_default.eps||!p&&_<0-math_default.eps))?new coords_default(jxg_default.COORDS_BY_USER,[0,NaN,NaN],e.board):h&&(c=l.coordsOnArc(e,u),c&&d&&(c=l.coordsOnArc(r,u)),!c)?new coords_default(jxg_default.COORDS_BY_USER,[0,NaN,NaN],e.board):u},n},otherIntersectionFunction:function(t,e,r,s){var o,a,n,l,h=this;return n=t[0],l=t[1],a=n.board,o=function(){var d,u,c,p,f,_=e.length,g=type_default.evaluate(s);for(d=_;d>=0;d--)if(n.elementClass===constants.OBJECT_CLASS_CIRCLE&&[constants.OBJECT_CLASS_CIRCLE,constants.OBJECT_CLASS_LINE].indexOf(l.elementClass)>=0?c=h.meet(n.stdform,l.stdform,d,a):n.elementClass===constants.OBJECT_CLASS_CURVE&&[constants.OBJECT_CLASS_CURVE,constants.OBJECT_CLASS_CIRCLE].indexOf(l.elementClass)>=0?c=h.meetCurveCurve(n,l,d,0,a):n.elementClass===constants.OBJECT_CLASS_CURVE&&l.elementClass===constants.OBJECT_CLASS_LINE&&(type_default.exists(n.dataX)?c=jxg_default.Math.Geometry.meetCurveLine(n,l,d,n.board,type_default.evaluate(r)):c=jxg_default.Math.Geometry.meetCurveLineContinuous(n,l,d,n.board)),c!==void 0){for(f=!1,u=0;!f&&u<_;u++)type_default.exists(c)&&type_default.exists(c.distance)&&(p=c.distance(jxg_default.COORDS_BY_USER,e[u].coords),p<g&&(f=!0));if(!f)return c}return c},o},coordsOnArc:function(t,e){var r=this.rad(t.radiuspoint,t.center,e.usrCoords.slice(1)),s=0,o=this.rad(t.radiuspoint,t.center,t.anglepoint),a=t.evalVisProp("selection");return t.evalVisProp("orientation")==="clockwise"&&(r=2*Math.PI-r,o=2*Math.PI-o),(a==="minor"&&o>Math.PI||a==="major"&&o<Math.PI)&&(s=o,o=2*Math.PI),!(r<s||r>o)},meet:function(t,e,r,s){var o,a=math_default.eps;return Math.abs(t[3])<a&&Math.abs(e[3])<a?o=this.meetLineLine(t,e,r,s):Math.abs(t[3])>=a&&Math.abs(e[3])<a?o=this.meetLineCircle(e,t,r,s):Math.abs(t[3])<a&&Math.abs(e[3])>=a?o=this.meetLineCircle(t,e,r,s):o=this.meetCircleCircle(t,e,r,s),o},meetLineBoard:function(t,e,r){var s=[],o,a,n,l;for(type_default.exists(r)||(r=0),s[0]=math_default.crossProduct(t,[r,0,1]),s[1]=math_default.crossProduct(t,[r,1,0]),s[2]=math_default.crossProduct(t,[-r-e.canvasHeight,0,1]),s[3]=math_default.crossProduct(t,[-r-e.canvasWidth,1,0]),n=0;n<4;n++)if(Math.abs(s[n][0])>math_default.eps){for(l=2;l>0;l--)s[n][l]/=s[n][0];s[n][0]=1}return Math.abs(s[1][0])<math_default.eps?(o=s[0],a=s[2]):Math.abs(s[0][0])<math_default.eps?(o=s[1],a=s[3]):s[1][2]<0?(o=s[0],s[3][2]>e.canvasHeight?a=s[2]:a=s[3]):s[1][2]>e.canvasHeight?(o=s[2],s[3][2]<0?a=s[0]:a=s[3]):(o=s[1],s[3][2]<0?a=s[0]:s[3][2]>e.canvasHeight?a=s[2]:a=s[3]),[new coords_default(constants.COORDS_BY_SCREEN,o.slice(1),e),new coords_default(constants.COORDS_BY_SCREEN,a.slice(1),e)]},meetLineLine:function(t,e,r,s){var o=isNaN(t[5]+e[5])?[0,0,0]:math_default.crossProduct(t,e);return Math.abs(o[0])<1e-14&&(o[0]=0),new coords_default(constants.COORDS_BY_USER,o,s)},meetLineCircle:function(t,e,r,s){var o,a,n,l,h,d,u,c,p,f;return e[4]<math_default.eps?Math.abs(math_default.innerProduct([1,e[6],e[7]],t,3))<math_default.eps?new coords_default(constants.COORDS_BY_USER,e.slice(6,8),s):new coords_default(constants.COORDS_BY_USER,[NaN,NaN],s):(n=e[0],a=e.slice(1,3),o=e[3],l=t[0],h=t.slice(1,3),d=o,u=a[0]*h[1]-a[1]*h[0],c=o*l*l-(a[0]*h[0]+a[1]*h[1])*l+n,p=u*u-4*d*c,p>-math_default.eps*math_default.eps?(p=Math.sqrt(Math.abs(p)),f=[(-u+p)/(2*d),(-u-p)/(2*d)],type_default.evaluate(r)===0?new coords_default(constants.COORDS_BY_USER,[-f[0]*-h[1]-l*h[0],-f[0]*h[0]-l*h[1]],s):new coords_default(constants.COORDS_BY_USER,[-f[1]*-h[1]-l*h[0],-f[1]*h[0]-l*h[1]],s)):new coords_default(constants.COORDS_BY_USER,[0,0,0],s))},meetCircleCircle:function(t,e,r,s){var o;return t[4]<math_default.eps?Math.abs(this.distance(t.slice(6,8),e.slice(6,8))-e[5])<math_default.eps?new coords_default(constants.COORDS_BY_USER,t.slice(6,8),s):new coords_default(constants.COORDS_BY_USER,[0,0,0],s):e[4]<math_default.eps?Math.abs(this.distance(e.slice(6,8),t.slice(6,8))-t[5])<math_default.eps?new coords_default(constants.COORDS_BY_USER,e.slice(6,8),s):new coords_default(constants.COORDS_BY_USER,[0,0,0],s):(o=[e[3]*t[0]-t[3]*e[0],e[3]*t[1]-t[3]*e[1],e[3]*t[2]-t[3]*e[2],0,1,1/0,1/0,1/0],o=math_default.normalize(o),this.meetLineCircle(o,t,r,s))},meetCurveCurveDiscrete:function(t,e,r,s){var o,a=type_default.evaluate(r);return t.bezierDegree===3||e.bezierDegree===3?o=this.meetBezierCurveRedBlueSegments(t,e,a):o=this.meetCurveRedBlueSegments(t,e,a),new coords_default(constants.COORDS_BY_USER,o,s)},meetCurveCurveNewton:function(t,e,r,s,o){var a,n,l,h,d=(Math.sqrt(5)-1)*.5,u=.85,c=math_default.eps*math_default.eps*math_default.eps,p=math_default.eps*math_default.eps,f=t.maxX(),_=t.minX(),g=e.maxX(),m=e.minX(),b=function(y,x){var v=t.Ft(y[0]),P=e.Ft(y[1]);return[v[1]-P[1],v[2]-P[2]]},C=function(y,x){var v=math_default.eps,P=2*v,E=t.Ft(y[0]-v),w=t.Ft(y[0]+v),O=e.Ft(y[1]-v),S=e.Ft(y[1]+v);return[[(w[1]-E[1])/P,-(S[1]-O[1])/P],[(w[2]-E[2])/P,-(S[2]-O[2])/P]]};return a=r[0]+(r[1]-r[0])*(1-d),n=s[0]+(s[1]-s[0])*(1-d),h=numerics_default.generalizedDampedNewton(b,C,2,[a,n],u,c,40),a=h[0][0],n=h[0][1],l=t.Ft(a),a<r[0]-math_default.eps||a>r[1]+math_default.eps||n<s[0]-math_default.eps||n>s[1]+math_default.eps||o&&(a<_-p||a>f+p||n<m-p||n>g+p)?[l,a,n,1e4]:[l,a,n,h[1]]},_meetCurveCurveIterative:function(t,e,r,s,o,a){var n,l,h,d,u,c,p=math_default.eps*100,f,_,g=20,m,b,C=[];if(h=r[0],u=r[1],d=s[0],c=s[1],u<h||c<d)return[];for(m=(u-h)/g,b=(c-d)/g,f=0;f<g;f++)for(_=0;_<g;_++)if(n=this.meetCurveCurveNewton(t,e,[h+f*m,h+(f+1)*m],[d+_*b,d+(_+1)*b],a),n[3]<math_default.eps&&(l=n[1],C=C.concat([l]),C=type_default.toUniqueArrayFloat(C,p),C.length>o))return C;return C},meetCurveCurve:function(t,e,r,s,o,a,n){var l,h,d,u,c,p,f=type_default.evaluate(r);if(o=o||t.board,a==="segment"||type_default.exists(t.dataX)||type_default.exists(e.dataX))return this.meetCurveCurveDiscrete(t,e,f,o);if(type_default.exists(a)&&a==="newton"&&f<0||parseInt(f)!==f)return l=numerics_default.generalizedNewton(t,e,f,s),new coords_default(constants.COORDS_BY_USER,l,o);if(d=t.minX(),u=t.maxX(),c=e.minX(),p=e.maxX(),h=this._meetCurveCurveIterative(t,e,[d,u],[c,p],f,n),h.length>f)l=t.Ft(h[f]);else return[0,NaN,NaN];return new coords_default(constants.COORDS_BY_USER,l,o)},meetCurveLine:function(t,e,r,s,o){var a=[0,NaN,NaN],n,l;return type_default.exists(s)||(s=t.board),t.elementClass===constants.OBJECT_CLASS_CURVE?(n=t,l=e):(n=e,l=t),type_default.exists(n.dataX)?a=this.meetCurveLineDiscrete(n,l,r,s,!o):a=this.meetCurveLineContinuous(n,l,r,s,!o),a},meetCurveLineContinuous:function(t,e,r,s,o){var a,n,l,h,d,u,c,p=math_default.eps,f=math_default.eps,_,g,m,b,C,y,x;for(h=this.meetCurveLineDiscrete(t,e,r,s,o),d=h.usrCoords[1],u=h.usrCoords[2],a=function(v){var P,E;return v>t.maxX()||v<t.minX()?1/0:(P=t.X(v)-d,E=t.Y(v)-u,P*P+E*E)},n=function(v){var P=e.stdform[0]+e.stdform[1]*t.X(v)+e.stdform[2]*t.Y(v);return P*P},_=50,g=(t.maxX()-t.minX())/_,m=t.minX(),C=1e-4,b=NaN,y=0;y<_&&(l=numerics_default.root(a,[Math.max(m,t.minX()),Math.min(m+g,t.maxX())]),x=Math.abs(a(l)),!(x<=C&&(C=x,b=l,C<p)));y++)m+=g;return l=b,l=numerics_default.root(n,[Math.max(l-g,t.minX()),Math.min(l+g,t.maxX())]),x=n(l),isNaN(x)||Math.abs(x)>f?c=0:c=1,new coords_default(constants.COORDS_BY_USER,[c,t.X(l),t.Y(l)],s)},meetCurveLineDiscrete:function(t,e,r,s,o){var a,n,l=type_default.evaluate(r),h,d,u,c,p=e.point1.coords.usrCoords,f=e.point2.coords.usrCoords,_,g,m=0,b=t.numberPoints,C=e.evalVisProp("straightfirst"),y=e.evalVisProp("straightlast");for(c=new coords_default(constants.COORDS_BY_USER,[0,NaN,NaN],s),p[0]===0?p=[1,f[1]+e.stdform[2],f[2]-e.stdform[1]]:f[0]===0&&(f=[1,p[1]+e.stdform[2],p[2]-e.stdform[1]]),d=t.points[0].usrCoords,a=1;a<b;a+=t.bezierDegree)if(h=d.slice(0),d=t.points[a].usrCoords,_=this.distance(h,d),_>math_default.eps){for(t.bezierDegree===3?g=this.meetBeziersegmentBeziersegment([t.points[a-1].usrCoords.slice(1),t.points[a].usrCoords.slice(1),t.points[a+1].usrCoords.slice(1),t.points[a+2].usrCoords.slice(1)],[p.slice(1),f.slice(1)],o):g=[this.meetSegmentSegment(h,d,p,f)],n=0;n<g.length;n++)if(u=g[n],0<=u[1]&&u[1]<=1){if(m===l)return o&&(!C&&u[2]<0||!y&&u[2]>1)||(c=new coords_default(constants.COORDS_BY_USER,u[0],s)),c;m+=1}}return c},meetCurveRedBlueSegments:function(t,e,r){var s,o,a=type_default.evaluate(r),n,l,h,d,u,c,p,f=0,_=e.numberPoints,g=t.numberPoints;if(_<=1||g<=1)return[0,NaN,NaN];for(s=1;s<g;s++)for(n=t.points[s-1].usrCoords,l=t.points[s].usrCoords,c=Math.min(n[1],l[1]),p=Math.max(n[1],l[1]),d=e.points[0].usrCoords,o=1;o<_;o++)if(h=d,d=e.points[o].usrCoords,Math.min(h[1],d[1])<p&&Math.max(h[1],d[1])>c&&(u=this.meetSegmentSegment(n,l,h,d),u[1]>=0&&u[2]>=0&&(u[1]<1&&u[2]<1||s===g-1&&u[1]===1||o===_-1&&u[2]===1))){if(f===a)return u[0];f++}return[0,NaN,NaN]},meetSegmentSegment:function(t,e,r,s){var o,a,n,l,h=math_default.crossProduct(t,e),d=math_default.crossProduct(r,s),u=math_default.crossProduct(h,d);return Math.abs(u[0])<math_default.eps?[u,1/0,1/0]:(u[1]/=u[0],u[2]/=u[0],u[0]/=u[0],n=Math.abs(e[1]-e[0]*t[1])<math_default.eps?2:1,l=t[n]/t[0],o=(u[n]-l)/(e[0]!==0?e[n]/e[0]-l:e[n]),n=Math.abs(s[1]-s[0]*r[1])<math_default.eps?2:1,l=r[n]/r[0],a=(u[n]-l)/(s[0]!==0?s[n]/s[0]-l:s[n]),[u,o,a])},meetPathPath:function(t,e,r,s){var o,a,n,l,h=type_default.evaluate(r);return o=jxg_default.Math.Clip._getPath(t,s),n=o.length,n>0&&this.distance(o[0].coords.usrCoords,o[n-1].coords.usrCoords,3)<math_default.eps&&o.pop(),a=jxg_default.Math.Clip._getPath(e,s),n=a.length,n>0&&this.distance(a[0].coords.usrCoords,a[n-1].coords.usrCoords,3)<math_default.eps*math_default.eps&&a.pop(),r<0||jxg_default.Math.Clip.isEmptyCase(o,a,"intersection")?new coords_default(constants.COORDS_BY_USER,[0,0,0],s):(jxg_default.Math.Clip.makeDoublyLinkedList(o),jxg_default.Math.Clip.makeDoublyLinkedList(a),l=jxg_default.Math.Clip.findIntersections(o,a,s)[0],h<l.length?l[h].coords:new coords_default(constants.COORDS_BY_USER,[0,0,0],s))},meetPolygonLine:function(t,e,r,s,o){var a,n=type_default.evaluate(r),l,h,d=[0,0,0],u=t.borders.length,c=[];for(a=0;a<u;a++)h=t.borders[a],l=this.meetSegmentSegment(h.point1.coords.usrCoords,h.point2.coords.usrCoords,e.point1.coords.usrCoords,e.point2.coords.usrCoords),(!o||l[2]>=0&&l[2]<1)&&l[1]>=0&&l[1]<1&&c.push(l[0]);return n>=0&&n<c.length&&(d=c[n]),new coords_default(constants.COORDS_BY_USER,d,s)},_bezierSplit:function(t){var e=[(t[0][0]+t[1][0])*.5,(t[0][1]+t[1][1])*.5],r=[(t[1][0]+t[2][0])*.5,(t[1][1]+t[2][1])*.5],s=[(t[2][0]+t[3][0])*.5,(t[2][1]+t[3][1])*.5],o=[(e[0]+r[0])*.5,(e[1]+r[1])*.5],a=[(r[0]+s[0])*.5,(r[1]+s[1])*.5],n=[(o[0]+a[0])*.5,(o[1]+a[1])*.5];return[[t[0],e,o,n],[n,a,s,t[3]]]},_bezierBbox:function(t){var e=[];return t.length===4?(e[0]=Math.min(t[0][0],t[1][0],t[2][0],t[3][0]),e[1]=Math.max(t[0][1],t[1][1],t[2][1],t[3][1]),e[2]=Math.max(t[0][0],t[1][0],t[2][0],t[3][0]),e[3]=Math.min(t[0][1],t[1][1],t[2][1],t[3][1])):(e[0]=Math.min(t[0][0],t[1][0]),e[1]=Math.max(t[0][1],t[1][1]),e[2]=Math.max(t[0][0],t[1][0]),e[3]=Math.min(t[0][1],t[1][1])),e},_bezierOverlap:function(t,e){return t[2]>=e[0]&&t[0]<=e[2]&&t[1]>=e[3]&&t[3]<=e[1]},_bezierListConcat:function(t,e,r,s){var o,a=type_default.exists(s),n=0,l=e.length,h=t.length;for(h>0&&l>0&&(t[h-1][1]===1&&e[0][1]===0||a&&t[h-1][2]===1&&e[0][2]===0)&&(n=1),o=n;o<l;o++)a&&(e[o][2]*=.5,e[o][2]+=s),e[o][1]*=.5,e[o][1]+=r,t.push(e[o])},_bezierMeetSubdivision:function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f,_,g=[];return o=this._bezierBbox(e),s=this._bezierBbox(t),this._bezierOverlap(o,s)?r<5?(a=this._bezierSplit(t),h=a[0],d=a[1],a=this._bezierSplit(e),n=a[0],l=a[1],this._bezierListConcat(g,this._bezierMeetSubdivision(h,n,r+1),0,0),this._bezierListConcat(g,this._bezierMeetSubdivision(h,l,r+1),0,.5),this._bezierListConcat(g,this._bezierMeetSubdivision(d,n,r+1),.5,0),this._bezierListConcat(g,this._bezierMeetSubdivision(d,l,r+1),.5,.5),g):(f=[1].concat(t[0]),_=[1].concat(t[3]),c=[1].concat(e[0]),p=[1].concat(e[3]),u=this.meetSegmentSegment(f,_,c,p),u[1]>=0&&u[2]>=0&&u[1]<=1&&u[2]<=1?[u]:[]):[]},_bezierLineMeetSubdivision:function(t,e,r,s){var o,a,n,l,h,d,u,c,p,f,_=[];return o=this._bezierBbox(e),a=this._bezierBbox(t),s&&!this._bezierOverlap(a,o)?[]:r<5?(n=this._bezierSplit(t),l=n[0],h=n[1],this._bezierListConcat(_,this._bezierLineMeetSubdivision(l,e,r+1),0),this._bezierListConcat(_,this._bezierLineMeetSubdivision(h,e,r+1),.5),_):(p=[1].concat(t[0]),f=[1].concat(t[3]),u=[1].concat(e[0]),c=[1].concat(e[1]),d=this.meetSegmentSegment(p,f,u,c),d[1]>=0&&d[1]<=1&&(!s||d[2]>=0&&d[2]<=1)?[d]:[])},meetBeziersegmentBeziersegment:function(t,e,r){var s,o,a;for(t.length===4&&e.length===4?s=this._bezierMeetSubdivision(t,e,0):s=this._bezierLineMeetSubdivision(t,e,0,r),s.sort(function(n,l){return(n[1]-l[1])*1e7+(n[2]-l[2])}),o=[],a=0;a<s.length;a++)(a===0||s[a][1]!==s[a-1][1]||s[a][2]!==s[a-1][2])&&o.push(s[a]);return o},meetBezierCurveRedBlueSegments:function(t,e,r){var s,o,a,n,l=type_default.evaluate(r),h,d,u,c,p,f,_,g=0,m=0,b,C,y=[];if(e.numberPoints<e.bezierDegree+1||t.numberPoints<t.bezierDegree+1)return[0,NaN,NaN];for(t.bezierDegree===1&&e.bezierDegree===3&&(d=t,t=e,e=d),b=e.numberPoints-e.bezierDegree,C=t.numberPoints-t.bezierDegree,t.type===constants.OBJECT_TYPE_SECTOR&&(g=3,C-=3),e.type===constants.OBJECT_TYPE_SECTOR&&(m=3,b-=3),o=g;o<C;o+=t.bezierDegree)for(s=t.points,u=[s[o].usrCoords.slice(1),s[o+1].usrCoords.slice(1)],t.bezierDegree===3&&(u[2]=s[o+2].usrCoords.slice(1),u[3]=s[o+3].usrCoords.slice(1)),p=this._bezierBbox(u),a=m;a<b;a+=e.bezierDegree)if(s=e.points,c=[s[a].usrCoords.slice(1),s[a+1].usrCoords.slice(1)],e.bezierDegree===3&&(c[2]=s[a+2].usrCoords.slice(1),c[3]=s[a+3].usrCoords.slice(1)),f=this._bezierBbox(c),this._bezierOverlap(p,f)){if(_=this.meetBeziersegmentBeziersegment(u,c),_.length===0)continue;for(n=0;n<_.length;n++)h=_[n],!(h[1]<-math_default.eps||h[1]>1+math_default.eps||h[2]<-math_default.eps||h[2]>1+math_default.eps)&&y.push(h);if(y.length>l)return y[l][0]}return y.length>l?y[l][0]:[0,NaN,NaN]},bezierSegmentEval:function(t,e){var r,s,o,a=1-t;return s=0,o=0,r=a*a*a,s+=r*e[0][0],o+=r*e[0][1],r=3*t*a*a,s+=r*e[1][0],o+=r*e[1][1],r=3*t*t*a,s+=r*e[2][0],o+=r*e[2][1],r=t*t*t,s+=r*e[3][0],o+=r*e[3][1],[1,s,o]},bezierArc:function(t,e,r,s,o){var a,n,l,h,d,u,c,p,f=e[1],_=e[2],g=e[0],m=[],b=[],C,y,x,v,P,E,w,O,S,M;for(d=this.distance(e,t),f/=g,_/=g,u=this.rad(t.slice(1),e.slice(1),r.slice(1)),o===-1&&(u=2*Math.PI-u),p=u/4,a=t,a[1]/=a[0],a[2]/=a[0],a[0]/=a[0],h=a.slice(0),s?(m=[f,f+.333*(a[1]-f),f+.666*(a[1]-f),a[1]],b=[_,_+.333*(a[2]-_),_+.666*(a[2]-_),a[2]]):(m=[a[1]],b=[a[2]]);u>math_default.eps;)u>p?(c=p,u-=p):(c=u,u=0),C=Math.cos(o*c),y=Math.sin(o*c),M=[[1,0,0],[f*(1-C)+_*y,C,-y],[_*(1-C)-f*y,y,C]],O=math_default.matVecMult(M,a),h=[O[0]/O[0],O[1]/O[0],O[2]/O[0]],x=a[1]-f,v=a[2]-_,P=h[1]-f,E=h[2]-_,S=math_default.hypot(x+P,v+E),Math.abs(E-v)>math_default.eps?w=(x+P)*(d/S-.5)/(E-v)*8/3:w=(v+E)*(d/S-.5)/(x-P)*8/3,n=[1,a[1]-w*v,a[2]+w*x],l=[1,h[1]+w*E,h[2]-w*P],type_default.concat(m,[n[1],l[1],h[1]]),type_default.concat(b,[n[2],l[2],h[2]]),a=h.slice(0);return s&&(type_default.concat(m,[h[1]+.333*(f-h[1]),h[1]+.666*(f-h[1]),f]),type_default.concat(b,[h[2]+.333*(_-h[2]),h[2]+.666*(_-h[2]),_])),[m,b]},projectPointToCircle:function(t,e,r){var s,o,a,n,l,h=e.center.coords.usrCoords;return type_default.exists(r)||(r=t.board),type_default.isPoint(t)?(s=t.coords.distance(constants.COORDS_BY_USER,e.center.coords),o=t.coords.usrCoords):(s=t.distance(constants.COORDS_BY_USER,e.center.coords),o=t.usrCoords),Math.abs(s)<math_default.eps&&(s=math_default.eps),l=e.Radius()/s,a=h[1]+l*(o[1]-h[1]),n=h[2]+l*(o[2]-h[2]),new coords_default(constants.COORDS_BY_USER,[a,n],r)},projectPointToLine:function(t,e,r){var s=[0,e.stdform[1],e.stdform[2]],o;return type_default.exists(r)||(type_default.exists(t.coords)?r=t.board:r=e.board),type_default.exists(t.coords)?o=t.coords.usrCoords:o=t.usrCoords,s=math_default.crossProduct(s,o),new coords_default(constants.COORDS_BY_USER,math_default.crossProduct(s,e.stdform),r)},projectCoordsToSegment:function(t,e,r){var s,o,a=[r[1]-e[1],r[2]-e[2]],n=[t[1]-e[1],t[2]-e[2]];return Math.abs(a[0])<math_default.eps&&Math.abs(a[1])<math_default.eps?[e,0]:(s=math_default.innerProduct(n,a),o=math_default.innerProduct(a,a),s/=o,[[1,s*a[0]+e[1],s*a[1]+e[2]],s])},projectCoordsToBeziersegment:function(t,e,r){var s,o=function(a){var n=[1,e.X(r+a),e.Y(r+a)];return n[1]-=t[1],n[2]-=t[2],n[1]*n[1]+n[2]*n[2]};return s=jxg_default.Math.Numerics.fminbr(o,[0,1]),[[1,e.X(s+r),e.Y(s+r)],s]},projectPointToCurve:function(t,e,r){type_default.exists(r)||(r=t.board);var s=t.X(),o=t.Y(),a=t.position,n;return type_default.exists(a)||(a=e.evalVisProp("curvetype")==="functiongraph"?s:0),n=this.projectCoordsToCurve(s,o,a,e,r),n},projectCoordsToCurve:function(t,e,r,s,o){var a,n,l,h,d,u,c,p,f,_,g,m,b,C,y,x,v,P,E,w,O,S,M,N,j,k,B=Number.POSITIVE_INFINITY;if(type_default.exists(o)||(o=s.board),s.evalVisProp("curvetype")==="plot"){if(r=0,d=B,s.numberPoints===0?a=[0,1,1]:a=[s.Z(0),s.X(0),s.Y(0)],s.numberPoints>1)for(p=[1,t,e],s.bezierDegree===3?h=0:g=[s.Z(0),s.X(0),s.Y(0)],l=0;l<s.numberPoints-1;l++)s.bezierDegree===3?b=this.projectCoordsToBeziersegment(p,s,h):(m=[s.Z(l+1),s.X(l+1),s.Y(l+1)],b=this.projectCoordsToSegment(p,g,m)),c=b[1],f=b[0],0<=c&&c<=1?(u=this.distance(f,p),_=l+c):c<0?(f=g,u=this.distance(g,p),_=l):c>1&&l===s.numberPoints-2&&(f=m,u=this.distance(f,p),_=s.numberPoints-1),u<d&&(d=u,r=_,a=f),s.bezierDegree===3?(h++,l+=2):g=m;n=new coords_default(constants.COORDS_BY_USER,a,o)}else{for(j=s.minX(),k=s.maxX(),M=j,N=k,s.evalVisProp("curvetype")==="functiongraph"&&(P=Math.abs(e-s.Y(t)),isNaN(P)||(M=t-P,N=t+P)),C=function(I){var X,J;return I<j||I>k?1/0:(X=t-s.X(I),J=e-s.Y(I),X*X+J*J)},v=C(r),S=50,E=(N-M)/S,y=M,l=0;l<S;l++)x=C(y),(x<v||v===1/0||isNaN(v))&&(r=y,v=x),y+=E;for(w=E,l=0;l<20&&isNaN(C(r-w));l++,w*=.5);for(isNaN(C(r-w))&&(w=0),O=E,l=0;l<20&&isNaN(C(r+O));l++,O*=.5);isNaN(C(r+O))&&(O=0),r=numerics_default.fminbr(C,[Math.max(r-w,M),Math.min(r+O,N)]),r=r<j?j:r,r=r>k?k:r,n=new coords_default(constants.COORDS_BY_USER,[s.X(r),s.Y(r)],o)}return[s.updateTransform(n),r]},projectCoordsToPolygon:function(t,e){var r,s=e.vertices.length,o=1/0,a,n,l,h;for(r=0;r<s-1;r++)n=jxg_default.Math.Geometry.projectCoordsToSegment(t,e.vertices[r].coords.usrCoords,e.vertices[r+1].coords.usrCoords),0<=n[1]&&n[1]<=1?(a=jxg_default.Math.Geometry.distance(n[0],t,3),l=n[0]):n[1]<0?(a=jxg_default.Math.Geometry.distance(e.vertices[r].coords.usrCoords,t,3),l=e.vertices[r].coords.usrCoords):(a=jxg_default.Math.Geometry.distance(e.vertices[r+1].coords.usrCoords,t,3),l=e.vertices[r+1].coords.usrCoords),a<o&&(h=l.slice(0),o=a);return h},projectPointToTurtle:function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f=0,_=0,g=Number.POSITIVE_INFINITY,m=e.objects.length;for(type_default.exists(r)||(r=t.board),l=0;l<m;l++)d=e.objects[l],d.elementClass===constants.OBJECT_CLASS_CURVE&&(c=this.projectPointToCurve(t,d),s=c[0],p=c[1],h=this.distance(s.usrCoords,t.coords.usrCoords),h<g&&(a=s.usrCoords[1],n=s.usrCoords[2],o=p,g=h,u=d,_=f),f+=d.numberPoints);return s=new coords_default(constants.COORDS_BY_USER,[a,n],r),[u.updateTransform(s),o+_]},projectPointToPoint:function(t,e){return e.coords},projectPointToBoard:function(t,e){var r,s,o,a=e||t.board,n=[[1,1,0,0,3,0,1],[-1,2,1,0,1,2,1],[-1,1,2,2,1,2,3],[1,2,3,0,3,2,3]],l=t.coords||t,h=a.getBoundingBox();for(r=0;r<4;r++)o=n[r],o[0]*l.usrCoords[o[1]]<o[0]*h[o[2]]&&(s=math_default.crossProduct([1,h[o[3]],h[o[4]]],[1,h[o[5]],h[o[6]]]),s[3]=0,s=math_default.normalize(s),l=this.projectPointToLine({coords:l},{stdform:s},a));return l},distPointLine:function(t,e){var r=e[1],s=e[2],o=e[0],a;return Math.abs(r)+Math.abs(s)<math_default.eps?Number.POSITIVE_INFINITY:(a=r*t[1]+s*t[2]+o,r*=r,s*=s,Math.abs(a)/Math.sqrt(r+s))},distPointSegment:function(t,e,r){var s,o,a,n,l,h,d=math_default.eps*math_default.eps,u=1e6;return s=t[1]-e[1],o=t[2]-e[2],s=s===1/0?u:s===-1/0?-u:s,o=o===1/0?u:o===-1/0?-u:o,a=r[1]-e[1],n=r[2]-e[2],a=a===1/0?u:a===-1/0?-u:a,n=n===1/0?u:n===-1/0?-u:n,l=a*a+n*n,l>d&&(h=(s*a+o*n)/l,h<0?h=0:h>1&&(h=1),s-=h*a,o-=h*n),math_default.hypot(s,o)},intersectionFunction3D:function(t,e,r){var s,o=this;return e.type===constants.OBJECT_TYPE_PLANE3D?r.type===constants.OBJECT_TYPE_PLANE3D?s=t.intersectionPlanePlane(e,r):r.type===constants.OBJECT_TYPE_SPHERE3D&&(s=o.meetPlaneSphere(e,r)):e.type===constants.OBJECT_TYPE_SPHERE3D&&(r.type===constants.OBJECT_TYPE_PLANE3D?s=o.meetPlaneSphere(r,e):r.type===constants.OBJECT_TYPE_SPHERE3D&&(s=o.meetSphereSphere(e,r))),s},meet3Planes:function(t,e,r,s,o,a){for(var n=[1,0,0,0],l=math_default.crossProduct(o.slice(1),t.slice(1)),h=math_default.crossProduct(t.slice(1),r.slice(1)),d=math_default.crossProduct(r.slice(1),o.slice(1)),u=math_default.innerProduct(t.slice(1),d,3),c=0;c<3;c++)n[c+1]=(e*d[c]+s*l[c]+a*h[c])/u;return n},meetPlanePlane:function(t,e,r,s){var o,a,n=t.slice(1),l=e.slice(1);return o=math_default.crossProduct(n,l),n=r.slice(1),l=s.slice(1),a=math_default.crossProduct(n,l),l=math_default.crossProduct(o,a),l.unshift(0),l},meetPlaneSphere:function(t,e){var r=function(){return math_default.innerProduct(t.normal,e.center.coords,4)-t.d};return[function(){return math_default.axpy(-r(),t.normal,e.center.coords)},t.normal,function(){var s=e.Radius(),o=r();return Math.sqrt(s*s-o*o)}]},meetSphereSphere:function(t,e){var r=function(){var s=t.center.distance(e.center),o=t.Radius(),a=e.Radius();return(o-a)*(o+a)/(s*s)};return[function(){var s=r();return[1,.5*((1-s)*t.center.coords[1]+(1+s)*e.center.coords[1]),.5*((1-s)*t.center.coords[2]+(1+s)*e.center.coords[2]),.5*((1-s)*t.center.coords[3]+(1+s)*e.center.coords[3])]},function(){return statistics_default.subtract(e.center.coords,t.center.coords)},function(){var s=t.center.distance(e.center),o=t.Radius(),a=e.Radius(),n=r(),l=.5*(o*o+a*a-.5*s*s*(1+n*n));return Math.sqrt(l)}]},_paramsOutOfRange:function(t,e,r){return t[0]<e[0]||t[0]>e[1]||t.length>1&&(t[1]<r[0]||t[1]>r[1])},projectCoordsToParametric:function(t,e,r,s){var o,a,n=0,l=200,h,d=Math.random()*.01+.5,u,c,p=2*r;return r===1?(u=[type_default.evaluate(e.range[0]),type_default.evaluate(e.range[1])],o=.1*(u[1]-u[0])):r===2&&(u=[type_default.evaluate(e.range_u[0]),type_default.evaluate(e.range_u[1])],c=[type_default.evaluate(e.range_v[0]),type_default.evaluate(e.range_v[1])],o=.1*Math.min(u[1]-u[0],c[1]-c[0])),a=o/5e6,h=function(f,_,g,m){var b=[1,e.X.apply(e,g),e.Y.apply(e,g),e.Z.apply(e,g)],C=t[1]-b[1],y=t[2]-b[2],x=t[3]-b[3];return _>=2&&(m[0]=g[0]-u[0],m[1]=-g[0]+u[1]),_>=4&&(m[2]=g[1]-c[0],m[3]=-g[1]+c[1]),C*C+y*y+x*x},s.length===0?(s[0]=d*(u[0]+u[1]),r===2&&(s[1]=d*(c[0]+c[1]))):(s[0]=s[0]<=u[0]?u[0]+math_default.eps:s[0],s[0]=s[0]>=u[1]?u[1]-math_default.eps:s[0],r===2&&(s[1]=s[1]<=c[0]?c[0]+math_default.eps:s[1],s[1]=s[1]>=c[1]?c[1]-math_default.eps:s[1])),math_default.Nlp.FindMinimum(h,r,p,s,o,a,n,l),t=[1,e.X.apply(e,s),e.Y.apply(e,s),e.Z.apply(e,s)],this._paramsOutOfRange(s,u,c)&&(s[0]=s[0]<=u[0]?u[0]+math_default.eps:s[0],s[0]=s[0]>=u[1]?u[1]-math_default.eps:s[0],r===2&&(s[1]=s[1]<=c[0]?c[0]+math_default.eps:s[1],s[1]=s[1]>=c[1]?c[1]-math_default.eps:s[1]),math_default.Nlp.FindMinimum(h,r,p,s,o,a,n,l)),[1,e.X.apply(e,s),e.Y.apply(e,s),e.Z.apply(e,s)]},projectScreenCoordsToParametric:function(t,e,r,s){var o,a,n=0,l=200,h=r.length,d,u,c;return h===1?(d=[type_default.evaluate(e.range[0]),type_default.evaluate(e.range[1])],o=.1*(d[1]-d[0])):h===2&&(d=[type_default.evaluate(e.range_u[0]),type_default.evaluate(e.range_u[1])],u=[type_default.evaluate(e.range_v[0]),type_default.evaluate(e.range_v[1])],o=.1*Math.min(d[1]-d[0],u[1]-u[0])),a=o/5e6,c=function(p,f,_,g){var m=[1,e.X.apply(e,_),e.Y.apply(e,_),e.Z.apply(e,_)],b=e.view.project3DTo2D(m),C=t[0]-b[1],y=t[1]-b[2];return p===1?(g[0]=_[0]-d[0],g[1]=-_[0]+d[1]):p===2&&(g[0]=_[0]-d[0],g[1]=-_[0]+d[1],g[2]=_[1]-u[0],g[3]=-_[1]+u[1]),C*C+y*y},s?(math_default.Nlp.FindMinimum(c,h,0,r,o,a,n,l),r[0]=(r[0]+20*d[1])%(d[1]-d[0]),h===2&&(r[1]=(r[1]+20*u[1])%(u[1]-u[0]))):math_default.Nlp.FindMinimum(c,h,2*h,r,o,a,n,l),[1,e.X.apply(e,r),e.Y.apply(e,r),e.Z.apply(e,r)]},project3DTo3DPlane:function(t,e,r){var s=[0,0,0],o,a,n,l;return r=r||[0,0,0],o=math_default.norm(e),a=math_default.innerProduct(t,e,3),n=math_default.innerProduct(r,e,3),l=(a-n)/o,s=math_default.axpy(-l,e,t),s},getPlaneBounds:function(t,e,r,s,o){var a,n,l,h,d,u,c;return t[2]+e[0]!==0?(d=[[t[0],e[0]],[t[1],e[1]]],u=[s-r[0],s-r[1]],c=numerics_default.Gauss(d,u),a=c[0],n=c[1],u=[o-r[0],o-r[1]],c=numerics_default.Gauss(d,u),l=c[0],h=c[1],[a,l,n,h]):null},reuleauxPolygon:function(t,e){var r,s=Math.PI*2,o=s/e,a=(e-1)/2,n=0,l=function(h,d){return function(u,c){var p=(u%s+s)%s,f=Math.floor(p/o)%e;return c||(n=t[0].Dist(t[a]),r=math_default.Geometry.rad([t[0].X()+1,t[0].Y()],t[0],t[a%e])),isNaN(f)?f:(p=p*.5+f*o*.5+r,t[f][h]()+n*Math[d](p))}};return[l("X","cos"),l("Y","sin"),0,s]}});var geometry_default=math_default.Geometry;math_default.Quadtree=function(t,e,r){e=e||{capacity:10,pointType:"coords"},this.config={},this.config.capacity=e.capacity||10,this.config.pointType=e.pointType||"coords",this.points=[],this.xlb=t[0],this.xub=t[2],this.ylb=t[3],this.yub=t[1],this.parent=r||null,this.northWest=null,this.northEast=null,this.southEast=null,this.southWest=null};type_default.extend(math_default.Quadtree.prototype,{contains:function(t,e){return this.xlb<t&&t<=this.xub&&this.ylb<e&&e<=this.yub},insert:function(t){switch(this.config.pointType){case"coords":if(!this.contains(t.usrCoords[1],t.usrCoords[2]))return!1;break;case"object":if(!this.contains(t.x,t.y))return!1}return this.points.length<this.config.capacity&&this.northWest===null?(this.points.push(t),!0):(this.northWest===null&&this.subdivide(),this.northWest.insert(t)||this.northEast.insert(t)||this.southEast.insert(t)?!0:!!this.southWest.insert(t))},subdivide:function(){var t=this.xlb+(this.xub-this.xlb)*.5,e=this.ylb+(this.yub-this.ylb)*.5;this.northWest=new math_default.Quadtree([this.xlb,this.yub,t,e],this.config,this),this.northEast=new math_default.Quadtree([t,this.yub,this.xub,e],this.config,this),this.southEast=new math_default.Quadtree([this.xlb,e,t,this.ylb],this.config,this),this.southWest=new math_default.Quadtree([t,e,this.xub,this.ylb],this.config,this)},_query:function(t,e){var r;if(this.contains(t,e)){if(this.northWest===null)return this;if(r=this.northWest._query(t,e),r||(r=this.northEast._query(t,e),r)||(r=this.southEast._query(t,e),r)||(r=this.southWest._query(t,e),r))return r}return!1},query:function(t,e){var r,s;return type_default.exists(e)?(r=t,s=e):(r=t.usrCoords[1],s=t.usrCoords[2]),this._query(r,s)},hasPoint:function(t,e,r){var s,o,a;if(this.contains(t,e)){switch(a=this.points.length,this.config.pointType){case"coords":for(o=0;o<a;o++)if(geometry_default.distance([t,e],this.points[o].usrCoords.slice(1),2)<r)return!0;break;case"object":for(o=0;o<a;o++)if(geometry_default.distance([t,e],[this.points[o].x,this.points[o].y],2)<r)return!0}if(this.northWest===null)return!1;if(s=this.northWest.hasPoint(t,e,r),s||(s=this.northEast.hasPoint(t,e,r),s)||(s=this.southEast.hasPoint(t,e,r),s)||(s=this.southWest.hasPoint(t,e,r),s))return s}return!1},getAllPoints:function(){var t=[];return this.getAllPointsRecursive(t),t},getAllPointsRecursive(t){Array.prototype.push.apply(t,this.points.slice()),this.northWest!==null&&(this.northWest.getAllPointsRecursive(t),this.northEast.getAllPointsRecursive(t),this.southEast.getAllPointsRecursive(t),this.southWest.getAllPointsRecursive(t))}});var qdt_default=math_default.Quadtree;math_default.BoxQuadtree=function(t,e,r){var s,o,a,n;t--,this.depth=t,this.capacity=e,this.items=[],this.northWest=null,this.northEast=null,this.southEast=null,this.southWest=null,this.bbox=null,this.cx=null,this.cy=null,r&&(s=r[0],o=r[1],a=r[2],n=r[3],this.cx=(s+a)*.5,this.cy=(o+n)*.5,this.bbox=[s,o,a,n])};type_default.extend(math_default.BoxQuadtree.prototype,{insert:function(t){var e,r,s,o,a,n,l,h=[],d=[],u=[],c=[],p,f,_,g;if(this.bbox===null){for(r=t.length,s=n=1/0,a=o=-1/0,e=0;e<t.length;e++)l=t[e],s=l.xlb<s?l.xlb:s,o=l.yub>o?l.yub:o,a=l.xub>a?l.xub:a,n=l.ylb<n?l.ylb:n;this.cx=(s+a)*.5,this.cy=(o+n)*.5,this.bbox=[s,o,a,n]}else s=this.bbox[0],o=this.bbox[1],a=this.bbox[2],n=this.bbox[3];if(this.depth===0||this.items.length+t.length<this.capacity)return this.items=this.items.concat(t),this;for(r=t.length,e=0;e<r;e++)l=t[e],p=l.xlb<=this.cx&&l.yub>this.cy,_=l.xlb<=this.cx&&l.ylb<=this.cy,f=l.xub>this.cx&&l.yub>this.cy,g=l.xub>this.cx&&l.ylb<=this.cy,p&&f&&g&&_?this.items.push(l):(p&&h.push(l),_&&u.push(l),f&&d.push(l),g&&c.push(l));return this.subdivide(h,u,d,c,s,o,a,n),this},insertItem:function(t){var e,r,s,o,a=[],n=[],l=[],h=[],d,u,c,p;return this.bbox===null?(e=o=1/0,s=r=-1/0,e=t.xlb<e?t.xlb:e,r=t.yub>r?t.yub:r,s=t.xub>s?t.xub:s,o=t.ylb<o?t.ylb:o,this.cx=(e+s)*.5,this.cy=(r+o)*.5,this.bbox=[e,r,s,o]):(e=this.bbox[0],r=this.bbox[1],s=this.bbox[2],o=this.bbox[3]),this.depth===0||this.items.length+1<this.capacity?(this.items.push(t),this):(d=t.xlb<=this.cx&&t.yub>this.cy,c=t.xlb<=this.cx&&t.ylb<=this.cy,u=t.xub>this.cx&&t.yub>this.cy,p=t.xub>this.cx&&t.ylb<=this.cy,d&&u&&p&&c?this.items.push(t):(d&&a.push(t),c&&l.push(t),u&&n.push(t),p&&h.push(t)),this.subdivide(a,l,n,h,e,r,s,o),this)},subdivide:function(t,e,r,s,o,a,n,l){return t.length>0&&(this.northWest===null&&(this.northWest=new JXG.Math.BoxQuadtree(this.depth,this.capacity,[o,a,this.cx,this.cy])),this.northWest.insert(t)),e.length>0&&(this.southWest===null&&(this.southWest=new JXG.Math.BoxQuadtree(this.depth,this.capacity,[o,this.cy,this.cx,l])),this.southWest.insert(e)),r.length>0&&(this.northEast===null&&(this.northEast=new JXG.Math.BoxQuadtree(this.depth,this.capacity,[this.cx,a,n,this.cy])),this.northEast.insert(r)),s.length>0&&(this.southEast===null&&(this.southEast=new JXG.Math.BoxQuadtree(this.depth,this.capacity,[this.cx,this.cy,n,l])),this.southEast.insert(s)),this},find:function(t){var e=function(a){return t[2]>=a.xlb&&t[0]<=a.xub&&t[3]<=a.yub&&t[1]>=a.ylb},r=[],s,o=this.items.length;for(s=0;s<o;s++)e(this.items[s])&&r.push(this.items[s]);return this.northWest!==null&&t[0]<=this.cx&t[1]>=this.cy&&type_default.concat(r,this.northWest.find(t)),this.southWest!==null&&t[0]<=this.cx&t[3]<=this.cy&&type_default.concat(r,this.southWest.find(t)),this.northEast!==null&&t[2]>=this.cx&t[1]>=this.cy&&type_default.concat(r,this.northEast.find(t)),this.southEast!==null&&t[2]>=this.cx&t[3]<=this.cy&&type_default.concat(r,this.southEast.find(t)),r},analyzeTree:function(){var t={number_items:this.items.length,depth:1},e;return this.northWest!==null&&(e=this.northWest.analyzeTree(),t.number_items+=e.number_items,t.depth=Math.max(t.depth,1+e.depth)),this.southWest!==null&&(e=this.southWest.analyzeTree(),t.number_items+=e.number_items,t.depth=Math.max(t.depth,1+e.depth)),this.northEast!==null&&(e=this.northEast.analyzeTree(),t.number_items+=e.number_items,t.depth=Math.max(t.depth,1+e.depth)),this.southEast!==null&&(e=this.southEast.analyzeTree(),t.number_items+=e.number_items,t.depth=Math.max(t.depth,1+e.depth)),t},plot:function(){var t=[],e=[],r;return t.push(this.bbox[0]),e.push(this.bbox[3]),t.push(this.bbox[2]),e.push(this.bbox[3]),t.push(this.bbox[2]),e.push(this.bbox[1]),t.push(this.bbox[0]),e.push(this.bbox[1]),t.push(this.bbox[0]),e.push(this.bbox[3]),t.push(NaN),e.push(NaN),this.northWest!==null&&(r=this.northWest.plot(),type_default.concat(t,r[0]),type_default.concat(e,r[1])),this.northEast!==null&&(r=this.northEast.plot(),type_default.concat(t,r[0]),type_default.concat(e,r[1])),this.southEast!==null&&(r=this.southEast.plot(),type_default.concat(t,r[0]),type_default.concat(e,r[1])),this.southWest!==null&&(r=this.southWest.plot(),type_default.concat(t,r[0]),type_default.concat(e,r[1])),[t,e]}});var bqdt_default=math_default.BoxQuadtree;jxg_default.Math.Nlp={arr:function(t){return new Float64Array(t)},arr2:function(t,e){for(var r=0,s=new Array(t);r<t;)s[r]=this.arr(e),r++;return s},arraycopy:function(t,e,r,s,o){for(var a=0;a<o;)r[a+s]=t[a+e],a++},lastNumberOfEvaluations:0,GetLastNumberOfEvaluations:function(){return this.lastNumberOfEvaluations},Normal:0,MaxIterationsReached:1,DivergingRoundingErrors:2,FindMinimum:function(t,e,r,s,o,a,n,l,h){var d=r+2,u,c=this.arr(e+1),p=this,f;return this.lastNumberOfEvaluations=0,h&&console.log("Experimental feature 'testForRoundingErrors' is activated."),c[0]=0,this.arraycopy(s,0,c,1,e),f=function(_,g,m,b){var C=p.arr(_),y,x;return p.lastNumberOfEvaluations=p.lastNumberOfEvaluations+1,p.arraycopy(m,1,C,0,_),y=p.arr(g),x=t(_,g,C,y),p.arraycopy(y,0,b,1,g),x},u=this.cobylb(f,e,r,d,c,o,a,n,l,h),this.arraycopy(c,1,s,0,e),u},cobylb:function(t,e,r,s,o,a,n,l,h,d){var u=-1,c=.25,p=2.1,f=.5,_=1.1,g=0,m=0,b,C=e+1,y=r+1,x=a,v=0,P=!1,E=!1,w=0,O=0,S=0,M=this.arr(1+s),N=this.arr2(1+e,1+C),j=this.arr2(1+e,1+e),k=this.arr2(1+s,1+C),B=this.arr2(1+e,1+y),I=this.arr(1+e),X=this.arr(1+e),J=this.arr(1+e),Y=this.arr(1+e),F=this.arr(1+e),D,A,T,U,V,K,H,G,tt,st,it,et,lt,nt,ot,dt,ft,ut,Ct,yt,xt,Pt,wt,Ot,gt,$,q,pt,z,Q,Z=!0;for(l>=2&&console.log("The initial value of RHO is "+x+" and PARMU is set to zero."),H=0,V=1/x,D=1;D<=e;++D)N[D][C]=o[D],N[D][D]=x,j[D][D]=V;G=C,tt=!1;t:do{if(H>=h&&H>0){u=this.MaxIterationsReached;break t}for(++H,g=t(e,r,o,M),m=0,T=1;T<=r;++T)m=Math.max(m,-M[T]);if((H===l-1||l===3)&&this.PrintIterationResult(H,g,m,o,e,l),M[y]=g,M[s]=m,st=!0,!tt){for(st=!1,D=1;D<=s;++D)k[D][G]=M[D];if(H<=C){if(G<=e)if(k[y][C]<=g)o[G]=N[G][C];else{for(N[G][C]=o[G],T=1;T<=s;++T)k[T][G]=k[T][C],k[T][C]=M[T];for(T=1;T<=G;++T){for(N[G][T]=-x,V=0,D=T;D<=G;++D)V-=j[D][T];j[G][T]=V}}if(H<=e){G=H,o[G]+=x;continue t}}tt=!0}e:do{i:do{if(!st){for(it=k[y][C]+v*k[s][C],et=C,A=1;A<=e;++A)V=k[y][A]+v*k[s][A],V<it?(et=A,it=V):V===it&&v===0&&k[s][A]<k[s][et]&&(et=A);if(et<=e){for(D=1;D<=s;++D)V=k[D][C],k[D][C]=k[D][et],k[D][et]=V;for(D=1;D<=e;++D){for(V=N[D][et],N[D][et]=0,N[D][C]+=V,K=0,T=1;T<=e;++T)N[D][T]-=V,K-=j[T][D];j[et][D]=K}}if(lt=0,d)for(D=1;D<=e;++D)for(A=1;A<=e;++A)V=this.DOT_PRODUCT_ROW_COL(j,D,N,A,1,e)-(D===A?1:0),lt=Math.max(lt,Math.abs(V));if(lt>.1){u=this.DivergingRoundingErrors;break t}for(T=1;T<=y;++T){for(M[T]=-k[T][C],A=1;A<=e;++A)F[A]=k[T][A]+M[T];for(D=1;D<=e;++D)B[D][T]=(T===y?-1:1)*this.DOT_PRODUCT_ROW_COL(F,-1,j,D,1,e)}for(P=!0,w=c*x,nt=p*x,A=1;A<=e;++A){for(ot=0,dt=0,T=1;T<=e;++T)ot+=j[A][T]*j[A][T],dt+=N[T][A]*N[T][A];I[A]=1/Math.sqrt(ot),X[A]=Math.sqrt(dt),(I[A]<w||X[A]>nt)&&(P=!1)}if(!tt&&!P){for(G=0,V=nt,A=1;A<=e;++A)X[A]>V&&(G=A,V=X[A]);if(G===0)for(A=1;A<=e;++A)I[A]<V&&(G=A,V=I[A]);for(V=f*x*I[G],T=1;T<=e;++T)Y[T]=V*j[G][T];for(ft=0,ut=0,b=0,T=1;T<=y;++T)b=this.DOT_PRODUCT_ROW_COL(Y,-1,B,T,1,e),T<y&&(V=k[T][C],ft=Math.max(ft,-b-V),ut=Math.max(ut,b-V));for(Ct=v*(ft-ut)>2*b?-1:1,V=0,D=1;D<=e;++D)Y[D]=Ct*Y[D],N[D][G]=Y[D],V+=j[G][D]*Y[D];for(T=1;T<=e;++T)j[G][T]/=V;for(A=1;A<=e;++A){if(A!==G)for(V=this.DOT_PRODUCT_ROW_COL(j,A,Y,-1,1,e),T=1;T<=e;++T)j[A][T]-=V*j[G][T];o[A]=N[A][C]+Y[A]}continue t}if(E=this.trstlp(e,r,B,M,x,Y),!E){for(V=0,T=1;T<=e;++T)V+=Y[T]*Y[T];if(V<.25*x*x){tt=!0;break i}}for(b=0,yt=0,M[y]=0,T=1;T<=y;++T)b=M[T]-this.DOT_PRODUCT_ROW_COL(Y,-1,B,T,1,e),T<y&&(yt=Math.max(yt,b));if(O=k[s][C]-yt,xt=O>0?b/O:0,v<1.5*xt){for(v=2*xt,l>=2&&console.log("Increase in PARMU to "+v),Pt=k[y][C]+v*k[s][C],A=1;A<=e;++A)if(V=k[y][A]+v*k[s][A],V<Pt||V===Pt&&v===0&&k[s][A]<k[s][C])continue e}for(S=v*O-b,T=1;T<=e;++T)o[T]=N[T][C]+Y[T];tt=!0;continue t}for(st=!1,wt=k[y][C]+v*k[s][C],Ot=g+v*m,gt=wt-Ot,v===0&&g===k[y][C]&&(S=O,gt=k[s][C]-m),$=gt<=0?1:0,G=0,A=1;A<=e;++A)V=Math.abs(this.DOT_PRODUCT_ROW_COL(j,A,Y,-1,1,e)),V>$&&(G=A,$=V),J[A]=V*I[A];for(q=_*x,U=0,A=1;A<=e;++A)if(J[A]>=w||J[A]>=I[A]){if(V=X[A],gt>0){for(V=0,T=1;T<=e;++T)V+=Math.pow(Y[T]-N[T][A],2);V=Math.sqrt(V)}V>q&&(U=A,q=V)}if(U>0&&(G=U),G!==0){for(V=0,D=1;D<=e;++D)N[D][G]=Y[D],V+=j[G][D]*Y[D];for(T=1;T<=e;++T)j[G][T]/=V;for(A=1;A<=e;++A)if(A!==G)for(V=this.DOT_PRODUCT_ROW_COL(j,A,Y,-1,1,e),T=1;T<=e;++T)j[A][T]-=V*j[G][T];for(T=1;T<=s;++T)k[T][G]=M[T];if(gt>0&&gt>=.1*S)continue e}}while(!Z);if(!P){tt=!1;continue e}if(x<=n){u=this.Normal;break t}if(pt=0,z=0,x*=.5,x<=1.5*n&&(x=n),v>0){for(Q=0,T=1;T<=y;++T){for(pt=k[T][C],z=pt,D=1;D<=e;++D)pt=Math.min(pt,k[T][D]),z=Math.max(z,k[T][D]);T<=r&&pt<.5*z&&(V=Math.max(z,0)-pt,Q=Q<=0?V:Math.min(Q,V))}Q===0?v=0:z-pt<v*Q&&(v=(z-pt)/Q)}l>=2&&console.log("Reduction in RHO to "+x+" and PARMU = "+v),l===2&&this.PrintIterationResult(H,k[y][C],k[s][C],this.COL(N,C),e,l)}while(Z)}while(Z);switch(u){case this.Normal:if(l>=1&&console.log("%nNormal return from subroutine COBYLA%n"),E)return l>=1&&this.PrintIterationResult(H,g,m,o,e,l),u;break;case this.MaxIterationsReached:l>=1&&console.log("%nReturn from subroutine COBYLA because the MAXFUN limit has been reached.%n");break;case this.DivergingRoundingErrors:l>=1&&console.log("%nReturn from subroutine COBYLA because rounding errors are becoming damaging.%n")}for(T=1;T<=e;++T)o[T]=N[T][C];return g=k[y][C],m=k[s][C],l>=1&&this.PrintIterationResult(H,g,m,o,e,l),u},trstlp:function(t,e,r,s,o,a){var n=0,l=0,h=0,d=this.arr2(1+t,1+t),u=this.arr(2+e),c=this.arr(2+e),p=this.arr(1+t),f=this.arr(1+t),_=this.arr(2+e),g=this.arr(2+e),m=e,b=0,C,y,x,v,P,E,w,O,S,M,N,j,k,B,I,X,J,Y,F,D,A,T,U,V,K,H,G,tt,st,it,et,lt,nt,ot,dt=!0;for(x=1;x<=t;++x)d[x][x]=1,a[x]=0;if(C=0,y=0,e>=1){for(v=1;v<=e;++v)s[v]>y&&(y=s[v],C=v);for(v=1;v<=e;++v)g[v]=v,c[v]=y-s[v]}P=!0;do t:do{(!P||P&&y===0)&&(m=e+1,C=m,g[m]=m,c[m]=0),P=!1,E=0,w=0,O=0,S=0;e:do{if(M=m===e?y:-this.DOT_PRODUCT_ROW_COL(a,-1,r,m,1,t),w===0||M<E?(E=M,l=b,w=3):b>l?(l=b,w=3):--w,w===0)break t;if(N=0,C<=b){if(C<b){j=g[C],k=c[C],v=C;do{for(I=v+1,X=g[I],J=this.DOT_PRODUCT(this.PART(this.COL(d,v),1,t),this.PART(this.COL(r,X),1,t)),n=math_default.hypot(J,u[I]),Y=u[I]/n,F=J/n,u[I]=Y*u[v],u[v]=n,x=1;x<=t;++x)n=Y*d[x][I]+F*d[x][v],d[x][I]=Y*d[x][v]-F*d[x][I],d[x][v]=n;g[v]=X,c[v]=c[I],v=I}while(v<b);g[v]=j,c[v]=k}if(--b,m>e)for(n=1/u[b],v=1;v<=t;++v)p[v]=n*d[v][b];else for(n=this.DOT_PRODUCT_ROW_COL(p,-1,d,b+1,1,t),v=1;v<=t;++v)p[v]-=n*d[v][b+1]}else{for(X=g[C],v=1;v<=t;++v)f[v]=r[v][X];for(D=0,v=t;v>b;){for(J=0,A=0,x=1;x<=t;++x)n=d[x][v]*f[x],J+=n,A+=Math.abs(n);if(T=A+.1*Math.abs(J),U=A+.2*Math.abs(J),(A>=T||T>=U)&&(J=0),D===0)D=J;else for(I=v+1,n=math_default.hypot(J,D),Y=J/n,F=D/n,D=n,x=1;x<=t;++x)n=Y*d[x][v]+F*d[x][I],d[x][I]=Y*d[x][I]-F*d[x][v],d[x][v]=n;--v}if(D===0){N=-1,v=b;do{for(V=0,K=0,x=1;x<=t;++x)n=d[x][v]*f[x],V+=n,K+=Math.abs(n);if(T=K+.1*Math.abs(V),U=K+.2*Math.abs(V),K<T&&T<U){if(n=V/u[v],n>0&&g[v]<=e&&(ot=c[v]/n,(N<0||ot<N)&&(N=ot)),v>=2)for(H=g[v],x=1;x<=t;++x)f[x]-=n*r[x][H];_[v]=n}else _[v]=0}while(--v>0);if(N<0)break t;for(v=1;v<=b;++v)c[v]=Math.max(0,c[v]-N*_[v]);if(C<b){j=g[C],k=c[C],v=C;do{for(I=v+1,H=g[I],J=this.DOT_PRODUCT(this.PART(this.COL(d,v),1,t),this.PART(this.COL(r,H),1,t)),n=math_default.hypot(J,u[I]),Y=u[I]/n,F=J/n,u[I]=Y*u[v],u[v]=n,x=1;x<=t;++x)n=Y*d[x][I]+F*d[x][v],d[x][I]=Y*d[x][v]-F*d[x][I],d[x][v]=n;g[v]=H,c[v]=c[I],v=I}while(v<b);g[v]=j,c[v]=k}if(n=this.DOT_PRODUCT(this.PART(this.COL(d,b),1,t),this.PART(this.COL(r,X),1,t)),n===0)break t;u[b]=n,c[C]=0,c[b]=N}else++b,u[b]=D,c[C]=c[b],c[b]=0;if(g[C]=g[b],g[b]=X,m>e&&X!==m){for(v=b-1,J=this.DOT_PRODUCT(this.PART(this.COL(d,v),1,t),this.PART(this.COL(r,X),1,t)),n=math_default.hypot(J,u[b]),Y=u[b]/n,F=J/n,u[b]=Y*u[v],u[v]=n,x=1;x<=t;++x)n=Y*d[x][b]+F*d[x][v],d[x][b]=Y*d[x][v]-F*d[x][b],d[x][v]=n;g[b]=g[v],g[v]=X,n=c[v],c[v]=c[b],c[b]=n}if(m>e)for(n=1/u[b],v=1;v<=t;++v)p[v]=n*d[v][b];else for(X=g[b],n=(this.DOT_PRODUCT_ROW_COL(p,-1,r,X,1,t)-1)/u[b],v=1;v<=t;++v)p[v]-=n*d[v][b]}for(G=o*o,st=0,tt=0,x=1;x<=t;++x)Math.abs(a[x])>=1e-6*o&&(G-=a[x]*a[x]),st+=a[x]*p[x],tt+=p[x]*p[x];if(G<=0)break t;if(n=Math.sqrt(tt*G),Math.abs(st)>=1e-6*n&&(n=Math.sqrt(tt*G+st*st)),S=G/(n+st),O=S,m===e){if(T=O+.1*y,U=O+.2*y,O>=T||T>=U)break e;O=Math.min(O,y)}for(v=1;v<=t;++v)f[v]=a[v]+O*p[v];if(m===e)for(h=y,y=0,v=1;v<=b;++v)X=g[v],n=s[X]-this.DOT_PRODUCT_ROW_COL(f,-1,r,X,1,t),y=Math.max(y,n);v=b;do{for(it=0,et=0,x=1;x<=t;++x)n=d[x][v]*f[x],it+=n,et+=Math.abs(n);if(T=et+.1*Math.abs(it),U=et+.2*Math.abs(it),(et>=T||T>=U)&&(it=0),_[v]=it/u[v],v>=2)for(X=g[v],x=1;x<=t;++x)f[x]-=_[v]*r[x][X]}while(v-->=2);for(m>e&&(_[b]=Math.max(0,_[b])),v=1;v<=t;++v)f[v]=a[v]+O*p[v];if(m>b)for(lt=b+1,v=lt;v<=m;++v){for(X=g[v],B=y-s[X],nt=y+Math.abs(s[X]),x=1;x<=t;++x)n=r[x][X]*f[x],B+=n,nt+=Math.abs(n);T=nt+.1*Math.abs(B),U=nt+.2*Math.abs(B),(nt>=T||T>=U)&&(B=0),_[v]=B}for(N=1,C=0,v=1;v<=m;++v)_[v]<0&&(n=c[v]/(c[v]-_[v]),n<N&&(N=n,C=v));for(n=1-N,v=1;v<=t;++v)a[v]=n*a[v]+N*f[v];for(v=1;v<=m;++v)c[v]=Math.max(0,n*c[v]+N*_[v]);m===e&&(y=h+N*(y-h))}while(C>0);if(O===S)return!0}while(dt);while(m===e);return!1},PrintIterationResult:function(t,e,r,s,o,a){a>1&&console.log("NFVALS = "+t+" F = "+e+" MAXCV = "+r),a>1&&console.log("X = "+this.PART(s,1,o))},ROW:function(t,e){return t[e].slice()},COL:function(t,e){var r,s=t.length,o=[];for(r=0;r<s;++r)o[r]=t[r][e];return o},PART:function(t,e,r){return t.slice(e,r+1)},FORMAT:function(t){return t.join(",")},DOT_PRODUCT:function(t,e){var r,s=0,o=t.length;for(r=0;r<o;++r)s+=t[r]*e[r];return s},DOT_PRODUCT_ROW_COL:function(t,e,r,s,o,a){var n,l=0;if(e===-1)for(n=o;n<=a;++n)l+=t[n]*r[n][s];else if(s===-1)for(n=o;n<=a;++n)l+=t[e][n]*r[n];else for(n=o;n<=a;++n)l+=t[e][n]*r[n][s];return l}};var nlp_default=jxg_default.Math.Nlp;math_default.Plot={checkReal:function(t){var e=!1,r,s,o=t.length;for(r=0;r<o;r++)if(t[r]!==void 0&&(s=t[r].usrCoords,!isNaN(s[1])&&!isNaN(s[2])&&Math.abs(s[0])>math_default.eps)){e=!0;break}return e},updateParametricCurveNaive:function(t,e,r,s){var o,a,n=!1,l=(r-e)/s;for(o=0;o<s;o++)a=e+o*l,t.points[o].setCoordinates(constants.COORDS_BY_USER,[t.X(a,n),t.Y(a,n)],!1),t.points[o]._t=a,n=!0;return t},isSegmentOutside:function(t,e,r,s,o){return e<0&&s<0||e>o.canvasHeight&&s>o.canvasHeight||t<0&&r<0||t>o.canvasWidth&&r>o.canvasWidth},isDistOK:function(t,e,r,s){return Math.abs(t)<r&&Math.abs(e)<s&&!isNaN(t+e)},isSegmentDefined:function(t,e,r,s){return!(isNaN(t+e)&&isNaN(r+s))},updateParametricCurveOld:function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f,_,g=!1,m=new coords_default(constants.COORDS_BY_USER,[0,0],t.board,!1),b=[],C=[],y=[],x=[],v=!1,P=0,E=function(w,O,S){var M,N=S[1]-w[1],j=S[2]-w[2],k=O[0]-w[1],B=O[1]-w[2],I=k*k+B*B;return I>=math_default.eps&&(M=(N*k+j*B)/I,M>0&&(M<=1?(N-=M*k,j-=M*B):(N-=k,j-=B))),math_default.hypot(N,j)};for(jxg_default.deprecated("Curve.updateParametricCurveOld()"),t.board.updateQuality===t.board.BOARD_QUALITY_LOW?(p=15,f=10,_=10):(p=21,f=.7,_=.7),x[0]=r-e,s=1;s<p;s++)x[s]=x[s-1]*.5;s=1,b[0]=1,C[0]=0,o=e,m.setCoordinates(constants.COORDS_BY_USER,[t.X(o,g),t.Y(o,g)],!1),g=!0,h=m.scrCoords[1],d=m.scrCoords[2],o=r,m.setCoordinates(constants.COORDS_BY_USER,[t.X(o,g),t.Y(o,g)],!1),n=m.scrCoords[1],l=m.scrCoords[2],y[0]=[n,l],u=1,c=0,t.points=[],t.points[P++]=new coords_default(constants.COORDS_BY_SCREEN,[h,d],t.board,!1);do{for(v=this.isDistOK(n-h,l-d,f,_)||this.isSegmentOutside(h,d,n,l,t.board);c<p&&(!v||c<6)&&(c<=7||this.isSegmentDefined(h,d,n,l));)b[u]=s,C[u]=c,y[u]=[n,l],u+=1,s=2*s-1,c++,o=e+s*x[c],m.setCoordinates(constants.COORDS_BY_USER,[t.X(o,g),t.Y(o,g)],!1,!0),n=m.scrCoords[1],l=m.scrCoords[2],v=this.isDistOK(n-h,l-d,f,_)||this.isSegmentOutside(h,d,n,l,t.board);P>1&&(a=E(t.points[P-2].scrCoords,[n,l],t.points[P-1].scrCoords),a<.015&&(P-=1)),t.points[P]=new coords_default(constants.COORDS_BY_SCREEN,[n,l],t.board,!1),t.points[P]._t=o,P+=1,h=n,d=l,u-=1,n=y[u][0],l=y[u][1],c=C[u]+1,s=b[u]*2}while(u>0&&P<5e5);return t.numberPoints=t.points.length,t},_insertPoint_v2:function(t,e,r){var s=!isNaN(this._lastCrds[1]+this._lastCrds[2]),o=!isNaN(e.scrCoords[1]+e.scrCoords[2]),a=t.board.canvasWidth,n=t.board.canvasHeight,l=500;o=o&&e.scrCoords[1]>-l&&e.scrCoords[2]>-l&&e.scrCoords[1]<a+l&&e.scrCoords[2]<n+l,(!o&&s||o&&(!s||Math.abs(e.scrCoords[1]-this._lastCrds[1])>.7||Math.abs(e.scrCoords[2]-this._lastCrds[2])>.7))&&(e._t=r,t.points.push(e),this._lastCrds=e.copy("scrCoords"))},neighborhood_isNaN_v2:function(t,e){var r,s=new coords_default(constants.COORDS_BY_USER,[0,0],t.board,!1),o=e+math_default.eps,a;return s.setCoordinates(constants.COORDS_BY_USER,[t.X(o,!0),t.Y(o,!0)],!1),a=s.usrCoords,r=isNaN(a[1]+a[2]),!(!r&&(o=e-math_default.eps,s.setCoordinates(constants.COORDS_BY_USER,[t.X(o,!0),t.Y(o,!0)],!1),a=s.usrCoords,r=isNaN(a[1]+a[2]),!r))},_borderCase:function(t,e,r,s,o,a,n,l){var h,d,u,c=null,p,f=30,_=!1,g,m;if(l<=1){if(d=new coords_default(constants.COORDS_BY_USER,[0,0],t.board,!1),isNaN(e[1]+e[2])&&!isNaN(s[1]+s[2])&&!this.neighborhood_isNaN_v2(t,o)||isNaN(r[1]+r[2])&&!isNaN(s[1]+s[2])&&!this.neighborhood_isNaN_v2(t,a)||isNaN(s[1]+s[2])&&(!isNaN(e[1]+e[2])||!isNaN(r[1]+r[2]))&&!this.neighborhood_isNaN_v2(t,n))return!1;p=0;do{if(isNaN(e[1]+e[2])&&!isNaN(s[1]+s[2]))g=o,m=n;else if(isNaN(r[1]+r[2])&&!isNaN(s[1]+s[2]))g=a,m=n;else if(isNaN(s[1]+s[2])&&!isNaN(r[1]+r[2]))g=n,m=a;else if(isNaN(s[1]+s[2])&&!isNaN(e[1]+e[2]))g=n,m=o;else return!1;h=.5*(g+m),d.setCoordinates(constants.COORDS_BY_USER,[t.X(h,!0),t.Y(h,!0)],!1),u=d.usrCoords,_=isNaN(u[1]+u[2]),_?g=h:m=h,++p}while(_&&p<f);if(p<f&&(c=u.slice(),s=u.slice(),m=h),c!==null)return this._insertPoint_v2(t,new coords_default(constants.COORDS_BY_USER,c,t.board,!1)),!0}return!1},_plotRecursive_v2:function(t,e,r,s,o,a,n){var l,h,d,u=0,c,p,f,_=.5,g=.99,m=new coords_default(constants.COORDS_BY_USER,[0,0],t.board,!1);if(!(t.numberPoints>65536))return a<this.nanLevel&&this._isUndefined(t,e,r,s,o)?this:a<this.nanLevel&&this._isOutside(e,r,s,o,t.board)?this:(l=(r+o)*.5,m.setCoordinates(constants.COORDS_BY_USER,[t.X(l,!0),t.Y(l,!0)],!1),h=m.scrCoords,this._borderCase(t,e,s,h,r,o,l,a)?this:(d=this._triangleDists(e,s,h),c=a<this.smoothLevel&&d[3]<n,p=a<=this.jumpLevel&&(isNaN(d[0])||isNaN(d[1])||isNaN(d[2]))||a<this.jumpLevel&&(d[2]>g*d[0]||d[1]>g*d[0]||d[0]===1/0||d[1]===1/0||d[2]===1/0),f=a<this.smoothLevel+2&&d[0]<_*(d[1]+d[2]),f&&(u=0,c=!1),--a,p?this._insertPoint_v2(t,new coords_default(constants.COORDS_BY_SCREEN,[NaN,NaN],t.board,!1),l):a<=u||c?this._insertPoint_v2(t,m,l):(this._plotRecursive_v2(t,e,r,h,l,a,n),isNaN(m.scrCoords[1]+m.scrCoords[2])||this._insertPoint_v2(t,m,l),this._plotRecursive_v2(t,h,l,s,o,a,n)),this))},updateParametricCurve_v2:function(t,e,r){var s,o,a,n,l=!1,h=new coords_default(constants.COORDS_BY_USER,[0,0],t.board,!1),d=new coords_default(constants.COORDS_BY_USER,[0,0],t.board,!1),u=t.evalVisProp("recursiondepthhigh")||17,c=2,p,f,_;return this.smoothLevel=u-9,this.jumpLevel=2,this.nanLevel=u-4,t.points=[],this.xterm==="x"?(f=t.board.getBoundingBox(),p=(f[2]-f[0])*.3,s=Math.max(e,f[0]-p),o=Math.min(r,f[2]+p)):(s=e,o=r),h.setCoordinates(constants.COORDS_BY_USER,[t.X(s,l),t.Y(s,l)],!1),l=!0,d.setCoordinates(constants.COORDS_BY_USER,[t.X(o,l),t.Y(o,l)],!1),_=this._findStartPoint(t,h.scrCoords,s,d.scrCoords,o),h.setCoordinates(constants.COORDS_BY_SCREEN,_[0],!1),s=_[1],_=this._findStartPoint(t,d.scrCoords,o,h.scrCoords,s),d.setCoordinates(constants.COORDS_BY_SCREEN,_[0],!1),o=_[1],this._visibleArea=[s,o],a=h.copy("scrCoords"),n=d.copy("scrCoords"),h._t=s,t.points.push(h),this._lastCrds=h.copy("scrCoords"),this._plotRecursive_v2(t,a,s,n,o,u,c),d._t=o,t.points.push(d),t.numberPoints=t.points.length,t},_insertLimesPoint:function(t,e,r,s,o){var a,n,l;Math.abs(this._lastUsrCrds[1])===1/0&&Math.abs(o.left_x)===1/0||Math.abs(this._lastUsrCrds[2])===1/0&&Math.abs(o.left_y)===1/0||(a=new coords_default(constants.COORDS_BY_USER,[o.left_x,o.left_y],t.board),a._t=r,t.points.push(a),!isNaN(o.left_x)&&!isNaN(o.left_y)&&!isNaN(o.right_x)&&!isNaN(o.right_y)&&(Math.abs(o.left_x-o.right_x)>math_default.eps||Math.abs(o.left_y-o.right_y)>math_default.eps)&&(n=new coords_default(constants.COORDS_BY_SCREEN,e,t.board),n._t=r,t.points.push(n)),l=new coords_default(constants.COORDS_BY_USER,[o.right_x,o.right_y],t.board),l._t=r,t.points.push(l),this._lastScrCrds=l.copy("scrCoords"),this._lastUsrCrds=l.copy("usrCoords"))},_insertPoint:function(t,e,r,s,o){var a=!isNaN(this._lastScrCrds[1]+this._lastScrCrds[2]),n=!isNaN(e[1]+e[2]),l=t.board.canvasWidth,h=t.board.canvasHeight,d,u=.8,c=500;if(type_default.exists(o)){this._insertLimesPoint(t,e,r,s,o);return}n=n&&e[1]>-c&&e[2]>-c&&e[1]<l+c&&e[2]<h+c,(a||n)&&(n&&a&&Math.abs(e[1]-this._lastScrCrds[1])<u&&Math.abs(e[2]-this._lastScrCrds[2])<u||Math.abs(e[1])===1/0&&Math.abs(this._lastUsrCrds[1])===1/0||Math.abs(e[2])===1/0&&Math.abs(this._lastUsrCrds[2])===1/0||(d=new coords_default(constants.COORDS_BY_SCREEN,e,t.board),d._t=r,t.points.push(d),this._lastScrCrds=d.copy("scrCoords"),this._lastUsrCrds=d.copy("usrCoords")))},_triangleDists:function(t,e,r){var s=[t[0]*e[0],(t[1]+e[1])*.5,(t[2]+e[2])*.5];return[geometry_default.distance(t,e,3),geometry_default.distance(t,r,3),geometry_default.distance(r,e,3),geometry_default.distance(r,s,3)]},_isUndefined:function(t,e,r,s,o){var a,n,l;if(!isNaN(e[1]+e[2])||!isNaN(s[1]+s[2]))return!1;for(l=new coords_default(constants.COORDS_BY_USER,[0,0],t.board,!1),n=0;n<20;++n)if(a=r+Math.random()*(o-r),l.setCoordinates(constants.COORDS_BY_USER,[t.X(a,!0),t.Y(a,!0)],!1),!isNaN(l.scrCoords[0]+l.scrCoords[1]+l.scrCoords[2]))return!1;return!0},_isOutside:function(t,e,r,s,o){var a=500,n=o.canvasWidth,l=o.canvasHeight;return t[1]<-a&&r[1]<-a||t[2]<-a&&r[2]<-a||t[1]>n+a&&r[1]>n+a||t[2]>l+a&&r[2]>l+a},_isOutsidePoint:function(t,e){var r=500,s=e.canvasWidth,o=e.canvasHeight;return t[1]<-r||t[2]<-r||t[1]>s+r||t[2]>o+r},_findStartPoint:function(t,e,r,s,o){return[e,r]},_getBorderPos:function(t,e,r,s,o,a,n){var l,h,d,u,c=30,p=!1,f,_;if(h=new coords_default(constants.COORDS_BY_USER,[0,0],t.board,!1),u=0,isNaN(r[1]+r[2])&&!isNaN(o[1]+o[2]))_=e,f=s;else if(isNaN(n[1]+n[2])&&!isNaN(o[1]+o[2]))_=a,f=s;else if(isNaN(o[1]+o[2])&&!isNaN(n[1]+n[2]))_=s,f=a;else if(isNaN(o[1]+o[2])&&!isNaN(r[1]+r[2]))_=s,f=e;else return!1;do l=.5*(f+_),h.setCoordinates(constants.COORDS_BY_USER,[t.X(l,!0),t.Y(l,!0)],!1),d=h.usrCoords,p=isNaN(d[1]+d[2]),p?_=l:f=l,++u;while(u<c&&Math.abs(f-_)>math_default.eps);return l},_getCuspPos:function(t,e,r){var s=[t.X(e,!0),t.Y(e,!0)],o=[t.X(r,!0),t.Y(r,!0)],a=function(n){var l=[t.X(n,!0),t.Y(n,!0)];return-(math_default.hypot(s[0]-l[0],s[1]-l[1])+math_default.hypot(o[0]-l[0],o[1]-l[1]))};return numerics_default.fminbr(a,[e,r],t)},_getJumpPos:function(t,e,r){var s=function(o){var a=math_default.eps*math_default.eps,n=[t.X(o,!0),t.Y(o,!0)],l=[t.X(o+a,!0),t.Y(o+a,!0)];return-Math.abs((l[1]-n[1])/(l[0]-n[0]))};return numerics_default.fminbr(s,[e,r],t)},_getLimits:function(t,e){var r,s=2/(t.maxX()-t.minX()),o,a,n,l;return r=extrapolate_default.limit(e,-s,t.X),o=r[0],r[1]==="infinite"&&(o=Math.sign(o)*(1/0)),r=extrapolate_default.limit(e,-s,t.Y),n=r[0],r[1]==="infinite"&&(n=Math.sign(n)*(1/0)),r=extrapolate_default.limit(e,s,t.X),a=r[0],r[1]==="infinite"&&(a=Math.sign(a)*(1/0)),r=extrapolate_default.limit(e,s,t.Y),l=r[0],r[1]==="infinite"&&(l=Math.sign(l)*(1/0)),{left_x:o,left_y:n,right_x:a,right_y:l,t:e}},_getLimes:function(t,e,r,s,o,a,n,l,h){var d;return l==="border"?d=this._getBorderPos(t,e,r,s,o,a,n):l==="cusp"?d=this._getCuspPos(t,e,a):l==="jump"&&(d=this._getJumpPos(t,e,a)),this._getLimits(t,d)},_plotNonRecursive:function(t,e,r,s,o,a){var n,l,h,d=0,u=null,c,p,f=!1,_="",g,m,b,C,y,x=[],v=0,P;for(b=t.board.origin.scrCoords,x[v++]=[e,r,s,o,a,1/0];v>0;){if(P=x[--v],e=P[0],r=P[1],s=P[2],o=P[3],C=P[4],y=P[5],f=!1,_="",u=null,t.points.length>65536)return;C<this.nanLevel&&(this._isUndefined(t,e,r,s,o)||this._isOutside(e,r,s,o,t.board))||(n=(r+o)*.5,g=t.X(n,!0),m=t.Y(n,!0),l=[1,b[1]+g*t.board.unitX,b[2]-m*t.board.unitY],h=this._triangleDists(e,s,l),c=isNaN(e[1]+e[2]),p=isNaN(s[1]+s[2]),c&&!p||!c&&p?_="border":h[0]>.66*y||h[0]<this.cusp_threshold*(h[1]+h[2])||h[1]>5*h[2]||h[2]>5*h[1]?_="cusp":(h[2]>this.jump_threshold*h[0]||h[1]>this.jump_threshold*h[0]||h[0]===1/0||h[1]===1/0||h[2]===1/0)&&(_="jump"),f=_===""&&C<this.smoothLevel&&h[3]<this.smooth_threshold,C<this.testLevel&&!f&&(_===""?f=!0:u=this._getLimes(t,r,e,n,l,o,s,_,C)),u!==null?(l=[1,NaN,NaN],this._insertPoint(t,l,n,C,u)):C<=d||f?this._insertPoint(t,l,n,C,null):(x[v++]=[l,n,s,o,C-1,h[0]],x[v++]=[e,r,l,n,C-1,h[0]]))}return this},updateParametricCurve_v3:function(t,e,r){var s,o,a,n,l=!1,h=new coords_default(constants.COORDS_BY_USER,[0,0],t.board,!1),d=new coords_default(constants.COORDS_BY_USER,[0,0],t.board,!1),u=t.evalVisProp("recursiondepthhigh")||17,c,p,f;return this.smoothLevel=7,this.nanLevel=u-4,this.testLevel=4,this.cusp_threshold=.5,this.jump_threshold=.99,this.smooth_threshold=2,t.points=[],t.xterm==="x"?(p=t.board.getBoundingBox(),c=(p[2]-p[0])*.3,s=Math.max(e,p[0]-c),o=Math.min(r,p[2]+c)):(s=e,o=r),h.setCoordinates(constants.COORDS_BY_USER,[t.X(s,l),t.Y(s,l)],!1),l=!0,d.setCoordinates(constants.COORDS_BY_USER,[t.X(o,l),t.Y(o,l)],!1),f=this._findStartPoint(t,h.scrCoords,s,d.scrCoords,o),h.setCoordinates(constants.COORDS_BY_SCREEN,f[0],!1),s=f[1],f=this._findStartPoint(t,d.scrCoords,o,h.scrCoords,s),d.setCoordinates(constants.COORDS_BY_SCREEN,f[0],!1),o=f[1],this._visibleArea=[s,o],a=h.copy("scrCoords"),n=d.copy("scrCoords"),h._t=s,t.points.push(h),this._lastScrCrds=h.copy("scrCoords"),this._lastUsrCrds=h.copy("usrCoords"),this._plotNonRecursive(t,a,s,n,o,u),d._t=o,t.points.push(d),t.numberPoints=t.points.length,t},_criticalInterval:function(t,e,r){var s,o,a,n,l,h,d=!1,u,c=-1/0,p=!1,f=!1,_=0,g=[],m=[],b=[];for(u=statistics_default.abs(t),n=statistics_default.median(u),n<1e-7?(n=1e-7,p=!0):n*=this.criticalThreshold,s=0;s<e;s++)u[s]>n?(b.push({i:s,v:t[s],group:_}),c=s,d||(d=!0)):d&&s>c+4&&(b.length>0&&g.push(b.slice(0)),b=[],d=!1,_++);for(d&&b.length>1&&g.push(b.slice(0)),p&&g.length===0&&(f=!0),o=0;o<g.length;o++)if(m[o]="point",a=g[o].length,!(a<64)){for(h=0,l=Math.sign(g[o][0].v),s=1;s<a;s++)Math.sign(g[o][s].v)!==l&&(h++,l=Math.sign(g[o][s].v));h*6>a&&(m[o]="interval")}return{smooth:f,groups:g,types:m}},Component:function(){this.left_isNaN=!1,this.right_isNaN=!1,this.left_t=null,this.right_t=null,this.t_values=[],this.x_values=[],this.y_values=[],this.len=0},findComponents:function(t,e,r,s){var o,a,n,l,h,d=[],u,c=0,p=0,f=0,_=!1,g=!1;for(n=(r-e)/s,d[c]=new this.Component,u=d[c],o=0,a=e;o<=s;o++,a+=n)l=t.X(a,g),h=t.Y(a,g),isNaN(l)||isNaN(h)?(f++,f>1&&_&&(u.right_isNaN=!0,u.right_t=a-n,u.len=p,_=!1,c++,d[c]=new this.Component,u=d[c],f=0)):(_||(_=!0,p=0,f>0&&(u.left_t=a-n,u.left_isNaN=!0)),f=0,u.t_values[p]=a,u.x_values[p]=l,u.y_values[p]=h,p++),o===0&&(g=!0);return _?u.len=p:d.pop(),d},getPointType:function(t,e,r,s,o,a,n){var l=o[0],h=a[0],d=s.length,u={idx:e,t:r,x:l[e],y:h[e],type:"other"};return e<5?(u.type="borderleft",u.idx=0,u.t=s[0],u.x=l[0],u.y=h[0],u):(e>n-6&&(u.type="borderright",u.idx=d-1,u.t=s[d-1],u.x=l[d-1],u.y=h[d-1]),u)},newtonApprox:function(t,e,r,s,o){var a,n=0;for(a=s;a>0;a--)n=(n+o[a][t])*(e-(a-1)*r)/a;return n+o[0][t]},thiele:function(t,e,r,s,o){var a,n=0;for(a=o;a>1;a--)n=(t-r[s+a])/(e[a][s+1]-e[a-2][s+1]+n);return e[0][s+1]+(t-r[s+1])/(e[1][s+1]+n)},differenceMethodExperiments:function(t,e){var r,s,o,a,n=t.t_values,l=t.x_values,h=t.y_values,d=[],u=[],c=[],p=[],f=[],_=[],g=[],m=[],b,C,y=0,x,v,P,E,w,O=[];for(b=n[1]-n[0],f.push([]),_.push([]),g.push([]),m.push([]),o=h.length,r=0;r<o;r++)f[0][r]=l[r],_[0][r]=h[r],g[0][r]=l[r],m[0][r]=h[r];for(f.push([]),_.push([]),g.push([]),m.push([]),C=b,o=h.length-1,r=0;r<o;r++)d[r]=l[r+1]-l[r],u[r]=h[r+1]-h[r],c[r]=d[r],p[r]=u[r],f[1][r]=d[r],_[1][r]=u[r],g[1][r]=C/d[r],m[1][r]=C/u[r];for(o--,a=Math.min(8,h.length-1),s=1;s<a;s++){for(f.push([]),_.push([]),g.push([]),m.push([]),C*=b,r=0;r<o;r++)d[r]=d[r+1]-d[r],u[r]=u[r+1]-u[r],f[s+1][r]=d[r],_[s+1][r]=u[r],g[s+1][r]=C/(g[s][r+1]-g[s][r])+g[s-1][r+1],m[s+1][r]=C/(m[s][r+1]-m[s][r])+m[s-1][r+1];if(w=this._criticalPoints(u,o,s),w===!1){console.log("Polynomial of degree",s),w=[];break}if(w.length>0&&(y++,y>1&&s%2===0))break;o--}for(r=0;r<w.length;r++){for(v=-1/0,P=0;P<w[r].length;P++)E=Math.abs(w[r][P].v),E>v&&(v=E,x=P);x=Math.floor(w[r][x].i+s/2),O.push(this.getPointType(e,x,n,l,h,c,p,o+1))}return[O,f,_,g,m]},getCenterOfCriticalInterval:function(t,e,r){var s,o,a,n,l=0,h=0,d=r[1]-r[0],u,c=[];for(s=-1/0,c=[],o=0;o<t.length;o++)n=Math.abs(t[o].v),n>s?(c=[o],s=n,a=o):s===n&&c.push(o);if(c.length>0&&(u=c.reduce(function(p,f){return p+f},0)/c.length,a=Math.floor(u),u+=t[0].i),s<1/0){for(o=0;o<t.length;o++)l+=Math.abs(t[o].v)*t[o].i,h+=Math.abs(t[o].v);u=l/h}return u+=e/2,[t[a].i+e/2,u,r[Math.floor(u)]+d*(u-Math.floor(u))]},differenceMethod:function(t,e){var r,s,o,a,n=t.t_values,l=t.x_values,h=t.y_values,d=[],u=[],c=0,p=-1,f=-1,_,g,m,b,C,y=[],x,v=[];for(o=h.length,d.push(new Float64Array(l)),u.push(new Float64Array(h)),o--,a=Math.min(12,o),s=0;s<a&&(d.push(new Float64Array(o)),u.push(new Float64Array(o)),d[s+1]=d[s].map(function(P,E,w){return w[E+1]-P}),u[s+1]=u[s].map(function(P,E,w){return w[E+1]-P}),b=this._criticalInterval(u[s+1],o,s),b.smooth===!0&&(f=s,y=[]),m=this._criticalInterval(d[s+1],o,s),p===-1&&m.smooth===!0&&(p=s),!(f>=0));s++){if(b.groups.length>0&&(c++,c>2&&(s+1)%2===0)){y=b.groups,x=b.types;break}o--}for(r=0;r<y.length;r++)x[r]!=="interval"&&(g=this.getCenterOfCriticalInterval(y[r],s+1,n),_=b[0],_=Math.floor(g[1]),C=g[2],v.push(this.getPointType(e,_,C,n,d,u,o+1)));return[v,d,u,p,f]},_insertPoint_v4:function(t,e,r,s){var o,a=null,n,l,h=.8;t.points.length>0&&(a=t.points[t.points.length-1].scrCoords),o=new coords_default(constants.COORDS_BY_USER,e,t.board),!(a!==null&&(n=o.scrCoords[1]-a[1],l=o.scrCoords[2]-a[2],n*n+l*l<h*h))&&(o._t=r,t.points.push(o))},getInterval:function(t,e,r){var s,o;return ia_default.disable(),s=ia_default.Interval(e,r),t.board.mathLib=ia_default,t.board.mathLibJXG=ia_default,o=t.Y(s,!0),t.board.mathLib=Math,t.board.mathLibJXG=jxg_default.Math,o},sign:function(t){return t<0?-1:t>0?1:0},handleBorder:function(t,e,r,s,o){var a=r.idx,n,l,h,d=32,u,c,p,f,_,g,m,b,C=e.t_values[1]-e.t_values[0];if(r.type==="borderleft"?(n=e.left_isNaN?e.left_t:r.t-C,l=n,h=l+C):r.type==="borderright"?(n=e.right_isNaN?e.right_t:r.t+C,h=n,l=h-C):console.log("No bordercase!!!"),m=this.findComponents(t,l,h,d),m.length!==0){for(r.type==="borderleft"&&(l=m[0].left_t,h=m[0].t_values[0],C=m[0].t_values[1]-m[0].t_values[0],l=l===null?h-C:l,n=l,u=this.getInterval(t,l,h),type_default.isObject(u)&&(f=u.lo,_=u.hi,c=t.X(n,!0),p=o[1][a]<0?_:f,this._insertPoint_v4(t,[1,c,p],n))),b=m[0].t_values.length,g=0;g<b;g++)n=m[0].t_values[g],c=m[0].x_values[g],p=m[0].y_values[g],this._insertPoint_v4(t,[1,c,p],n);r.type==="borderright"&&(l=m[0].t_values[b-1],h=m[0].right_t,C=m[0].t_values[1]-m[0].t_values[0],h=h===null?l+C:h,n=h,u=this.getInterval(t,l,h),type_default.isObject(u)&&(f=u.lo,_=u.hi,c=t.X(n,!0),p=o[1][a]>0?_:f,this._insertPoint_v4(t,[1,c,p],n)))}},_seconditeration_v4:function(t,e,r,s,o){for(var a,n=e.t_values[r.idx-2],l=e.t_values[r.idx+2],h,d=this.findComponents(t,n,l,64),u,c=0,p,f,_,g,m,b;c<d.length;c++){for(u=d[c],h=this.differenceMethod(u,t),p=h[0],_=h[1],g=h[2],m=0,f=0;f<=p.length;f++){for(f===p.length?b=u.len:b=p[f].idx,a=m;a<b;a++)!isNaN(u.x_values[a])&&!isNaN(u.y_values[a])&&this._insertPoint_v4(t,[1,u.x_values[a],u.y_values[a]],u.t_values[a]);f<p.length&&(this.handleSingularity(t,u,p[f],_,g),m=p[f].idx+1)}b=u.len,c<d.length-1&&this._insertPoint_v4(t,[1,NaN,NaN],u.right_t)}return this},_recurse_v4:function(t,e,r,s,o,a,n,l){var h=2,d=(e+r)*.5,u=t.X(d,!0),c=t.Y(d,!0),p,f;if(l===0){this._insertPoint_v4(t,[1,NaN,NaN],d);return}p=(u-s)*t.board.unitX,f=(c-o)*t.board.unitY,math_default.hypot(p,f)>h?this._recurse_v4(t,e,d,s,o,u,c,l-1):this._insertPoint_v4(t,[1,u,c],d),p=(u-a)*t.board.unitX,f=(c-n)*t.board.unitY,math_default.hypot(p,f)>h?this._recurse_v4(t,d,r,u,c,a,n,l-1):this._insertPoint_v4(t,[1,u,c],d)},handleSingularity:function(t,e,r,s,o){var a=r.idx,n,l,h,d,u,c,p,f,_,g,m,b=100,C=5,y=3;n=r.t,console.log("HandleSingularity at t =",n),l=e.t_values[a-C],h=e.t_values[a+C],d=this.getInterval(t,l,h),type_default.isObject(d)?(f=d.lo,_=d.hi):o[0][a-1]<o[0][a+1]?(f=o[0][a-1],_=o[0][a+1]):(f=o[0][a+1],_=o[0][a-1]),p=t.X(n,!0),g=(o[0][a-y]-o[0][a-C])/(e.t_values[a-y]-e.t_values[a-C]),m=(o[0][a+y]-o[0][a+C])/(e.t_values[a+y]-e.t_values[a+C]),console.log(":::",g,m),g<-b?(this._insertPoint_v4(t,[1,p,f],n,!0),m<=b&&this._insertPoint_v4(t,[1,NaN,NaN],n)):g>b?(this._insertPoint_v4(t,[1,p,_],n),m>=-b&&this._insertPoint_v4(t,[1,NaN,NaN],n)):(f===-1/0&&(this._insertPoint_v4(t,[1,p,f],n,!0),this._insertPoint_v4(t,[1,NaN,NaN],n)),_===1/0&&(this._insertPoint_v4(t,[1,NaN,NaN],n),this._insertPoint_v4(t,[1,p,_],n,!0)),r.t<e.t_values[a]?(u=a-1,c=a):(u=a,c=a+1),l=e.t_values[u],h=e.t_values[c],this._recurse_v4(t,l,h,s[0][u],o[0][u],s[0][c],o[0][c],10)),m<-b?this._insertPoint_v4(t,[1,p,_],n):m>b&&this._insertPoint_v4(t,[1,p,f],n)},steps:1021,criticalThreshold:1e3,plot_v4:function(t,e,r,s){var o,a,n,l,h,d,u,c,p,f,_,g,m,b,C,y=(r-e)/s,x=function(E){return t.Y(E,!0)},v=function(E){return-t.Y(E,!0)},P=y*.5;for(n=this.findComponents(t,e,r,s),l=0;l<n.length;l++){for(h=n[l],p=this.differenceMethod(h,t),d=p[0],f=p[1],_=p[2],(d.length===0||d[0].type!=="borderleft")&&d.unshift({idx:0,t:h.t_values[0],x:h.x_values[0],y:h.y_values[0],type:"borderleft"}),d[d.length-1].type!=="borderright"&&(a=h.t_values.length,d.push({idx:a-1,t:h.t_values[a-1],x:h.x_values[a-1],y:h.y_values[a-1],type:"borderright"})),c=0,u=0;u<=d.length;u++){for(u===d.length?a=h.len:a=d[u].idx-1,o=c;o<a-2;o++)this._insertPoint_v4(t,[1,h.x_values[o],h.y_values[o]],h.t_values[o]),o>=c+3&&o<a-3&&_.length>3&&Math.abs(_[2][o])>.2*Math.abs(_[0][o])&&(g=h.t_values[o],P=y*.25,C=this.getInterval(t,g,g+y),type_default.isObject(C)?_[2][o]>0?this._insertPoint_v4(t,[1,g+P,C.lo],g+P):this._insertPoint_v4(t,[1,g+y-P,C.hi],g+y-P):(m=numerics_default.fminbr(x,[g,g+y]),b=numerics_default.fminbr(v,[g,g+y]),m<b?(this._insertPoint_v4(t,[1,t.X(m,!0),t.Y(m,!0)],m),this._insertPoint_v4(t,[1,t.X(b,!0),t.Y(b,!0)],b)):(this._insertPoint_v4(t,[1,t.X(b,!0),t.Y(b,!0)],b),this._insertPoint_v4(t,[1,t.X(m,!0),t.Y(m,!0)],m))));u<d.length&&(o=d[u].idx,d[u].type==="borderleft"||d[u].type==="borderright"?this.handleBorder(t,h,d[u],f,_):this._seconditeration_v4(t,h,d[u],f,_),c=d[u].idx+1+1)}a=h.len,l<n.length-1&&this._insertPoint_v4(t,[1,NaN,NaN],h.right_t)}},updateParametricCurve_v4:function(t,e,r){var s,o,a,n;t.xterm==="x"?(n=t.board.getBoundingBox(),a=(n[2]-n[0])*.3,s=Math.max(e,n[0]-a),o=Math.min(r,n[2]+a)):(s=e,o=r),t.points=[],this.plot_v4(t,s,o,this.steps),t.numberPoints=t.points.length},updateParametricCurve:function(t,e,r){return this.updateParametricCurve_v2(t,e,r)}};var plot_default=math_default.Plot;math_default.ImplicitPlot=function(t,e,r,s,o){var a={resolution_out:5,resolution_in:5,max_steps:1024,alpha_0:.05,tol_u0:math_default.eps,tol_newton:1e-7,tol_cusp:.05,tol_progress:1e-4,qdt_box:.2,kappa_0:.2,delta_0:.05,h_initial:.1,h_critical:.001,h_max:1,loop_dist:.09,loop_dir:.99,loop_detection:!0,unitX:10,unitY:10};this.config=type_default.merge(a,e),this.f=r,this.dfx=null,this.dfy=null,type_default.isFunction(s)?this.dfx=s:this.dfx=function(n,l){var h=math_default.eps*math_default.eps;return(this.f(n+h,l)-this.f(n-h,l))*.5/h},type_default.isFunction(o)?this.dfy=o:this.dfy=function(n,l){var h=math_default.eps*math_default.eps;return(this.f(n,l+h)-this.f(n,l-h))*.5/h},this.bbox=t,this.qdt=new bqdt_default(20,5,t),this.components=[]};type_default.extend(math_default.ImplicitPlot.prototype,{plot:function(){var t=!0,e=!0,r,s,o,a,n,l,h=[],d=[],u=[],c=0,p=8,f,_=this,g=function(y){return _.f(r,y)},m=function(y){return-_.f(r,y)},b=function(y){return _.f(y,s)},C=function(y){return-_.f(y,s)};if(o=Math.min(this.bbox[0],this.bbox[2])-math_default.eps,a=Math.max(this.bbox[0],this.bbox[2]),n=Math.min(this.bbox[1],this.bbox[3])+math_default.eps,l=Math.max(this.bbox[1],this.bbox[3]),t)for(f=this.config.resolution_out/this.config.unitX,f*=1+math_default.eps,r=o;r<a;r+=f)u=this.searchLine(g,m,r,[n,l],"vertical",c,h,d,p),u!==!1&&(h=u[0],d=u[1],c=u[2]);if(e)for(f=this.config.resolution_out/this.config.unitY,f*=1+math_default.eps,s=n;s<l;s+=f)u=this.searchLine(b,C,s,[o,a],"horizontal",c,h,d,p),u!==!1&&(h=u[0],d=u[1],c=u[2]);return[h,d,c]},searchLine:function(t,e,r,s,o,a,n,l,h){var d,u,c,p,f,_,g,m,b,C,y,x,v,P,E,w=this.config.tol_u0,O=!1,S=s[0],M=s[1];if(d=numerics_default.fminbr(t,[S,M]),f=t(d),u=numerics_default.fminbr(e,[S,M]),_=t(u),f<w&&_>-w){if(g=d,d=Math.min(g,u),u=Math.max(g,u),c=numerics_default.fzero(t,[d,u]),p=t(c),Math.abs(p)>Math.max((_-f)*math_default.eps,.001))return!1;if(o==="vertical"?(C=[1,r,c],E=this.config.resolution_in/this.config.unitY):(C=[1,c,r],E=this.config.resolution_in/this.config.unitX),E*=1+math_default.eps,b=this.curveContainsPoint(C,n,l,E*2,this.config.qdt_box),!b){if(v=this.traceComponent(C,1),v[0].length>0){for(a>0&&(n.push(NaN),l.push(NaN)),P=n.length,x=v[0].length,y=1;y<x;y++)this.qdt.insertItem({xlb:Math.min(v[0][y-1],v[0][y]),xub:Math.max(v[0][y-1],v[0][y]),ylb:Math.min(v[1][y-1],v[1][y]),yub:Math.max(v[1][y-1],v[1][y]),idx1:P+y-1,idx2:P+y,comp:a});a++,type_default.concat(n,v[0]),type_default.concat(l,v[1])}}return m=c-E*.01,m-S>E&&h>0&&(v=this.searchLine(t,e,r,[S,m],o,a,n,l,h-1),v!==!1&&(n=v[0],l=v[1],a=v[2])),m=c+E*.01,M-m>E&&h>0&&(v=this.searchLine(t,e,r,[m,M],o,a,n,l,h-1),v!==!1&&(n=v[0],l=v[1],a=v[2])),[n,l,a]}return!1},curveContainsPoint:function(t,e,r,s,o){var a,n,l,h,d=t[1],u=t[2];for(l=this.qdt.find([d-o,u+o,d+o,u-o]),n=l.length,a=0;a<n;a++)if(h=geometry_default.distPointSegment(t,[1,e[l[a].idx1],r[l[a].idx1]],[1,e[l[a].idx2],r[l[a].idx2]]),h<s)return!0;return!1},traceComponent:function(t){var e=[],r=[],s=[];return s=this.tracing(t,1),s.length===0||(e=s[0],r=s[1]),s[2]||(s=this.tracing(t,-1),s.length===0||(e=s[0].reverse().concat(e.slice(1)),r=s[1].reverse().concat(r.slice(1)))),e.length>0&&e.length<6&&(e.push(e[e.length-1]),r.push(r[r.length-1])),[e,r]},tracing:function(t,e){var r=[],s=[],o,a=[],n=[],l=[],h,d,u,c,p,f,_,g,m=0,b=0,C=!1,y,x,v,P,E,w,O,S,M,N=!1,j=!1,k=!1,B=this.config.kappa_0,I=this.config.delta_0,X=this.config.alpha_0,J=this.config.h_initial,Y=this.config.max_steps,F=e,D=[],A=[],T=[],U,V,K,H;if(r=t.slice(1),D.push(r[0]),A.push(r[1]),h=this.tangent(r),h===!1)return[];p=[this.dfx(r[0],r[1]),this.dfy(r[0],r[1])];do{if(j?h=this.tangent_A(p):h=this.tangent(r),h===!1){r=a.slice(),D.push(r[0]),A.push(r[1]);break}if(D.length===1)u=h.slice();else if(D.length===2)T.push(D.length-1);else if(N&&D.length>2&&!k){if(P=geometry_default.distPointSegment([1,r[0],r[1]],[1,D[0],A[0]],[1,D[1],A[1]]),P<this.config.loop_dist*J&&math_default.innerProduct(h,u,2)>this.config.loop_dir){r=t.slice(1),D.push(r[0]),A.push(r[1]),C=!0;break}if(this.config.loop_detection){for(U=D.length-1,V=Math.floor(math_default.log2(U)),K=0;K<=V&&(P=geometry_default.distPointSegment([1,r[0],r[1]],[1,D[T[K]-1],A[T[K]-1]],[1,D[T[K]],A[T[K]]]),!(P<this.config.loop_dist*J&&(d=this.tangent([D[T[K]],A[T[K]]]),math_default.innerProduct(h,d,2)>this.config.loop_dir)));K++);if(K<=V){C=!0;break}for(V=1,H=0,K=0;K<100&&(U+1)%V===0;K++)V*=2,H++;T[H]=U}}a[0]=r[0]+J*F*h[0],a[1]=r[1]+J*F*h[1],b=0;do j?f=p:f=[this.dfx(a[0],a[1]),this.dfy(a[0],a[1])],v=f[0]*f[0]+f[1]*f[1],_=this.f(a[0],a[1])/v,l[0]=a[0]-f[0]*_,l[1]=a[1]-f[1]*_,b===0?y=Math.abs(_)*Math.sqrt(v):b===1&&(x=Math.abs(_)*Math.sqrt(v)),a[0]=l[0],a[1]=l[1],b++;while(b<20&&Math.abs(this.f(a[0],a[1]))>this.config.tol_newton);if(O=y,b>1?w=x/y:w=0,j?(p=this.updateA(p,n,a),d=this.tangent_A(p)):d=this.tangent(a),g=math_default.innerProduct(h,d,2),g=Math.max(-1,Math.min(1,g)),S=Math.acos(g),k=!1,E=geometry_default.distance(r,a,2),E<this.config.tol_progress){r=a.slice(),D.push(r[0]),A.push(r[1]);break}else if(g<0&&!(J>this.config.h_critical))if(k=!0,this.isBifurcation(r,this.config.tol_cusp))F*=-1,S=0;else{r=a.slice(),D.push(r[0]),A.push(r[1]);break}if(!k&&(M=Math.max(Math.sqrt(w/B),Math.sqrt(O/I),S/X),isNaN(M)&&(M=1),M=Math.max(Math.min(M,2),.5),J/=M,J=Math.min(this.config.h_max,J),M>=2)){if(m++,m>=3*Y)break;N=!1;continue}r=a.slice(),D.push(r[0]),A.push(r[1]),N=!0,m++}while(m<Y&&r[0]>=this.bbox[0]&&r[1]<=this.bbox[1]&&r[0]<=this.bbox[2]&&r[1]>=this.bbox[3]);return o=D.length,s=[D[o-2],A[o-2]],r[0]<this.bbox[0]&&(r[0]!==s[0]&&(c=(this.bbox[0]-s[0])/(r[0]-s[0]),r[1]!==s[1]&&(r[1]=s[1]+c*(r[1]-s[1]))),r[0]=this.bbox[0]),r[0]>this.bbox[2]&&(r[0]!==s[0]&&(c=(this.bbox[2]-s[0])/(r[0]-s[0]),r[1]!==s[1]&&(r[1]=s[1]+c*(r[1]-s[1]))),r[0]=this.bbox[2]),r[1]<this.bbox[3]&&(r[1]!==s[1]&&(c=(this.bbox[3]-s[1])/(r[1]-s[1]),r[0]!==s[0]&&(r[0]=s[0]+c*(r[0]-s[0]))),r[1]=this.bbox[3]),r[1]>this.bbox[1]&&(r[1]!==s[1]&&(c=(this.bbox[1]-s[1])/(r[1]-s[1]),r[0]!==s[0]&&(r[0]=s[0]+c*(r[0]-s[0]))),r[1]=this.bbox[1]),D[o-1]=r[0],A[o-1]=r[1],[D,A,C]},isBifurcation:function(t,e){var r=math_default.eps*math_default.eps*100,s=t[0],o=t[1],a=.5*(this.dfx(s+r,o)-this.dfx(s-r,o))/r,n=.5*(this.dfx(s,o+r)-this.dfx(s,o-r))/r,l=.5*(this.dfy(s+r,o)-this.dfy(s-r,o))/r,h=.5*(this.dfy(s,o+r)-this.dfy(s,o-r))/r,d=a+h,u,c,p=d*d-4*(a*h-n*l);return u=.5*(d+Math.sqrt(p)),c=.5*(d-Math.sqrt(p)),Math.abs(u)>e&&Math.abs(c)>e},handleCriticalPoint:function(t,e,r,s){var o=Math.atan2(s*e[1],s*e[0]),a=function(d){var u=t[0]+r*Math.cos(d),c=t[1]+r*Math.sin(d);return this.f(u,c)},n,l,h=numerics_default.root(a,o);return n=t[0]+r*Math.cos(h),l=t[1]+r*Math.sin(h),[n,l]},updateA:function(t,e,r){var s=[r[0]-e[0],r[1]-e[1]],o=this.f(r[0],r[1])-this.f(e[0],e[1]),a,n=s[0]*s[0]+s[1]*s[1];return a=o-(t[0]*s[0]+t[1]*s[1]),a/=n,t[0]+=a*s[0],t[1]+=a*s[1],t},tangent_A:function(t){var e=[-t[1],t[0]],r=math_default.norm(e,2);return math_default.eps,[e[0]/r,e[1]/r]},tangent:function(t){var e=[-this.dfy(t[0],t[1]),this.dfx(t[0],t[1])],r=math_default.norm(e,2);return r<math_default.eps*math_default.eps?!1:[e[0]/r,e[1]/r]}});var implicitplot_default=math_default.ImplicitPlot;math_default.Metapost={MP_ENDPOINT:0,MP_EXPLICIT:1,MP_GIVEN:2,MP_CURL:3,MP_OPEN:4,MP_END_CYCLE:5,UNITY:1,FRACTION_ONE:1,FRACTION_THREE:3,ONE_EIGHTY_DEG:Math.PI,THREE_SIXTY_DEG:2*Math.PI,EPS_SQ:1e-5*1e-5,make_choices:function(t){var e,r,s,o,a,n,l,h,d,u,c,p,f,_,g,m=!0;l=t[0];do{if(!l)break;n=l.next,l.rtype>this.MP_EXPLICIT&&(l.x-n.x)*(l.x-n.x)+(l.y-n.y)*(l.y-n.y)<this.EPS_SQ&&(l.rtype=this.MP_EXPLICIT,l.ltype===this.MP_OPEN&&(l.ltype=this.MP_CURL,l.set_left_curl(this.UNITY)),n.ltype=this.MP_EXPLICIT,n.rtype===this.MP_OPEN&&(n.rtype=this.MP_CURL,n.set_right_curl(this.UNITY)),l.rx=l.x,n.lx=l.x,l.ry=l.y,n.ly=l.y),l=n}while(l!==t[0]);for(r=t[0];m&&!(r.ltype!==this.MP_OPEN||r.rtype!==this.MP_OPEN);)if(r=r.next,r===t[0]){r.ltype=this.MP_END_CYCLE;break}for(l=r;m&&l;){if(n=l.next,l.rtype>=this.MP_GIVEN){for(;n.ltype===this.MP_OPEN&&n.rtype===this.MP_OPEN;)n=n.next;for(s=0,h=l,a=t.length,p=[],f=[],_=[],g=[null];m&&(u=h.next,p.push(u.x-h.x),f.push(u.y-h.y),_.push(this.mp_pyth_add(p[s],f[s])),s>0&&(c=f[s-1]/_[s-1],d=p[s-1]/_[s-1],g.push(Math.atan2(f[s]*d-p[s]*c,p[s]*d+f[s]*c))),s++,h=u,h===n&&(a=s),!(s>=a&&h.ltype!==this.MP_END_CYCLE)););s===a?g.push(0):g.push(g[1]),n.ltype===this.MP_OPEN&&(o=n.rx-n.x,e=n.ry-n.y,o*o+e*e<this.EPS_SQ?(n.ltype=this.MP_CURL,n.set_left_curl(this.UNITY)):(n.ltype=this.MP_GIVEN,n.set_left_given(Math.atan2(e,o)))),l.rtype===this.MP_OPEN&&l.ltype===this.MP_EXPLICIT&&(o=l.x-l.lx,e=l.y-l.ly,o*o+e*e<this.EPS_SQ?(l.rtype=this.MP_CURL,l.set_right_curl(this.UNITY)):(l.rtype=this.MP_GIVEN,l.set_right_given(Math.atan2(e,o)))),this.mp_solve_choices(l,n,a,p,f,_,g)}else l.rtype===this.MP_ENDPOINT&&(l.rx=l.x,l.ry=l.y,n.lx=n.x,n.ly=n.y);if(l=n,l===r)break}},mp_solve_choices:function(t,e,r,s,o,a,n){var l,h,d,u,c,p,f,_,g,m,b,C,y,x,v,P,E,w,O,S,M,N,j,k,B,I,X=!0;for(c=a.length+1,m=new Array(c),g=new Array(c),d=new Array(c),v=new Array(c),B=0;B<c;B++)v[B]=d[B]=g[B]=m[B]=0;for(f=0,_=t,C=0;X;){if(y=_.next,f===0)if(_.rtype===this.MP_GIVEN){if(y.ltype===this.MP_GIVEN){l=Math.atan2(o[0],s[0]),O=this.mp_n_sin_cos(t.right_given()-l),S=O[0],M=O[1],N=this.mp_n_sin_cos(e.left_given()-l),j=N[0],k=N[1],this.mp_set_controls(t,e,s[0],o[0],M,S,-k,j);return}d[0]=_.right_given()-Math.atan2(o[0],s[0]),d[0]=this.reduce_angle(d[0]),m[0]=0,g[0]=0}else if(_.rtype===this.MP_CURL){if(y.ltype===this.MP_CURL){t.rtype=this.MP_EXPLICIT,e.ltype=this.MP_EXPLICIT,b=Math.abs(e.left_tension()),P=Math.abs(t.right_tension()),x=this.UNITY/(3*P),t.rx=t.x+s[0]*x,t.ry=t.y+o[0]*x,x=this.UNITY/(3*b),e.lx=e.x-s[0]*x,e.ly=e.y-o[0]*x;return}w=_.right_curl(),b=Math.abs(y.left_tension()),P=Math.abs(_.right_tension()),m[0]=this.mp_curl_ratio(w,P,b),d[0]=-n[1]*m[0],g[0]=0}else _.rtype===this.MP_OPEN&&(m[0]=0,d[0]=0,g[0]=this.FRACTION_ONE);else if(_.ltype===this.MP_END_CYCLE||_.ltype===this.MP_OPEN){if(l=this.UNITY/(3*Math.abs(C.right_tension())-this.UNITY),E=a[f]*(this.FRACTION_THREE-this.UNITY/Math.abs(C.right_tension())),u=this.UNITY/(3*Math.abs(y.left_tension())-this.UNITY),p=a[f-1]*(this.FRACTION_THREE-this.UNITY/Math.abs(y.left_tension())),w=this.FRACTION_ONE-m[f-1]*l,E=E*w,b=Math.abs(_.left_tension()),P=Math.abs(_.right_tension()),b<P?E*=Math.pow(b/P,2):b>P&&(p*=Math.pow(P/b,2)),x=p/(p+E),m[f]=x*u,h=-n[f+1]*m[f],C.rtype===this.MP_CURL?(g[f]=0,d[f]=h-n[1]*(this.FRACTION_ONE-x)):(x=(this.FRACTION_ONE-x)/w,h=h-n[f]*x,x=x*l,d[f]=h-d[f-1]*x,g[f]=-g[f-1]*x),_.ltype===this.MP_END_CYCLE){for(l=0,u=this.FRACTION_ONE;X&&(f-=1,f===0&&(f=r),l=d[f]-l*m[f],u=g[f]-u*m[f],f!==r););for(l=l/(this.FRACTION_ONE-u),v[r]=l,d[0]=l,I=1;I<r;I++)d[I]=d[I]+l*g[I];break}}else{if(_.ltype===this.MP_CURL){w=_.left_curl(),b=Math.abs(_.left_tension()),P=Math.abs(C.right_tension()),x=this.mp_curl_ratio(w,b,P),v[r]=-(d[r-1]*x)/(this.FRACTION_ONE-x*m[r-1]);break}if(_.ltype===this.MP_GIVEN){v[r]=_.left_given()-Math.atan2(o[r-1],s[r-1]),v[r]=this.reduce_angle(v[r]);break}}C=_,_=y,f+=1}for(f=r-1;f>-1;f--)v[f]=d[f]-v[f+1]*m[f];for(_=t,f=0;X&&(y=_.next,O=this.mp_n_sin_cos(v[f]),S=O[0],M=O[1],N=this.mp_n_sin_cos(-n[f+1]-v[f+1]),j=N[0],k=N[1],this.mp_set_controls(_,y,s[f],o[f],M,S,k,j),f++,_=y,f!==r););},mp_n_sin_cos:function(t){return[Math.cos(t),Math.sin(t)]},mp_set_controls:function(t,e,r,s,o,a,n,l){var h,d,u=Math.abs(e.left_tension()),c,p;h=Math.abs(t.right_tension()),p=this.mp_velocity(o,a,n,l,h),d=this.mp_velocity(n,l,o,a,u),(t.right_tension()<0||e.left_tension()<0)&&(o>=0&&n>=0||o<=0&&n<=0)&&(c=Math.abs(o)*l+Math.abs(n)*a,c>0&&(c*=1.00024414062,t.right_tension()<0&&this.mp_ab_vs_cd(Math.abs(n),this.FRACTION_ONE,p,c)<0&&(p=Math.abs(n)/c),e.left_tension()<0&&this.mp_ab_vs_cd(Math.abs(o),this.FRACTION_ONE,d,c)<0&&(d=Math.abs(o)/c))),t.rx=t.x+(r*a-s*o)*p,t.ry=t.y+(s*a+r*o)*p,e.lx=e.x-(r*l+s*n)*d,e.ly=e.y-(s*l-r*n)*d,t.rtype=this.MP_EXPLICIT,e.ltype=this.MP_EXPLICIT},mp_pyth_add:function(t,e){return math_default.hypot(t,e)},mp_curl_ratio:function(t,e,r){var s=1/e,o=1/r;return Math.min(4,((3-s)*s*s*t+o*o*o)/(s*s*s*t+(3-o)*o*o))},mp_ab_vs_cd:function(t,e,r,s){return t*e===r*s?0:t*e>r*s?1:-1},mp_velocity:function(t,e,r,s,o){return Math.min(4,(2+Math.sqrt(2)*(t-r/16)*(r-t/16)*(e-s))/(1.5*o*(2+(Math.sqrt(5)-1)*e+(3-Math.sqrt(5))*s)))},reduce_angle:function(t){return Math.abs(t)>this.ONE_EIGHTY_DEG&&(t>0?t-=this.THREE_SIXTY_DEG:t+=this.THREE_SIXTY_DEG),t},makeknots:function(t,e){var r,s,o=[];for(s=t.length,r=0;r<s;r++)o.push({x:t[r][0],y:t[r][1],ltype:this.MP_OPEN,rtype:this.MP_OPEN,lx:!1,rx:!1,ly:e,ry:e,left_curl:function(){return this.lx||0},right_curl:function(){return this.rx||0},left_tension:function(){return this.ly||1},right_tension:function(){return this.ry||1},set_right_curl:function(a){this.rx=a||0},set_left_curl:function(a){this.lx=a||0}});for(s=o.length,r=0;r<s;r++)o[r].next=o[r+1]||o[r],o[r].set_right_given=o[r].set_right_curl,o[r].set_left_given=o[r].set_left_curl,o[r].right_given=o[r].right_curl,o[r].left_given=o[r].left_curl;return o[s-1].next=o[0],o},curve:function(t,e){var r,s,o,a,n,l,h=!1,d=[],u=[];e=e||{tension:1,direction:{},curl:{},isClosed:!1},n=1,e.hasOwnProperty("tension")&&(n=type_default.evaluate(e.tension)),r=this.makeknots(t,n),s=r.length,type_default.exists(e.isClosed)&&type_default.evaluate(e.isClosed)&&(h=!0),h||(r[0].ltype=this.MP_ENDPOINT,r[0].rtype=this.MP_CURL,r[s-1].rtype=this.MP_ENDPOINT,r[s-1].ltype=this.MP_CURL);for(a in e)if(e.hasOwnProperty(a)){if(o=parseInt(a,10),isNaN(o)||o<0||o>=s)continue;l=e[o],type_default.exists(l.type)&&l.type==="curl"&&(n=type_default.evaluate(l.curl),o===0?(r[o].rtype=this.MP_CURL,r[o].set_right_curl(n)):o===s-1?(r[o].ltype=this.MP_CURL,r[o].set_left_curl(n)):(r[o].ltype=this.MP_CURL,r[o].rtype=this.MP_CURL,r[o].lx=n,r[o].rx=n)),type_default.exists(l.direction)&&(n=type_default.evaluate(l.direction),type_default.isArray(n)?(n[0]!==!1&&(r[o].lx=n[0]*Math.PI/180,r[o].ltype=this.MP_GIVEN),n[1]!==!1&&(r[o].rx=n[1]*Math.PI/180,r[o].rtype=this.MP_GIVEN)):(r[o].lx=n*Math.PI/180,r[o].rx=n*Math.PI/180,r[o].ltype=r[o].rtype=this.MP_GIVEN)),type_default.exists(l.tension)&&(n=type_default.evaluate(l.tension),type_default.isArray(n)?(n[0]!==!1&&(r[o].ly=type_default.evaluate(n[0])),n[1]!==!1&&(r[o].ry=type_default.evaluate(n[1]))):(r[o].ly=n,r[o].ry=n))}for(this.make_choices(r),o=0;o<s-1;o++)d.push(r[o].x),d.push(r[o].rx),d.push(r[o+1].lx),u.push(r[o].y),u.push(r[o].ry),u.push(r[o+1].ly);return d.push(r[s-1].x),u.push(r[s-1].y),h&&(d.push(r[s-1].rx),u.push(r[s-1].ry),d.push(r[0].lx),u.push(r[0].ly),d.push(r[0].x),u.push(r[0].y)),[d,u]}};var metapost_default=math_default.Metapost;math_default.Clip={_isSeparator:function(t){return isNaN(t.coords.usrCoords[1])&&isNaN(t.coords.usrCoords[2])},makeDoublyLinkedList:function(t){var e,r=null,s=[],o=t.length;if(o>0)for(e=0;e<o;e++){if(this._isSeparator(t[e])){t[e]._next=t[(e+1)%o],t[e]._prev=t[(o+e-1)%o];continue}r===null&&(r=e,s.push(r)),this._isSeparator(t[(e+1)%o])||e===o-1?(t[e]._next=t[r],t[r]._prev=t[e],t[e]._end=!0,r=null):(t[e]._next=t[(e+1)%o],t[r]._prev=t[e]),this._isSeparator(t[(o+e-1)%o])||(t[e]._prev=t[(o+e-1)%o])}return s},Vertex:function(t,e,r,s,o,a){this.pos=e,this.intersection=!0,this.coords=t,this.elementClass=constants.OBJECT_CLASS_POINT,this.data={alpha:r,path:s,pathname:o,done:!1,type:a,idx:0},this.neighbour=null,this.entry_exit=!1},_addToList:function(t,e,r){var s=t.length,o=math_default.eps*math_default.eps;s>0&&Math.abs(t[s-1].coords.usrCoords[0]-e.usrCoords[0])<o&&Math.abs(t[s-1].coords.usrCoords[1]-e.usrCoords[1])<o&&Math.abs(t[s-1].coords.usrCoords[2]-e.usrCoords[2])<o||t.push({pos:r,intersection:!1,coords:e,elementClass:constants.OBJECT_CLASS_POINT})},sortIntersections:function(t){var e,r,s,o,a,n,l=[],h=t.length;for(e=0;e<h;e++)if(t[e].sort(function(d,u){return d.data.alpha>u.data.alpha?1:-1}),t[e].length>0){for(a=t[e].length-1,s=t[e][0],o=s.data.path[s.pos],n=o._next,e===h-1&&(o._end=!1),s.data.alpha===0&&s.data.type==="T"?(o.intersection=!0,o.data=s.data,o.neighbour=s.neighbour,o.neighbour.neighbour=o,o.entry_exit=!1,t[e][0]=o):(s._prev=o,s._prev._next=s),r=1;r<=a;r++)s=t[e][r],s._prev=t[e][r-1],s._prev._next=s;s=t[e][a],s._next=n,s._next._prev=s,e===h-1&&(s._end=!0),l=l.concat(t[e])}return l},_inbetween:function(t,e,r){var s,o=math_default.eps*math_default.eps,a=r[1]-e[1],n=r[2]-e[2],l=t[1]-e[1],h=t[2]-e[2];return a===0&&n===0&&l===0&&h===0?!0:(Math.abs(l)<o&&Math.abs(a)<o?s=h/n:s=l/a,Math.abs(s)<o&&(s=0),s)},_print_array:function(t){for(var e=0,r;e<t.length;e++)try{r="",t[e]._end&&(r=" end"),console.log(e,t[e].coords.usrCoords,t[e].data.type," ","prev",t[e]._prev.coords.usrCoords,"next",t[e]._next.coords.usrCoords+r)}catch{console.log(e,t[e].coords.usrCoords)}},_print_list:function(t){for(var e=0,r;e<100&&(t.data?r=t.data.alpha:r="-",console.log(" ",t.coords.usrCoords,`
10
+ is:`,t.intersection,"end:",t._end,r,`
11
+ -:`,t._prev.coords.usrCoords,`
12
+ +:`,t._next.coords.usrCoords,`
13
+ n:`,t.intersection?t.neighbour.coords.usrCoords:"-"),!t._end);)t=t._next,e++},_noOverlap:function(t,e,r,s){var o,a=Math.sqrt(math_default.eps),n,l,h,d,u=!1;for(o=0;o<3;o++)if(n=Math.min(t[o],e[o]),l=Math.max(t[o],e[o]),h=Math.min(r[o],s[o]),d=Math.max(r[o],s[o]),l<h-a||n>d+a){u=!0;break}return u},findIntersections:function(t,e,r){var s=[],o=math_default.eps*100,a,n,l,h=t.length,d=e.length,u,c,p,f,_,g,m,b,C,y,x=[],v=[],P=[],E=[],w=!1,O=!1,S=!1;for(n=0;n<d;n++)E.push([]);for(a=0;a<h;a++){if(P.push([]),this._isSeparator(t[a])||this._isSeparator(t[(a+1)%h])){w=!0;continue}if(w&&a===h-1)break;for(u=t[a].coords.usrCoords,c=t[(a+1)%h].coords.usrCoords,n=0;n<d;n++){if(this._isSeparator(e[n])||this._isSeparator(e[(n+1)%d])){O=!0;continue}if(O&&n===d-1)break;if(p=e[n].coords.usrCoords,f=e[(n+1)%d].coords.usrCoords,!this._noOverlap(u,c,p,f)&&(s=geometry_default.meetSegmentSegment(u,c,p,f),_=geometry_default.distance(u,c,3),g=geometry_default.distance(p,f,3),s[1]*_>-o&&s[1]<1-o/_&&s[2]*g>-o&&s[2]<1-o/g||s[1]===1/0&&s[2]===1/0&&math_default.norm(s[0],3)<o)){if(l=new coords_default(constants.COORDS_BY_USER,s[0],r),b="X",Math.abs(s[1])*_<o||Math.abs(s[2])*g<o)b="T",Math.abs(s[1])*_<o&&(s[1]=0),Math.abs(s[2])*g<o&&(s[2]=0),s[1]===0?l=new coords_default(constants.COORDS_BY_USER,u,r):l=new coords_default(constants.COORDS_BY_USER,p,r);else if(s[1]===1/0&&s[2]===1/0&&math_default.norm(s[0],3)<o){m=this._inbetween(u,p,f),m>=0&&m<1&&(b="T",l=new coords_default(constants.COORDS_BY_USER,u,r),s[1]=0,s[2]=m,C=new this.Vertex(l,a,s[1],t,"S",b),y=new this.Vertex(l,n,s[2],e,"C",b),C.neighbour=y,y.neighbour=C,P[a].push(C),E[n].push(y)),m=this._inbetween(p,u,c),geometry_default.distance(u,p,3)>o&&m>=0&&m<1&&(b="T",l=new coords_default(constants.COORDS_BY_USER,p,r),s[1]=m,s[2]=0,C=new this.Vertex(l,a,s[1],t,"S",b),y=new this.Vertex(l,n,s[2],e,"C",b),C.neighbour=y,y.neighbour=C,P[a].push(C),E[n].push(y));continue}C=new this.Vertex(l,a,s[1],t,"S",b),y=new this.Vertex(l,n,s[2],e,"C",b),C.neighbour=y,y.neighbour=C,P[a].push(C),E[n].push(y)}}}for(x=this.sortIntersections(P),a=0;a<x.length;a++)x[a].data.idx=a,x[a].neighbour.data.idx=a;return v=this.sortIntersections(E),[x,v]},_getPosition:function(t,e,r,s){var o=geometry_default.det3p(t,e,r),a=geometry_default.det3p(t,r,s);return geometry_default.det3p(e,r,s)>=0?o>=0&&a>=0?"left":"right":o>=0||a>=0?"left":"right"},_classifyDegenerateIntersections:function(t){var e,r,s,o,a,n,l,h,d,u,c,p,f,_,g=!0,m=!1;for(d=geometry_default.det3p,l=0,t._tours=0;g;){if(t.intersection&&t.data.type==="T"&&(e=t._next.coords.usrCoords,r=t._prev.coords.usrCoords,geometry_default.distance(t.coords.usrCoords,e,3)<math_default.eps&&(e=t._next._next.coords.usrCoords),geometry_default.distance(t.coords.usrCoords,r,3)<math_default.eps&&(r=t._prev._prev.coords.usrCoords),a=t.neighbour,o=a._prev.coords.usrCoords,s=a._next.coords.usrCoords,geometry_default.distance(a.coords.usrCoords,s,3)<math_default.eps&&(s=a._next._next.coords.usrCoords),geometry_default.distance(a.coords.usrCoords,o,3)<math_default.eps&&(o=a._prev._prev.coords.usrCoords),c=d(t.coords.usrCoords,r,o),p=d(t.coords.usrCoords,e,s),f=d(t.coords.usrCoords,r,s),_=d(t.coords.usrCoords,e,o),c===0&&p===0&&f===0&&_===0&&(t.coords.usrCoords[1]*=1+Math.random()*math_default.eps,t.coords.usrCoords[2]*=1+Math.random()*math_default.eps,a.coords.usrCoords[1]=t.coords.usrCoords[1],a.coords.usrCoords[2]=t.coords.usrCoords[2],c=d(t.coords.usrCoords,r,o),p=d(t.coords.usrCoords,e,s),f=d(t.coords.usrCoords,r,s),_=d(t.coords.usrCoords,e,o)),u=!1,c===0?geometry_default.affineRatio(t.coords.usrCoords,r,o)<0&&(u=!0):p===0?geometry_default.affineRatio(t.coords.usrCoords,e,s)<0&&(u=!0):f===0?geometry_default.affineRatio(t.coords.usrCoords,r,s)>0&&(u=!0):_===0&&geometry_default.affineRatio(t.coords.usrCoords,e,o)>0&&(u=!0),u&&(h=o,o=s,s=h,h=c,c=f,f=h,h=p,p=_,_=h),type_default.exists(t.delayedStatus)||(t.delayedStatus=[]),c===0&&p===0?t.delayedStatus=["on","on"]:c===0?(n=this._getPosition(e,o,a.coords.usrCoords,s),t.delayedStatus=["on",n]):p===0?(n=this._getPosition(r,o,a.coords.usrCoords,s),t.delayedStatus=[n,"on"]):t.delayedStatus.length===0&&(this._getPosition(r,o,a.coords.usrCoords,s)!==this._getPosition(e,o,a.coords.usrCoords,s)?t.data.type="X":t.data.type="B")),type_default.exists(t._tours)&&t._tours++,t._tours>3||t._end||l>1e3){l>1e3&&console.log("Clipping: _classifyDegenerateIntersections exit"),type_default.exists(t._tours)&&delete t._tours;break}t.intersection&&l++,t=t._next}},_handleIntersectionChains:function(t){for(var e=0,r="Null",s,o=!0,a=!1,n=!1,l=!1;o&&(t.intersection===!0&&(t.data.type==="T"&&(t.delayedStatus[0]!=="on"&&t.delayedStatus[1]==="on"?(a=!0,s=t,r=t.delayedStatus[0]):a&&t.delayedStatus[0]==="on"&&t.delayedStatus[1]==="on"?t.data.type="B":a&&t.delayedStatus[0]==="on"&&t.delayedStatus[1]!=="on"&&(a=!1,r===t.delayedStatus[1]?(s.data.type="DB",t.data.type="DB"):(s.data.type="DX",t.data.type="DX"))),e++),t._end&&(n=!0),!(n&&!a));){if(e>1e3){console.log("Warning: _handleIntersectionChains: intersection chain reached maximum numbers of iterations");break}t=t._next}},_handleFullyDegenerateCase:function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f,_,g,m,b,C=[t,e];for(a=0;a<2;a++){for(s=C[a],f=s.length,c=0,b=!0;c<f;c++)if(!s[c].intersection){b=!1;break}if(b)for(o=C[(a+1)%2],_=o.length,c=0;c<f;c++){for(h=s[c].coords.usrCoords,d=s[c]._next.coords.usrCoords,n=[(h[0]+d[0])*.5,(h[1]+d[1])*.5,(h[2]+d[2])*.5],p=0,g=!1;p<_;p++)if(Math.abs(geometry_default.det3p(o[p].coords.usrCoords,o[(p+1)%_].coords.usrCoords,n))<math_default.eps){g=!0;break}if(!g){l=new coords_default(constants.COORDS_BY_USER,n,r),u={pos:c,intersection:!1,coords:l,elementClass:constants.OBJECT_CLASS_POINT},m=s[c]._next,s[c]._next=u,u._prev=s[c],u._next=m,m._prev=u,s[c]._end&&(s[c]._end=!1,u._end=!0);break}}}},_getStatus:function(t,e){for(var r;t.intersection&&!t._end;)t=t._next;return geometry_default.windingNumber(t.coords.usrCoords,e)===0?r="entry":r="exit",[t,r]},markEntryExit:function(t,e,r){var s,o,a,n,l,h,d,u=!0,c=null,p=0,f=!1;for(h=r.length,l=0;l<h;l++)for(d=r[l],this._classifyDegenerateIntersections(t[d]),this._handleIntersectionChains(t[d]),n=this._getStatus(t[d],e),o=n[0],s=n[1],o._starter=!0,a=0,c=null,p=0;u&&(o.intersection===!0&&(o.data.type==="X"&&p===1&&(c.entry_exit=s,s==="exit"&&(c.data.type="X"),p=2),(o.data.type==="X"||o.data.type==="DB")&&(o.entry_exit=s,s=s==="entry"?"exit":"entry"),o.data.type==="DX"&&(p===0?(c=o,p=1):p===1?(o.entry_exit=s,c.entry_exit=s,s==="exit"?c.data.type="X":o.data.type="X",s=s==="entry"?"exit":"entry",c=null,p=0):p===2&&(o.entry_exit=s,o.data.type="X",s=s==="entry"?"exit":"entry",c=null,p=0))),o=o._next,!(type_default.exists(o._starter)||a>1e4));)a++},_stayOnPath:function(t,e){var r=!0;return t.intersection&&t.data.type!=="B"&&(r=e===t.entry_exit),r},_addVertex:function(t,e,r){return!isNaN(e.coords.usrCoords[1])&&!isNaN(e.coords.usrCoords[2])&&t.push(e),e.intersection&&e.data.done?(r&&console.log("Add last intersection point",e.coords.usrCoords,"on",e.data.pathname,e.entry_exit,e.data.type),!0):(e.intersection&&(e.data.done=!0,r&&console.log("Add intersection point",e.coords.usrCoords,"on",e.data.pathname,e.entry_exit,e.data.type)),!1)},tracing:function(t,e,r){for(var s,o,a,n,l=0,h=1e4,d=0,u=[],c=!1,p=!1;d<e.length&&l<h;){if(a=e[d],a.data.done||a.data.type!=="X"){d++;continue}u.length>0&&u.push([NaN,NaN]),n=a.data.idx,s=t,c=this._addVertex(u,a,p),o=a.entry_exit;do{if(c)break;if(r==="intersection"&&a.entry_exit==="entry"||r==="union"&&a.entry_exit==="exit"||r==="difference"&&s===t==(a.entry_exit==="exit")){do if(a=a._next,c=this._addVertex(u,a,p),c)break;while(this._stayOnPath(a,o));l++}else{do if(a=a._prev,c=this._addVertex(u,a,p),c)break;while(this._stayOnPath(a,o));l++}if(c)break;if(!a.neighbour)return console.log("Tracing: emergency break - no neighbour!!!!!!!!!!!!!!!!!",l),[[0],[0]];if(a=a.neighbour,a.data.done)break;a.data.done=!0,o=a.entry_exit,s=a.data.path}while(a.data.idx!==n&&l<h);l>=h&&console.log("Tracing: stopping an infinite loop!",l),d++}return this._getCoordsArrays(u,!1)},isEmptyCase:function(t,e,r){return r==="intersection"&&(t.length===0||e.length===0)||r==="union"&&t.length===0&&e.length===0||r==="difference"&&t.length===0},_getCoordsArrays:function(t,e){var r=[],s=[],o,a=t.length;for(o=0;o<a;o++)t[o].coords?(r.push(t[o].coords.usrCoords[1]),s.push(t[o].coords.usrCoords[2])):(r.push(t[o][0]),s.push(t[o][1]));return e&&a>0&&(t[0].coords?(r.push(t[0].coords.usrCoords[1]),s.push(t[0].coords.usrCoords[2])):(r.push(t[0][0]),s.push(t[0][1]))),[r,s]},handleEmptyIntersection:function(t,e,r){var s,o,a=!1,n=[];if(t.length===0)return r==="union"?n=e:n=[],this._getCoordsArrays(n,!0);if(e.length===0)return r==="intersection"?n=[]:n=t,this._getCoordsArrays(n,!0);if(t.length>0)for(s=t[0];s.intersection&&(s=s._next,!s._end););if(e.length>0)for(o=e[0];o.intersection&&(o=o._next,!o._end););return geometry_default.windingNumber(s.coords.usrCoords,e)===0?geometry_default.windingNumber(o.coords.usrCoords,t)!==0?(r==="union"?(type_default.concat(n,t),n.push(t[0])):r==="difference"&&(type_default.concat(n,t),n.push(t[0]),geometry_default.signedPolygon(t)*geometry_default.signedPolygon(e)>0&&n.reverse(),n.push([NaN,NaN])),(r==="difference"||r==="intersection")&&(type_default.concat(n,e),n.push(e[0]),a=!1)):r==="difference"?(type_default.concat(n,t),a=!0):r==="union"&&(type_default.concat(n,t),n.push(t[0]),n.push([NaN,NaN]),type_default.concat(n,e),n.push(e[0])):r==="intersection"?(type_default.concat(n,t),a=!0):r==="union"&&(type_default.concat(n,e),n.push(e[0])),this._getCoordsArrays(n,a)},_countCrossingIntersections:function(t){var e,r=t.length,s=0;for(e=0;e<r;e++)t[e].data.type==="X"&&s++;return s},_getPath:function(t,e){var r,s,o,a,n,l,h,d=[];if(t.elementClass===constants.OBJECT_CLASS_CURVE&&(t.type===constants.OBJECT_TYPE_ARC||t.type===constants.OBJECT_TYPE_SECTOR)){for(n=geometry_default.rad(t.radiuspoint,t.center,t.anglepoint),h=Math.floor(n*180/Math.PI),o=t.Radius(),a=n/h,l=Math.atan2(t.radiuspoint.coords.usrCoords[2]-t.center.coords.usrCoords[2],t.radiuspoint.coords.usrCoords[1]-t.center.coords.usrCoords[1]),t.type===constants.OBJECT_TYPE_SECTOR&&this._addToList(d,t.center.coords,0),r=0;r<=h;r++)this._addToList(d,new coords_default(constants.COORDS_BY_USER,[t.center.coords.usrCoords[0],t.center.coords.usrCoords[1]+Math.cos(r*a+l)*o,t.center.coords.usrCoords[2]+Math.sin(r*a+l)*o],e),r+1);t.type===constants.OBJECT_TYPE_SECTOR&&this._addToList(d,t.center.coords,h+2)}else if(t.elementClass===constants.OBJECT_CLASS_CURVE&&type_default.exists(t.points))for(s=t.numberPoints,r=0;r<s;r++)this._addToList(d,t.points[r],r);else if(t.type===constants.OBJECT_TYPE_POLYGON)for(r=0;r<t.vertices.length;r++)this._addToList(d,t.vertices[r].coords,r);else if(t.elementClass===constants.OBJECT_CLASS_CIRCLE)for(h=359,o=t.Radius(),a=2*Math.PI/h,r=0;r<=h;r++)this._addToList(d,new coords_default(constants.COORDS_BY_USER,[t.center.coords.usrCoords[0],t.center.coords.usrCoords[1]+Math.cos(r*a)*o,t.center.coords.usrCoords[2]+Math.sin(r*a)*o],e),r);else if(type_default.isArray(t))for(s=t.length,r=0;r<s;r++)type_default.exists(t[r].coords)?this._addToList(d,t[r].coords,r):type_default.isArray(t[r])?this._addToList(d,new coords_default(constants.COORDS_BY_USER,t[r],e),r):type_default.exists(t[r].usrCoords)&&this._addToList(d,t[r],r);return d},greinerHormann:function(t,e,r,s){var o,a=[],n=[],l=[],h,d,u=[],c=!1;return a=this._getPath(t,s),o=a.length,o>0&&geometry_default.distance(a[0].coords.usrCoords,a[o-1].coords.usrCoords,3)<math_default.eps&&a.pop(),n=this._getPath(e,s),o=n.length,o>0&&geometry_default.distance(n[0].coords.usrCoords,n[o-1].coords.usrCoords,3)<math_default.eps*math_default.eps&&n.pop(),this.isEmptyCase(a,n,r)?[[],[]]:(h=this.makeDoublyLinkedList(a),d=this.makeDoublyLinkedList(n),u=this.findIntersections(a,n,s),l=u[0],this._handleFullyDegenerateCase(a,n,s),this.markEntryExit(a,n,h),this.markEntryExit(n,a,d),this._countCrossingIntersections(l)===0?this.handleEmptyIntersection(a,n,r):this.tracing(a,l,r))},union:function(t,e,r){return this.greinerHormann(t,e,"union",r)},intersection:function(t,e,r){return this.greinerHormann(t,e,"intersection",r)},difference:function(t,e,r){return this.greinerHormann(t,e,"difference",r)}};var clip_default=math_default.Clip;math_default.Poly={};math_default.Poly.Ring=function(t){this.vars=t};jxg_default.extend(math_default.Poly.Ring.prototype,{});math_default.Poly.Monomial=function(t,e,r){var s;if(!type_default.exists(t))throw new Error("JSXGraph error: In JXG.Math.Poly.monomial missing parameter 'ring'.");for(type_default.isArray(r)||(r=[]),r=r.slice(0,t.vars.length),s=r.length;s<t.vars.length;s++)r.push(0);this.ring=t,this.coefficient=e||0,this.exponents=type_default.deepCopy(r)};jxg_default.extend(math_default.Poly.Monomial.prototype,{copy:function(){return new math_default.Poly.Monomial(this.ring,this.coefficient,this.exponents)},print:function(){for(var t=[],e=0;e<this.ring.vars.length;e++)t.push(this.ring.vars[e]+"^"+this.exponents[e]);return this.coefficient+"*"+t.join("*")}});math_default.Poly.Polynomial=function(t,e){var r;if(!type_default.exists(t))throw new Error("JSXGraph error: In JXG.Math.Poly.polynomial missing parameter 'ring'.");type_default.exists(e)&&type_default.isString(e)?r=void 0:r=[],this.ring=t,this.monomials=r};jxg_default.extend(math_default.Poly.Polynomial.prototype,{findSignature:function(t){for(var e=0;e<this.monomials.length;e++)if(type_default.cmpArrays(this.monomials[e].exponents,t))return e;return-1},addSubMonomial:function(t,e){var r=this.findSignature(t.exponents);r>-1?this.monomials[r].coefficient+=e*t.coefficient:(t.coefficient*=e,this.monomials.push(t))},add:function(t){var e;if(type_default.exists(t)&&t.ring===this.ring)if(type_default.isArray(t.exponents))this.addSubMonomial(t,1);else for(e=0;e<t.monomials.length;e++)this.addSubMonomial(t.monomials[e],1);else throw new Error("JSXGraph error: In JXG.Math.Poly.polynomial.add either summand is undefined or rings don't match.")},sub:function(t){var e;if(type_default.exists(t)&&t.ring===this.ring)if(type_default.isArray(t.exponents))this.addSubMonomial(t,-1);else for(e=0;e<t.monomials.length;e++)this.addSubMonomial(t.monomials[e],-1);else throw new Error("JSXGraph error: In JXG.Math.Poly.polynomial.sub either summand is undefined or rings don't match.")},copy:function(){var t,e=new math_default.Poly.Polynomial(this.ring);for(t=0;t<this.monomials.length;t++)e.monomials.push(this.monomials[t].copy());return e},print:function(){for(var t=[],e=0;e<this.monomials.length;e++)t.push("("+this.monomials[e].print()+")");return t.join("+")}});var poly_default=math_default.Poly;jxg_default.Complex=function(t,e){this.isComplex=!0,t&&t.isComplex&&(e=t.imaginary,t=t.real),this.real=t||0,this.imaginary=e||0};jxg_default.extend(jxg_default.Complex.prototype,{toString:function(t){var e=this.imaginary<0?" - ":" + ",r=Math.abs(this.imaginary);return t!==null?this.real.toFixed(t)+e+r.toFixed(t)+"i":this.real+e+r+"i"},toArray:function(){return[this.real,this.imaginary]},add:function(t){return type_default.isNumber(t)?this.real+=t:(this.real+=t.real,this.imaginary+=t.imaginary),this},sub:function(t){return type_default.isNumber(t)?this.real-=t:(this.real-=t.real,this.imaginary-=t.imaginary),this},mult:function(t){var e,r,s,o;return type_default.isNumber(t)?(this.real*=t,this.imaginary*=t):(e=this.real,r=this.imaginary,s=t.real,o=t.imaginary,this.real=e*s-r*o,this.imaginary=e*o+r*s),this},div:function(t){var e,r,s,o,a,n=math_default.eps*math_default.eps;if(type_default.isNumber(t)){if(Math.abs(t)<math_default.eps)return this.real=1/0,this.imaginary=1/0,this;this.real/=t,this.imaginary/=t}else{if(o=t.real,a=t.imaginary,Math.abs(o)<n&&Math.abs(a)<n)return this.real=1/0,this.imaginary=1/0,this;e=o*o+a*a,s=this.real,r=this.imaginary,this.real=(s*o+r*a)/e,this.imaginary=(r*o-s*a)/e}return this},conj:function(){return this.imaginary*=-1,this},abs:function(){var t=this.real,e=this.imaginary;return Math.sqrt(t*t+e*e)},angle:function(){return Math.atan2(this.imaginary,this.real)}});jxg_default.C={};jxg_default.C.add=function(t,e){var r=new jxg_default.Complex(t);return r.add(e),r};jxg_default.C.sub=function(t,e){var r=new jxg_default.Complex(t);return r.sub(e),r};jxg_default.C.mult=function(t,e){var r=new jxg_default.Complex(t);return r.mult(e),r};jxg_default.C.div=function(t,e){var r=new jxg_default.Complex(t);return r.div(e),r};jxg_default.C.conj=function(t){var e=new jxg_default.Complex(t);return e.conj(),e};jxg_default.C.abs=function(t){return new jxg_default.Complex(t).abs()};jxg_default.C.angle=function(t){return new jxg_default.Complex(t).angle()};jxg_default.C.copy=function(t){return new jxg_default.Complex(t)};jxg_default.Complex.C=jxg_default.C;var complex_default=jxg_default.Complex;math_default.Tiling={triangulation:function(t,e,r,s,o){var a,n,l,h,d,u,c,p,f=[],_=[];for((o===void 0||o===0)&&(d=JXG.evaluate(e),u=JXG.evaluate(r),c=(d[1]-d[0])/s,p=c*Math.sqrt(3)/2,o=Math.round(Math.abs(u[1]-u[0])/p)),n=0;n<=o;n++)for(h=n%2===0?s:s+1,a=0;a<=h;a++)f.push((function(g,m,b){var C=g;return m%2===1&&(C=g===b?g-1:g>0?g-.5:C),function(){var y=JXG.evaluate(e),x=JXG.evaluate(r),v=y[0]+C*(y[1]-y[0])/s,P=x[0]+m*(x[1]-x[0])/o,E=t.F(v,P);return E.length===4?E.slice(1):E}})(a,n,h)),n>0&&(l=f.length-1,n%2===1?a>0&&(_.push([l-1,l,l-2-s]),a<h?_.push([l,l-1-s,l-2-s]):_.push([l-1,l,l-2-s])):(a>0&&_.push([l,l-2-s,l-1]),_.push([l,l-1-s,l-2-s])));return[f,_]},rectangulation:function(t,e,r,s,o){for(var a=[],n=[],l,h=0,d;h<=o;h++)for(l=0;l<=s;l++)a.push((function(u,c){return function(){var p=JXG.evaluate(e),f=JXG.evaluate(r),_=p[0]+u*(p[1]-p[0])/s,g=f[0]+c*(f[1]-f[0])/o,m=t.F(_,g);return m.length===4?m.slice(1):m}})(l,h)),l>0&&h>0&&(d=a.length-1,n.push([d-1,d,d-1-s,d-1-s-1]));return[a,n]}};var tiling_default=math_default.Tiling,simpleColors={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",venetianred:"ae181e",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"},colorDefs=[{re:/^\s*rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*([\d.]{1,3})\s*\)\s*$/,example:["rgba(123, 234, 45, 0.5)","rgba(255,234,245,1.0)"],process:function(t){return[parseInt(t[1],10),parseInt(t[2],10),parseInt(t[3],10)]}},{re:/^\s*rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)\s*$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(t){return[parseInt(t[1],10),parseInt(t[2],10),parseInt(t[3],10)]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}];jxg_default.rgbParser=function(t,e,r){var s,o,a,n,l,h,d,u,c,p=t,f;if(!type_default.exists(t))return[];if(type_default.exists(e)&&type_default.exists(r)&&(p=[t,e,r]),s=p,f=!1,type_default.isArray(s)){for(h=0;h<3;h++)f=f||/\./.test(p[h].toString());for(h=0;h<3;h++)f=f&&p[h]>=0&&p[h]<=1;return f?[Math.ceil(p[0]*255),Math.ceil(p[1]*255),Math.ceil(p[2]*255)]:p}for(typeof p=="string"&&(s=p),s.charAt(0)==="#"&&(s=s.slice(1,7)),s=s.replace(/ /g,"").toLowerCase(),s=simpleColors[s]||s,h=0;h<colorDefs.length;h++)a=colorDefs[h].re,n=colorDefs[h].process,l=a.exec(s),l&&(o=n(l),d=o[0],u=o[1],c=o[2]);return isNaN(d)||isNaN(u)||isNaN(c)?[]:(d=d<0||isNaN(d)?0:d>255?255:d,u=u<0||isNaN(u)?0:u>255?255:u,c=c<0||isNaN(c)?0:c>255?255:c,[d,u,c])};jxg_default.isColor=function(t){var e=new Option().style;return e.color=t,e.color!==""};jxg_default.rgb2css=function(t,e,r){var s=jxg_default.rgbParser(t,e,r);return"rgb("+s[0]+", "+s[1]+", "+s[2]+")"};jxg_default.rgb2hex=function(t,e,r){var s=jxg_default.rgbParser(t,e,r),o=s[1],a=s[2];return s=s[0],s=s.toString(16),o=o.toString(16),a=a.toString(16),s.length===1&&(s="0"+s),o.length===1&&(o="0"+o),a.length===1&&(a="0"+a),"#"+s+o+a};jxg_default.hex2rgb=function(t){return jxg_default.deprecated("JXG.hex2rgb()","JXG.rgb2css()"),jxg_default.rgb2css(t)};jxg_default.hsv2hsl=function(t,e,r){var s,o=r*(1-e*.5);return s=o===0||o===1?0:(r-o)/Math.min(o,1-o),[t,s,o]};jxg_default.hsv2rgb=function(t,e,r){var s,o,a,n,l,h,d,u,c;if(t=(t%360+360)%360,e===0)if(isNaN(t)||t<math_default.eps)s=r,o=r,a=r;else return"#ffffff";else switch(t>=360?h=0:h=t,h=h/60,l=Math.floor(h),n=h-l,d=r*(1-e),u=r*(1-e*n),c=r*(1-e*(1-n)),l){case 0:s=r,o=c,a=d;break;case 1:s=u,o=r,a=d;break;case 2:s=d,o=r,a=c;break;case 3:s=d,o=u,a=r;break;case 4:s=c,o=d,a=r;break;case 5:s=r,o=d,a=u}return s=Math.round(s*255).toString(16),s=s.length===2?s:s.length===1?"0"+s:"00",o=Math.round(o*255).toString(16),o=o.length===2?o:o.length===1?"0"+o:"00",a=Math.round(a*255).toString(16),a=a.length===2?a:a.length===1?"0"+a:"00",["#",s,o,a].join("")};jxg_default.rgb2hsv=function(t,e,r){var s=jxg_default.rgbParser(t,e,r),o=s[1],a=s[2],n,l,h,d,u,c,p,f,_,g;return s=s[0],n=s/255,l=o/255,h=a/255,_=Math.max(s,o,a),g=Math.min(s,o,a),d=_/255,u=g/255,f=d,p=0,f>0&&(p=(f-u)/f),c=1/(d-u),p>0&&(_===s?c=(l-h)*c:_===o?c=2+(h-n)*c:c=4+(n-l)*c),c*=60,c<0&&(c+=360),_===g&&(c=0),[c,p,f]};jxg_default.rgb2LMS=function(t,e,r){var s,o,a,n,l,h,d,u=[[.05059983,.08585369,.0095242],[.01893033,.08925308,.01370054],[.00292202,.00975732,.07145979]];return s=jxg_default.rgbParser(t,e,r),o=s[1],a=s[2],s=s[0],s=Math.pow(s,.476190476),o=Math.pow(o,.476190476),a=Math.pow(a,.476190476),n=s*u[0][0]+o*u[0][1]+a*u[0][2],l=s*u[1][0]+o*u[1][1]+a*u[1][2],h=s*u[2][0]+o*u[2][1]+a*u[2][2],d=[n,l,h],d.l=n,d.m=l,d.s=h,d};jxg_default.LMS2rgb=function(t,e,r){var s,o,a,n,l=[[30.830854,-29.832659,1.610474],[-6.481468,17.715578,-2.532642],[-.37569,-1.199062,14.273846]],h=function(d){for(var u=127,c=64;c>0;){if(Math.pow(u,.476190476)>d)u-=c;else{if(Math.pow(u+1,.476190476)>d)return u;u+=c}c/=2}return u===254&&13.994955247<d?255:u};return s=t*l[0][0]+e*l[0][1]+r*l[0][2],o=t*l[1][0]+e*l[1][1]+r*l[1][2],a=t*l[2][0]+e*l[2][1]+r*l[2][2],s=h(s),o=h(o),a=h(a),n=[s,o,a],n.r=s,n.g=o,n.b=a,n};jxg_default.rgba2rgbo=function(t){var e;return t.length===9&&t.charAt(0)==="#"?(e=parseInt(t.slice(7,9).toUpperCase(),16)/255,t=t.slice(0,7)):e=1,[t,e]};jxg_default.rgbo2rgba=function(t,e){var r;return t==="none"||t==="transparent"?t:(r=Math.round(e*255).toString(16),r.length===1&&(r="0"+r),jxg_default.rgb2hex(t)+r)};jxg_default.rgb2bw=function(t){var e,r,s,o="0123456789ABCDEF";return t==="none"||(s=jxg_default.rgbParser(t),e=Math.floor(.3*s[0]+.59*s[1]+.11*s[2]),r=o.charAt(e>>4&15)+o.charAt(e&15),t="#"+r+r+r),t};jxg_default.rgb2cb=function(t,e){var r,s,o,a,n,l,h,d,u,c,p,f,_,g="0123456789ABCDEF";if(t==="none")return t;switch(n=jxg_default.rgb2LMS(t),s=n[0],o=n[1],a=n[2],e=e.toLowerCase(),e){case"protanopia":h=-.06150039994295001,d=.08277001656812001,u=-.013200141220000003,c=.05858939668799999,p=-.07934519995360001,f=.013289415272000003,_=.6903216543277437,l=a/o,l<_?s=-(d*o+u*a)/h:s=-(p*o+f*a)/c;break;case"tritanopia":h=-.00058973116217,d=.007690316482,u=-.01011703519052,c=.025495080838999994,p=-.0422740347,f=.017005316784,_=.8349489908460004,l=o/s,l<_?a=-(h*s+d*o)/u:a=-(c*s+p*o)/f;break;default:h=-.06150039994295001,d=.08277001656812001,u=-.013200141220000003,c=.05858939668799999,p=-.07934519995360001,f=.013289415272000003,_=.5763833686400911,l=a/s,l<_?o=-(h*s+u*a)/d:o=-(c*s+f*a)/p}return r=jxg_default.LMS2rgb(s,o,a),l=g.charAt(r[0]>>4&15)+g.charAt(r[0]&15),t="#"+l,l=g.charAt(r[1]>>4&15)+g.charAt(r[1]&15),t+=l,l=g.charAt(r[2]>>4&15)+g.charAt(r[2]&15),t+=l,t};jxg_default.shadeColor=function(t,e){var r=jxg_default.rgbParser(t),s=r[0],o=r[1],a=r[2];return s=parseInt(s+255*e),o=parseInt(o+255*e),a=parseInt(a+255*e),s=s>0?s:0,o=o>0?o:0,a=a>0?a:0,s=s<255?s:255,o=o<255?o:255,a=a<255?a:255,s=Math.round(s),o=Math.round(o),a=Math.round(a),jxg_default.rgb2hex([s,o,a])};jxg_default.lightenColor=function(t,e){return jxg_default.shadeColor(t,e)};jxg_default.darkenColor=function(t,e){return jxg_default.shadeColor(t,-1*e)};jxg_default.mixColor=function(t,e,r){var s=jxg_default.rgbParser(t),o=jxg_default.rgbParser(e),a=[],n;for(r=r??.5,n=0;n<3;n++)a[n]=parseInt(s[n]*r+o[n]*(1-r));return jxg_default.rgb2hex(a)};jxg_default.autoHighlight=function(t){var e=jxg_default.rgba2rgbo(t),r=e[0],s=e[1];return t.charAt(0)==="#"?(s<.3?s*=1.8:s*=.4,jxg_default.rgbo2rgba(r,s)):t};jxg_default.contrast=function(t,e,r,s){var o,a="#000000",n,l,h,d;return e=e||"#000000",r=r||"#ffffff",s=s||7,o=jxg_default.rgbParser(t),n=jxg_default.rgbParser(a),l=.2126*Math.pow(o[0]/255,2.2)+.7152*Math.pow(o[1]/255,2.2)+.0722*Math.pow(o[2]/255,2.2),h=.2126*Math.pow(n[0]/255,2.2)+.7152*Math.pow(n[1]/255,2.2)+.0722*Math.pow(n[2]/255,2.2),l>h?d=Math.floor((l+.05)/(h+.05)):d=Math.floor((h+.05)/(l+.05)),d=d-1,d>s?e:r};jxg_default.setClassicColors=function(){jxg_default.Options.elements.strokeColor="blue",jxg_default.Options.elements.fillColor="red",jxg_default.Options.hatch.strokeColor="blue",jxg_default.Options.angle.fillColor="#ff7f00",jxg_default.Options.angle.highlightFillColor="#ff7f00",jxg_default.Options.angle.strokeColor="#ff7f00",jxg_default.Options.angle.label.strokeColor="blue",jxg_default.Options.arc.strokeColor="blue",jxg_default.Options.circle.center.fillColor="red",jxg_default.Options.circle.center.strokeColor="blue",jxg_default.Options.circumcircle.strokeColor="blue",jxg_default.Options.circumcircle.center.fillColor="red",jxg_default.Options.circumcircle.center.strokeColor="blue",jxg_default.Options.circumcirclearc.strokeColor="blue",jxg_default.Options.circumcirclesector.strokeColor="blue",jxg_default.Options.circumcirclesector.fillColor="green",jxg_default.Options.circumcirclesector.highlightFillColor="green",jxg_default.Options.conic.strokeColor="blue",jxg_default.Options.curve.strokeColor="blue",jxg_default.Options.incircle.strokeColor="blue",jxg_default.Options.incircle.center.fillColor="red",jxg_default.Options.incircle.center.strokeColor="blue",jxg_default.Options.inequality.fillColor="red",jxg_default.Options.integral.fillColor="red",jxg_default.Options.integral.curveLeft.color="red",jxg_default.Options.integral.curveRight.color="red",jxg_default.Options.line.strokeColor="blue",jxg_default.Options.point.fillColor="red",jxg_default.Options.point.strokeColor="red",jxg_default.Options.polygon.fillColor="green",jxg_default.Options.polygon.highlightFillColor="green",jxg_default.Options.polygon.vertices.strokeColor="red",jxg_default.Options.polygon.vertices.fillColor="red",jxg_default.Options.regularpolygon.fillColor="green",jxg_default.Options.regularpolygon.highlightFillColor="green",jxg_default.Options.regularpolygon.vertices.strokeColor="red",jxg_default.Options.regularpolygon.vertices.fillColor="red",jxg_default.Options.riemannsum.fillColor="yellow",jxg_default.Options.sector.fillColor="green",jxg_default.Options.sector.highlightFillColor="green",jxg_default.Options.semicircle.center.fillColor="red",jxg_default.Options.semicircle.center.strokeColor="blue",jxg_default.Options.slopetriangle.fillColor="red",jxg_default.Options.slopetriangle.highlightFillColor="red",jxg_default.Options.turtle.arrow.strokeColor="blue"};jxg_default.extend(jxg_default,{paletteWong:{black:"#000000",orange:"#E69F00",skyblue:"#56B4E9",bluishgreen:"#009E73",yellow:"#F0E442",darkblue:"#0072B2",vermillion:"#D55E00",reddishpurple:"#CC79A7",blue:"#0072B2",red:"#D55E00",green:"#009E73",purple:"#CC79A7",white:"#ffffff"}});jxg_default.palette=jxg_default.paletteWong;var color_default=jxg_default;jxg_default.Options={jc:{enabled:!0,compile:!0},board:{animationDelay:35,axis:!1,boundingBox:[-5,5,5,-5],browserPan:!1,clickDelay:600,cssStyle:"",dblClickSuppressClick:!1,defaultAxes:{x:{name:"x",fixed:!0,needsRegularUpdate:!1,ticks:{label:{visible:"inherit",anchorX:"middle",anchorY:"top",fontSize:12,offset:[0,-3]},tickEndings:[0,1],majorTickEndings:[1,1],drawZero:!1,visible:"inherit"}},y:{name:"y",fixed:!0,needsRegularUpdate:!1,ticks:{label:{visible:"inherit",anchorX:"right",anchorY:"middle",fontSize:12,offset:[-6,0]},tickEndings:[1,0],majorTickEndings:[1,1],drawZero:!1,visible:"inherit"}}},document:!1,drag:{enabled:!0},fullscreen:{symbol:'<svg height="1em" width="1em" version="1.1" viewBox="10 10 18 18"><path fill="#666" d="m 10,16 2,0 0,-4 4,0 0,-2 L 10,10 l 0,6 0,0 z"></path><path fill="#666" d="m 20,10 0,2 4,0 0,4 2,0 L 26,10 l -6,0 0,0 z"></path><path fill="#666" d="m 24,24 -4,0 0,2 L 26,26 l 0,-6 -2,0 0,4 0,0 z"></path><path fill="#666" d="M 12,20 10,20 10,26 l 6,0 0,-2 -4,0 0,-4 0,0 z"></path></svg>',scale:.85,id:null},ignoreLabels:!0,intl:{enabled:!1},jxgbox:{id:"jxgbox",outerbox:null,cssStyle:"width: 500px; aspect-ratio: 1/1; overflow: visible",cssClass:"jxgbox"},keepAspectRatio:!1,keyboard:{enabled:!0,dx:10,dy:10,panShift:!0,panCtrl:!1},logging:{enabled:!1},minimizeReflow:"none",maxBoundingBox:[-1/0,1/0,1/0,-1/0],maxFrameRate:40,maxNameLength:1,moveTarget:null,offsetX:0,offsetY:0,pan:{enabled:!0,needShift:!0,needTwoFingers:!1},registerEvents:!0,renderer:"auto",resize:{enabled:!0,throttle:10},screenshot:{scale:1,type:"png",symbol:"⌘",css:"background-color:#eeeeee; opacity:1.0; border:2px solid black; border-radius:10px; text-align:center",cssButton:"padding: 4px 10px; border: solid #356AA0 1px; border-radius: 5px; position: absolute; right: 2ex; top: 2ex; background-color: rgba(255, 255, 255, 0.3);"},selection:{enabled:!1,name:"selectionPolygon",needShift:!1,needCtrl:!0,fillColor:"#ffff00",visible:!1,withLines:!1,vertices:{visible:!1}},sketches:{enabled:!1,0:{visible:!0},1:{visible:!0}},showClearTraces:!1,showCopyright:!0,showFullscreen:!1,showInfobox:!0,showLogo:!1,showNavigation:!0,showReload:!1,showScreenshot:!1,showZoom:!0,takeFirst:!1,takeSizeFromFile:!1,theme:"default",title:"",zoom:{enabled:!0,factorX:1.25,factorY:1.25,wheel:!0,needShift:!0,center:"auto",min:1e-4,max:1e4,pinch:!0,pinchHorizontal:!0,pinchVertical:!0,pinchSensitivity:7},zoomX:1,zoomY:1},navbar:{strokeColor:"#333333",fillColor:"transparent",highlightFillColor:"#aaaaaa",padding:"2px",position:"absolute",fontSize:"14px",cursor:"pointer",zIndex:"100",right:"5px",bottom:"5px"},elements:{aria:{enabled:!1,label:"",live:"assertive"},clip:!0,cssClass:"",highlightCssClass:"",dash:0,dashScale:!1,draft:{draft:!1,strokeColor:"#565656",fillColor:"#565656",strokeOpacity:.8,fillOpacity:.8,strokeWidth:1},dragToTopOfLayer:!1,element3D:null,fillColor:"black",fillOpacity:1,fixed:!1,frozen:!1,gradient:null,gradientAngle:0,gradientCX:.5,gradientCY:.5,gradientEndOffset:1,gradientFX:.5,gradientFY:.5,gradientFR:0,gradientR:.5,gradientSecondColor:"#ffffff",gradientSecondOpacity:1,gradientStartOffset:0,highlight:!0,highlightFillColor:"none",highlightFillOpacity:1,highlightStrokeColor:"#c3d9ff",highlightStrokeOpacity:1,highlightStrokeWidth:2,isLabel:!1,layer:0,lineCap:"butt",needsRegularUpdate:!0,nonnegativeOnly:!1,precision:"inherit",priv:!1,rotatable:!0,scalable:!0,shadow:{enabled:!1,color:[0,0,0],opacity:1,blur:3,blend:.1,offset:[5,5]},snapToGrid:!1,strokeColor:color_default.palette.blue,strokeOpacity:1,strokeWidth:2,tabindex:-1,trace:!1,traceAttributes:{},transitionDuration:100,transitionProperties:["fill","fill-opacity","stroke","stroke-opacity","stroke-width"],visible:!0,withLabel:!1,ignoreForLabelAutoposition:!1},ticks:{generateLabelText:null,generateLabelValue:null,drawLabels:!1,label:{tabindex:null,layer:7,highlight:!1,autoPosition:!1},beautifulScientificTickLabels:!1,useUnicodeMinus:!0,anchor:"left",drawZero:!1,insertTicks:!1,minTicksDistance:10,minorHeight:4,majorHeight:10,tickEndings:[1,1],majorTickEndings:[1,1],ignoreInfiniteTickEndings:!0,minorTicks:4,ticksPerLabel:!1,scale:1,scaleSymbol:"",labels:[],maxLabelLength:5,precision:3,digits:3,ticksDistance:1,face:"|",strokeOpacity:1,strokeWidth:1,strokeColor:"#000000",highlightStrokeColor:"#888888",fillColor:"none",highlightFillColor:"none",visible:"inherit",includeBoundaries:!1,type:"linear",intl:{enabled:"inherit",options:{}},minorTicksInArrow:!1,majorTicksInArrow:!0,labelInArrow:!0,minorTicksInMargin:!1,majorTicksInMargin:!0,labelInMargin:!0,ignoreForLabelAutoposition:!0},hatch:{drawLabels:!1,drawZero:!0,majorHeight:20,anchor:"middle",face:"|",strokeWidth:2,strokeColor:color_default.palette.blue,ticksDistance:.2},precision:{touch:30,touchMax:100,mouse:4,pen:4,epsilon:1e-4,hasPoint:4},layer:{numlayers:20,unused9:19,unused8:18,unused7:17,unused6:16,unused5:15,unused4:14,unused3:13,unused2:12,unused1:11,unused0:10,text:9,point:9,glider:9,arc:8,line:7,circle:6,curve:5,turtle:5,polygon:3,sector:3,angle:3,integral:3,axis:2,ticks:2,grid:1,image:0,trace:0},angle:{withLabel:!0,radius:"auto",orientation:"counterclockwise",type:"sector",orthoType:"square",orthoSensitivity:1,fillColor:color_default.palette.orange,highlightFillColor:color_default.palette.orange,strokeColor:color_default.palette.orange,fillOpacity:.3,highlightFillOpacity:.3,radiuspoint:{withLabel:!1,visible:!1,name:""},pointsquare:{withLabel:!1,visible:!1,name:""},dot:{visible:!1,strokeColor:"none",fillColor:"#000000",size:2,face:"o",withLabel:!1,name:""},label:{position:"top",offset:[0,0],strokeColor:color_default.palette.blue},arc:{visible:!1,orientation:"inherit",fillColor:"none"}},arc:{selection:"auto",orientation:"counterclockwise",hasInnerPoints:!1,label:{anchorX:"auto",anchorY:"auto"},firstArrow:!1,lastArrow:!1,fillColor:"none",highlightFillColor:"none",strokeColor:color_default.palette.blue,highlightStrokeColor:"#c3d9ff",useDirection:!1,center:{},radiusPoint:{},anglePoint:{}},arrow:{firstArrow:!1,lastArrow:{type:1,highlightSize:6,size:6}},arrowparallel:{firstArrow:!1,lastArrow:{type:1,highlightSize:6,size:6}},axis:{name:"",needsRegularUpdate:!1,strokeWidth:1,lastArrow:{type:1,highlightSize:8,size:8},strokeColor:"#666666",highlightStrokeWidth:1,highlightStrokeColor:"#888888",position:"static",anchor:"",anchorDist:"10%",ticksAutoPos:!1,ticksAutoPosThreshold:"5%",withTicks:!0,straightFirst:!0,straightLast:!0,margin:-4,withLabel:!1,scalable:!1,ticks:{label:{offset:[4,-9],parse:!1,needsRegularUpdate:!1,display:"internal",visible:"inherit",layer:9},visible:"inherit",needsRegularUpdate:!1,strokeWidth:1,strokeColor:"#666666",highlightStrokeColor:"#888888",drawLabels:!0,drawZero:!1,insertTicks:!0,minTicksDistance:5,minorHeight:10,majorHeight:-1,tickEndings:[0,1],majorTickEndings:[1,1],minorTicks:4,ticksDistance:1,strokeOpacity:.25},point1:{needsRegularUpdate:!1,visible:!1},point2:{needsRegularUpdate:!1,visible:!1},tabindex:-1,label:{position:"lft",offset:[10,10]},ignoreForLabelAutoposition:!0},bisector:{strokeColor:"#000000",point:{visible:!1,fixed:!1,withLabel:!1,name:""}},bisectorlines:{line1:{strokeColor:"#000000"},line2:{strokeColor:"#000000"}},boxplot:{dir:"vertical",smallWidth:.5,outlier:{size:3,face:"o"},strokeWidth:2,strokeColor:color_default.palette.blue,fillColor:color_default.palette.blue,fillOpacity:.2,highlightStrokeWidth:2,highlightStrokeColor:color_default.palette.blue,highlightFillColor:color_default.palette.blue,highlightFillOpacity:.1},button:{disabled:!1,display:"html"},cardinalspline:{createPoints:!0,isArrayOfCoordinates:!0,points:{strokeOpacity:.05,fillOpacity:.05,highlightStrokeOpacity:1,highlightFillOpacity:1,withLabel:!1,name:"",fixed:!1}},chart:{chartStyle:"line",colors:["#B02B2C","#3F4C6B","#C79810","#D15600","#FFFF88","#c3d9ff","#4096EE","#008C00"],highlightcolors:null,fillcolor:null,highlightonsector:!1,highlightbysize:!1,fillOpacity:.6,withLines:!1,label:{}},checkbox:{disabled:!1,checked:!1,display:"html"},circle:{hasInnerPoints:!1,fillColor:"none",highlightFillColor:"none",strokeColor:color_default.palette.blue,highlightStrokeColor:"#c3d9ff",center:{visible:!1,withLabel:!1,fixed:!1,fillColor:color_default.palette.red,strokeColor:color_default.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",layer:9,name:""},point2:{fillColor:color_default.palette.red,strokeColor:color_default.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",layer:9,visible:!1,withLabel:!1,fixed:!1,name:""},label:{position:"urt"}},circumcircle:{fillColor:"none",highlightFillColor:"none",strokeColor:color_default.palette.blue,highlightStrokeColor:"#c3d9ff",center:{visible:!1,fixed:!1,withLabel:!1,fillColor:color_default.palette.red,strokeColor:color_default.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",name:""}},circumcirclearc:{fillColor:"none",highlightFillColor:"none",strokeColor:color_default.palette.blue,highlightStrokeColor:"#c3d9ff",useDirection:!0,center:{visible:!1,withLabel:!1,fixed:!1,name:""}},circumcirclesector:{useDirection:!0,fillColor:color_default.palette.yellow,highlightFillColor:color_default.palette.yellow,fillOpacity:.3,highlightFillOpacity:.3,strokeColor:color_default.palette.blue,highlightStrokeColor:"#c3d9ff",point:{visible:!1,fixed:!1,withLabel:!1,name:""}},comb:{frequency:.2,width:.4,angle:Math.PI/3,reverse:!1,point1:{visible:!1,withLabel:!1,fixed:!1,name:""},point2:{visible:!1,withLabel:!1,fixed:!1,name:""},strokeWidth:1,strokeColor:"#0000ff",fillColor:"none"},conic:{fillColor:"none",highlightFillColor:"none",strokeColor:color_default.palette.blue,highlightStrokeColor:"#c3d9ff",foci:{fixed:!1,visible:!1,withLabel:!1,name:""},center:{visible:!1,withLabel:!1,name:""},point:{withLabel:!1,name:""},line:{visible:!1}},curve:{strokeWidth:1,strokeColor:color_default.palette.blue,fillColor:"none",fixed:!0,curveType:null,doAdvancedPlot:!0,doAdvancedPlotOld:!1,firstArrow:!1,handDrawing:!1,label:{position:"rt"},lastArrow:!1,lineCap:"round",numberPointsHigh:1600,numberPointsLow:400,plotVersion:2,RDPsmoothing:!1,RDPthreshold:.2,recursionDepthHigh:17,recursionDepthLow:15},foreignobject:{fixed:!0,visible:!0,needsRegularUpdate:!1,attractors:[],evaluateOnlyOnce:!1},functiongraph:{label:{position:"rt"},RDPsmoothing:!0},glider:{label:{}},grid:{needsRegularUpdate:!1,hasGrid:!1,highlight:!1,gridX:null,gridY:null,majorStep:"auto",minorElements:0,forceSquare:!1,includeBoundaries:!1,size:void 0,face:void 0,margin:void 0,drawZero:void 0,polygonVertices:void 0,major:{size:5,face:"line",margin:0,drawZero:!0,polygonVertices:6},minor:{visible:"inherit",size:3,face:"point",margin:0,drawZero:!0,polygonVertices:6},snapToGrid:!1,strokeColor:"#c0c0c0",strokeWidth:1,strokeOpacity:.5,dash:0,theme:0,themes:[{},{forceSquare:"min",major:{face:"line"}},{major:{face:"line"},minor:{size:3,face:"point"},minorElements:"auto"},{major:{face:"line"},minor:{face:"line",strokeOpacity:.25},minorElements:"auto"},{major:{face:"line"},minor:{face:"+",size:"95%"},minorElements:"auto"},{major:{face:"+",size:10,strokeOpacity:1},minor:{face:"point",size:3},minorElements:"auto"},{major:{face:"circle",size:8,fillColor:"#c0c0c0"},minor:{face:"point",size:3},minorElements:"auto"}]},group:{needsRegularUpdate:!0},htmlslider:{widthRange:100,widthOut:34,step:.01,frozen:!0,isLabel:!1,strokeColor:"#000000",display:"html",anchorX:"left",anchorY:"middle",withLabel:!1},image:{imageString:null,fillOpacity:1,highlightFillOpacity:.6,cssClass:"JXGimage",highlightCssClass:"JXGimageHighlight",rotate:0,snapSizeX:1,snapSizeY:1,attractors:[]},implicitcurve:{margin:1,resolution_outer:5,resolution_inner:5,max_steps:1024,alpha_0:.05,tol_u0:math_default.eps,tol_newton:1e-7,tol_cusp:.05,tol_progress:1e-4,qdt_box:.2,kappa_0:.2,delta_0:.05,h_initial:.1,h_critical:.001,h_max:.5,loop_dist:.09,loop_dir:.99,loop_detection:!0},incircle:{fillColor:"none",highlightFillColor:"none",strokeColor:color_default.palette.blue,highlightStrokeColor:"#c3d9ff",center:{visible:!1,fixed:!1,withLabel:!1,fillColor:color_default.palette.red,strokeColor:color_default.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",name:""}},inequality:{fillColor:color_default.palette.red,fillOpacity:.2,strokeColor:"none",inverse:!1},infobox:{distanceX:-20,distanceY:25,intl:{enabled:"inherit",options:{}},fontSize:12,isLabel:!1,strokeColor:"#bbbbbb",display:"html",anchorX:"left",anchorY:"middle",cssClass:"JXGinfobox",rotate:0,visible:!0,parse:!1,transitionDuration:0,needsRegularUpdate:!1,tabindex:null,viewport:[0,0,0,0],ignoreForLabelAutoposition:!0},integral:{axis:"x",withLabel:!0,fixed:!0,strokeWidth:0,strokeOpacity:0,fillColor:color_default.palette.red,fillOpacity:.3,highlightFillColor:color_default.palette.red,highlightFillOpacity:.2,curveLeft:{visible:!0,withLabel:!1,color:color_default.palette.red,fillOpacity:.8,layer:9},baseLeft:{visible:!1,fixed:!1,withLabel:!1,name:""},curveRight:{visible:!0,withLabel:!1,color:color_default.palette.red,fillOpacity:.8,layer:9},baseRight:{visible:!1,fixed:!1,withLabel:!1,name:""},label:{fontSize:20,digits:4,intl:{enabled:!1,options:{}}}},input:{disabled:!1,maxlength:524288,display:"html"},intersection:{alwaysIntersect:!0},label:{visible:"inherit",clip:"inherit",strokeColor:"#000000",strokeOpacity:1,highlightStrokeOpacity:.666666,highlightStrokeColor:"#000000",fixed:!0,tabindex:null,position:"urt",distance:1.5,offset:[10,10],autoPosition:!1,autoPositionMinDistance:12,autoPositionMaxDistance:28,autoPositionWhitelist:[]},legend:{style:"vertical",labels:["1","2","3","4","5","6","7","8"],colors:["#B02B2C","#3F4C6B","#C79810","#D15600","#FFFF88","#c3d9ff","#4096EE","#008C00"],lineLength:1,strokeOpacity:[1],rowHeight:20,strokeWidth:5,frozen:!1},line:{firstArrow:!1,lastArrow:!1,margin:0,straightFirst:!0,straightLast:!0,fillColor:"none",highlightFillColor:"none",strokeColor:color_default.palette.blue,highlightStrokeColor:"#c3d9ff",withTicks:!1,point1:{fillColor:color_default.palette.red,strokeColor:color_default.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",layer:9,visible:!1,withLabel:!1,fixed:!1,name:""},point2:{fillColor:color_default.palette.red,strokeColor:color_default.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",layer:9,visible:!1,withLabel:!1,fixed:!1,name:""},ticks:{drawLabels:!0,label:{offset:[4,-9]},drawZero:!1,insertTicks:!1,ticksDistance:1,minTicksDistance:50,minorHeight:4,majorHeight:-1,minorTicks:4,strokeOpacity:.3,visible:"inherit"},label:{position:"llft"},snapToGrid:!1,snapSizeX:1,snapSizeY:1,touchFirstPoint:!1,touchLastPoint:!1,transitionProperties:[]},locus:{translateToOrigin:!1,translateTo10:!1,stretch:!1,toOrigin:null,to10:null},measurement:{baseUnit:"",units:{},showPrefix:!0,showSuffix:!0,prefix:"",suffix:"",dim:null,formatCoords:function(t,e,r,s){return parseFloat(s)!==1?"Infinit coords":"("+e+", "+r+")"},formatDirection:function(t,e,r){return"("+e+", "+r+")"}},metapostspline:{createPoints:!0,isArrayOfCoordinates:!0,points:{strokeOpacity:.5,fillOpacity:.5,highlightStrokeOpacity:1,highlightFillOpacity:1,withLabel:!1,name:"",fixed:!1}},mirrorelement:{fixed:!0,point:{},center:{},type:"Euclidean"},nonreflexangle:{},normal:{strokeColor:"#000000",point:{visible:!1,fixed:!1,withLabel:!1,name:""}},orthogonalprojection:{},otherintersection:{alwaysIntersect:!0,precision:.001},parallel:{strokeColor:"#000000",point:{visible:!1,fixed:!1,withLabel:!1,name:""},label:{position:"llft"}},parallelogram:{parallelpoint:{withLabel:!1,name:""}},parallelpoint:{},perpendicular:{strokeColor:"#000000",straightFirst:!0,straightLast:!0},perpendicularsegment:{strokeColor:"#000000",straightFirst:!1,straightLast:!1,point:{visible:!1,fixed:!0,withLabel:!1,name:""}},point:{withLabel:!0,label:{},style:5,face:"o",size:3,sizeUnit:"screen",strokeWidth:2,transitionProperties:["fill","fill-opacity","stroke","stroke-opacity","stroke-width","width","height","rx","ry"],fillColor:color_default.palette.red,strokeColor:color_default.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",zoom:!1,showInfobox:"inherit",infoboxDigits:"auto",attractors:[],attractorUnit:"user",attractorDistance:0,snatchDistance:0,snapToGrid:!1,attractToGrid:!1,snapSizeX:1,snapSizeY:1,snapToPoints:!1,ignoredSnapToPoints:[]},polygon:{hasInnerPoints:!1,fillColor:color_default.palette.yellow,highlightFillColor:color_default.palette.yellow,fillOpacity:.3,highlightFillOpacity:.2,withLines:!0,borders:{withLabel:!1,strokeWidth:1,highlightStrokeWidth:1,layer:5,label:{position:"top"},visible:"inherit"},highlightByStrokeWidth:!1,vertices:{layer:9,withLabel:!1,name:"",strokeColor:color_default.palette.red,fillColor:color_default.palette.red,fixed:!1,visible:"inherit"},label:{offset:[0,0]}},polygonalchain:{fillColor:"none",highlightFillColor:"none"},prescribedangle:{anglePoint:{size:2,visible:!1,withLabel:!1}},reflection:{fixed:!0,center:{},type:"Euclidean"},reflexangle:{},regularpolygon:{hasInnerPoints:!1,fillColor:color_default.palette.yellow,highlightFillColor:color_default.palette.yellow,fillOpacity:.3,highlightFillOpacity:.2,withLines:!0,borders:{withLabel:!1,strokeWidth:1,highlightStrokeWidth:1,layer:5,label:{position:"top"}},vertices:{layer:9,withLabel:!0,strokeColor:color_default.palette.red,fillColor:color_default.palette.red,fixed:!1},label:{offset:[0,0]}},riemannsum:{withLabel:!1,fillOpacity:.3,fillColor:color_default.palette.yellow},sector:{fillColor:color_default.palette.yellow,highlightFillColor:color_default.palette.yellow,fillOpacity:.3,highlightFillOpacity:.3,highlightOnSector:!1,highlightStrokeWidth:0,useDirection:!1,selection:"auto",orientation:"counterclockwise",arc:{visible:!1,fillColor:"none",withLabel:!1,name:"",orientation:"inherit",center:{visible:!1,withLabel:!1,name:""},radiusPoint:{visible:!1,withLabel:!1,name:""},anglePoint:{visible:!1,withLabel:!1,name:""}},radiusPoint:{visible:!1,withLabel:!1},center:{visible:!1,withLabel:!1},anglePoint:{visible:!1,withLabel:!1},label:{offset:[0,0],anchorX:"auto",anchorY:"auto"}},segment:{label:{position:"top"}},semicircle:{center:{visible:!1,withLabel:!1,fixed:!1,fillColor:color_default.palette.red,strokeColor:color_default.palette.red,highlightFillColor:"#eeeeee",highlightStrokeColor:color_default.palette.red,name:""}},sketchcurve:{visible:!0,strokeColor:jxg_default.palette.red,highlight:!1,strokeWidth:1,lineCap:"round",deleteOnUp:!1,maxLength:null},slider:{snapWidth:-1,snapValues:[],snapValueDistance:0,precision:2,digits:2,intl:{enabled:"inherit",options:{}},firstArrow:!1,lastArrow:!1,withTicks:!0,withLabel:!0,suffixLabel:null,unitLabel:null,postLabel:null,layer:9,showInfobox:!1,name:"",visible:!0,strokeColor:"#000000",highlightStrokeColor:"#888888",fillColor:"#ffffff",highlightFillColor:"none",size:6,point1:{needsRegularUpdate:!1,showInfobox:!1,withLabel:!1,visible:!1,fixed:!0,frozen:"inherit",name:""},point2:{needsRegularUpdate:!1,showInfobox:!1,withLabel:!1,visible:!1,fixed:!0,frozen:"inherit",name:""},baseline:{needsRegularUpdate:!1,visible:"inherit",clip:"inherit",fixed:!0,scalable:!1,tabindex:null,name:"",strokeWidth:1,strokeColor:"#000000",highlightStrokeColor:"#888888"},ticks:{needsRegularUpdate:!1,fixed:!0,clip:"inherit",drawLabels:!1,digits:2,includeBoundaries:!0,drawZero:!0,label:{offset:[-4,-14],display:"internal"},minTicksDistance:30,insertTicks:!0,ticksDistance:1,minorHeight:4,majorHeight:5,minorTicks:0,strokeOpacity:1,strokeWidth:1,tickEndings:[0,1],majortickEndings:[0,1],strokeColor:"#000000",visible:"inherit"},highline:{strokeWidth:3,visible:"inherit",clip:"inherit",fixed:!0,tabindex:null,name:"",strokeColor:"#000000",highlightStrokeColor:"#888888"},label:{visible:"inherit",clip:"inherit",strokeColor:"#000000"},moveOnUp:!0},slopefield:{strokeWidth:.5,highlightStrokeWidth:.5,highlightStrokeColor:color_default.palette.blue,highlightStrokeOpacity:.8,scale:1,arrowhead:{enabled:!1,size:5,angle:Math.PI*.125}},slopetriangle:{fillColor:color_default.palette.red,fillOpacity:.4,highlightFillColor:color_default.palette.red,highlightFillOpacity:.3,borders:{lastArrow:{type:1,size:6}},glider:{fixed:!0,visible:!1,withLabel:!1},baseline:{visible:!1,withLabel:!1,name:""},basepoint:{visible:!1,withLabel:!1,name:""},tangent:{visible:!1,withLabel:!1,name:""},toppoint:{visible:!1,withLabel:!1,name:""},label:{visible:!0,position:"first",digits:function(t){return t.slopetriangle.evalVisProp("digits")},showPrefix:function(t){return t.slopetriangle.evalVisProp("showPrefix")},showSuffix:function(t){return t.slopetriangle.evalVisProp("showSuffix")},prefix:function(t){return t.slopetriangle.evalVisProp("prefix")},suffix:function(t){return t.slopetriangle.evalVisProp("suffix")}},digits:2,showPrefix:!0,showSuffix:!0,prefix:"",suffix:"",formatValue:null},smartlabel:{cssClass:"smart-label-solid",highlightCssClass:"smart-label-solid",unit:"",baseUnit:"",units:{},showPrefix:!0,showSuffix:!0,prefix:"",suffix:"",formatValue:null,measure:"",useMathJax:!0},smartlabelangle:{cssClass:"smart-label-solid smart-label-angle",highlightCssClass:"smart-label-solid smart-label-angle",anchorX:"left",anchorY:"middle"},smartlabelcircle:{cssClass:"smart-label-solid smart-label-circle",highlightCssClass:"smart-label-solid smart-label-circle",anchorX:"middle",measure:"radius",visibleThreshold:.6},smartlabelline:{cssClass:"smart-label-solid smart-label-line",highlightCssClass:"smart-label-solid smart-label-line",anchorX:"middle",measure:"length",orientation:"parallel",visibleThreshold:.7},smartlabelpoint:{cssClass:"smart-label-solid smart-label-point",highlightCssClass:"smart-label-solid smart-label-point",anchorX:"middle",anchorY:"top",measure:"coords",dir:"row"},smartlabelpolygon:{cssClass:"smart-label-solid smart-label-polygon",highlightCssClass:"smart-label-solid smart-label-polygon",anchorX:"middle",measure:"area"},stepfunction:{},tangent:{},tangentto:{polar:{visible:!1,strokeWidth:1,dash:3},point:{visible:!1}},tapemeasure:{strokeColor:"#000000",strokeWidth:2,highlightStrokeColor:"#000000",withTicks:!0,withLabel:!0,rotate:0,precision:2,digits:2,point1:{visible:!0,strokeColor:"#000000",fillColor:"#ffffff",fillOpacity:0,highlightFillOpacity:.1,size:6,snapToPoints:!0,attractorUnit:"screen",attractorDistance:20,showInfobox:!1,withLabel:!1,name:""},point2:{visible:!0,strokeColor:"#000000",fillColor:"#ffffff",fillOpacity:0,highlightFillOpacity:.1,size:6,snapToPoints:!0,attractorUnit:"screen",attractorDistance:20,showInfobox:!1,withLabel:!1,name:""},ticks:{drawLabels:!1,drawZero:!0,insertTicks:!0,ticksDistance:.1,minorHeight:8,majorHeight:16,minorTicks:4,tickEndings:[0,1],majorTickEndings:[0,1],strokeOpacity:1,strokeWidth:1,strokeColor:"#000000",visible:"inherit",label:{anchorY:"top",anchorX:"middle",offset:[0,-10]}},label:{position:"top"}},text:{fontSize:12,fontUnit:"px",formatNumber:!1,digits:2,intl:{enabled:"inherit",options:{minimumFractionDigits:0,maximumFractionDigits:2}},parse:!0,useCaja:!1,isLabel:!1,strokeColor:"#000000",highlightStrokeColor:"#000000",highlightStrokeOpacity:.666666,cssDefaultStyle:"font-family: Arial, Helvetica, Geneva, sans-serif;",highlightCssDefaultStyle:"font-family: Arial, Helvetica, Geneva, sans-serif;",cssStyle:"",highlightCssStyle:"",transitionProperties:["color","opacity"],useASCIIMathML:!1,useMathJax:!1,useKatex:!1,katexMacros:{},toFraction:!1,display:"html",anchor:null,anchorX:"left",anchorY:"middle",cssClass:"JXGtext",highlightCssClass:"JXGtext",dragArea:"all",withLabel:!1,rotate:0,visible:!0,snapSizeX:1,snapSizeY:1,attractors:[]},tracecurve:{strokeColor:"#000000",fillColor:"none",numberPoints:100},turtle:{strokeWidth:1,fillColor:"none",strokeColor:"#000000",arrow:{strokeWidth:2,withLabel:!1,strokeColor:color_default.palette.red,lastArrow:!0}},vectorfield:{strokeWidth:.5,highlightStrokeWidth:.5,highlightStrokeColor:color_default.palette.blue,highlightStrokeOpacity:.8,scale:1,arrowhead:{enabled:!0,size:5,angle:Math.PI*.125}},shortcuts:{color:["strokeColor","fillColor"],opacity:["strokeOpacity","fillOpacity"],highlightColor:["highlightStrokeColor","highlightFillColor"],highlightOpacity:["highlightStrokeOpacity","highlightFillOpacity"],strokeWidth:["strokeWidth","highlightStrokeWidth"]}};jxg_default.Validator=(function(){var t,e=function(_){return/^[0-9]+px$/.test(_)},r=function(_){return _==="html"||_==="internal"},s=function(_){return type_default.isString(_)},o=function(_){return type_default.exists(jxg_default.normalizePointFace(_))},a=function(_){return type_default.isNumber(_,!0,!1)},n=function(_){return Math.abs(_-Math.round(_))<math_default.eps},l=function(_){return n(_)&&_>=0},h=function(_){return n(_)&&_>0},d=function(_){return _==="vml"||_==="svg"||_==="canvas"||_==="no"},u=function(_){return _>0},c=function(_){return _>=0},p={},f={attractorDistance:c,color:s,display:r,doAdvancedPlot:!1,draft:!1,drawLabels:!1,drawZero:!1,face:o,factor:a,fillColor:s,fillOpacity:a,firstArrow:!1,fontSize:n,dash:n,gridX:a,gridY:a,hasGrid:!1,highlightFillColor:s,highlightFillOpacity:a,highlightStrokeColor:s,highlightStrokeOpacity:a,insertTicks:!1,lastArrow:!1,layer:l,majorHeight:n,minorHeight:n,minorTicks:c,minTicksDistance:h,numberPointsHigh:h,numberPointsLow:h,opacity:a,radius:a,RDPsmoothing:!1,renderer:d,right:e,showCopyright:!1,showInfobox:!1,showNavigation:!1,size:c,snapSizeX:u,snapSizeY:u,snapWidth:a,snapToGrid:!1,snatchDistance:c,straightFirst:!1,straightLast:!1,stretch:!1,strokeColor:s,strokeOpacity:a,strokeWidth:c,takeFirst:!1,takeSizeFromFile:!1,to10:!1,toOrigin:!1,translateTo10:!1,translateToOrigin:!1,useASCIIMathML:!1,useDirection:!1,useMathJax:!1,withLabel:!1,withTicks:!1,zoom:!1};for(t in f)f.hasOwnProperty(t)&&(p[t.toLowerCase()]=f[t]);return p})();jxg_default.normalizePointFace=function(t){return{cross:"x",x:"x",circle:"o",o:"o",square:"[]","[]":"[]",plus:"+","+":"+",divide:"|","|":"|",minus:"-","-":"-",diamond:"<>","<>":"<>",diamond2:"<<>>","<<>>":"<<>>",triangleup:"^",A:"^",a:"^","^":"^",triangledown:"v",v:"v",triangleleft:"<","<":"<",triangleright:">",">":">"}[t]};jxg_default.useStandardOptions=function(t){var e,r,s,o,a=jxg_default.Options,n=t.hasGrid;t.options.grid.hasGrid=a.grid.hasGrid,t.options.grid.gridX=a.grid.gridX,t.options.grid.gridY=a.grid.gridY,t.options.grid.gridColor=a.grid.gridColor,t.options.grid.gridOpacity=a.grid.gridOpacity,t.options.grid.gridDash=a.grid.gridDash,t.options.grid.snapToGrid=a.grid.snapToGrid,t.options.grid.snapSizeX=a.grid.SnapSizeX,t.options.grid.snapSizeY=a.grid.SnapSizeY,t.takeSizeFromFile=a.takeSizeFromFile,o=function(l,h){l.visProp.fillcolor=h.fillColor,l.visProp.highlightfillcolor=h.highlightFillColor,l.visProp.strokecolor=h.strokeColor,l.visProp.highlightstrokecolor=h.highlightStrokeColor};for(e in t.objects)if(t.objects.hasOwnProperty(e))if(s=t.objects[e],s.elementClass===constants.OBJECT_CLASS_POINT)o(s,a.point);else if(s.elementClass===constants.OBJECT_CLASS_LINE)for(o(s,a.line),r=0;r<s.ticks.length;r++)s.ticks[r].majorTicks=a.line.ticks.majorTicks,s.ticks[r].minTicksDistance=a.line.ticks.minTicksDistance,s.ticks[r].visProp.minorheight=a.line.ticks.minorHeight,s.ticks[r].visProp.majorheight=a.line.ticks.majorHeight;else s.elementClass===constants.OBJECT_CLASS_CIRCLE?o(s,a.circle):s.type===constants.OBJECT_TYPE_ANGLE?o(s,a.angle):s.type===constants.OBJECT_TYPE_ARC?o(s,a.arc):s.type===constants.OBJECT_TYPE_POLYGON?o(s,a.polygon):s.type===constants.OBJECT_TYPE_CONIC?o(s,a.conic):s.type===constants.OBJECT_TYPE_CURVE?o(s,a.curve):s.type===constants.OBJECT_TYPE_SECTOR&&(s.arc.visProp.fillcolor=a.sector.fillColor,s.arc.visProp.highlightfillcolor=a.sector.highlightFillColor,s.arc.visProp.fillopacity=a.sector.fillOpacity,s.arc.visProp.highlightfillopacity=a.sector.highlightFillOpacity);t.fullUpdate(),n&&!t.hasGrid?t.removeGrids(t):!n&&t.hasGrid&&t.create("grid",[])};jxg_default.useBlackWhiteOptions=function(t){var e=jxg_default.Options;e.point.fillColor=color_default.rgb2bw(e.point.fillColor),e.point.highlightFillColor=color_default.rgb2bw(e.point.highlightFillColor),e.point.strokeColor=color_default.rgb2bw(e.point.strokeColor),e.point.highlightStrokeColor=color_default.rgb2bw(e.point.highlightStrokeColor),e.line.fillColor=color_default.rgb2bw(e.line.fillColor),e.line.highlightFillColor=color_default.rgb2bw(e.line.highlightFillColor),e.line.strokeColor=color_default.rgb2bw(e.line.strokeColor),e.line.highlightStrokeColor=color_default.rgb2bw(e.line.highlightStrokeColor),e.circle.fillColor=color_default.rgb2bw(e.circle.fillColor),e.circle.highlightFillColor=color_default.rgb2bw(e.circle.highlightFillColor),e.circle.strokeColor=color_default.rgb2bw(e.circle.strokeColor),e.circle.highlightStrokeColor=color_default.rgb2bw(e.circle.highlightStrokeColor),e.arc.fillColor=color_default.rgb2bw(e.arc.fillColor),e.arc.highlightFillColor=color_default.rgb2bw(e.arc.highlightFillColor),e.arc.strokeColor=color_default.rgb2bw(e.arc.strokeColor),e.arc.highlightStrokeColor=color_default.rgb2bw(e.arc.highlightStrokeColor),e.polygon.fillColor=color_default.rgb2bw(e.polygon.fillColor),e.polygon.highlightFillColor=color_default.rgb2bw(e.polygon.highlightFillColor),e.sector.fillColor=color_default.rgb2bw(e.sector.fillColor),e.sector.highlightFillColor=color_default.rgb2bw(e.sector.highlightFillColor),e.curve.strokeColor=color_default.rgb2bw(e.curve.strokeColor),e.grid.gridColor=color_default.rgb2bw(e.grid.gridColor),jxg_default.useStandardOptions(t)};jxg_default.Options.normalizePointFace=jxg_default.normalizePointFace;var options_default=jxg_default.Options;jxg_default.AbstractRenderer=function(){this.vOffsetText=0,this.enhancedRendering=!0,this.container=null,this.type="",this.supportsForeignObject=!1,this.dashArray=[[2,2],[5,5],[10,10],[20,20],[20,10,10,10],[20,5,10,5],[0,5]]};jxg_default.extend(jxg_default.AbstractRenderer.prototype,{_updateVisual:function(t,e,r){(r||this.enhancedRendering)&&(e=e||{},this.setObjectTransition(t),this.setClipPath(t,!!t.evalVisProp("clip")),t.evalVisProp("draft")?this.setDraft(t):(e.stroke||(t.highlighted?(this.setObjectStrokeColor(t,t.evalVisProp("highlightstrokecolor"),t.evalVisProp("highlightstrokeopacity")),this.setObjectStrokeWidth(t,t.evalVisProp("highlightstrokewidth"))):(this.setObjectStrokeColor(t,t.evalVisProp("strokecolor"),t.evalVisProp("strokeopacity")),this.setObjectStrokeWidth(t,t.evalVisProp("strokewidth")))),e.fill||(t.highlighted?this.setObjectFillColor(t,t.evalVisProp("highlightfillcolor"),t.evalVisProp("highlightfillopacity")):this.setObjectFillColor(t,t.evalVisProp("fillcolor"),t.evalVisProp("fillopacity"))),e.dash||this.setDashStyle(t,t.visProp),e.shadow||this.setShadow(t),e.tabindex||this.setTabindex(t)),t.highlighted?this.setCssClass(t,t.evalVisProp("highlightcssclass")):this.setCssClass(t,t.evalVisProp("cssclass")),t.evalVisProp("aria.enabled")&&this.setARIA(t))},_getHighlighted:function(t){var e=!1,r;return(!type_default.exists(t.board)||!type_default.exists(t.board.highlightedObjects))&&(e=!0),!e&&type_default.exists(t.board.highlightedObjects[t.id])?r="highlight":r="",r},drawPoint:function(t){var e,r=options_default.normalizePointFace(t.evalVisProp("face"));r==="o"?e="ellipse":r==="[]"?e="rect":e="path",t.rendNode=this.appendChildPrim(this.createPrim(e,t.id),t.evalVisProp("layer")),this.appendNodesToElement(t,e),this._updateVisual(t,{dash:!0,shadow:!0},!0),this.updatePoint(t)},updatePoint:function(t){var e=t.evalVisProp("size"),r=options_default.normalizePointFace(t.evalVisProp("face")),s=t.evalVisProp("sizeunit"),o=t.evalVisProp("zoom"),a;isNaN(t.coords.scrCoords[2]+t.coords.scrCoords[1])||(s==="user"&&(e*=Math.sqrt(Math.abs(t.board.unitX*t.board.unitY))),e*=!t.board||!o?1:Math.sqrt(t.board.zoomX*t.board.zoomY),a=e===0?0:e+1,r==="o"?this.updateEllipsePrim(t.rendNode,t.coords.scrCoords[1],t.coords.scrCoords[2],a,a):r==="[]"?this.updateRectPrim(t.rendNode,t.coords.scrCoords[1]-e,t.coords.scrCoords[2]-e,e*2,e*2):this.updatePathPrim(t.rendNode,this.updatePathStringPoint(t,e,r),t.board),this._updateVisual(t,{dash:!1,shadow:!1}),this.setShadow(t))},changePointStyle:function(t){var e=this.getElementById(t.id);type_default.exists(e)&&this.remove(e),this.drawPoint(t),type_default.clearVisPropOld(t),t.visPropCalc.visible||this.display(t,!1),t.evalVisProp("draft")&&this.setDraft(t)},drawLine:function(t){t.rendNode=this.appendChildPrim(this.createPrim("line",t.id),t.evalVisProp("layer")),this.appendNodesToElement(t,"lines"),this.updateLine(t)},updateLine:function(t){this._updateVisual(t),this.updatePathWithArrowHeads(t),this.setLineCap(t)},drawCurve:function(t){t.rendNode=this.appendChildPrim(this.createPrim("path",t.id),t.evalVisProp("layer")),this.appendNodesToElement(t,"path"),this.updateCurve(t)},updateCurve:function(t){this._updateVisual(t),this.updatePathWithArrowHeads(t),this.setLineCap(t)},updatePathWithArrowHeads:function(t,e){var r=e?"highlight":"",s,o;e&&t.evalVisProp("highlightstrokewidth")?s=Math.max(t.evalVisProp("highlightstrokewidth"),t.evalVisProp("strokewidth")):s=t.evalVisProp("strokewidth"),o=this.getArrowHeadData(t,s,r),this.makeArrows(t,o),t.elementClass===constants.OBJECT_CLASS_LINE?this.updateLineWithEndings(t,o):t.elementClass===constants.OBJECT_CLASS_CURVE&&this.updatePath(t),this.setArrowSize(t,o)},getArrowHeadData:function(t,e,r){var s=math_default.eps,o,a,n=0,l=0,h=0,d=0,u=t.evalVisProp("firstarrow"),c=t.evalVisProp("lastarrow"),p,f;return(u||c)&&(type_default.exists(u.type)?o=t.eval(u.type):t.elementClass===constants.OBJECT_CLASS_LINE?o=1:o=7,type_default.exists(c.type)?a=t.eval(c.type):t.elementClass===constants.OBJECT_CLASS_LINE?a=1:a=7,u&&(f=6,type_default.exists(u.size)&&(f=t.eval(u.size)),r!==""&&type_default.exists(u[r+"size"])&&(f=t.eval(u[r+"size"])),p=e*f,o===2?(p*=.5,s+=e*f):o===3?(p=e*f/3,s+=e):o===4||o===5||o===6?(p=e*f/1.5,s+=e*f):o===7?(p=0,f=10,s+=e):s+=e*f,n+=p,h=f),c&&(f=6,type_default.exists(c.size)&&(f=t.eval(c.size)),r!==""&&type_default.exists(c[r+"size"])&&(f=t.eval(c[r+"size"])),p=e*f,a===2?(p*=.5,s+=e*f):a===3?(p=e*f/3,s+=e):a===4||a===5||a===6?(p=e*f/1.5,s+=e*f):a===7?(p=0,f=10,s+=e):s+=e*f,l+=p,d=f)),t.visPropCalc.typeFirst=o,t.visPropCalc.typeLast=a,{evFirst:u,evLast:c,typeFirst:o,typeLast:a,offFirst:n,offLast:l,sizeFirst:h,sizeLast:d,showFirst:1,showLast:1,minLen:s,strokeWidth:e}},updateLineWithEndings:function(t,e){var r,s,o=null;return r=new coords_default(constants.COORDS_BY_USER,t.point1.coords.usrCoords,t.board),s=new coords_default(constants.COORDS_BY_USER,t.point2.coords.usrCoords,t.board),o=t.evalVisProp("margin"),t.evalVisProp("clip")||(o+=4096),geometry_default.calcStraight(t,r,s,o),this.handleTouchpoints(t,r,s,e),this.getPositionArrowHead(t,r,s,e),this.updateLinePrim(t.rendNode,r.scrCoords[1],r.scrCoords[2],s.scrCoords[1],s.scrCoords[2],t.board),this},updatePath:function(t){return t.evalVisProp("handdrawing")?this.updatePathPrim(t.rendNode,this.updatePathStringBezierPrim(t),t.board):this.updatePathPrim(t.rendNode,this.updatePathStringPrim(t),t.board),this},getPositionArrowHead:function(t,e,r,s){var o,a,n,l,h;return(s.evFirst||s.evLast)&&(a=n=l=h=0,o=e.distance(constants.COORDS_BY_SCREEN,r),s.evFirst&&t.board.renderer.type!=="vml"&&(o>=s.minLen?(a=(r.scrCoords[1]-e.scrCoords[1])*s.offFirst/o,n=(r.scrCoords[2]-e.scrCoords[2])*s.offFirst/o):s.showFirst=0),s.evLast&&t.board.renderer.type!=="vml"&&(o>=s.minLen?(l=(r.scrCoords[1]-e.scrCoords[1])*s.offLast/o,h=(r.scrCoords[2]-e.scrCoords[2])*s.offLast/o):s.showLast=0),e.setCoordinates(constants.COORDS_BY_SCREEN,[e.scrCoords[1]+a,e.scrCoords[2]+n],!1,!0),r.setCoordinates(constants.COORDS_BY_SCREEN,[r.scrCoords[1]-l,r.scrCoords[2]-h],!1,!0)),this},handleTouchpoints:function(t,e,r,s){var o,a,n,l,h,d,u;return(s.evFirst||s.evLast)&&(n=l=h=d=u=0,o=t.point1.evalVisProp("size")+t.point1.evalVisProp("strokewidth"),a=t.point2.evalVisProp("size")+t.point2.evalVisProp("strokewidth"),s.evFirst&&t.evalVisProp("touchfirstpoint")&&t.point1.evalVisProp("visible")&&(n=e.distance(constants.COORDS_BY_SCREEN,r),l=(r.scrCoords[1]-e.scrCoords[1])*o/n,h=(r.scrCoords[2]-e.scrCoords[2])*o/n),s.evLast&&t.evalVisProp("touchlastpoint")&&t.point2.evalVisProp("visible")&&(n=e.distance(constants.COORDS_BY_SCREEN,r),d=(r.scrCoords[1]-e.scrCoords[1])*a/n,u=(r.scrCoords[2]-e.scrCoords[2])*a/n),e.setCoordinates(constants.COORDS_BY_SCREEN,[e.scrCoords[1]+l,e.scrCoords[2]+h],!1,!0),r.setCoordinates(constants.COORDS_BY_SCREEN,[r.scrCoords[1]-d,r.scrCoords[2]-u],!1,!0)),this},setArrowSize:function(t,e){return e.evFirst&&this._setArrowWidth(t.rendNodeTriangleStart,e.showFirst*e.strokeWidth,t.rendNode,e.sizeFirst),e.evLast&&this._setArrowWidth(t.rendNodeTriangleEnd,e.showLast*e.strokeWidth,t.rendNode,e.sizeLast),this},setLineCap:function(t){},drawTicks:function(t){t.rendNode=this.appendChildPrim(this.createPrim("path",t.id),t.evalVisProp("layer")),this.appendNodesToElement(t,"path")},updateTicks:function(t){},drawEllipse:function(t){t.rendNode=this.appendChildPrim(this.createPrim("ellipse",t.id),t.evalVisProp("layer")),this.appendNodesToElement(t,"ellipse"),this.updateEllipse(t)},updateEllipse:function(t){this._updateVisual(t);var e=t.Radius();Math.abs(t.center.coords.usrCoords[0])>math_default.eps&&!isNaN(e+t.center.coords.scrCoords[1]+t.center.coords.scrCoords[2])&&e*t.board.unitX<2e6&&this.updateEllipsePrim(t.rendNode,t.center.coords.scrCoords[1],t.center.coords.scrCoords[2],e*t.board.unitX,e*t.board.unitY),this.setLineCap(t)},drawPolygon:function(t){t.rendNode=this.appendChildPrim(this.createPrim("polygon",t.id),t.evalVisProp("layer")),this.appendNodesToElement(t,"polygon"),this.updatePolygon(t)},updatePolygon:function(t){this._updateVisual(t,{stroke:!0,dash:!0}),this.updatePolygonPrim(t.rendNode,t)},displayCopyright:function(t,e){},displayLogo:function(t,e){},drawInternalText:function(t){},updateInternalText:function(t){},drawText:function(t){var e,r,s,o;t.evalVisProp("display")==="html"&&env_default.isBrowser&&this.type!=="no"?(e=this.container.ownerDocument.createElement("div"),e.style.position="absolute",e.className=t.evalVisProp("cssclass"),s=t.evalVisProp("layer"),type_default.exists(s)||(s=0),this.container.style.zIndex===""?r=0:r=parseInt(this.container.style.zIndex,10),e.style.zIndex=r+s,this.container.appendChild(e),e.setAttribute("id",this.container.id+"_"+t.id)):e=this.drawInternalText(t),t.rendNode=e,t.htmlStr="",t.visProp.islabel&&type_default.exists(t.visProp.anchor)?(o=t.visProp.anchor.evalVisProp("visible"),t.prepareUpdate().updateVisibility(o)):t.prepareUpdate().updateVisibility(),this.updateText(t)},updateClipPath:function(t,e){var r,s,o,a,n=t.rendNode.offsetWidth,l=t.rendNode.offsetHeight,h=t.rendNode.style.inset.split(" "),d=t.board.canvasWidth,u=t.board.canvasHeight;if(e===void 0&&(e=t.evalVisProp("clip")),!e){t.rendNode.style.removeProperty("clip-path");return}h[3]!=="auto"?(r=parseFloat(h[3]),o=d-r):(o=parseFloat(h[1])+n,r=d-o),h[0]!=="auto"?(s=parseFloat(h[0]),a=u-s):(a=parseFloat(h[2])+l,s=u-a),t.rendNode.style.clipPath="rect("+-s+"px "+o+"px "+a+"px "+-r+"px)"},updateText:function(t){var e=t.plaintext,r,s,o,a,n,l,h,d,u,c,p;if(t.visPropCalc.visible)if(this.updateTextStyle(t,!1),t.evalVisProp("display")==="html"&&this.type!=="no"){if(isNaN(t.coords.scrCoords[1]+t.coords.scrCoords[2])||(s=t.coords.scrCoords[1],s=Math.abs(s)<1e6?s:1e6,n=t.getAnchorX(),n==="right"?(r=t.board.canvasWidth-s,c="right"):n==="middle"?(r=s-.5*t.size[0],c="center"):(r=s,c="left"),t.visPropOld.left!==n+r&&(n==="right"?(t.rendNode.style.right=r+"px",t.rendNode.style.left="auto"):(t.rendNode.style.left=r+"px",t.rendNode.style.right="auto"),t.visPropOld.left=n+r),s=t.coords.scrCoords[2]+this.vOffsetText,s=Math.abs(s)<1e6?s:1e6,l=t.getAnchorY(),l==="bottom"?(r=t.board.canvasHeight-s,p="bottom"):l==="middle"?(r=s-.5*t.size[1],p="center"):(r=s,p="top"),t.visPropOld.top!==l+r&&(l==="bottom"?(t.rendNode.style.top="auto",t.rendNode.style.bottom=r+"px"):(t.rendNode.style.bottom="auto",t.rendNode.style.top=r+"px"),t.visPropOld.top=l+r)),t.htmlStr!==e){try{t.type===type_default.OBJECT_TYPE_BUTTON?t.rendNodeButton.innerHTML=e:t.type===type_default.OBJECT_TYPE_CHECKBOX||t.type===type_default.OBJECT_TYPE_INPUT?t.rendNodeLabel.innerHTML=e:t.rendNode.innerHTML=e}catch{o=t.rendNode.parentNode,t.rendNode.parentNode.removeChild(t.rendNode),t.rendNode.innerHTML=e,o.appendChild(t.rendNode)}if(t.htmlStr=e,t.evalVisProp("usemathjax"))try{MathJax.typeset?MathJax.typeset([t.rendNode]):MathJax.Hub.Queue(["Typeset",MathJax.Hub,t.rendNode])}catch{jxg_default.debug("MathJax (not yet) loaded")}else if(t.evalVisProp("usekatex"))try{t.rendNode.innerHTML.indexOf("<span")===0&&t.rendNode.innerHTML.indexOf("<label")>0&&(t.rendNode.innerHTML.indexOf("<checkbox")>0||t.rendNode.innerHTML.indexOf("<input")>0)?a=t.rendNodeLabel:t.rendNode.innerHTML.indexOf("<button")===0?a=t.rendNodeButton:a=t.rendNode,a&&katex.render(e,a,{macros:t.evalVisProp("katexmacros"),throwOnError:!1})}catch{jxg_default.debug("KaTeX not loaded (yet)")}else if(t.evalVisProp("useasciimathml"))try{AMprocessNode(t.rendNode,!1)}catch{jxg_default.debug("AsciiMathML not loaded (yet)")}}h=t.evalVisProp("rotate"),h!==0&&(h*=Math.PI/180,d=Math.cos(h),u=Math.sin(h),t.rendNode.style.transform="matrix("+[d,-1*u,u,d,0,0].join(",")+")",t.rendNode.style["transform-origin"]=c+" "+p),this.transformRect(t,t.transformations),t.visProp.islabel&&type_default.exists(t.visProp.anchor)&&t.evalVisProp("clip")==="inherit"?this.updateClipPath(t,!!t.visProp.anchor.evalVisProp("clip")):this.updateClipPath(t)}else this.updateInternalText(t)},updateTextStyle:function(t,e){var r,s,o,a,n,l=env_default.isBrowser?t.visProp.display:"internal",h=["rendNode","rendNodeTag","rendNodeLabel"],d=h.length,u=t.evalVisProp("fontunit"),c,p,f,_,g,m=["cssdefaultstyle","cssstyle"],b=m.length;if(e?(o=t.evalVisProp("highlightstrokecolor"),s=t.evalVisProp("highlightstrokeopacity"),a=t.evalVisProp("highlightcssclass")):(o=t.evalVisProp("strokecolor"),s=t.evalVisProp("strokeopacity"),a=t.evalVisProp("cssclass")),this.type!=="no"&&(l==="html"||this.type!=="canvas")){for(_=0;_<b;_++)for(g=t.evalVisProp((e?"highlight":"")+m[_]),n=0;n<d;n++)if(type_default.exists(t[h[n]])&&g!==""&&t.visPropOld[m[_]+"_"+n]!==g){c=type_default.css2js(g);for(p in c)c.hasOwnProperty(p)&&(f=c[p],t[h[n]].style[f.key]=f.val);t.visPropOld[m[_]+"_"+n]=g}if(r=t.evalVisProp("fontsize"),t.visPropOld.fontsize!==r){t.needsSizeUpdate=!0;try{for(n=0;n<d;n++)type_default.exists(t[h[n]])&&(t[h[n]].style.fontSize=r+u)}catch{for(n=0;n<d;n++)type_default.exists(t[h[n]])&&(t[h[n]].style.fontSize=r)}t.visPropOld.fontsize=r}}return this.setTabindex(t),this.setObjectTransition(t),l==="html"&&this.type!=="no"?(t.visPropOld.cssclass!==a&&(t.rendNode.className=a,t.visPropOld.cssclass=a,t.needsSizeUpdate=!0),this.setObjectStrokeColor(t,o,s)):this.updateInternalTextStyle(t,o,s),t.evalVisProp("aria.enabled")&&this.setARIA(t),this},updateInternalTextStyle:function(t,e,r){this.setObjectStrokeColor(t,e,r)},drawImage:function(t){},updateImage:function(t){this.updateRectPrim(t.rendNode,t.coords.scrCoords[1],t.coords.scrCoords[2]-t.size[1],t.size[0],t.size[1]),this.updateImageURL(t),this.transformRect(t,t.transformations),this._updateVisual(t,{stroke:!0,dash:!0},!0)},joinTransforms:function(t,e){var r,s=t.board.origin.scrCoords[1],o=t.board.origin.scrCoords[2],a=t.board.unitX,n=t.board.unitY,l=e.length,h=[[1,0,0],[-s/a,1/a,0],[o/n,0,-1/n]];for(r=0;r<l;r++)h=math_default.matMatMult(e[r].matrix,h);return h=math_default.matMatMult([[1,0,0],[s,a,0],[o,0,-n]],h),h},transformRect:function(t,e){},updateImageURL:function(t){},updateImageStyle:function(t,e){t.rendNode.className=t.evalVisProp(e?"highlightcssclass":"cssclass")},drawForeignObject:function(t){},updateForeignObject:function(t){},appendChildPrim:function(t,e){},appendNodesToElement:function(t,e){},createPrim:function(t,e){return null},remove:function(t){},makeArrows:function(t,e){},_setArrowWidth:function(t,e,r){},updateEllipsePrim:function(t,e,r,s,o){},updateLinePrim:function(t,e,r,s,o,a){},updatePathPrim:function(t,e,r){},updatePathStringPoint:function(t,e,r){},updatePathStringPrim:function(t){},updatePathStringBezierPrim:function(t){},updatePolygonPrim:function(t,e){},updateRectPrim:function(t,e,r,s,o){},display:function(t,e){t&&(t.visPropOld.visible=e)},hide:function(t){},highlight:function(t,e){var r,s,o;if(this.setObjectTransition(t),!t.visProp.draft){if(t.type===constants.OBJECT_TYPE_POLYGON)for(this.setObjectFillColor(t,t.evalVisProp("highlightfillcolor"),t.evalVisProp("highlightfillopacity")),s=t.evalVisProp("highlightbystrokewidth"),r=0;r<t.borders.length;r++)this.highlight(t.borders[r],!s);else t.elementClass===constants.OBJECT_CLASS_TEXT?this.updateTextStyle(t,!0):t.type===constants.OBJECT_TYPE_IMAGE?(this.updateImageStyle(t,!0),this.setObjectFillColor(t,t.evalVisProp("highlightfillcolor"),t.evalVisProp("highlightfillopacity"))):(this.setObjectStrokeColor(t,t.evalVisProp("highlightstrokecolor"),t.evalVisProp("highlightstrokeopacity")),this.setObjectFillColor(t,t.evalVisProp("highlightfillcolor"),t.evalVisProp("highlightfillopacity")));!e&&t.evalVisProp("highlightstrokewidth")&&(o=Math.max(t.evalVisProp("highlightstrokewidth"),t.evalVisProp("strokewidth")),this.setObjectStrokeWidth(t,o),(t.elementClass===constants.OBJECT_CLASS_LINE||t.elementClass===constants.OBJECT_CLASS_CURVE)&&this.updatePathWithArrowHeads(t,!0))}return this.setCssClass(t,t.evalVisProp("highlightcssclass")),this},noHighlight:function(t){var e,r;if(this.setObjectTransition(t),!t.evalVisProp("draft")){if(t.type===constants.OBJECT_TYPE_POLYGON)for(this.setObjectFillColor(t,t.evalVisProp("fillcolor"),t.evalVisProp("fillopacity")),e=0;e<t.borders.length;e++)this.noHighlight(t.borders[e]);else t.elementClass===constants.OBJECT_CLASS_TEXT?this.updateTextStyle(t,!1):t.type===constants.OBJECT_TYPE_IMAGE?(this.updateImageStyle(t,!1),this.setObjectFillColor(t,t.evalVisProp("fillcolor"),t.evalVisProp("fillopacity"))):(this.setObjectStrokeColor(t,t.evalVisProp("strokecolor"),t.evalVisProp("strokeopacity")),this.setObjectFillColor(t,t.evalVisProp("fillcolor"),t.evalVisProp("fillopacity")));r=t.evalVisProp("strokewidth"),this.setObjectStrokeWidth(t,r),(t.elementClass===constants.OBJECT_CLASS_LINE||t.elementClass===constants.OBJECT_CLASS_CURVE)&&this.updatePathWithArrowHeads(t,!1)}return this.setCssClass(t,t.evalVisProp("cssclass")),this},removeDraft:function(t){this.setObjectTransition(t),t.type===constants.OBJECT_TYPE_POLYGON?this.setObjectFillColor(t,t.evalVisProp("fillcolor"),t.evalVisProp("fillopacity")):(t.type===constants.OBJECT_CLASS_POINT&&this.setObjectFillColor(t,t.evalVisProp("fillcolor"),t.evalVisProp("fillopacity")),this.setObjectStrokeColor(t,t.evalVisProp("strokecolor"),t.evalVisProp("strokeopacity")),this.setObjectStrokeWidth(t,t.evalVisProp("strokewidth")))},setARIA:function(t){},setBuffering:function(t,e){},setClipPath:function(t,e){},setCssClass:function(t,e){},setDashStyle:function(t){},setDraft:function(t){if(t.evalVisProp("draft")){var e=t.board.options.elements.draft.color,r=t.board.options.elements.draft.opacity;this.setObjectTransition(t),t.type===constants.OBJECT_TYPE_POLYGON?this.setObjectFillColor(t,e,r):(t.elementClass===constants.OBJECT_CLASS_POINT?this.setObjectFillColor(t,e,r):this.setObjectFillColor(t,"none",0),this.setObjectStrokeColor(t,e,r),this.setObjectStrokeWidth(t,t.board.options.elements.draft.strokeWidth))}},setGradient:function(t){},setLayer:function(t,e){},setObjectFillColor:function(t,e,r){},setObjectStrokeColor:function(t,e,r){},setObjectStrokeWidth:function(t,e){},setObjectTransition:function(t,e){},setPropertyPrim:function(t,e,r){},setShadow:function(t){},setTabindex:function(t){},show:function(t){},updateGradient:function(t){},suspendRedraw:function(){},unsuspendRedraw:function(){},drawNavigationBar:function(t,e){var r,s,o=function(n){n||(n=window.event),n.stopPropagation?n.stopPropagation():n.cancelBubble=!0},a=function(n,l,h,d){var u;h=h||"",u=r.createElement("span"),u.innerHTML=n,u.style.paddingLeft="7px",u.style.paddingRight="7px",u.classList!==void 0&&(u.classList.add("JXG_navigation_button"),u.classList.add("JXG_navigation_button_"+d)),u.setAttribute("id",h+"_navigation_"+d),u.setAttribute("aria-hidden","true"),s.appendChild(u),env_default.addEvent(u,"click",function(c){return type_default.bind(l,t)(),!1},t),env_default.addEvent(u,"pointerup",o,t),env_default.addEvent(u,"pointerdown",o,t),env_default.addEvent(u,"pointerleave",o,t),env_default.addEvent(u,"mouseup",o,t),env_default.addEvent(u,"mousedown",o,t),env_default.addEvent(u,"touchend",o,t),env_default.addEvent(u,"touchstart",o,t)};env_default.isBrowser&&this.type!=="no"&&(r=t.containerObj.ownerDocument,s=r.createElement("div"),s.setAttribute("id",t.container+"_navigationbar"),s.style.color=e.strokecolor,s.style.backgroundColor=e.fillcolor,s.style.padding=e.padding,s.style.position=e.position,s.style.fontSize=e.fontsize,s.style.cursor=e.cursor,s.style.zIndex=e.zindex,t.containerObj.appendChild(s),s.style.right=e.right,s.style.bottom=e.bottom,s.classList!==void 0&&s.classList.add("JXG_navigation"),t.attr.showfullscreen&&a(t.attr.fullscreen.symbol,function(){t.toFullscreen(t.attr.fullscreen.id)},t.container,"fullscreen"),t.attr.showscreenshot&&a(t.attr.screenshot.symbol,function(){window.setTimeout(function(){t.renderer.screenshot(t,"",!1)},330)},t.container,"screenshot"),t.attr.showreload&&a("↻",function(){t.reload()},t.container,"reload"),t.attr.showcleartraces&&a("⊗",function(){t.clearTraces()},t.container,"cleartraces"),t.attr.shownavigation&&(t.attr.showzoom&&(a("–",t.zoomOut,t.container,"out"),a("o",t.zoom100,t.container,"100"),a("+",t.zoomIn,t.container,"in")),a("←",t.clickLeftArrow,t.container,"left"),a("↓",t.clickUpArrow,t.container,"down"),a("↑",t.clickDownArrow,t.container,"up"),a("→",t.clickRightArrow,t.container,"right")))},getElementById:function(t){var e;return type_default.exists(this.container)?(e=this.container.id+"_"+t,type_default.exists(CSS)&&type_default.exists(CSS.escape)&&(e=CSS.escape(e)),this.container.querySelector("#"+e)):""},removeToInsertLater:function(t){var e=t.parentNode,r=t.nextSibling;if(e!==null)return e.removeChild(t),function(){r?e.insertBefore(t,r):e.appendChild(t)}},resize:function(t,e){},createTouchpoints:function(t){},showTouchpoint:function(t){},hideTouchpoint:function(t){},updateTouchpoint:function(t,e){},dumpToDataURI:function(t){},dumpToCanvas:function(t,e,r,s){},screenshot:function(t){}});var abstract_default=jxg_default.AbstractRenderer,UTF8_ACCEPT=0,UTF8D=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,0,12,24,36,60,96,84,12,12,12,48,72,12,12,12,12,12,12,12,12,12,12,12,12,12,0,12,12,12,12,12,0,12,0,12,12,12,24,12,12,12,12,12,24,12,24,12,12,12,12,12,12,12,12,12,24,12,12,12,12,12,24,12,12,12,12,12,12,12,24,12,12,12,12,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,12,12,12,12,12];jxg_default.Util=jxg_default.Util||{};jxg_default.Util.UTF8={encode:function(t){var e,r,s="",o=t.length;if(t=t.replace(/\r\n/g,`
14
+ `),typeof unescape=="function"&&typeof encodeURIComponent=="function")return unescape(encodeURIComponent(t));for(e=0;e<o;e++)r=t.charCodeAt(e),r<128?s+=String.fromCharCode(r):r>127&&r<2048?(s+=String.fromCharCode(r>>6|192),s+=String.fromCharCode(r&63|128)):(s+=String.fromCharCode(r>>12|224),s+=String.fromCharCode(r>>6&63|128),s+=String.fromCharCode(r&63|128));return s},decode:function(t){var e,r,s,o=0,a=0,n=UTF8_ACCEPT,l=[],h=t.length,d=[];for(e=0;e<h;e++)r=t.charCodeAt(e),s=UTF8D[r],n!==UTF8_ACCEPT?a=r&63|a<<6:a=255>>s&r,n=UTF8D[256+n+s],n===UTF8_ACCEPT&&(a>65535?l.push(55232+(a>>10),56320+(a&1023)):l.push(a),o++,o%1e4===0&&(d.push(String.fromCharCode.apply(null,l)),l=[]));return d.push(String.fromCharCode.apply(null,l)),d.join("")},asciiCharCodeAt:function(t,e){var r=t.charCodeAt(e);if(r>255)switch(r){case 8364:r=128;break;case 8218:r=130;break;case 402:r=131;break;case 8222:r=132;break;case 8230:r=133;break;case 8224:r=134;break;case 8225:r=135;break;case 710:r=136;break;case 8240:r=137;break;case 352:r=138;break;case 8249:r=139;break;case 338:r=140;break;case 381:r=142;break;case 8216:r=145;break;case 8217:r=146;break;case 8220:r=147;break;case 8221:r=148;break;case 8226:r=149;break;case 8211:r=150;break;case 8212:r=151;break;case 732:r=152;break;case 8482:r=153;break;case 353:r=154;break;case 8250:r=155;break;case 339:r=156;break;case 382:r=158;break;case 376:r=159}return r}};var encoding_default=jxg_default.Util.UTF8,alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",pad="=";jxg_default.Util=jxg_default.Util||{};jxg_default.Util.Base64={_getByte:function(t,e){return t.charCodeAt(e)&255},_getIndex:function(t,e){return alphabet.indexOf(t.charAt(e))},encode:function(t){var e,r,s,o,a,n=[];for(a=encoding_default.encode(t),s=a.length,o=s%3,e=0;e<s-o;e+=3)r=this._getByte(a,e)<<16|this._getByte(a,e+1)<<8|this._getByte(a,e+2),n.push(alphabet.charAt(r>>18),alphabet.charAt(r>>12&63),alphabet.charAt(r>>6&63),alphabet.charAt(r&63));switch(o){case 1:r=this._getByte(a,s-1),n.push(alphabet.charAt(r>>2),alphabet.charAt(r<<4&63),pad,pad);break;case 2:r=this._getByte(a,s-2)<<8|this._getByte(a,s-1),n.push(alphabet.charAt(r>>10),alphabet.charAt(r>>4&63),alphabet.charAt(r<<2&63),pad)}return n.join("")},decode:function(t,e){var r,s,o,a,n,l,h=[],d=[];if(r=t.replace(/[^A-Za-z0-9+/=]/g,""),o=r.length,o%4!==0)throw new Error("JSXGraph/utils/base64: Can't decode string (invalid input length).");for(r.charAt(o-1)===pad&&(a=1,r.charAt(o-2)===pad&&(a=2),o-=4),s=0;s<o;s+=4)n=this._getIndex(r,s)<<18|this._getIndex(r,s+1)<<12|this._getIndex(r,s+2)<<6|this._getIndex(r,s+3),d.push(n>>16,n>>8&255,n&255),s%1e4===0&&(h.push(String.fromCharCode.apply(null,d)),d=[]);switch(a){case 1:n=this._getIndex(r,o)<<12|this._getIndex(r,o+1)<<6|this._getIndex(r,o+2),d.push(n>>10,n>>2&255);break;case 2:n=this._getIndex(r,s)<<6|this._getIndex(r,s+1),d.push(n>>4)}return h.push(String.fromCharCode.apply(null,d)),l=h.join(""),e&&(l=encoding_default.decode(l)),l},decodeAsArray:function(t){var e,r=this.decode(t),s=[],o=r.length;for(e=0;e<o;e++)s[e]=r.charCodeAt(e);return s}};var base64_default=jxg_default.Util.Base64;jxg_default.FileReader={handleRemoteFile:function(t,e,r,s,o,a){var n=!1;try{n=new XMLHttpRequest,r.toLowerCase()==="raw"?n.overrideMimeType("text/plain; charset="+o):n.overrideMimeType("text/xml; charset="+o)}catch{try{n=new ActiveXObject("Msxml2.XMLHTTP")}catch{try{n=new ActiveXObject("Microsoft.XMLHTTP")}catch{n=!1}}}if(!n){jxg_default.debug("AJAX not activated!");return}n.open("GET",t,s),r.toLowerCase()==="raw"?this.cbp=function(){var l=n;l.readyState===4&&e(l.responseText)}:this.cbp=function(){var l=n,h="";l.readyState===4&&(type_default.exists(l.responseStream)&&(l.responseText.slice(0,2)==="PK"||encoding_default.asciiCharCodeAt(l.responseText.slice(0,1),0)===31)?h=base64_default.decode(jxgBinFileReader(l)):h=l.responseText,this.parseString(h,e,r,a))},this.cb=type_default.bind(this.cbp,this),n.onreadystatechange=this.cb;try{n.send(null)}catch{throw new Error("JSXGraph: A problem occurred while trying to read remote file '"+t+"'.")}},handleLocalFile:function(t,e,r,s,o,a){type_default.exists(s)||(s=!0),r.toLowerCase()==="raw"?this.cbp=function(l){e(l.target.result)}:this.cbp=function(l){var h=l.target.result;this.parseString(h,e,r,a)},this.cb=type_default.bind(this.cbp,this);var n=new FileReader;n.onload=this.cb,r.toLowerCase()==="raw"?n.readAsText(t):n.readAsText(t,o)},parseFileContent:function(t,e,r,s,o,a){type_default.isString(t)||FileReader===void 0?this.handleRemoteFile(t,e,r,s,o,a):this.handleLocalFile(t,e,r,s,o,a)},parseString:function(t,e,r,s){var o,a;if(r=r.toLowerCase(),o=jxg_default.readers[r],type_default.exists(o))a=new o(e,t),a.read();else if(r!=="jessiecode")throw new Error("JSXGraph: There is no reader available for '"+r+"'.");type_default.isFunction(s)&&s(e)}};!env_default.isMetroApp()&&env_default.isBrowser&&typeof navigator=="object"&&/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent)&&document&&document.write&&document.write(`<script type="text/vbscript">
15
+ Function Base64Encode(inData)
16
+ Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
17
+ Dim cOut, sOut, I
18
+ For I = 1 To LenB(inData) Step 3
19
+ Dim nGroup, pOut, sGroup
20
+ nGroup = &H10000 * AscB(MidB(inData, I, 1)) + _
21
+ &H100 * MyASC(MidB(inData, I + 1, 1)) + MyASC(MidB(inData, I + 2, 1))
22
+ nGroup = Oct(nGroup)
23
+ nGroup = String(8 - Len(nGroup), "0") & nGroup
24
+ pOut = Mid(Base64, CLng("&o" & Mid(nGroup, 1, 2)) + 1, 1) + _
25
+ Mid(Base64, CLng("&o" & Mid(nGroup, 3, 2)) + 1, 1) + _
26
+ Mid(Base64, CLng("&o" & Mid(nGroup, 5, 2)) + 1, 1) + _
27
+ Mid(Base64, CLng("&o" & Mid(nGroup, 7, 2)) + 1, 1)
28
+ sOut = sOut + pOut
29
+ Next
30
+ Select Case LenB(inData) Mod 3
31
+ Case 1: '8 bit final
32
+ sOut = Left(sOut, Len(sOut) - 2) + "=="
33
+ Case 2: '16 bit final
34
+ sOut = Left(sOut, Len(sOut) - 1) + "="
35
+ End Select
36
+ Base64Encode = sOut
37
+ End Function
38
+
39
+ Function MyASC(OneChar)
40
+ If OneChar = "" Then MyASC = 0 Else MyASC = AscB(OneChar)
41
+ End Function
42
+
43
+ Function jxgBinFileReader(xhr)
44
+ Dim byteString
45
+ Dim b64String
46
+ Dim i
47
+ byteString = xhr.responseBody
48
+ ReDim byteArray(LenB(byteString))
49
+ For i = 1 To LenB(byteString)
50
+ byteArray(i-1) = AscB(MidB(byteString, i, 1))
51
+ Next
52
+ b64String = Base64Encode(byteString)
53
+ jxgBinFileReader = b64String
54
+ End Function
55
+ <\/script>
56
+ `);var file_default=jxg_default.FileReader;jxg_default.GeonextParser={replacePow:function(t){var e,r,s,o,a,n,l,h,d,u,c,p;for(t=t.replace(/(\s*)\^(\s*)/g,"^"),u=t.indexOf("^"),o=-1;u>=0&&u<t.length-1;){if(o===u)throw new Error("JSXGraph: Error while parsing expression '"+t+"'");if(o=u,d=t.slice(0,u),c=t.slice(u+1),d.charAt(d.length-1)===")"){for(e=1,r=d.length-2;r>=0&&e>0;)s=d.charAt(r),s===")"?e++:s==="("&&(e-=1),r-=1;if(e===0){for(a="",l=d.substring(0,r+1),h=r;h>=0&&l.slice(h,h+1).match(/([\w.]+)/);)a=RegExp.$1+a,h-=1;a+=d.substring(r+1,d.length),a=a.replace(/([()+*%^\-/\][])/g,"\\$1")}else throw new Error("JSXGraph: Missing '(' in expression")}else a="[\\w\\.]+";if(c.match(/^([\w.]*\()/)){for(e=1,r=RegExp.$1.length;r<c.length&&e>0;)s=c.charAt(r),s===")"?e-=1:s==="("&&(e+=1),r+=1;if(e===0)n=c.substring(0,r),n=n.replace(/([()+*%^\-/[\]])/g,"\\$1");else throw new Error("JSXGraph: Missing ')' in expression")}else n="[\\w\\.]+";p=new RegExp("("+a+")\\^("+n+")"),t=t.replace(p,"pow($1,$2)"),u=t.indexOf("^")}return t},replaceIf:function(t){var e,r,s,o,a,n,l,h,d,u="",c=null,p=null,f=null;if(s=t.indexOf("If("),s<0)return t;for(t=t.replace(/""/g,"0");s>=0;){for(e=t.slice(0,s),r=t.slice(s+3),a=1,o=0,n=-1,l=-1;o<r.length&&a>0;)h=r.charAt(o),h===")"?a-=1:h==="("?a+=1:h===","&&a===1&&(n<0?n=o:l=o),o+=1;if(d=r.slice(0,o-1),r=r.slice(o),n<0||l<0)return"";c=d.slice(0,n),p=d.slice(n+1,l),f=d.slice(l+1),c=this.replaceIf(c),p=this.replaceIf(p),f=this.replaceIf(f),u+=e+"(("+c+")?("+p+"):("+f+"))",t=r,c=null,p=null,s=t.indexOf("If(")}return u+=r,u},replaceNameById:function(t,e,r){var s,o,a,n,l=0,h=["X","Y","L","V"],d=function(u){return r?"$('"+u+"')":u};for(n=0;n<h.length;n++)for(l=t.indexOf(h[n]+"(");l>=0;)l>=0&&(s=t.indexOf(")",l+2),s>=0&&(o=t.slice(l+2,s),o=o.replace(/\\(['"])?/g,"$1"),a=e.elementsByName[o],a&&(t=t.slice(0,l+2)+(r?"$('":"")+d(a.id)+t.slice(s)))),s=t.indexOf(")",l+2),l=t.indexOf(h[n]+"(",s);for(l=t.indexOf("Dist(");l>=0;)l>=0&&(s=t.indexOf(",",l+5),s>=0&&(o=t.slice(l+5,s),o=o.replace(/\\(['"])?/g,"$1"),a=e.elementsByName[o],a&&(t=t.slice(0,l+5)+d(a.id)+t.slice(s)))),s=t.indexOf(",",l+5),l=t.indexOf(",",s),s=t.indexOf(")",l+1),s>=0&&(o=t.slice(l+1,s),o=o.replace(/\\(['"])?/g,"$1"),a=e.elementsByName[o],a&&(t=t.slice(0,l+1)+d(a.id)+t.slice(s))),s=t.indexOf(")",l+1),l=t.indexOf("Dist(",s);for(h=["Deg","Rad"],n=0;n<h.length;n++)for(l=t.indexOf(h[n]+"(");l>=0;)l>=0&&(s=t.indexOf(",",l+4),s>=0&&(o=t.slice(l+4,s),o=o.replace(/\\(['"])?/g,"$1"),a=e.elementsByName[o],a&&(t=t.slice(0,l+4)+d(a.id)+t.slice(s)))),s=t.indexOf(",",l+4),l=t.indexOf(",",s),s=t.indexOf(",",l+1),s>=0&&(o=t.slice(l+1,s),o=o.replace(/\\(['"])?/g,"$1"),a=e.elementsByName[o],a&&(t=t.slice(0,l+1)+d(a.id)+t.slice(s))),s=t.indexOf(",",l+1),l=t.indexOf(",",s),s=t.indexOf(")",l+1),s>=0&&(o=t.slice(l+1,s),o=o.replace(/\\(['"])?/g,"$1"),a=e.elementsByName[o],a&&(t=t.slice(0,l+1)+d(a.id)+t.slice(s))),s=t.indexOf(")",l+1),l=t.indexOf(h[n]+"(",s);return t},replaceIdByObj:function(t){var e=/(X|Y|L)\(([\w_]+)\)/g;return t=t.replace(e,"$('$2').$1()"),e=/(V)\(([\w_]+)\)/g,t=t.replace(e,"$('$2').Value()"),e=/(Dist)\(([\w_]+),([\w_]+)\)/g,t=t.replace(e,"dist($('$2'), $('$3'))"),e=/(Deg)\(([\w_]+),([ \w[\w_]+),([\w_]+)\)/g,t=t.replace(e,"deg($('$2'),$('$3'),$('$4'))"),e=/Rad\(([\w_]+),([\w_]+),([\w_]+)\)/g,t=t.replace(e,"rad($('$1'),$('$2'),$('$3'))"),e=/N\((.+)\)/g,t=t.replace(e,"($1)"),t},geonext2JS:function(t,e){var r,s,o,a=["Abs","ACos","ASin","ATan","Ceil","Cos","Exp","Factorial","Floor","Log","Max","Min","Random","Round","Sin","Sqrt","Tan","Trunc"],n=["abs","acos","asin","atan","ceil","cos","exp","factorial","floor","log","max","min","random","round","sin","sqrt","tan","ceil"];for(t=t.replace(/&lt;/g,"<"),t=t.replace(/&gt;/g,">"),t=t.replace(/&amp;/g,"&"),s=t,s=this.replaceNameById(s,e),s=this.replaceIf(s),s=this.replacePow(s),s=this.replaceIdByObj(s),o=0;o<a.length;o++)r=new RegExp(["(\\W|^)(",a[o],")"].join(""),"ig"),s=s.replace(r,["$1",n[o]].join(""));return s=s.replace(/True/g,"true"),s=s.replace(/False/g,"false"),s=s.replace(/fasle/g,"false"),s=s.replace(/Pi/g,"PI"),s=s.replace(/"/g,"'"),s},findDependencies:function(t,e,r){var s,o,a,n;type_default.exists(r)||(r=t.board),s=r.elementsByName;for(o in s)s.hasOwnProperty(o)&&o!==t.name&&(s[o].elementClass===constants.OBJECT_CLASS_TEXT?s[o].evalVisProp("islabel")||(n=o.replace(/\[/g,"\\["),n=n.replace(/\]/g,"\\]"),a=new RegExp("\\(([\\w\\[\\]'_ ]+,)*("+n+")(,[\\w\\[\\]'_ ]+)*\\)","g"),e.search(a)>=0&&s[o].addChild(t)):(n=o.replace(/\[/g,"\\["),n=n.replace(/\]/g,"\\]"),a=new RegExp("\\(([\\w\\[\\]'_ ]+,)*("+n+")(,[\\w\\[\\]'_ ]+)*\\)","g"),e.search(a)>=0&&s[o].addChild(t)))},gxt2jc:function(t,e){var r;return t=t.replace(/&lt;/g,"<"),t=t.replace(/&gt;/g,">"),t=t.replace(/&amp;/g,"&"),r=t,r=this.replaceNameById(r,e,!0),r=r.replace(/True/g,"true"),r=r.replace(/False/g,"false"),r=r.replace(/fasle/g,"false"),r}};var geonext_default=jxg_default.GeonextParser;jxg_default.GeometryElement=function(t,e,r,s){var o,a,n;if(this.needsUpdate=!0,this.isDraggable=!1,this.isReal=!0,this.childElements={},this.hasLabel=!1,this.highlighted=!1,this.notExistingParents={},this.traces={},this.numTraces=0,this.transformations=[],this.baseElement=null,this.descendants={},this.ancestors={},this.parents=[],this.symbolic={},this.rendNode=null,this.elType="",this.dump=!0,this.subs={},this.inherits=[],this._pos=-1,this.stdform=[1,0,0,0,1,1,0,0],this.quadraticform=[[1,0,0],[0,1,0],[0,0,1]],this.visProp={},this.visPropCalc={visible:!1},event_default.eventify(this),this.mouseover=!1,this.lastDragTime=new Date,this.view=null,arguments.length>0){this.board=t,this.type=r,this._org_type=r,this.elementClass=s||constants.OBJECT_CLASS_OTHER,this.id=e.id,o=e.name,type_default.exists(o)||(o=this.board.generateName(this)),o!==""&&(this.board.elementsByName[o]=this),this.name=o,this.needsRegularUpdate=e.needsregularupdate,type_default.clearVisPropOld(this),n=this.resolveShortcuts(e);for(a in n)n.hasOwnProperty(a)&&this._set(a,n[a]);this.visProp.draft=n.draft&&n.draft.draft}};jxg_default.extend(jxg_default.GeometryElement.prototype,{addChild:function(t){var e,r;this.childElements[t.id]=t,this.addDescendants(t),t.ancestors[this.id]=this;for(e in this.descendants)if(this.descendants.hasOwnProperty(e)){this.descendants[e].ancestors[this.id]=this;for(r in this.ancestors)this.ancestors.hasOwnProperty(r)&&(this.descendants[e].ancestors[this.ancestors[r].id]=this.ancestors[r])}for(e in this.ancestors)if(this.ancestors.hasOwnProperty(e))for(r in this.descendants)this.descendants.hasOwnProperty(r)&&(this.ancestors[e].descendants[this.descendants[r].id]=this.descendants[r]);return this},addDescendants:function(t){var e;this.descendants[t.id]=t;for(e in t.childElements)t.childElements.hasOwnProperty(e)&&this.addDescendants(t.childElements[e]);return this},addParents:function(t){var e,r,s;for(type_default.isArray(t)?s=t:s=arguments,r=s.length,e=0;e<r;++e)type_default.exists(s[e])&&(type_default.isId(this.board,s[e])?this.parents.push(s[e]):type_default.exists(s[e].id)&&this.parents.push(s[e].id));this.parents=type_default.uniqueArray(this.parents)},setParents:function(t){this.parents=[],this.addParents(t)},addParentsFromJCFunctions:function(t){for(var e=0,r,s;e<t.length;e++)for(r in t[e].deps)s=t[e].deps[r],s.addChild(this);return this},removeChild:function(t){return delete this.childElements[t.id],this.removeDescendants(t),delete t.ancestors[this.id],this},removeDescendants:function(t){var e;delete this.descendants[t.id];for(e in t.childElements)t.childElements.hasOwnProperty(e)&&this.removeDescendants(t.childElements[e]);return this},countChildren:function(){var t,e,r=0;e=this.childElements;for(t in e)e.hasOwnProperty(t)&&t.indexOf("Label")<0&&r++;return r},getName:function(){return this.name},addTransform:function(t){return this},removeTransform:function(t){return this},clearTransforms:function(){return this},draggable:function(){return this.isDraggable&&!this.evalVisProp("fixed")&&this.type!==constants.OBJECT_TYPE_GLIDER},setPosition:function(t,e){var r=[],s,o,a,n;if(!type_default.exists(this.parents))return this;for(a=this.parents.length,o=0;o<a;++o)if(s=this.board.select(this.parents[o]),type_default.isPoint(s)){if(!s.draggable())return this;r.push(s)}if(e.length===3&&(e=e.slice(1)),n=this.board.create("transform",e,{type:"translate"}),a=r.length,a>0){if(n.applyOnce(r),type_default.exists(this.view)&&this.view.elType==="view3d")for(o=0;o<this.parents.length;++o)s=this.view.select(this.parents[o]),type_default.exists(s.setPosition2D)&&s.setPosition2D(n)}else this.transformations.length>0&&this.transformations[this.transformations.length-1].isNumericMatrix?this.transformations[this.transformations.length-1].melt(n):this.addTransform(n);for(o=0;o<a;++o)r[o].type===constants.OBJECT_TYPE_GLIDER&&r[o].updateGlider();return this},setPositionDirectly:function(t,e,r){var s=new coords_default(t,e,this.board,!1),o=new coords_default(t,r,this.board,!1),a=statistics_default.subtract(s.usrCoords,o.usrCoords);return this.setPosition(constants.COORDS_BY_USER,a),this},toTopOfLayer:function(){return this.board.renderer.type==="svg"&&type_default.exists(this.rendNode)&&this.rendNode.parentNode.appendChild(this.rendNode),this},generatePolynomial:function(){return[]},animate:function(t,e,r){r=r||{};var s,o,a,n=this.board.attr.animationdelay,l=Math.ceil(e/n),h=this,d=function(c,p,f){var _=color_default.rgb2hsv(c),g=color_default.rgb2hsv(p),m=(g[0]-_[0])/l,b=(g[1]-_[1])/l,C=(g[2]-_[2])/l;for(h.animationData[f]=[],a=0;a<l;a++)h.animationData[f][l-a-1]=color_default.hsv2rgb(_[0]+(a+1)*m,_[1]+(a+1)*b,_[2]+(a+1)*C)},u=function(c,p,f,_){var g,m;if(c=parseFloat(c),p=parseFloat(p),!(isNaN(c)||isNaN(p)))for(m=(p-c)/l,h.animationData[f]=[],a=0;a<l;a++)g=c+(a+1)*m,h.animationData[f][l-a-1]=_?Math.floor(g):g};this.animationData={};for(s in t)if(t.hasOwnProperty(s))switch(o=s.toLowerCase(),o){case"strokecolor":case"fillcolor":d(this.visProp[o],t[s],o);break;case"size":if(!type_default.isPoint(this))break;u(this.visProp[o],t[s],o,!0);break;case"strokeopacity":case"strokewidth":case"fillopacity":u(this.visProp[o],t[s],o,!1)}return this.animationCallback=r.callback,this.board.addAnimation(this),this},update:function(){return this.evalVisProp("trace")&&this.cloneToBackground(),this},updateRenderer:function(){return this},fullUpdate:function(t){return this.prepareUpdate().update().updateVisibility(t).updateRenderer()},setDisplayRendNode:function(t){var e,r,s,o,a;if(t===void 0&&(t=this.visPropCalc.visible),t===this.visPropOld.visible)return this;for(this.board.renderer.display(this,t),r=this.inherits.length,s=0;s<r;s++)if(a=this.inherits[s],type_default.isArray(a))for(o=a.length,e=0;e<o;e++)type_default.exists(a[e])&&type_default.exists(a[e].rendNode)&&a[e].evalVisProp("visible")==="inherit"&&a[e].setDisplayRendNode(t);else type_default.exists(a)&&type_default.exists(a.rendNode)&&a.evalVisProp("visible")==="inherit"&&a.setDisplayRendNode(t);return this.hasLabel&&type_default.exists(this.label)&&type_default.exists(this.label.rendNode)&&this.label.evalVisProp("visible")==="inherit"&&this.label.setDisplayRendNode(t),this},hide:function(){return this.setAttribute({visible:!1}),this},hideElement:function(){return this.hide(),this},show:function(){return this.setAttribute({visible:!0}),this},showElement:function(){return this.show(),this},updateVisibility:function(t){var e,r,s,o,a,n;if(this.needsUpdate){if(type_default.exists(this.view)&&this.view.evalVisProp("visible")===!1)this.visPropCalc.visible=!1;else for(t!==void 0?this.visPropCalc.visible=t:(n=this.evalVisProp("visible"),type_default.exists(this.hiddenByParent)&&this.hiddenByParent&&(n=!1),n!=="inherit"&&(this.visPropCalc.visible=n)),r=this.inherits.length,s=0;s<r;s++)if(a=this.inherits[s],type_default.isArray(a))for(o=a.length,e=0;e<o;e++)type_default.exists(a[e])&&a[e].evalVisProp("visible")==="inherit"&&a[e].prepareUpdate().updateVisibility(this.visPropCalc.visible);else type_default.exists(a)&&a.evalVisProp("visible")==="inherit"&&a.prepareUpdate().updateVisibility(this.visPropCalc.visible);type_default.exists(this.label)&&type_default.exists(this.label.visProp)&&this.label.evalVisProp("visible")&&this.label.prepareUpdate().updateVisibility(this.visPropCalc.visible)}return this},_set:function(t,e){var r;if(t=t.toLocaleLowerCase(),this.visProp.hasOwnProperty(t)&&t.indexOf("color")>=0&&type_default.isString(e)&&e.length===9&&e.charAt(0)==="#")e=color_default.rgba2rgbo(e),this.visProp[t]=e[0],this.visProp[t.replace("color","opacity")]=e[1];else if(e!==null&&type_default.isObject(e)&&!type_default.exists(e.id)&&!type_default.exists(e.name)){this.visProp[t]={};for(r in e)e.hasOwnProperty(r)&&(this.visProp[t][r.toLocaleLowerCase()]=e[r])}else this.visProp[t]=e},resolveShortcuts:function(t){var e,r,s,o=["traceattributes","traceAttributes"];for(e in options_default.shortcuts)if(options_default.shortcuts.hasOwnProperty(e)){if(type_default.exists(t[e]))for(r=0;r<options_default.shortcuts[e].length;r++)type_default.exists(t[options_default.shortcuts[e][r]])||(t[options_default.shortcuts[e][r]]=t[e]);for(s=0;s<o.length;s++)type_default.isObject(t[o[s]])&&(t[o[s]]=this.resolveShortcuts(t[o[s]]))}return t},setLabel:function(t){this.hasLabel||this.setAttribute({withlabel:!0}),this.setLabelText(t)},setLabelText:function(t){return type_default.exists(this.label)&&(t=t.replace(/</g,"&lt;").replace(/>/g,"&gt;"),this.label.setText(t)),this},setName:function(t){t=t.replace(/</g,"&lt;").replace(/>/g,"&gt;"),this.elType!=="slider"&&this.setLabelText(t),this.setAttribute({name:t})},setProperty:function(){jxg_default.deprecated("setProperty()","setAttribute()"),this.setAttribute.apply(this,arguments)},setAttribute:function(t){var e,r,s,o,a,n,l,h,d,u={};for(e=0;e<arguments.length;e++)n=arguments[e],type_default.isString(n)?(h=n.split(":"),u[type_default.trim(h[0])]=type_default.trim(h[1])):type_default.isArray(n)?u[n[0]]=n[1]:jxg_default.extend(u,n);u=this.resolveShortcuts(u);for(e in u)if(u.hasOwnProperty(e)){if(o=e.replace(/\s+/g,"").toLowerCase(),a=u[e],type_default.isObject(a)&&type_default.exists(this.visProp[o])){if(!type_default.isObject(this.visProp[o])&&a!==null&&type_default.isObject(a)&&(this.visProp[o]={}),type_default.mergeAttr(this.visProp[o],a),this.type===constants.OBJECT_TYPE_TICKS&&type_default.exists(this.labels))for(s=this.labels.length,r=0;r<s;r++)this.labels[r].setAttribute(a);else if(type_default.exists(this[o]))if(type_default.isArray(this[o]))for(r=0;r<this[o].length;r++)this[o][r].setAttribute(a);else this[o].setAttribute(a);else d=null,this.triggerEventHandlers(["attribute:"+o],[d,a,this]);continue}switch(d=this.visProp[o],o){case"checked":type_default.exists(this.rendNodeTag)&&(this.rendNodeCheckbox.checked=!!a);break;case"clip":this._set(o,a);break;case"disabled":type_default.exists(this.rendNodeTag)&&(this.rendNodeTag.disabled=!!a);break;case"face":type_default.isPoint(this)&&(this.visProp.face=a,this.board.renderer.changePointStyle(this));break;case"generatelabelvalue":this.type===constants.OBJECT_TYPE_TICKS&&type_default.isFunction(a)&&(this.generateLabelValue=a);break;case"gradient":this.visProp.gradient=a,this.board.renderer.setGradient(this);break;case"gradientsecondcolor":a=color_default.rgba2rgbo(a),this.visProp.gradientsecondcolor=a[0],this.visProp.gradientsecondopacity=a[1],this.board.renderer.updateGradient(this);break;case"gradientsecondopacity":this.visProp.gradientsecondopacity=a,this.board.renderer.updateGradient(this);break;case"infoboxtext":type_default.isString(a)?this.infoboxText=a:this.infoboxText=!1;break;case"labelcolor":a=color_default.rgba2rgbo(a),l=a[1],a=a[0],l===0&&type_default.exists(this.label)&&this.hasLabel&&this.label.hideElement(),type_default.exists(this.label)&&this.hasLabel&&(this.label.visProp.strokecolor=a,this.board.renderer.setObjectStrokeColor(this.label,a,l)),this.elementClass===constants.OBJECT_CLASS_TEXT&&(this.visProp.strokecolor=a,this.visProp.strokeopacity=l,this.board.renderer.setObjectStrokeColor(this,a,l));break;case"layer":this.board.renderer.setLayer(this,this.eval(a)),this._set(o,a);break;case"maxlength":type_default.exists(this.rendNodeTag)&&(this.rendNodeTag.maxlength=!!a);break;case"name":d=this.name,delete this.board.elementsByName[this.name],this.name=a,this.board.elementsByName[this.name]=this;break;case"needsregularupdate":this.needsRegularUpdate=!(a==="false"||a===!1),this.board.renderer.setBuffering(this,this.needsRegularUpdate?"auto":"static");break;case"onpolygon":this.type===constants.OBJECT_TYPE_GLIDER&&(this.onPolygon=!!a);break;case"radius":(this.type===constants.OBJECT_TYPE_ANGLE||this.type===constants.OBJECT_TYPE_SECTOR)&&this.setRadius(a);break;case"rotate":(this.elementClass===constants.OBJECT_CLASS_TEXT&&this.evalVisProp("display")==="internal"||this.type===constants.OBJECT_TYPE_IMAGE)&&this.addRotation(a);break;case"straightfirst":case"straightlast":this._set(o,a);for(r in this.childElements)this.childElements.hasOwnProperty(r)&&this.childElements[r].elType==="glider"&&this.childElements[r].fullUpdate();break;case"tabindex":type_default.exists(this.rendNode)&&(this.rendNode.setAttribute("tabindex",a),this._set(o,a));break;case"trace":a==="false"||a===!1?(this.clearTrace(),this.visProp.trace=!1):a==="pause"?this.visProp.trace=!1:this.visProp.trace=!0;break;case"visible":a==="false"?this.visProp.visible=!1:a==="true"?this.visProp.visible=!0:this.visProp.visible=a,this.setDisplayRendNode(this.evalVisProp("visible")),this.evalVisProp("visible")&&type_default.exists(this.updateSize)&&this.updateSize();break;case"withlabel":this.visProp.withlabel=a,this.evalVisProp("withlabel")?(this.label||this.createLabel(),this.label.setAttribute({visible:"inherit"})):this.label&&this.hasLabel&&this.label.setAttribute({visible:!1}),this.hasLabel=a;break;default:type_default.exists(this.visProp[o])&&(!jxg_default.Validator[o]||jxg_default.Validator[o]&&jxg_default.Validator[o](a)||jxg_default.Validator[o]&&type_default.isFunction(a)&&jxg_default.Validator[o](a(this)))?(a=a.toLowerCase&&a.toLowerCase()==="false"?!1:a,this._set(o,a)):o in options_default.shortcuts||jxg_default.warn("attribute '"+o+"' does not accept type '"+typeof a+"' of value "+a+".")}this.triggerEventHandlers(["attribute:"+o],[d,a,this])}return this.triggerEventHandlers(["attribute"],[u,this]),this.evalVisProp("needsregularupdate")?this.board.update(this):this.board.fullUpdate(),this.elementClass===constants.OBJECT_CLASS_TEXT&&this.updateSize(),this},getProperty:function(){jxg_default.deprecated("getProperty()","getAttribute()"),this.getProperty.apply(this,arguments)},getAttribute:function(t){var e;switch(t=t.toLowerCase(),t){case"needsregularupdate":e=this.needsRegularUpdate;break;case"labelcolor":e=this.label.visProp.strokecolor;break;case"infoboxtext":e=this.infoboxText;break;case"withlabel":e=this.hasLabel;break;default:e=this.visProp[t]}return e},evalVisProp:function(t){var e,r,s,o,a,n,l,h=[this.descendants,this.ancestors],d,u;if(t=t.toLowerCase(),t.indexOf(".")===-1)e=this.visProp[t];else for(r=t.split("."),o=r.length,e=this.visProp,s=0;s<o;s++)type_default.exists(e)&&(e=e[r[s]]);if(jxg_default.isFunction(e))return this.visProp.islabel===!0&&type_default.exists(this.visProp.anchor)?this.visProp.anchor.visProp.element3d!==null?e(this.visProp.anchor.visProp.element3d):e(this.visProp.anchor):jxg_default.exists(this.visProp.element3d)?e(this.visProp.element3d):e(this);if(e==="inherit"&&t!=="visible"&&t!=="showinfobox"){for(d in h)if(h.hasOwnProperty(d)){u=h[d],l=!1;for(a in u)if(u.hasOwnProperty(a)){for(n=u[a],l=!1,o=n.inherits.length,s=0;s<o;s++)if(this.id===n.inherits[s].id){l=!0;break}if(l){e=n.evalVisProp(t);break}}if(l)break}}return e},eval:function(t){return jxg_default.isFunction(t)?this.visProp.islabel===!0&&type_default.exists(this.visProp.anchor)?this.visProp.anchor.visProp.element3d!==null?t(this.visProp.anchor.visProp.element3d):t(this.visProp.anchor):this.visProp.element3d!==null?t(this.visProp.element3d):t(this):t},setDash:function(t){return this.setAttribute({dash:t}),this},prepareUpdate:function(){return this.needsUpdate=!0,this},remove:function(){return this.board.renderer.remove(this.rendNode),this.hasLabel&&this.board.renderer.remove(this.board.renderer.getElementById(this.label.id)),this},getTextAnchor:function(){return new coords_default(constants.COORDS_BY_USER,[0,0],this.board)},getLabelAnchor:function(){return new coords_default(constants.COORDS_BY_USER,[0,0],this.board)},setArrow:function(t,e){return this.visProp.firstarrow=t,this.visProp.lastarrow=e,e&&(this.type=constants.OBJECT_TYPE_VECTOR,this.elType="arrow"),this.prepareUpdate().update().updateVisibility().updateRenderer(),this},createGradient:function(){var t=this.evalVisProp("gradient");(t==="linear"||t==="radial")&&this.board.renderer.setGradient(this)},createLabel:function(){var t,e=this;return jxg_default.elements.text?(t=type_default.deepCopy(this.visProp.label,null),t.id=this.id+"Label",t.isLabel=!0,t.anchor=this,t.priv=this.visProp.priv,this.visProp.withlabel&&(this.label=jxg_default.elements.text(this.board,[0,0,function(){return type_default.isFunction(e.name)?e.name(e):e.name}],t),this.label.elType="label",this.label.needsUpdate=!0,this.label.dump=!1,this.label.fullUpdate(),this.hasLabel=!0)):jxg_default.debug("JSXGraph: Can't create label: text element is not available. Make sure you include base/text"),this},highlight:function(t){return t=type_default.def(t,!1),this.evalVisProp("highlight")&&(!this.highlighted||t)&&(this.highlighted=!0,this.board.highlightedObjects[this.id]=this,this.board.renderer.highlight(this)),this},noHighlight:function(){return this.highlighted&&(this.highlighted=!1,delete this.board.highlightedObjects[this.id],this.board.renderer.noHighlight(this)),this},clearTrace:function(){var t;for(t in this.traces)this.traces.hasOwnProperty(t)&&this.board.renderer.remove(this.traces[t]);return this.numTraces=0,this},cloneToBackground:function(){return this},bounds:function(){return[0,0,0,0]},normalize:function(){return this.stdform=math_default.normalize(this.stdform),this},toJSON:function(){var t,e,r=['{"name":',this.name];r.push(', "id":'+this.id),t=[];for(e in this.visProp)this.visProp.hasOwnProperty(e)&&type_default.exists(this.visProp[e])&&t.push('"'+e+'":'+this.visProp[e]);return r.push(', "visProp":{'+t.toString()+"}"),r.push("}"),r.join("")},addRotation:function(t){var e,r,s,o,a,n=this;return(this.elementClass===constants.OBJECT_CLASS_TEXT||this.type===constants.OBJECT_TYPE_IMAGE)&&t!==0&&(e=this.board.create("transform",[function(){return-n.X()},function(){return-n.Y()}],{type:"translate"}),r=this.board.create("transform",[function(){return n.X()},function(){return n.Y()}],{type:"translate"}),s=this.board.create("transform",[function(){return n.board.unitX/n.board.unitY},function(){return 1}],{type:"scale"}),o=this.board.create("transform",[function(){return n.board.unitY/n.board.unitX},function(){return 1}],{type:"scale"}),a=this.board.create("transform",[function(){return n.eval(t)*Math.PI/180}],{type:"rotate"}),e.bindTo(this),s.bindTo(this),a.bindTo(this),o.bindTo(this),r.bindTo(this)),this},highlightStrokeColor:function(t){return jxg_default.deprecated("highlightStrokeColor()","setAttribute()"),this.setAttribute({highlightStrokeColor:t}),this},strokeColor:function(t){return jxg_default.deprecated("strokeColor()","setAttribute()"),this.setAttribute({strokeColor:t}),this},strokeWidth:function(t){return jxg_default.deprecated("strokeWidth()","setAttribute()"),this.setAttribute({strokeWidth:t}),this},fillColor:function(t){return jxg_default.deprecated("fillColor()","setAttribute()"),this.setAttribute({fillColor:t}),this},highlightFillColor:function(t){return jxg_default.deprecated("highlightFillColor()","setAttribute()"),this.setAttribute({highlightFillColor:t}),this},labelColor:function(t){return jxg_default.deprecated("labelColor()","setAttribute()"),this.setAttribute({labelColor:t}),this},dash:function(t){return jxg_default.deprecated("dash()","setAttribute()"),this.setAttribute({dash:t}),this},visible:function(t){return jxg_default.deprecated("visible()","setAttribute()"),this.setAttribute({visible:t}),this},shadow:function(t){return jxg_default.deprecated("shadow()","setAttribute()"),this.setAttribute({shadow:t}),this},getType:function(){return this.elType},getParents:function(){return type_default.isArray(this.parents)?this.parents:[]},snapToGrid:function(){return this},snapToPoints:function(){return this},getAttributes:function(){var t=type_default.deepCopy(this.visProp),e=[],r,s=e.length;for(t.id=this.id,t.name=this.name,r=0;r<s;r++)delete t[e[r]];return t},hasPoint:function(t,e){return!1},addTicks:function(t){return(t.id===""||!type_default.exists(t.id))&&(t.id=this.id+"_ticks_"+(this.ticks.length+1)),this.board.renderer.drawTicks(t),this.ticks.push(t),t.id},removeAllTicks:function(){var t;if(type_default.exists(this.ticks)){for(t=this.ticks.length-1;t>=0;t--)this.removeTicks(this.ticks[t]);this.ticks=[],this.board.update()}},removeTicks:function(t){var e,r;if(type_default.exists(this.defaultTicks)&&this.defaultTicks===t&&(this.defaultTicks=null),type_default.exists(this.ticks)){for(e=this.ticks.length-1;e>=0;e--)if(this.ticks[e]===t){if(this.board.removeObject(this.ticks[e]),this.ticks[e].ticks)for(r=0;r<this.ticks[e].ticks.length;r++)type_default.exists(this.ticks[e].labels[r])&&this.board.removeObject(this.ticks[e].labels[r]);delete this.ticks[e];break}}},getSnapSizes:function(){var t=this.evalVisProp("snapsizex"),e=this.evalVisProp("snapsizey"),r;return t<=0&&this.board.defaultAxes&&this.board.defaultAxes.x.defaultTicks&&(r=this.board.defaultAxes.x.defaultTicks,t=r.ticksDelta*(r.evalVisProp("minorticks")+1)),e<=0&&this.board.defaultAxes&&this.board.defaultAxes.y.defaultTicks&&(r=this.board.defaultAxes.y.defaultTicks,e=r.ticksDelta*(r.evalVisProp("minorticks")+1)),[t,e]},handleSnapToGrid:function(t,e){var r,s,o,a,n,l,h,d,u,c,p,f=!1,_=this.evalVisProp("attracttogrid"),g=this.evalVisProp("attractorunit"),m=this.evalVisProp("attractordistance");return!type_default.exists(this.coords)||this.evalVisProp("fixed")?this:(f=this.evalVisProp("snaptogrid")||_||t===!0,f&&(r=this.coords.usrCoords[1],s=this.coords.usrCoords[2],u=this.getSnapSizes(),c=u[0],p=u[1],c>0&&p>0&&(d=this.board.getBoundingBox(),o=Math.round(r/c)*c,a=Math.round(s/p)*p,n=new jxg_default.Coords(constants.COORDS_BY_USER,[o,a],this.board),(!_||n.distance(g==="screen"?constants.COORDS_BY_SCREEN:constants.COORDS_BY_USER,this.coords)<m)&&(r=o,s=a,e||(l=Math.min(d[0],d[2]),h=Math.max(d[0],d[2]),r<l&&r>l-c?r+=c:r>h&&r<h+c&&(r-=c),l=Math.min(d[1],d[3]),h=Math.max(d[1],d[3]),s<l&&s>l-p?s+=p:s>h&&s<h+p&&(s-=p)),this.coords.setCoordinates(constants.COORDS_BY_USER,[r,s])))),this)},getBoundingBox:function(){var t,e,r,s,o,a,n=[1/0,1/0,-1/0,-1/0];if(this.type===constants.OBJECT_TYPE_POLYGON){if(e=this.vertices.length-1,e<=0)return n;for(t=0;t<e;t++)r=this.vertices[t].X(),n[0]=r<n[0]?r:n[0],n[2]=r>n[2]?r:n[2],r=this.vertices[t].Y(),n[1]=r<n[1]?r:n[1],n[3]=r>n[3]?r:n[3]}else if(this.elementClass===constants.OBJECT_CLASS_CIRCLE)s=this.center.X(),o=this.center.Y(),n=[s-this.radius,o+this.radius,s+this.radius,o-this.radius];else if(this.elementClass===constants.OBJECT_CLASS_CURVE){if(e=this.points.length,e===0)return n;for(t=0;t<e;t++)r=this.points[t].usrCoords[1],n[0]=r<n[0]?r:n[0],n[2]=r>n[2]?r:n[2],r=this.points[t].usrCoords[2],n[1]=r<n[1]?r:n[1],n[3]=r>n[3]?r:n[3]}else this.elementClass===constants.OBJECT_CLASS_POINT?(s=this.X(),o=this.Y(),a=this.evalVisProp("size"),n=[s-a/this.board.unitX,o-a/this.board.unitY,s+a/this.board.unitX,o+a/this.board.unitY]):this.elementClass===constants.OBJECT_CLASS_LINE&&(r=this.point1.coords.usrCoords[1],n[0]=r<n[0]?r:n[0],n[2]=r>n[2]?r:n[2],r=this.point1.coords.usrCoords[2],n[1]=r<n[1]?r:n[1],n[3]=r>n[3]?r:n[3],r=this.point2.coords.usrCoords[1],n[0]=r<n[0]?r:n[0],n[2]=r>n[2]?r:n[2],r=this.point2.coords.usrCoords[2],n[1]=r<n[1]?r:n[1],n[3]=r>n[3]?r:n[3]);return n},addEvent:jxg_default.shortcut(jxg_default.GeometryElement.prototype,"on"),removeEvent:jxg_default.shortcut(jxg_default.GeometryElement.prototype,"off"),formatNumberLocale:function(t,e){var r,s,o,a={},n={maximumfractiondigits:"maximumFractionDigits",minimumfractiondigits:"minimumFractionDigits",compactdisplay:"compactDisplay",currencydisplay:"currencyDisplay",currencysign:"currencySign",localematcher:"localeMatcher",numberingsystem:"numberingSystem",signdisplay:"signDisplay",unitdisplay:"unitDisplay",usegrouping:"useGrouping",roundingmode:"roundingMode",roundingpriority:"roundingPriority",roundingincrement:"roundingIncrement",trailingzerodisplay:"trailingZeroDisplay",minimumintegerdigits:"minimumIntegerDigits",minimumsignificantdigits:"minimumSignificantDigits",maximumsignificantdigits:"maximumSignificantDigits"};if(type_default.exists(Intl)&&this.useLocale()){r=this.evalVisProp("intl.locale")||this.eval(this.board.attr.intl.locale),s=this.evalVisProp("intl.options")||{};for(o in s)s.hasOwnProperty(o)&&(n.hasOwnProperty(o)?a[n[o]]=this.eval(s[o]):a[o]=this.eval(s[o]));return o="maximumfractiondigits",type_default.exists(s[o])||(a[n[o]]=e),Intl.NumberFormat(r,a).format(t)}return t},useLocale:function(){var t;return!type_default.exists(this.visProp.intl)||!type_default.exists(this.visProp.intl.enabled)?!1:(t=this.evalVisProp("intl.enabled"),t===!0||t==="inherit"&&this.eval(this.board.attr.intl.enabled)===!0)},methodMap:{},__evt__over:function(t){},__evt__mouseover:function(t){},__evt__out:function(t){},__evt__mouseout:function(t){},__evt__move:function(t){},__evt__mousemove:function(t){},__evt__drag:function(t){},__evt__mousedrag:function(t){},__evt__pendrag:function(t){},__evt__touchdrag:function(t){},__evt__keydrag:function(t){},__evt__down:function(t){},__evt__mousedown:function(t){},__evt__pendown:function(t){},__evt__touchdown:function(t){},__evt__click:function(t){},__evt__dblclick:function(t){},__evt__mouseclick:function(t){},__evt__mousedblclick:function(t){},__evt__pointerclick:function(t){},__evt__pointerdblclick:function(t){},__evt__up:function(t){},__evt__mouseup:function(t){},__evt__penup:function(t){},__evt__touchup:function(t){},__evt__attribute:function(t,e){},__evt__attribute_:function(t,e,r){},__evt:function(){}});type_default.copyMethodMap(jxg_default.GeometryElement,{setLabel:"setLabel",label:"label",setName:"setName",getName:"getName",Name:"getName",addTransform:"addTransform",removeTransform:"removeTransform",clearTransforms:"clearTransforms",setProperty:"setAttribute",setAttribute:"setAttribute",addChild:"addChild",animate:"animate",on:"on",off:"off",trigger:"trigger",addTicks:"addTicks",removeTicks:"removeTicks",removeAllTicks:"removeAllTicks",Bounds:"bounds"});var element_default=jxg_default.GeometryElement;jxg_default.CoordsElement=function(t,e){var r;for(type_default.exists(t)||(t=[1,0,0]),r=0;r<t.length;++r)t[r]=parseFloat(t[r]);this.coords=new coords_default(constants.COORDS_BY_USER,t,this.board),this.initialCoords=new coords_default(constants.COORDS_BY_USER,t,this.board),this.actualCoords=new coords_default(constants.COORDS_BY_USER,t,this.board),this.position=null,this.isConstrained=!1,this.onPolygon=!1,this.slideObject=null,this.slideObjects=[],this.needsUpdateFromParent=!0,this.groups=[],this.Xjc=null,this.Yjc=null,type_default.exists(this.element)&&this.addAnchor(t,e),this.isDraggable=!0};type_default.copyMethodMap(jxg_default.CoordsElement,{move:"moveTo",moveTo:"moveTo",moveAlong:"moveAlong",visit:"visit",glide:"makeGlider",makeGlider:"makeGlider",intersect:"makeIntersection",makeIntersection:"makeIntersection",X:"X",Y:"Y",Coords:"Coords",free:"free",setPosition:"setGliderPosition",setGliderPosition:"setGliderPosition",addConstraint:"addConstraint",dist:"Dist",Dist:"Dist",onPolygon:"onPolygon",startAnimation:"startAnimation",stopAnimation:"stopAnimation"});jxg_default.extend(jxg_default.CoordsElement.prototype,{updateConstraint:function(){return this},updateCoords:function(t){return this.needsUpdate?(type_default.exists(t)||(t=!1),this.evalVisProp("frozen")!==!0&&this.updateConstraint(),this.type===constants.OBJECT_TYPE_GLIDER&&(this.isConstrained&&(t=!1),t?this.updateGliderFromParent():this.updateGlider()),this.updateTransform(t),this):this},updateGlider:function(){var t,e,r,s,o,a,n,l,h,d,u,c,p=2*Math.PI,f,_,g,m,b,C=!1,y,x,v,P=this.slideObject,E,w,O=[],S;if(this.needsUpdateFromParent=!1,P.elementClass===constants.OBJECT_CLASS_CIRCLE)this.evalVisProp("isgeonext")&&(p=1),m=geometry_default.projectPointToCircle(this,P,this.board),b=geometry_default.rad([P.center.X()+1,P.center.Y()],P.center,this)/p;else if(P.elementClass===constants.OBJECT_CLASS_LINE){if(this.onPolygon){if(s=P.point1.coords.usrCoords,o=P.point2.coords.usrCoords,t=1,e=o[t]-s[t],Math.abs(e)<math_default.eps&&(t=2,e=o[t]-s[t]),n=geometry_default.projectPointToLine(this,P,this.board),l=(n.usrCoords[t]-s[t])/e,a=P.parentPolygon,l<0){for(t=0;t<a.borders.length;t++)if(P===a.borders[t]){P=a.borders[(t-1+a.borders.length)%a.borders.length];break}}else if(l>1){for(t=0;t<a.borders.length;t++)if(P===a.borders[t]){P=a.borders[(t+1+a.borders.length)%a.borders.length];break}}P.id!==this.slideObject.id&&(this.slideObject=P)}s=P.point1.coords,o=P.point2.coords,e=s.distance(constants.COORDS_BY_USER,o),e<math_default.eps?(m=s,C=!0,b=0):(m=geometry_default.projectPointToLine(this,P,this.board),s=s.usrCoords.slice(0),o=o.usrCoords.slice(0),Math.abs(o[0])<math_default.eps?(t=1,e=o[t],Math.abs(e)<math_default.eps&&(t=2,e=o[t]),e=(m.usrCoords[t]-s[t])/e,d=e>=0?1:-1,e=Math.abs(e),b=d*e/(e+1)):Math.abs(s[0])<math_default.eps?(t=1,e=s[t],Math.abs(e)<math_default.eps&&(t=2,e=s[t]),e=(m.usrCoords[t]-o[t])/e,e<0?b=(1-2*e)/(1-e):b=1/(e+1)):(t=1,e=o[t]-s[t],Math.abs(e)<math_default.eps&&(t=2,e=o[t]-s[t]),b=(m.usrCoords[t]-s[t])/e)),x=this.findClosestSnapValue(b),x!==null?(v=this.evalVisProp("snapvalues"),b=(v[x]-this._smin)/(this._smax-this._smin),this.update(!0)):(y=this.evalVisProp("snapwidth"),y>0&&Math.abs(this._smax-this._smin)>=math_default.eps&&(b=Math.max(Math.min(b,1),0),r=b*(this._smax-this._smin),r=Math.round(r/y)*y+this._smin,b=(r-this._smin)/(this._smax-this._smin),this.update(!0))),s=P.point1.coords,!P.evalVisProp("straightfirst")&&Math.abs(s.usrCoords[0])>math_default.eps&&b<0&&(m=s,C=!0,b=0),o=P.point2.coords,!P.evalVisProp("straightlast")&&Math.abs(o.usrCoords[0])>math_default.eps&&b>1&&(m=o,C=!0,b=1)}else if(P.type===constants.OBJECT_TYPE_TURTLE)this.updateConstraint(),E=geometry_default.projectPointToTurtle(this,P,this.board),m=E[0],b=E[1];else if(P.elementClass===constants.OBJECT_CLASS_CURVE)if(P.type===constants.OBJECT_TYPE_ARC||P.type===constants.OBJECT_TYPE_SECTOR)m=geometry_default.projectPointToCircle(this,P,this.board),h=geometry_default.rad(P.radiuspoint,P.center,this),u=0,c=geometry_default.rad(P.radiuspoint,P.center,P.anglepoint),b=h,y=P.evalVisProp("selection"),(y==="minor"&&c>Math.PI||y==="major"&&c<Math.PI)&&(u=c,c=2*Math.PI),(h<u||h>c)&&(b=c,(h<u&&h>u*.5||h>c&&h>c*.5+Math.PI)&&(b=u),this.needsUpdateFromParent=!0,this.updateGliderFromParent()),p=c-u,this.visProp.isgeonext&&(p=1),Math.abs(p)>math_default.eps&&(b/=p);else if(this.updateConstraint(),P.transformations.length>0){for(S=!1,E=P.getTransformationSource(),E[0]&&(S=E[0],O.push(P),O.push(E[1]));E[0]&&type_default.exists(E[1]._transformationSource);)E=E[1].getTransformationSource(),O.push(E[1]);if(w=this.coords.usrCoords,S){for(t=0;t<O.length;t++)O[t].updateTransformMatrix(),g=math_default.inverse(O[t].transformMat),w=math_default.matVecMult(g,w);for(f=new coords_default(constants.COORDS_BY_USER,w,this.board).usrCoords,_=geometry_default.projectCoordsToCurve(f[1],f[2],this.position||0,O[O.length-1],this.board),w=_[0].usrCoords,t=O.length-2;t>=0;t--)w=math_default.matVecMult(O[t].transformMat,w);_[0]=new coords_default(constants.COORDS_BY_USER,w,this.board)}else P.updateTransformMatrix(),g=math_default.inverse(P.transformMat),w=math_default.matVecMult(g,w),f=new coords_default(constants.COORDS_BY_USER,w,this.board).usrCoords,_=geometry_default.projectCoordsToCurve(f[1],f[2],this.position||0,P,this.board);m=_[0],b=_[1]}else E=geometry_default.projectPointToCurve(this,P,this.board),m=E[0],b=E[1];else type_default.isPoint(P)&&(m=geometry_default.projectPointToPoint(this,P,this.board),b=this.position);this.coords.setCoordinates(constants.COORDS_BY_USER,m.usrCoords,C),this.position=b},findClosestSnapValue:function(t){var e,r,s,o,a=null;if(s=this.evalVisProp("snapvalues"),o=this.evalVisProp("snapvaluedistance"),type_default.isArray(s)&&Math.abs(this._smax-this._smin)>=math_default.eps&&o>0)for(e=0;e<s.length;e++)r=Math.abs(t*(this._smax-this._smin)+this._smin-s[e]),r<o&&(o=r,a=e);return a},updateGliderFromParent:function(){var t,e,r,s,o,a=this.slideObject,n=[],l,h,d,u,c,p,f,_=2*Math.PI;if(!this.needsUpdateFromParent){this.needsUpdateFromParent=!0;return}if(a.elementClass===constants.OBJECT_CLASS_CIRCLE)r=a.Radius(),this.evalVisProp("isgeonext")&&(_=1),o=[a.center.X()+r*Math.cos(this.position*_),a.center.Y()+r*Math.sin(this.position*_)];else if(a.elementClass===constants.OBJECT_CLASS_LINE)t=a.point1.coords.usrCoords,e=a.point2.coords.usrCoords,t[0]===0&&t[1]===0&&t[2]===0||e[0]===0&&e[1]===0&&e[2]===0?o=[0,0,0]:Math.abs(e[0])<math_default.eps?(s=Math.min(Math.abs(this.position),1-math_default.eps),s/=1-s,this.position<0&&(s=-s),o=[t[0]+s*e[0],t[1]+s*e[1],t[2]+s*e[2]]):Math.abs(t[0])<math_default.eps?(s=Math.max(this.position,math_default.eps),s=Math.min(s,2-math_default.eps),s>1?s=(s-1)/(s-2):s=(1-s)/s,o=[e[0]+s*t[0],e[1]+s*t[1],e[2]+s*t[2]]):(s=this.position,o=[t[0]+s*(e[0]-t[0]),t[1]+s*(e[1]-t[1]),t[2]+s*(e[2]-t[2])]);else if(a.type===constants.OBJECT_TYPE_TURTLE)this.coords.setCoordinates(constants.COORDS_BY_USER,[a.Z(this.position),a.X(this.position),a.Y(this.position)]),this.updateConstraint(),o=geometry_default.projectPointToTurtle(this,a,this.board)[0].usrCoords;else if(a.elementClass===constants.OBJECT_CLASS_CURVE){for(d=!1,l=a.getTransformationSource(),l[0]&&(d=l[0],n.push(a),n.push(l[1]));l[0]&&type_default.exists(l[1]._transformationSource);)l=l[1].getTransformationSource(),n.push(l[1]);if(d?this.coords.setCoordinates(constants.COORDS_BY_USER,[n[n.length-1].Z(this.position),n[n.length-1].X(this.position),n[n.length-1].Y(this.position)]):this.coords.setCoordinates(constants.COORDS_BY_USER,[a.Z(this.position),a.X(this.position),a.Y(this.position)]),a.type===constants.OBJECT_TYPE_ARC||a.type===constants.OBJECT_TYPE_SECTOR)u=geometry_default.rad([a.center.X()+1,a.center.Y()],a.center,a.radiuspoint),c=0,f=geometry_default.rad(a.radiuspoint,a.center,a.anglepoint),(a.visProp.selection==="minor"&&f>Math.PI||a.visProp.selection==="major"&&f<Math.PI)&&(c=f,f=2*Math.PI),_=f-c,this.evalVisProp("isgeonext")&&(_=1),p=this.position*_,(p<c||p>f)&&(p=f,(p<c&&p>c*.5||p>f&&p>f*.5+Math.PI)&&(p=c),this.position=p,Math.abs(_)>math_default.eps&&(this.position/=_)),r=a.Radius(),o=[a.center.X()+r*Math.cos(this.position*_+u),a.center.Y()+r*Math.sin(this.position*_+u)];else if(this.updateConstraint(),d)for(o=geometry_default.projectPointToCurve(this,n[n.length-1],this.board)[0].usrCoords,h=n.length-2;h>=0;h--)o=new coords_default(constants.COORDS_BY_USER,math_default.matVecMult(n[h].transformMat,o),this.board).usrCoords;else o=geometry_default.projectPointToCurve(this,a,this.board)[0].usrCoords}else type_default.isPoint(a)&&(o=geometry_default.projectPointToPoint(this,a,this.board).usrCoords);this.coords.setCoordinates(constants.COORDS_BY_USER,o,!1)},updateRendererGeneric:function(t){return!this.needsUpdate||!this.board.renderer?this:(this.visPropCalc.visible&&(this.isReal=!isNaN(this.coords.usrCoords[1]+this.coords.usrCoords[2]),this.isReal=Math.abs(this.coords.usrCoords[0])>math_default.eps?this.isReal:!1,this.isReal||this.updateVisibility(!1)),this.visPropCalc.visible&&this.board.renderer[t](this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this)},X:function(){return this.coords.usrCoords[1]},Y:function(){return this.coords.usrCoords[2]},Z:function(){return this.coords.usrCoords[0]},Coords:function(t){return t?this.coords.usrCoords.slice():this.coords.usrCoords.slice(1)},XEval:function(){return this.coords.usrCoords[1]},YEval:function(){return this.coords.usrCoords[2]},ZEval:function(){return this.coords.usrCoords[0]},Dist:function(t){return this.isReal&&t.isReal?this.coords.distance(constants.COORDS_BY_USER,t.coords):NaN},snapToGrid:function(t){return this.handleSnapToGrid(t)},handleSnapToPoints:function(t){var e,r,s,o=0,a,n=1/0,l=null,h,d,u=this.evalVisProp("ignoredsnaptopoints"),c,p,f=!1;if(a=this.board.objectsList.length,u&&(c=u.length),this.evalVisProp("snaptopoints")||t){for(h=this.evalVisProp("attractorunit"),d=this.evalVisProp("attractordistance"),e=0;e<a;e++){if(r=this.board.objectsList[e],u){for(f=!1,p=0;p<c;p++)if(r===this.board.select(u[p])){f=!0;break}if(f)continue}type_default.isPoint(r)&&r!==this&&r.visPropCalc.visible&&(s=geometry_default.projectPointToPoint(this,r,this.board),h==="screen"?o=s.distance(constants.COORDS_BY_SCREEN,this.coords):o=s.distance(constants.COORDS_BY_USER,this.coords),o<d&&o<n&&(n=o,l=s))}l!==null&&this.coords.setCoordinates(constants.COORDS_BY_USER,l.usrCoords)}return this},snapToPoints:function(t){return this.handleSnapToPoints(t)},handleAttractors:function(){var t,e,r,s=0,o,a=this.evalVisProp("attractorunit"),n=this.evalVisProp("attractordistance"),l=this.evalVisProp("snatchdistance"),h=this.evalVisProp("attractors"),d=h.length;if(n!==0){for(t=0;t<d;t++)if(e=this.board.select(h[t]),type_default.exists(e)&&e!==this){if(type_default.isPoint(e)?r=geometry_default.projectPointToPoint(this,e,this.board):e.elementClass===constants.OBJECT_CLASS_LINE?(o=geometry_default.projectCoordsToSegment(this.coords.usrCoords,e.point1.coords.usrCoords,e.point2.coords.usrCoords),!e.evalVisProp("straightfirst")&&o[1]<0?r=e.point1.coords:!e.evalVisProp("straightlast")&&o[1]>1?r=e.point2.coords:r=new coords_default(constants.COORDS_BY_USER,o[0],this.board)):e.elementClass===constants.OBJECT_CLASS_CIRCLE?r=geometry_default.projectPointToCircle(this,e,this.board):e.elementClass===constants.OBJECT_CLASS_CURVE?r=geometry_default.projectPointToCurve(this,e,this.board)[0]:e.type===constants.OBJECT_TYPE_TURTLE?r=geometry_default.projectPointToTurtle(this,e,this.board)[0]:e.type===constants.OBJECT_TYPE_POLYGON&&(r=new coords_default(constants.COORDS_BY_USER,geometry_default.projectCoordsToPolygon(this.coords.usrCoords,e),this.board)),a==="screen"?s=r.distance(constants.COORDS_BY_SCREEN,this.coords):s=r.distance(constants.COORDS_BY_USER,this.coords),s<n){this.type===constants.OBJECT_TYPE_GLIDER&&(e===this.slideObject||this.slideObject&&this.onPolygon&&this.slideObject.parentPolygon===e)||this.makeGlider(e);break}s>=l&&(e===this.slideObject||this.slideObject&&this.onPolygon&&this.slideObject.parentPolygon===e)&&this.popSlideObject()}return this}},setPositionDirectly:function(t,e){var r,s,o,a,n=this.coords,l;if(this.relativeCoords)return s=new coords_default(t,e,this.board),this.evalVisProp("islabel")?(o=statistics_default.subtract(s.scrCoords,n.scrCoords),this.relativeCoords.scrCoords[1]+=o[1],this.relativeCoords.scrCoords[2]+=o[2]):(o=statistics_default.subtract(s.usrCoords,n.usrCoords),this.relativeCoords.usrCoords[1]+=o[1],this.relativeCoords.usrCoords[2]+=o[2]),this;if(this.coords.setCoordinates(t,e),this.handleSnapToGrid(),this.handleSnapToPoints(),this.handleAttractors(),this.actualCoords.setCoordinates(constants.COORDS_BY_USER,this.coords.usrCoords),this.transformations.length>0){for(t===constants.COORDS_BY_SCREEN?l=new coords_default(t,e,this.board).usrCoords:(e.length===2&&(e=[1].concat(e)),l=e),a=[[1,0,0],[0,1,0],[0,0,1]],r=0;r<this.transformations.length;r++)a=math_default.matMatMult(this.transformations[r].matrix,a);l=math_default.matVecMult(math_default.inverse(a),l),this.initialCoords.setCoordinates(constants.COORDS_BY_USER,l),this.elementClass!==constants.OBJECT_CLASS_POINT&&this.coords.setCoordinates(constants.COORDS_BY_USER,l)}return this.prepareUpdate().update(),this.board.isSuspendedUpdate&&this.type===constants.OBJECT_TYPE_GLIDER&&this.updateGlider(),this},setPositionByTransform:function(t,e){var r;return e=new coords_default(t,e,this.board),r=this.board.create("transform",e.usrCoords.slice(1),{type:"translate"}),this.transformations.length>0&&this.transformations[this.transformations.length-1].isNumericMatrix?this.transformations[this.transformations.length-1].melt(r):this.addTransform(this,r),this.prepareUpdate().update(),this},setPosition:function(t,e){return this.setPositionDirectly(t,e)},setGliderPosition:function(t){return this.type===constants.OBJECT_TYPE_GLIDER&&(this.position=t,this.board.update()),this},makeGlider:function(t){var e=this.board.select(t),r=!1,s,o,a;if(e.type===constants.OBJECT_TYPE_POLYGON){for(s=Number.MAX_VALUE,o=0;o<e.borders.length;o++)a=jxg_default.Math.Geometry.distPointLine(this.coords.usrCoords,e.borders[o].stdform),a<s&&(s=a,t=e.borders[o]);e=this.board.select(t),r=!0}if(type_default.exists(e)){if(e.type===constants.OBJECT_TYPE_TICKS)throw new Error("JSXGraph: gliders on ticks are not possible.")}else throw new Error("JSXGraph: slide object undefined.");return this.slideObject=this.board.select(t),this.slideObjects.push(this.slideObject),this.addParents(t),this.type=constants.OBJECT_TYPE_GLIDER,this.elType="glider",this.visProp.snapwidth=-1,this.slideObject.addChild(this),this.isDraggable=!0,this.onPolygon=r,this.generatePolynomial=function(){return this.slideObject.generatePolynomial(this)},this.updateGlider(),this.needsUpdateFromParent=!0,this.updateGliderFromParent(),this},popSlideObject:function(){this.slideObjects.length>0&&(this.slideObjects.pop(),this.slideObject.removeChild(this),this.slideObjects.length===0?(this.type=this._org_type,this.type===constants.OBJECT_TYPE_POINT?this.elType="point":this.elementClass===constants.OBJECT_CLASS_TEXT?this.elType="text":this.type===constants.OBJECT_TYPE_IMAGE?this.elType="image":this.type===constants.OBJECT_TYPE_FOREIGNOBJECT&&(this.elType="foreignobject"),this.slideObject=null):this.slideObject=this.slideObjects[this.slideObjects.length-1])},free:function(){var t,e;if(this.type!==constants.OBJECT_TYPE_GLIDER)if(this.transformations.length=0,delete this.updateConstraint,this.isConstrained=!1,!this.isDraggable)this.isDraggable=!0,this.elementClass===constants.OBJECT_CLASS_POINT&&(this.type=constants.OBJECT_TYPE_POINT,this.elType="point"),this.XEval=function(){return this.coords.usrCoords[1]},this.YEval=function(){return this.coords.usrCoords[2]},this.ZEval=function(){return this.coords.usrCoords[0]},this.Xjc=null,this.Yjc=null;else return;for(t in this.board.objects)this.board.objects.hasOwnProperty(t)&&(e=this.board.objects[t],e.descendants&&(delete e.descendants[this.id],delete e.childElements[this.id],this.hasLabel&&(delete e.descendants[this.label.id],delete e.childElements[this.label.id])));this.ancestors={},this.parents=[],this.slideObject=null,this.slideObjects=[],this.elementClass===constants.OBJECT_CLASS_POINT?(this.type=constants.OBJECT_TYPE_POINT,this.elType="point"):this.elementClass===constants.OBJECT_CLASS_TEXT?(this.type=this._org_type,this.elType="text"):this.elementClass===constants.OBJECT_CLASS_OTHER&&(this.type=this._org_type,this.elType="image")},addConstraint:function(t){var e,r,s=[],o=["X","Y"],a=function(l){return function(){return l}},n=function(l){return function(){return l.Value()}};for(this.elementClass===constants.OBJECT_CLASS_POINT&&(this.type=constants.OBJECT_TYPE_CAS),this.isDraggable=!1,e=0;e<t.length;e++)r=t[e],type_default.isString(r)?(s[e]=this.board.jc.snippet(r,!0,null,!0),this.addParentsFromJCFunctions([s[e]]),t.length===2&&(this[o[e]+"jc"]=t[e])):type_default.isFunction(r)?s[e]=r:type_default.isNumber(r)?s[e]=a(r):type_default.isObject(r)&&type_default.isFunction(r.Value)&&(s[e]=n(r)),s[e].origin=r;return t.length===1?this.updateConstraint=function(){var l=s[0]();return type_default.isArray(l)?this.coords.setCoordinates(constants.COORDS_BY_USER,l):this.coords=l,this}:t.length===2?(this.XEval=s[0],this.YEval=s[1],this.addParents([s[0].origin,s[1].origin]),this.updateConstraint=function(){return this.coords.setCoordinates(constants.COORDS_BY_USER,[this.XEval(),this.YEval()]),this}):(this.ZEval=s[0],this.XEval=s[1],this.YEval=s[2],this.addParents([s[0].origin,s[1].origin,s[2].origin]),this.updateConstraint=function(){return this.coords.setCoordinates(constants.COORDS_BY_USER,[this.ZEval(),this.XEval(),this.YEval()]),this}),this.isConstrained=!0,this.prepareUpdate().update(),this.board.isSuspendedUpdate||(this.updateVisibility().updateRenderer(),this.hasLabel&&this.label.fullUpdate()),this},addAnchor:function(t,e){e?this.relativeCoords=new coords_default(constants.COORDS_BY_SCREEN,t.slice(0,2),this.board):this.relativeCoords=new coords_default(constants.COORDS_BY_USER,t,this.board),this.element.addChild(this),e&&this.addParents(this.element),this.XEval=function(){var r,s,o,a;return this.evalVisProp("islabel")?(a=this.evalVisProp("offset"),r=parseFloat(a[0]),o=this.element.getLabelAnchor(),s=new coords_default(constants.COORDS_BY_SCREEN,[r+this.relativeCoords.scrCoords[1]+o.scrCoords[1],0],this.board),s.usrCoords[1]):(o=this.element.getTextAnchor(),this.relativeCoords.usrCoords[1]+o.usrCoords[1])},this.YEval=function(){var r,s,o,a;return this.evalVisProp("islabel")?(a=this.evalVisProp("offset"),r=-parseFloat(a[1]),o=this.element.getLabelAnchor(),s=new coords_default(constants.COORDS_BY_SCREEN,[0,r+this.relativeCoords.scrCoords[2]+o.scrCoords[2]],this.board),s.usrCoords[2]):(o=this.element.getTextAnchor(),this.relativeCoords.usrCoords[2]+o.usrCoords[2])},this.ZEval=type_default.createFunction(1,this.board,""),this.updateConstraint=function(){this.coords.setCoordinates(constants.COORDS_BY_USER,[this.ZEval(),this.XEval(),this.YEval()])},this.isConstrained=!0,this.updateConstraint()},updateTransform:function(t){var e,r;if(this.transformations.length===0)return this;for(this.baseElement===null&&(this.baseElement=this),this.transformations[0].update(),this===this.baseElement?e=this.transformations[0].apply(this,"self"):e=this.transformations[0].apply(this.baseElement),r=1;r<this.transformations.length;r++)this.transformations[r].update(),e=math_default.matVecMult(this.transformations[r].matrix,e);return this.actualCoords.setCoordinates(constants.COORDS_BY_USER,e),this},addTransform:function(t,e){var r,s=type_default.isArray(e)?e:[e],o=s.length;for(this.transformations.length===0&&(this.baseElement=t),r=0;r<o;r++)this.transformations.push(s[r]);return this},removeTransform:function(t){var e,r=type_default.isArray(t)?t:[t],s=r.length;for(e=0;e<s;e++)type_default.removeElementFromArray(this.transformations,r[e]);return this.transformations.length===0&&(this.baseElement=null),this},clearTransforms:function(){return this.transformations=[],this.baseElement=null,this},startAnimation:function(t,e,r,s){var o=type_default.evaluate(t),a=type_default.evaluate(e),n=this;return r=type_default.evaluate(r)||250,s=type_default.evaluate(s),s=s!=="undefined"?s:-1,this.type===constants.OBJECT_TYPE_GLIDER&&!type_default.exists(this.intervalCode)&&s!==0&&(this.roundsCount=0,this.intervalCode=window.setInterval(function(){n._anim(o,a,s)},r),type_default.exists(this.intervalCount)||(this.intervalCount=0)),this},stopAnimation:function(){return type_default.exists(this.intervalCode)&&(window.clearInterval(this.intervalCode),delete this.intervalCode),this},moveAlong:function(t,e,r){r=r||{};var s,o,a=[],n=[],l=this.board.attr.animationdelay,h=e/l,d,u,c,p=function(f,_){return function(){return t[f][_]}};if(type_default.isArray(t)){for(d=t.length,s=0;s<d;s++)type_default.isPoint(t[s])?n[s]=t[s]:n[s]={elementClass:constants.OBJECT_CLASS_POINT,X:p(s,0),Y:p(s,1)};if(e=e||0,e===0)return this.setPosition(constants.COORDS_BY_USER,[n[n.length-1].X(),n[n.length-1].Y()]),this.board.update(this);if(!type_default.exists(r.interpolate)||r.interpolate)for(o=numerics_default.Neville(n),s=0;s<h;s++)a[s]=[],a[s][0]=o[0]((h-s)/h*o[3]()),a[s][1]=o[1]((h-s)/h*o[3]());else{for(d=t.length-1,s=0;s<h;++s)u=Math.floor(s/h*d),c=s/h*d-u,a[s]=[],a[s][0]=(1-c)*n[u].X()+c*n[u+1].X(),a[s][1]=(1-c)*n[u].Y()+c*n[u+1].Y();a.push([n[d].X(),n[d].Y()]),a.reverse()}this.animationPath=a}else type_default.isFunction(t)&&(this.animationPath=t,this.animationStart=new Date().getTime());return this.animationCallback=r.callback,this.board.addAnimation(this),this},moveTo:function(t,e,r){r=r||{},t=new coords_default(constants.COORDS_BY_USER,t,this.board);var s,o=this.board.attr.animationdelay,a=Math.ceil(e/o),n=[],l=this.coords.usrCoords[1],h=this.coords.usrCoords[2],d=t.usrCoords[1]-l,u=t.usrCoords[2]-h,c=function(p){var f=p/a;if(r.effect){if(r.effect==="<>")return Math.pow(Math.sin(f*Math.PI/2),2);if(r.effect==="<")return f*f*f;if(r.effect===">")return 1-Math.pow(1-f,3);if(r.effect==="=="||r.effect==="--")return p/a;jxg_default.warn("Callback moveTo(): valid effects are '==', '--', '<>', '>', and '<', given is '"+r.effect+"'. Set it to '--'"),r.effect="--"}return p/a};if(!type_default.exists(e)||e===0||Math.abs(t.usrCoords[0]-this.coords.usrCoords[0])>math_default.eps)return this.setPosition(constants.COORDS_BY_USER,t.usrCoords),this.board.update(this);if(!type_default.exists(r.callback)&&Math.abs(d)<math_default.eps&&Math.abs(u)<math_default.eps)return this;for(s=a;s>=0;s--)n[a-s]=[t.usrCoords[0],l+d*c(s),h+u*c(s)];return this.animationPath=n,this.animationCallback=r.callback,this.board.addAnimation(this),this},visit:function(t,e,r){t=new coords_default(constants.COORDS_BY_USER,t,this.board);var s,o,a,n=this.board.attr.animationdelay,l=[],h=this.coords.usrCoords[1],d=this.coords.usrCoords[2],u=t.usrCoords[1]-h,c=t.usrCoords[2]-d,p=function(f){var _=f<a/2?2*f/a:2*(a-f)/a;if(r.effect){if(r.effect==="<>")return Math.pow(Math.sin(_*Math.PI/2),2);if(r.effect==="<")return _*_*_;if(r.effect===">")return 1-Math.pow(1-_,3);if(r.effect==="=="||r.effect==="--")return _;jxg_default.warn("Callback visit(): valid effects are '==', '--', '<>', '>', and '<', given is '"+r.effect+"'. Set it to '--'"),r.effect="--"}return _};for(type_default.isNumber(r)?r={repeat:r}:(r=r||{},type_default.exists(r.repeat)||(r.repeat=1)),a=Math.ceil(e/(n*r.repeat)),o=0;o<r.repeat;o++)for(s=a;s>=0;s--)l[o*(a+1)+a-s]=[t.usrCoords[0],h+u*p(s),d+c*p(s)];return this.animationPath=l,this.animationCallback=r.callback,this.board.addAnimation(this),this},moveAlongES6:function(t,e,r){return new Promise((s,o)=>{type_default.exists(r)&&type_default.exists(r.callback)?r.callback=s:r={callback:s},this.moveAlong(t,e,r)})},moveToES6:function(t,e,r){return new Promise((s,o)=>{type_default.exists(r)&&type_default.exists(r.callback)?r.callback=s:r={callback:s},this.moveTo(t,e,r)})},visitES6:function(t,e,r){return new Promise((s,o)=>{type_default.exists(r)&&type_default.exists(r.callback)?r.callback=s:r={callback:s},this.visit(t,e,r)})},_anim:function(t,e,r){var s,o,a,n,l,h,d,u,c;return this.intervalCount+=1,this.intervalCount>e&&(this.intervalCount=0,this.roundsCount+=1,r>0&&this.roundsCount>=r)?(this.roundsCount=0,this.stopAnimation()):(this.slideObject.elementClass===constants.OBJECT_CLASS_LINE?(d=this.slideObject.point1.coords.scrCoords,u=this.slideObject.point2.coords.scrCoords,s=Math.round((u[1]-d[1])*this.intervalCount/e),o=Math.round((u[2]-d[2])*this.intervalCount/e),t>0?n=this.slideObject.point1:(n=this.slideObject.point2,s*=-1,o*=-1),this.coords.setCoordinates(constants.COORDS_BY_SCREEN,[n.coords.scrCoords[1]+s,n.coords.scrCoords[2]+o])):this.slideObject.elementClass===constants.OBJECT_CLASS_CURVE?(t>0?l=(this.slideObject.maxX()-this.slideObject.minX())*this.intervalCount/e+this.slideObject.minX():l=-(this.slideObject.maxX()-this.slideObject.minX())*this.intervalCount/e+this.slideObject.maxX(),this.coords.setCoordinates(constants.COORDS_BY_USER,[this.slideObject.X(l),this.slideObject.Y(l)]),c=geometry_default.projectPointToCurve(this,this.slideObject,this.board),this.coords=c[0],this.position=c[1]):this.slideObject.elementClass===constants.OBJECT_CLASS_CIRCLE&&(a=2*Math.PI,t<0?a*=this.intervalCount/e:a*=(e-this.intervalCount)/e,h=this.slideObject.Radius(),this.coords.setCoordinates(constants.COORDS_BY_USER,[this.slideObject.center.coords.usrCoords[1]+h*Math.cos(a),this.slideObject.center.coords.usrCoords[2]+h*Math.sin(a)])),this.board.update(this),this)},getTextAnchor:function(){return this.coords},getLabelAnchor:function(){return this.coords},getParents:function(){var t=[this.Z(),this.X(),this.Y()];return this.parents.length!==0&&(t=this.parents),this.type===constants.OBJECT_TYPE_GLIDER&&(t=[this.X(),this.Y(),this.slideObject.id]),t}});jxg_default.CoordsElement.create=function(t,e,r,s,o,a){for(var n,l=!1,h=0;h<r.length;h++)(type_default.isFunction(r[h])||type_default.isString(r[h]))&&(l=!0);if(l)n=new t(e,[0,0],s,o,a),n.addConstraint(r);else if(type_default.isNumber(r[0])&&type_default.isNumber(r[1]))n=new t(e,r,s,o,a),type_default.exists(s.slideobject)?n.makeGlider(s.slideobject):n.baseElement=n,n.isDraggable=!0;else if(type_default.isObject(r[0])&&type_default.isTransformationOrArray(r[1]))n=new t(e,[0,0],s,o,a),n.addTransform(r[0],r[1]),n.isDraggable=!1;else return!1;return n.handleSnapToGrid(),n.handleSnapToPoints(),n.handleAttractors(),n.addParents(r),n};var coordselement_default=jxg_default.CoordsElement,priv$5={HTMLSliderInputEventHandler:function(){this._val=parseFloat(this.rendNodeRange.value),this.rendNodeOut.value=this.rendNodeRange.value,this.board.update()}};jxg_default.Text=function(t,e,r,s){var o;this.constructor(t,r,constants.OBJECT_TYPE_TEXT,constants.OBJECT_CLASS_TEXT),this.element=this.board.select(r.anchor),this.coordsConstructor(e,this.evalVisProp("islabel")),this.content="",this.plaintext="",this.plaintextOld=null,this.orgText="",this.needsSizeUpdate=!1,this.hiddenByParent=!1,this.size=[1,1],this.id=this.board.setId(this,"T"),this.board.renderer.drawText(this),this.board.finalizeAdding(this),o=this.visProp.visible,this.visProp.visible=!0,this.setText(s),this.visProp.visible=o,type_default.isString(this.content)&&this.notifyParents(this.content),this.elType="text"};jxg_default.Text.prototype=new element_default;type_default.copyPrototypeMethods(jxg_default.Text,coordselement_default,"coordsConstructor");type_default.copyMethodMap(jxg_default.Text,{setText:"setTextJessieCode",move:"setCoords",Size:"getSize",setAutoPosition:"setAutoPosition"});jxg_default.extend(jxg_default.Text.prototype,{hasPoint:function(t,e){var r,s,o,a,n,l,h,d;return type_default.isObject(this.evalVisProp("precision"))?(h=this.board._inputDevice,d=this.evalVisProp("precision."+h)):d=this.board.options.precision.hasPoint,this.transformations.length>0&&(r=math_default.matVecMult(math_default.inverse(this.board.renderer.joinTransforms(this,this.transformations)),[1,t,e]),t=r[1],e=r[2]),n=this.getAnchorX(),n==="right"?r=this.coords.scrCoords[1]-this.size[0]:n==="middle"?r=this.coords.scrCoords[1]-.5*this.size[0]:r=this.coords.scrCoords[1],s=r+this.size[0],l=this.getAnchorY(),l==="top"?a=this.coords.scrCoords[2]+this.size[1]:l==="middle"?a=this.coords.scrCoords[2]+.5*this.size[1]:a=this.coords.scrCoords[2],o=a-this.size[1],this.evalVisProp("dragarea")==="all"?t>=r-d&&t<s+d&&e>=o-d&&e<=a+d:e>=o-d&&e<=a+d&&(t>=r-d&&t<=r+2*d||t>=s-2*d&&t<=s+d)},_createFctUpdateText:function(t){var e,r,s,o,a,n,l=this.evalVisProp("parse"),h=this.evalVisProp("usemathjax"),d=this.evalVisProp("usekatex"),u=!1;if(this.orgText=t,type_default.isFunction(t))this.updateText=function(){o=t().toString(),l&&!h&&!d?this.plaintext=this.replaceSub(this.replaceSup(this.convertGeonextAndSketchometry2CSS(o,!1))):this.plaintext=o};else if(type_default.isNumber(t)&&this.evalVisProp("formatnumber")?this.evalVisProp("tofraction")?h?this.content="\\("+type_default.toFraction(t,!0)+"\\)":this.content=type_default.toFraction(t,d):(s=this.evalVisProp("digits"),this.useLocale()?this.content=this.formatNumberLocale(t,s):this.content=type_default.toFixed(t,s)):type_default.isString(t)&&l?(this.evalVisProp("useasciimathml")?this.content="'`"+t+"`'":h||d?(this.content=this.valueTagToJessieCode(t),type_default.isArray(this.content)||(this.content=this.content.replace(/\\/g,"\\\\"))):this.content=this.poorMansTeX(this.valueTagToJessieCode(t)),u=!0):this.content=t,u){if(type_default.isArray(this.content)){for(n=this,a=0;a<this.content.length;a++)if(this.content[a][0]!=='"'){this.content[a]=this.board.jc.snippet(this.content[a],!0,"",!1);for(r in this.content[a].deps)this.addParents(this.content[a].deps[r]),this.content[a].deps[r].addChild(this)}e=function(){var c,p,f=n.evalVisProp("digits"),_="";for(c=0;c<n.content.length;c++)type_default.isFunction(n.content[c])?(p=n.content[c](),n.useLocale()?p=n.formatNumberLocale(p,f):p=type_default.toFixed(p,f)):(p=n.content[c],p[0]==='"'&&p[p.length-1]==='"'&&(p=p.slice(1,-1))),_+=p;return _}}else{e=this.board.jc.snippet(this.content,!0,"",!1);for(r in e.deps)this.addParents(e.deps[r]),e.deps[r].addChild(this)}this.updateText=function(){this.plaintext=this.unescapeTicks(e())}}else this.updateText=function(){this.plaintext=this.content}},_setText:function(t){return this._createFctUpdateText(t),this.updateText(),this.fullUpdate(),(!this.board.infobox||this.id!==this.board.infobox.id)&&this.updateSize(),this},setTextJessieCode:function(t){var e;return this.visProp.castext=t,type_default.isFunction(t)?e=function(){return type_default.sanitizeHTML(t())}:type_default.isNumber(t)?e=t:e=type_default.sanitizeHTML(t),this._setText(e)},setText:function(t){return this._setText(t)},updateSize:function(){var t,e,r,s=this.evalVisProp("display");return!env_default.isBrowser||this.board.renderer.type==="no"?this:(r=this.rendNode,s==="html"||this.board.renderer.type==="vml"?type_default.exists(r.offsetWidth)?(e=this,window.setTimeout(function(){e.size=[r.offsetWidth,r.offsetHeight],e.needsUpdate=!0,e.updateRenderer()},0)):this.size=this.crudeSizeEstimate():s==="internal"&&(this.board.renderer.type==="svg"?(e=this,window.setTimeout(function(){try{t=r.getBBox(),e.size=[t.width,t.height],e.needsUpdate=!0,e.updateRenderer()}catch{}},0)):this.board.renderer.type==="canvas"&&(this.size=this.crudeSizeEstimate())),this)},crudeSizeEstimate:function(){var t=parseFloat(this.evalVisProp("fontsize"));return[t*this.plaintext.length*.45,t*.9]},utf8_decode:function(t){return t.replace(/&#x(\w+);/g,function(e,r){return String.fromCharCode(parseInt(r,16))})},replaceSub:function(t){if(!t.indexOf)return t;for(var e,r=t.indexOf("_{");r>=0;)t=t.slice(0,r)+t.slice(r).replace(/_\{/,"<sub>"),e=t.indexOf("}",r+4),e>=0&&(t=t.slice(0,e)+t.slice(e).replace(/\}/,"</sub>")),r=t.indexOf("_{");for(r=t.indexOf("_");r>=0;)t=t.slice(0,r)+t.slice(r).replace(/_(.?)/,"<sub>$1</sub>"),r=t.indexOf("_");return t},replaceSup:function(t){if(!t.indexOf)return t;for(var e,r=t.indexOf("^{");r>=0;)t=t.slice(0,r)+t.slice(r).replace(/\^\{/,"<sup>"),e=t.indexOf("}",r+4),e>=0&&(t=t.slice(0,e)+t.slice(e).replace(/\}/,"</sup>")),r=t.indexOf("^{");for(r=t.indexOf("^");r>=0;)t=t.slice(0,r)+t.slice(r).replace(/\^(.?)/,"<sup>$1</sup>"),r=t.indexOf("^");return t},getSize:function(){return this.size},setCoords:function(t,e){var r,s,o;return type_default.isArray(t)&&t.length>1&&(e=t[1],t=t[0]),this.evalVisProp("islabel")&&type_default.exists(this.element)?(r=this.element.getLabelAnchor(),s=(t-r.usrCoords[1])*this.board.unitX,o=-(e-r.usrCoords[2])*this.board.unitY,this.relativeCoords.setCoordinates(constants.COORDS_BY_SCREEN,[s,o])):this.coords.setCoordinates(constants.COORDS_BY_USER,[t,e]),this.fullUpdate(),this},update:function(t){return this.needsUpdate?(this.updateCoords(t),this.updateText(),this.evalVisProp("display")==="internal"&&type_default.isString(this.plaintext)&&(this.plaintext=this.utf8_decode(this.plaintext)),this.checkForSizeUpdate(),this.needsSizeUpdate&&this.updateSize(),this):this},checkForSizeUpdate:function(){this.board.infobox&&this.id===this.board.infobox.id?this.needsSizeUpdate=!1:(this.needsSizeUpdate=this.plaintextOld!==this.plaintext,this.needsSizeUpdate&&(this.plaintextOld=this.plaintext))},updateRenderer:function(){return this.evalVisProp("autoposition")&&this.setAutoPosition().updateConstraint(),this.updateRendererGeneric("updateText")},expandShortMath:function(t){return t.replace(/([)0-9.])\s*([(a-zA-Z_])/g,"$1*$2")},generateTerm:function(t,e,r){var s,o,a,n,l='""';if(t=t||"",t=t.replace(/\r/g,""),t=t.replace(/\n/g,""),t=t.replace(/"/g,"'"),t=t.replace(/'/g,"\\'"),t=t.replace(/&amp;arc;/g,"&ang;"),t=t.replace(/<arc\s*\/>/g,"&ang;"),t=t.replace(/&lt;arc\s*\/&gt;/g,"&ang;"),t=t.replace(/&lt;sqrt\s*\/&gt;/g,"&radic;"),t=t.replace(/&lt;value&gt;/g,"<value>"),t=t.replace(/&lt;\/value&gt;/g,"</value>"),a=t.indexOf("<value>"),n=t.indexOf("</value>"),a>=0)for(;a>=0;)l+=' + "'+this.replaceSub(this.replaceSup(t.slice(0,a)))+'"',o=t.slice(a+7,n),o=o.replace(/\s+/g,""),e===!0&&(o=this.expandShortMath(o)),r?s=o:s=geonext_default.geonext2JS(o,this.board),s=s.replace(/\\"/g,"'"),s=s.replace(/\\'/g,"'"),s.indexOf("toFixed")<0&&type_default.isNumber(type_default.bind(this.board.jc.snippet(s,!0,"",!1),this)())?l+="+("+s+").toFixed("+this.evalVisProp("digits")+")":l+="+("+s+")",t=t.slice(n+8),a=t.indexOf("<value>"),n=t.indexOf("</value>");return l+=' + "'+this.replaceSub(this.replaceSup(t))+'"',l=this.convertGeonextAndSketchometry2CSS(l),l=l.replace(/&amp;/g,"&"),l=l.replace(/"/g,"'"),l},valueTagToJessieCode:function(t){var e,r,s,o,a=!0,n=[],l='"';if(t=t||"",t=t.replace(/\r/g,""),t=t.replace(/\n/g,""),t=t.replace(/&lt;value&gt;/g,"<value>"),t=t.replace(/&lt;\/value&gt;/g,"</value>"),s=t.indexOf("<value>"),o=t.indexOf("</value>"),s>=0)for(;s>=0;)n.push(l+this.escapeTicks(t.slice(0,s))+l),r=t.slice(s+7,o),r=r.replace(/\s+/g,""),a===!0&&(r=this.expandShortMath(r)),e=r,e=e.replace(/\\"/g,"'").replace(/\\'/g,"'"),n.push("("+e+")"),t=t.slice(o+8),s=t.indexOf("<value>"),o=t.indexOf("</value>");for(n.push(l+this.escapeTicks(t)+l),s=0;s<n.length;s++)n[s]=n[s].replace(/&amp;/g,"&");return n},poorMansTeX:function(t){var e,r;if(type_default.isArray(t)){for(r=[],e=0;e<t.length;e++)r.push(this.poorMansTeX(t[e]));return r}return t=t.replace(/<arc\s*\/*>/g,"&ang;").replace(/&lt;arc\s*\/*&gt;/g,"&ang;").replace(/<sqrt\s*\/*>/g,"&radic;").replace(/&lt;sqrt\s*\/*&gt;/g,"&radic;"),this.convertGeonextAndSketchometry2CSS(this.replaceSub(this.replaceSup(t)),!0)},escapeTicks:function(t){return t.replace(/"/g,"%22").replace(/'/g,"%27")},unescapeTicks:function(t){return t.replace(/%22/g,'"').replace(/%27/g,"'")},convertGeonext2CSS:function(t){return type_default.isString(t)&&(t=t.replace(/(<|&lt;)overline(>|&gt;)/g,"<span style=text-decoration:overline;>"),t=t.replace(/(<|&lt;)\/overline(>|&gt;)/g,"</span>"),t=t.replace(/(<|&lt;)arrow(>|&gt;)/g,"<span style=text-decoration:overline;>"),t=t.replace(/(<|&lt;)\/arrow(>|&gt;)/g,"</span>")),t},convertSketchometry2CSS:function(t,e){var r='<span class="sketcho sketcho-inherit sketcho-',s='"></span>';return type_default.isString(t)&&(e&&(r=this.escapeTicks(r),s=this.escapeTicks(s)),t=t.replace(/(<|&lt;)sketchoicon(>|&gt;)/g,r),t=t.replace(/(<|&lt;)\/sketchoicon(>|&gt;)/g,s),t=t.replace(/(<|&lt;)sketchofont(>|&gt;)/g,r),t=t.replace(/(<|&lt;)\/sketchofont(>|&gt;)/g,s)),t},convertGeonextAndSketchometry2CSS:function(t,e){return t=this.convertGeonext2CSS(t),t=this.convertSketchometry2CSS(t,e),t},notifyParents:function(t){var e,r=null;t=t.replace(/&lt;value&gt;/g,"<value>"),t=t.replace(/&lt;\/value&gt;/g,"</value>");do e=/<value>([\w\s*/^\-+()[\],<>=!]+)<\/value>/,r=e.exec(t),r!==null&&(geonext_default.findDependencies(this,r[1],this.board),t=t.slice(r.index),t=t.replace(e,""));while(r!==null);return this},getParents:function(){var t;return this.relativeCoords!==void 0?t=[this.relativeCoords.usrCoords[1],this.relativeCoords.usrCoords[2],this.orgText]:t=[this.Z(),this.X(),this.Y(),this.orgText],this.parents.length!==0&&(t=this.parents),t},bounds:function(){var t=this.coords.usrCoords;return this.evalVisProp("islabel")||this.board.unitY===0||this.board.unitX===0?[0,0,0,0]:[t[1],t[2]+this.size[1]/this.board.unitY,t[1]+this.size[0]/this.board.unitX,t[2]]},getAnchorX:function(){var t=this.evalVisProp("anchorx");if(t==="auto")switch(this.visProp.position){case"top":case"bot":return"middle";case"rt":case"lrt":case"urt":return"left";default:return"right"}return t},getAnchorY:function(){var t=this.evalVisProp("anchory");if(t==="auto")switch(this.visProp.position){case"top":case"ulft":case"urt":return"bottom";case"bot":case"lrt":case"llft":return"top";default:return"middle"}return t},getNumberOfConflicts:function(t,e,r,s,o){o=o||[];var a=0,n,l,h,d,u=this.board.options.precision.hasPoint,c,p,f,_;for(this.board.options.precision.hasPoint=(r+s)*.3,n=0;n<this.board.objectsList.length;n++)l=this.board.objectsList[n],l.visPropCalc.visible&&l!==this&&o.indexOf(l.id)===-1&&l.evalVisProp("ignoreforlabelautoposition")!==!0&&(d=l.visProp.hasinnerpoints,l.visProp.hasinnerpoints=!1,l.visProp.islabel||l.elementClass===constants.OBJECT_CLASS_POINT?(h=l.coords.scrCoords,c=h[1],p=h[2],f=l.size[0],_=l.size[1],l.visProp.islabel?(l.visProp.anchory==="top"?p=p+_/2:p=p-_/2,l.visProp.anchorx==="left"?c=c+f/2:c=c-f/2):(f=0,_=0),Math.abs(c-t)<(r+f)/2&&Math.abs(p-e)<(s+_)/2&&a++):l.hasPoint(t,e)&&a++,l.visProp.hasinnerpoints=d);return this.board.options.precision.hasPoint=u,a},calculateScore:function(t,e){var r,s,o,a,n,l,h=0,d=[0,0],u=this.getSize()[0],c=this.getSize()[1],p,f=this.evalVisProp("offset"),_=this.board.getBoundingBox();if(this.evalVisProp("islabel")&&type_default.exists(this.element))p=this.element.getLabelAnchor().scrCoords;else return 0;return o=Math.cos(e),a=Math.sin(e),r=p[1]+t*o,s=p[2]-t*a,o<0?(d[0]=r-u,r-=u/2):(d[0]=r+u,r+=u/2),a<0?(d[1]=s+c,s+=c/2):(d[1]=s-c,s-=c/2),(d[0]<0||d[0]>(_[2]-_[0])*this.board.unitX||d[1]<0||d[1]>(_[1]-_[3])*this.board.unitY)&&(h-=1),h-=this.getNumberOfConflicts(r,s,u,c,type_default.evaluate(this.visProp.autopositionwhitelist)),h-=t/this.evalVisProp("autopositionmindistance")/10-.1,n=Math.atan2(f[1],f[0]),n<0&&(n+=2*Math.PI),o>0&&Math.cos(n)>0&&Math.abs(e-n)>Math.PI?l=Math.abs(e-n-2*Math.PI):l=Math.abs(e-n),h-=l/10,h},setAutoPosition:function(){var t,e,r,s,o=-1/0,a,n,l=this.evalVisProp("autopositionmindistance"),h=this.evalVisProp("autopositionmaxdistance"),d,u,c,p=this.evalVisProp("offset"),f,_,g=60,m=4;if(this===this.board.infobox||!this.element||!this.visPropCalc.visible||!this.evalVisProp("islabel"))return this;if(f=Math.sqrt(p[0]*p[0]+p[1]*p[1]),_=Math.atan2(p[1],p[0]),this.calculateScore(f,_)===0)return this;for(t=l,r=(h-l)/(m-1);h-t>-.01;){for(s=0;s<g;s++)if(e=s/g*2*Math.PI,d=this.calculateScore(t,e),d>o&&(n=e,a=t,o=d),o===0){t=h;break}t+=r}return u=Math.cos(n),c=Math.sin(n),u<0?this.visProp.anchorx="right":this.visProp.anchorx="left",c<0?this.visProp.anchory="top":this.visProp.anchory="bottom",this.visProp.offset=[a*u,a*c],this}});jxg_default.createText=function(t,e,r){var s,o=type_default.copyAttributes(r,t.options,"text"),a=e.slice(0,-1),n=e[e.length-1];if(o.anchor=o.parent||o.anchor,s=coordselement_default.create(jxg_default.Text,t,a,o,n),!s)throw new Error("JSXGraph: Can't create text with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
57
+ Possible parent types: [x,y], [z,x,y], [element,transformation]`);return o.rotate!==0&&s.addRotation(o.rotate),s};jxg_default.registerElement("text",jxg_default.createText);jxg_default.createHTMLSlider=function(t,e,r){var s,o,a=type_default.copyAttributes(r,t.options,"htmlslider");if(e.length!==2||e[0].length!==2||e[1].length!==3)throw new Error("JSXGraph: Can't create htmlslider with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
58
+ Possible parents are: [[x,y], [min, start, max]]`);a.anchor=a.parent||a.anchor,a.fixed=a.fixed||!0,o=[e[0][0],e[0][1],'<form style="display:inline"><input type="range" /><span></span><input type="text" /></form>'],s=jxg_default.createText(t,o,a),s.type=type_default.OBJECT_TYPE_HTMLSLIDER,s.rendNodeForm=s.rendNode.childNodes[0],s.rendNodeRange=s.rendNodeForm.childNodes[0],s.rendNodeRange.min=e[1][0],s.rendNodeRange.max=e[1][2],s.rendNodeRange.step=a.step,s.rendNodeRange.value=e[1][1],s.rendNodeLabel=s.rendNodeForm.childNodes[1],s.rendNodeLabel.id=s.rendNode.id+"_label",a.withlabel&&(s.rendNodeLabel.innerText=s.name+"="),s.rendNodeOut=s.rendNodeForm.childNodes[2],s.rendNodeOut.value=e[1][1];try{s.rendNodeForm.id=s.rendNode.id+"_form",s.rendNodeRange.id=s.rendNode.id+"_range",s.rendNodeOut.id=s.rendNode.id+"_out"}catch(n){jxg_default.debug(n)}return s.rendNodeRange.style.width=a.widthrange+"px",s.rendNodeRange.style.verticalAlign="middle",s.rendNodeOut.style.width=a.widthout+"px",s._val=e[1][1],jxg_default.supportsVML()?env_default.addEvent(s.rendNodeForm,"change",priv$5.HTMLSliderInputEventHandler,s):env_default.addEvent(s.rendNodeForm,"input",priv$5.HTMLSliderInputEventHandler,s),s.Value=function(){return this._val},s};jxg_default.registerElement("htmlslider",jxg_default.createHTMLSlider);var text_default=jxg_default.Text;Object.create||(Object.create=function(t,e){if(typeof t!="object"&&typeof t!="function")throw new TypeError("Object prototype may only be an Object: "+t);if(t===null)throw new Error("This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument.");if(typeof e<"u")throw new Error("This browser's implementation of Object.create is a shim and doesn't support a second argument.");function r(){}return r.prototype=t,new r});var priv$4={modules:{math:math_default,"math/geometry":geometry_default,"math/statistics":statistics_default,"math/numerics":math_default.Numerics}};jxg_default.JessieCode=function(t,e){this.scope={id:0,hasChild:!0,args:[],locals:{},context:null,previous:null},this.scopes=[],this.scopes.push(this.scope),this.dpstack=[[]],this.pscope=0,this.propstack=[{}],this.propscope=0,this.lhs=[],this.isLHS=!1,this.warnLog="jcwarn",this.$log=[],this.builtIn=this.defineBuiltIn(),this.operands=this.getPossibleOperands(),this.board=null,this.forceValueCall=!1,this.lineToElement={},this.parCurLine=1,this.parCurColumn=0,this.line=1,this.col=1,jxg_default.CA&&(this.CA=new jxg_default.CA(this.node,this.createNode,this)),jxg_default.CAS&&(this.CAS=new jxg_default.CAS(this.node,this.createNode,this)),this.code="",typeof t=="string"&&this.parse(t,e)};jxg_default.extend(jxg_default.JessieCode.prototype,{node:function(t,e,r){return{type:t,value:e,children:r}},createNode:function(t,e,r){for(var s=this.node(t,e,[]),o=2;o<arguments.length;o++)s.children.push(arguments[o]);return s.type==="node_const"&&type_default.isNumber(s.value)&&(s.isMath=!0),s.line=this.parCurLine,s.col=this.parCurColumn,s},pushScope:function(t){var e={args:t,locals:{},context:null,previous:this.scope};return this.scope.hasChild=!0,this.scope=e,e.id=this.scopes.push(e)-1,e},popScope:function(){var t=this.scope.previous;return this.scope=t!==null?t:this.scope,this.scope},getElementById:function(t){return this.board.objects[t]},log:function(){this.$log.push(arguments),typeof console=="object"&&console.log&&console.log.apply(console,arguments)},creator:(function(){var t={},e=function(r){var s;return typeof t[this.board.id+r]=="function"?s=t[this.board.id+r]:(s=(function(o){return function(a,n){var l;return type_default.exists(n)?l=n:l={},l.name===void 0&&l.id===void 0&&(l.name=o.lhs[o.scope.id]!==0?o.lhs[o.scope.id]:""),o.board.create(r,a,l)}})(this),s.creator=!0,t[this.board.id+r]=s),s};return e.clearCache=function(){t={}},e})(),letvar:function(t,e){this.builtIn[t]&&this._warn('"'+t+'" is a predefined value.'),this.scope.locals[t]=e},isLocalVariable:function(t){for(var e=this.scope;e!==null;){if(type_default.exists(e.locals[t]))return e;e=e.previous}return null},isParameter:function(t){for(var e=this.scope;e!==null;){if(type_default.indexOf(e.args,t)>-1)return e;e=e.previous}return null},isCreator:function(t){return!!jxg_default.elements[t]},isMathMethod:function(t){return t!=="E"&&!!Math[t]},isBuiltIn:function(t){return!!this.builtIn[t]},getvar:function(t,e,r){var s;if(e=type_default.def(e,!1),s=this.isLocalVariable(t),s!==null)return s.locals[t];if(t==="$board"||t==="EULER"||t==="PI")return this.builtIn[t];if(r){if(this.isBuiltIn(t))return this.builtIn[t];if(this.isMathMethod(t))return Math[t];if(this.isCreator(t))return this.creator(t)}if(!e&&(s=this.board.select(t),s!==t))return s},resolve:function(t){for(var e=this.scope;e!==null;){if(type_default.exists(e.locals[t]))return e.locals[t];e=e.previous}},getvarJS:function(t,e,r){var s,o="",a;return e=type_default.def(e,!1),r=type_default.def(r,!1),s=this.isParameter(t),s!==null?t:(s=this.isLocalVariable(t),s!==null&&!r?"$jc$.resolve('"+t+"')":this.isCreator(t)?"(function () { var a = Array.prototype.slice.call(arguments, 0), props = "+(r?"a.pop()":"{}")+"; return $jc$.board.create.apply($jc$.board, ['"+t+"'].concat([a, props])); })":(r&&this._error("Syntax error (attribute values are allowed with element creators only)"),this.isBuiltIn(t)?(o=this.builtIn[t].src||this.builtIn[t],type_default.isNumber(o)||o.match(/board\.select/)?o:(t=o.split(".").pop(),type_default.exists(this.board.mathLib)&&(a=new RegExp("^Math."+t),a.exec(o)!==null)?o.replace(a,"$jc$.board.mathLib."+t):type_default.exists(this.board.mathLibJXG)?(a=new RegExp("^JXG.Math."),a.exec(o)!==null?o.replace(a,"$jc$.board.mathLibJXG."):o):o)):this.isMathMethod(t)?"$jc$.board.mathLib."+t:e?"":(type_default.isId(this.board,t)?(o="$jc$.board.objects['"+t+"']",this.board.objects[t].elType==="slider"&&(o+=".Value()")):type_default.isName(this.board,t)?(o="$jc$.board.elementsByName['"+t+"']",this.board.elementsByName[t].elType==="slider"&&(o+=".Value()")):type_default.isGroup(this.board,t)&&(o="$jc$.board.groups['"+t+"']"),o)))},makeMap:function(t){return t.isMap=!0,t},functionCodeJS:function(t){var e=t.children[0].join(", "),r="",s="";return t.value==="op_map"&&(r="{ return ",s=" }"),"function ("+e+`) {
59
+ var $oldscope$ = $jc$.scope;
60
+ $jc$.scope = $jc$.scopes[`+this.scope.id+`];
61
+ var r = (function () `+r+this.compile(t.children[1],!0)+s+`)();
62
+ $jc$.scope = $oldscope$;
63
+ return r;
64
+ }`},defineFunction:function(node){var fun,i,that=this,list=node.children[0],scope=this.pushScope(list);if(this.board.options.jc.compile){for(this.isLHS=!1,i=0;i<list.length;i++)scope.locals[list[i]]=list[i];this.replaceNames(node.children[1]),fun=(function(jc){var fun,str="var f = function($jc$) { return "+jc.functionCodeJS(node)+"}; f;";try{for(fun=eval(str)(jc),scope.argtypes=[],i=0;i<list.length;i++)scope.argtypes.push(that.resolveType(list[i],node));return fun}catch(t){return jc._warn(`error compiling function
65
+
66
+ `+str+`
67
+
68
+ `+t.toString()),function(){}}})(this),this.popScope()}else fun=(function(t,e,r){return function(){var s,o=e.scope;for(e.scope=e.scopes[r],s=0;s<t.length;s++)e.scope.locals[t[s]]=arguments[s];return s=e.execute(node.children[1]),e.scope=o,s}})(list,this,scope.id);return fun.node=node,fun.scope=scope,fun.toJS=fun.toString,fun.toString=(function(t){return function(){return t.compile(t.replaceIDs(type_default.deepCopy(node)))}})(this),fun.deps={},this.collectDependencies(node.children[1],node.children[0],fun.deps),fun},mergeAttributes:function(t){var e,r={};for(e=0;e<arguments.length;e++)r=type_default.deepCopy(r,arguments[e],!0);return r},setProp:function(t,e,r){var s={},o,a;t.elementClass===constants.OBJECT_CLASS_POINT&&(e==="X"||e==="Y")?(e=e.toLowerCase(),t.isDraggable&&typeof r=="number"?(o=e==="x"?r:t.X(),a=e==="y"?r:t.Y(),t.setPosition(constants.COORDS_BY_USER,[o,a])):t.isDraggable&&(typeof r=="function"||typeof r=="string")?(o=e==="x"?r:t.coords.usrCoords[1],a=e==="y"?r:t.coords.usrCoords[2],t.addConstraint([o,a])):t.isDraggable||(o=e==="x"?r:t.XEval.origin,a=e==="y"?r:t.YEval.origin,t.addConstraint([o,a])),this.board.update()):t.elementClass===constants.OBJECT_CLASS_TEXT&&(e==="X"||e==="Y")?(typeof r=="number"?t[e]=function(){return r}:typeof r=="function"?(t.isDraggable=!1,t[e]=r):typeof r=="string"&&(t.isDraggable=!1,t[e]=type_default.createFunction(r,this.board),t[e+"jc"]=r),t[e].origin=r,this.board.update()):t.type&&t.elementClass&&t.visProp?type_default.exists(t[t.methodMap[e]])&&typeof t[t.methodMap[e]]!="function"?t[t.methodMap[e]]=r:(s[e]=r,t.setAttribute(s)):t[e]=r},_genericParse:function(t,e,r){var s,o,a,n,l=t.replace(/\r\n/g,`
69
+ `).split(`
70
+ `),h=[];type_default.exists(r)||(r={}),r.dontstore||(this.code+=t+`
71
+ `),text_default&&(o=text_default.prototype.setText,text_default.prototype.setText=text_default.prototype.setTextJessieCode);try{for(s=0;s<l.length;s++)r.geonext&&(l[s]=jxg_default.GeonextParser.geonext2JS(l[s],this.board)),h.push(l[s]);switch(t=h.join(`
72
+ `),a=parser.parse(t),this.CA&&(a=this.CA.expandDerivatives(a,null,a),a=this.CA.removeTrivialNodes(a)),this.CAS&&(a=this.CAS.expandDerivatives(a,null,a)),e){case"parse":n=this.execute(a);break;case"manipulate":n=this.compile(a);break;case"simplify":type_default.exists(this.CAS)?(r.method=r.method||"strong",r.form=r.form||"fractions",r.steps=r.steps||[],r.iterations=r.iterations||1e3,a=this.CAS.simplify(a,r),n=this.CAS.compile(a)):n=this.compile(a);break;case"format":n=this.compile(a,!1,r);break;case"getAst":n=a;break;default:n=!1}}catch(d){throw d}finally{text_default&&(text_default.prototype.setText=o)}return n},parse:function(t,e,r){return this._genericParse(t,"parse",{geonext:e,dontstore:r})},manipulate:function(t,e,r){return this._genericParse(t,"manipulate",{geonext:e,dontstore:r})},simplify:function(t){return this._genericParse(t,"simplify")},format:function(t,e){return this._genericParse(t,"format",e)},getAST:function(t,e,r){return this._genericParse(t,"getAst",{geonext:e,dontstore:r})},snippet:function(t,e,r,s,o){var a;return e=type_default.def(e,!0),r=type_default.def(r,""),s=type_default.def(s,!1),this.forceValueCall=type_default.def(o,!0),a=(e?" function ("+r+") { return ":"")+t+(e?"; }":"")+";",this.parse(a,s,!0)},replaceIDs:function(t){var e,r;if(t.replaced&&(r=this.board.objects[t.children[1][0].value],type_default.exists(r)&&r.name!==""&&(t.type="node_var",t.value=r.name,t.children.length=0,delete t.replaced)),type_default.isArray(t))for(e=0;e<t.length;e++)t[e]=this.replaceIDs(t[e]);if(t.children)for(e=t.children.length;e>0;e--)type_default.exists(t.children[e-1])&&(t.children[e-1]=this.replaceIDs(t.children[e-1]));return t},replaceNames:function(t,e){var r,s,o=!1;if(e!==void 0&&(o=e),s=t.value,t.type==="node_op"&&s==="op_lhs"&&t.children.length===1?this.isLHS=!0:t.type==="node_var"&&(this.isLHS?this.letvar(s,!0):!type_default.exists(this.getvar(s,!0))&&type_default.exists(this.board.elementsByName[s])&&(o&&this.board.elementsByName[s].elType!=="slider"&&(o=!1),t=this.createReplacementNode(t,o))),type_default.isArray(t))for(r=0;r<t.length;r++)t[r]=this.replaceNames(t[r],o);if(t.children)for(this.forceValueCall&&(t.value==="op_execfun"&&t.children[0].value!=="V"&&t.children[0].value!=="$"&&(type_default.exists(Math[t.children[0].value])||type_default.exists(math_default[t.children[0].value]))&&t.children[1][0].type==="node_var"||t.value==="op_return"&&t.children.length===1&&t.children[0].type==="node_var")&&(o=!0),r=t.children.length;r>0;r--)type_default.exists(t.children[r-1])&&(t.children[r-1]=this.replaceNames(t.children[r-1],o));return t.type==="node_op"&&t.value==="op_lhs"&&t.children.length===1&&(this.isLHS=!1),t},createReplacementNode:function(t,e){var r=t.value,s=this.board.elementsByName[r];return t=this.createNode("node_op","op_execfun",this.createNode("node_var",e===!0?"$value":"$"),[this.createNode("node_str",s.id)]),t.replaced=!0,t},collectDependencies:function(t,e,r){var s,o,a,n;if(type_default.isArray(t)){for(n=t.length,s=0;s<n;s++)this.collectDependencies(t[s],e,r);return}if(o=t.value,t.type==="node_var"&&e.indexOf(o)<0&&(a=this.getvar(o),a&&a.visProp&&a.elType&&a.elementClass&&a.id&&(r[a.id]=a)),t.type==="node_op"&&t.value==="op_execfun"&&t.children.length>1&&(t.children[0].value==="$"||t.children[0].value==="$value")&&t.children[1].length>0&&(a=t.children[1][0].value,r[a]=this.board.objects[a]),t.children)for(s=t.children.length;s>0;s--)type_default.exists(t.children[s-1])&&this.collectDependencies(t.children[s-1],e,r)},resolveProperty:function(t,e,r){return r=type_default.def(r,!1),t&&t.methodMap&&(type_default.exists(t.subs)&&type_default.exists(t.subs[e])?t=t.subs:type_default.exists(t.methodMap[e])?e=t.methodMap[e]:(t=t.visProp,e=e.toLowerCase())),type_default.isFunction(t)&&this._error("Accessing function properties is not allowed."),type_default.exists(t)||this._error(t+" is not an object"),type_default.exists(t[e])||this._error("unknown property "+e),r&&typeof t[e]=="function"?function(){return t[e].apply(t,arguments)}:t[e]},resolveType:function(t,e){var r,s,o="any";if(type_default.isArray(e)){for(r=0;r<e.length;r++)if(s=this.resolveType(t,e[r]),s!=="any")return o=s,o}if(e.type==="node_op"&&e.value==="op_execfun"&&e.children[0].type==="node_var"&&e.children[0].value===t)return"function";if(e.type==="node_op"){for(r=0;r<e.children.length;r++)if(e.children[0].type==="node_var"&&e.children[0].value===t&&(e.value==="op_add"||e.value==="op_sub"||e.value==="op_mul"||e.value==="op_div"||e.value==="op_mod"||e.value==="op_exp"||e.value==="op_neg"))return"any";for(r=0;r<e.children.length;r++)if(s=this.resolveType(t,e.children[r]),s!=="any")return o=s,o}return"any"},getLHS:function(t){var e;if(t.type==="node_var")e={o:this.scope.locals,what:t.value};else if(t.type==="node_op"&&t.value==="op_property")e={o:this.execute(t.children[0]),what:t.children[1]};else if(t.type==="node_op"&&t.value==="op_extvalue")e={o:this.execute(t.children[0]),what:this.execute(t.children[1])};else throw new Error("Syntax error: Invalid left-hand side of assignment.");return e},getLHSCompiler:function(t,e){var r;if(t.type==="node_var")r=t.value;else if(t.type==="node_op"&&t.value==="op_property")r=[this.compile(t.children[0],e),"'"+t.children[1]+"'"];else if(t.type==="node_op"&&t.value==="op_extvalue")r=[this.compile(t.children[0],e),t.children[1].type==="node_const"?t.children[1].value:this.compile(t.children[1],e)];else throw new Error("Syntax error: Invalid left-hand side of assignment.");return r},execute:function(t){var e,r,s,o,a,n,l,h,d=[],u,c,p;if(e=0,!t)return e;switch(this.line=t.line,this.col=t.col,t.type){case"node_op":switch(t.value){case"op_none":t.children[0]&&this.execute(t.children[0]),t.children[1]&&(e=this.execute(t.children[1]));break;case"op_block":e=this.execute(t.children[0]);break;case"op_assign":r=this.getLHS(t.children[0]),this.lhs[this.scope.id]=r.what,r.o.type&&r.o.elementClass&&r.o.methodMap&&r.what==="label"&&this._error("Left-hand side of assignment is read-only."),e=this.execute(t.children[1]),r.o!==this.scope.locals||type_default.isArray(r.o)&&typeof r.what=="number"?this.setProp(r.o,r.what,e):this.letvar(r.what,e),this.lhs[this.scope.id]=0;break;case"op_if":this.execute(t.children[0])&&(e=this.execute(t.children[1]));break;case"op_conditional":case"op_if_else":this.execute(t.children[0])?e=this.execute(t.children[1]):e=this.execute(t.children[2]);break;case"op_while":for(;this.execute(t.children[0]);)this.execute(t.children[1]);break;case"op_do":do this.execute(t.children[0]);while(this.execute(t.children[1]));break;case"op_for":for(this.execute(t.children[0]);this.execute(t.children[1]);this.execute(t.children[2]))this.execute(t.children[3]);break;case"op_proplst":t.children[0]&&this.execute(t.children[0]),t.children[1]&&this.execute(t.children[1]);break;case"op_emptyobject":e={};break;case"op_proplst_val":this.propstack.push({}),this.propscope++,this.execute(t.children[0]),e=this.propstack[this.propscope],this.propstack.pop(),this.propscope--;break;case"op_prop":this.propstack[this.propscope][t.children[0]]=this.execute(t.children[1]);break;case"op_array":for(e=[],a=t.children[0].length,s=0;s<a;s++)e.push(this.execute(t.children[0][s]));break;case"op_extvalue":e=this.execute(t.children[0]),s=this.execute(t.children[1]),typeof s=="number"&&Math.abs(Math.round(s)-s)<1e-12?e=e[s]:e=n;break;case"op_return":if(this.scope===0)this._error("Unexpected return.");else return this.execute(t.children[0]);break;case"op_map":!t.children[1].isMath&&t.children[1].type!=="node_var"&&this._error("execute: In a map only function calls and mathematical expressions are allowed."),u=this.defineFunction(t),u.isMap=!0,e=u;break;case"op_function":u=this.defineFunction(t),u.isMap=!1,e=u;break;case"op_execfun":if(this.dpstack.push([]),this.pscope++,l=t.children[1],type_default.exists(t.children[2]))if(t.children[3])for(h=t.children[2],c={},s=0;s<h.length;s++)c=type_default.deepCopy(c,this.execute(h[s]),!0);else c=this.execute(t.children[2]);for(t.children[0]._isFunctionName=!0,u=this.execute(t.children[0]),delete t.children[0]._isFunctionName,type_default.exists(u)&&type_default.exists(u.sc)?p=u.sc:p=this,!u.creator&&type_default.exists(t.children[2])&&this._error("Unexpected value. Only element creators are allowed to have a value after the function call."),s=0;s<l.length;s++)type_default.exists(u.scope)&&type_default.exists(u.scope.argtypes)&&u.scope.argtypes[s]==="function"?(l[s]._isFunctionName=!0,d[s]=this.execute(l[s]),delete l[s]._isFunctionName):d[s]=this.execute(l[s]),this.dpstack[this.pscope].push({line:t.children[1][s].line,col:t.children[1][s].ecol});if(typeof u=="function"&&!u.creator)e=u.apply(p,d);else if(typeof u=="function"&&u.creator){o=this.line;try{for(e=u(d,c),e.jcLineStart=o,e.jcLineEnd=t.eline,s=o;s<=t.line;s++)this.lineToElement[s]=e;e.debugParents=this.dpstack[this.pscope]}catch(f){this._error(f.toString())}}else this._error("Function '"+u+"' is undefined.");this.dpstack.pop(),this.pscope--;break;case"op_property":o=this.execute(t.children[0]),r=t.children[1],e=this.resolveProperty(o,r,!1),type_default.exists(e)&&["number","string","boolean"].indexOf(typeof e)<0&&(e.sc=o);break;case"op_use":this._warn("Use of the 'use' operator is deprecated."),this.use(t.children[0].toString());break;case"op_delete":this._warn("Use of the 'delete' operator is deprecated. Please use the remove() function."),r=this.getvar(t.children[0]),e=this.del(r);break;case"op_eq":e=this.execute(t.children[0])==this.execute(t.children[1]);break;case"op_neq":e=this.execute(t.children[0])!=this.execute(t.children[1]);break;case"op_approx":e=Math.abs(this.execute(t.children[0])-this.execute(t.children[1]))<math_default.eps;break;case"op_gt":e=this.execute(t.children[0])>this.execute(t.children[1]);break;case"op_lt":e=this.execute(t.children[0])<this.execute(t.children[1]);break;case"op_geq":e=this.execute(t.children[0])>=this.execute(t.children[1]);break;case"op_leq":e=this.execute(t.children[0])<=this.execute(t.children[1]);break;case"op_or":e=this.execute(t.children[0])||this.execute(t.children[1]);break;case"op_and":e=this.execute(t.children[0])&&this.execute(t.children[1]);break;case"op_not":e=!this.execute(t.children[0]);break;case"op_add":e=this.add(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_sub":e=this.sub(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_div":e=this.div(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_mod":e=this.mod(this.execute(t.children[0]),this.execute(t.children[1]),!0);break;case"op_mul":e=this.mul(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_exp":e=this.pow(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_neg":e=this.neg(this.execute(t.children[0]))}break;case"node_var":e=this.getvar(t.value,!1,t._isFunctionName);break;case"node_const":t.value===null?e=null:e=Number(t.value);break;case"node_const_bool":e=t.value;break;case"node_str":e=t.value.replace(/\\(.)/g,"$1")}return e},compile:function(t,e,r){var s=this;type_default.exists(e)||(e=!1),(!type_default.exists(r)||!type_default.isObject(r))&&(r={}),r=type_default.deepCopy({minParentheses:!1,constToFixed:!1,printable:!1},r);function o(n){switch(n.type){case"node_const":case"node_const_bool":case"node_str":case"node_var":return 10;case"node_op":switch(n.value){case"op_none":return 0;case"op_assign":return 1;case"op_map":case"op_function":case"op_return":return 2;case"op_add":case"op_sub":return 3;case"op_mul":case"op_div":case"op_mod":return 5;case"op_neg":return 4;case"op_exp":return 6;case"op_array":case"op_execfun":return 7;default:return 0}default:return 0}}function a(n,l,h=-1){var d,u,c,p,f,_,g,m="";if(!n)return m;switch(n.type){case"node_op":switch(n.value){case"op_none":n.children[0]&&(m=a(n.children[0],"op_none")),n.children[1]&&(m+=a(n.children[1],"op_none"));break;case"op_block":m=`{
73
+ `+a(n.children[0],"op_block")+` }
74
+ `;break;case"op_assign":e?(d=s.getLHSCompiler(n.children[0],e),type_default.isArray(d)?m="$jc$.setProp("+d[0]+", "+d[1]+", "+a(n.children[1],"op_assign")+`);
75
+ `:(s.isLocalVariable(d)!==s.scope&&(s.scope.locals[d]=!0),m="$jc$.scopes["+s.scope.id+"].locals['"+d+"'] = "+a(n.children[1],"op_assign")+`;
76
+ `)):(d=a(n.children[0],"op_assign"),m=d+" = "+a(n.children[1],"op_assign")+`;
77
+ `);break;case"op_if":m=" if ("+a(n.children[0],"op_if")+") "+a(n.children[1],"op_if");break;case"op_if_else":m=" if ("+a(n.children[0],"op_if_else")+")"+a(n.children[1],"op_if_else"),m+=" else "+a(n.children[2],"op_if_else");break;case"op_conditional":m="(("+a(n.children[0],"op_conditional")+")?("+a(n.children[1],"op_conditional"),m+="):("+a(n.children[2],"op_conditional")+"))";break;case"op_while":m=" while ("+a(n.children[0],"op_while")+`) {
78
+ `+a(n.children[1],"op_while")+`}
79
+ `;break;case"op_do":m=` do {
80
+ `+a(n.children[0],"op_do")+"} while ("+a(n.children[1],"op_do")+`);
81
+ `;break;case"op_for":m=" for ("+a(n.children[0],"op_for")+a(n.children[1],"op_for")+"; "+a(n.children[2],"op_for").slice(0,-2)+`) {
82
+ `+a(n.children[3],"op_for")+`
83
+ }
84
+ `;break;case"op_proplst":n.children[0]&&(m=a(n.children[0],"op_proplst")+", "),m+=a(n.children[1],"op_proplst");break;case"op_prop":m=n.children[0]+": "+a(n.children[1],"op_prop");break;case"op_emptyobject":m=e?"{}":"<< >>";break;case"op_proplst_val":m=a(n.children[0],"op_proplst_val");break;case"op_array":for(p=[],u=0;u<n.children[0].length;u++)p.push(a(n.children[0][u],"op_array"));m="["+p.join(", ")+"]";break;case"op_extvalue":m=a(n.children[0],"op_extvalue")+"["+a(n.children[1],"op_extvalue")+"]";break;case"op_return":m=" return "+a(n.children[0],"op_return")+`;
85
+ `;break;case"op_map":!n.children[1].isMath&&n.children[1].type!=="node_var"&&s._error("compile: In a map only function calls and mathematical expressions are allowed."),p=n.children[0],e?m=" $jc$.makeMap(function ("+p.join(", ")+") { return "+a(n.children[1],"op_map")+"; })":m="map ("+p.join(", ")+") -> "+a(n.children[1],"op_map");break;case"op_function":p=n.children[0],s.pushScope(p),e?m=s.functionCodeJS(n):m=" function ("+p.join(", ")+") "+a(n.children[1],"op_function"),s.popScope();break;case"op_execfunmath":console.log("op_execfunmath: TODO"),m="-1";break;case"op_execfun":if(n.children[2]){for(p=[],u=0;u<n.children[2].length;u++)p.push(a(n.children[2][u],"op_execfun"));e?d="$jc$.mergeAttributes("+p.join(", ")+")":d=p.join(", ")}for(n.children[0].withProps=!!n.children[2],p=[],u=0;u<n.children[1].length;u++)p.push(a(n.children[1][u],"op_execfun"));m=a(n.children[0],"op_execfun")+"("+p.join(", ")+(n.children[2]&&e?", "+d:"")+")"+(n.children[2]&&!e?" "+d:""),e&&(m+=`
86
+ `),e&&n.children[0].value==="$"&&(m="$jc$.board.objects["+a(n.children[1][0],"op_execfun")+"]");break;case"op_property":e&&n.children[1]!=="X"&&n.children[1]!=="Y"?m="$jc$.resolveProperty("+a(n.children[0],"op_property")+", '"+n.children[1]+"', true)":m=a(n.children[0],"op_property")+"."+n.children[1];break;case"op_use":s._warn("Use of the 'use' operator is deprecated."),e?m="$jc$.use('":m="use('",m+=n.children[0].toString()+"');";break;case"op_delete":s._warn("Use of the 'delete' operator is deprecated. Please use the remove() function."),e?m="$jc$.del(":m="remove(",m+=a(n.children[0],"op_delete")+")";break;case"op_eq":m="("+a(n.children[0],"op_eq")+" === "+a(n.children[1],"op_eq")+")";break;case"op_neq":m="("+a(n.children[0],"op_neq")+" !== "+a(n.children[1],"op_neq")+")";break;case"op_approx":m="("+a(n.children[0],"op_approx")+" ~= "+a(n.children[1],"op_approx")+")";break;case"op_gt":e?m="$jc$.gt("+a(n.children[0],"op_gt")+", "+a(n.children[1],"op_gt")+")":m="("+a(n.children[0],"op_gt")+" > "+a(n.children[1],"op_gt")+")";break;case"op_lt":e?m="$jc$.lt("+a(n.children[0],"op_lt")+", "+a(n.children[1],"op_lt")+")":m="("+a(n.children[0],"op_lt")+" < "+a(n.children[1],"op_lt")+")";break;case"op_geq":e?m="$jc$.geq("+a(n.children[0],"op_geq")+", "+a(n.children[1],"op_geq")+")":m="("+a(n.children[0],"op_geq")+" >= "+a(n.children[1],"op_geq")+")";break;case"op_leq":e?m="$jc$.leq("+a(n.children[0],"op_leq")+", "+a(n.children[1],"op_leq")+")":m="("+a(n.children[0],"op_leq")+" <= "+a(n.children[1],"op_leq")+")";break;case"op_or":m="("+a(n.children[0],"op_or")+" || "+a(n.children[1],"op_or")+")";break;case"op_and":m="("+a(n.children[0],"op_and")+" && "+a(n.children[1],"op_and")+")";break;case"op_not":m="!("+a(n.children[0],"op_not")+")";break;case"op_add":e?m="$jc$.add("+a(n.children[0],"op_add")+", "+a(n.children[1],"op_add")+")":r.minParentheses?(_=o(n),d=a(n.children[0],"op_add"),g=o(n.children[0]),m=_>g?"("+d+")":d,m+=" + ",d=a(n.children[1],"op_add"),g=o(n.children[1]),m+=_>g?"("+d+")":d):m="("+a(n.children[0],"op_add")+" + "+a(n.children[1],"op_add")+")";break;case"op_sub":e?m="$jc$.sub("+a(n.children[0],"op_sub")+", "+a(n.children[1],"op_sub")+")":r.minParentheses?(_=o(n),d=a(n.children[0],"op_sub"),g=o(n.children[0]),m=_>g?"("+d+")":d,m+=" - ",d=a(n.children[1],"op_sub"),g=o(n.children[1]),m+=_>=g?"("+d+")":d):m="("+a(n.children[0],"op_sub")+" - "+a(n.children[1],"op_sub")+")";break;case"op_div":e?m="$jc$.div("+a(n.children[0],"op_div")+", "+a(n.children[1],"op_div")+")":r.minParentheses?(_=o(n),d=a(n.children[0],"op_div"),g=o(n.children[0]),m=_>g?"("+d+")":d,m+=" / ",d=a(n.children[1],"op_div"),g=o(n.children[1]),m+=_>=g?"("+d+")":d):m="("+a(n.children[0],"op_div")+" / "+a(n.children[1],"op_div")+")";break;case"op_mod":e?m="$jc$.mod("+a(n.children[0],"op_mod")+", "+a(n.children[1],"op_mod")+", true)":r.minParentheses?(_=o(n),d=a(n.children[0],"op_mod"),g=o(n.children[0]),m=_>g?"("+d+")":d,m+=" % ",d=a(n.children[1],"op_mod"),g=o(n.children[1]),m+=_>=g?"("+d+")":d):m="("+a(n.children[0],"op_mod")+" % "+a(n.children[1],"op_mod")+")";break;case"op_mul":e?m="$jc$.mul("+a(n.children[0],"op_mul")+", "+a(n.children[1],"op_mul")+")":r.minParentheses?(_=o(n),d=a(n.children[0],"op_mul"),g=o(n.children[0]),m=_>g?"("+d+")":d,m+=" * ",d=a(n.children[1],"op_mul"),g=o(n.children[1]),m+=_>g?"("+d+")":d):m="("+a(n.children[0],"op_mul")+" * "+a(n.children[1],"op_mul")+")";break;case"op_exp":e?m="$jc$.pow("+a(n.children[0],"op_exp",0)+", "+a(n.children[1],"op_exp",1)+")":r.minParentheses?(_=o(n),d=a(n.children[0],"op_exp",0),g=o(n.children[0]),m=_>=g?"("+d+")":d,m+="^",d=a(n.children[1],"op_exp",1),g=o(n.children[1]),m+=_>g&&!(r.printable&&d[0]==="{"&&d[d.length-1]==="}")?"("+d+")":d):m="("+a(n.children[0],"op_exp",0)+"^"+a(n.children[1],"op_exp",1)+")";break;case"op_neg":e?m="$jc$.neg("+a(n.children[0],"op_neg")+")":r.minParentheses?(_=o(n),g=o(n.children[0]),d=a(n.children[0],"op_neg"),_>=g?m="-("+d+")":m="-"+d):m="(-"+a(n.children[0],"op_neg")+")"}break;case"node_var":e?m=s.getvarJS(n.value,!1,n.withProps):m=n.value;break;case"node_const":if(e){m=n.value;break}c=n.value,r.constToFixed!==!1&&type_default.isNumber(c)&&(l!=="op_exp"||h!==1)&&(c=parseFloat(c),type_default.isNumber(r.constToFixed)?c=type_default.toFixed(c,r.constToFixed):type_default.isFunction(r.constToFixed)?c=r.constToFixed(c):c=n.value),r.minParentheses&&parseFloat(c)<0&&l!=="op_execfun"&&h!==0?m="("+c+")":m=c;break;case"node_const_bool":m=n.value;break;case"node_str":m="'"+n.value+"'"}return n.needsAngleBrackets&&(e?m=`{
87
+ `+m+` }
88
+ `:m="<< "+m+` >>
89
+ `),r.printable&&l==="op_exp"&&h===1&&(m="{"+m+"}"),r.printable&&type_default.isString(m)&&(m=m.replaceAll(`
90
+ `,"")),m}return a(t,"")},getName:function(t,e){var r="";return type_default.exists(t)&&type_default.exists(t.getName)?(r=t.getName(),(!type_default.exists(r)||r==="")&&e&&(r=t.id)):e&&(r=t.id),r},X:function(t){return t.X()},Y:function(t){return t.Y()},V:function(t){return t.Value()},L:function(t){return t.L()},area:function(t){return(!type_default.exists(t)||!type_default.exists(t.Area))&&this._error("Error: Can't calculate area."),t.Area()},perimeter:function(t){return(!type_default.exists(t)||!type_default.exists(t.Perimeter))&&this._error("Error: Can't calculate perimeter."),t.Perimeter()},dist:function(t,e){return(!type_default.exists(t)||!type_default.exists(t.Dist))&&this._error("Error: Can't calculate distance."),t.Dist(e)},radius:function(t){return(!type_default.exists(t)||!type_default.exists(t.Radius))&&this._error("Error: Can't calculate radius."),t.Radius()},slope:function(t){return(!type_default.exists(t)||!type_default.exists(t.Slope))&&this._error("Error: Can't calculate slope."),t.Slope()},add:function(t,e){var r,s,o;if(t=type_default.evalSlider(t),e=type_default.evalSlider(e),ia_default.isInterval(t)||ia_default.isInterval(e))o=ia_default.add(t,e);else if(type_default.isArray(t)&&type_default.isArray(e))for(s=Math.min(t.length,e.length),o=[],r=0;r<s;r++)o[r]=t[r]+e[r];else type_default.isNumber(t)&&type_default.isNumber(e)?o=t+e:type_default.isString(t)||type_default.isString(e)?o=t.toString()+e.toString():this._error("Operation + not defined on operands "+typeof t+" and "+typeof e);return o},sub:function(t,e){var r,s,o;if(t=type_default.evalSlider(t),e=type_default.evalSlider(e),ia_default.isInterval(t)||ia_default.isInterval(e))o=ia_default.sub(t,e);else if(type_default.isArray(t)&&type_default.isArray(e))for(s=Math.min(t.length,e.length),o=[],r=0;r<s;r++)o[r]=t[r]-e[r];else type_default.isNumber(t)&&type_default.isNumber(e)?o=t-e:this._error("Operation - not defined on operands "+typeof t+" and "+typeof e);return o},neg:function(t){var e,r,s;if(t=type_default.evalSlider(t),ia_default.isInterval(t))s=ia_default.negative(t);else if(type_default.isArray(t))for(r=t.length,s=[],e=0;e<r;e++)s[e]=-t[e];else type_default.isNumber(t)?s=-t:this._error("Unary operation - not defined on operand "+typeof t);return s},mul:function(t,e){var r,s,o;if(t=type_default.evalSlider(t),e=type_default.evalSlider(e),type_default.isArray(t)&&type_default.isNumber(e)&&(r=t,t=e,e=t),ia_default.isInterval(t)||ia_default.isInterval(e))o=ia_default.mul(t,e);else if(type_default.isArray(t)&&type_default.isArray(e))s=Math.min(t.length,e.length),o=math_default.innerProduct(t,e,s);else if(type_default.isNumber(t)&&type_default.isArray(e))for(s=e.length,o=[],r=0;r<s;r++)o[r]=t*e[r];else type_default.isNumber(t)&&type_default.isNumber(e)?o=t*e:this._error("Operation * not defined on operands "+typeof t+" and "+typeof e);return o},div:function(t,e){var r,s,o;if(t=type_default.evalSlider(t),e=type_default.evalSlider(e),ia_default.isInterval(t)||ia_default.isInterval(e))o=ia_default.div(t,e);else if(type_default.isArray(t)&&type_default.isNumber(e))for(s=t.length,o=[],r=0;r<s;r++)o[r]=t[r]/e;else type_default.isNumber(t)&&type_default.isNumber(e)?o=t/e:this._error("Operation * not defined on operands "+typeof t+" and "+typeof e);return o},mod:function(t,e){var r,s,o;if(t=type_default.evalSlider(t),e=type_default.evalSlider(e),ia_default.isInterval(t)||ia_default.isInterval(e))return ia_default.fmod(t,e);if(type_default.isArray(t)&&type_default.isNumber(e))for(s=t.length,o=[],r=0;r<s;r++)o[r]=math_default.mod(t[r],e,!0);else type_default.isNumber(t)&&type_default.isNumber(e)?o=math_default.mod(t,e,!0):this._error("Operation * not defined on operands "+typeof t+" and "+typeof e);return o},pow:function(t,e){return t=type_default.evalSlider(t),e=type_default.evalSlider(e),ia_default.isInterval(t)||ia_default.isInterval(e)?ia_default.pow(t,e):math_default.pow(t,e)},lt:function(t,e){return ia_default.isInterval(t)||ia_default.isInterval(e)?ia_default.lt(t,e):t<e},leq:function(t,e){return ia_default.isInterval(t)||ia_default.isInterval(e)?ia_default.leq(t,e):t<=e},gt:function(t,e){return ia_default.isInterval(t)||ia_default.isInterval(e)?ia_default.gt(t,e):t>e},geq:function(t,e){return ia_default.isInterval(t)||ia_default.isInterval(e)?ia_default.geq(t,e):t>=e},randint:function(t,e,r){return type_default.exists(r)||(r=1),Math.round(Math.random()*(e-t)/r)*r+t},DDD:function(t){console.log("Dummy derivative function. This should never appear!")},ifthen:function(t,e,r){return t?e:r},del:function(t){typeof t=="object"&&jxg_default.exists(t.type)&&jxg_default.exists(t.elementClass)&&this.board.removeObject(t)},eval:function(t){return jxg_default.evaluate(t)},use:function(t){var e,r,s=!1;if(typeof t=="string"){for(e in jxg_default.boards)if(jxg_default.boards.hasOwnProperty(e)&&jxg_default.boards[e].container===t){r=jxg_default.boards[e],s=!0;break}}else r=t,s=!0;s?(this.board=r,this.builtIn.$board=r,this.builtIn.$board.src="$jc$.board"):this._error("Board '"+t+"' not found!")},findSymbol:function(t,e){var r,s;for(e=type_default.def(e,-1),e===-1?s=this.scope:s=this.scopes[e];s!==null;){for(r in s.locals)if(s.locals.hasOwnProperty(r)&&s.locals[r]===t)return[r,s];s=s.previous}return[]},importModule:function(t){return priv$4.modules[t.toLowerCase()]},defineBuiltIn:function(){var t=this,e={PI:Math.PI,EULER:Math.E,D:t.DDD,X:t.X,Y:t.Y,V:t.V,Value:t.V,L:t.L,Length:t.L,acosh:math_default.acosh,acot:math_default.acot,asinh:math_default.asinh,binomial:math_default.binomial,cbrt:math_default.cbrt,cosh:math_default.cosh,cot:math_default.cot,deg:geometry_default.trueAngle,A:t.area,area:t.area,Area:t.area,perimeter:t.perimeter,Perimeter:t.perimeter,dist:t.dist,Dist:t.dist,R:t.radius,radius:t.radius,Radius:t.radius,erf:math_default.erf,erfc:math_default.erfc,erfi:math_default.erfi,factorial:math_default.factorial,gcd:math_default.gcd,lb:math_default.log2,lcm:math_default.lcm,ld:math_default.log2,lg:math_default.log10,ln:Math.log,log:math_default.log,log10:math_default.log10,log2:math_default.log2,ndtr:math_default.ndtr,ndtri:math_default.ndtri,nthroot:math_default.nthroot,pow:math_default.pow,rad:geometry_default.rad,ratpow:math_default.ratpow,trunc:type_default.trunc,sinh:math_default.sinh,slope:t.slope,Slope:t.slope,randint:t.randint,IfThen:t.ifthen,import:t.importModule,eval:t.eval,use:t.use,remove:t.del,$:t.getElementById,$value:function(r){return t.getElementById(r).Value()},getName:t.getName,name:t.getName,$board:t.board,$log:t.log};return e.rad.sc=geometry_default,e.deg.sc=geometry_default,e.factorial.sc=math_default,e.X.src="$jc$.X",e.Y.src="$jc$.Y",e.V.src="$jc$.V",e.Value.src="$jc$.V",e.L.src="$jc$.L",e.Length.src="$jc$.L",e.acosh.src="JXG.Math.acosh",e.acot.src="JXG.Math.acot",e.asinh.src="JXG.Math.asinh",e.binomial.src="JXG.Math.binomial",e.cbrt.src="JXG.Math.cbrt",e.cot.src="JXG.Math.cot",e.cosh.src="JXG.Math.cosh",e.deg.src="JXG.Math.Geometry.trueAngle",e.erf.src="JXG.Math.erf",e.erfc.src="JXG.Math.erfc",e.erfi.src="JXG.Math.erfi",e.A.src="$jc$.area",e.area.src="$jc$.area",e.Area.src="$jc$.area",e.perimeter.src="$jc$.perimeter",e.Perimeter.src="$jc$.perimeter",e.dist.src="$jc$.dist",e.Dist.src="$jc$.dist",e.R.src="$jc$.radius",e.radius.src="$jc$.radius",e.Radius.src="$jc$.radius",e.factorial.src="JXG.Math.factorial",e.gcd.src="JXG.Math.gcd",e.lb.src="JXG.Math.log2",e.lcm.src="JXG.Math.lcm",e.ld.src="JXG.Math.log2",e.lg.src="JXG.Math.log10",e.ln.src="Math.log",e.log.src="JXG.Math.log",e.log10.src="JXG.Math.log10",e.log2.src="JXG.Math.log2",e.ndtr.src="JXG.Math.ndtr",e.ndtri.src="JXG.Math.ndtri",e.nthroot.src="JXG.Math.nthroot",e.pow.src="JXG.Math.pow",e.rad.src="JXG.Math.Geometry.rad",e.ratpow.src="JXG.Math.ratpow",e.trunc.src="JXG.trunc",e.sinh.src="JXG.Math.sinh",e.slope.src="$jc$.slope",e.Slope.src="$jc$.slope",e.randint.src="$jc$.randint",e.import.src="$jc$.importModule",e.eval.src="$jc$.eval",e.use.src="$jc$.use",e.remove.src="$jc$.del",e.IfThen.src="$jc$.ifthen",e.$.src="(function (n) { return $jc$.board.select(n); })",e.$value.src="(function (n) { return $jc$.board.select(n).Value(); })",e.getName.src="$jc$.getName",e.name.src="$jc$.getName",e.$board&&(e.$board.src="$jc$.board"),e.$log.src="$jc$.log",e=jxg_default.merge(e,t._addedBuiltIn),e},_addedBuiltIn:{},addBuiltIn:function(t,e){if(type_default.exists(this.builtIn)){if(type_default.exists(this.builtIn[t]))return;this.builtIn[t]=e,this.builtIn[t].src="$jc$."+t}type_default.exists(this._addedBuiltIn[t])||(this._addedBuiltIn[t]=e,this._addedBuiltIn[t].src="$jc$."+t,jxg_default.JessieCode.prototype[t]=e)},getPossibleOperands:function(){var t=["E"],e=this.builtIn||this.defineBuiltIn(),r=Math,s,o,a,n,l,h,d,u,c,p,f,_,g=function(b,C){return b.toLowerCase().localeCompare(C.toLowerCase())},m=function(b,C){var y=null;if(C==="jc")y=e[b];else if(C==="Math")y=r[b];else return;if(!(t.indexOf(b)>=0)){if(jxg_default.isFunction(y))return{name:b,type:"function",numParams:y.length,origin:C};if(jxg_default.isNumber(y))return{name:b,type:"constant",value:y,origin:C};b.startsWith("$")||y!==void 0&&console.error("undefined type",y)}};for(s=Object.getOwnPropertyNames(e).sort(g),o=Object.getOwnPropertyNames(r).sort(g),a=[],n=0,l=0;n<s.length||l<o.length;)s[n]===o[l]?(h=m(o[l],"Math"),jxg_default.exists(h)&&a.push(h),n++,l++):!jxg_default.exists(o[l])||s[n].toLowerCase().localeCompare(o[l].toLowerCase())<0?(h=m(s[n],"jc"),jxg_default.exists(h)&&a.push(h),n++):(h=m(o[l],"Math"),jxg_default.exists(h)&&a.push(h),l++);for(c=[],p=[],f=[],_={},d=a.length,n=0;n<d;n++){switch(u=a[n],u.type){case"function":c.push(u.name),u.origin==="jc"&&p.push(u.name);break;case"constant":f.push(u.name)}_[u.name]=u}return{all:_,list:a,functions:c,functions_jessiecode:p,constants:f}},_debug:function(t){typeof console=="object"&&console.log?console.log(t):env_default.isBrowser&&document&&document.getElementById("debug")!==null&&(document.getElementById("debug").innerText+=t+`
91
+ `)},_error:function(t){var e=new Error("Error("+this.line+"): "+t);throw e.line=this.line,e},_warn:function(t){typeof console=="object"&&console.log?console.log("Warning("+this.line+"): "+t):env_default.isBrowser&&document&&document.getElementById(this.warnLog)!==null&&(document.getElementById(this.warnLog).innerText+="Warning("+this.line+"): "+t+`
92
+ `)},_log:function(t){typeof window!="object"&&typeof self=="object"&&self.postMessage?self.postMessage({type:"log",msg:"Log: "+t.toString()}):console.log("Log: ",arguments)}});var parser=(function(){var t=function(z,Q,Z,at){for(Z=Z||{},at=z.length;at--;Z[z[at]]=Q);return Z},e=[2,14],r=[1,13],s=[1,37],o=[1,14],a=[1,15],n=[1,21],l=[1,16],h=[1,17],d=[1,33],u=[1,18],c=[1,19],p=[1,12],f=[1,59],_=[1,60],g=[1,58],m=[1,46],b=[1,48],C=[1,49],y=[1,50],x=[1,51],v=[1,52],P=[1,53],E=[1,54],w=[1,45],O=[1,38],S=[1,39],M=[5,7,8,14,15,16,17,19,20,21,23,26,27,50,51,58,65,74,75,76,77,78,79,80,82,91,93],N=[5,7,8,12,14,15,16,17,19,20,21,23,26,27,50,51,58,65,74,75,76,77,78,79,80,82,91,93],j=[8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,83,86],k=[2,48],B=[1,72],I=[10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,66,83,86],X=[1,78],J=[8,10,16,32,34,35,37,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,83,86],Y=[1,82],F=[8,10,16,32,34,35,37,39,45,46,47,48,50,51,53,54,55,57,64,65,66,83,86],D=[1,83],A=[1,84],T=[1,85],U=[8,10,16,32,34,35,37,39,41,42,43,50,51,53,54,55,57,64,65,66,83,86],V=[1,89],K=[1,90],H=[1,91],G=[1,92],tt=[1,97],st=[8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,53,54,55,57,64,65,66,83,86],it=[1,103],et=[1,104],lt=[8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,57,64,65,66,83,86],nt=[1,105],ot=[1,106],dt=[1,107],ft=[1,126],ut=[1,139],Ct=[83,86],yt=[1,150],xt=[10,66,86],Pt=[8,10,16,20,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,82,83,86],wt=[1,167],Ot=[10,86],gt={trace:function(){},yy:{},symbols_:{error:2,Program:3,StatementList:4,EOF:5,IfStatement:6,IF:7,"(":8,Expression:9,")":10,Statement:11,ELSE:12,LoopStatement:13,WHILE:14,FOR:15,";":16,DO:17,UnaryStatement:18,USE:19,IDENTIFIER:20,DELETE:21,ReturnStatement:22,RETURN:23,EmptyStatement:24,StatementBlock:25,"{":26,"}":27,ExpressionStatement:28,AssignmentExpression:29,ConditionalExpression:30,LeftHandSideExpression:31,"=":32,LogicalORExpression:33,"?":34,":":35,LogicalANDExpression:36,"||":37,EqualityExpression:38,"&&":39,RelationalExpression:40,"==":41,"!=":42,"~=":43,AdditiveExpression:44,"<":45,">":46,"<=":47,">=":48,MultiplicativeExpression:49,"+":50,"-":51,UnaryExpression:52,"*":53,"/":54,"%":55,ExponentExpression:56,"^":57,"!":58,MemberExpression:59,CallExpression:60,PrimaryExpression:61,FunctionExpression:62,MapExpression:63,".":64,"[":65,"]":66,BasicLiteral:67,ObjectLiteral:68,ArrayLiteral:69,NullLiteral:70,BooleanLiteral:71,StringLiteral:72,NumberLiteral:73,NULL:74,TRUE:75,FALSE:76,STRING:77,NUMBER:78,NAN:79,INFINITY:80,ElementList:81,"<<":82,">>":83,PropertyList:84,Property:85,",":86,PropertyName:87,Arguments:88,AttributeList:89,Attribute:90,FUNCTION:91,ParameterDefinitionList:92,MAP:93,"->":94,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",7:"IF",8:"(",10:")",12:"ELSE",14:"WHILE",15:"FOR",16:";",17:"DO",19:"USE",20:"IDENTIFIER",21:"DELETE",23:"RETURN",26:"{",27:"}",32:"=",34:"?",35:":",37:"||",39:"&&",41:"==",42:"!=",43:"~=",45:"<",46:">",47:"<=",48:">=",50:"+",51:"-",53:"*",54:"/",55:"%",57:"^",58:"!",64:".",65:"[",66:"]",74:"NULL",75:"TRUE",76:"FALSE",77:"STRING",78:"NUMBER",79:"NAN",80:"INFINITY",82:"<<",83:">>",86:",",91:"FUNCTION",93:"MAP",94:"->"},productions_:[0,[3,2],[6,5],[6,7],[13,5],[13,9],[13,7],[18,2],[18,2],[22,2],[22,3],[24,1],[25,3],[4,2],[4,0],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[28,2],[9,1],[29,1],[29,3],[30,1],[30,5],[33,1],[33,3],[36,1],[36,3],[38,1],[38,3],[38,3],[38,3],[40,1],[40,3],[40,3],[40,3],[40,3],[44,1],[44,3],[44,3],[49,1],[49,3],[49,3],[49,3],[56,1],[56,3],[52,1],[52,2],[52,2],[52,2],[31,1],[31,1],[59,1],[59,1],[59,1],[59,3],[59,4],[61,1],[61,1],[61,1],[61,1],[61,3],[67,1],[67,1],[67,1],[67,1],[70,1],[71,1],[71,1],[72,1],[73,1],[73,1],[73,1],[69,2],[69,3],[68,2],[68,3],[84,1],[84,3],[85,3],[87,1],[87,1],[87,1],[60,2],[60,3],[60,2],[60,4],[60,3],[88,2],[88,3],[89,1],[89,3],[90,1],[90,1],[81,1],[81,3],[62,4],[62,5],[63,5],[63,6],[92,1],[92,3]],performAction:function(z,Q,Z,at,rt,R,W){var L=R.length-1;switch(rt){case 1:return R[L-1];case 2:this.$=$.createNode(q(W[L-4]),"node_op","op_if",R[L-2],R[L]);break;case 3:this.$=$.createNode(q(W[L-6]),"node_op","op_if_else",R[L-4],R[L-2],R[L]);break;case 4:this.$=$.createNode(q(W[L-4]),"node_op","op_while",R[L-2],R[L]);break;case 5:this.$=$.createNode(q(W[L-8]),"node_op","op_for",R[L-6],R[L-4],R[L-2],R[L]);break;case 6:this.$=$.createNode(q(W[L-6]),"node_op","op_do",R[L-5],R[L-2]);break;case 7:this.$=$.createNode(q(W[L-1]),"node_op","op_use",R[L]);break;case 8:this.$=$.createNode(q(W[L-1]),"node_op","op_delete",R[L]);break;case 9:this.$=$.createNode(q(W[L-1]),"node_op","op_return",void 0);break;case 10:this.$=$.createNode(q(W[L-2]),"node_op","op_return",R[L-1]);break;case 11:case 14:this.$=$.createNode(q(W[L]),"node_op","op_none");break;case 12:this.$=$.createNode(q(W[L-2]),"node_op","op_block",R[L-1]);break;case 13:this.$=$.createNode(q(W[L-1]),"node_op","op_none",R[L-1],R[L]);break;case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 23:case 24:case 26:case 28:case 30:case 32:case 36:case 41:case 44:case 48:case 50:case 52:case 54:case 55:case 56:case 58:case 62:case 81:case 84:case 85:case 86:this.$=R[L];break;case 22:case 65:case 93:this.$=R[L-1];break;case 25:this.$=$.createNode(q(W[L-2]),"node_op","op_assign",R[L-2],R[L]),this.$.isMath=!1;break;case 27:this.$=$.createNode(q(W[L-4]),"node_op","op_conditional",R[L-4],R[L-2],R[L]),this.$.isMath=!1;break;case 29:this.$=$.createNode(q(W[L-2]),"node_op","op_or",R[L-2],R[L]),this.$.isMath=!1;break;case 31:this.$=$.createNode(q(W[L-2]),"node_op","op_and",R[L-2],R[L]),this.$.isMath=!1;break;case 33:this.$=$.createNode(q(W[L-2]),"node_op","op_eq",R[L-2],R[L]),this.$.isMath=!1;break;case 34:this.$=$.createNode(q(W[L-2]),"node_op","op_neq",R[L-2],R[L]),this.$.isMath=!1;break;case 35:this.$=$.createNode(q(W[L-2]),"node_op","op_approx",R[L-2],R[L]),this.$.isMath=!1;break;case 37:this.$=$.createNode(q(W[L-2]),"node_op","op_lt",R[L-2],R[L]),this.$.isMath=!1;break;case 38:this.$=$.createNode(q(W[L-2]),"node_op","op_gt",R[L-2],R[L]),this.$.isMath=!1;break;case 39:this.$=$.createNode(q(W[L-2]),"node_op","op_leq",R[L-2],R[L]),this.$.isMath=!1;break;case 40:this.$=$.createNode(q(W[L-2]),"node_op","op_geq",R[L-2],R[L]),this.$.isMath=!1;break;case 42:this.$=$.createNode(q(W[L-2]),"node_op","op_add",R[L-2],R[L]),this.$.isMath=!0;break;case 43:this.$=$.createNode(q(W[L-2]),"node_op","op_sub",R[L-2],R[L]),this.$.isMath=!0;break;case 45:this.$=$.createNode(q(W[L-2]),"node_op","op_mul",R[L-2],R[L]),this.$.isMath=!0;break;case 46:this.$=$.createNode(q(W[L-2]),"node_op","op_div",R[L-2],R[L]),this.$.isMath=!0;break;case 47:this.$=$.createNode(q(W[L-2]),"node_op","op_mod",R[L-2],R[L]),this.$.isMath=!0;break;case 49:this.$=$.createNode(q(W[L-2]),"node_op","op_exp",R[L-2],R[L]),this.$.isMath=!0;break;case 51:this.$=$.createNode(q(W[L-1]),"node_op","op_not",R[L]),this.$.isMath=!1;break;case 53:this.$=$.createNode(q(W[L-1]),"node_op","op_neg",R[L]),this.$.isMath=!0;break;case 57:case 63:case 64:case 66:case 67:case 68:case 97:this.$=R[L],this.$.isMath=!1;break;case 59:case 91:this.$=$.createNode(q(W[L-2]),"node_op","op_property",R[L-2],R[L]),this.$.isMath=!0;break;case 60:case 90:this.$=$.createNode(q(W[L-3]),"node_op","op_extvalue",R[L-3],R[L-1]),this.$.isMath=!0;break;case 61:this.$=$.createNode(q(W[L]),"node_var",R[L]);break;case 69:this.$=R[L],this.$.isMath=!0;break;case 70:this.$=$.createNode(q(W[L]),"node_const",null);break;case 71:this.$=$.createNode(q(W[L]),"node_const_bool",!0);break;case 72:this.$=$.createNode(q(W[L]),"node_const_bool",!1);break;case 73:this.$=$.createNode(q(W[L]),"node_str",R[L].substring(1,R[L].length-1));break;case 74:this.$=$.createNode(q(W[L]),"node_const",parseFloat(R[L]));break;case 75:this.$=$.createNode(q(W[L]),"node_const",NaN);break;case 76:this.$=$.createNode(q(W[L]),"node_const",1/0);break;case 77:this.$=$.createNode(q(W[L-1]),"node_op","op_array",[]);break;case 78:this.$=$.createNode(q(W[L-2]),"node_op","op_array",R[L-1]);break;case 79:this.$=$.createNode(q(W[L-1]),"node_op","op_emptyobject",{}),this.$.needsAngleBrackets=!0;break;case 80:this.$=$.createNode(q(W[L-2]),"node_op","op_proplst_val",R[L-1]),this.$.needsAngleBrackets=!0;break;case 82:this.$=$.createNode(q(W[L-2]),"node_op","op_proplst",R[L-2],R[L]);break;case 83:this.$=$.createNode(q(W[L-2]),"node_op","op_prop",R[L-2],R[L]);break;case 87:case 89:this.$=$.createNode(q(W[L-1]),"node_op","op_execfun",R[L-1],R[L]),this.$.isMath=!0;break;case 88:this.$=$.createNode(q(W[L-2]),"node_op","op_execfun",R[L-2],R[L-1],R[L],!0),this.$.isMath=!1;break;case 92:this.$=[];break;case 94:case 98:case 104:this.$=[R[L]];break;case 95:case 99:case 105:this.$=R[L-2].concat(R[L]);break;case 96:this.$=$.createNode(q(W[L]),"node_var",R[L]),this.$.isMath=!0;break;case 100:this.$=$.createNode(q(W[L-3]),"node_op","op_function",[],R[L]),this.$.isMath=!1;break;case 101:this.$=$.createNode(q(W[L-4]),"node_op","op_function",R[L-2],R[L]),this.$.isMath=!1;break;case 102:this.$=$.createNode(q(W[L-4]),"node_op","op_map",[],R[L]);break;case 103:this.$=$.createNode(q(W[L-5]),"node_op","op_map",R[L-3],R[L])}},table:[t([5,7,8,14,15,16,17,19,20,21,23,26,50,51,58,65,74,75,76,77,78,79,80,82,91,93],e,{3:1,4:2}),{1:[3]},{5:[1,3],6:6,7:r,8:s,9:20,11:4,13:7,14:o,15:a,16:n,17:l,18:8,19:h,20:d,21:u,22:9,23:c,24:11,25:5,26:p,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{1:[2,1]},t(M,[2,13]),t(N,[2,15]),t(N,[2,16]),t(N,[2,17]),t(N,[2,18]),t(N,[2,19]),t(N,[2,20]),t(N,[2,21]),t([7,8,14,15,16,17,19,20,21,23,26,27,50,51,58,65,74,75,76,77,78,79,80,82,91,93],e,{4:61}),{8:[1,62]},{8:[1,63]},{8:[1,64]},{6:6,7:r,8:s,9:20,11:65,13:7,14:o,15:a,16:n,17:l,18:8,19:h,20:d,21:u,22:9,23:c,24:11,25:5,26:p,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{20:[1,66]},{20:[1,67]},{8:s,9:69,16:[1,68],20:d,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{16:[1,70]},t(N,[2,11]),t(j,[2,23]),t(j,[2,24]),t([8,10,16,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,64,65,66,83,86],k,{32:[1,71],57:B}),t([8,10,16,32,35,39,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,83,86],[2,26],{34:[1,73],37:[1,74]}),t(I,[2,54],{88:77,8:X,64:[1,75],65:[1,76]}),t(I,[2,55],{88:79,8:X,64:[1,81],65:[1,80]}),t(J,[2,28],{39:Y}),t(j,[2,56]),t(j,[2,57]),t(j,[2,58]),t(F,[2,30],{41:D,42:A,43:T}),t(j,[2,61]),t(j,[2,62]),t(j,[2,63]),t(j,[2,64]),{8:s,9:86,20:d,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:[1,87]},{8:[1,88]},t(U,[2,32],{45:V,46:K,47:H,48:G}),t(j,[2,66]),t(j,[2,67]),t(j,[2,68]),t(j,[2,69]),{20:tt,72:98,73:99,77:x,78:v,79:P,80:E,83:[1,93],84:94,85:95,87:96},{8:s,20:d,29:102,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,66:[1,100],67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,81:101,82:w,91:O,93:S},t(st,[2,36],{50:it,51:et}),t(j,[2,70]),t(j,[2,71]),t(j,[2,72]),t(j,[2,73]),t(j,[2,74]),t(j,[2,75]),t(j,[2,76]),t(lt,[2,41],{53:nt,54:ot,55:dt}),t(j,[2,44]),t(j,[2,50]),{8:s,20:d,31:109,50:f,51:_,52:108,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,50:f,51:_,52:110,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,50:f,51:_,52:111,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{6:6,7:r,8:s,9:20,11:4,13:7,14:o,15:a,16:n,17:l,18:8,19:h,20:d,21:u,22:9,23:c,24:11,25:5,26:p,27:[1,112],28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,9:113,20:d,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,9:114,20:d,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,9:115,20:d,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{14:[1,116]},t(N,[2,7]),t(N,[2,8]),t(N,[2,9]),{16:[1,117]},t(N,[2,22]),{8:s,20:d,29:118,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,50:f,51:_,52:119,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,29:120,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,36:121,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{20:[1,122]},{8:s,9:123,20:d,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},t(j,[2,87],{89:124,90:125,68:127,20:ft,82:w}),{8:s,10:[1,128],20:d,29:102,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,81:129,82:w,91:O,93:S},t(j,[2,89]),{8:s,9:130,20:d,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{20:[1,131]},{8:s,20:d,31:109,38:132,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,40:133,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,40:134,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,40:135,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{10:[1,136]},{10:[1,137],20:ut,92:138},{10:[1,140],20:ut,92:141},{8:s,20:d,31:109,44:142,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,44:143,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,44:144,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,44:145,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},t(j,[2,79]),{83:[1,146],86:[1,147]},t(Ct,[2,81]),{35:[1,148]},{35:[2,84]},{35:[2,85]},{35:[2,86]},t(j,[2,77]),{66:[1,149],86:yt},t(xt,[2,98]),{8:s,20:d,31:109,49:151,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,49:152,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,50:f,51:_,52:153,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,50:f,51:_,52:154,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,31:109,50:f,51:_,52:155,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},t(j,[2,51]),t([8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,64,65,66,83,86],k,{57:B}),t(j,[2,52]),t(j,[2,53]),t([5,7,8,10,12,14,15,16,17,19,20,21,23,26,27,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,58,64,65,66,74,75,76,77,78,79,80,82,83,86,91,93],[2,12]),{10:[1,156]},{10:[1,157]},{16:[1,158]},{8:[1,159]},t(N,[2,10]),t(j,[2,25]),t(j,[2,49]),{35:[1,160]},t(J,[2,29],{39:Y}),t(j,[2,59]),{66:[1,161]},t([8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,83],[2,88],{86:[1,162]}),t(j,[2,94]),t(j,[2,96]),t(j,[2,97]),t(Pt,[2,92]),{10:[1,163],86:yt},{66:[1,164]},t(j,[2,91]),t(F,[2,31],{41:D,42:A,43:T}),t(U,[2,33],{45:V,46:K,47:H,48:G}),t(U,[2,34],{45:V,46:K,47:H,48:G}),t(U,[2,35],{45:V,46:K,47:H,48:G}),t(j,[2,65]),{25:165,26:p},{10:[1,166],86:wt},t(Ot,[2,104]),{94:[1,168]},{10:[1,169],86:wt},t(st,[2,37],{50:it,51:et}),t(st,[2,38],{50:it,51:et}),t(st,[2,39],{50:it,51:et}),t(st,[2,40],{50:it,51:et}),t(j,[2,80]),{20:tt,72:98,73:99,77:x,78:v,79:P,80:E,85:170,87:96},{8:s,20:d,29:171,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},t(j,[2,78]),{8:s,20:d,29:172,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},t(lt,[2,42],{53:nt,54:ot,55:dt}),t(lt,[2,43],{53:nt,54:ot,55:dt}),t(j,[2,45]),t(j,[2,46]),t(j,[2,47]),{6:6,7:r,8:s,9:20,11:173,13:7,14:o,15:a,16:n,17:l,18:8,19:h,20:d,21:u,22:9,23:c,24:11,25:5,26:p,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{6:6,7:r,8:s,9:20,11:174,13:7,14:o,15:a,16:n,17:l,18:8,19:h,20:d,21:u,22:9,23:c,24:11,25:5,26:p,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,9:175,20:d,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,9:176,20:d,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,20:d,29:177,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},t(j,[2,60]),{20:ft,68:127,82:w,90:178},t(Pt,[2,93]),t(j,[2,90]),t(j,[2,100]),{25:179,26:p},{20:[1,180]},{8:s,9:181,20:d,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{94:[1,182]},t(Ct,[2,82]),t(Ct,[2,83]),t(xt,[2,99]),t(M,[2,2],{12:[1,183]}),t(N,[2,4]),{16:[1,184]},{10:[1,185]},t(j,[2,27]),t(j,[2,95]),t(j,[2,101]),t(Ot,[2,105]),t(j,[2,102]),{8:s,9:186,20:d,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{6:6,7:r,8:s,9:20,11:187,13:7,14:o,15:a,16:n,17:l,18:8,19:h,20:d,21:u,22:9,23:c,24:11,25:5,26:p,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{8:s,9:188,20:d,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},{16:[1,189]},t(j,[2,103]),t(N,[2,3]),{10:[1,190]},t(N,[2,6]),{6:6,7:r,8:s,9:20,11:191,13:7,14:o,15:a,16:n,17:l,18:8,19:h,20:d,21:u,22:9,23:c,24:11,25:5,26:p,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:f,51:_,52:56,56:57,58:g,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:b,75:C,76:y,77:x,78:v,79:P,80:E,82:w,91:O,93:S},t(N,[2,5])],defaultActions:{3:[2,1],97:[2,84],98:[2,85],99:[2,86]},parseError:function(z,Q){if(Q.recoverable)this.trace(z);else{var Z=new Error(z);throw Z.hash=Q,Z}},parse:function(z){var Q=this,Z=[0],at=[],rt=[null],R=[],W=this.table,L="",Mt=0,Rt=0,It=0,Vt=2,Bt=1,Xt=R.slice.call(arguments,1),ht=Object.create(this.lexer),vt={yy:{}};for(var jt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,jt)&&(vt.yy[jt]=this.yy[jt]);ht.setInput(z,vt.yy),vt.yy.lexer=ht,vt.yy.parser=this,typeof ht.yylloc>"u"&&(ht.yylloc={});var At=ht.yylloc;R.push(At);var Ft=ht.options&&ht.options.ranges;typeof vt.yy.parseError=="function"?this.parseError=vt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var zt=function(){var St=ht.lex()||Bt;return typeof St!="number"&&(St=Q.symbols_[St]||St),St},ct,kt,bt,_t,Jt,Dt,Et={},Nt,mt,Yt,Tt;;){if(bt=Z[Z.length-1],this.defaultActions[bt]?_t=this.defaultActions[bt]:((ct===null||typeof ct>"u")&&(ct=zt()),_t=W[bt]&&W[bt][ct]),typeof _t>"u"||!_t.length||!_t[0]){var Lt="";Tt=[];for(Nt in W[bt])this.terminals_[Nt]&&Nt>Vt&&Tt.push("'"+this.terminals_[Nt]+"'");ht.showPosition?Lt="Parse error on line "+(Mt+1)+`:
93
+ `+ht.showPosition()+`
94
+ Expecting `+Tt.join(", ")+", got '"+(this.terminals_[ct]||ct)+"'":Lt="Parse error on line "+(Mt+1)+": Unexpected "+(ct==Bt?"end of input":"'"+(this.terminals_[ct]||ct)+"'"),this.parseError(Lt,{text:ht.match,token:this.terminals_[ct]||ct,line:ht.yylineno,loc:At,expected:Tt})}if(_t[0]instanceof Array&&_t.length>1)throw new Error("Parse Error: multiple actions possible at state: "+bt+", token: "+ct);switch(_t[0]){case 1:Z.push(ct),rt.push(ht.yytext),R.push(ht.yylloc),Z.push(_t[1]),ct=null,kt?(ct=kt,kt=null):(Rt=ht.yyleng,L=ht.yytext,Mt=ht.yylineno,At=ht.yylloc,It>0&&It--);break;case 2:if(mt=this.productions_[_t[1]][1],Et.$=rt[rt.length-mt],Et._$={first_line:R[R.length-(mt||1)].first_line,last_line:R[R.length-1].last_line,first_column:R[R.length-(mt||1)].first_column,last_column:R[R.length-1].last_column},Ft&&(Et._$.range=[R[R.length-(mt||1)].range[0],R[R.length-1].range[1]]),Dt=this.performAction.apply(Et,[L,Rt,Mt,vt.yy,_t[1],rt,R].concat(Xt)),typeof Dt<"u")return Dt;mt&&(Z=Z.slice(0,-1*mt*2),rt=rt.slice(0,-1*mt),R=R.slice(0,-1*mt)),Z.push(this.productions_[_t[1]][0]),rt.push(Et.$),R.push(Et._$),Yt=W[Z[Z.length-2]][Z[Z.length-1]],Z.push(Yt);break;case 3:return!0}}return!0}},$={node:function(z,Q,Z){return{type:z,value:Q,children:Z}},createNode:function(z,Q,Z,at){var rt,R=this.node(Q,Z,[]);for(rt=3;rt<arguments.length;rt++)R.children.push(arguments[rt]);return R.line=z[0],R.col=z[1],R.eline=z[2],R.ecol=z[3],R}},q=function(z){return[z.first_line,z.first_column,z.last_line,z.last_column]};gt.lexer=(function(){return{EOF:1,parseError:function(z,Q){if(this.yy.parser)this.yy.parser.parseError(z,Q);else throw new Error(z)},setInput:function(z,Q){return this.yy=Q||this.yy||{},this._input=z,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var z=this._input[0];return this.yytext+=z,this.yyleng++,this.offset++,this.match+=z,this.matched+=z,z.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),z},unput:function(z){var Q=z.length,Z=z.split(/(?:\r\n?|\n)/g);this._input=z+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Q),this.offset-=Q;var at=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Z.length-1&&(this.yylineno-=Z.length-1);var rt=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Z?(Z.length===at.length?this.yylloc.first_column:0)+at[at.length-Z.length].length-Z[0].length:this.yylloc.first_column-Q},this.options.ranges&&(this.yylloc.range=[rt[0],rt[0]+this.yyleng-Q]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
95
+ `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(z){this.unput(this.match.slice(z))},pastInput:function(){var z=this.matched.substr(0,this.matched.length-this.match.length);return(z.length>20?"...":"")+z.substr(-20).replace(/\n/g,"").replace(/[&<>]/g,function(Q){return Q==="&"?"&amp;":Q==="<"?"&lt;":"&gt;"})},upcomingInput:function(){var z=this.match;return z.length<20&&(z+=this._input.substr(0,20-z.length)),(z.substr(0,20)+(z.length>20?"...":"")).replace(/\n/g,"").replace(/[&<>]/g,function(Q){return Q==="&"?"&amp;":Q==="<"?"&lt;":"&gt;"})},showPosition:function(){var z=this.pastInput(),Q=new Array(z.length+1).join("-");return z+this.upcomingInput()+`
96
+ `+Q+"^"},test_match:function(z,Q){var Z,at,rt;if(this.options.backtrack_lexer&&(rt={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(rt.yylloc.range=this.yylloc.range.slice(0))),at=z[0].match(/(?:\r\n?|\n).*/g),at&&(this.yylineno+=at.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:at?at[at.length-1].length-at[at.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+z[0].length},this.yytext+=z[0],this.match+=z[0],this.matches=z,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(z[0].length),this.matched+=z[0],Z=this.performAction.call(this,this.yy,this,Q,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Z)return Z;if(this._backtrack){for(var R in rt)this[R]=rt[R];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var z,Q,Z,at;this._more||(this.yytext="",this.match="");for(var rt=this._currentRules(),R=0;R<rt.length;R++)if(Z=this._input.match(this.rules[rt[R]]),Z&&(!Q||Z[0].length>Q[0].length)){if(Q=Z,at=R,this.options.backtrack_lexer){if(z=this.test_match(Z,rt[R]),z!==!1)return z;if(this._backtrack){Q=!1;continue}else return!1}else if(!this.options.flex)break}return Q?(z=this.test_match(Q,rt[at]),z!==!1?z:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
97
+ `+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(z){this.conditionStack.push(z)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(z){return z=this.conditionStack.length-1-Math.abs(z||0),z>=0?this.conditionStack[z]:"INITIAL"},pushState:function(z){this.begin(z)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(z,Q,Z,at){var rt=at;switch(Z){case 0:break;case 1:return 78;case 2:return 78;case 3:return 78;case 4:return 77;case 5:return 77;case 6:break;case 7:break;case 8:return 7;case 9:return 12;case 10:return 14;case 11:return 17;case 12:return 15;case 13:return 91;case 14:return 93;case 15:return 19;case 16:return 23;case 17:return 21;case 18:return 75;case 19:return 76;case 20:return 74;case 21:return 80;case 22:return 94;case 23:return 94;case 24:return 82;case 25:return 83;case 26:return 26;case 27:return 27;case 28:return 16;case 29:return"#";case 30:return 34;case 31:return 35;case 32:return 79;case 33:return 64;case 34:return 65;case 35:return 66;case 36:return 8;case 37:return 10;case 38:return 58;case 39:return 57;case 40:return 57;case 41:return 53;case 42:return 54;case 43:return 55;case 44:return 50;case 45:return 51;case 46:return 47;case 47:return 45;case 48:return 48;case 49:return 46;case 50:return 41;case 51:return 43;case 52:return 42;case 53:return 39;case 54:return 37;case 55:return 32;case 56:return 86;case 57:return 5;case 58:return 20;case 59:return"INVALID"}},rules:[/^(?:\s+)/,/^(?:[0-9]*\.?[0-9]+([eE][-+]?[0-9]+))/,/^(?:[0-9]+\.[0-9]*|[0-9]*\.[0-9]+\b)/,/^(?:[0-9]+)/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:\/\/.*)/,/^(?:\/\*(.|\n|\r)*?\*\/)/,/^(?:if\b)/,/^(?:else\b)/,/^(?:while\b)/,/^(?:do\b)/,/^(?:for\b)/,/^(?:function\b)/,/^(?:map\b)/,/^(?:use\b)/,/^(?:return\b)/,/^(?:delete\b)/,/^(?:true\b)/,/^(?:false\b)/,/^(?:null\b)/,/^(?:Infinity\b)/,/^(?:->)/,/^(?:=>)/,/^(?:<<)/,/^(?:>>)/,/^(?:\{)/,/^(?:\})/,/^(?:;)/,/^(?:#)/,/^(?:\?)/,/^(?::)/,/^(?:NaN\b)/,/^(?:\.)/,/^(?:\[)/,/^(?:\])/,/^(?:\()/,/^(?:\))/,/^(?:!)/,/^(?:\^)/,/^(?:\*\*)/,/^(?:\*)/,/^(?:\/)/,/^(?:%)/,/^(?:\+)/,/^(?:-)/,/^(?:<=)/,/^(?:<)/,/^(?:>=)/,/^(?:>)/,/^(?:==)/,/^(?:~=)/,/^(?:!=)/,/^(?:&&)/,/^(?:\|\|)/,/^(?:=)/,/^(?:,)/,/^(?:$)/,/^(?:[A-Za-z_\$][A-Za-z0-9_]*)/,/^(?:.)/],conditions:{INITIAL:{rules:[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,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,52,53,54,55,56,57,58,59],inclusive:!0}}}})();function pt(){this.yy={}}return pt.prototype=gt,gt.Parser=pt,new pt})();parser.yy.parseError=parser.parseError;var jessiecode_default=jxg_default.JessieCode;jxg_default.Composition=function(t){var e,r=this,s=["setAttribute","setParents","prepareUpdate","updateRenderer","update","fullUpdate","highlight","noHighlight"],o=function(a){return function(){var n;for(n in r.elements)r.elements.hasOwnProperty(n)&&type_default.exists(r.elements[n][a])&&r.elements[n][a].apply(r.elements[n],arguments);return r}};for(e=0;e<s.length;e++)this[s[e]]=o(s[e]);this.elements={},this.objects=this.elements,this.elementsByName={},this.objectsList=[],this.groups={};for(e in t)t.hasOwnProperty(e)&&this.add(e,t[e]);this.dump=!0,this.subs={}};type_default.copyMethodMap(jxg_default.Composition,{setAttribute:"setAttribute",setProperty:"setAttribute",setParents:"setParents",add:"add",remove:"remove",select:"select"});jxg_default.extend(jxg_default.Composition.prototype,{add:function(t,e){return!type_default.exists(this[t])&&type_default.exists(e)?(type_default.exists(e.id)?this.elements[e.id]=e:this.elements[t]=e,type_default.exists(e.name)&&(this.elementsByName[e.name]=e),e.on("attribute:name",this.nameListener,this),this.objectsList.push(e),this[t]=e,type_default.extendInstanceMethodMap(this,t,t),!0):!1},remove:function(t){var e=!1,r;for(r in this.elements)if(this.elements.hasOwnProperty(r)&&this.elements[r].id===this[t].id){e=!0;break}return e&&(delete this.elements[this[t].id],type_default.exists(this[t].name)&&delete this.elementsByName[this[t].name],type_default.removeElementFromArray(this.objectsList,this[t]),this.hasOwnProperty("methodMap")&&delete this.methodMap[t],delete this[t]),e},nameListener:function(t,e,r){delete this.elementsByName[t],this.elementsByName[e]=r},select:function(t){return type_default.exists(jxg_default.Board)?jxg_default.Board.prototype.select.call(this,t):new jxg_default.Composition},getParents:function(){return this.parents},getType:function(){return this.elType},getAttributes:function(){var t={},e;for(e in this.subs)this.subs.hasOwnProperty(e)&&(t[e]=this.subs[e].visProp);return this.attr}});var composition_default=jxg_default.Composition;jxg_default.Board=function(t,e,r,s,o,a,n,l,h,d,u){if(this.BOARD_MODE_NONE=0,this.BOARD_MODE_DRAG=1,this.BOARD_MODE_MOVE_ORIGIN=2,this.BOARD_MODE_ZOOM=17,this.BOARD_QUALITY_LOW=1,this.BOARD_QUALITY_HIGH=2,type_default.exists(u.document)&&u.document!==!1?this.document=u.document:env_default.isBrowser&&(this.document=document),this.container="",this.id="",this.containerObj=null,type_default.isString(t)?(this.container=t,this.containerObj=env_default.isBrowser?this.document.getElementById(this.container):null):env_default.isBrowser&&(this.containerObj=t,this.container=this.containerObj.getAttribute("id"),this.container===null&&(this.container="null"+parseInt(Math.random()*16777216).toString())),env_default.isBrowser&&e.type!=="no"&&this.containerObj===null)throw new Error(`
98
+ JSXGraph: HTML container element "`+t+'" not found.');type_default.exists(r)&&r!==""&&env_default.isBrowser&&!type_default.exists(this.document.getElementById(r))?this.id=r:this.id=this.generateId(),this.renderer=e,this.grids=[],this.options=type_default.deepCopy(options_default),this.attr=u,this.attr.theme!=="default"&&type_default.exists(jxg_default.themes[this.attr.theme])&&type_default.mergeAttr(this.options,jxg_default.themes[this.attr.theme],!0),this.dimension=2,this.jc=new jessiecode_default,this.jc.use(this),this.origin={},this.origin.usrCoords=[1,0,0],this.origin.scrCoords=[1,s[0],s[1]],this.zoomX=o,this.zoomY=a,this.unitX=n*this.zoomX,this.unitY=l*this.zoomY,this.keepaspectratio=!1,this.canvasWidth=h,this.canvasHeight=d,event_default.eventify(this),this.hooks=[],this.dependentBoards=[],this.inUpdate=!1,this.objects={},this.objectsList=[],this.groups={},this.animationObjects={},this.highlightedObjects={},this.numObjects=0,this.elementsByName={},this.mode=this.BOARD_MODE_NONE,this.updateQuality=this.BOARD_QUALITY_HIGH,this.isSuspendedRedraw=!1,this.calculateSnapSizes(),this.drag_dx=0,this.drag_dy=0,this.drag_position=[0,0],this.mouse={},this.touches=[],this.xmlString="",this.cPos=[],this.touchMoveLast=0,this.touchMoveLastId=1/0,this.positionAccessLast=0,this.downObjects=[],this.clickObjects={},this.focusObjects=[],(this.attr.showcopyright||this.attr.showlogo)&&this.renderer.displayLogo(constants.licenseLogo,parseInt(this.options.text.fontSize,10),this),this.attr.showcopyright&&this.renderer.displayCopyright(constants.licenseText,parseInt(this.options.text.fontSize,10)),this.needsFullUpdate=!1,this.reducedUpdate=!1,this.currentCBDef="none",this.geonextCompatibilityMode=!1,this.options.text.useASCIIMathML&&translateASCIIMath?init():this.options.text.useASCIIMathML=!1,this.hasMouseHandlers=!1,this.hasTouchHandlers=!1,this.hasPointerHandlers=!1,this.hasWheelHandlers=!1,this.hasMouseUp=!1,this.hasTouchEnd=!1,this.hasPointerUp=!1,this.resizeHandlers=[],this._drag_offset=[0,0],this._inputDevice="mouse",this._board_touches=[],this.selectingMode=!1,this.isSelecting=!1,this._isScrolling=!1,this._isResizing=!1,this._change3DView=!1,this.selectingBox=[[0,0],[0,0]],this.userLog=[],this.sketches=[null,null],this.sketch=null,this.isSketching=[!1,!1],this.mathLib=Math,this.mathLibJXG=jxg_default.Math,this.attr.registerevents===!0?this.attr.registerevents={fullscreen:!0,keyboard:!0,pointer:!0,resize:!0,wheel:!0}:typeof this.attr.registerevents=="object"&&(type_default.exists(this.attr.registerevents.fullscreen)||(this.attr.registerevents.fullscreen=!0),type_default.exists(this.attr.registerevents.keyboard)||(this.attr.registerevents.keyboard=!0),type_default.exists(this.attr.registerevents.pointer)||(this.attr.registerevents.pointer=!0),type_default.exists(this.attr.registerevents.resize)||(this.attr.registerevents.resize=!0),type_default.exists(this.attr.registerevents.wheel)||(this.attr.registerevents.wheel=!0)),this.attr.registerevents!==!1&&(this.attr.registerevents.fullscreen&&this.addFullscreenEventHandlers(),this.attr.registerevents.keyboard&&this.addKeyboardEventHandlers(),this.attr.registerevents.pointer&&this.addEventHandlers(),this.attr.registerevents.resize&&this.addResizeEventHandlers(),this.attr.registerevents.wheel&&this.addWheelEventHandlers())};type_default.copyMethodMap(jxg_default.Board,{update:"update",fullUpdate:"fullUpdate",on:"on",off:"off",trigger:"trigger",setAttribute:"setAttribute",setBoundingBox:"setBoundingBox",setView:"setBoundingBox",getBoundingBox:"getBoundingBox",BoundingBox:"getBoundingBox",getView:"getBoundingBox",View:"getBoundingBox",migratePoint:"migratePoint",colorblind:"emulateColorblindness",suspendUpdate:"suspendUpdate",unsuspendUpdate:"unsuspendUpdate",clearTraces:"clearTraces",left:"clickLeftArrow",right:"clickRightArrow",up:"clickUpArrow",down:"clickDownArrow",zoomIn:"zoomIn",zoomOut:"zoomOut",zoom100:"zoom100",zoomElements:"zoomElements",remove:"removeObject",removeObject:"removeObject"});jxg_default.extend(jxg_default.Board.prototype,{generateName:function(t){var e,r,s=this.attr.maxnamelength,o="",a="",n=[],l="";if(t.type===constants.OBJECT_TYPE_TICKS)return"";for(type_default.isPoint(t)||type_default.isPoint3D(t)?e=["","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"]:t.type===constants.OBJECT_TYPE_ANGLE?e=["","&alpha;","&beta;","&gamma;","&delta;","&epsilon;","&zeta;","&eta;","&theta;","&iota;","&kappa;","&lambda;","&mu;","&nu;","&xi;","&omicron;","&pi;","&rho;","&sigma;","&tau;","&upsilon;","&phi;","&chi;","&psi;","&omega;"]:e=["","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"],!type_default.isPoint(t)&&!type_default.isPoint3D(t)&&t.elementClass!==constants.OBJECT_CLASS_LINE&&t.type!==constants.OBJECT_TYPE_ANGLE&&(t.type===constants.OBJECT_TYPE_POLYGON?o="P_{":t.elementClass===constants.OBJECT_CLASS_CIRCLE?o="k_{":t.elementClass===constants.OBJECT_CLASS_TEXT?o="t_{":o="s_{",a="}"),r=0;r<s;r++)n[r]=0;for(;n[s-1]<e.length;){for(n[0]=1;n[0]<e.length;n[0]++){for(l=o,r=s;r>0;r--)l+=e[n[r-1]];if(!type_default.exists(this.elementsByName[l+a]))return l+a}for(n[0]=e.length,r=1;r<s;r++)n[r-1]===e.length&&(n[r-1]=1,n[r]+=1)}return""},generateId:function(){for(var t=1;type_default.exists(jxg_default.boards["jxgBoard"+t]);)t=Math.round(Math.random()*16777216);return"jxgBoard"+t},setId:function(t,e){var r,s=this.numObjects,o=t.id;if(this.numObjects+=1,o===""||!type_default.exists(o))for(o=this.id+e+s;type_default.exists(this.objects[o]);)r=Math.round(Math.random()*65535),o=this.id+e+s+"-"+r;return t.id=o,this.objects[o]=t,t._pos=this.objectsList.length,this.objectsList[this.objectsList.length]=t,o},finalizeAdding:function(t){t.evalVisProp("visible")===!1&&this.renderer.display(t,!1)},finalizeLabel:function(t){t.hasLabel&&!t.label.evalVisProp("islabel")&&t.label.evalVisProp("visible")===!1&&this.renderer.display(t.label,!1)},checkFrameRate:function(t){var e=!1,r=new Date().getTime();return type_default.exists(t.pointerId)&&this.touchMoveLastId!==t.pointerId&&(e=!0,this.touchMoveLastId=t.pointerId),!e&&(r-this.touchMoveLast)*this.attr.maxframerate>=1e3&&(e=!0),e&&(this.touchMoveLast=r),e},getCoordsTopLeftCorner:function(){var t,e,r,s=this.document.ownerDocument||this.document,o=s.documentElement||this.document.body.parentNode,a=s.body,n=this.containerObj,l,h;if(this.cPos.length>0&&(this.mode===this.BOARD_MODE_DRAG||this.mode===this.BOARD_MODE_MOVE_ORIGIN||new Date().getTime()-this.positionAccessLast<1e3))return this.cPos;if(this.positionAccessLast=new Date().getTime(),n.getBoundingClientRect){for(r=n.getBoundingClientRect(),l=1,h=n;h&&type_default.exists(h.parentNode);)type_default.exists(h.style)&&type_default.exists(h.style.zoom)&&h.style.zoom!==""&&(l*=parseFloat(h.style.zoom)),h=h.parentNode;return t=[r.left*l,r.top*l],t[0]+=env_default.getProp(n,"border-left-width"),t[1]+=env_default.getProp(n,"border-top-width"),this.renderer.type!=="vml"&&(t[0]+=env_default.getProp(n,"padding-left"),t[1]+=env_default.getProp(n,"padding-top")),this.cPos=t.slice(),this.cPos}return t=env_default.getOffset(n),e=this.document.documentElement.ownerDocument,!this.containerObj.currentStyle&&e.defaultView&&(t[0]+=env_default.getProp(o,"margin-left"),t[1]+=env_default.getProp(o,"margin-top"),t[0]+=env_default.getProp(o,"border-left-width"),t[1]+=env_default.getProp(o,"border-top-width"),t[0]+=env_default.getProp(o,"padding-left"),t[1]+=env_default.getProp(o,"padding-top")),a&&(t[0]+=env_default.getProp(a,"left"),t[1]+=env_default.getProp(a,"top")),typeof google=="object"&&google.translate&&(t[0]+=10,t[1]+=25),t[0]+=env_default.getProp(n,"border-left-width"),t[1]+=env_default.getProp(n,"border-top-width"),this.renderer.type!=="vml"&&(t[0]+=env_default.getProp(n,"padding-left"),t[1]+=env_default.getProp(n,"padding-top")),t[0]+=this.attr.offsetx,t[1]+=this.attr.offsety,this.cPos=t.slice(),this.cPos},getPointLoc:function(t,e){var r=this.getBoundingBox(),s=t,o,a;return s.length===2&&s.unshift(void 0),o=[0,0],a=e||0,type_default.isNumber(a)&&(a=[a,a,a,a]),s[1]>r[2]-a[1]&&(o[0]=1),s[1]<r[0]+a[3]&&(o[0]=-1),s[2]>r[1]-a[0]&&(o[1]=1),s[2]<r[3]+a[2]&&(o[1]=-1),o},getLocationOrigin:function(t){return this.getPointLoc([0,0],t)},getMousePosition:function(t,e){var r=this.getCoordsTopLeftCorner(),s=env_default.getPosition(t,e,this.document),o;return this.updateCSSTransforms(),o=[1,s[0]-r[0],s[1]-r[1]],o=math_default.matVecMult(this.cssTransMat,o),o[1]/=o[0],o[2]/=o[0],[o[1],o[2]]},initMoveOrigin:function(t,e){this.drag_dx=t-this.origin.scrCoords[1],this.drag_dy=e-this.origin.scrCoords[2],this.mode=this.BOARD_MODE_MOVE_ORIGIN,this._change3DView=!1,this.updateQuality=this.BOARD_QUALITY_LOW},initMoveObject:function(t,e,r,s){var o,a,n=[],l=[],h,d=this.objectsList.length,u={visProp:{layer:-1e4}};for(this._shiftKey=r.shiftKey,this._ctrlKey=r.ctrlKey,a=0;a<d;a++)o=this.objectsList[a],h=o.hasPoint&&o.hasPoint(t,e),o.visPropCalc.visible&&h&&(o.triggerEventHandlers([s+"down","down"],[r]),this.downObjects.push(o)),h&&o.isDraggable&&o.visPropCalc.visible&&(this.geonextCompatibilityMode&&(type_default.isPoint(o)||o.elementClass===constants.OBJECT_CLASS_TEXT)||!this.geonextCompatibilityMode)&&!o.evalVisProp("fixed")&&(o.visProp.layer>u.visProp.layer||o.visProp.layer===u.visProp.layer&&o.lastDragTime.getTime()>=u.lastDragTime.getTime())&&(!this.attr.ignorelabels||!type_default.exists(u.label)||o!==u.label)&&(u=o,n.push(u),type_default.exists(u.coords)?u.elementClass===constants.OBJECT_CLASS_POINT||u.relativeCoords?l.push(statistics_default.subtract(u.coords.scrCoords.slice(1),[t,e])):l.push(statistics_default.subtract(u.actualCoords.scrCoords.slice(1),[t,e])):l.push([0,0]));return this.attr.drag.enabled&&n.length>0&&(this.mode=this.BOARD_MODE_DRAG),this.attr.takefirst?(n.length=1,this._drag_offset=l[0]):(n=n.slice(-1),this._drag_offset=l[l.length-1]),this._drag_offset||(this._drag_offset=[0,0]),this.renderer.type==="svg"&&type_default.exists(n[0])&&n.length===1&&type_default.exists(n[0].rendNode)&&(n[0].evalVisProp("dragtotopoflayer")&&n[0].rendNode.parentNode.appendChild(n[0].rendNode),n[0].hasLabel&&n[0].label.evalVisProp("display")==="html"&&n[0].label.evalVisProp("dragtotopoflayer")&&n[0].label.rendNode.parentNode.appendChild(n[0].label.rendNode)),n.length>=1&&(n[0].highlight(!0),this.triggerEventHandlers(["mousehit","hit"],[r,n[0]])),n},moveObject:function(t,e,r,s,o){var a=new coords_default(constants.COORDS_BY_SCREEN,this.getScrCoordsOfMouse(t,e),this),n,l,h;r&&r.obj&&(n=r.obj,n.coords&&(l=n.coords.scrCoords.slice()),this.addLogEntry("drag",n,a.usrCoords.slice(1)),this.drag_position=[a.scrCoords[1],a.scrCoords[2]],this.drag_position=statistics_default.add(this.drag_position,this._drag_offset),this._shiftKey=s.shiftKey,this._ctrlKey=s.ctrlKey,type_default.exists(n.coords)?n.setPositionDirectly(constants.COORDS_BY_SCREEN,this.drag_position,[t,e]):(this.displayInfobox(!1),isNaN(r.targets[0].Xprev+r.targets[0].Yprev)||n.setPositionDirectly(constants.COORDS_BY_SCREEN,[a.scrCoords[1],a.scrCoords[2]],[r.targets[0].Xprev,r.targets[0].Yprev]),r.targets[0].Xprev=a.scrCoords[1],r.targets[0].Yprev=a.scrCoords[2]),type_default.exists(n.coords)&&(n.prepareUpdate().update(!1).updateRenderer(),this.updateInfobox(n),n.prepareUpdate().update(!0).updateRenderer()),n.coords&&(h=n.coords.scrCoords),(!n.coords||l[1]!==h[1]||l[2]!==h[2])&&(n.triggerEventHandlers([o+"drag","drag"],[s]),this.update(n)),n.highlight(!0),this.triggerEventHandlers(["mousehit","hit"],[s,n]),n.lastDragTime=new Date)},twoFingerMove:function(t,e,r){var s;if(type_default.exists(t)&&type_default.exists(t.obj))s=t.obj;else return;s.elementClass===constants.OBJECT_CLASS_LINE||s.type===constants.OBJECT_TYPE_POLYGON?this.twoFingerTouchObject(t.targets,s,e):s.elementClass===constants.OBJECT_CLASS_CIRCLE&&this.twoFingerTouchCircle(t.targets,s,e),r&&s.triggerEventHandlers(["touchdrag","drag"],[r])},getTwoFingerTransform(t,e,r,s){var o=new coords_default(constants.COORDS_BY_SCREEN,[t.Xprev,t.Yprev],this).usrCoords,a=o[1],n=o[2],l,h,d,u,c,p,f,_,g,m,b,C,y,x,v,P;return o=new coords_default(constants.COORDS_BY_SCREEN,[e.Xprev,e.Yprev],this).usrCoords,l=o[1],h=o[2],o=new coords_default(constants.COORDS_BY_SCREEN,[t.X,t.Y],this).usrCoords,c=o[1],p=o[2],o=new coords_default(constants.COORDS_BY_SCREEN,[e.X,e.Y],this).usrCoords,f=o[1],_=o[2],d=l-a,u=h-n,g=f-c,m=_-p,y=d*d+u*u,b=(g*d+m*u)/y,C=(m*d-g*u)/y,r||(P=math_default.hypot(b,C),b/=P,C/=P),s||(C=0),x=.5*(c+f-b*(a+l)+C*(n+h)),v=.5*(p+_-C*(a+l)-b*(n+h)),[1,0,0,x,b,-C,v,C,b]},twoFingerTouchObject:function(t,e,r){var s,o,a,n,l,h=!1;if(type_default.exists(t[0])&&type_default.exists(t[1])&&!isNaN(t[0].Xprev+t[0].Yprev+t[1].Xprev+t[1].Yprev)){if(o=this.getTwoFingerTransform(t[0],t[1],e.evalVisProp("scalable"),e.evalVisProp("rotatable")),s=this.create("transform",o,{type:"generic"}),s.update(),e.elementClass===constants.OBJECT_CLASS_LINE)a=[],e.point1.draggable()&&a.push(e.point1),e.point2.draggable()&&a.push(e.point2),s.applyOnce(a);else if(e.type===constants.OBJECT_TYPE_POLYGON){for(l=e.vertices.length-1,h=e.evalVisProp("snaptogrid")||e.evalVisProp("snaptopoints"),n=0;n<l&&!h;++n)h=h||e.vertices[n].evalVisProp("snaptogrid")||e.vertices[n].evalVisProp("snaptopoints"),h=h||!e.vertices[n].draggable();if(!h){for(a=[],n=0;n<l;++n)e.vertices[n].draggable()&&a.push(e.vertices[n]);s.applyOnce(a)}}this.update(),e.highlight(!0)}},twoFingerTouchCircle:function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f;e.method==="pointCircle"||e.method==="pointLine"||type_default.exists(t[0])&&type_default.exists(t[1])&&!isNaN(t[0].Xprev+t[0].Yprev+t[1].Xprev+t[1].Yprev)&&(r===t[0].num?(s=t[1],o=t[0]):(s=t[0],o=t[1]),l=new coords_default(constants.COORDS_BY_SCREEN,[s.Xprev,s.Yprev],this).usrCoords,n=new coords_default(constants.COORDS_BY_SCREEN,[o.Xprev,o.Yprev],this).usrCoords,a=new coords_default(constants.COORDS_BY_SCREEN,[o.X,o.Y],this).usrCoords,d=geometry_default.rad(n.slice(1),l.slice(1),a.slice(1)),u=this.create("transform",[-l[1],-l[2]],{type:"translate"}),c=this.create("transform",[d],{type:"rotate"}),u.melt(c),e.evalVisProp("scalable")&&(h=geometry_default.distance(l,a)/geometry_default.distance(l,n),p=this.create("transform",[h,h],{type:"scale"}),u.melt(p)),f=this.create("transform",[l[1],l[2]],{type:"translate"}),u.melt(f),e.center.draggable()&&u.applyOnce([e.center]),e.method==="twoPoints"?e.point2.draggable()&&u.applyOnce([e.point2]):e.method==="pointRadius"&&type_default.isNumber(e.updateRadius.origin)&&e.setRadius(e.radius*h),this.update(e.center),e.highlight(!0))},highlightElements:function(t,e,r,s){var o,a,n,l={},h=this.objectsList.length;for(o=0;o<h;o++)a=this.objectsList[o],n=a.id,type_default.exists(a.hasPoint)&&a.visPropCalc.visible&&a.hasPoint(t,e)&&(this.updateInfobox(a),type_default.exists(this.highlightedObjects[n])||(l[n]=a,a.highlight(),this.triggerEventHandlers(["mousehit","hit"],[r,a,s])),a.mouseover?a.triggerEventHandlers(["mousemove","move"],[r]):(a.triggerEventHandlers(["mouseover","over"],[r]),a.mouseover=!0));for(o=0;o<h;o++)a=this.objectsList[o],n=a.id,a.mouseover&&(l[n]||(a.triggerEventHandlers(["mouseout","out"],[r]),a.mouseover=!1))},saveStartPos:function(t,e){var r=[],s,o;if(t.type===constants.OBJECT_TYPE_TICKS)r.push([1,NaN,NaN]);else if(t.elementClass===constants.OBJECT_CLASS_LINE)r.push(t.point1.coords.usrCoords),r.push(t.point2.coords.usrCoords);else if(t.elementClass===constants.OBJECT_CLASS_CIRCLE)r.push(t.center.coords.usrCoords),t.method==="twoPoints"&&r.push(t.point2.coords.usrCoords);else if(t.type===constants.OBJECT_TYPE_POLYGON)for(o=t.vertices.length-1,s=0;s<o;s++)r.push(t.vertices[s].coords.usrCoords);else if(t.type===constants.OBJECT_TYPE_SECTOR)r.push(t.point1.coords.usrCoords),r.push(t.point2.coords.usrCoords),r.push(t.point3.coords.usrCoords);else if(type_default.isPoint(t)||t.type===constants.OBJECT_TYPE_GLIDER)r.push(t.coords.usrCoords);else if(t.elementClass===constants.OBJECT_CLASS_CURVE)t.points.length>0&&r.push(t.points[0].usrCoords);else try{r.push(t.coords.usrCoords)}catch(a){jxg_default.debug("JSXGraph+ saveStartPos: obj.coords.usrCoords not available: "+a)}for(o=r.length,s=0;s<o;s++)e.Zstart.push(r[s][0]),e.Xstart.push(r[s][1]),e.Ystart.push(r[s][2])},mouseOriginMoveStart:function(t){var e=this._isRequiredKeyPressed(t,"pan"),r;return e&&(r=this.getMousePosition(t),this.initMoveOrigin(r[0],r[1])),e},mouseOriginMove:function(t){var e=this.mode===this.BOARD_MODE_MOVE_ORIGIN,r;return e&&(r=this.getMousePosition(t),this.moveOrigin(r[0],r[1],!0)),e},touchStartMoveOriginOneFinger:function(t){var e=t.touches,r=this.attr.pan.enabled&&!this.attr.pan.needtwofingers&&e.length===1,s;return r&&(s=this.getMousePosition(t,0),this.initMoveOrigin(s[0],s[1])),r},touchOriginMove:function(t){var e=this.mode===this.BOARD_MODE_MOVE_ORIGIN,r;return e&&(r=this.getMousePosition(t,0),this.moveOrigin(r[0],r[1],!0)),e},originMoveEnd:function(){this.updateQuality=this.BOARD_QUALITY_HIGH,this.mode=this.BOARD_MODE_NONE},suppressDefault:function(t){return type_default.exists(t)&&t.preventDefault(),!1},addEventHandlers:function(){env_default.supportsPointerEvents()?this.addPointerEventHandlers():(this.addMouseEventHandlers(),this.addTouchEventHandlers()),this.containerObj!==null&&env_default.addEvent(this.containerObj,"contextmenu",this.suppressDefault,this)},removeEventHandlers:function(){(this.hasPointerHandlers||this.hasMouseHandlers||this.hasTouchHandlers)&&this.containerObj!==null&&env_default.removeEvent(this.containerObj,"contextmenu",this.suppressDefault,this),this.removeMouseEventHandlers(),this.removeTouchEventHandlers(),this.removePointerEventHandlers(),this.removeFullscreenEventHandlers(),this.removeKeyboardEventHandlers(),this.removeResizeEventHandlers()},addResizeEventHandlers:function(){if(this.resizeHandlers=[],env_default.isBrowser){try{this.startResizeObserver(),this.resizeHandlers.push("resizeobserver")}catch{env_default.addEvent(window,"resize",this.resizeListener,this),this.startIntersectionObserver(),this.resizeHandlers.push("resize")}env_default.addEvent(window,"scroll",this.scrollListener,this),this.resizeHandlers.push("scroll");try{this.printListenerMatchBound=this.printListenerMatch.bind(this),this.printMediaQuery=window.matchMedia("print"),this.screenMediaQuery=window.matchMedia("screen"),this.printMediaQuery.addEventListener("change",this.printListenerMatchBound),this.screenMediaQuery.addEventListener("change",this.printListenerMatchBound),this.resizeHandlers.push("print")}catch(t){jxg_default.debug("Error adding printListener",t)}}},removeResizeEventHandlers:function(){var t,e;if(this.resizeHandlers.length>0&&env_default.isBrowser){for(t=0;t<this.resizeHandlers.length;t++)switch(e=this.resizeHandlers[t],e){case"resizeobserver":type_default.exists(this.resizeObserver)&&this.stopResizeObserver();break;case"resize":env_default.removeEvent(window,"resize",this.resizeListener,this),type_default.exists(this.intersectionObserver)&&this.stopIntersectionObserver();break;case"scroll":env_default.removeEvent(window,"scroll",this.scrollListener,this);break;case"print":this.printMediaQuery.removeEventListener("change",this.printListenerMatchBound,!1),this.screenMediaQuery.removeEventListener("change",this.printListenerMatchBound,!1),this.printMediaQuery=null,this.screenMediaQuery=null,this.printListenerMatchBound=null}this.resizeHandlers=[]}},addPointerEventHandlers:function(){if(!this.hasPointerHandlers&&env_default.isBrowser){var t=this.attr.movetarget||this.containerObj;window.navigator.msPointerEnabled?(env_default.addEvent(t,"MSPointerDown",this.pointerDownListener,this),env_default.addEvent(t,"MSPointerMove",this.pointerMoveListener,this)):(env_default.addEvent(t,"pointerdown",this.pointerDownListener,this),env_default.addEvent(t,"pointermove",this.pointerMoveListener,this),env_default.addEvent(t,"pointerleave",this.pointerLeaveListener,this),env_default.addEvent(t,"click",this.pointerClickListener,this),env_default.addEvent(t,"dblclick",this.pointerDblClickListener,this)),this.containerObj!==null&&(this.containerObj.style.touchAction="none"),this.hasPointerHandlers=!0}},addMouseEventHandlers:function(){if(!this.hasMouseHandlers&&env_default.isBrowser){var t=this.attr.movetarget||this.containerObj;env_default.addEvent(t,"mousedown",this.mouseDownListener,this),env_default.addEvent(t,"mousemove",this.mouseMoveListener,this),env_default.addEvent(t,"click",this.mouseClickListener,this),env_default.addEvent(t,"dblclick",this.mouseDblClickListener,this),this.hasMouseHandlers=!0}},addTouchEventHandlers:function(t){if(!this.hasTouchHandlers&&env_default.isBrowser){var e=this.attr.movetarget||this.containerObj;env_default.addEvent(e,"touchstart",this.touchStartListener,this),env_default.addEvent(e,"touchmove",this.touchMoveListener,this),this.hasTouchHandlers=!0}},addWheelEventHandlers:function(){!this.hasWheelHandlers&&env_default.isBrowser&&(env_default.addEvent(this.containerObj,"mousewheel",this.mouseWheelListener,this),env_default.addEvent(this.containerObj,"DOMMouseScroll",this.mouseWheelListener,this),this.hasWheelHandlers=!0)},addFullscreenEventHandlers:function(){var t,e=["fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange"],r=e.length;if(!this.hasFullscreenEventHandlers&&env_default.isBrowser){for(t=0;t<r;t++)env_default.addEvent(this.document,e[t],this.fullscreenListener,this);this.hasFullscreenEventHandlers=!0}},addKeyboardEventHandlers:function(){this.attr.keyboard.enabled&&!this.hasKeyboardHandlers&&env_default.isBrowser&&(env_default.addEvent(this.containerObj,"keydown",this.keyDownListener,this),env_default.addEvent(this.containerObj,"focusin",this.keyFocusInListener,this),env_default.addEvent(this.containerObj,"focusout",this.keyFocusOutListener,this),this.hasKeyboardHandlers=!0)},removeKeyboardEventHandlers:function(){this.hasKeyboardHandlers&&env_default.isBrowser&&(env_default.removeEvent(this.containerObj,"keydown",this.keyDownListener,this),env_default.removeEvent(this.containerObj,"focusin",this.keyFocusInListener,this),env_default.removeEvent(this.containerObj,"focusout",this.keyFocusOutListener,this),this.hasKeyboardHandlers=!1)},removeFullscreenEventHandlers:function(){var t,e=["fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange"],r=e.length;if(this.hasFullscreenEventHandlers&&env_default.isBrowser){for(t=0;t<r;t++)env_default.removeEvent(this.document,e[t],this.fullscreenListener,this);this.hasFullscreenEventHandlers=!1}},removePointerEventHandlers:function(){if(this.hasPointerHandlers&&env_default.isBrowser){var t=this.attr.movetarget||this.containerObj;window.navigator.msPointerEnabled?(env_default.removeEvent(t,"MSPointerDown",this.pointerDownListener,this),env_default.removeEvent(t,"MSPointerMove",this.pointerMoveListener,this)):(env_default.removeEvent(t,"pointerdown",this.pointerDownListener,this),env_default.removeEvent(t,"pointermove",this.pointerMoveListener,this),env_default.removeEvent(t,"pointerleave",this.pointerLeaveListener,this),env_default.removeEvent(t,"click",this.pointerClickListener,this),env_default.removeEvent(t,"dblclick",this.pointerDblClickListener,this)),this.hasWheelHandlers&&(env_default.removeEvent(this.containerObj,"mousewheel",this.mouseWheelListener,this),env_default.removeEvent(this.containerObj,"DOMMouseScroll",this.mouseWheelListener,this)),this.hasPointerUp&&(window.navigator.msPointerEnabled?env_default.removeEvent(this.document,"MSPointerUp",this.pointerUpListener,this):(env_default.removeEvent(this.document,"pointerup",this.pointerUpListener,this),env_default.removeEvent(this.document,"pointercancel",this.pointerUpListener,this)),this.hasPointerUp=!1),this.hasPointerHandlers=!1}},removeMouseEventHandlers:function(){if(this.hasMouseHandlers&&env_default.isBrowser){var t=this.attr.movetarget||this.containerObj;env_default.removeEvent(t,"mousedown",this.mouseDownListener,this),env_default.removeEvent(t,"mousemove",this.mouseMoveListener,this),env_default.removeEvent(t,"click",this.mouseClickListener,this),env_default.removeEvent(t,"dblclick",this.mouseDblClickListener,this),this.hasMouseUp&&(env_default.removeEvent(this.document,"mouseup",this.mouseUpListener,this),this.hasMouseUp=!1),this.hasWheelHandlers&&(env_default.removeEvent(this.containerObj,"mousewheel",this.mouseWheelListener,this),env_default.removeEvent(this.containerObj,"DOMMouseScroll",this.mouseWheelListener,this)),this.hasMouseHandlers=!1}},removeTouchEventHandlers:function(){if(this.hasTouchHandlers&&env_default.isBrowser){var t=this.attr.movetarget||this.containerObj;env_default.removeEvent(t,"touchstart",this.touchStartListener,this),env_default.removeEvent(t,"touchmove",this.touchMoveListener,this),this.hasTouchEnd&&(env_default.removeEvent(this.document,"touchend",this.touchEndListener,this),this.hasTouchEnd=!1),this.hasTouchHandlers=!1}},clickLeftArrow:function(){return this.moveOrigin(this.origin.scrCoords[1]+this.canvasWidth*.1,this.origin.scrCoords[2]),this},clickRightArrow:function(){return this.moveOrigin(this.origin.scrCoords[1]-this.canvasWidth*.1,this.origin.scrCoords[2]),this},clickUpArrow:function(){return this.moveOrigin(this.origin.scrCoords[1],this.origin.scrCoords[2]-this.canvasHeight*.1),this},clickDownArrow:function(){return this.moveOrigin(this.origin.scrCoords[1],this.origin.scrCoords[2]+this.canvasHeight*.1),this},gestureChangeListener:function(t){var e,r=[],s=[],o,a=10,n=!1,l=this.attr.zoom.factorx,h=this.attr.zoom.factory,d,u,c,p,f,_=!1,g,m,b,C;return this.mode!==this.BOARD_MODE_ZOOM?!0:(t.preventDefault(),u=geometry_default.distance([t.touches[0].clientX,t.touches[0].clientY],[t.touches[1].clientX,t.touches[1].clientY],2),t.scale===void 0&&(t.scale=u/this.prevDist),!type_default.exists(this.prevCoords)||(r=[t.touches[0].clientX-this.prevCoords[0][0],t.touches[0].clientY-this.prevCoords[0][1]],s=[t.touches[1].clientX-this.prevCoords[1][0],t.touches[1].clientY-this.prevCoords[1][1]],r[0]*r[0]+r[1]*r[1]<a*a&&s[0]*s[0]+s[1]*s[1]<a*a)||(o=geometry_default.rad(r,[0,0],s),this.isPreviousGesture!=="pan"&&Math.abs(o)>Math.PI*.2&&Math.abs(o)<Math.PI*1.8&&(n=!0),this.isPreviousGesture!=="pan"&&!n&&(Math.abs(t.scale)<.77||Math.abs(t.scale)>1.3)&&(n=!0),d=t.scale/this.prevScale,this.prevScale=t.scale,this.prevCoords=[[t.touches[0].clientX,t.touches[0].clientY],[t.touches[1].clientX,t.touches[1].clientY]],e=new coords_default(constants.COORDS_BY_SCREEN,this.getMousePosition(t,0),this),this.attr.pan.enabled&&this.attr.pan.needtwofingers&&!n?(this.isPreviousGesture="pan",this.moveOrigin(e.scrCoords[1],e.scrCoords[2],!0)):this.attr.zoom.enabled&&Math.abs(d-1)<.5&&(_=!1,f=this.attr.zoom.center,(this.attr.zoom.pinchhorizontal||this.attr.zoom.pinchvertical)&&(g=Math.abs(t.touches[0].clientX-t.touches[1].clientX),m=Math.abs(t.touches[0].clientY-t.touches[1].clientY),c=Math.abs(Math.atan2(m,g)),p=Math.PI*this.attr.zoom.pinchsensitivity/90),!this.keepaspectratio&&this.attr.zoom.pinchhorizontal&&c<p?(this.attr.zoom.factorx=d,this.attr.zoom.factory=1,b=0,C=0,_=!0):!this.keepaspectratio&&this.attr.zoom.pinchvertical&&Math.abs(c-Math.PI*.5)<p?(this.attr.zoom.factorx=1,this.attr.zoom.factory=d,b=0,C=0,_=!0):this.attr.zoom.pinch&&(this.attr.zoom.factorx=d,this.attr.zoom.factory=d,b=e.usrCoords[1],C=e.usrCoords[2],_=!0),_&&(f==="board"?this.zoomIn():this.zoomIn(b,C),this.attr.zoom.factorx=l,this.attr.zoom.factory=h))),!1)},gestureStartListener:function(t){var e;return t.preventDefault(),this.prevScale=1,this.prevDist=geometry_default.distance([t.touches[0].clientX,t.touches[0].clientY],[t.touches[1].clientX,t.touches[1].clientY],2),this.prevCoords=[[t.touches[0].clientX,t.touches[0].clientY],[t.touches[1].clientX,t.touches[1].clientY]],this.isPreviousGesture="none",e=this.getMousePosition(t,0),this.initMoveOrigin(e[0],e[1]),this.mode=this.BOARD_MODE_ZOOM,this._change3DView=!1,!1},_isRequiredKeyPressed:function(t,e){var r=this.attr[e];return r.enabled?!!((r.needshift&&t.shiftKey||!r.needshift&&!t.shiftKey)&&(r.needctrl&&t.ctrlKey||!r.needctrl&&!t.ctrlKey)):!1},_isPointerRegistered:function(t){var e,r=this._board_touches.length;for(e=0;e<r;e++)if(this._board_touches[e].pointerId===t.pointerId)return!0;return!1},_pointerStorePosition:function(t){for(var e=0,r=!1;e<this._board_touches.length;e++)if(this._board_touches[e].pointerId===t.pointerId){this._board_touches[e].clientX=t.clientX,this._board_touches[e].clientY=t.clientY,r=!0;break}return!r&&this._board_touches.length<2&&this._board_touches.push({pointerId:t.pointerId,clientX:t.clientX,clientY:t.clientY}),this},_pointerRemoveTouches:function(t){for(var e=0;e<this._board_touches.length;e++)if(this._board_touches[e].pointerId===t.pointerId){this._board_touches.splice(e,1);break}return this},_pointerClearTouches:function(t){this._board_touches.length>0&&this.dehighlightAll(),this.updateQuality=this.BOARD_QUALITY_HIGH,this.mode=this.BOARD_MODE_NONE,this._board_touches=[],this.touches=[]},_getPointerInputDevice:function(t){if(env_default.isBrowser){if(t.pointerType==="touch"||window.navigator.msMaxTouchPoints&&window.navigator.msMaxTouchPoints>1)return"touch";if(t.pointerType==="mouse")return"mouse";if(t.pointerType==="pen")return"pen"}return"mouse"},pointerDownListener:function(t,e,r){var s,o,a,n,l,h,d,u="mouse",c,p,f;if(!e&&this._isPointerRegistered(t))return!1;if(type_default.evaluate(this.attr.movetarget)===null&&type_default.exists(t.target)&&type_default.exists(t.target.releasePointerCapture)&&t.target.releasePointerCapture(t.pointerId),!e&&t.isPrimary,this.hasPointerUp||(window.navigator.msPointerEnabled?env_default.addEvent(this.document,"MSPointerUp",this.pointerUpListener,this):(env_default.addEvent(this.document,"pointerup",this.pointerUpListener,this),env_default.addEvent(this.document,"pointercancel",this.pointerUpListener,this)),this.hasPointerUp=!0),this.hasMouseHandlers&&this.removeMouseEventHandlers(),this.hasTouchHandlers&&this.removeTouchEventHandlers(),this.document.selection&&type_default.isFunction(this.document.selection.empty))this.document.selection.empty();else if(window.getSelection&&(h=window.getSelection(),h.removeAllRanges))try{h.removeAllRanges()}catch{}if(this._inputDevice=this._getPointerInputDevice(t),u=this._inputDevice,this.options.precision.hasPoint=this.options.precision[u],n=this.getMousePosition(t),this._testForSelection(t),this.selectingMode){this._startSelecting(n),this.triggerEventHandlers(["touchstartselecting","pointerstartselecting","startselecting"],[t]);return}if(this.attr.drag.enabled&&e?(l=[e],this.mode=this.BOARD_MODE_DRAG):l=this.initMoveObject(n[0],n[1],t,u),d={num:t.pointerId,X:n[0],Y:n[1],Xprev:NaN,Yprev:NaN,Xstart:[],Ystart:[],Zstart:[]},l.length>0){for(p=l[l.length-1],c=!1,s=0;s<this.touches.length;s++)if(this.touches[s].obj===p){o=s,a=this.touches[s].targets.push(d)-1,c=!0;break}c||(a=0,o=this.touches.push({obj:p,targets:[d]})-1),this.dehighlightAll(),p.highlight(!0),this.saveStartPos(p,this.touches[o].targets[a]),t&&t.preventDefault&&!r&&t.preventDefault()}return this.touches.length>0&&!r&&(t.preventDefault(),t.stopPropagation()),env_default.isBrowser?(this._getPointerInputDevice(t)!=="touch"?this.mode===this.BOARD_MODE_NONE&&this.mouseOriginMoveStart(t):(this._pointerStorePosition(t),t.touches=this._board_touches,t.touches.length===1&&this.mode===this.BOARD_MODE_NONE&&this.touchStartMoveOriginOneFinger(t)||t.touches.length===2&&(this.mode===this.BOARD_MODE_NONE||this.mode===this.BOARD_MODE_MOVE_ORIGIN)&&(this.mode===this.BOARD_MODE_MOVE_ORIGIN&&this.originMoveEnd(),this.gestureStartListener(t))),this.initSketchCurve(t),f="none",this.mode===this.BOARD_MODE_NONE&&(type_default.evaluate(this.attr.browserpan)===!0||type_default.evaluate(this.attr.browserpan.enabled)===!0)&&(type_default.evaluate(this.attr.pan.enabled)===!1||type_default.evaluate(this.attr.pan.needtwofingers)===!0)&&(f="auto"),this.containerObj.style.touchAction=f,this.triggerEventHandlers(["touchstart","down","pointerdown","MSPointerDown"],[t]),!0):!1},_handleClicks:function(t,e){var r=this,s,o,a;if(this.selectingMode){t.stopPropagation();return}if(o=type_default.evaluate(this.attr.clickdelay),a=type_default.evaluate(this.attr.dblclicksuppressclick),a)this._preventSingleClick=!1,this._singleClickTimer=setTimeout(function(){if(!r._preventSingleClick){r.triggerEventHandlers(e,[t]);for(s in r.clickObjects)r.clickObjects.hasOwnProperty(s)&&(r.clickObjects[s].triggerEventHandlers(e,[t]),delete r.clickObjects[s])}},o);else{r.triggerEventHandlers(e,[t]);for(s in r.clickObjects)r.clickObjects.hasOwnProperty(s)&&r.clickObjects[s].triggerEventHandlers(e,[t]);setTimeout(function(){for(s in r.clickObjects)r.clickObjects.hasOwnProperty(s)&&delete r.clickObjects[s]},o)}t.stopPropagation()},_handleDblClicks:function(t,e){var r;if(this.selectingMode){t.stopPropagation();return}this._preventSingleClick=!0,clearTimeout(this._singleClickTimer),this.triggerEventHandlers(e,[t]);for(r in this.clickObjects)this.clickObjects.hasOwnProperty(r)&&(this.clickObjects[r].triggerEventHandlers(e,[t]),delete this.clickObjects[r]);t.stopPropagation()},pointerClickListener:function(t){this._handleClicks(t,["click","pointerclick"])},pointerDblClickListener:function(t){this._handleDblClicks(t,["dblclick","pointerdblclick"])},mouseClickListener:function(t){this._handleClicks(t,["click","mouseclick"])},mouseDblClickListener:function(t){this._handleDblClicks(t,["dblclick","mousedblclick"])},pointerMoveListener:function(t){var e,r,s,o,a,n="mouse";if(this._getPointerInputDevice(t)==="touch"&&!this._isPointerRegistered(t))return this.BOARD_MODE_NONE;if(!this.checkFrameRate(t))return!1;if(this.mode!==this.BOARD_MODE_DRAG&&(this.dehighlightAll(),this.displayInfobox(!1)),this.mode!==this.BOARD_MODE_NONE&&(t.preventDefault(),t.stopPropagation()),this.updateQuality=this.BOARD_QUALITY_LOW,this._inputDevice=this._getPointerInputDevice(t),n=this._inputDevice,this.options.precision.hasPoint=this.options.precision[n],o=this.options.precision.hasPoint*.3333,s=this.getMousePosition(t),type_default.evaluate(this.attr.movetarget)===null&&(s[0]<=o||s[1]<=o||s[0]>=this.canvasWidth-o||s[1]>=this.canvasHeight-o))return this.mode===this.BOARD_MODE_NONE;if(this.selectingMode)this._moveSelecting(s),this.triggerEventHandlers(["touchmoveselecting","moveselecting","pointermoveselecting"],[t,this.mode]);else if(!this.mouseOriginMove(t))if(this.addToSketchCurve(t),this.mode===this.BOARD_MODE_DRAG){for(e=0;e<this.touches.length;e++)for(a=this.touches[e].targets,r=0;r<a.length;r++)if(a[r].num===t.pointerId){a[r].X=s[0],a[r].Y=s[1],a.length===1?this.moveObject(s[0],s[1],this.touches[e],t,n):a.length===2&&(this.twoFingerMove(this.touches[e],t.pointerId,t),a[r].Xprev=s[0],a[r].Yprev=s[1]);break}}else this._getPointerInputDevice(t)==="touch"&&(this._pointerStorePosition(t),this._board_touches.length===2&&(t.touches=this._board_touches,this.gestureChangeListener(t))),this.highlightElements(s[0],s[1],t,-1);return this.triggerEventHandlers(["pointermove","MSPointerMove","move"],[t,this.mode]),this.updateQuality=this.BOARD_QUALITY_HIGH,this.mode===this.BOARD_MODE_NONE},pointerUpListener:function(t){var e,r,s,o,a,n=!1;if(this.triggerEventHandlers(["touchend","up","pointerup","MSPointerUp"],[t]),this.displayInfobox(!1),t){for(e=0;e<this.touches.length;e++)for(a=this.touches[e].targets,r=0;r<a.length;r++)if(a[r].num===t.pointerId){a.splice(r,1),a.length===0&&this.touches.splice(e,1);break}}if(this.finalizeSketchCurve(t),this.originMoveEnd(),this.update(),this.selectingMode)this._stopSelecting(t),this.triggerEventHandlers(["touchstopselecting","pointerstopselecting","stopselecting"],[t]),this.stopSelectionMode();else for(e=this.downObjects.length-1;e>-1;e--){for(s=!1,r=0;r<this.touches.length;r++)this.touches[r].obj.id===this.downObjects[e].id&&(s=!0);s||(this.downObjects[e].triggerEventHandlers(["touchend","up","pointerup","MSPointerUp"],[t]),type_default.exists(this.downObjects[e].coords)||(this.downObjects[e].snapToGrid(),this.downObjects[e].snapToPoints(),n=!0),o=this.downObjects[e].eventHandlers,(type_default.exists(o.click)&&o.click.length>0||type_default.exists(o.pointerclick)&&o.pointerclick.length>0||type_default.exists(o.dblclick)&&o.dblclick.length>0||type_default.exists(o.pointerdblclick)&&o.pointerdblclick.length>0)&&(this.clickObjects[this.downObjects[e].id]=this.downObjects[e]),this.downObjects.splice(e,1))}return this.hasPointerUp&&(window.navigator.msPointerEnabled?env_default.removeEvent(this.document,"MSPointerUp",this.pointerUpListener,this):(env_default.removeEvent(this.document,"pointerup",this.pointerUpListener,this),env_default.removeEvent(this.document,"pointercancel",this.pointerUpListener,this)),this.hasPointerUp=!1),this._pointerClearTouches(t.pointerId),this._getPointerInputDevice(t)!=="touch"&&this.dehighlightAll(),n&&this.update(),!0},pointerLeaveListener:function(t){return this.displayInfobox(!1),this.dehighlightAll(),!0},touchStartListener:function(t){var e,r,s,o,a,n,l=this.options.precision.touch,h=t.touches,d,u,c,p;for(this.hasTouchEnd||(env_default.addEvent(this.document,"touchend",this.touchEndListener,this),this.hasTouchEnd=!0),this.document.selection&&type_default.isFunction(this.document.selection.empty)?this.document.selection.empty():window.getSelection&&window.getSelection().removeAllRanges(),this._inputDevice="touch",this.options.precision.hasPoint=this.options.precision.touch,e=0;e<h.length;e++)h[e].jxg_isused=!1;for(e=0;e<this.touches.length;e++)for(p=this.touches[e].targets,r=0;r<p.length;r++){p[r].num=-1,l=this.options.precision.touch;do{for(s=0;s<h.length;s++)if(Math.abs(Math.pow(h[s].screenX-p[r].X,2)+Math.pow(h[s].screenY-p[r].Y,2))<l*l){p[r].num=s,p[r].X=h[s].screenX,p[r].Y=h[s].screenY,h[s].jxg_isused=!0;break}l*=2}while(p[r].num===-1&&l<this.options.precision.touchMax);p[r].num===-1&&(jxg_default.debug("i couldn't find a targettouches for target no "+r+" on "+this.touches[e].obj.name+" ("+this.touches[e].obj.id+"). Removed the target."),jxg_default.debug("eps = "+l+", touchMax = "+options_default.precision.touchMax),p.splice(e,1))}for(e=0;e<h.length;e++)if(!h[e].jxg_isused){if(o=this.getMousePosition(t,e),this.selectingMode)return this._startSelecting(o),this.triggerEventHandlers(["touchstartselecting","startselecting"],[t]),t.preventDefault(),t.stopPropagation(),this.options.precision.hasPoint=this.options.precision.mouse,this.touches.length>0;if(a=this.initMoveObject(o[0],o[1],t,"touch"),a.length!==0){if(n=a[a.length-1],c={num:e,X:h[e].screenX,Y:h[e].screenY,Xprev:NaN,Yprev:NaN,Xstart:[],Ystart:[],Zstart:[]},type_default.isPoint(n)||n.elementClass===constants.OBJECT_CLASS_TEXT||n.type===constants.OBJECT_TYPE_TICKS||n.type===constants.OBJECT_TYPE_IMAGE)u=[c],this.saveStartPos(n,u[0]),this.touches.push({obj:n,targets:u}),n.highlight(!0);else if(n.elementClass===constants.OBJECT_CLASS_LINE||n.elementClass===constants.OBJECT_CLASS_CIRCLE||n.elementClass===constants.OBJECT_CLASS_CURVE||n.type===constants.OBJECT_TYPE_POLYGON){for(d=!1,r=0;r<this.touches.length;r++)n.id===this.touches[r].obj.id&&(d=!0,this.touches[r].targets.length===1&&(this.saveStartPos(n,c),this.touches[r].targets.push(c)),h[e].jxg_isused=!0);d||(u=[c],this.saveStartPos(n,u[0]),this.touches.push({obj:n,targets:u}),n.highlight(!0))}}h[e].jxg_isused=!0}return this.touches.length>0&&(t.preventDefault(),t.stopPropagation()),h.length===1&&this.mode===this.BOARD_MODE_NONE&&this.touchStartMoveOriginOneFinger(t)||h.length===2&&(this.mode===this.BOARD_MODE_NONE||this.mode===this.BOARD_MODE_MOVE_ORIGIN)&&(this.mode===this.BOARD_MODE_MOVE_ORIGIN&&this.originMoveEnd(),this.gestureStartListener(t)),this.initSketchCurve(t),this.options.precision.hasPoint=this.options.precision.mouse,this.triggerEventHandlers(["touchstart","down"],[t]),!1},touchMoveListener:function(t){var e,r,s,o,a=t.touches;if(!this.checkFrameRate(t))return!1;if(this.mode!==this.BOARD_MODE_NONE&&(t.preventDefault(),t.stopPropagation()),this.mode!==this.BOARD_MODE_DRAG&&(this.dehighlightAll(),this.displayInfobox(!1)),this._inputDevice="touch",this.options.precision.hasPoint=this.options.precision.touch,this.updateQuality=this.BOARD_QUALITY_LOW,this.selectingMode){for(e=0;e<a.length;e++)if(!a[e].jxg_isused){r=this.getMousePosition(t,e),this._moveSelecting(r),this.triggerEventHandlers(["touchmoves","moveselecting"],[t,this.mode]);break}}else if(!this.touchOriginMove(t))if(this.addToSketchCurve(t),this.mode===this.BOARD_MODE_DRAG){for(e=0;e<this.touches.length;e++)if(o=this.touches[e].targets,o.length===1){if(a[o[0].num]){if(r=this.getMousePosition(t,o[0].num),r[0]<0||r[0]>this.canvasWidth||r[1]<0||r[1]>this.canvasHeight)return;o[0].X=r[0],o[0].Y=r[1],this.moveObject(r[0],r[1],this.touches[e],t,"touch")}}else if(o.length===2&&o[0].num>-1&&o[1].num>-1&&a[o[0].num]&&a[o[1].num]){if(r=this.getMousePosition(t,o[0].num),s=this.getMousePosition(t,o[1].num),r[0]<0||r[0]>this.canvasWidth||r[1]<0||r[1]>this.canvasHeight||s[0]<0||s[0]>this.canvasWidth||s[1]<0||s[1]>this.canvasHeight)return;o[0].X=r[0],o[0].Y=r[1],o[1].X=s[0],o[1].Y=s[1],this.twoFingerMove(this.touches[e],o[0].num,t),o[0].Xprev=r[0],o[0].Yprev=r[1],o[1].Xprev=s[0],o[1].Yprev=s[1]}}else a.length===2&&this.gestureChangeListener(t),r=this.getMousePosition(t,0),this.highlightElements(r[0],r[1],t,-1);return this.mode!==this.BOARD_MODE_DRAG&&this.displayInfobox(!1),this.triggerEventHandlers(["touchmove","move"],[t,this.mode]),this.options.precision.hasPoint=this.options.precision.mouse,this.updateQuality=this.BOARD_QUALITY_HIGH,this.mode===this.BOARD_MODE_NONE},touchEndListener:function(t){var e,r,s,o=this.options.precision.touch,a=[],n,l,h=t&&t.touches,d,u=!1;if(this.triggerEventHandlers(["touchend","up"],[t]),this.displayInfobox(!1),this.finalizeSketchCurve(t),this.selectingMode)this._stopSelecting(t),this.triggerEventHandlers(["touchstopselecting","stopselecting"],[t]),this.stopSelectionMode();else if(h&&h.length>0){for(e=0;e<this.touches.length;e++)a[e]=this.touches[e];for(this.touches.length=0,e=0;e<h.length;e++)h[e].jxg_isused=!1;for(e=0;e<a.length;e++){for(n=!1,l=0,d=a[e].targets,r=0;r<d.length;r++)for(d[r].found=!1,s=0;s<h.length;s++)if(Math.abs(Math.pow(h[s].screenX-d[r].X,2)+Math.pow(h[s].screenY-d[r].Y,2))<o*o){d[r].found=!0,d[r].num=s,d[r].X=h[s].screenX,d[r].Y=h[s].screenY,l+=1;break}if(type_default.isPoint(a[e].obj)?n=d[0]&&d[0].found:a[e].obj.elementClass===constants.OBJECT_CLASS_LINE?n=d[0]&&d[0].found||d[1]&&d[1].found:a[e].obj.elementClass===constants.OBJECT_CLASS_CIRCLE&&(n=l===1||l===3),n)for(this.touches.push({obj:a[e].obj,targets:[]}),r=0;r<d.length;r++)d[r].found&&this.touches[this.touches.length-1].targets.push({num:d[r].num,X:d[r].screenX,Y:d[r].screenY,Xprev:NaN,Yprev:NaN,Xstart:d[r].Xstart,Ystart:d[r].Ystart,Zstart:d[r].Zstart});else a[e].obj.noHighlight()}}else this.touches.length=0;for(e=this.downObjects.length-1;e>-1;e--){for(n=!1,r=0;r<this.touches.length;r++)this.touches[r].obj.id===this.downObjects[e].id&&(n=!0);n||(this.downObjects[e].triggerEventHandlers(["touchup","up"],[t]),type_default.exists(this.downObjects[e].coords)||(this.downObjects[e].snapToGrid(),this.downObjects[e].snapToPoints(),u=!0),this.downObjects.splice(e,1))}return(!h||h.length===0)&&(this.hasTouchEnd&&(env_default.removeEvent(this.document,"touchend",this.touchEndListener,this),this.hasTouchEnd=!1),this.dehighlightAll(),this.updateQuality=this.BOARD_QUALITY_HIGH,this.originMoveEnd(),u&&this.update()),!0},mouseDownListener:function(t){var e,r,s;if(this.document.selection&&type_default.isFunction(this.document.selection.empty)?this.document.selection.empty():window.getSelection&&window.getSelection().removeAllRanges(),!this.hasMouseUp)env_default.addEvent(this.document,"mouseup",this.mouseUpListener,this),this.hasMouseUp=!0;else return;if(this._inputDevice="mouse",this.options.precision.hasPoint=this.options.precision.mouse,e=this.getMousePosition(t),this._testForSelection(t),this.selectingMode){this._startSelecting(e),this.triggerEventHandlers(["mousestartselecting","startselecting"],[t]);return}return r=this.initMoveObject(e[0],e[1],t,"mouse"),r.length===0?(this.mode=this.BOARD_MODE_NONE,s=!0):(this.mouse={obj:null,targets:[{X:e[0],Y:e[1],Xprev:NaN,Yprev:NaN}]},this.mouse.obj=r[r.length-1],this.dehighlightAll(),this.mouse.obj.highlight(!0),this.mouse.targets[0].Xstart=[],this.mouse.targets[0].Ystart=[],this.mouse.targets[0].Zstart=[],this.saveStartPos(this.mouse.obj,this.mouse.targets[0]),t&&t.preventDefault?t.preventDefault():window.event&&(window.event.returnValue=!1)),this.mode===this.BOARD_MODE_NONE&&(s=this.mouseOriginMoveStart(t)),this.initSketchCurve(t),this.triggerEventHandlers(["mousedown","down"],[t]),s},mouseMoveListener:function(t){var e;if(!this.checkFrameRate(t))return!1;e=this.getMousePosition(t),this.updateQuality=this.BOARD_QUALITY_LOW,this.mode!==this.BOARD_MODE_DRAG&&(this.dehighlightAll(),this.displayInfobox(!1)),this.selectingMode?(this._moveSelecting(e),this.triggerEventHandlers(["mousemoveselecting","moveselecting"],[t,this.mode])):this.mouseOriginMove(t)||(this.addToSketchCurve(t),this.mode===this.BOARD_MODE_DRAG?this.moveObject(e[0],e[1],this.mouse,t,"mouse"):this.highlightElements(e[0],e[1],t,-1),this.triggerEventHandlers(["mousemove","move"],[t,this.mode])),this.updateQuality=this.BOARD_QUALITY_HIGH},mouseUpListener:function(t){var e;if(this.selectingMode===!1&&this.triggerEventHandlers(["mouseup","up"],[t]),this.updateQuality=this.BOARD_QUALITY_HIGH,this.mouse&&this.mouse.obj&&(type_default.exists(this.mouse.obj.coords)||(this.mouse.obj.snapToGrid(this.mouse.targets[0]),this.mouse.obj.snapToPoints())),this.finalizeSketchCurve(t),this.originMoveEnd(),this.dehighlightAll(),this.update(),this.selectingMode)this._stopSelecting(t),this.triggerEventHandlers(["mousestopselecting","stopselecting"],[t]),this.stopSelectionMode();else for(e=0;e<this.downObjects.length;e++)this.downObjects[e].triggerEventHandlers(["mouseup","up"],[t]);this.downObjects.length=0,this.hasMouseUp&&(env_default.removeEvent(this.document,"mouseup",this.mouseUpListener,this),this.hasMouseUp=!1),this.mouse=null},mouseWheelListener:function(t){var e,r,s;return!this.attr.zoom.enabled||!this.attr.zoom.wheel||!this._isRequiredKeyPressed(t,"zoom")?!0:(t=t||window.event,e=t.detail?-t.detail:t.wheelDelta/40,r=this.attr.zoom.center,r==="board"?s=[]:s=new coords_default(constants.COORDS_BY_SCREEN,this.getMousePosition(t),this).usrCoords,e>0?this.zoomIn(s[1],s[2]):this.zoomOut(s[1],s[2]),this.triggerEventHandlers(["mousewheel"],[t]),t.preventDefault(),!1)},keyDownListener:function(t){var e=t.target.id,r,s,o,a,n=0,l=0,h=type_default.evaluate(this.attr.keyboard.dx)/this.unitX,d=type_default.evaluate(this.attr.keyboard.dy)/this.unitY,u=!1,c=!0,p,f;return!this.attr.keyboard.enabled||e===""||t.keyCode===9||(a=this.containerObj.shadowRoot||document,a.activeElement&&(s=a.activeElement,s.tagName==="INPUT"||s.tagName==="textarea"))?!1:(r=e.replace(this.containerObj.id+"_",""),s=this.select(r),type_default.exists(s.coords)&&(f=s.coords.usrCoords.slice(1)),type_default.evaluate(this.attr.keyboard.panshift)&&t.shiftKey||type_default.evaluate(this.attr.keyboard.panctrl)&&t.ctrlKey?(type_default.evaluate(this.attr.zoom.enabled)===!0&&(u=!0),t.keyCode===38?this.clickUpArrow():t.keyCode===40?this.clickDownArrow():t.keyCode===37?this.clickLeftArrow():t.keyCode===39?this.clickRightArrow():u&&t.keyCode===171?this.zoomIn():u&&t.keyCode===173?this.zoomOut():u&&t.keyCode===79?this.zoom100():c=!1):!t.shiftKey&&!t.ctrlKey&&(type_default.exists(s.visProp)&&(type_default.exists(s.visProp.snaptogrid)&&s.visProp.snaptogrid&&s.evalVisProp("snapsizex")&&s.evalVisProp("snapsizey")?(o=s.getSnapSizes(),n=o[0],l=o[1],h=n,d=l):type_default.exists(s.visProp.attracttogrid)&&s.visProp.attracttogrid&&s.evalVisProp("attractordistance")&&s.evalVisProp("attractorunit")&&(n=1.1*s.evalVisProp("attractordistance"),l=n,s.evalVisProp("attractorunit")==="screen"&&(n/=this.unitX,l/=this.unitX),h=Math.max(n,h),d=Math.max(l,d))),t.keyCode===38?p=[0,d]:t.keyCode===40?p=[0,-d]:t.keyCode===37?p=[-h,0]:t.keyCode===39?p=[h,0]:c=!1,p&&s.isDraggable&&s.visPropCalc.visible&&(this.geonextCompatibilityMode&&(type_default.isPoint(s)||s.elementClass===constants.OBJECT_CLASS_TEXT)||!this.geonextCompatibilityMode)&&!s.evalVisProp("fixed")&&(this.mode=this.BOARD_MODE_DRAG,type_default.exists(s.coords)&&(p[0]+=f[0],p[1]+=f[1]),type_default.exists(s.coords)?(s.setPosition(jxg_default.COORDS_BY_USER,p),this.updateInfobox(s)):(this.displayInfobox(!1),s.setPositionDirectly(constants.COORDS_BY_USER,p,[0,0])),this.triggerEventHandlers(["keymove","move"],[t,this.mode]),s.triggerEventHandlers(["keydrag","drag"],[t]),this.mode=this.BOARD_MODE_NONE)),this.update(),c&&type_default.exists(t.preventDefault)&&t.preventDefault(),c)},keyFocusInListener:function(t){var e=t.target.id,r,s;if(!this.attr.keyboard.enabled||e==="")return!1;r=e.replace(this.containerObj.id+"_",""),s=this.select(r),type_default.exists(s.highlight)&&(s.highlight(!0),this.focusObjects=[r],s.triggerEventHandlers(["hit"],[t])),type_default.exists(s.coords)&&this.updateInfobox(s)},keyFocusOutListener:function(t){if(!this.attr.keyboard.enabled)return!1;this.focusObjects=[],this.dehighlightAll(),this.displayInfobox(!1)},updateContainerDims:function(t,e){var r=t,s=e,o,a,n;return t===void 0&&(r=this.containerObj.offsetWidth,s=this.containerObj.offsetHeight),t===void 0&&window&&window.getComputedStyle&&(o=window.getComputedStyle(this.containerObj,null),a=parseFloat(o.getPropertyValue("border-left-width"))+parseFloat(o.getPropertyValue("border-right-width")),isNaN(a)||(r-=a),n=parseFloat(o.getPropertyValue("border-top-width"))+parseFloat(o.getPropertyValue("border-bottom-width")),isNaN(n)||(s-=n)),r<=0||s<=0||isNaN(r)||isNaN(s)?this:(isNaN(this.getBoundingBox()[0])&&this.setBoundingBox(this.attr.boundingbox,this.keepaspectratio,"keep"),type_default.exists(this._prevDim)&&this._prevDim.w===r&&this._prevDim.h===s?this:(this.resizeContainer(r,s,!0),this._prevDim={w:r,h:s},this))},startResizeObserver:function(){var t=this;!env_default.isBrowser||!this.attr.resize||!this.attr.resize.enabled||(this.resizeObserver=new ResizeObserver(function(e){var r;t._isResizing||(t._isResizing=!0,r=e[0].contentRect,window.setTimeout(function(){try{t.updateContainerDims(r.width,r.height)}catch(s){jxg_default.debug(s),t.stopResizeObserver()}finally{t._isResizing=!1}},t.attr.resize.throttle))}),this.resizeObserver.observe(this.containerObj))},stopResizeObserver:function(){!env_default.isBrowser||!this.attr.resize||!this.attr.resize.enabled||type_default.exists(this.resizeObserver)&&this.resizeObserver.unobserve(this.containerObj)},resizeListener:function(){var t=this;!env_default.isBrowser||!this.attr.resize||!this.attr.resize.enabled||!this._isScrolling&&!this._isResizing&&(this._isResizing=!0,window.setTimeout(function(){t.updateContainerDims(),t._isResizing=!1},this.attr.resize.throttle))},scrollListener:function(t){var e=this;env_default.isBrowser&&(this._isScrolling||(this._isScrolling=!0,window.setTimeout(function(){e._isScrolling=!1},66)))},startIntersectionObserver:function(){var t=this,e={root:null,rootMargin:"0px",threshold:.8};try{this.intersectionObserver=new IntersectionObserver(function(r){isNaN(t.getBoundingBox()[0])&&t.updateContainerDims()},e),this.intersectionObserver.observe(t.containerObj)}catch{jxg_default.debug("JSXGraph: IntersectionObserver not available in this browser.")}},stopIntersectionObserver:function(){type_default.exists(this.intersectionObserver)&&this.intersectionObserver.unobserve(this.containerObj)},printListener:function(t){this.updateContainerDims()},printListenerMatch:function(t){t.matches&&this.printListener()},initInfobox:function(t){var e=type_default.copyAttributes(t,this.options,"infobox");return e.id=this.id+"_infobox",this.infobox=this.create("text",[0,0,"0,0"],e),this.infobox.dump=!1,this.displayInfobox(!1),this},updateInfobox:function(t){var e,r,s,o,a,n,l,h=t.evalVisProp("showinfobox");return!type_default.evaluate(this.attr.showinfobox)&&h==="inherit"||!h?this:(type_default.isPoint(t)&&(s=t.coords.usrCoords[1],o=t.coords.usrCoords[2],n=this.infobox.evalVisProp("distancex"),l=this.infobox.evalVisProp("distancey"),this.infobox.setCoords(s+n/this.unitX,o+l/this.unitY),a=t.evalVisProp("infoboxdigits"),typeof t.infoboxText!="string"?(a==="auto"?this.infobox.useLocale()?(e=this.infobox.formatNumberLocale(s),r=this.infobox.formatNumberLocale(o)):(e=type_default.autoDigits(s),r=type_default.autoDigits(o)):type_default.isNumber(a)?this.infobox.useLocale()?(e=this.infobox.formatNumberLocale(s,a),r=this.infobox.formatNumberLocale(o,a)):(e=type_default.toFixed(s,a),r=type_default.toFixed(o,a)):(e=s,r=o),this.highlightInfobox(e,r,t)):this.highlightCustomInfobox(t.infoboxText,t),this.displayInfobox(!0)),this)},displayInfobox:function(t){return!t&&this.focusObjects.length>0&&this.select(this.focusObjects[0]).elementClass===constants.OBJECT_CLASS_POINT?this:(this.infobox.hiddenByParent===t&&(this.infobox.hiddenByParent=!t,this.infobox.prepareUpdate().updateVisibility(t).updateRenderer()),this)},showInfobox:function(t){return this.displayInfobox(t)},highlightInfobox:function(t,e,r){return this.highlightCustomInfobox("("+t+", "+e+")",r),this},highlightCustomInfobox:function(t,e){return this.infobox.setText(t),this},dehighlightAll:function(){var t,e,r={},s=!1;for(t in this.highlightedObjects)this.highlightedObjects.hasOwnProperty(t)&&(e=this.highlightedObjects[t],this.focusObjects.indexOf(t)<0?((this.hasMouseHandlers||this.hasPointerHandlers)&&e.noHighlight(),s=!0):r[t]=e);return this.highlightedObjects=r,this.renderer.type==="canvas"&&s&&(this.prepareUpdate(),this.renderer.suspendRedraw(this),this.updateRenderer(),this.renderer.unsuspendRedraw()),this},getScrCoordsOfMouse:function(t,e){return[t,e]},getUsrCoordsOfMouse:function(t){var e=this.getCoordsTopLeftCorner(),r=env_default.getPosition(t,null,this.document),s=r[0]-e[0],o=r[1]-e[1];return new coords_default(constants.COORDS_BY_SCREEN,[s,o],this).usrCoords.slice(1)},getAllUnderMouse:function(t){var e=this.getAllObjectsUnderMouse(t);return e.push(this.getUsrCoordsOfMouse(t)),e},getAllObjectsUnderMouse:function(t){var e=this.getCoordsTopLeftCorner(),r=env_default.getPosition(t,null,this.document),s=r[0]-e[0],o=r[1]-e[1],a=[],n,l,h=this.objectsList.length;for(n=0;n<h;n++)l=this.objectsList[n],l.visPropCalc.visible&&l.hasPoint&&l.hasPoint(s,o)&&(a[a.length]=l);return a},updateCoords:function(){var t,e,r=this.objectsList.length;for(e=0;e<r;e++)t=this.objectsList[e],type_default.exists(t.coords)&&(t.evalVisProp("frozen")===!0?t.is3D?t.element2D.coords.screen2usr():t.coords.screen2usr():t.is3D?t.element2D.coords.usr2screen():(t.coords.usr2screen(),type_default.exists(t.actualCoords)&&t.actualCoords.usr2screen()));return this},moveOrigin:function(t,e,r){var s,o,a,n;return type_default.exists(t)&&type_default.exists(e)&&(s=this.origin.scrCoords[1],o=this.origin.scrCoords[2],this.origin.scrCoords[1]=t,this.origin.scrCoords[2]=e,r&&(this.origin.scrCoords[1]-=this.drag_dx,this.origin.scrCoords[2]-=this.drag_dy),a=new coords_default(constants.COORDS_BY_SCREEN,[0,0],this).usrCoords,n=new coords_default(constants.COORDS_BY_SCREEN,[this.canvasWidth,this.canvasHeight],this).usrCoords,(a[1]<this.maxboundingbox[0]-math_default.eps||a[2]>this.maxboundingbox[1]+math_default.eps||n[1]>this.maxboundingbox[2]+math_default.eps||n[2]<this.maxboundingbox[3]-math_default.eps)&&(this.origin.scrCoords[1]=s,this.origin.scrCoords[2]=o)),this.updateCoords().clearTraces().fullUpdate(),this.triggerEventHandlers(["boundingbox"]),this},addConditions:function(t){var e,r,s,o,a,n,l,h=[],d=t.indexOf("<data>"),u=t.indexOf("</data>"),c=function(m,b,C,y){return function(){var x=m.select(b.id),v=x.coords.usrCoords[y];y===2?x.setPositionDirectly(constants.COORDS_BY_USER,[C(),v]):x.setPositionDirectly(constants.COORDS_BY_USER,[v,C()]),x.prepareUpdate().update()}},p=function(m,b,C){return function(){var y=m.select(b.id),x=C();y.setAttribute({visible:x})}},f=function(m,b,C,y){return function(){var x=m.select(b.id),v=C();y==="strokewidth"?x.visProp.strokewidth=v:(v=color_default.rgba2rgbo(v),x.visProp[y+"color"]=v[0],x.visProp[y+"opacity"]=v[1])}},_=function(m,b,C){return function(){var y=m.select(b.id);y.position=C()}},g=function(m,b,C){return function(){m.select(b.id).setStyle(C())}};if(!(d<0)){for(;d>=0;){if(e=t.slice(d+6,u),r=e.indexOf("="),s=e.slice(0,r),o=e.slice(r+1),r=s.indexOf("."),a=s.slice(0,r),n=this.elementsByName[type_default.unescapeHTML(a)],l=s.slice(r+1).replace(/\s+/g,"").toLowerCase(),o=type_default.createFunction(o,this,"",!0),!type_default.exists(this.elementsByName[a]))jxg_default.debug("debug conditions: |"+a+"| undefined");else switch(l){case"x":h.push(c(this,n,o,2));break;case"y":h.push(c(this,n,o,1));break;case"visible":h.push(p(this,n,o));break;case"position":h.push(_(this,n,o));break;case"stroke":h.push(f(this,n,o,"stroke"));break;case"style":h.push(g(this,n,o));break;case"strokewidth":h.push(f(this,n,o,"strokewidth"));break;case"fill":h.push(f(this,n,o,"fill"));break;case"label":break;default:jxg_default.debug('property "'+l+'" in conditions not yet implemented:'+o)}t=t.slice(u+7),d=t.indexOf("<data>"),u=t.indexOf("</data>")}this.updateConditions=function(){for(var m=0;m<h.length;m++)h[m]();return this.prepareUpdate().updateElements(),!0},this.updateConditions()}},updateConditions:function(){return!1},calculateSnapSizes:function(){var t,e,r=this.getBoundingBox(),s=type_default.evaluate(this.options.grid.majorStep),o=type_default.evaluate(this.options.grid.gridX),a=type_default.evaluate(this.options.grid.gridY),n,l;for(type_default.isArray(s)||(s=[s,s]),s.length<2&&(s=[s[0],s[0]]),type_default.exists(o)&&(s[0]=o),type_default.exists(a)&&(s[1]=a),s[0]==="auto"?s[0]=1:s[0]=type_default.parseNumber(s[0],Math.abs(r[1]-r[3]),1/this.unitX),s[1]==="auto"?s[1]=1:s[1]=type_default.parseNumber(s[1],Math.abs(r[0]-r[2]),1/this.unitY),t=new coords_default(constants.COORDS_BY_USER,[0,0],this),e=new coords_default(constants.COORDS_BY_USER,[s[0],s[1]],this),n=t.scrCoords[1]-e.scrCoords[1],l=t.scrCoords[2]-e.scrCoords[2],this.options.grid.snapSizeX=s[0];Math.abs(n)>25;)this.options.grid.snapSizeX*=2,n/=2;for(this.options.grid.snapSizeY=s[1];Math.abs(l)>25;)this.options.grid.snapSizeY*=2,l/=2;return this},applyZoom:function(){return this.updateCoords().calculateSnapSizes().clearTraces().fullUpdate(),this},zoomIn:function(t,e){var r=this.getBoundingBox(),s=type_default.evaluate(this.attr.zoom.factorx),o=type_default.evaluate(this.attr.zoom.factory),a=(r[2]-r[0])*(1-1/s),n=(r[1]-r[3])*(1-1/o),l=.5,h=.5,d=type_default.evaluate(this.attr.zoom.max),u=type_default.evaluate(this.attr.zoom.eps)||type_default.evaluate(this.attr.zoom.min)||.001;return this.zoomX>d&&s>1||this.zoomY>d&&o>1||this.zoomX<u&&s<1||this.zoomY<u&&o<1?this:(type_default.isNumber(t)&&type_default.isNumber(e)&&(l=(t-r[0])/(r[2]-r[0]),h=(r[1]-e)/(r[1]-r[3])),this.setBoundingBox([r[0]+a*l,r[1]-n*h,r[2]-a*(1-l),r[3]+n*(1-h)],this.keepaspectratio,"update"),this.applyZoom())},zoomOut:function(t,e){var r=this.getBoundingBox(),s=type_default.evaluate(this.attr.zoom.factorx),o=type_default.evaluate(this.attr.zoom.factory),a=(r[2]-r[0])*(1-s),n=(r[1]-r[3])*(1-o),l=.5,h=.5,d=type_default.evaluate(this.attr.zoom.eps)||type_default.evaluate(this.attr.zoom.min)||.001;return this.zoomX<d||this.zoomY<d?this:(type_default.isNumber(t)&&type_default.isNumber(e)&&(l=(t-r[0])/(r[2]-r[0]),h=(r[1]-e)/(r[1]-r[3])),this.setBoundingBox([r[0]+a*l,r[1]-n*h,r[2]-a*(1-l),r[3]+n*(1-h)],this.keepaspectratio,"update"),this.applyZoom())},zoom100:function(){var t,e,r;return type_default.exists(this.attr.boundingbox)?this.setBoundingBox(this.attr.boundingbox,this.keepaspectratio,"reset"):(t=this.getBoundingBox(),e=(t[2]-t[0])*(1-this.zoomX)*.5,r=(t[1]-t[3])*(1-this.zoomY)*.5,this.setBoundingBox([t[0]+e,t[1]-r,t[2]-e,t[3]+r],this.keepaspectratio,"reset")),this.applyZoom()},zoomAllPoints:function(){var t,e,r,s,o,a=0,n=0,l=0,h=0,d=this.objectsList.length;for(t=0;t<d;t++)o=this.objectsList[t],type_default.isPoint(o)&&o.visPropCalc.visible&&(o.coords.usrCoords[1]<a?a=o.coords.usrCoords[1]:o.coords.usrCoords[1]>n&&(n=o.coords.usrCoords[1]),o.coords.usrCoords[2]>h?h=o.coords.usrCoords[2]:o.coords.usrCoords[2]<l&&(l=o.coords.usrCoords[2]));return e=50,r=e/this.unitX,s=e/this.unitY,this.setBoundingBox([a-r,h+s,n+r,l-s],this.keepaspectratio,"update"),this.applyZoom()},zoomElements:function(t){var e,r,s,o=[1/0,-1/0,-1/0,1/0],a,n,l,h,d;if(!type_default.isArray(t)||t.length===0)return this;for(e=0;e<t.length;e++)r=this.select(t[e]),s=r.bounds(),type_default.isArray(s)&&(s[0]<o[0]&&(o[0]=s[0]),s[1]>o[1]&&(o[1]=s[1]),s[2]>o[2]&&(o[2]=s[2]),s[3]<o[3]&&(o[3]=s[3]));return type_default.isArray(o)&&(a=.5*(o[0]+o[2]),n=.5*(o[1]+o[3]),l=1.5*(o[2]-o[0])*.5,h=1.5*(o[1]-o[3])*.5,d=Math.max(l,h),this.setBoundingBox([a-d,n+d,a+d,n-d],this.keepaspectratio,"update")),this},setZoom:function(t,e){var r=this.attr.zoom.factorx,s=this.attr.zoom.factory;return this.attr.zoom.factorx=t/this.zoomX,this.attr.zoom.factory=e/this.zoomY,this.zoomIn(),this.attr.zoom.factorx=r,this.attr.zoom.factory=s,this},_removeObj:function(t,e){var r,s,o;if(type_default.isArray(t)){for(o=0;o<t.length;o++)this._removeObj(t[o],e);return this}if(t=this.select(t),!type_default.exists(t)||type_default.isString(t))return this;try{for(r in t.childElements)t.childElements.hasOwnProperty(r)&&t.childElements[r].board._removeObj(t.childElements[r]);for(r in t.objects)t.objects.hasOwnProperty(r)&&t.objects[r].board._removeObj(t.objects[r]);if(e)for(r in this.objects)this.objects.hasOwnProperty(r)&&type_default.exists(this.objects[r].childElements)&&type_default.exists(this.objects[r].childElements.hasOwnProperty(t.id))&&(delete this.objects[r].childElements[t.id],delete this.objects[r].descendants[t.id]);else if(type_default.exists(t.ancestors))for(r in t.ancestors)t.ancestors.hasOwnProperty(r)&&type_default.exists(t.ancestors[r].childElements)&&type_default.exists(t.ancestors[r].childElements.hasOwnProperty(t.id))&&(delete t.ancestors[r].childElements[t.id],delete t.ancestors[r].descendants[t.id]);if(t._pos>-1)for(this.objectsList.splice(t._pos,1),o=t._pos;o<this.objectsList.length;o++)s=this.objectsList[o],s._pos>-1&&s._pos--;else t.type!==constants.OBJECT_TYPE_TURTLE&&jxg_default.debug("Board.removeObject: object "+t.id+" not found in list.");delete this.objects[t.id],delete this.elementsByName[t.name],t.visProp&&t.evalVisProp("trace")&&t.clearTrace(),type_default.exists(t.remove)&&t.remove()}catch(a){jxg_default.debug(t.id+": Could not be removed: "+a)}return this},removeObject:function(t,e){var r;if(this.renderer.suspendRedraw(this),type_default.isArray(t))for(r=0;r<t.length;r++)this._removeObj(t[r],e);else this._removeObj(t,e);return this.renderer.unsuspendRedraw(),this.update(),this},removeAncestors:function(t){var e;for(e in t.ancestors)t.ancestors.hasOwnProperty(e)&&this.removeAncestors(t.ancestors[e]);return this.removeObject(t),this},initGeonextBoard:function(){var t=this.create("point",[0,0],{id:this.id+"g00e0",name:"Ursprung",withLabel:!1,visible:!1,fixed:!0}),e=this.create("point",[1,0],{id:this.id+"gX0e0",name:"Punkt_1_0",withLabel:!1,visible:!1,fixed:!0}),r=this.create("point",[0,1],{id:this.id+"gY0e0",name:"Punkt_0_1",withLabel:!1,visible:!1,fixed:!0});return this.create("line",[t,e],{id:this.id+"gXLe0",name:"X-Achse",withLabel:!1,visible:!1}),this.create("line",[t,r],{id:this.id+"gYLe0",name:"Y-Achse",withLabel:!1,visible:!1}),this},resizeContainer:function(t,e,r,s){var o,a=this.canvasWidth,n=this.canvasHeight,l,h;return s||(o=this.getBoundingBox()),this.canvasWidth=parseFloat(t),this.canvasHeight=parseFloat(e),r||(this.containerObj.style.width=this.canvasWidth+"px",this.containerObj.style.height=this.canvasHeight+"px"),this.renderer.resize(this.canvasWidth,this.canvasHeight),s?(l=(this.canvasWidth-a)*.5,h=(this.canvasHeight-n)*.5,this.moveOrigin(this.origin.scrCoords[1]+l,this.origin.scrCoords[2]+h)):this.setBoundingBox(o,this.keepaspectratio,"keep"),this},showDependencies:function(){var t,e=`<p>
99
+ `,r,s,o;for(t in this.objects)if(this.objects.hasOwnProperty(t)){o=0;for(r in this.objects[t].childElements)this.objects[t].childElements.hasOwnProperty(r)&&(o+=1);o>=0&&(e+="<strong>"+this.objects[t].id+":</strong> ");for(r in this.objects[t].childElements)this.objects[t].childElements.hasOwnProperty(r)&&(e+=this.objects[t].childElements[r].id+"("+this.objects[t].childElements[r].name+"), ");e+=`<p>
100
+ `}return e+=`</p>
101
+ `,s=window.open(),s.document.open(),s.document.write(e),s.document.close(),this},showXML:function(){var t=window.open("");return t.document.open(),t.document.write("<pre>"+type_default.escapeHTML(this.xmlString)+"</pre>"),t.document.close(),this},prepareUpdate:function(t){var e,r,s,o=this.objectsList.length;for(e=0;e<o;e++)if(s=this.objectsList[e],this._change3DView||type_default.exists(t)&&t.elType==="view3d_slider"){if(s.needsUpdate=s.visProp.element3d||s.elType==="view3d"||s.elType==="view3d_slider"||this.needsFullUpdate,s.visProp.element3d&&s.visProp.element3d.type===constants.OBJECT_TYPE_SPHERE3D)for(r=0;r<s.parents.length;r++)this.objects[s.parents[r]].needsUpdate=!0}else s.needsUpdate=s.needsRegularUpdate||this.needsFullUpdate;for(e in this.groups)this.groups.hasOwnProperty(e)&&(s=this.groups[e],s.needsUpdate=s.needsRegularUpdate||this.needsFullUpdate);return this},updateElements:function(t){var e,r;for(t=this.select(t),e=0;e<this.objectsList.length;e++)r=this.objectsList[e],this.needsFullUpdate&&r.elementClass===constants.OBJECT_CLASS_TEXT&&r.updateSize(),r.update(!type_default.exists(t)||r.id!==t.id).updateVisibility();for(e in this.groups)this.groups.hasOwnProperty(e)&&this.groups[e].update(t);return this},updateRenderer:function(){var t,e=this.objectsList.length,r=[],s,o;if(this.renderer){if(this.renderer.type==="canvas")this.updateRendererCanvas();else{for(t=0;t<e;t++)this.objectsList[t].visProp.islabel&&this.objectsList[t].visProp.autoposition?r.push(t):this.objectsList[t].updateRenderer();for(s=r.length;s!==0;)o=Math.floor(Math.random()*s),s--,[r[s],r[o]]=[r[o],r[s]];for(t=0;t<r.length;t++)this.objectsList[r[t]].updateRenderer()}return this}},updateRendererCanvas:function(){var t,e,r=this.objectsList.length,s=[],o,a=function(n,l){return n.visProp.layer!==l.visProp.layer?n.visProp.layer-l.visProp.layer:s.indexOf(n.visProp.layer)===-1||!n.visProp.element3d&&!l.visProp.element3d?n._pos-l._pos:n.visProp.element3d&&!l.visProp.element3d?-1:!n.visProp.element3d&&l.visProp.element3d?1:n.visProp.element3d.zIndex-l.visProp.element3d.zIndex};for(t=0;t<r;t++)if(e=this.objectsList[t],e.elType==="view3d"&&e.evalVisProp("depthorder.enabled")){s=e.evalVisProp("depthorder.layers"),e.updateRenderer();break}for(o=this.objectsList.filter(function(n){return!n.is3D}).toSorted(a),r=o.length,t=0;t<r;t++)o[t].visPropCalc.visible&&o[t].type!==constants.OBJECT_TYPE_FACE3D&&o[t].prepareUpdate().updateRenderer();return this},addHook:function(t,e,r){return jxg_default.deprecated("Board.addHook()","Board.on()"),e=type_default.def(e,"update"),r=type_default.def(r,this),this.hooks.push([e,t]),this.on(e,t,r),this.hooks.length-1},addEvent:jxg_default.shortcut(jxg_default.Board.prototype,"on"),removeHook:function(t){return jxg_default.deprecated("Board.removeHook()","Board.off()"),this.hooks[t]&&(this.off(this.hooks[t][0],this.hooks[t][1]),this.hooks[t]=null),this},removeEvent:jxg_default.shortcut(jxg_default.Board.prototype,"off"),updateHooks:function(t){var e=Array.prototype.slice.call(arguments,0);return jxg_default.deprecated("Board.updateHooks()","Board.triggerEventHandlers()"),e[0]=type_default.def(e[0],"update"),this.triggerEventHandlers([e[0]],arguments),this},addChild:function(t){return type_default.exists(t)&&type_default.exists(t.containerObj)&&(this.dependentBoards.push(t),this.update()),this},removeChild:function(t){for(var e=this.dependentBoards.length-1;e>=0;e--)this.dependentBoards[e]===t&&this.dependentBoards.splice(e,1);return this},update:function(t){var e,r,s,o,a;if(this.inUpdate||this.isSuspendedUpdate)return this;for(this.inUpdate=!0,this.attr.minimizereflow==="all"&&this.containerObj&&this.renderer.type!=="vml"&&(a=this.document.activeElement,o=this.renderer.removeToInsertLater(this.containerObj)),this.attr.minimizereflow==="svg"&&this.renderer.type==="svg"&&(a=this.document.activeElement,o=this.renderer.removeToInsertLater(this.renderer.svgRoot)),this.prepareUpdate(t).updateElements(t).updateConditions(),this.renderer.suspendRedraw(this),this.updateRenderer(),this.renderer.unsuspendRedraw(),this.triggerEventHandlers(["update"],[]),o&&(o(),a.focus()),r=this.dependentBoards.length,e=0;e<r;e++)s=this.dependentBoards[e],type_default.exists(s)&&s!==this&&(s.updateQuality=this.updateQuality,s.prepareUpdate().updateElements().updateConditions(),s.renderer.suspendRedraw(this),s.updateRenderer(),s.renderer.unsuspendRedraw(),s.triggerEventHandlers(["update"],[]));return this.inUpdate=!1,this},fullUpdate:function(){return this.needsFullUpdate=!0,this.update(),this.needsFullUpdate=!1,this},addGrid:function(){return this.create("grid",[]),this},removeGrids:function(){for(var t=0;t<this.grids.length;t++)this.removeObject(this.grids[t]);return this.grids.length=0,this.update(),this},create:function(t,e,r){var s,o;for(t=t.toLowerCase(),type_default.exists(e)||(e=[]),type_default.exists(r)||(r={}),o=0;o<e.length;o++)type_default.isString(e[o])&&(t!=="text"||o!==2)&&(t!=="solidofrevolution3d"||o!==2)&&(t!=="text3d"||o!==2&&o!==4)&&(t!=="input"&&t!=="checkbox"&&t!=="button"||o!==2&&o!==3)&&t!=="curve"&&t!=="functiongraph"&&t!=="implicitcurve"&&(o>0&&e[0].elType==="view3d"?e[o]=e[0].select(e[o]):e[o]=this.select(e[o]));if(type_default.isFunction(jxg_default.elements[t]))s=jxg_default.elements[t](this,e,r);else throw new Error("JSXGraph: create: Unknown element type given: "+t);return type_default.exists(s)?(s.prepareUpdate&&s.update&&s.updateRenderer&&s.fullUpdate(),s):(jxg_default.debug("JSXGraph: create: failure creating "+t),s)},createElement:function(){return jxg_default.deprecated("Board.createElement()","Board.create()"),this.create.apply(this,arguments)},clearTraces:function(){for(var t=0;t<this.objectsList.length;t++)this.objectsList[t].clearTrace();return this.numTraces=0,this},suspendUpdate:function(){return this.inUpdate||(this.isSuspendedUpdate=!0),this},unsuspendUpdate:function(){return this.isSuspendedUpdate&&(this.isSuspendedUpdate=!1,this.fullUpdate()),this},setBoundingBox:function(t,e,r){var s,o,a,n,l=0,h=0,d=1,u,c,p,f,_,g=env_default.getDimensions(this.containerObj,this.document);return type_default.isArray(t)?t[0]<this.maxboundingbox[0]-math_default.eps||t[1]>this.maxboundingbox[1]+math_default.eps||t[2]>this.maxboundingbox[2]+math_default.eps||t[3]<this.maxboundingbox[3]-math_default.eps?this:(type_default.exists(r)||(r="reset"),a=this.unitX,n=this.unitY,this.canvasWidth=parseFloat(g.width),this.canvasHeight=parseFloat(g.height),o=this.canvasWidth,s=this.canvasHeight,e?(this.keepaspectratio?(u=a/n,isNaN(u)&&(u=1)):u=1,r==="keep"&&(d=this.zoomX/this.zoomY),c=t[2]-t[0],p=t[1]-t[3],f=a*c,_=n*p,o>=s?f>=_?(this.unitY=s/p,this.unitX=this.unitY*u):(this.unitY=s/Math.abs(c)*math_default.sign(p)/d,this.unitX=this.unitY*u):_>f?(this.unitX=o/c,this.unitY=this.unitX/u):(this.unitX=o/Math.abs(p)*math_default.sign(c)*d,this.unitY=this.unitX/u),l=(o/this.unitX-c)*.5,h=(s/this.unitY-p)*.5,this.keepaspectratio=!0):(this.unitX=o/(t[2]-t[0]),this.unitY=s/(t[1]-t[3]),this.keepaspectratio=!1),this.moveOrigin(-this.unitX*(t[0]-l),this.unitY*(t[1]+h)),r==="update"?(this.zoomX*=this.unitX/a,this.zoomY*=this.unitY/n):r==="reset"&&(this.zoomX=type_default.exists(this.attr.zoomx)?this.attr.zoomx:1,this.zoomY=type_default.exists(this.attr.zoomy)?this.attr.zoomy:1),this):this},getBoundingBox:function(){var t=new coords_default(constants.COORDS_BY_SCREEN,[0,0],this).usrCoords,e=new coords_default(constants.COORDS_BY_SCREEN,[this.canvasWidth,this.canvasHeight],this).usrCoords;return[t[1],t[2],e[1],e[2]]},_set:function(t,e){t=t.toLocaleLowerCase(),e!==null&&type_default.isObject(e)&&!type_default.exists(e.id)&&!type_default.exists(e.name)?type_default.mergeAttr(this.attr[t],e):this.attr[t]=e},setAttribute:function(t,e){var r,s,o,a,n,l,h,d,u,c={};for(r=0;r<arguments.length;r++)s=arguments[r],type_default.isString(s)?(o=s.split(":"),c[type_default.trim(o[0])]=type_default.trim(o[1])):type_default.isArray(s)?c[s[0]]=s[1]:jxg_default.extend(c,s);for(r in c)if(c.hasOwnProperty(r)&&(a=r.replace(/\s+/g,"").toLowerCase(),n=c[r]),n=n.toLowerCase&&n.toLowerCase()==="false"?!1:n,l=this.attr[a],!(!e&&l===n))switch(a){case"axis":type_default.exists(this.defaultAxes)?(this.defaultAxes.x.setAttribute({visible:n}),this.defaultAxes.y.setAttribute({visible:n}),this.attr[a]=n):n===!0&&(this.defaultAxes={},this.defaultAxes.x=this.create("axis",[[0,0],[1,0]]),this.defaultAxes.y=this.create("axis",[[0,0],[0,1]]),this.attr[a]=!0);break;case"cssstyle":d=type_default.css2js(n),h=this.containerObj;for(u in d)d.hasOwnProperty(u)&&(o=d[u],h.style[o.key]=o.val);this._set(a,n);break;case"boundingbox":this.setBoundingBox(n,this.keepaspectratio),this._set(a,n);break;case"defaultaxes":type_default.exists(this.defaultAxes.x)&&type_default.exists(n.x)&&this.defaultAxes.x.setAttribute(n.x),type_default.exists(this.defaultAxes.y)&&type_default.exists(n.y)&&this.defaultAxes.y.setAttribute(n.y);break;case"title":this.document.getElementById(this.container+"_ARIAlabel").innerText=n,this._set(a,n);break;case"keepaspectratio":this._set(a,n),this.setBoundingBox(this.getBoundingBox(),n,"keep");break;case"document":case"maxboundingbox":this[a]=n,this._set(a,n);break;case"zoomx":case"zoomy":this[a]=n,this._set(a,n),this.setZoom(this.attr.zoomx,this.attr.zoomy);break;case"registerevents":case"renderer":break;case"fullscreen":case"screenshot":h=this.containerObj.ownerDocument.getElementById(this.container+"_navigation_"+a),h&&type_default.exists(n.symbol)&&(h.innerText=type_default.evaluate(n.symbol)),this._set(a,n);break;case"selection":n.visible=!1,n.withLines=!1,n.vertices={visible:!1},this._set(a,n);break;case"showcopyright":this.renderer.type==="svg"&&(h=this.containerObj.ownerDocument.getElementById(this.renderer.uniqName("licenseText")),h?h.style.display=type_default.evaluate(n)?"inline":"none":type_default.evaluate(n)&&this.renderer.displayCopyright(constants.licenseText,parseInt(this.options.text.fontSize,10))),this._set(a,n);break;case"showlogo":this.renderer.type==="svg"&&(h=this.containerObj.ownerDocument.getElementById(this.renderer.uniqName("licenseLogo")),h?h.style.display=type_default.evaluate(n)?"inline":"none":type_default.evaluate(n)&&this.renderer.displayLogo(constants.licenseLogo,parseInt(this.options.text.fontSize,10))),this._set(a,n);break;default:type_default.exists(this.attr[a])&&this._set(a,n)}return h=this.containerObj.ownerDocument.getElementById(this.container+"_navigationbar"),type_default.exists(h)&&(h.remove(),this.renderer.drawNavigationBar(this,this.attr.navbar)),this.triggerEventHandlers(["attribute"],[c,this]),this.fullUpdate(),this},addAnimation:function(t){var e=this;return this.animationObjects[t.id]=t,this.animationIntervalCode||(this.animationIntervalCode=window.setInterval(function(){e.animate()},t.board.attr.animationdelay)),this},stopAllAnimation:function(){var t;for(t in this.animationObjects)this.animationObjects.hasOwnProperty(t)&&type_default.exists(this.animationObjects[t])&&(this.animationObjects[t]=null,delete this.animationObjects[t]);return window.clearInterval(this.animationIntervalCode),delete this.animationIntervalCode,this},animate:function(){var t,e,r,s,o,a,n,l,h=0,d=null;for(e in this.animationObjects)if(this.animationObjects.hasOwnProperty(e)&&type_default.exists(this.animationObjects[e])){if(h+=1,r=this.animationObjects[e],r.animationPath&&(type_default.isFunction(r.animationPath)?s=r.animationPath(new Date().getTime()-r.animationStart):s=r.animationPath.pop(),!type_default.exists(s)||!type_default.isArray(s)&&isNaN(s)?delete r.animationPath:(r.setPositionDirectly(constants.COORDS_BY_USER,s),r.fullUpdate(),d=r)),r.animationData){n=0;for(o in r.animationData)r.animationData.hasOwnProperty(o)&&(a=r.animationData[o].pop(),type_default.exists(a)?(n+=1,t={},t[o]=a,r.setAttribute(t)):delete r.animationData[a]);n===0&&delete r.animationData}!type_default.exists(r.animationData)&&!type_default.exists(r.animationPath)&&(this.animationObjects[e]=null,delete this.animationObjects[e],type_default.exists(r.animationCallback)&&(l=r.animationCallback,r.animationCallback=null,l()))}return h===0?(window.clearInterval(this.animationIntervalCode),delete this.animationIntervalCode):this.update(d),this},migratePoint:function(t,e,r){var s,o,a,n,l,h,d=!1;t=this.select(t),e=this.select(e),type_default.exists(t.label)&&(h=t.label.id,d=!0,this.removeObject(t.label));for(o in t.childElements)if(t.childElements.hasOwnProperty(o)){s=t.childElements[o],n=!1;for(a in s)s.hasOwnProperty(a)&&s[a]===t&&(s[a]=e,n=!0);for(n&&delete t.childElements[o],l=0;l<s.parents.length;l++)s.parents[l]===t.id&&(s.parents[l]=e.id);e.addChild(s)}return r&&(d&&(delete e.childElements[h],delete e.descendants[h]),e.label&&this.removeObject(e.label),delete this.elementsByName[e.name],e.name=t.name,d&&e.createLabel()),this.removeObject(t),type_default.exists(e.name)&&e.name!==""&&(this.elementsByName[e.name]=e),this.fullUpdate(),this},emulateColorblindness:function(t){var e,r;if(type_default.exists(t)||(t="none"),this.currentCBDef===t)return this;for(e in this.objects)this.objects.hasOwnProperty(e)&&(r=this.objects[e],t!=="none"?(this.currentCBDef==="none"&&(r.visPropOriginal={strokecolor:r.visProp.strokecolor,fillcolor:r.visProp.fillcolor,highlightstrokecolor:r.visProp.highlightstrokecolor,highlightfillcolor:r.visProp.highlightfillcolor}),r.setAttribute({strokecolor:color_default.rgb2cb(r.eval(r.visPropOriginal.strokecolor),t),fillcolor:color_default.rgb2cb(r.eval(r.visPropOriginal.fillcolor),t),highlightstrokecolor:color_default.rgb2cb(r.eval(r.visPropOriginal.highlightstrokecolor),t),highlightfillcolor:color_default.rgb2cb(r.eval(r.visPropOriginal.highlightfillcolor),t)})):type_default.exists(r.visPropOriginal)&&jxg_default.extend(r.visProp,r.visPropOriginal));return this.currentCBDef=t,this.update(),this},select:function(t,e){var r,s,o,a,n=t;if(n===null)return n;if(type_default.isString(n)&&n!=="")type_default.exists(this.objects[n])?n=this.objects[n]:type_default.exists(this.elementsByName[n])?n=this.elementsByName[n]:type_default.exists(this.groups[n])&&(n=this.groups[n]);else if(!e&&(type_default.isFunction(n)||type_default.isObject(n)&&!type_default.isFunction(n.setAttribute))){for(r=type_default.filterElements(this.objectsList,n),s={},a=r.length,o=0;o<a;o++)s[r[o].id]=r[o];n=new composition_default(s)}else type_default.isObject(n)&&type_default.exists(n.id)&&!type_default.exists(this.objects[n.id])&&(n=null);return n},hasPoint:function(t,e){var r=t,s=e,o=this.getBoundingBox();return type_default.exists(t)&&type_default.isArray(t.usrCoords)&&(r=t.usrCoords[1],s=t.usrCoords[2]),!!(type_default.isNumber(r)&&type_default.isNumber(s)&&o[0]<r&&r<o[2]&&o[1]>s&&s>o[3])},updateCSSTransforms:function(){var t=this.containerObj,e=t,r=t;if(this.cssTransMat=env_default.getCSSTransformMatrix(e),type_default.exists(e.getRootNode)){for(e=e.parentNode===e.getRootNode()?e.parentNode.host:e.parentNode;e;)this.cssTransMat=math_default.matMatMult(env_default.getCSSTransformMatrix(e),this.cssTransMat),e=e.parentNode===e.getRootNode()?e.parentNode.host:e.parentNode;this.cssTransMat=math_default.inverse(this.cssTransMat)}else{for(e=e.offsetParent;e;){for(this.cssTransMat=math_default.matMatMult(env_default.getCSSTransformMatrix(e),this.cssTransMat),r=r.parentNode;r!==e;)this.cssTransMat=math_default.matMatMult(env_default.getCSSTransformMatrix(e),this.cssTransMat),r=r.parentNode;e=e.offsetParent}this.cssTransMat=math_default.inverse(this.cssTransMat)}return this},startSelectionMode:function(){this.selectingMode=!0,this.selectionPolygon.setAttribute({visible:!0}),this.selectingBox=[[0,0],[0,0]],this._setSelectionPolygonFromBox(),this.selectionPolygon.fullUpdate()},stopSelectionMode:function(){return this.selectingMode=!1,this.selectionPolygon.setAttribute({visible:!1}),[this.selectionPolygon.vertices[0].coords,this.selectionPolygon.vertices[2].coords]},_startSelecting:function(t){this.isSelecting=!0,this.selectingBox=[[t[0],t[1]],[t[0],t[1]]],this._setSelectionPolygonFromBox()},_moveSelecting:function(t){this.isSelecting&&(this.selectingBox[1]=[t[0],t[1]],this._setSelectionPolygonFromBox(),this.selectionPolygon.fullUpdate())},_stopSelecting:function(t){var e=this.getMousePosition(t);this.isSelecting=!1,this.selectingBox[1]=[e[0],e[1]],this._setSelectionPolygonFromBox()},_setSelectionPolygonFromBox:function(){var t=this.selectingBox[0],e=this.selectingBox[1];this.selectionPolygon.vertices[0].setPositionDirectly(jxg_default.COORDS_BY_SCREEN,[t[0],t[1]]),this.selectionPolygon.vertices[1].setPositionDirectly(jxg_default.COORDS_BY_SCREEN,[t[0],e[1]]),this.selectionPolygon.vertices[2].setPositionDirectly(jxg_default.COORDS_BY_SCREEN,[e[0],e[1]]),this.selectionPolygon.vertices[3].setPositionDirectly(jxg_default.COORDS_BY_SCREEN,[e[0],t[1]])},_testForSelection:function(t){this._isRequiredKeyPressed(t,"selection")&&(type_default.exists(this.selectionPolygon)||this._createSelectionPolygon(this.attr),this.startSelectionMode())},_createSelectionPolygon:function(t){var e;return type_default.exists(this.selectionPolygon)||(e=type_default.copyAttributes(t,options_default,"board","selection"),e.enabled===!0&&(this.selectionPolygon=this.create("polygon",[[0,0],[0,0],[0,0],[0,0]],e))),this},initSketchCurve:function(t){var e,r;this.mode!==this.BOARD_MODE_MOVE_ORIGIN&&(r=this.getUsrCoordsOfMouse(t),e=t.isPrimary?0:1,type_default.exists(this.sketches[e])&&(this.sketches[e].dataX=[r[0]],this.sketches[e].dataY=[r[1]],this.isSketching[e]=!0))},addToSketchCurve:function(t){var e=t.isPrimary?0:1,r,s;this.attr.sketches.enabled&&this.isSketching[e]===!0&&type_default.exists(this.sketches[e])&&(r=this.getUsrCoordsOfMouse(t),this.sketches[e].dataX.push(r[0]),this.sketches[e].dataY.push(r[1]),s=this.sketches[e].evalVisProp("maxlength"),s!==null&&this.sketches[e].dataX.length>s&&(this.sketches[e].dataX=this.sketches[e].dataX.slice(-s),this.sketches[e].dataY=this.sketches[e].dataY.slice(-s)),this.sketches[e].evalVisProp("visible")&&this.update())},finalizeSketchCurve:function(t){var e=t.isPrimary?0:1;this.attr.sketches.enabled&&type_default.exists(this.sketches[e])&&(this.isSketching[e]=!1,this.sketches[e].evalVisProp("deleteOnUp")&&(this.sketches[e].dataX=[],this.sketches[e].dataY=[]))},__evt__attribute:function(t){},__evt__down:function(t){},__evt__mousedown:function(t){},__evt__pendown:function(t){},__evt__pointerdown:function(t){},__evt__touchstart:function(t){},__evt__up:function(t){},__evt__mouseup:function(t){},__evt__pointerup:function(t){},__evt__touchend:function(t){},__evt__click:function(t){},__evt__dblclick:function(t){},__evt__mouseclick:function(t){},__evt__mousedblclick:function(t){},__evt__pointerclick:function(t){},__evt__pointerdblclick:function(t){},__evt__move:function(t,e){},__evt__mousemove:function(t,e){},__evt__penmove:function(t,e){},__evt__pointermove:function(t,e){},__evt__touchmove:function(t,e){},__evt__keymove:function(t,e){},__evt__hit:function(t,e,r){},__evt__mousehit:function(t,e,r){},__evt__update:function(){},__evt__boundingbox:function(){},__evt__startselecting:function(){},__evt__mousestartselecting:function(){},__evt__pointerstartselecting:function(){},__evt__touchstartselecting:function(){},__evt__stopselecting:function(){},__evt__mousestopselecting:function(){},__evt__pointerstopselecting:function(){},__evt__touchstopselecting:function(){},__evt__moveselecting:function(){},__evt__mousemoveselecting:function(){},__evt__pointermoveselecting:function(){},__evt__touchmoveselecting:function(){},__evt:function(){},toFullscreen:function(t){var e,r,s,o,a=this.document,n;return t=t||this.container,this._fullscreen_inner_id=t,s=a.getElementById(t),e="fullscreenwrap_"+t,type_default.exists(s._cssFullscreenStore)||(o=this.containerObj.getBoundingClientRect(),s._cssFullscreenStore={w:o.width,h:o.height}),a.getElementById(e)?r=a.getElementById(e):(r=document.createElement("div"),r.classList.add("JXG_wrap_private"),r.setAttribute("id",e),s.parentNode.insertBefore(r,s),r.appendChild(s)),r.requestFullscreen=r.requestFullscreen||r.webkitRequestFullscreen||r.mozRequestFullScreen||r.msRequestFullscreen,a.fullscreenElement!==void 0?n=a.fullscreenElement:a.webkitFullscreenElement!==void 0?n=a.webkitFullscreenElement:n=a.msFullscreenElement,n===null?r.requestFullscreen&&(r.requestFullscreen(),this.startFullscreenResizeObserver(r)):(this.stopFullscreenResizeObserver(r),type_default.exists(document.exitFullscreen)?document.exitFullscreen():type_default.exists(document.webkitExitFullscreen)&&document.webkitExitFullscreen()),this},fullscreenListener:function(t){var e,r,s,o=this.document;e=this._fullscreen_inner_id,type_default.exists(e)&&(o.fullscreenElement!==void 0?s=o.fullscreenElement:o.webkitFullscreenElement!==void 0?s=o.webkitFullscreenElement:s=o.msFullscreenElement,r=o.getElementById(e),s?(r._cssFullscreenStore.id=s.id,r._cssFullscreenStore.isFullscreen=!0,r._cssFullscreenStore.margin=r.style.margin,r._cssFullscreenStore.width=r.style.width,r._cssFullscreenStore.height=r.style.height,r._cssFullscreenStore.transform=r.style.transform,r.style.width=r._cssFullscreenStore.w+"px",r.style.height=r._cssFullscreenStore.h+"px",r.style.margin="",env_default.scaleJSXGraphDiv(s.id,e,o,type_default.evaluate(this.attr.fullscreen.scale)),s=null):type_default.exists(r._cssFullscreenStore)&&(r._cssFullscreenStore.isFullscreen=!1,r.style.margin=r._cssFullscreenStore.margin,r.style.width=r._cssFullscreenStore.width,r.style.height=r._cssFullscreenStore.height,r.style.transform=r._cssFullscreenStore.transform,r._cssFullscreenStore=null,r.parentElement.replaceWith(r)),this.updateCSSTransforms())},startFullscreenResizeObserver:function(t){var e=this;return!env_default.isBrowser||!this.attr.resize||!this.attr.resize.enabled?this:(this.resizeObserver=new ResizeObserver(function(r){var s,o,a=e.document;e._isResizing||(e._isResizing=!0,window.setTimeout(function(){try{s=e._fullscreen_inner_id,a.fullscreenElement!==void 0?o=a.fullscreenElement:a.webkitFullscreenElement!==void 0?o=a.webkitFullscreenElement:o=a.msFullscreenElement,o!==null&&env_default.scaleJSXGraphDiv(o.id,s,a,type_default.evaluate(e.attr.fullscreen.scale))}catch{e.stopFullscreenResizeObserver(t)}finally{e._isResizing=!1}},e.attr.resize.throttle))}),this.resizeObserver.observe(t),this)},stopFullscreenResizeObserver:function(t){return!env_default.isBrowser||!this.attr.resize||!this.attr.resize.enabled?this:(type_default.exists(this.resizeObserver)&&this.resizeObserver.unobserve(t),this)},addLogEntry:function(t,e,r){var s,o,a=this.userLog.length-1;return type_default.exists(e.elementClass)&&(o=e.id),type_default.evaluate(this.attr.logging.enabled)&&(s=new Date().getTime(),a>=0&&this.userLog[a].type===t&&this.userLog[a].id===o&&s-this.userLog[a].end<500?(this.userLog[a].end=s,this.userLog[a].endpos=r):this.userLog.push({type:t,id:o,start:s,startpos:r,end:s,endpos:r,bbox:this.getBoundingBox(),canvas:[this.canvasWidth,this.canvasHeight],zoom:[this.zoomX,this.zoomY]})),this},createRoulette:function(t,e,r,s,o,a,n){var l=this,h=function(){var d=0,u=0,c=0,p=r,f=numerics_default.root(function(O){var S=t.X(p),M=t.Y(p),N=e.X(O),j=e.Y(O);return(S-N)*(S-N)+(M-j)*(M-j)},[0,Math.PI*2]),_=0,g=0,m,b=l.create("transform",[function(){return d}],{type:"rotate"}),C=l.create("transform",[function(){return d},function(){return t.X(p)},function(){return t.Y(p)}],{type:"rotate"}),y=l.create("transform",[function(){return u},function(){return c}],{type:"translate"}),x=function(O,S,M){var N=numerics_default.D(O.X)(S),j=numerics_default.D(O.Y)(S),k=numerics_default.D(O.X)(M),B=numerics_default.D(O.Y)(M),I=numerics_default.D(O.X)((S+M)*.5),X=numerics_default.D(O.Y)((S+M)*.5),J=math_default.hypot(N,j),Y=math_default.hypot(k,B);return(J+4*math_default.hypot(I,X)+Y)*(M-S)/6},v=function(O){return m-x(e,f,O)},P=Math.PI/18,E=P*9,w=null;return this.rolling=function(){var O,S,M,N,j;_=p+o*s,m=x(t,p,_),g=numerics_default.root(v,f),O=new complex_default(t.X(_),t.Y(_)),S=new complex_default(e.X(g),e.Y(g)),M=new complex_default(numerics_default.D(t.X)(_),numerics_default.D(t.Y)(_)),N=new complex_default(numerics_default.D(e.X)(g),numerics_default.D(e.Y)(g)),j=complex_default.C.div(M,N),d=Math.atan2(j.imaginary,j.real),j.div(complex_default.C.abs(j)),j.mult(S),u=O.real-j.real,c=O.imaginary-j.imaginary,d<-P&&d>-E?(d=-P,C.applyOnce(n)):d>P&&d<E?(d=P,C.applyOnce(n)):(b.applyOnce(n),y.applyOnce(n),p=_,f=g),l.update()},this.start=function(){return a>0&&(w=window.setInterval(this.rolling,a)),this},this.stop=function(){return window.clearInterval(w),this},this};return new h}});var board_default=jxg_default.Board;jxg_default.SVGRenderer=function(t,e){var r;for(this.type="svg",this.isIE=typeof navigator<"u"&&(navigator.appVersion.indexOf("MSIE")!==-1||navigator.userAgent.match(/Trident\//)),this.svgRoot=null,this.svgNamespace="http://www.w3.org/2000/svg",this.xlinkNamespace="http://www.w3.org/1999/xlink",this.container=t,this.container.style.MozUserSelect="none",this.container.style.userSelect="none",this.container.style.overflow="hidden",this.container.style.position===""&&(this.container.style.position="relative"),this.svgRoot=this.container.ownerDocument.createElementNS(this.svgNamespace,"svg"),this.svgRoot.style.overflow="hidden",this.svgRoot.style.display="block",this.resize(e.width,e.height),this.container.appendChild(this.svgRoot),this.defs=this.container.ownerDocument.createElementNS(this.svgNamespace,"defs"),this.svgRoot.appendChild(this.defs),this.createShadowFilter=function(s,o,a,n,l,h){var d=this.container.ownerDocument.createElementNS(this.svgNamespace,"filter"),u,c,p,f,_;return d.setAttributeNS(null,"id",s),d.setAttributeNS(null,"width","300%"),d.setAttributeNS(null,"height","300%"),d.setAttributeNS(null,"filterUnits","userSpaceOnUse"),u=this.container.ownerDocument.createElementNS(this.svgNamespace,"feOffset"),u.setAttributeNS(null,"in","SourceGraphic"),u.setAttributeNS(null,"result","offOut"),u.setAttributeNS(null,"dx",h[0]),u.setAttributeNS(null,"dy",h[1]),d.appendChild(u),c=this.container.ownerDocument.createElementNS(this.svgNamespace,"feColorMatrix"),c.setAttributeNS(null,"in","offOut"),c.setAttributeNS(null,"result","colorOut"),c.setAttributeNS(null,"type","matrix"),o==="none"||!type_default.isArray(o)||o.length<3?c.setAttributeNS(null,"values","0.1 0 0 0 0 0 0.1 0 0 0 0 0 0.1 0 0 0 0 0 "+a+" 0"):(o[0]/=255,o[1]/=255,o[2]/=255,_=n+" 0 0 0 "+o[0]+" 0 "+n+" 0 0 "+o[1]+" 0 0 "+n+" 0 "+o[2]+" 0 0 0 "+a+" 0",c.setAttributeNS(null,"values",_)),d.appendChild(c),p=this.container.ownerDocument.createElementNS(this.svgNamespace,"feGaussianBlur"),p.setAttributeNS(null,"in","colorOut"),p.setAttributeNS(null,"result","blurOut"),p.setAttributeNS(null,"stdDeviation",l),d.appendChild(p),f=this.container.ownerDocument.createElementNS(this.svgNamespace,"feBlend"),f.setAttributeNS(null,"in","SourceGraphic"),f.setAttributeNS(null,"in2","blurOut"),f.setAttributeNS(null,"mode","normal"),d.appendChild(f),d},this.uniqName=function(){return this.container.id+"_"+Array.prototype.slice.call(arguments).join("_")},this.toStr=function(){var s=Array.prototype.slice.call(arguments).join("");return type_default.exists(encodeURIComponent)&&(s=encodeURIComponent(s)),s},this.toURL=function(){return"url(#"+this.toStr.apply(this,arguments)+")"},this.defs.appendChild(this.createShadowFilter(this.uniqName("f1"),"none",1,.1,3,[5,5])),this.createClip=function(){var s=this.uniqName("ClipFull"),o=this.container.ownerDocument.createElementNS(this.svgNamespace,"clipPath"),a=this.container.ownerDocument.createElementNS(this.svgNamespace,"rect"),n,l,h;return o.setAttributeNS(null,"id",s),a.setAttributeNS(null,"x",0),a.setAttributeNS(null,"y",0),a.setAttributeNS(null,"width",e.width),a.setAttributeNS(null,"height",e.height),n=getComputedStyle(this.container),l=type_default.exists(n["border-radius"])?parseFloat(n["border-radius"]):0,h=l,a.setAttributeNS(null,"rx",l),a.setAttributeNS(null,"ry",h),o.appendChild(a),o},this.defs.appendChild(this.createClip()),this.setClipPath=function(s,o){return o?s.rendNode.style.clipPath=this.toURL(this.uniqName("ClipFull")):s.rendNode.style.removeProperty("clip-path"),this},this.updateClipPathRect=function(s,o){var a=this.uniqName("ClipFull"),n=this.container.ownerDocument.getElementById(a),l;type_default.exists(n)&&type_default.exists(n.firstChild)&&(l=n.firstChild,type_default.exists(l)&&(l.setAttributeNS(null,"width",s),l.setAttributeNS(null,"height",o)))},this.layer=[],r=0;r<options_default.layer.numlayers;r++)this.layer[r]=this.container.ownerDocument.createElementNS(this.svgNamespace,"g"),this.svgRoot.appendChild(this.layer[r]);try{this.foreignObjLayer=this.container.ownerDocument.createElementNS(this.svgNamespace,"foreignObject"),this.foreignObjLayer.setAttribute("display","none"),this.foreignObjLayer.setAttribute("x",0),this.foreignObjLayer.setAttribute("y",0),this.foreignObjLayer.setAttribute("width","100%"),this.foreignObjLayer.setAttribute("height","100%"),this.foreignObjLayer.setAttribute("id",this.uniqName("foreignObj")),this.svgRoot.appendChild(this.foreignObjLayer),this.supportsForeignObject=!0}catch{this.supportsForeignObject=!1}};jxg_default.SVGRenderer.prototype=new abstract_default;jxg_default.extend(jxg_default.SVGRenderer.prototype,{_createArrowHead:function(t,e,r){var s,o,a=t.id+"Triangle",n,l;return type_default.exists(e)&&(a+=e),type_default.exists(r)&&(a+=r),s=this.createPrim("marker",a),jxg_default.isWebkitApple()?(s.setAttributeNS(null,"fill",t.evalVisProp("strokecolor")),s.setAttributeNS(null,"stroke",t.evalVisProp("strokecolor"))):(s.setAttributeNS(null,"fill","context-stroke"),s.setAttributeNS(null,"stroke","context-stroke")),s.setAttributeNS(null,"stroke-width",0),s.setAttributeNS(null,"stroke-width",0),s.setAttributeNS(null,"orient","auto"),s.setAttributeNS(null,"markerUnits","strokeWidth"),o=this.container.ownerDocument.createElementNS(this.svgNamespace,"path"),l=5,e==="Start"?(n=0,r===2?o.setAttributeNS(null,"d","M 10,0 L 0,5 L 10,10 L 5,5 z"):r===3?o.setAttributeNS(null,"d","M 0,0 L 3.33,0 L 3.33,10 L 0,10 z"):r===4?(l=3.31,o.setAttributeNS(null,"d","M 0.00,3.31 C 3.53,3.84 7.13,4.50 10.00,6.63 C 9.33,5.52 8.67,4.42 8.00,3.31 C 8.67,2.21 9.33,1.10 10.00,0.00 C 7.13,2.13 3.53,2.79 0.00,3.31")):r===5?(l=3.28,o.setAttributeNS(null,"d","M 0.00,3.28 C 3.39,4.19 6.81,5.07 10.00,6.55 C 9.38,5.56 9.00,4.44 9.00,3.28 C 9.00,2.11 9.38,0.99 10.00,0.00 C 6.81,1.49 3.39,2.37 0.00,3.28")):r===6?(l=2.84,o.setAttributeNS(null,"d","M 0.00,2.84 C 3.39,3.59 6.79,4.35 10.00,5.68 C 9.67,4.73 9.33,3.78 9.00,2.84 C 9.33,1.89 9.67,0.95 10.00,0.00 C 6.79,1.33 3.39,2.09 0.00,2.84")):r===7?(l=5.2,o.setAttributeNS(null,"d","M 0.00,5.20 C 4.04,5.20 7.99,6.92 10.00,10.39 M 10.00,0.00 C 7.99,3.47 4.04,5.20 0.00,5.20")):o.setAttributeNS(null,"d","M 10,0 L 0,5 L 10,10 z"),t.elementClass===constants.OBJECT_CLASS_LINE&&(r===2?n=4.9:r===3?n=3.3:r===4||r===5||r===6?n=6.66:r===7?n=0:n=10)):(n=10,r===2?o.setAttributeNS(null,"d","M 0,0 L 10,5 L 0,10 L 5,5 z"):r===3?(n=3.3,o.setAttributeNS(null,"d","M 0,0 L 3.33,0 L 3.33,10 L 0,10 z")):r===4?(l=3.31,o.setAttributeNS(null,"d","M 10.00,3.31 C 6.47,3.84 2.87,4.50 0.00,6.63 C 0.67,5.52 1.33,4.42 2.00,3.31 C 1.33,2.21 0.67,1.10 0.00,0.00 C 2.87,2.13 6.47,2.79 10.00,3.31")):r===5?(l=3.28,o.setAttributeNS(null,"d","M 10.00,3.28 C 6.61,4.19 3.19,5.07 0.00,6.55 C 0.62,5.56 1.00,4.44 1.00,3.28 C 1.00,2.11 0.62,0.99 0.00,0.00 C 3.19,1.49 6.61,2.37 10.00,3.28")):r===6?(l=2.84,o.setAttributeNS(null,"d","M 10.00,2.84 C 6.61,3.59 3.21,4.35 0.00,5.68 C 0.33,4.73 0.67,3.78 1.00,2.84 C 0.67,1.89 0.33,0.95 0.00,0.00 C 3.21,1.33 6.61,2.09 10.00,2.84")):r===7?(l=5.2,o.setAttributeNS(null,"d","M 10.00,5.20 C 5.96,5.20 2.01,6.92 0.00,10.39 M 0.00,0.00 C 2.01,3.47 5.96,5.20 10.00,5.20")):o.setAttributeNS(null,"d","M 0,0 L 10,5 L 0,10 z"),t.elementClass===constants.OBJECT_CLASS_LINE&&(r===2?n=5.1:r===3?n=.02:r===4||r===5||r===6?n=3.33:r===7?n=10:n=.05)),r===7&&(s.setAttributeNS(null,"fill","none"),s.setAttributeNS(null,"stroke-width",1)),s.setAttributeNS(null,"refY",l),s.setAttributeNS(null,"refX",n),s.appendChild(o),this._setArrowColor(s,t.evalVisProp("strokecolor"),t.evalVisProp("strokeopacity"),t,r),s},_setArrowColor:function(t,e,r,s,o){t&&(type_default.isString(e)&&(o!==7?this._setAttribute(function(){t.setAttributeNS(null,"fill-opacity",r),jxg_default.isWebkitApple()?t.setAttributeNS(null,"fill",e):t.setAttributeNS(null,"fill","context-stroke")},s.visPropOld.fillcolor):this._setAttribute(function(){t.setAttributeNS(null,"fill","none"),t.setAttributeNS(null,"stroke-opacity",r),jxg_default.isWebkitApple()?t.setAttributeNS(null,"stroke",e):t.setAttributeNS(null,"stroke","context-stroke")},s.visPropOld.fillcolor)),s.rendNode.parentNode.insertBefore(s.rendNode,s.rendNode))},_setArrowWidth:function(t,e,r,s){var o,a;t&&(o=e,a=o*s,t.setAttributeNS(null,"viewBox","0 0 "+o*10+" "+o*10),t.setAttributeNS(null,"markerHeight",a),t.setAttributeNS(null,"markerWidth",a),t.setAttributeNS(null,"display","inherit"),r.parentNode.insertBefore(r,r))},updateTicks:function(t){var e,r,s,o,a,n,l="",h=t.ticks.length,d,u,c=!0;for(e=0;e<h;e++){for(s=t.ticks[e],a=s[0],n=s[1],d=a.length,u=" M "+a[0]+" "+n[0],type_default.isNumber(a[0])||(c=!1),r=1;c&&r<d;++r)type_default.isNumber(a[r])?u+=" L "+a[r]+" "+n[r]:c=!1;c&&(l+=u)}o=t.rendNode,type_default.exists(o)||(o=this.createPrim("path",t.id),this.appendChildPrim(o,t.evalVisProp("layer")),t.rendNode=o),o.setAttributeNS(null,"stroke",t.evalVisProp("strokecolor")),o.setAttributeNS(null,"fill","none"),o.setAttributeNS(null,"stroke-opacity",t.evalVisProp("strokeopacity")),o.setAttributeNS(null,"stroke-width",t.evalVisProp("strokewidth")),this.setClipPath(t,t.evalVisProp("clip")),this.updatePathPrim(o,l,t.board)},displayCopyright:function(t,e){var r,s,o=4+1.8*e,a=6+e;r=this.createPrim("text","licenseText"),r.setAttributeNS(null,"x",o+"px"),r.setAttributeNS(null,"y",a+"px"),r.setAttributeNS(null,"style","font-family:Arial,Helvetica,sans-serif; font-size:"+e+"px; opacity:0.2;"),r.setAttributeNS(null,"aria-hidden","true"),s=this.container.ownerDocument.createTextNode(t),r.appendChild(s),this.appendChildPrim(r,0)},displayLogo:function(t,e){var r,s=1.5*e;r=this.createPrim("image","licenseLogo"),r.setAttributeNS(null,"x","5px"),r.setAttributeNS(null,"y","5px"),r.setAttributeNS(null,"width",s+"px"),r.setAttributeNS(null,"height",s+"px"),r.setAttributeNS(null,"preserveAspectRatio","none"),r.setAttributeNS(null,"style","opacity:0.2;"),r.setAttributeNS(null,"aria-hidden","true"),r.setAttributeNS(this.xlinkNamespace,"xlink:href",t),r.setAttributeNS(null,"href",t),this.appendChildPrim(r,0)},drawInternalText:function(t){var e=this.createPrim("text",t.id);return e.style.whiteSpace="nowrap",t.rendNodeText=this.container.ownerDocument.createTextNode(""),e.appendChild(t.rendNodeText),this.appendChildPrim(e,t.evalVisProp("layer")),e},updateInternalText:function(t){var e=t.plaintext,r,s,o=t.getAnchorX(),a=t.getAnchorY();s=t.evalVisProp("cssclass"),t.rendNode.getAttributeNS(null,"class")!==s&&(t.rendNode.setAttributeNS(null,"class",s),t.needsSizeUpdate=!0),isNaN(t.coords.scrCoords[1]+t.coords.scrCoords[2])||(r=t.coords.scrCoords[1],t.visPropOld.left!==o+r&&(t.rendNode.setAttributeNS(null,"x",r+"px"),o==="left"?t.rendNode.setAttributeNS(null,"text-anchor","start"):o==="right"?t.rendNode.setAttributeNS(null,"text-anchor","end"):o==="middle"&&t.rendNode.setAttributeNS(null,"text-anchor","middle"),t.visPropOld.left=o+r),r=t.coords.scrCoords[2],t.visPropOld.top!==a+r&&(t.rendNode.setAttributeNS(null,"y",r+this.vOffsetText*.5+"px"),a==="bottom"?(t.rendNode.setAttributeNS(null,"dy","0"),t.rendNode.setAttributeNS(null,"dominant-baseline","auto")):a==="top"?(t.rendNode.setAttributeNS(null,"dy","1.6ex"),t.rendNode.setAttributeNS(null,"dominant-baseline","auto")):a==="middle"&&(t.rendNode.setAttributeNS(null,"dy","0.6ex"),t.rendNode.setAttributeNS(null,"dominant-baseline","auto")),t.visPropOld.top=a+r)),t.htmlStr!==e&&(t.rendNodeText.data=e,t.htmlStr=e),this.transformRect(t,t.transformations),this.setClipPath(t,!!t.evalVisProp("clip"))},updateInternalTextStyle:function(t,e,r,s){this.setObjectFillColor(t,e,r)},drawImage:function(t){var e=this.createPrim("image",t.id);e.setAttributeNS(null,"preserveAspectRatio","none"),this.appendChildPrim(e,t.evalVisProp("layer")),t.rendNode=e,this.updateImage(t)},transformRect:function(t,e){var r,s,o,a="",n,l;if(e.length>0&&(o=t.rendNode,s=this.joinTransforms(t,e),r=[s[1][1],s[2][1],s[1][2],s[2][2],s[1][0],s[2][0]].join(","),r.indexOf("NaN")===-1))if(a+=" matrix("+r+") ",t.elementClass===constants.OBJECT_CLASS_TEXT&&t.visProp.display==="html"){switch(o.style.transform=a,n=-t.coords.scrCoords[1],l=-t.coords.scrCoords[2],t.evalVisProp("anchorx")){case"right":n+=t.size[0];break;case"middle":n+=t.size[0]*.5}switch(t.evalVisProp("anchory")){case"bottom":l+=t.size[1];break;case"middle":l+=t.size[1]*.5}o.style["transform-origin"]=n+"px "+l+"px"}else o.setAttributeNS(null,"transform",a)},updateImageURL:function(t){var e=t.eval(t.url);return t._src!==e?(t.imgIsLoaded=!1,t.rendNode.setAttributeNS(this.xlinkNamespace,"xlink:href",e),t.rendNode.setAttributeNS(null,"href",e),t._src=e,!0):!1},updateImageStyle:function(t,e){var r=t.evalVisProp(e?"highlightcssclass":"cssclass");t.rendNode.setAttributeNS(null,"class",r)},drawForeignObject:function(t){t.rendNode=this.appendChildPrim(this.createPrim("foreignObject",t.id),t.evalVisProp("layer")),this.appendNodesToElement(t,"foreignObject"),this.updateForeignObject(t)},updateForeignObject:function(t){t._useUserSize?t.rendNode.style.overflow="hidden":t.rendNode.style.overflow="visible",this.updateRectPrim(t.rendNode,t.coords.scrCoords[1],t.coords.scrCoords[2]-t.size[1],t.size[0],t.size[1]),(t.evalVisProp("evaluateOnlyOnce")!==!0||!t.renderedOnce)&&(t.rendNode.innerHTML=t.content,t.renderedOnce=!0),this._updateVisual(t,{stroke:!0,dash:!0},!0)},appendChildPrim:function(t,e){return type_default.exists(e)?e>=options_default.layer.numlayers&&(e=options_default.layer.numlayers-1):e=0,this.layer[e].appendChild(t),t},createPrim:function(t,e){var r=this.container.ownerDocument.createElementNS(this.svgNamespace,t);return r.setAttributeNS(null,"id",this.uniqName(e)),r.style.position="absolute",t==="path"&&(r.setAttributeNS(null,"stroke-linecap","round"),r.setAttributeNS(null,"stroke-linejoin","round"),r.setAttributeNS(null,"fill-rule","evenodd")),r},remove:function(t){type_default.exists(t)&&type_default.exists(t.parentNode)&&t.parentNode.removeChild(t)},setLayer:function(t,e){var r;type_default.exists(e)?e>=options_default.layer.numlayers&&(e=options_default.layer.numlayers-1):e=0,r=this.layer[e],type_default.exists(r.moveBefore)?r.moveBefore(t.rendNode,null):r.appendChild(t.rendNode)},makeArrows:function(t,e){var r,s,o=e.evFirst,a=e.evLast;if(this.isIE&&t.visPropCalc.visible&&(o||a)){t.rendNode.parentNode.insertBefore(t.rendNode,t.rendNode);return}r=t.rendNodeTriangleStart,o?(s=this.toStr(this.container.id,"_",t.id,"TriangleStart",e.typeFirst),(!type_default.exists(r)||r.id!==s)&&(r=this.container.ownerDocument.getElementById(s),r===null&&(r=this._createArrowHead(t,"Start",e.typeFirst),this.defs.appendChild(r)),t.rendNodeTriangleStart=r,t.rendNode.setAttributeNS(null,"marker-start",this.toURL(s)))):(type_default.exists(r)&&(this.remove(r),t.rendNodeTriangleStart=null),t.rendNode.removeAttributeNS(null,"marker-start")),r=t.rendNodeTriangleEnd,a?(s=this.toStr(this.container.id,"_",t.id,"TriangleEnd",e.typeLast),(!type_default.exists(r)||r.id!==s)&&(r=this.container.ownerDocument.getElementById(s),r===null&&(r=this._createArrowHead(t,"End",e.typeLast),this.defs.appendChild(r)),t.rendNodeTriangleEnd=r,t.rendNode.setAttributeNS(null,"marker-end",this.toURL(s)))):(type_default.exists(r)&&(this.remove(r),t.rendNodeTriangleEnd=null),t.rendNode.removeAttributeNS(null,"marker-end"))},updateEllipsePrim:function(t,e,r,s,o){var a=1e6;a=2e5,e=Math.abs(e)<a?e:a*e/Math.abs(e),r=Math.abs(r)<a?r:a*r/Math.abs(r),s=Math.abs(s)<a?s:a*s/Math.abs(s),o=Math.abs(o)<a?o:a*o/Math.abs(o),t.setAttributeNS(null,"cx",e),t.setAttributeNS(null,"cy",r),t.setAttributeNS(null,"rx",Math.abs(s)),t.setAttributeNS(null,"ry",Math.abs(o))},updateLinePrim:function(t,e,r,s,o){var a=1e6;a=2e5,isNaN(e+r+s+o)||(e=Math.abs(e)<a?e:a*e/Math.abs(e),r=Math.abs(r)<a?r:a*r/Math.abs(r),s=Math.abs(s)<a?s:a*s/Math.abs(s),o=Math.abs(o)<a?o:a*o/Math.abs(o),t.setAttributeNS(null,"x1",e),t.setAttributeNS(null,"y1",r),t.setAttributeNS(null,"x2",s),t.setAttributeNS(null,"y2",o))},updatePathPrim:function(t,e){e===""&&(e="M 0 0"),t.setAttributeNS(null,"d",e)},updatePathStringPoint:function(t,e,r){var s="",o=t.coords.scrCoords,a=e*Math.sqrt(3)*.5,n=e*.5;return r==="x"?s=" M "+(o[1]-e)+" "+(o[2]-e)+" L "+(o[1]+e)+" "+(o[2]+e)+" M "+(o[1]+e)+" "+(o[2]-e)+" L "+(o[1]-e)+" "+(o[2]+e):r==="+"?s=" M "+(o[1]-e)+" "+o[2]+" L "+(o[1]+e)+" "+o[2]+" M "+o[1]+" "+(o[2]-e)+" L "+o[1]+" "+(o[2]+e):r==="|"?s=" M "+o[1]+" "+(o[2]-e)+" L "+o[1]+" "+(o[2]+e):r==="-"?s=" M "+(o[1]-e)+" "+o[2]+" L "+(o[1]+e)+" "+o[2]:r==="<>"||r==="<<>>"?(r==="<<>>"&&(e*=1.41),s=" M "+(o[1]-e)+" "+o[2]+" L "+o[1]+" "+(o[2]+e)+" L "+(o[1]+e)+" "+o[2]+" L "+o[1]+" "+(o[2]-e)+" Z "):r==="^"?s=" M "+o[1]+" "+(o[2]-e)+" L "+(o[1]-a)+" "+(o[2]+n)+" L "+(o[1]+a)+" "+(o[2]+n)+" Z ":r==="v"?s=" M "+o[1]+" "+(o[2]+e)+" L "+(o[1]-a)+" "+(o[2]-n)+" L "+(o[1]+a)+" "+(o[2]-n)+" Z ":r===">"?s=" M "+(o[1]+e)+" "+o[2]+" L "+(o[1]-n)+" "+(o[2]-a)+" L "+(o[1]-n)+" "+(o[2]+a)+" Z ":r==="<"&&(s=" M "+(o[1]-e)+" "+o[2]+" L "+(o[1]+n)+" "+(o[2]-a)+" L "+(o[1]+n)+" "+(o[2]+a)+" Z "),s},updatePathStringPrim:function(t){var e,r,s,o,a,n=" M ",l=" L ",h=" C ",d=n,u=env_default.maxScreenCoord,c,p,f="";if(t.numberPoints<=0)return"";if(a=Math.min(t.points.length,t.numberPoints),t.bezierDegree===1){for(e=0;e<a;e++)if(t.points[e]!==void 0)if(r=t.points[e].scrCoords,isNaN(r[1])||isNaN(r[2]))d=n;else{if(s=r[1],o=r[2],Math.abs(s)>u||Math.abs(o)>u){if(e>0)c=t.points[e-1].scrCoords;else if(e<a)c=t.points[e+1].scrCoords;else continue;if(e<a-1&&(isNaN(c[1])||isNaN(c[2]))&&(c=t.points[e+1].scrCoords),isNaN(c[1])||isNaN(c[2]))continue;Math.abs(o)>u&&(p=o-c[2],o=Math.max(Math.min(o,u),-u),s=c[1]+(s-c[1])*(o-c[2])/p),Math.abs(s)>u&&(p=s-c[1],s=Math.max(Math.min(s,u),-u),o=c[2]+(o-c[2])*(s-c[1])/p)}f+=d+s+" "+o,d=l}}else if(t.bezierDegree===3)for(e=0;e<a;)t.points[e]!==void 0&&(r=t.points[e].scrCoords,s=r[1],o=r[2],isNaN(s)||isNaN(o)?d=n:(f+=d+s+" "+o,d===h&&(e+=1,r=t.points[e].scrCoords,f+=" "+r[1]+" "+r[2],e+=1,r=t.points[e].scrCoords,f+=" "+r[1]+" "+r[2]),d=h),e+=1);return f},updatePathStringBezierPrim:function(t){var e,r,s,o,a,n,l,h,d,u=" M ",c=" C ",p=u,f="",_=t.evalVisProp("strokewidth"),g=t.evalVisProp("curvetype")!=="plot";if(t.numberPoints<=0)return"";for(g&&t.board.options.curve.RDPsmoothing&&(t.points=numerics_default.RamerDouglasPeucker(t.points,.5)),d=Math.min(t.points.length,t.numberPoints),r=1;r<3;r++)for(p=u,e=0;e<d;e++)o=t.points[e].scrCoords,isNaN(o[1])||isNaN(o[2])?p=u:(a=o[1],n=o[2],p===u?f+=p+a+" "+n:(s=2*r,f+=[p,l+(a-l)*.333+_*(s*Math.random()-r)," ",h+(n-h)*.333+_*(s*Math.random()-r)," ",l+(a-l)*.666+_*(s*Math.random()-r)," ",h+(n-h)*.666+_*(s*Math.random()-r)," ",a," ",n].join("")),p=c,l=a,h=n);return f},updatePolygonPrim:function(t,e){var r,s="",o,a=e.vertices.length;for(t.setAttributeNS(null,"stroke","none"),t.setAttributeNS(null,"fill-rule","evenodd"),e.elType==="polygonalchain"&&a++,r=0;r<a-1;r++){if(e.vertices[r].isReal)o=e.vertices[r].coords.scrCoords,s=s+o[1]+","+o[2];else{t.setAttributeNS(null,"points","");return}r<a-2&&(s+=" ")}s.indexOf("NaN")===-1&&t.setAttributeNS(null,"points",s)},updateRectPrim:function(t,e,r,s,o){t.setAttributeNS(null,"x",e),t.setAttributeNS(null,"y",r),t.setAttributeNS(null,"width",s),t.setAttributeNS(null,"height",o)},_setAttribute:function(t,e){e===""?t():window.setTimeout(t,1)},display:function(t,e){var r;t&&t.rendNode&&(t.visPropOld.visible=e,r=t.rendNode,e?(r.setAttributeNS(null,"display","inline"),r.style.visibility="inherit"):(r.setAttributeNS(null,"display","none"),r.style.visibility="hidden"))},hide:function(t){jxg_default.deprecated("Board.renderer.hide()","Board.renderer.display()"),this.display(t,!1)},setARIA:function(t){var e,r,s;for(e in t.visProp.aria)t.visProp.aria.hasOwnProperty(e)&&e!=="enabled"&&(r="aria."+e,s=t.evalVisProp("aria."+e),t.visPropOld[r]!==s&&(this.setPropertyPrim(t.rendNode,"aria-"+e,s),t.visPropOld[r]=s))},setBuffering:function(t,e){t.rendNode.setAttribute("buffered-rendering",e)},setCssClass(t,e){t.visPropOld.cssclass!==e&&(this.setPropertyPrim(t.rendNode,"class",e),t.visPropOld.cssclass=e)},setDashStyle:function(t){var e=t.evalVisProp("dash"),r=t.evalVisProp("dashscale")?.5*t.evalVisProp("strokewidth"):1,s=t.rendNode;e>0?s.setAttributeNS(null,"stroke-dasharray",this.dashArray[e-1].map(function(o){return o*r}).join(",")):s.hasAttributeNS(null,"stroke-dasharray")&&s.removeAttributeNS(null,"stroke-dasharray")},setGradient:function(t){var e=t.rendNode,r,s,o,a=t.evalVisProp("gradient");a==="linear"||a==="radial"?(r=this.createPrim(a+"Gradient",t.id+"_gradient"),s=this.createPrim("stop",t.id+"_gradient1"),o=this.createPrim("stop",t.id+"_gradient2"),r.appendChild(s),r.appendChild(o),this.defs.appendChild(r),e.setAttributeNS(null,"style","fill:"+this.toURL(this.container.id+"_"+t.id+"_gradient")),t.gradNode1=s,t.gradNode2=o,t.gradNode=r):e.removeAttributeNS(null,"style")},setLineCap:function(t){var e=t.evalVisProp("linecap");e===void 0||e===""||t.visPropOld.linecap===e||!type_default.exists(t.rendNode)||(this.setPropertyPrim(t.rendNode,"stroke-linecap",e),t.visPropOld.linecap=e)},setObjectFillColor:function(t,e,r,s){var o,a,n,l,h=e,d=r,u=t.evalVisProp("gradient");d=d>0?d:0,(t.visPropOld.fillcolor!==h||t.visPropOld.fillopacity!==d||u!==null)&&(type_default.exists(h)&&h!==!1&&(h.length!==9?(a=h,l=d):(n=color_default.rgba2rgbo(h),a=n[0],l=d*n[1]),s===void 0?o=t.rendNode:o=s,a!=="none"&&a!==""&&a!==!1&&this._setAttribute(function(){o.setAttributeNS(null,"fill",a)},t.visPropOld.fillcolor),t.type===jxg_default.OBJECT_TYPE_IMAGE?this._setAttribute(function(){o.setAttributeNS(null,"opacity",l)},t.visPropOld.fillopacity):(a==="none"?(l=0,o.setAttributeNS(null,"pointer-events","visibleStroke")):o.setAttributeNS(null,"pointer-events","visiblePainted"),this._setAttribute(function(){o.setAttributeNS(null,"fill-opacity",l)},t.visPropOld.fillopacity)),(u==="linear"||u==="radial")&&this.updateGradient(t)),t.visPropOld.fillcolor=h,t.visPropOld.fillopacity=d)},setObjectStrokeColor:function(t,e,r){var s=e,o,a,n=r,l,h;n=n>0?n:0,(t.visPropOld.strokecolor!==s||t.visPropOld.strokeopacity!==n)&&(type_default.exists(s)&&s!==!1&&(s.length!==9?(o=s,l=n):(a=color_default.rgba2rgbo(s),o=a[0],l=n*a[1]),h=t.rendNode,t.elementClass===constants.OBJECT_CLASS_TEXT?t.evalVisProp("display")==="html"?this._setAttribute(function(){h.style.color=o,h.style.opacity=l},t.visPropOld.strokecolor):this._setAttribute(function(){h.setAttributeNS(null,"fill",o),h.setAttributeNS(null,"fill-opacity",l)},t.visPropOld.strokecolor):this._setAttribute(function(){h.setAttributeNS(null,"stroke",o),h.setAttributeNS(null,"stroke-opacity",l)},t.visPropOld.strokecolor),(t.elementClass===constants.OBJECT_CLASS_CURVE||t.elementClass===constants.OBJECT_CLASS_LINE)&&(t.evalVisProp("firstarrow")&&this._setArrowColor(t.rendNodeTriangleStart,o,l,t,t.visPropCalc.typeFirst),t.evalVisProp("lastarrow")&&this._setArrowColor(t.rendNodeTriangleEnd,o,l,t,t.visPropCalc.typeLast))),t.visPropOld.strokecolor=s,t.visPropOld.strokeopacity=n)},setObjectStrokeWidth:function(t,e){var r,s=e;isNaN(s)||t.visPropOld.strokewidth===s||(r=t.rendNode,this.setPropertyPrim(r,"stroked","true"),type_default.exists(s)&&this.setPropertyPrim(r,"stroke-width",s+"px"),t.visPropOld.strokewidth=s)},setObjectTransition:function(t,e){var r,s,o=[],a,n,l=0,h=["rendNode","rendNodeTriangleStart","rendNodeTriangleEnd"];if(e===void 0&&(e=t.evalVisProp("transitionduration")),s=t.evalVisProp("transitionproperties"),!(e===t.visPropOld.transitionduration&&s===t.visPropOld.transitionproperties)){for(type_default.exists(s)&&(l=s.length),n=0;n<l;n++)o.push(s[n]+" "+e+"ms");for(a=o.join(", "),l=h.length,n=0;n<l;++n)t[h[n]]&&(r=t[h[n]],r.style.transition=a);t.visPropOld.transitionduration=e,t.visPropOld.transitionproperties=s}},setShadow:function(t){var e=t.evalVisProp("shadow"),r,s,o,a,n,l,h,d,u=!0,c=!1;r=JSON.stringify(e),r!==t.visPropOld.shadow&&(typeof e=="boolean"?(u=!0,c=e,s="none",o=3,a=.1,n=[5,5],l=1):t.evalVisProp("shadow.enabled")?(u=!1,c=!0,s=jxg_default.rgbParser(t.evalVisProp("shadow.color")),o=t.evalVisProp("shadow.blur"),a=t.evalVisProp("shadow.blend"),n=t.evalVisProp("shadow.offset"),l=t.evalVisProp("shadow.opacity")):c=!1,type_default.exists(t.rendNode)&&(c?u?t.rendNode.setAttributeNS(null,"filter",this.toURL(this.container.id+"_f1")):(d=this.container.ownerDocument.getElementById(h),d&&this.defs.removeChild(d),h=t.rendNode.id+"_f1",this.defs.appendChild(this.createShadowFilter(h,s,l,a,o,n)),t.rendNode.setAttributeNS(null,"filter",this.toURL(h))):t.rendNode.removeAttributeNS(null,"filter")),t.visPropOld.shadow=r)},setTabindex:function(t){var e;t.board.attr.keyboard.enabled&&type_default.exists(t.rendNode)&&(e=t.evalVisProp("tabindex"),t.visPropCalc.visible||(e=null),e!==t.visPropOld.tabindex&&(t.rendNode.setAttribute("tabindex",e),t.visPropOld.tabindex=e))},setPropertyPrim:function(t,e,r){e!=="stroked"&&t.setAttributeNS(null,e,r)},show:function(t){jxg_default.deprecated("Board.renderer.show()","Board.renderer.display()"),this.display(t,!0)},updateGradient:function(t){var e,r,s=t.gradNode1,o=t.gradNode2,a=t.evalVisProp("gradient");!type_default.exists(s)||!type_default.exists(o)||(r=t.evalVisProp("fillopacity"),r=r>0?r:0,e=t.evalVisProp("fillcolor"),s.setAttributeNS(null,"style","stop-color:"+e+";stop-opacity:"+r),o.setAttributeNS(null,"style","stop-color:"+t.evalVisProp("gradientsecondcolor")+";stop-opacity:"+t.evalVisProp("gradientsecondopacity")),s.setAttributeNS(null,"offset",t.evalVisProp("gradientstartoffset")*100+"%"),o.setAttributeNS(null,"offset",t.evalVisProp("gradientendoffset")*100+"%"),a==="linear"?this.updateGradientAngle(t.gradNode,t.evalVisProp("gradientangle")):a==="radial"&&this.updateGradientCircle(t.gradNode,t.evalVisProp("gradientcx"),t.evalVisProp("gradientcy"),t.evalVisProp("gradientr"),t.evalVisProp("gradientfx"),t.evalVisProp("gradientfy"),t.evalVisProp("gradientfr")))},updateGradientAngle:function(t,e){var r=1,s=Math.cos(e),o=Math.sin(e);Math.abs(s)>Math.abs(o)?r/=Math.abs(s):r/=Math.abs(o),s>=0?(t.setAttributeNS(null,"x1",0),t.setAttributeNS(null,"x2",s*r)):(t.setAttributeNS(null,"x1",-s*r),t.setAttributeNS(null,"x2",0)),o>=0?(t.setAttributeNS(null,"y1",0),t.setAttributeNS(null,"y2",o*r)):(t.setAttributeNS(null,"y1",-o*r),t.setAttributeNS(null,"y2",0))},updateGradientCircle:function(t,e,r,s,o,a,n){t.setAttributeNS(null,"cx",e*100+"%"),t.setAttributeNS(null,"cy",r*100+"%"),t.setAttributeNS(null,"r",s*100+"%"),t.setAttributeNS(null,"fx",o*100+"%"),t.setAttributeNS(null,"fy",a*100+"%"),t.setAttributeNS(null,"fr",n*100+"%")},suspendRedraw:function(){this.suspendHandle=this.svgRoot.suspendRedraw(1e4)},unsuspendRedraw:function(){this.svgRoot.unsuspendRedraw(this.suspendHandle)},resize:function(t,e){this.svgRoot.setAttribute("width",parseFloat(t)),this.svgRoot.setAttribute("height",parseFloat(e)),type_default.exists(this.updateClipPathRect)&&this.updateClipPathRect(t,e)},createTouchpoints:function(t){var e,r,s,o;for(this.touchpoints=[],e=0;e<t;e++)r="touchpoint1_"+e,o=this.createPrim("path",r),this.appendChildPrim(o,19),o.setAttributeNS(null,"d","M 0 0"),this.touchpoints.push(o),this.setPropertyPrim(o,"stroked","true"),this.setPropertyPrim(o,"stroke-width","1px"),o.setAttributeNS(null,"stroke","#000000"),o.setAttributeNS(null,"stroke-opacity",1),o.setAttributeNS(null,"display","none"),s="touchpoint2_"+e,o=this.createPrim("ellipse",s),this.appendChildPrim(o,19),this.updateEllipsePrim(o,0,0,0,0),this.touchpoints.push(o),this.setPropertyPrim(o,"stroked","true"),this.setPropertyPrim(o,"stroke-width","1px"),o.setAttributeNS(null,"stroke","#000000"),o.setAttributeNS(null,"fill","#ffffff"),o.setAttributeNS(null,"stroke-opacity",1),o.setAttributeNS(null,"fill-opacity",0),o.setAttributeNS(null,"display","none")},showTouchpoint:function(t){this.touchpoints&&t>=0&&2*t<this.touchpoints.length&&(this.touchpoints[2*t].setAttributeNS(null,"display","inline"),this.touchpoints[2*t+1].setAttributeNS(null,"display","inline"))},hideTouchpoint:function(t){this.touchpoints&&t>=0&&2*t<this.touchpoints.length&&(this.touchpoints[2*t].setAttributeNS(null,"display","none"),this.touchpoints[2*t+1].setAttributeNS(null,"display","none"))},updateTouchpoint:function(t,e){var r,s,o=37;this.touchpoints&&t>=0&&2*t<this.touchpoints.length&&(r=e[0],s=e[1],this.touchpoints[2*t].setAttributeNS(null,"d","M "+(r-o)+" "+s+" L "+(r+o)+" "+s+" M "+r+" "+(s-o)+" L "+r+" "+(s+o)),this.updateEllipsePrim(this.touchpoints[2*t+1],e[0],e[1],25,25))},_getValuesOfDOMElements:function(t){var e=[];if(t.nodeType===1)for(t=t.firstChild;t;)t.id!==void 0&&t.value!==void 0&&e.push([t.id,t.value]),type_default.concat(e,this._getValuesOfDOMElements(t)),t=t.nextSibling;return e},_getImgDataURL:function(t){var e=t.getElementsByTagName("image"),r=e.length,s,o,a,n,l;if(r>0){for(s=document.createElement("canvas"),n=0;n<r;n++)if(e[n].attributes.getNamedItem("href")!==null?l=e[n].attributes.getNamedItem("href").value:l=e[n].attributes.getNamedItemNS(this.xlinkNamespace,"xlink:href").value,l.indexOf("data:image")!==0){e[n].setAttribute("crossorigin","anonymous"),o=s.getContext("2d"),s.width=e[n].getAttribute("width"),s.height=e[n].getAttribute("height");try{o.drawImage(e[n],0,0,s.width,s.height),a=s.toDataURL(),e[n].setAttribute("xlink:href",a),e[n].setAttribute("href",a)}catch(h){console.log("CORS problem! Image can not be used",h)}}}return!0},dumpToDataURI:function(t){var e=this.svgRoot,r=window.btoa||base64_default.encode,s,o,a,n,l=[];if(this.container.hasChildNodes()&&type_default.exists(this.foreignObjLayer))for(t||this.foreignObjLayer.setAttribute("display","inline");e.nextSibling;)type_default.concat(l,this._getValuesOfDOMElements(e.nextSibling)),this.foreignObjLayer.appendChild(e.nextSibling);if(this._getImgDataURL(e),e.setAttribute("xmlns","http://www.w3.org/2000/svg"),s=new XMLSerializer().serializeToString(e),t!==!0)for(a=l.length,o=0;o<a;o++)s=s.replace('id="'+l[o][0]+'"','id="'+l[o][0]+'" value="'+l[o][1]+'"');if(this.isIE&&(s.match(/xmlns="http:\/\/www.w3.org\/2000\/svg"\s+xmlns="http:\/\/www.w3.org\/2000\/svg"/g)||[]).length>1&&(s=s.replace(/xmlns="http:\/\/www.w3.org\/2000\/svg"\s+xmlns="http:\/\/www.w3.org\/2000\/svg"/g,"")),s=s.replace(/&nbsp;/g," "),type_default.exists(this.foreignObjLayer)&&this.foreignObjLayer.hasChildNodes()){for(;this.foreignObjLayer.firstChild;)this.container.appendChild(this.foreignObjLayer.firstChild);this.foreignObjLayer.setAttribute("display","none")}return n=r(unescape(encodeURIComponent(s))),"data:image/svg+xml;base64,"+n},dumpToCanvas:function(t,e,r,s){var o,a,n=this.container.ownerDocument.getElementById(t),l;return n.width=n.width,l=n.getContext("2d"),e!==void 0&&r!==void 0&&(n.style.width=parseFloat(e)+"px",n.style.height=parseFloat(r)+"px",n.setAttribute("width",parseFloat(e)),n.setAttribute("height",parseFloat(r))),a=new Image,o=this.dumpToDataURI(s),a.src=o,"Promise"in window?new Promise(function(h,d){try{a.onload=function(){l.drawImage(a,0,0,e,r),h()}}catch(u){d(u)}}):(a.onload=function(){window.setTimeout(function(){try{l.drawImage(a,0,0,e,r)}catch{console.log("screenshots not longer supported on IE")}},200)},this)},screenshot:function(t,e,r){var s,o=this.container.ownerDocument,a=this.container.parentNode,n,l,h,d,u,c,p,f=t.attr.screenshot,_,g,m,b=!1,C,y=!1;return this.type==="no"?this:(c=f.scale*this.container.getBoundingClientRect().width,p=f.scale*this.container.getBoundingClientRect().height,e===void 0||e===""?(b=!0,h=new Image,h.style.width=c+"px",h.style.height=p+"px"):(b=!1,h=o.getElementById(e)),b&&(s=o.createElement("div"),s.style.cssText=f.css,s.style.width=c+"px",s.style.height=p+"px",s.style.zIndex=this.container.style.zIndex+120,s.style.position="absolute",s.style.top=this.container.offsetTop+"px",s.style.left=this.container.offsetLeft+"px"),y?(l="jxgbox_canvas",n=o.getElementById(l)):(n=o.createElement("canvas"),l=Math.random().toString(36).slice(2,7),n.setAttribute("id",l),n.setAttribute("width",c),n.setAttribute("height",p),n.style.width=c+"px",n.style.height=c+"px",n.style.display="none",a.appendChild(n)),b&&(d=o.createElement("span"),u=o.createTextNode("✖"),d.style.cssText=f.cssButton,d.appendChild(u),d.onclick=function(){s.parentNode.removeChild(s)},s.appendChild(h),s.appendChild(d),a.insertBefore(s,this.container.nextSibling)),_=o.getElementById(this.uniqName("navigationbar")),type_default.exists(_)&&(g=_.style.display,_.style.display="none",m=this.removeToInsertLater(_)),C=function(){h.src=n.toDataURL("image/png"),a.removeChild(n)},"Promise"in window?this.dumpToCanvas(l,c,p,r).then(C):(this.dumpToCanvas(l,c,p,r),window.setTimeout(C,200)),type_default.exists(_)&&(_.style.display=g,m()),this)}});var svg_default=jxg_default.SVGRenderer;jxg_default.VMLRenderer=function(t){this.type="vml",this.container=t,this.container.style.overflow="hidden",this.container.style.position===""&&(this.container.style.position="relative"),this.container.onselectstart=function(){return!1},this.resolution=10,type_default.exists(jxg_default.vmlStylesheet)||(t.ownerDocument.namespaces.add("jxgvml","urn:schemas-microsoft-com:vml"),jxg_default.vmlStylesheet=this.container.ownerDocument.createStyleSheet(),jxg_default.vmlStylesheet.addRule(".jxgvml","behavior:url(#default#VML)"));try{t.ownerDocument.namespaces.jxgvml||t.ownerDocument.namespaces.add("jxgvml","urn:schemas-microsoft-com:vml"),this.createNode=function(e){return t.ownerDocument.createElement("<jxgvml:"+e+' class="jxgvml">')}}catch{this.createNode=function(e){return t.ownerDocument.createElement("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="jxgvml">')}}this.dashArray=["Solid","1 1","ShortDash","Dash","LongDash","ShortDashDot","LongDashDot"]};jxg_default.VMLRenderer.prototype=new abstract_default;jxg_default.extend(jxg_default.VMLRenderer.prototype,{_setAttr:function(t,e,r,s){try{this.container.ownerDocument.documentMode===8?t[e]=r:t.setAttribute(e,r,s)}catch{jxg_default.debug("_setAttr: "+e+" "+r+`<br>
102
+ `)}},updateTicks:function(t){var e,r,s,o,a,n=this.resolution,l=[];for(r=t.ticks.length,e=0;e<r;e++)s=t.ticks[e],o=s[0],a=s[1],type_default.isNumber(o[0])&&type_default.isNumber(o[1])&&l.push(" m "+Math.round(n*o[0])+", "+Math.round(n*a[0])+" l "+Math.round(n*o[1])+", "+Math.round(n*a[1])+" ");type_default.exists(t.rendNode)||(t.rendNode=this.createPrim("path",t.id),this.appendChildPrim(t.rendNode,t.evalVisProp("layer"))),this._setAttr(t.rendNode,"stroked","true"),this._setAttr(t.rendNode,"strokecolor",t.evalVisProp("strokecolor"),1),this._setAttr(t.rendNode,"strokeweight",t.evalVisProp("strokewidth")),this._setAttr(t.rendNodeStroke,"opacity",t.evalVisProp("strokeopacity")*100+"%"),this.updatePathPrim(t.rendNode,l,t.board)},displayCopyright:function(t,e){var r=this.createNode("textbox"),s;r.style.position="absolute",this._setAttr(r,"id",this.container.id+"_licenseText"),r.style.left=20,r.style.top=2,r.style.fontSize=e,r.style.color="#356AA0",r.style.fontFamily="Arial,Helvetica,sans-serif",this._setAttr(r,"opacity","30%"),r.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingMethod='auto expand', enabled = false) progid:DXImageTransform.Microsoft.Alpha(opacity = 30, enabled = true)",s=this.container.ownerDocument.createTextNode(t),r.appendChild(s),this.appendChildPrim(r,0)},drawInternalText:function(t){var e=this.createNode("textbox");return e.style.position="absolute",t.rendNodeText=this.container.ownerDocument.createTextNode(""),e.appendChild(t.rendNodeText),this.appendChildPrim(e,9),e.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingMethod='auto expand', enabled = false) progid:DXImageTransform.Microsoft.Alpha(opacity = 100, enabled = false)",e},updateInternalText:function(t){var e,r=t.plaintext,s=this.joinTransforms(t,t.transformations),o=[0,0],a,n,l,h,d,u=t.rendNode,c=[],p=t.getAnchorX(),f=t.getAnchorY();if(!isNaN(t.coords.scrCoords[1]+t.coords.scrCoords[2])){for(p==="right"?o[0]=1:p==="middle"&&(o[0]=.5),f==="bottom"?o[1]=1:f==="middle"&&(o[1]=.5),c[0]=math_default.matVecMult(s,[1,t.coords.scrCoords[1]-o[0]*t.size[0],t.coords.scrCoords[2]+(1-o[1])*t.size[1]+this.vOffsetText]),c[0][1]/=c[0][0],c[0][2]/=c[0][0],c[1]=math_default.matVecMult(s,[1,t.coords.scrCoords[1]+(1-o[0])*t.size[0],t.coords.scrCoords[2]+(1-o[1])*t.size[1]+this.vOffsetText]),c[1][1]/=c[1][0],c[1][2]/=c[1][0],c[2]=math_default.matVecMult(s,[1,t.coords.scrCoords[1]+(1-o[0])*t.size[0],t.coords.scrCoords[2]-o[1]*t.size[1]+this.vOffsetText]),c[2][1]/=c[2][0],c[2][2]/=c[2][0],c[3]=math_default.matVecMult(s,[1,t.coords.scrCoords[1]-o[0]*t.size[0],t.coords.scrCoords[2]-o[1]*t.size[1]+this.vOffsetText]),c[3][1]/=c[3][0],c[3][2]/=c[3][0],a=c[0][1],l=c[0][1],n=c[0][2],h=c[0][2],d=1;d<4;d++)a=Math.max(a,c[d][1]),l=Math.min(l,c[d][1]),n=Math.max(n,c[d][2]),h=Math.min(h,c[d][2]);e=o[0]===1?Math.floor(t.board.canvasWidth-a):Math.floor(l),t.visPropOld.left!==p+e&&(o[0]===1?(t.rendNode.style.right=e+"px",t.rendNode.style.left="auto"):(t.rendNode.style.left=e+"px",t.rendNode.style.right="auto"),t.visPropOld.left=p+e),e=o[1]===1?Math.floor(t.board.canvasHeight-n):Math.floor(h),t.visPropOld.top!==f+e&&(o[1]===1?(t.rendNode.style.bottom=e+"px",t.rendNode.style.top="auto"):(t.rendNode.style.top=e+"px",t.rendNode.style.bottom="auto"),t.visPropOld.top=f+e)}t.htmlStr!==r&&(t.rendNodeText.data=r,t.htmlStr=r),u.filters.item(0).M11=s[1][1],u.filters.item(0).M12=s[1][2],u.filters.item(0).M21=s[2][1],u.filters.item(0).M22=s[2][2],u.filters.item(0).enabled=!0},drawImage:function(t){var e=this.container.ownerDocument.createElement("img");e.style.position="absolute",this._setAttr(e,"id",this.container.id+"_"+t.id),this.container.appendChild(e),this.appendChildPrim(e,t.evalVisProp("layer")),e.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingMethod='auto expand') progid:DXImageTransform.Microsoft.Alpha(opacity = 100, enabled = false)",t.rendNode=e,this.updateImage(t)},transformRect:function(t,e){var r,s,o,a,n,l,h=t.rendNode,d=[];if(e.length>0){for(r=this.joinTransforms(t,e),d[0]=math_default.matVecMult(r,t.coords.scrCoords),d[0][1]/=d[0][0],d[0][2]/=d[0][0],d[1]=math_default.matVecMult(r,[1,t.coords.scrCoords[1]+t.size[0],t.coords.scrCoords[2]]),d[1][1]/=d[1][0],d[1][2]/=d[1][0],d[2]=math_default.matVecMult(r,[1,t.coords.scrCoords[1]+t.size[0],t.coords.scrCoords[2]-t.size[1]]),d[2][1]/=d[2][0],d[2][2]/=d[2][0],d[3]=math_default.matVecMult(r,[1,t.coords.scrCoords[1],t.coords.scrCoords[2]-t.size[1]]),d[3][1]/=d[3][0],d[3][2]/=d[3][0],s=d[0][1],a=d[0][1],o=d[0][2],n=d[0][2],l=1;l<4;l++)s=Math.max(s,d[l][1]),a=Math.min(a,d[l][1]),o=Math.max(o,d[l][2]),n=Math.min(n,d[l][2]);h.style.left=Math.floor(a)+"px",h.style.top=Math.floor(n)+"px",h.filters.item(0).M11=r[1][1],h.filters.item(0).M12=r[1][2],h.filters.item(0).M21=r[2][1],h.filters.item(0).M22=r[2][2],h.filters.item(0).enabled=!0}},updateImageURL:function(t){var e=t.eval(t.url);this._setAttr(t.rendNode,"src",e)},appendChildPrim:function(t,e){return type_default.exists(e)||(e=0),t.style.zIndex=e,this.container.appendChild(t),t},appendNodesToElement:function(t,e){(e==="shape"||e==="path"||e==="polygon")&&(t.rendNodePath=this.getElementById(t.id+"_path")),t.rendNodeFill=this.getElementById(t.id+"_fill"),t.rendNodeStroke=this.getElementById(t.id+"_stroke"),t.rendNodeShadow=this.getElementById(t.id+"_shadow"),t.rendNode=this.getElementById(t.id)},createPrim:function(t,e){var r,s,o=this.createNode("fill"),a=this.createNode("stroke"),n=this.createNode("shadow");return this._setAttr(o,"id",this.container.id+"_"+e+"_fill"),this._setAttr(a,"id",this.container.id+"_"+e+"_stroke"),this._setAttr(n,"id",this.container.id+"_"+e+"_shadow"),t==="circle"||t==="ellipse"?(r=this.createNode("oval"),r.appendChild(o),r.appendChild(a),r.appendChild(n)):t==="polygon"||t==="path"||t==="shape"||t==="line"?(r=this.createNode("shape"),r.appendChild(o),r.appendChild(a),r.appendChild(n),s=this.createNode("path"),this._setAttr(s,"id",this.container.id+"_"+e+"_path"),r.appendChild(s)):(r=this.createNode(t),r.appendChild(o),r.appendChild(a),r.appendChild(n)),r.style.position="absolute",r.style.left="0px",r.style.top="0px",this._setAttr(r,"id",this.container.id+"_"+e),r},remove:function(t){type_default.exists(t)&&t.removeNode(!0)},makeArrows:function(t){var e,r=t.evalVisProp("firstarrow"),s=t.evalVisProp("lastarrow");t.visPropOld.firstarrow===r&&t.visPropOld.lastarrow===s||(r?(e=t.rendNodeStroke,this._setAttr(e,"startarrow","block"),this._setAttr(e,"startarrowlength","long")):(e=t.rendNodeStroke,type_default.exists(e)&&this._setAttr(e,"startarrow","none")),s?(e=t.rendNodeStroke,this._setAttr(e,"id",this.container.id+"_"+t.id+"stroke"),this._setAttr(e,"endarrow","block"),this._setAttr(e,"endarrowlength","long")):(e=t.rendNodeStroke,type_default.exists(e)&&this._setAttr(e,"endarrow","none")),t.visPropOld.firstarrow=r,t.visPropOld.lastarrow=s)},updateEllipsePrim:function(t,e,r,s,o){t.style.left=Math.floor(e-s)+"px",t.style.top=Math.floor(r-o)+"px",t.style.width=Math.floor(Math.abs(s)*2)+"px",t.style.height=Math.floor(Math.abs(o)*2)+"px"},updateLinePrim:function(t,e,r,s,o,a){var n,l=this.resolution;isNaN(e+r+s+o)||(n=["m ",Math.floor(l*e),", ",Math.floor(l*r)," l ",Math.floor(l*s),", ",Math.floor(l*o)],this.updatePathPrim(t,n,a))},updatePathPrim:function(t,e,r){var s=r.canvasWidth,o=r.canvasHeight;e.length<=0&&(e=["m 0,0"]),t.style.width=s,t.style.height=o,this._setAttr(t,"coordsize",[Math.floor(this.resolution*s),Math.floor(this.resolution*o)].join(",")),this._setAttr(t,"path",e.join(""))},updatePathStringPoint:function(t,e,r){var s=[],o=Math.round,a=t.coords.scrCoords,n=e*Math.sqrt(3)*.5,l=e*.5,h=this.resolution;return r==="x"?s.push([" m ",o(h*(a[1]-e)),", ",o(h*(a[2]-e))," l ",o(h*(a[1]+e)),", ",o(h*(a[2]+e))," m ",o(h*(a[1]+e)),", ",o(h*(a[2]-e))," l ",o(h*(a[1]-e)),", ",o(h*(a[2]+e))].join("")):r==="+"?s.push([" m ",o(h*(a[1]-e)),", ",o(h*a[2])," l ",o(h*(a[1]+e)),", ",o(h*a[2])," m ",o(h*a[1]),", ",o(h*(a[2]-e))," l ",o(h*a[1]),", ",o(h*(a[2]+e))].join("")):r==="<>"||r==="<<>>"?(r==="<<>>"&&(e*=1.41),s.push([" m ",o(h*(a[1]-e)),", ",o(h*a[2])," l ",o(h*a[1]),", ",o(h*(a[2]+e))," l ",o(h*(a[1]+e)),", ",o(h*a[2])," l ",o(h*a[1]),", ",o(h*(a[2]-e))," x e "].join(""))):r==="^"?s.push([" m ",o(h*a[1]),", ",o(h*(a[2]-e))," l ",o(h*(a[1]-n)),", ",o(h*(a[2]+l))," l ",o(h*(a[1]+n)),", ",o(h*(a[2]+l))," x e "].join("")):r==="v"?s.push([" m ",o(h*a[1]),", ",o(h*(a[2]+e))," l ",o(h*(a[1]-n)),", ",o(h*(a[2]-l))," l ",o(h*(a[1]+n)),", ",o(h*(a[2]-l))," x e "].join("")):r===">"?s.push([" m ",o(h*(a[1]+e)),", ",o(h*a[2])," l ",o(h*(a[1]-l)),", ",o(h*(a[2]-n))," l ",o(h*(a[1]-l)),", ",o(h*(a[2]+n))," l ",o(h*(a[1]+e)),", ",o(h*a[2])].join("")):r==="<"&&s.push([" m ",o(h*(a[1]-e)),", ",o(h*a[2])," l ",o(h*(a[1]+l)),", ",o(h*(a[2]-n))," l ",o(h*(a[1]+l)),", ",o(h*(a[2]+n))," x e "].join("")),s},updatePathStringPrim:function(t){var e,r,s=[],o=this.resolution,a=Math.round,n=" m ",l=" l ",h=" c ",d=n,u=Math.min(t.numberPoints,8192);if(t.numberPoints<=0)return"";if(u=Math.min(u,t.points.length),t.bezierDegree===1)for(e=0;e<u;e++)r=t.points[e].scrCoords,isNaN(r[1])||isNaN(r[2])?d=n:(r[1]>2e4?r[1]=2e4:r[1]<-2e4&&(r[1]=-2e4),r[2]>2e4?r[2]=2e4:r[2]<-2e4&&(r[2]=-2e4),s.push([d,a(o*r[1]),", ",a(o*r[2])].join("")),d=l);else if(t.bezierDegree===3)for(e=0;e<u;)r=t.points[e].scrCoords,isNaN(r[1])||isNaN(r[2])?d=n:(s.push([d,a(o*r[1]),", ",a(o*r[2])].join("")),d===h&&(e+=1,r=t.points[e].scrCoords,s.push([" ",a(o*r[1]),", ",a(o*r[2])].join("")),e+=1,r=t.points[e].scrCoords,s.push([" ",a(o*r[1]),", ",a(o*r[2])].join(""))),d=h),e+=1;return s.push(" e"),s},updatePathStringBezierPrim:function(t){var e,r,s,o,a,n,l=[],h=t.evalVisProp("strokewidth"),d=this.resolution,u=Math.round,c=" m ",p=" c ",f=c,_=t.evalVisProp("curvetype")!=="plot",g=Math.min(t.numberPoints,8192);if(t.numberPoints<=0)return"";for(_&&t.board.options.curve.RDPsmoothing&&(t.points=numerics_default.RamerDouglasPeucker(t.points,1)),g=Math.min(g,t.points.length),r=1;r<3;r++)for(f=c,e=0;e<g;e++)o=t.points[e].scrCoords,isNaN(o[1])||isNaN(o[2])?f=c:(o[1]>2e4?o[1]=2e4:o[1]<-2e4&&(o[1]=-2e4),o[2]>2e4?o[2]=2e4:o[2]<-2e4&&(o[2]=-2e4),f===c?l.push([f,u(d*o[1])," ",u(d*o[2])].join("")):(s=2*r,l.push([f,u(d*(a+(o[1]-a)*.333+h*(s*Math.random()-r)))," ",u(d*(n+(o[2]-n)*.333+h*(s*Math.random()-r)))," ",u(d*(a+(o[1]-a)*.666+h*(s*Math.random()-r)))," ",u(d*(n+(o[2]-n)*.666+h*(s*Math.random()-r)))," ",u(d*o[1])," ",u(d*o[2])].join(""))),f=p,a=o[1],n=o[2]);return l.push(" e"),l},updatePolygonPrim:function(t,e){var r,s=e.vertices.length,o=this.resolution,a,n=[];if(this._setAttr(t,"stroked","false"),a=e.vertices[0].coords.scrCoords,!isNaN(a[1]+a[2])){for(n.push(["m ",Math.floor(o*a[1]),",",Math.floor(o*a[2])," l "].join("")),r=1;r<s-1;r++){if(e.vertices[r].isReal){if(a=e.vertices[r].coords.scrCoords,isNaN(a[1]+a[2]))return;n.push(Math.floor(o*a[1])+","+Math.floor(o*a[2]))}else{this.updatePathPrim(t,"",e.board);return}r<s-2&&n.push(", ")}n.push(" x e"),this.updatePathPrim(t,n,e.board)}},updateRectPrim:function(t,e,r,s,o){t.style.left=Math.floor(e)+"px",t.style.top=Math.floor(r)+"px",s>=0&&(t.style.width=s+"px"),o>=0&&(t.style.height=o+"px")},setPropertyPrim:function(t,e,r){var s="",o;switch(e){case"stroke":s="strokecolor";break;case"stroke-width":s="strokeweight";break;case"stroke-dasharray":s="dashstyle"}s!==""&&(o=r,this._setAttr(t,s,o))},display:function(t,e){t&&t.rendNode&&(t.visPropOld.visible=e,e?t.rendNode.style.visibility="inherit":t.rendNode.style.visibility="hidden")},show:function(t){jxg_default.deprecated("Board.renderer.show()","Board.renderer.display()"),t&&t.rendNode&&(t.rendNode.style.visibility="inherit")},hide:function(t){jxg_default.deprecated("Board.renderer.hide()","Board.renderer.display()"),t&&t.rendNode&&(t.rendNode.style.visibility="hidden")},setDashStyle:function(t,e){var r;e.dash>=0&&(r=t.rendNodeStroke,this._setAttr(r,"dashstyle",this.dashArray[e.dash]))},setGradient:function(t){var e=t.rendNodeFill,r=t.evalVisProp("gradient");r==="linear"?(this._setAttr(e,"type","gradient"),this._setAttr(e,"color2",t.evalVisProp("gradientsecondcolor")),this._setAttr(e,"opacity2",t.evalVisProp("gradientsecondopacity")),this._setAttr(e,"angle",t.evalVisProp("gradientangle"))):r==="radial"?(this._setAttr(e,"type","gradientradial"),this._setAttr(e,"color2",t.evalVisProp("gradientsecondcolor")),this._setAttr(e,"opacity2",t.evalVisProp("gradientsecondopacity")),this._setAttr(e,"focusposition",t.evalVisProp("gradientpositionx")*100+"%,"+t.evalVisProp("gradientpositiony")*100+"%"),this._setAttr(e,"focussize","0,0")):this._setAttr(e,"type","solid")},setObjectFillColor:function(t,e,r){var s=e,o,a,n=r,l,h=t.rendNode;n=n>0?n:0,(t.visPropOld.fillcolor!==s||t.visPropOld.fillopacity!==n)&&(type_default.exists(s)&&s!==!1&&(s.length!==9?(o=s,l=n):(a=color_default.rgba2rgbo(s),o=a[0],l=n*a[1]),o==="none"||o===!1?this._setAttr(t.rendNode,"filled","false"):(this._setAttr(t.rendNode,"filled","true"),this._setAttr(t.rendNode,"fillcolor",o),type_default.exists(l)&&t.rendNodeFill&&this._setAttr(t.rendNodeFill,"opacity",l*100+"%")),t.type===constants.OBJECT_TYPE_IMAGE&&h.filters.length>1&&(h.filters.item(1).opacity=Math.round(l*100),h.filters.item(1).enabled=!0)),t.visPropOld.fillcolor=s,t.visPropOld.fillopacity=n)},setObjectStrokeColor:function(t,e,r){var s=e,o,a,n=r,l,h=t.rendNode,d;n=n>0?n:0,(t.visPropOld.strokecolor!==s||t.visPropOld.strokeopacity!==n)&&(type_default.exists(s)&&s!==!1&&(s.length!==9?(o=s,l=n):(a=e.rgba2rgbo(s),o=a[0],l=n*a[1]),t.elementClass===constants.OBJECT_CLASS_TEXT?(h.filters.length>1&&(h.filters.item(1).opacity=Math.round(l*100),h.filters.item(1).enabled=!0),h.style.color=o):(o!==!1&&(this._setAttr(h,"stroked","true"),this._setAttr(h,"strokecolor",o)),d=t.rendNodeStroke,type_default.exists(l)&&t.type!==constants.OBJECT_TYPE_IMAGE&&this._setAttr(d,"opacity",l*100+"%"))),t.visPropOld.strokecolor=s,t.visPropOld.strokeopacity=n)},setObjectStrokeWidth:function(t,e){var r=type_default.evaluate(e),s;isNaN(r)||t.visPropOld.strokewidth===r||(s=t.rendNode,this.setPropertyPrim(s,"stroked","true"),type_default.exists(r)&&(this.setPropertyPrim(s,"stroke-width",r),r===0&&type_default.exists(t.rendNodeStroke)&&this._setAttr(s,"stroked","false")),t.visPropOld.strokewidth=r)},setShadow:function(t){var e=t.rendNodeShadow,r=t.evalVisProp("shadow");!e||t.visPropOld.shadow===r||(r?(this._setAttr(e,"On","True"),this._setAttr(e,"Offset","3pt,3pt"),this._setAttr(e,"Opacity","60%"),this._setAttr(e,"Color","#aaaaaa")):this._setAttr(e,"On","False"),t.visPropOld.shadow=r)},suspendRedraw:function(){this.container.style.display="none"},unsuspendRedraw:function(){this.container.style.display=""}});var vml_default=jxg_default.VMLRenderer,uuidChars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");jxg_default.Util=jxg_default.Util||{};jxg_default.Util.genUUID=function(t){var e,r,s=[],o=0;for(t=t||"",t!==""&&t.slice(t.length-1)!=="-"&&(t=t+"-"),r=0;r<36;r++)r===8||r===13||r===18||r===23?s[r]="-":r===14?s[r]="4":(o<=2&&(o=33554432+Math.random()*16777216|0),e=o&15,o=o>>4,s[r]=uuidChars[r===19?e&3|8:e]);return t+s.join("")};var uuid_default=jxg_default.Util;jxg_default.CanvasRenderer=function(t,e){if(this.type="canvas",this.canvasRoot=null,this.suspendHandle=null,this.canvasId=uuid_default.genUUID(),this.canvasNamespace=null,env_default.isBrowser)this.container=t,this.container.style.MozUserSelect="none",this.container.style.userSelect="none",this.container.style.overflow="hidden",this.container.style.position===""&&(this.container.style.position="relative"),this.container.innerHTML=['<canvas id="',this.canvasId,'" width="',e.width,'px" height="',e.height,'px"></canvas>'].join(""),this.canvasRoot=this.container.ownerDocument.getElementById(this.canvasId),this.canvasRoot.style.display="block",this.context=this.canvasRoot.getContext("2d");else if(env_default.isNode())try{this.canvasRoot=jxg_default.createCanvas(500,500),this.context=this.canvasRoot.getContext("2d")}catch{throw new Error(`JXG.createCanvas not available.
103
+ Install the npm package \`canvas\`
104
+ and call:
105
+ import { createCanvas } from "canvas.js"
106
+ JXG.createCanvas = createCanvas;
107
+ `)}};jxg_default.CanvasRenderer.prototype=new abstract_default;jxg_default.extend(jxg_default.CanvasRenderer.prototype,{_drawPolygon:function(t,e,r){var s,o=t.length,a=this.context;if(o>0){if(r&&(a.lineWidth=0),a.beginPath(),a.moveTo(t[0][0],t[0][1]),e===1)for(s=1;s<o;s++)a.lineTo(t[s][0],t[s][1]);else for(s=1;s<o;s+=3)a.bezierCurveTo(t[s][0],t[s][1],t[s+1][0],t[s+1][1],t[s+2][0],t[s+2][1]);r?(a.lineTo(t[0][0],t[0][1]),a.closePath(),a.fill("evenodd")):a.stroke()}},_fill:function(t){var e=this.context;e.save(),this._setColor(t,"fill")&&e.fill("evenodd"),e.restore()},_rotatePoint:function(t,e,r){return[e*Math.cos(t)-r*Math.sin(t),e*Math.sin(t)+r*Math.cos(t)]},_rotateShape:function(t,e){var r,s=[],o=t.length;if(o<=0)return t;for(r=0;r<o;r++)s.push(this._rotatePoint(e,t[r][0],t[r][1]));return s},updateGradientAngle:function(t,e){var r=1,s=Math.cos(-e),o=Math.sin(-e),a=t.getBoundingBox(),n,l,h,d,u,c,p,f,_,g,m,b;return Math.abs(s)>Math.abs(o)?r/=Math.abs(s):r/=Math.abs(o),s>=0?(h=0,d=s*r):(h=-s*r,d=0),o>=0?(u=0,c=o*r):(u=-o*r,c=0),n=new coords_default(constants.COORDS_BY_USER,[a[0],a[1]],t.board),l=new coords_default(constants.COORDS_BY_USER,[a[2],a[3]],t.board),m=l.scrCoords[1]-n.scrCoords[1],b=l.scrCoords[2]-n.scrCoords[2],p=n.scrCoords[1]+m*h,_=n.scrCoords[2]+b*u,f=n.scrCoords[1]+m*d,g=n.scrCoords[2]+b*c,this.context.createLinearGradient(p,_,f,g)},updateGradientCircle:function(t,e,r,s,o,a,n){var l=t.getBoundingBox(),h=new coords_default(constants.COORDS_BY_USER,[l[0],l[1]],t.board),d=new coords_default(constants.COORDS_BY_USER,[l[2],l[3]],t.board),u,c,p,f,_,g,m=d.scrCoords[1]-h.scrCoords[1],b=h.scrCoords[2]-d.scrCoords[2];return u=h.scrCoords[1]+m*e,c=d.scrCoords[2]+b*r,f=h.scrCoords[1]+m*o,_=d.scrCoords[2]+b*a,p=s*(m+b)*.5,g=n*(m+b)*.5,this.context.createRadialGradient(f,_,g,u,c,p)},updateGradient:function(t){var e,r=t.evalVisProp("gradient"),s;return e=t.evalVisProp("fillcolor"),r==="linear"?s=this.updateGradientAngle(t,t.evalVisProp("gradientangle")):r==="radial"&&(s=this.updateGradientCircle(t,t.evalVisProp("gradientcx"),t.evalVisProp("gradientcy"),t.evalVisProp("gradientr"),t.evalVisProp("gradientfx"),t.evalVisProp("gradientfy"),t.evalVisProp("gradientfr"))),e!=="none"&&e!==""&&e!==!1&&(s.addColorStop(t.evalVisProp("gradientstartoffset"),e),s.addColorStop(t.evalVisProp("gradientendoffset"),t.evalVisProp("gradientsecondcolor"))),s},_setColor:function(t,e,r){var s=!0,o,a,n,l,h,d,u,c,p;return e=e||"stroke",r=r||e,a=this._getHighlighted(t),l=t.evalVisProp(a+e+"color"),l!=="none"&&l!==""&&l!==!1?(u=t.evalVisProp(a+e+"opacity"),u=u>0?u:0,l.length!==9?(d=l,c=u):(h=color_default.rgba2rgbo(l),d=h[0],c=u*h[1]),this.context.globalAlpha=c,this.context[r+"Style"]=d):s=!1,e!=="stroke"&&(p=t.evalVisProp("gradient"),p==="linear"||p==="radial")?(this.context.globalAlpha=c,this.context[r+"Style"]=this.updateGradient(t),s):(n=parseFloat(t.evalVisProp(a+"strokewidth")),e==="stroke"&&!isNaN(n)&&(n===0?this.context.globalAlpha=0:this.context.lineWidth=n),o=t.evalVisProp("linecap"),e==="stroke"&&o!==void 0&&o!==""&&(this.context.lineCap=o),s)},_stroke:function(t){var e=this.context,r=t.evalVisProp("dash"),s=t.evalVisProp("dashscale")?.5*t.evalVisProp("strokewidth"):1;e.save(),r>0?e.setLineDash&&e.setLineDash(this.dashArray[r-1].map(function(o){return o*s})):this.context.lineDashArray=[],this._setColor(t,"stroke")&&e.stroke(),e.restore()},_translateShape:function(t,e,r){var s,o=[],a=t.length;if(a<=0)return t;for(s=0;s<a;s++)o.push([t[s][0]+e,t[s][1]+r]);return o},drawPoint:function(t){var e=t.evalVisProp("face"),r=t.evalVisProp("size"),s=t.coords.scrCoords,o=r*Math.sqrt(3)*.5,a=r*.5,n=parseFloat(t.evalVisProp("strokewidth"))/2,l=this.context;if(t.visPropCalc.visible)switch(e){case"cross":case"x":l.beginPath(),l.moveTo(s[1]-r,s[2]-r),l.lineTo(s[1]+r,s[2]+r),l.moveTo(s[1]+r,s[2]-r),l.lineTo(s[1]-r,s[2]+r),l.lineCap="round",l.lineJoin="round",l.closePath(),this._stroke(t);break;case"circle":case"o":l.beginPath(),l.arc(s[1],s[2],r+1+n,0,2*Math.PI,!1),l.closePath(),this._fill(t),this._stroke(t);break;case"square":case"[]":if(r<=0)break;l.save(),this._setColor(t,"stroke","fill")&&l.fillRect(s[1]-r-n,s[2]-r-n,r*2+3*n,r*2+3*n),l.restore(),l.save(),this._setColor(t,"fill"),l.fillRect(s[1]-r+n,s[2]-r+n,r*2-n,r*2-n),l.restore();break;case"plus":case"+":l.beginPath(),l.moveTo(s[1]-r,s[2]),l.lineTo(s[1]+r,s[2]),l.moveTo(s[1],s[2]-r),l.lineTo(s[1],s[2]+r),l.lineCap="round",l.lineJoin="round",l.closePath(),this._stroke(t);break;case"divide":case"|":l.beginPath(),l.moveTo(s[1],s[2]-r),l.lineTo(s[1],s[2]+r),l.lineCap="round",l.lineJoin="round",l.closePath(),this._stroke(t);break;case"minus":case"-":l.beginPath(),l.moveTo(s[1]-r,s[2]),l.lineTo(s[1]+r,s[2]),l.lineCap="round",l.lineJoin="round",l.closePath(),this._stroke(t);break;case"diamond2":case"<<>>":r*=1.41;case"diamond":case"<>":l.beginPath(),l.moveTo(s[1]-r,s[2]),l.lineTo(s[1],s[2]+r),l.lineTo(s[1]+r,s[2]),l.lineTo(s[1],s[2]-r),l.closePath(),this._fill(t),this._stroke(t);break;case"triangleup":case"A":case"a":case"^":l.beginPath(),l.moveTo(s[1],s[2]-r),l.lineTo(s[1]-o,s[2]+a),l.lineTo(s[1]+o,s[2]+a),l.closePath(),this._fill(t),this._stroke(t);break;case"triangledown":case"v":l.beginPath(),l.moveTo(s[1],s[2]+r),l.lineTo(s[1]-o,s[2]-a),l.lineTo(s[1]+o,s[2]-a),l.closePath(),this._fill(t),this._stroke(t);break;case"triangleleft":case"<":l.beginPath(),l.moveTo(s[1]-r,s[2]),l.lineTo(s[1]+a,s[2]-o),l.lineTo(s[1]+a,s[2]+o),l.closePath(),this._fill(t),this._stroke(t);break;case"triangleright":case">":l.beginPath(),l.moveTo(s[1]+r,s[2]),l.lineTo(s[1]-a,s[2]-o),l.lineTo(s[1]-a,s[2]+o),l.closePath(),this._fill(t),this._stroke(t)}},updatePoint:function(t){this.drawPoint(t)},drawArrows:function(t,e,r,s,o){var a,n,l,h,d,u,c,p,f=this.context,_=6,g=1,m,b,C=1,y=1,x,v,P,E,w,O,S,M,N,j,k=o.evFirst,B=o.evLast;if(t.evalVisProp("strokecolor")!=="none"&&(k||B)){if(t.elementClass===constants.OBJECT_CLASS_LINE)a=e.scrCoords[1],n=e.scrCoords[2],l=r.scrCoords[1],h=r.scrCoords[2],N=j=Math.atan2(h-n,l-a);else{if(a=t.points[0].scrCoords[1],n=t.points[0].scrCoords[2],M=t.points.length-1,M<1)return;l=t.points[t.points.length-1].scrCoords[1],h=t.points[t.points.length-1].scrCoords[2],E=t.points[1].scrCoords[1]-t.points[0].scrCoords[1],w=t.points[1].scrCoords[2]-t.points[0].scrCoords[2],O=t.points[M].scrCoords[1]-t.points[M-1].scrCoords[1],S=t.points[M].scrCoords[2]-t.points[M-1].scrCoords[2],k&&(N=Math.atan2(w,E)),B&&(j=Math.atan2(S,O))}if(u=t.evalVisProp(s+"strokewidth"),k)if(_=o.sizeFirst,d=u*_,g=o.typeFirst,m=g,g===2)p=[[d,-d*.5],[0,0],[d,d*.5],[d*.5,0]];else if(g===3)p=[[d/3,-d*.5],[0,-d*.5],[0,d*.5],[d/3,d*.5]];else if(g===4)for(d/=10,C=3,p=[[10,3.31],[6.47,3.84],[2.87,4.5],[0,6.63],[.67,5.52],[1.33,4.42],[2,3.31],[1.33,2.21],[.67,1.1],[0,0],[2.87,2.13],[6.47,2.79],[10,3.31]],P=p.length,v=0;v<P;v++)p[v][0]*=-d,p[v][1]*=d,p[v][0]+=10*d,p[v][1]-=3.31*d;else if(g===5)for(d/=10,C=3,p=[[10,3.28],[6.61,4.19],[3.19,5.07],[0,6.55],[.62,5.56],[1,4.44],[1,3.28],[1,2.11],[.62,.99],[0,0],[3.19,1.49],[6.61,2.37],[10,3.28]],P=p.length,v=0;v<P;v++)p[v][0]*=-d,p[v][1]*=d,p[v][0]+=10*d,p[v][1]-=3.28*d;else if(g===6)for(d/=10,C=3,p=[[10,2.84],[6.61,3.59],[3.21,4.35],[0,5.68],[.33,4.73],[.67,3.78],[1,2.84],[.67,1.89],[.33,.95],[0,0],[3.21,1.33],[6.61,2.09],[10,2.84]],P=p.length,v=0;v<P;v++)p[v][0]*=-d,p[v][1]*=d,p[v][0]+=10*d,p[v][1]-=2.84*d;else if(g===7)for(d=u,C=3,p=[[0,10.39],[2.01,6.92],[5.96,5.2],[10,5.2],[5.96,5.2],[2.01,3.47],[0,0]],P=p.length,v=0;v<P;v++)p[v][0]*=-d,p[v][1]*=d,p[v][0]+=10*d,p[v][1]-=5.2*d;else p=[[d,-d*.5],[0,0],[d,d*.5]];if(B)if(_=o.sizeLast,d=u*_,g=o.typeLast,b=g,g===2)c=[[-d,-d*.5],[0,0],[-d,d*.5],[-d*.5,0]];else if(g===3)c=[[-d/3,-d*.5],[0,-d*.5],[0,d*.5],[-d/3,d*.5]];else if(g===4)for(d/=10,y=3,c=[[10,3.31],[6.47,3.84],[2.87,4.5],[0,6.63],[.67,5.52],[1.33,4.42],[2,3.31],[1.33,2.21],[.67,1.1],[0,0],[2.87,2.13],[6.47,2.79],[10,3.31]],P=c.length,v=0;v<P;v++)c[v][0]*=d,c[v][1]*=d,c[v][0]-=10*d,c[v][1]-=3.31*d;else if(g===5)for(d/=10,y=3,c=[[10,3.28],[6.61,4.19],[3.19,5.07],[0,6.55],[.62,5.56],[1,4.44],[1,3.28],[1,2.11],[.62,.99],[0,0],[3.19,1.49],[6.61,2.37],[10,3.28]],P=c.length,v=0;v<P;v++)c[v][0]*=d,c[v][1]*=d,c[v][0]-=10*d,c[v][1]-=3.28*d;else if(g===6)for(d/=10,y=3,c=[[10,2.84],[6.61,3.59],[3.21,4.35],[0,5.68],[.33,4.73],[.67,3.78],[1,2.84],[.67,1.89],[.33,.95],[0,0],[3.21,1.33],[6.61,2.09],[10,2.84]],P=c.length,v=0;v<P;v++)c[v][0]*=d,c[v][1]*=d,c[v][0]-=10*d,c[v][1]-=2.84*d;else if(g===7)for(d=u,y=3,c=[[0,10.39],[2.01,6.92],[5.96,5.2],[10,5.2],[5.96,5.2],[2.01,3.47],[0,0]],P=c.length,v=0;v<P;v++)c[v][0]*=d,c[v][1]*=d,c[v][0]-=10*d,c[v][1]-=5.2*d;else c=[[-d,-d*.5],[0,0],[-d,d*.5]];f.save(),this._setColor(t,"stroke","fill")&&(this._setColor(t,"stroke"),k&&(m===7?x=!1:x=!0,this._drawPolygon(this._translateShape(this._rotateShape(p,N),a,n),C,x)),B&&(b===7?x=!1:x=!0,this._drawPolygon(this._translateShape(this._rotateShape(c,j),l,h),y,x))),f.restore()}},drawLine:function(t){var e,r,s=new coords_default(constants.COORDS_BY_USER,t.point1.coords.usrCoords,t.board),o=new coords_default(constants.COORDS_BY_USER,t.point2.coords.usrCoords,t.board),a=null,n,l,h;t.visPropCalc.visible&&(n=this._getHighlighted(t),l=t.evalVisProp(n+"strokewidth"),h=this.getArrowHeadData(t,l,n),(h.evFirst||h.evLast)&&(a=-4),geometry_default.calcStraight(t,s,o,a),this.handleTouchpoints(t,s,o,h),e=new coords_default(constants.COORDS_BY_USER,s.usrCoords,t.board),r=new coords_default(constants.COORDS_BY_USER,o.usrCoords,t.board),this.getPositionArrowHead(t,s,o,h),this.context.beginPath(),this.context.moveTo(s.scrCoords[1],s.scrCoords[2]),this.context.lineTo(o.scrCoords[1],o.scrCoords[2]),this._stroke(t),(h.evFirst||h.evLast)&&this.drawArrows(t,e,r,n,h))},updateLine:function(t){this.drawLine(t)},drawTicks:function(){},updateTicks:function(t){var e,r,s,o,a=t.ticks.length,n,l,h=this.context;for(h.beginPath(),e=0;e<a;e++)for(r=t.ticks[e],s=r[0],o=r[1],n=s.length,h.moveTo(s[0],o[0]),l=1;l<n;++l)h.lineTo(s[l],o[l]);h.lineCap="round",this._stroke(t)},drawCurve:function(t){var e,r,s;t.evalVisProp("handdrawing")?this.updatePathStringBezierPrim(t):this.updatePathStringPrim(t),t.numberPoints>1&&(e=this._getHighlighted(t),r=t.evalVisProp(e+"strokewidth"),s=this.getArrowHeadData(t,r,e),(s.evFirst||s.evLast)&&this.drawArrows(t,null,null,e,s))},updateCurve:function(t){this.drawCurve(t)},drawEllipse:function(t){var e=t.center.coords.scrCoords[1],r=t.center.coords.scrCoords[2],s=t.board.unitX,o=t.board.unitY,a=2*t.Radius(),n=2*t.Radius(),l=a*s,h=n*o,d=e-l/2,u=r-h/2,c=l/2*.5522848,p=h/2*.5522848,f=d+l,_=u+h,g=d+l/2,m=u+h/2,b=this.context;a>0&&n>0&&!isNaN(e+r)&&(b.beginPath(),b.moveTo(d,m),b.bezierCurveTo(d,m-p,g-c,u,g,u),b.bezierCurveTo(g+c,u,f,m-p,f,m),b.bezierCurveTo(f,m+p,g+c,_,g,_),b.bezierCurveTo(g-c,_,d,m+p,d,m),b.closePath(),this._fill(t),this._stroke(t))},updateEllipse:function(t){return this.drawEllipse(t)},displayCopyright:function(t,e){var r=this.context,s=4+1.8*e,o=6+e;r.save(),r.font=e+"px Arial",r.globalAlpha=.2,r.lineWidth=.5,r.fillText(t+".",s,o),r.restore()},displayLogo:function(t,e,r){var s=this.context,o=1.5*e,a=.2;type_default.isBrowser&&(type_default.exists(r._logo_image)||(r._logo_image=new Image,r._logo_image.src=t),r._logo_image.onload=function(){s.save(),s.globalAlpha=a,s.drawImage(r._logo_image,5,5,o,o),s.restore()},s.save(),s.globalAlpha=a,s.drawImage(r._logo_image,5,5,o,o),s.restore())},drawInternalText:function(t){var e=t.evalVisProp("fontsize"),r=t.evalVisProp("fontunit"),s=t.getAnchorX(),o=t.getAnchorY(),a=this.context;return a.save(),this._setColor(t,"stroke","fill")&&!isNaN(t.coords.scrCoords[1]+t.coords.scrCoords[2])&&(a.font=(e>0?e:0)+r+" Arial",this.transformRect(t,t.transformations),s==="left"?a.textAlign="left":s==="right"?a.textAlign="right":s==="middle"&&(a.textAlign="center"),o==="bottom"?a.textBaseline="bottom":o==="top"?a.textBaseline="top":o==="middle"&&(a.textBaseline="middle"),a.fillText(t.plaintext,t.coords.scrCoords[1],t.coords.scrCoords[2])),a.restore(),null},updateInternalText:function(t){this.drawInternalText(t)},setObjectStrokeColor:function(t,e,r){var s=e,o,a,n=r,l,h;n=n>0?n:0,(t.visPropOld.strokecolor!==s||t.visPropOld.strokeopacity!==n)&&(type_default.exists(s)&&s!==!1&&(s.length!==9?(o=s,l=n):(a=color_default.rgba2rgbo(s),o=a[0],l=n*a[1]),h=t.rendNode,t.elementClass===constants.OBJECT_CLASS_TEXT&&t.evalVisProp("display")==="html"&&(h.style.color=o,h.style.opacity=l)),t.visPropOld.strokecolor=s,t.visPropOld.strokeopacity=n)},drawImage:function(t){t.rendNode=new Image,t._src="",this.updateImage(t)},updateImage:function(t){var e=this.context,r=t.evalVisProp("fillopacity"),s=type_default.bind(function(){t.imgIsLoaded=!0,!(t.size[0]<=0||t.size[1]<=0)&&(e.save(),e.globalAlpha=r,this.transformRect(t,t.transformations),e.drawImage(t.rendNode,t.coords.scrCoords[1],t.coords.scrCoords[2]-t.size[1],t.size[0],t.size[1]),e.restore())},this);this.updateImageURL(t)?t.rendNode.onload=s:t.imgIsLoaded&&s()},transformRect:function(t,e){var r,s,o,a,n,l=e.length,h=this.context;if(l>0)if(r=this.joinTransforms(t,e),t.elementClass===constants.OBJECT_CLASS_TEXT&&t.visProp.display==="html"){if(s=" matrix("+[r[1][1],r[2][1],r[1][2],r[2][2],r[1][0],r[2][0]].join(",")+") ",s.indexOf("NaN")===-1){switch(n=t.rendNode,n.style.transform=s,o=-t.coords.scrCoords[1],a=-t.coords.scrCoords[2],t.evalVisProp("anchorx")){case"right":o+=t.size[0];break;case"middle":o+=t.size[0]*.5}switch(t.evalVisProp("anchory")){case"bottom":a+=t.size[1];break;case"middle":a+=t.size[1]*.5}n.style["transform-origin"]=o+"px "+a+"px"}}else Math.abs(numerics_default.det(r))>=math_default.eps&&h.transform(r[1][1],r[2][1],r[1][2],r[2][2],r[1][0],r[2][0])},updateImageURL:function(t){var e=t.eval(t.url);return t._src!==e?(t.imgIsLoaded=!1,t.rendNode.src=e,t._src=e,!0):!1},remove:function(t){type_default.exists(t)&&type_default.exists(t.parentNode)&&t.parentNode.removeChild(t)},updatePathStringPrim:function(t){var e,r,s,o,a,n="M",l="L",h="C",d=n,u=this.context;if(!(t.numberPoints<=0)){if(a=Math.min(t.points.length,t.numberPoints),u.beginPath(),t.bezierDegree===1)for(e=0;e<a;e++)r=t.points[e].scrCoords,isNaN(r[1])||isNaN(r[2])?d=n:(d===n?u.moveTo(r[1],r[2]):u.lineTo(r[1],r[2]),d=l);else if(t.bezierDegree===3)for(e=0;e<a;)r=t.points[e].scrCoords,isNaN(r[1])||isNaN(r[2])?d=n:(d===n?u.moveTo(r[1],r[2]):(e+=1,s=t.points[e].scrCoords,e+=1,o=t.points[e].scrCoords,u.bezierCurveTo(r[1],r[2],s[1],s[2],o[1],o[2])),d=h),e+=1;u.lineCap="round",u.lineJoin="round",this._fill(t),this._stroke(t)}},updatePathStringBezierPrim:function(t){var e,r,s,o,a,n,l,h="M",d="C",u=h,c=t.evalVisProp("strokewidth"),p=t.evalVisProp("curvetype")!=="plot",f=this.context;if(!(t.numberPoints<=0)){for(p&&t.board.options.curve.RDPsmoothing&&(t.points=numerics_default.RamerDouglasPeucker(t.points,.5)),l=Math.min(t.points.length,t.numberPoints),f.beginPath(),r=1;r<3;r++)for(u=h,e=0;e<l;e++)o=t.points[e].scrCoords,isNaN(o[1])||isNaN(o[2])?u=h:(u===h?f.moveTo(o[1],o[2]):(s=2*r,f.bezierCurveTo(a+(o[1]-a)*.333+c*(s*Math.random()-r),n+(o[2]-n)*.333+c*(s*Math.random()-r),a+(o[1]-a)*.666+c*(s*Math.random()-r),n+(o[2]-n)*.666+c*(s*Math.random()-r),o[1],o[2])),u=d,a=o[1],n=o[2]);f.lineCap="round",f.lineJoin="round",this._fill(t),this._stroke(t)}},updatePolygonPrim:function(t,e){var r,s,o,a=e.vertices.length,n=this.context,l=!0;if(!(a<=0||!e.visPropCalc.visible)){for(e.elType==="polygonalchain"&&a++,n.beginPath(),s=0;!e.vertices[s].isReal&&s<a-1;)s++,l=!1;for(r=e.vertices[s].coords.scrCoords,n.moveTo(r[1],r[2]),o=s;o<a-1;o++)e.vertices[o].isReal||(l=!1),r=e.vertices[o].coords.scrCoords,n.lineTo(r[1],r[2]);n.closePath(),l&&this._fill(e)}},display:function(t,e){t&&t.rendNode&&(t.visPropOld.visible=e,e?t.rendNode.style.visibility="inherit":t.rendNode.style.visibility="hidden")},show:function(t){jxg_default.deprecated("Board.renderer.show()","Board.renderer.display()"),type_default.exists(t.rendNode)&&(t.rendNode.style.visibility="inherit")},hide:function(t){jxg_default.deprecated("Board.renderer.hide()","Board.renderer.display()"),type_default.exists(t.rendNode)&&(t.rendNode.style.visibility="hidden")},setGradient:function(t){},setShadow:function(t){t.visPropOld.shadow!==t.visProp.shadow&&(t.visPropOld.shadow=t.visProp.shadow)},highlight:function(t){return t.elementClass===constants.OBJECT_CLASS_TEXT&&t.evalVisProp("display")==="html"?this.updateTextStyle(t,!0):(t.board.prepareUpdate(),t.board.renderer.suspendRedraw(t.board),t.board.updateRenderer(),t.board.renderer.unsuspendRedraw()),this},noHighlight:function(t){return t.elementClass===constants.OBJECT_CLASS_TEXT&&t.evalVisProp("display")==="html"?this.updateTextStyle(t,!1):(t.board.prepareUpdate(),t.board.renderer.suspendRedraw(t.board),t.board.updateRenderer(),t.board.renderer.unsuspendRedraw()),this},suspendRedraw:function(t){this.context.save(),this.context.clearRect(0,0,this.canvasRoot.width,this.canvasRoot.height),t&&(t.attr.showcopyright||t.attr.showlogo)&&this.displayLogo(jxg_default.licenseLogo,12,t),t&&t.attr.showcopyright&&this.displayCopyright(jxg_default.licenseText,12)},unsuspendRedraw:function(){this.context.restore()},resize:function(t,e){this.container?(this.canvasRoot.style.width=parseFloat(t)+"px",this.canvasRoot.style.height=parseFloat(e)+"px",this.canvasRoot.setAttribute("width",2*parseFloat(t)+"px"),this.canvasRoot.setAttribute("height",2*parseFloat(e)+"px")):(this.canvasRoot.width=2*parseFloat(t),this.canvasRoot.height=2*parseFloat(e)),this.context=this.canvasRoot.getContext("2d"),this.context.scale(2,2)},removeToInsertLater:function(){return function(){}}});var canvas_default=jxg_default.CanvasRenderer;jxg_default.NoRenderer=function(){this.enhancedRendering=!1,this.type="no"};jxg_default.extend(jxg_default.NoRenderer.prototype,{drawPoint:function(t){},updatePoint:function(t){},changePointStyle:function(t){},drawLine:function(t){},updateLine:function(t){},drawTicks:function(t){},updateTicks:function(t){},drawCurve:function(t){},updateCurve:function(t){},drawEllipse:function(t){},updateEllipse:function(t){},drawPolygon:function(t){},updatePolygon:function(t){},displayCopyright:function(t,e){},drawInternalText:function(t){},updateInternalText:function(t){},drawText:function(t){},updateText:function(t){},updateTextStyle:function(t,e){},updateInternalTextStyle:function(t,e,r){},drawImage:function(t){},updateImage:function(t){},updateImageURL:function(t){},appendChildPrim:function(t,e){},appendNodesToElement:function(t,e){},remove:function(t){},makeArrows:function(t){},updateEllipsePrim:function(t,e,r,s,o){},updateLinePrim:function(t,e,r,s,o,a){},updatePathPrim:function(t,e,r){},updatePathStringPoint:function(t,e,r){},updatePathStringPrim:function(t){},updatePathStringBezierPrim:function(t){},updatePolygonPrim:function(t,e){},updateRectPrim:function(t,e,r,s,o){},setPropertyPrim:function(t,e,r){},show:function(t){},hide:function(t){},setBuffering:function(t,e){},setDashStyle:function(t){},setDraft:function(t){},removeDraft:function(t){},setGradient:function(t){},updateGradient:function(t){},setObjectTransition:function(t,e){},setObjectFillColor:function(t,e,r){},setObjectStrokeColor:function(t,e,r){},setObjectStrokeWidth:function(t,e){},setShadow:function(t){},highlight:function(t){},noHighlight:function(t){},suspendRedraw:function(){},unsuspendRedraw:function(){},drawNavigationBar:function(t){},getElementById:function(t){return null},resize:function(t,e){},removeToInsertLater:function(){return function(){}}});jxg_default.NoRenderer.prototype=new abstract_default;var no_default=jxg_default.NoRenderer;jxg_default.JSXGraph={rendererType:(function(){return options_default.board.renderer="no",env_default.supportsVML()&&(options_default.board.renderer="vml",document.onmousemove=function(){var t;return document.body&&(t=document.body.scrollLeft,t+=document.body.scrollTop),t}),env_default.supportsCanvas()&&(options_default.board.renderer="canvas"),env_default.supportsSVG()&&(options_default.board.renderer="svg"),env_default.isNode()&&env_default.supportsCanvas()&&(options_default.board.renderer="canvas"),(env_default.isNode()||options_default.renderer==="no")&&(options_default.text.display="internal",options_default.infobox.display="internal"),options_default.board.renderer})(),initRenderer:function(t,e,r,s){var o,a,n;if((!type_default.exists(r)||r===!1)&&typeof document=="object"&&(r=document),typeof r=="object"&&t!==null){if(o=type_default.isString(t)?r.getElementById(t):t,o&&!o.id){for(n=1;r.getElementById("jxgbox"+n);)n+=1;o.id="jxgbox"+n}for(;o.firstChild;)o.removeChild(o.firstChild)}else o=t;return(s===void 0||s==="auto")&&(s=this.rendererType),s==="svg"?a=new svg_default(o,e):s==="vml"?a=new vml_default(o):s==="canvas"?a=new canvas_default(o,e):a=new no_default,a},_setAttributes:function(t,e){for(var r=type_default.copyAttributes(t,e,"board"),s=["drag","fullscreen","intl","keyboard","logging","pan","resize","screenshot","selection","zoom"],o=s.length,a=0,n;a<o;a++)n=s[a],r[n]=type_default.copyAttributes(r,e,"board",n);return r.navbar=type_default.copyAttributes(r.navbar,e,"navbar"),r.movetarget=t.moveTarget||t.movetarget||e.board.moveTarget,r},_fillBoard:function(t,e,r){t.initInfobox(e.infobox),t.maxboundingbox=e.maxboundingbox,t.resizeContainer(r.width,r.height,!0,!0),t._createSelectionPolygon(e),t.renderer.drawNavigationBar(t,e.navbar),jxg_default.boards[t.id]=t},_setARIA:function(t,e){var r=e.document,s;if(typeof r!="object"){if(!env_default.isBrowser)return;r=document}s=type_default.isString(t)?r.getElementById(t):t,s.setAttribute("role","region"),s.setAttribute("aria-label",e.title)},_removeARIANodes:function(t){var e,r,s=t.document||document;typeof s=="object"&&(r=t.containerObj.getAttribute("aria-labelledby"),e=s.getElementById(r),e&&e.parentNode&&e.parentNode.removeChild(e),r=t.containerObj.getAttribute("aria-describedby"),e=s.getElementById(r),e&&e.parentNode&&e.parentNode.removeChild(e))},initBoard:function(t,e){var r,s,o,a,n,l,h=0,d=0,u,c,p,f,_,g,m,b,C={},y;return e=e||{},e.theme!=="default"&&type_default.exists(jxg_default.themes[e.theme])&&(C=jxg_default.themes[e.theme]),b=type_default.deepCopy(options_default,C,!0),f=this._setAttributes(e,b),c=env_default.getDimensions(t,f.document),f.unitx||f.unity?(r=type_default.def(f.originx,150),s=type_default.def(f.originy,150),o=type_default.def(f.unitx,50),a=type_default.def(f.unity,50)):(p=f.boundingbox,p[0]<f.maxboundingbox[0]&&(p[0]=f.maxboundingbox[0]),p[1]>f.maxboundingbox[1]&&(p[1]=f.maxboundingbox[1]),p[2]>f.maxboundingbox[2]&&(p[2]=f.maxboundingbox[2]),p[3]<f.maxboundingbox[3]&&(p[3]=f.maxboundingbox[3]),n=parseInt(c.width,10),l=parseInt(c.height,10),type_default.exists(p)&&f.keepaspectratio?(o=n/(p[2]-p[0]),a=l/(p[1]-p[3]),Math.abs(o)<Math.abs(a)?(a=Math.abs(o)*a/Math.abs(a),d=(l/a-(p[1]-p[3]))*.5):(o=Math.abs(a)*o/Math.abs(o),h=(n/o-(p[2]-p[0]))*.5)):(o=n/(p[2]-p[0]),a=l/(p[1]-p[3])),r=-o*(p[0]-h),s=a*(p[1]+d)),u=this.initRenderer(t,c,f.document,f.renderer),this._setARIA(t,f),y=new board_default(t,u,f.id,[r,s],f.zoomx,f.zoomy,o,a,c.width,c.height,f),y.keepaspectratio=f.keepaspectratio,this._fillBoard(y,f,c),y.suspendUpdate(),f=y.attr,f.axis&&(_=typeof f.axis=="object"?f.axis:{},g=type_default.deepCopy(b.board.defaultaxes.x,_),m=type_default.deepCopy(b.board.defaultaxes.y,_),f.defaultaxes.x&&(g=type_default.deepCopy(g,f.defaultaxes.x)),f.defaultaxes.y&&(m=type_default.deepCopy(m,f.defaultaxes.y)),y.defaultAxes={},y.defaultAxes.x=y.create("axis",[[0,0],[1,0]],g),y.defaultAxes.y=y.create("axis",[[0,0],[0,1]],m)),f.grid&&y.create("grid",[],typeof f.grid=="object"?f.grid:{}),y.sketches=[y.create("sketchcurve",[],y.attr.sketches[0]),y.create("sketchcurve",[],y.attr.sketches[1])],y.sketches[0].dump=!1,y.sketches[1].dump=!1,y.sketch=y.sketches[0],y.unsuspendUpdate(),y.setAttribute({cssStyle:f.cssstyle},!0),y},loadBoardFromFile:function(t,e,r,s,o){var a,n,l,h,d;return s=s||{},a=this._setAttributes(s),h=env_default.getDimensions(t,a.document),n=this.initRenderer(t,h,a.document,a.renderer),this._setARIA(t,a),l=new board_default(t,n,"",[150,150],1,1,50,50,h.width,h.height,a),this._fillBoard(l,a,h),d=a.encoding||"iso-8859-1",file_default.parseFileContent(e,l,r,!0,d,o),l},loadBoardFromString:function(t,e,r,s,o){var a,n,l,h;return s=s||{},a=this._setAttributes(s),h=env_default.getDimensions(t,a.document),n=this.initRenderer(t,h,a.document,a.renderer),this._setARIA(t,a),l=new board_default(t,n,"",[150,150],1,1,50,50,h.width,h.height,a),this._fillBoard(l,a,h),file_default.parseString(e,l,r,!0,o),l},freeBoard:function(t){var e;typeof t=="string"&&(t=jxg_default.boards[t]),this._removeARIANodes(t),t.removeEventHandlers(),t.suspendUpdate();for(e in t.objects)t.objects.hasOwnProperty(e)&&t.objects[e].remove();for(;t.containerObj.firstChild;)t.containerObj.removeChild(t.containerObj.firstChild);for(e in t.objects)t.objects.hasOwnProperty(e)&&delete t.objects[e];delete t.renderer,t.jc.creator.clearCache(),delete t.jc,delete jxg_default.boards[t.id]},registerElement:function(t,e){jxg_default.deprecated("JXG.JSXGraph.registerElement()","JXG.registerElement()"),jxg_default.registerElement(t,e)}};env_default.isBrowser&&typeof window=="object"&&typeof document=="object"&&env_default.addEvent(window,"load",function(){var t,e,r,s,o,a,n,l,h,d,u,c,p,f,_,g,m,b,C=!1,y=document.getElementsByTagName("script"),x=function(P,E,w){var O=jxg_default.JSXGraph.initBoard(o,{boundingbox:w,keepaspectratio:!0,grid:_,axis:f,showReload:!0});if(E.toLowerCase().indexOf("script")>-1)O.construct(P);else try{O.jc.parse(P)}catch(S){jxg_default.debug(S)}return O},v=function(P,E,w,O){return function(){var S;jxg_default.JSXGraph.freeBoard(P),S=x(E,w,O),S.reload=v(S,E,w,O)}};for(e=0;e<y.length;e++)if(t=y[e].getAttribute("type",!1),type_default.exists(t)&&(t.toLowerCase()==="text/jessiescript"||t.toLowerCase()==="jessiescript"||t.toLowerCase()==="text/jessiecode"||t.toLowerCase()==="jessiecode")){if(c=y[e].getAttribute("class",!1)||"",l=y[e].getAttribute("width",!1)||"",h=y[e].getAttribute("height",!1)||"",d=y[e].getAttribute("maxwidth",!1)||"100%",u=y[e].getAttribute("aspectratio",!1)||"1/1",p=y[e].getAttribute("boundingbox",!1)||"-5, 5, 5, -5",o=y[e].getAttribute("container",!1),m=y[e].getAttribute("src",!1),p=p.split(","),p.length!==4)p=[-5,5,5,-5];else for(r=0;r<p.length;r++)p[r]=parseFloat(p[r]);if(f=type_default.str2Bool(y[e].getAttribute("axis",!1)||"false"),_=type_default.str2Bool(y[e].getAttribute("grid",!1)||"false"),type_default.exists(o))s=document.getElementById(o);else{o="jessiescript_autgen_jxg_"+e,s=document.createElement("div"),s.setAttribute("id",o),n=l!==""?"width:"+l+";":"",n+=h!==""?"height:"+h+";":"",n+=d!==""?"max-width:"+d+";":"",n+=u!==""?"aspect-ratio:"+u+";":"",s.setAttribute("style",n),s.setAttribute("class","jxgbox "+c);try{document.body.insertBefore(s,y[e])}catch{type_default.exists(jQuery)&&typeof jQuery=="object"&&jQuery(s).insertBefore(y[e])}}g="",type_default.exists(m)?(C=!0,b=new XMLHttpRequest,b.open("GET",m),b.overrideMimeType("text/plain; charset=x-user-defined"),b.addEventListener("load",function(){if(this.status<400)g=this.responseText+`
108
+ `+g,a=x(g,t,p),a.reload=v(a,g,t,p);else throw new Error(`
109
+ JSXGraph: failed to load file`,m,":",this.responseText)}),b.addEventListener("error",function(P){throw new Error(`
110
+ JSXGraph: failed to load file`,m,":",P)}),b.send()):C=!1,document.getElementById(o)?(g=y[e].innerHTML,g=g.replace(/<!\[CDATA\[/g,"").replace(/\]\]>/g,""),y[e].innerHTML=g,C||(a=x(g,t,p),a.reload=v(a,g,t,p))):jxg_default.debug("JSXGraph: Apparently the div injection failed. Can't create a board, sorry.")}},window);var jsxgraph_default=jxg_default.JSXGraph;jxg_default.Point=function(t,e,r){this.constructor(t,r,constants.OBJECT_TYPE_POINT,constants.OBJECT_CLASS_POINT),this.element=this.board.select(r.anchor),this.coordsConstructor(e),this.elType="point",this.id=this.board.setId(this,"P"),this.board.renderer.drawPoint(this),this.board.finalizeAdding(this),this.createGradient(),this.createLabel()};jxg_default.Point.prototype=new element_default;type_default.copyPrototypeMethods(jxg_default.Point,coordselement_default,"coordsConstructor");jxg_default.extend(jxg_default.Point.prototype,{hasPoint:function(t,e){var r=this.coords.scrCoords,s,o,a,n=this.evalVisProp("sizeunit");return type_default.isObject(this.evalVisProp("precision"))?(a=this.board._inputDevice,o=this.evalVisProp("precision."+a)):o=this.board.options.precision.hasPoint,s=parseFloat(this.evalVisProp("size")),n==="user"&&(s*=Math.sqrt(Math.abs(this.board.unitX*this.board.unitY))),s+=parseFloat(this.evalVisProp("strokewidth"))*.5,s<o&&(s=o),Math.abs(r[1]-t)<s+2&&Math.abs(r[2]-e)<s+2},update:function(t){return this.needsUpdate?(this.updateCoords(t),this.evalVisProp("trace")&&this.cloneToBackground(!0),this):this},updateTransform:function(t){var e,r;if(this.transformations.length===0||this.baseElement===null)return this;for(this.transformations[0].update(),this===this.baseElement?e=this.transformations[0].apply(this,"self"):e=this.transformations[0].apply(this.baseElement),r=1;r<this.transformations.length;r++)this.transformations[r].update(),e=math_default.matVecMult(this.transformations[r].matrix,e);return this.coords.setCoordinates(constants.COORDS_BY_USER,e),this},updateRenderer:function(){return this.updateRendererGeneric("updatePoint"),this},bounds:function(){return this.coords.usrCoords.slice(1).concat(this.coords.usrCoords.slice(1))},makeIntersection:function(t,e,r,s){var o;t=this.board.select(t),e=this.board.select(e),o=geometry_default.intersectionFunction(this.board,t,e,r,s,this.visProp.alwaysintersect),this.addConstraint([o]);try{t.addChild(this),e.addChild(this)}catch{throw new Error("JSXGraph: Can't create 'intersection' with parent types '"+typeof t+"' and '"+typeof e+"'.")}this.type=constants.OBJECT_TYPE_INTERSECTION,this.elType="intersection",this.parents=[t.id,e.id,r,s],this.generatePolynomial=function(){var a=t.generatePolynomial(this),n=e.generatePolynomial(this);return a.length===0||n.length===0?[]:[a[0],n[0]]},this.prepareUpdate().update()},setStyle:function(t){var e=["cross","cross","cross","circle","circle","circle","circle","square","square","square","plus","plus","plus"],r=[2,3,4,1,2,3,4,2,3,4,2,3,4];return this.visProp.face=e[t],this.visProp.size=r[t],this.board.renderer.changePointStyle(this),this},normalizeFace:function(t){return jxg_default.deprecated("Point.normalizeFace()","JXG.normalizePointFace()"),options_default.normalizePointFace(t)},face:function(t){jxg_default.deprecated("Point.face()","Point.setAttribute()"),this.setAttribute({face:t})},size:function(t){jxg_default.deprecated("Point.size()","Point.setAttribute()"),this.setAttribute({size:t})},isOn:function(t,e){var r,s;return e=e||math_default.eps,type_default.isPoint(t)?this.Dist(t)<e:t.elementClass===constants.OBJECT_CLASS_LINE?t.elType==="segment"&&!this.evalVisProp("alwaysintersect")?(r=jxg_default.Math.Geometry.projectCoordsToSegment(this.coords.usrCoords,t.point1.coords.usrCoords,t.point2.coords.usrCoords),r[1]>=0&&r[1]<=1&&geometry_default.distPointLine(this.coords.usrCoords,t.stdform)<e):geometry_default.distPointLine(this.coords.usrCoords,t.stdform)<e:t.elementClass===constants.OBJECT_CLASS_CIRCLE?t.evalVisProp("hasinnerpoints")?this.Dist(t.center)<t.Radius()+e:Math.abs(this.Dist(t.center)-t.Radius())<e:t.elementClass===constants.OBJECT_CLASS_CURVE?(s=geometry_default.projectPointToCurve(this,t,this.board)[0],geometry_default.distance(this.coords.usrCoords,s.usrCoords,3)<e):t.type===constants.OBJECT_TYPE_POLYGON?t.evalVisProp("hasinnerpoints")&&t.pnpoly(this.coords.usrCoords[1],this.coords.usrCoords[2],jxg_default.COORDS_BY_USER)?!0:(r=geometry_default.projectCoordsToPolygon(this.coords.usrCoords,t),geometry_default.distance(this.coords.usrCoords,r,3)<e):t.type===constants.OBJECT_TYPE_TURTLE?(s=geometry_default.projectPointToTurtle(this,t,this.board),geometry_default.distance(this.coords.usrCoords,s.usrCoords,3)<e):!1},cloneToBackground:function(){var t=type_default.getCloneObject(this);return this.board.renderer.drawPoint(t),this.traces[t.id]=t.rendNode,this}});jxg_default.createPoint=function(t,e,r){var s,o=type_default.copyAttributes(r,t.options,"point");if(s=coordselement_default.create(jxg_default.Point,t,e,o),!s)throw new Error("JSXGraph: Can't create point with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
111
+ Possible parent types: [x,y], [z,x,y], [element,transformation]`);return s};jxg_default.createGlider=function(t,e,r){var s,o,a=type_default.copyAttributes(r,t.options,"glider");return e.length===1?o=[0,0]:o=e.slice(0,2),s=t.create("point",o,a),s.makeGlider(e[e.length-1]),s};jxg_default.createIntersectionPoint=function(t,e,r){var s,o,a,n,l,h,d=type_default.copyAttributes(r,t.options,"intersection");e.push(0,0),o=t.select(e[0]),a=t.select(e[1]),l=e[2]||0,h=e[3]||0,s=t.create("point",[0,0,0],d),n=geometry_default.intersectionFunction(t,o,a,l,h,s.visProp.alwaysintersect),s.addConstraint([n]);try{o.addChild(s),a.addChild(s)}catch{throw new Error("JSXGraph: Can't create 'intersection' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.")}return s.type=constants.OBJECT_TYPE_INTERSECTION,s.elType="intersection",s.setParents([o.id,a.id]),s.intersectionNumbers=[l,h],s.getParents=function(){return this.parents.concat(this.intersectionNumbers)},s.generatePolynomial=function(){var u=o.generatePolynomial(s),c=a.generatePolynomial(s);return u.length===0||c.length===0?[]:[u[0],c[0]]},s};jxg_default.createOtherIntersectionPoint=function(t,e,r){var s,o,a,n,l,h,d,u=!0,c=type_default.copyAttributes(r,t.options,"otherintersection");if(e.length!==3)u=!1;else{for(o=t.select(e[0]),a=t.select(e[1]),type_default.isArray(e[2])?l=e[2]:l=[e[2]],n=0;n<l.length;n++)if(l[n]=t.select(l[n]),!type_default.isPoint(l[n])){u=!1;break}u&&(d=[o,a],d.sort(function(p,f){return f.elementClass-p.elementClass}),([constants.OBJECT_CLASS_CIRCLE,constants.OBJECT_CLASS_CURVE].indexOf(d[0].elementClass)<0||[constants.OBJECT_CLASS_CIRCLE,constants.OBJECT_CLASS_CURVE,constants.OBJECT_CLASS_LINE].indexOf(d[1].elementClass)<0)&&(u=!1))}if(!u)throw new Error("JSXGraph: Can't create 'other intersection point' with parent types '"+typeof e[0]+"', '"+typeof e[1]+"'and '"+typeof e[2]+`'.
112
+ Possible parent types: [circle|curve|line,circle|curve|line, point], not two lines`);return s=t.create("point",[0,0,0],c),h=geometry_default.otherIntersectionFunction(d,l,s.visProp.alwaysintersect,s.visProp.precision),s.addConstraint([h]),s.type=constants.OBJECT_TYPE_INTERSECTION,s.elType="otherintersection",s.setParents([o.id,a.id]),s.addParents(l),o.addChild(s),a.addChild(s),o.elementClass===constants.OBJECT_CLASS_CIRCLE&&(s.generatePolynomial=function(){var p=o.generatePolynomial(s),f=a.generatePolynomial(s);return p.length===0||f.length===0?[]:[p[0],f[0]]}),s};jxg_default.createPolePoint=function(t,e,r){var s,o,a,n,l,h,d;if(e.length>1&&(n=e[0].type===constants.OBJECT_TYPE_CONIC||e[0].elementClass===constants.OBJECT_CLASS_CIRCLE,l=e[1].type===constants.OBJECT_TYPE_CONIC||e[1].elementClass===constants.OBJECT_CLASS_CIRCLE,h=e[0].elementClass===constants.OBJECT_CLASS_LINE,d=e[1].elementClass===constants.OBJECT_CLASS_LINE),e.length!==2||!(n&&d||h&&l))throw new Error("JSXGraph: Can't create 'pole point' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
113
+ Possible parent type: [conic|circle,line], [line,conic|circle]`);return d?(o=t.select(e[0]),a=t.select(e[1])):(o=t.select(e[1]),a=t.select(e[0])),s=t.create("point",[function(){var u=o.quadraticform,c=a.stdform.slice(0,3);return[jxg_default.Math.Numerics.det([c,u[1],u[2]]),jxg_default.Math.Numerics.det([u[0],c,u[2]]),jxg_default.Math.Numerics.det([u[0],u[1],c])]}],r),s.elType="polepoint",s.setParents([o.id,a.id]),o.addChild(s),a.addChild(s),s};jxg_default.registerElement("point",jxg_default.createPoint);jxg_default.registerElement("glider",jxg_default.createGlider);jxg_default.registerElement("intersection",jxg_default.createIntersectionPoint);jxg_default.registerElement("otherintersection",jxg_default.createOtherIntersectionPoint);jxg_default.registerElement("polepoint",jxg_default.createPolePoint);var point_default=jxg_default.Point;jxg_default.Line=function(t,e,r,s){this.constructor(t,s,constants.OBJECT_TYPE_LINE,constants.OBJECT_CLASS_LINE),this.point1=this.board.select(e),this.point2=this.board.select(r),this.ticks=[],this.defaultTicks=null,this.parentPolygon=null,this.id=this.board.setId(this,"L"),this.board.renderer.drawLine(this),this.board.finalizeAdding(this),this.elType="line",this.point1._is_new?(this.addChild(this.point1),delete this.point1._is_new):this.point1.addChild(this),this.point2._is_new?(this.addChild(this.point2),delete this.point2._is_new):this.point2.addChild(this),this.inherits.push(this.point1,this.point2),this.updateStdform(),this.createLabel()};jxg_default.Line.prototype=new element_default;type_default.copyMethodMap(jxg_default.Line,{point1:"point1",point2:"point2",getSlope:"Slope",Slope:"Slope",Direction:"Direction",getRise:"getRise",Rise:"getRise",getYIntersect:"getRise",YIntersect:"getRise",getAngle:"getAngle",Angle:"getAngle",L:"L",length:"L",setFixedLength:"setFixedLength",setStraight:"setStraight"});jxg_default.extend(jxg_default.Line.prototype,{hasPoint:function(t,e){var r=[],s=[1,t,e],o,a,n,l,h,d,u,c,p,f=this.evalVisProp("strokewidth");return type_default.isObject(this.evalVisProp("precision"))?(p=this.board._inputDevice,c=this.evalVisProp("precision."+p)):c=this.board.options.precision.hasPoint,c+=f*.5,r[0]=this.stdform[0]-this.stdform[1]*this.board.origin.scrCoords[1]/this.board.unitX+this.stdform[2]*this.board.origin.scrCoords[2]/this.board.unitY,r[1]=this.stdform[1]/this.board.unitX,r[2]=this.stdform[2]/-this.board.unitY,o=geometry_default.distPointLine(s,r),isNaN(o)||o>c?!1:this.evalVisProp("straightfirst")&&this.evalVisProp("straightlast")?!0:(n=this.point1.coords,l=this.point2.coords,a=[0,r[1],r[2]],a=math_default.crossProduct(a,s),a=math_default.crossProduct(a,r),a[1]/=a[0],a[2]/=a[0],a[0]=1,a=new coords_default(constants.COORDS_BY_SCREEN,a.slice(1),this.board).usrCoords,h=n.distance(constants.COORDS_BY_USER,l),n=n.usrCoords.slice(0),l=l.usrCoords.slice(0),h<math_default.eps?d=0:(h===Number.POSITIVE_INFINITY&&(h=1/math_default.eps,Math.abs(l[0])<math_default.eps?(h/=geometry_default.distance([0,0,0],l),l=[1,n[1]+l[1]*h,n[2]+l[2]*h]):(h/=geometry_default.distance([0,0,0],n),n=[1,l[1]+n[1]*h,l[2]+n[2]*h])),u=1,h=l[u]-n[u],Math.abs(h)<math_default.eps&&(u=2,h=l[u]-n[u]),d=(a[u]-n[u])/h),!this.evalVisProp("straightfirst")&&d<0?!1:!(!this.evalVisProp("straightlast")&&d>1))},update:function(){var t;return this.needsUpdate?(this.constrained&&(type_default.isFunction(this.funps)?(t=this.funps(),t&&t.length&&t.length===2&&(this.point1=t[0],this.point2=t[1])):(type_default.isFunction(this.funp1)&&(t=this.funp1(),type_default.isPoint(t)?this.point1=t:t&&t.length&&t.length===2&&this.point1.setPositionDirectly(constants.COORDS_BY_USER,t)),type_default.isFunction(this.funp2)&&(t=this.funp2(),type_default.isPoint(t)?this.point2=t:t&&t.length&&t.length===2&&this.point2.setPositionDirectly(constants.COORDS_BY_USER,t)))),this.updateSegmentFixedLength(),this.updateStdform(),this.evalVisProp("trace")&&this.cloneToBackground(!0),this):this},updateSegmentFixedLength:function(){var t,e,r,s,o,a,n,l;return this.hasFixedLength?(t=this.point1.Dist(this.point2),e=this.evalVisProp("nonnegativeonly")?Math.max(0,this.fixedLength()):Math.abs(this.fixedLength()),r=this.fixedLengthOldCoords[0].distance(constants.COORDS_BY_USER,this.point1.coords),s=this.fixedLengthOldCoords[1].distance(constants.COORDS_BY_USER,this.point2.coords),(r>math_default.eps||s>math_default.eps||t!==e)&&(o=this.point1.isDraggable&&this.point1.type!==constants.OBJECT_TYPE_GLIDER&&!this.point1.evalVisProp("fixed"),a=this.point2.isDraggable&&this.point2.type!==constants.OBJECT_TYPE_GLIDER&&!this.point2.evalVisProp("fixed"),t>math_default.eps?r>s&&a||r<=s&&a&&!o?(this.point2.setPositionDirectly(constants.COORDS_BY_USER,[this.point1.X()+(this.point2.X()-this.point1.X())*e/t,this.point1.Y()+(this.point2.Y()-this.point1.Y())*e/t]),this.point2.fullUpdate()):(r<=s&&o||r>s&&o&&!a)&&(this.point1.setPositionDirectly(constants.COORDS_BY_USER,[this.point2.X()+(this.point1.X()-this.point2.X())*e/t,this.point2.Y()+(this.point1.Y()-this.point2.Y())*e/t]),this.point1.fullUpdate()):(n=Math.random()-.5,l=Math.random()-.5,t=math_default.hypot(n,l),a?(this.point2.setPositionDirectly(constants.COORDS_BY_USER,[this.point1.X()+n*e/t,this.point1.Y()+l*e/t]),this.point2.fullUpdate()):o&&(this.point1.setPositionDirectly(constants.COORDS_BY_USER,[this.point2.X()+n*e/t,this.point2.Y()+l*e/t]),this.point1.fullUpdate())),this.fixedLengthOldCoords[0].setCoordinates(constants.COORDS_BY_USER,this.point1.coords.usrCoords),this.fixedLengthOldCoords[1].setCoordinates(constants.COORDS_BY_USER,this.point2.coords.usrCoords)),this):this},updateStdform:function(){var t=math_default.crossProduct(this.point1.coords.usrCoords,this.point2.coords.usrCoords);this.stdform[0]=t[0],this.stdform[1]=t[1],this.stdform[2]=t[2],this.stdform[3]=0,this.normalize()},updateRenderer:function(){return this.needsUpdate?(this.visPropCalc.visible&&(this.isReal=!isNaN(this.point1.coords.usrCoords[1]+this.point1.coords.usrCoords[2]+this.point2.coords.usrCoords[1]+this.point2.coords.usrCoords[2])&&math_default.innerProduct(this.stdform,this.stdform,3)>=math_default.eps*math_default.eps,this.isReal||this.updateVisibility(!1)),this.visPropCalc.visible&&this.board.renderer.updateLine(this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},generatePolynomial:function(t){var e=this.point1.symbolic.x,r=this.point1.symbolic.y,s=this.point2.symbolic.x,o=this.point2.symbolic.y,a=t.symbolic.x,n=t.symbolic.y;return[["(",r,")*(",a,")-(",r,")*(",s,")+(",n,")*(",s,")-(",e,")*(",n,")+(",e,")*(",o,")-(",a,")*(",o,")"].join("")]},getRise:function(){return Math.abs(this.stdform[2])>=math_default.eps?-this.stdform[0]/this.stdform[2]:1/0},Slope:function(){return Math.abs(this.stdform[2])>=math_default.eps?-this.stdform[1]/this.stdform[2]:1/0},getSlope:function(){return this.Slope()},getAngle:function(t){var e,r=Math.atan2(-this.stdform[1],this.stdform[2]);if(type_default.isString(t)&&t!=="")t=t.toLocaleLowerCase();else return r;return t===""||t.indexOf("rad")===0?e=r:t.indexOf("deg")===0?e=r*180/Math.PI:t.indexOf("sem")===0?e=r/Math.PI:t.indexOf("cir")===0&&(e=r*.5/Math.PI),e},Direction:function(){var t=this.point1.coords.usrCoords,e=this.point2.coords.usrCoords;return e[0]===0&&t[0]!==0?e.slice(1):t[0]===0&&e[0]!==0?[-t[1],-t[2]]:[e[1]-t[1],e[2]-t[2]]},isVertical:function(){var t=this.Direction();return t[0]===0&&t[1]!==0},isHorizontal:function(){var t=this.Direction();return t[1]===0&&t[0]!==0},setStraight:function(t,e){return this.visProp.straightfirst=t,this.visProp.straightlast=e,this.board.renderer.updateLine(this),this},getTextAnchor:function(){return new coords_default(constants.COORDS_BY_USER,[.5*(this.point2.X()+this.point1.X()),.5*(this.point2.Y()+this.point1.Y())],this.board)},setLabelRelativeCoords:function(t){type_default.exists(this.label)&&(this.label.relativeCoords=new coords_default(constants.COORDS_BY_SCREEN,[t[0],-t[1]],this.board))},getLabelAnchor:function(){var t,e,r,s,o,a,n,l,h=1.5,d=0,u=new coords_default(constants.COORDS_BY_USER,this.point1.coords.usrCoords,this.board),c=new coords_default(constants.COORDS_BY_USER,this.point2.coords.usrCoords,this.board),p=this.evalVisProp("straightfirst"),f=this.evalVisProp("straightlast");if((p||f)&&geometry_default.calcStraight(this,u,c,0),u=u.scrCoords,c=c.scrCoords,!type_default.exists(this.label))return new coords_default(constants.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(r=this.label.evalVisProp("position"),!type_default.isString(r))return new coords_default(constants.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(r.indexOf("right")<0&&r.indexOf("left")<0)switch(r){case"last":t=c[1],e=c[2];break;case"first":t=u[1],e=u[2];break;case"lft":case"llft":case"ulft":u[1]<c[1]+math_default.eps?(t=u[1],e=u[2]):(t=c[1],e=c[2]);break;case"rt":case"lrt":case"urt":u[1]>c[1]+math_default.eps?(t=u[1],e=u[2]):(t=c[1],e=c[2]);break;default:t=.5*(u[1]+c[1]),e=.5*(u[2]+c[2])}else s=type_default.parsePosition(r),o=type_default.parseNumber(s.pos,1,1),a=c[1]-u[1],n=c[2]-u[2],l=math_default.hypot(a,n),s.pos.indexOf("px")>=0||s.pos.indexOf("fr")>=0||s.pos.indexOf("%")>=0?(s.pos.indexOf("px")>=0&&(o/=l),t=u[1]+o*a,e=u[2]+o*n):(t=u[1]+o*this.board.unitX*a/l,e=u[2]+o*this.board.unitY*n/l),s.side==="left"?a*=-1:n*=-1,type_default.exists(this.label)&&(h=.5*this.label.evalVisProp("distance")/l),t+=n*this.label.size[0]*h,e+=a*this.label.size[1]*h;return(p||f)&&(type_default.exists(this.label)&&(d=this.label.evalVisProp("fontsize")),Math.abs(t)<math_default.eps?t=d:this.board.canvasWidth+math_default.eps>t&&t>this.board.canvasWidth-d-math_default.eps&&(t=this.board.canvasWidth-d),math_default.eps+d>e&&e>-math_default.eps?e=d:this.board.canvasHeight+math_default.eps>e&&e>this.board.canvasHeight-d-math_default.eps&&(e=this.board.canvasHeight-d)),new coords_default(constants.COORDS_BY_SCREEN,[t,e],this.board)},cloneToBackground:function(){var t=type_default.getCloneObject(this),e,r,s;return t.point1=this.point1,t.point2=this.point2,t.stdform=this.stdform,r=this.getSlope(),e=this.getRise(),t.getSlope=function(){return r},t.getRise=function(){return e},s=this.board.renderer.enhancedRendering,this.board.renderer.enhancedRendering=!0,this.board.renderer.drawLine(t),this.board.renderer.enhancedRendering=s,this.traces[t.id]=t.rendNode,this},addTransform:function(t){var e,r=type_default.isArray(t)?t:[t],s=r.length;for(e=0;e<s;e++)this.point1.transformations.push(r[e]),this.point2.transformations.push(r[e]);return this},removeTransform:function(t){var e,r=type_default.isArray(t)?t:[t],s=r.length;for(e=0;e<s;e++)type_default.removeElementFromArray(this.point1.transformations,r[e]),type_default.removeElementFromArray(this.point2.transformations,r[e]);return this},clearTransforms:function(){return this.point1.transformations=[],this.point2.transformations=[],this},snapToGrid:function(t){var e,r,s,o,a,n,l,h,d;return this.evalVisProp("snaptogrid")?this.parents.length<3?(this.point1.handleSnapToGrid(!0,!0),this.point2.handleSnapToGrid(!0,!0)):type_default.exists(t)&&(h=this.evalVisProp("snapsizex"),d=this.evalVisProp("snapsizey"),e=new coords_default(constants.COORDS_BY_SCREEN,[t.Xprev,t.Yprev],this.board),n=e.usrCoords[1],l=e.usrCoords[2],h<=0&&this.board.defaultAxes&&this.board.defaultAxes.x.defaultTicks&&(a=this.board.defaultAxes.x.defaultTicks,h=a.ticksDelta*(a.evalVisProp("minorticks")+1)),d<=0&&this.board.defaultAxes&&this.board.defaultAxes.y.defaultTicks&&(a=this.board.defaultAxes.y.defaultTicks,d=a.ticksDelta*(a.evalVisProp("minorticks")+1)),h>0&&d>0&&(r=geometry_default.projectPointToLine({coords:e},this,this.board),s=statistics_default.subtract([1,Math.round(n/h)*h,Math.round(l/d)*d],r.usrCoords),o=this.board.create("transform",s.slice(1),{type:"translate"}),o.applyOnce([this.point1,this.point2]))):(this.point1.handleSnapToGrid(!1,!0),this.point2.handleSnapToGrid(!1,!0)),this},snapToPoints:function(){var t=this.evalVisProp("snaptopoints");return this.parents.length<3&&(this.point1.handleSnapToPoints(t),this.point2.handleSnapToPoints(t)),this},X:function(t){var e=this.point1.coords.usrCoords,r=this.point2.coords.usrCoords,s=this.stdform[2];return e[0]!==0?r[0]!==0?e[1]+(r[1]-e[1])*t:e[1]+s*1e5*t:e[0]!==0?r[1]-(e[1]-r[1])*t:r[1]+s*1e5*t},Y:function(t){var e=this.point1.coords.usrCoords,r=this.point2.coords.usrCoords,s=this.stdform[1];return e[0]!==0?r[0]!==0?e[2]+(r[2]-e[2])*t:e[2]-s*1e5*t:e[0]!==0?r[2]-(e[2]-r[2])*t:r[2]-s*1e5*t},Z:function(t){var e=this.point1.coords.usrCoords,r=this.point2.coords.usrCoords;return t===1&&e[0]*r[0]===0?0:1},Ft:function(t){var e=[this.Z(t),this.X(t),this.Y(t)];return e[1]/=e[0],e[2]/=e[0],e[0]/=e[0],e},L:function(){return this.point1.Dist(this.point2)},setFixedLength:function(t){return this.hasFixedLength?(this.fixedLength=type_default.createFunction(t,this.board),this.hasFixedLength=!0,this.addParentsFromJCFunctions([this.fixedLength]),this.board.update(),this):this},minX:function(){return 0},maxX:function(){return 1},bounds:function(){var t=this.point1.coords.usrCoords,e=this.point2.coords.usrCoords;return[Math.min(t[1],e[1]),Math.max(t[2],e[2]),Math.max(t[1],e[1]),Math.min(t[2],e[2])]},remove:function(){this.removeAllTicks(),element_default.prototype.remove.call(this)}});jxg_default.createLine=function(t,e,r){var s,o,a,n,l,h,d=[],u=!1,c=!1,p;if(e.length===2){if(h=type_default.copyAttributes(r,t.options,"line","point1"),type_default.isArray(e[0])&&e[0].length>1)a=t.create("point",e[0],h);else if(type_default.isString(e[0])||type_default.isPoint(e[0]))a=t.select(e[0]);else if(type_default.isFunction(e[0])&&type_default.isPoint(e[0]()))a=e[0](),c=!0;else if(type_default.isFunction(e[0])&&e[0]().length&&e[0]().length>=2)a=jxg_default.createPoint(t,e[0](),h),c=!0;else if(type_default.isObject(e[0])&&type_default.isTransformationOrArray(e[1]))u=!0,a=t.create("point",[e[0].point1,e[1]],h);else throw new Error("JSXGraph: Can't create line with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
114
+ Possible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]`);if(h=type_default.copyAttributes(r,t.options,"line","point2"),u)n=t.create("point",[e[0].point2,e[1]],h);else if(type_default.isArray(e[1])&&e[1].length>1)n=t.create("point",e[1],h);else if(type_default.isString(e[1])||type_default.isPoint(e[1]))n=t.select(e[1]);else if(type_default.isFunction(e[1])&&type_default.isPoint(e[1]()))n=e[1](),c=!0;else if(type_default.isFunction(e[1])&&e[1]().length&&e[1]().length>=2)n=jxg_default.createPoint(t,e[1](),h),c=!0;else throw new Error("JSXGraph: Can't create line with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
115
+ Possible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]`);h=type_default.copyAttributes(r,t.options,"line"),o=new jxg_default.Line(t,a,n,h),c?(o.constrained=!0,o.funp1=e[0],o.funp2=e[1]):u||(o.isDraggable=!0),o.setParents([a.id,n.id])}else if(e.length===3){for(p=!0,l=0;l<3;l++)if(type_default.isNumber(e[l]))d[l]=type_default.createFunction(e[l]);else if(type_default.isFunction(e[l]))d[l]=e[l],p=!1;else throw new Error("JSXGraph: Can't create line with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+`'.
116
+ Possible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]`);h=type_default.copyAttributes(r,t.options,"line","point1"),p?a=t.create("point",[d[2]()*d[2]()+d[1]()*d[1](),d[2]()-d[1]()*d[0]()+d[2](),-d[1]()-d[2]()*d[0]()-d[1]()],h):a=t.create("point",[function(){return(d[2]()*d[2]()+d[1]()*d[1]())*.5},function(){return(d[2]()-d[1]()*d[0]()+d[2]())*.5},function(){return(-d[1]()-d[2]()*d[0]()-d[1]())*.5}],h),h=type_default.copyAttributes(r,t.options,"line","point2"),p?n=t.create("point",[d[2]()*d[2]()+d[1]()*d[1](),-d[1]()*d[0]()+d[2](),-d[2]()*d[0]()-d[1]()],h):n=t.create("point",[function(){return d[2]()*d[2]()+d[1]()*d[1]()},function(){return-d[1]()*d[0]()+d[2]()},function(){return-d[2]()*d[0]()-d[1]()}],h),a.prepareUpdate().update(),n.prepareUpdate().update(),h=type_default.copyAttributes(r,t.options,"line"),o=new jxg_default.Line(t,a,n,h),o.isDraggable=p,o.setParents([a,n])}else if(e.length===1&&type_default.isFunction(e[0])&&e[0]().length===2&&type_default.isPoint(e[0]()[0])&&type_default.isPoint(e[0]()[1]))s=e[0](),h=type_default.copyAttributes(r,t.options,"line"),o=new jxg_default.Line(t,s[0],s[1],h),o.constrained=!0,o.funps=e[0],o.setParents(s);else if(e.length===1&&type_default.isFunction(e[0])&&e[0]().length===3&&type_default.isNumber(e[0]()[0])&&type_default.isNumber(e[0]()[1])&&type_default.isNumber(e[0]()[2]))s=e[0],h=type_default.copyAttributes(r,t.options,"line","point1"),a=t.create("point",[function(){var f=s();return[(f[2]*f[2]+f[1]*f[1])*.5,(f[2]-f[1]*f[0]+f[2])*.5,(-f[1]-f[2]*f[0]-f[1])*.5]}],h),h=type_default.copyAttributes(r,t.options,"line","point2"),n=t.create("point",[function(){var f=s();return[f[2]*f[2]+f[1]*f[1],-f[1]*f[0]+f[2],-f[2]*f[0]-f[1]]}],h),h=type_default.copyAttributes(r,t.options,"line"),o=new jxg_default.Line(t,a,n,h),o.constrained=!0,o.funps=e[0],o.setParents([a,n]);else throw new Error("JSXGraph: Can't create line with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
117
+ Possible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]`);return o};jxg_default.registerElement("line",jxg_default.createLine);jxg_default.createSegment=function(t,e,r){var s,o;if(r.straightFirst=!1,r.straightLast=!1,o=type_default.copyAttributes(r,t.options,"segment"),s=t.create("line",e.slice(0,2),o),e.length===3){try{s.hasFixedLength=!0,s.fixedLengthOldCoords=[],s.fixedLengthOldCoords[0]=new coords_default(constants.COORDS_BY_USER,s.point1.coords.usrCoords.slice(1,3),t),s.fixedLengthOldCoords[1]=new coords_default(constants.COORDS_BY_USER,s.point2.coords.usrCoords.slice(1,3),t),s.setFixedLength(e[2])}catch{throw new Error("JSXGraph: Can't create segment with third parent type '"+typeof e[2]+`'.
118
+ Possible third parent types: number or function`)}s.getParents=function(){return this.parents.concat(this.fixedLength())}}return s.elType="segment",s};jxg_default.registerElement("segment",jxg_default.createSegment);jxg_default.createArrow=function(t,e,r){var s,o;return r.straightFirst=!1,r.straightLast=!1,o=type_default.copyAttributes(r,t.options,"arrow"),s=t.create("line",e,o),s.type=constants.OBJECT_TYPE_VECTOR,s.elType="arrow",s};jxg_default.registerElement("arrow",jxg_default.createArrow);jxg_default.createAxis=function(t,e,r){var s,o=type_default.copyAttributes(r,t.options,"axis"),a,n;try{s=t.create("line",e,o)}catch{throw new Error("JSXGraph: Can't create axis with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
119
+ Possible parent types: [point,point], [[x1,y1],[x2,y2]]`)}s.type=constants.OBJECT_TYPE_AXIS,s.isDraggable=!1,s.point1.isDraggable=!1,s.point2.isDraggable=!1,s._point1UsrCoordsOrg=s.point1.coords.usrCoords.slice(),s._point2UsrCoordsOrg=s.point2.coords.usrCoords.slice();for(a in s.ancestors)s.ancestors.hasOwnProperty(a)&&(s.ancestors[a].type=constants.OBJECT_TYPE_AXISPOINT);return type_default.exists(o.ticks.ticksdistance)?n=o.ticks.ticksdistance:type_default.isArray(o.ticks.ticks)?n=o.ticks.ticks:n=1,s.defaultTicks=t.create("ticks",[s,n],o.ticks),s.defaultTicks.dump=!1,s.elType="axis",s.subs={ticks:s.defaultTicks},s.inherits.push(s.defaultTicks),s.update=function(){var l,h,d,u,c,p,f,_,g,m,b,C,y,x,v,P,E,w,O;if(!this.needsUpdate)return this;if(l=this.board.getBoundingBox(),h=this.evalVisProp("position"),u=this.Direction(),c=this.isHorizontal(),p=this.isVertical(),f=this.evalVisProp("ticksautopos"),_=this.evalVisProp("ticksautoposthreshold"),c?_=type_default.parseNumber(_,Math.abs(l[1]-l[3]),1/this.board.unitX)*this.board.unitX:p?_=type_default.parseNumber(_,Math.abs(l[1]-l[3]),1/this.board.unitY)*this.board.unitY:_=type_default.parseNumber(_,1,1),m=this.evalVisProp("anchor"),b=m.indexOf("left")>-1,C=m.indexOf("right")>-1,y=this.evalVisProp("anchordist"),c?y=type_default.parseNumber(y,Math.abs(l[1]-l[3]),1/this.board.unitX):p?y=type_default.parseNumber(y,Math.abs(l[0]-l[2]),1/this.board.unitY):y=0,P=this.board.getPointLoc(this._point1UsrCoordsOrg,y),x=this.point1.coords.usrCoords.slice(),v=this.point2.coords.usrCoords.slice(),h==="static"||!p&&!c||(h==="fixed"?(c&&(u[0]>0&&C||u[0]<0&&b?(x[2]=l[3]+y,v[2]=l[3]+y):u[0]>0&&b||u[0]<0&&C?(x[2]=l[1]-y,v[2]=l[1]-y):(x=this._point1UsrCoordsOrg.slice(),v=this._point2UsrCoordsOrg.slice())),p&&(u[1]>0&&b||u[1]<0&&C?(x[1]=l[0]+y,v[1]=l[0]+y):u[1]>0&&C||u[1]<0&&b?(x[1]=l[2]-y,v[1]=l[2]-y):(x=this._point1UsrCoordsOrg.slice(),v=this._point2UsrCoordsOrg.slice()))):h==="sticky"&&(c&&(P[1]<0&&(u[0]>0&&C||u[0]<0&&b)?(x[2]=l[3]+y,v[2]=l[3]+y):P[1]>0&&(u[0]>0&&b||u[0]<0&&C)?(x[2]=l[1]-y,v[2]=l[1]-y):(x=this._point1UsrCoordsOrg.slice(),v=this._point2UsrCoordsOrg.slice())),p&&(P[0]<0&&(u[1]>0&&b||u[1]<0&&C)?(x[1]=l[0]+y,v[1]=l[0]+y):P[0]>0&&(u[1]>0&&C||u[1]<0&&b)?(x[1]=l[2]-y,v[1]=l[2]-y):(x=this._point1UsrCoordsOrg.slice(),v=this._point2UsrCoordsOrg.slice())))),this.point1.setPositionDirectly(jxg_default.COORDS_BY_USER,x),this.point2.setPositionDirectly(jxg_default.COORDS_BY_USER,v),type_default.exists(this.defaultTicks)){if(E=this.defaultTicks.visProp.label,f&&(c||p)){if(type_default.exists(E._anchorx_org)||(E._anchorx_org=type_default.def(E.anchorx,this.board.options.text.anchorX)),type_default.exists(E._anchory_org)||(E._anchory_org=type_default.def(E.anchory,this.board.options.text.anchorY)),type_default.exists(E._offset_org)||(E._offset_org=E.offset.slice()),O=E.offset,c){for(g=s.point1.coords.scrCoords[2]-this.board.canvasHeight*.5,w=E.anchory,g<0&&Math.abs(g)>_?E._side==="bottom"&&(E.anchory==="top"&&(w="bottom"),O[1]*=-1,E._side="top"):g>0&&Math.abs(g)>_?E._side==="top"&&(E.anchory==="bottom"&&(w="top"),O[1]*=-1,E._side="bottom"):(w=E._anchory_org,O=E._offset_org.slice(),w==="top"?E._side="bottom":w==="bottom"?E._side="top":O[1]<0?E._side="bottom":E._side="top"),d=0;d<s.defaultTicks.labels.length;d++)this.defaultTicks.labels[d].visProp.anchory=w;E.anchory=w}else if(p){for(g=s.point1.coords.scrCoords[1]-this.board.canvasWidth*.5,g<0&&Math.abs(g)>_?E._side==="right"&&(E.anchorx==="left"&&(w="right"),O[0]*=-1,E._side="left"):g>0&&Math.abs(g)>_?E._side==="left"&&(E.anchorx==="right"&&(w="left"),O[0]*=-1,E._side="right"):(w=E._anchorx_org,O=E._offset_org.slice(),w==="left"?E._side="right":w==="right"||O[0]<0?E._side="left":E._side="right"),d=0;d<s.defaultTicks.labels.length;d++)this.defaultTicks.labels[d].visProp.anchorx=w;E.anchorx=w}E.offset=O}else delete E._anchorx_org,delete E._anchory_org,delete E._offset_org;this.defaultTicks.needsUpdate=!0}return jxg_default.Line.prototype.update.call(this),this},s};jxg_default.registerElement("axis",jxg_default.createAxis);jxg_default.createTangent=function(t,e,r){var s,o,a,n,l,h,d,u,c,p=[];if(e.length===1)s=e[0],o=s.slideObject;else if(e.length===2)if(type_default.isPoint(e[0]))s=e[0],o=e[1];else if(type_default.isPoint(e[1]))o=e[0],s=e[1];else throw new Error("JSXGraph: Can't create tangent with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
120
+ Possible parent types: [glider|point], [point,line|curve|circle|conic]`);else throw new Error("JSXGraph: Can't create tangent with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
121
+ Possible parent types: [glider|point], [point,line|curve|circle|conic]`);if(h=type_default.copyAttributes(r,t.options,"tangent"),o.elementClass===constants.OBJECT_CLASS_LINE)l=t.create("line",[o.point1,o.point2],h),l.glider=s;else if(o.elementClass===constants.OBJECT_CLASS_CURVE&&o.type!==constants.OBJECT_TYPE_CONIC){if(u=o.getTransformationSource(),c=u[0],c)for(p.push(o);u[0]&&type_default.exists(u[1]._transformationSource);)p.push(u[1]),u=u[1].getTransformationSource();o.evalVisProp("curvetype")!=="plot"||c?(l=t.create("line",[function(){var f=o.X,_=o.Y,g,m,b,C,y,x,v,P;if(s.type===constants.OBJECT_TYPE_GLIDER?P=s.position:o.evalVisProp("curvetype")==="functiongraph"?P=s.X():P=geometry_default.projectPointToCurve(s,o,t)[1],v=s.Coords(!0),c){for(y=p[p.length-1]._transformationSource,f=y.X,_=y.Y,C=0;C<p.length;C++)p[C].updateTransformMatrix(),x=math_default.inverse(p[C].transformMat),v=math_default.matVecMult(x,v);s.type!==constants.OBJECT_TYPE_GLIDER&&(v[1]/=v[0],v[2]/=v[0],v[0]/=v[0],P=geometry_default.projectCoordsToCurve(v[1],v[2],0,y,t)[1])}if(g=numerics_default.D(_)(P),m=numerics_default.D(f)(P),b=[-v[1]*g+v[2]*m,v[0]*g,-v[0]*m],c)for(C=p.length-1;C>=0;C--)x=math_default.transpose(math_default.inverse(p[C].transformMat)),b=math_default.matVecMult(x,b);return b}],h),s.addChild(l),l.glider=s):(d=function(f,_,g){var m=Math.floor(f),b,C,y,x,v,P,E,w,O,S,M,N;if(_.bezierDegree===1)m===_.numberPoints-1&&m--;else if(_.bezierDegree===3)_.elType==="sector"?(M=_.points.slice(3,_.numberPoints-3),N=M.length):(M=_.points,N=M.length),m=Math.floor(f*(N-1)/3)*3,y=(f*(N-1)-m)/3,m>=N-1&&(m=N-4,y=1);else return 0;if(m<0)return 1;switch(_.bezierDegree===1?(b=_.points[m].usrCoords,C=_.points[m+1].usrCoords):(x=M[m].usrCoords,v=M[m+1].usrCoords,P=M[m+2].usrCoords,E=M[m+3].usrCoords,w=(1-y)*(1-y)*(v[1]-x[1])+2*(1-y)*y*(P[1]-v[1])+y*y*(E[1]-P[1]),O=(1-y)*(1-y)*(v[2]-x[2])+2*(1-y)*y*(P[2]-v[2])+y*y*(E[2]-P[2]),S=math_default.hypot(w,O),w/=S,O/=S,b=s.coords.usrCoords,C=[1,b[1]+w,b[2]+O]),g){case 0:return b[2]*C[1]-b[1]*C[2];case 1:return C[2]-b[2];case 2:return b[1]-C[1];default:return[b[2]*C[1]-b[1]*C[2],C[2]-b[2],b[1]-C[1]]}},l=t.create("line",[function(){var f;return s.type===constants.OBJECT_TYPE_GLIDER?f=s.position:f=geometry_default.projectPointToCurve(s,o,t)[1],d(f,o)}],h),s.addChild(l),l.glider=s)}else o.type===constants.OBJECT_TYPE_TURTLE?(l=t.create("line",[function(){var f,_;for(s.type===constants.OBJECT_TYPE_GLIDER?_=s.position:_=geometry_default.projectPointToTurtle(s,o,t)[1],f=Math.floor(_),a=0;a<o.objects.length;a++)if(n=o.objects[a],n.type===constants.OBJECT_TYPE_CURVE){if(f<n.numberPoints)break;f-=n.numberPoints}return f===n.numberPoints-1&&f--,f<0?[1,0,0]:[n.Y(f)*n.X(f+1)-n.X(f)*n.Y(f+1),n.Y(f+1)-n.Y(f),n.X(f)-n.X(f+1)]}],h),s.addChild(l),l.glider=s):(o.elementClass===constants.OBJECT_CLASS_CIRCLE||o.type===constants.OBJECT_TYPE_CONIC)&&(l=t.create("line",[function(){return math_default.matVecMult(o.quadraticform,s.coords.usrCoords)}],h),s.addChild(l),l.glider=s);if(!type_default.exists(l))throw new Error("JSXGraph: Couldn't create tangent with the given parents.");return l.elType="tangent",l.type=constants.OBJECT_TYPE_TANGENT,l.setParents(e),l};jxg_default.createNormal=function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f=[];for(n=0;n<e.length;++n)e[n]=t.select(e[n]);if(e.length===1)s=e[0],o=s.slideObject;else if(e.length===2)if(type_default.isPointType(t,e[0]))s=type_default.providePoints(t,[e[0]],r,"point")[0],o=e[1];else if(type_default.isPointType(t,e[1]))o=e[0],s=type_default.providePoints(t,[e[1]],r,"point")[0];else throw new Error("JSXGraph: Can't create normal with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
122
+ Possible parent types: [point,line], [point,circle], [glider]`);else throw new Error("JSXGraph: Can't create normal with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
123
+ Possible parent types: [point,line], [point,circle], [glider]`);if(l=type_default.copyAttributes(r,t.options,"normal"),o.elementClass===constants.OBJECT_CLASS_LINE)d=type_default.copyAttributes(r,t.options,"normal","point"),h=t.create("point",[function(){var _=math_default.crossProduct([1,0,0],o.stdform);return[_[0],-_[2],_[1]]}],d),h.isDraggable=!0,a=t.create("line",[s,h],l),a.point=h,a.subs={point:h},a.inherits.push(h);else if(o.elementClass===constants.OBJECT_CLASS_CIRCLE)a=t.create("line",[o.midpoint,s],l);else if(o.elementClass===constants.OBJECT_CLASS_CURVE){if(c=o.getTransformationSource(),p=c[0],p)for(f.push(o);c[0]&&type_default.exists(c[1]._transformationSource);)f.push(c[1]),c=c[1].getTransformationSource();o.evalVisProp("curvetype")!=="plot"||p?a=t.create("line",[function(){var _=o.X,g=o.Y,m,b,C,y,x,v,P,E;if(s.type===constants.OBJECT_TYPE_GLIDER?E=s.position:o.evalVisProp("curvetype")==="functiongraph"?E=s.X():E=geometry_default.projectPointToCurve(s,o,t)[1],P=s.Coords(!0),p){for(x=f[f.length-1]._transformationSource,_=x.X,g=x.Y,y=0;y<f.length;y++)f[y].updateTransformMatrix(),v=math_default.inverse(f[y].transformMat),P=math_default.matVecMult(v,P);s.type!==constants.OBJECT_TYPE_GLIDER&&(P[1]/=P[0],P[2]/=P[0],P[0]/=P[0],E=geometry_default.projectCoordsToCurve(P[1],P[2],0,x,t)[1])}if(m=numerics_default.D(g)(E),b=numerics_default.D(_)(E),C=[-P[1]*b-P[2]*m,P[0]*b,P[0]*m],p)for(y=f.length-1;y>=0;y--)v=math_default.transpose(math_default.inverse(f[y].transformMat)),C=math_default.matVecMult(v,C);return C}],l):(u=function(_,g,m){var b=Math.floor(_),C,y,x,v,P,E,w,O,S,M,N,j,k,B,I,X;if(g.bezierDegree===1)b===g.numberPoints-1&&b--,v=_;else if(g.bezierDegree===3)g.elType==="sector"?(I=g.points.slice(3,g.numberPoints-3),X=I.length):(I=g.points,X=I.length),b=Math.floor(_*(X-1)/3)*3,v=(_*(X-1)-b)/3,b>=X-1&&(b=X-4,v=1);else return 0;if(b<0)return 1;switch(C=v-b,g.bezierDegree===1?(y=g.points[b].usrCoords,x=g.points[b+1].usrCoords,k=[y[0]+C*(x[0]-y[0]),y[1]+C*(x[1]-y[1]),y[2]+C*(x[2]-y[2])],j=math_default.crossProduct(y,x),B=math_default.crossProduct([1,0,0],j),B=[B[0],-B[2],B[1]],j=math_default.crossProduct(k,B)):(P=I[b].usrCoords,E=I[b+1].usrCoords,w=I[b+2].usrCoords,O=I[b+3].usrCoords,S=(1-v)*(1-v)*(E[1]-P[1])+2*(1-v)*v*(w[1]-E[1])+v*v*(O[1]-w[1]),M=(1-v)*(1-v)*(E[2]-P[2])+2*(1-v)*v*(w[2]-E[2])+v*v*(O[2]-w[2]),N=math_default.hypot(S,M),S/=N,M/=N,y=s.coords.usrCoords,x=[1,y[1]-M,y[2]+S],j=[y[2]*x[1]-y[1]*x[2],x[2]-y[2],y[1]-x[1]]),m){case 0:return j[0];case 1:return j[1];case 2:return j[2];default:return j}},a=t.create("line",[function(){var _;return s.type===constants.OBJECT_TYPE_GLIDER?_=s.position:_=geometry_default.projectPointToCurve(s,o,t)[1],u(_,o)}],l),s.addChild(a),a.glider=s)}else if(o.type===constants.OBJECT_TYPE_TURTLE)a=t.create("line",[function(){var _,g,m=Math.floor(s.position),b=s.position-m;for(g=0;g<o.objects.length;g++)if(_=o.objects[g],_.type===constants.OBJECT_TYPE_CURVE){if(m<_.numberPoints)break;m-=_.numberPoints}return m===_.numberPoints-1&&(m-=1,b=1),m<0?1:(_.Y(m)+b*(_.Y(m+1)-_.Y(m)))*(_.Y(m)-_.Y(m+1))-(_.X(m)+b*(_.X(m+1)-_.X(m)))*(_.X(m+1)-_.X(m))},function(){var _,g,m=Math.floor(s.position);for(g=0;g<o.objects.length;g++)if(_=o.objects[g],_.type===constants.OBJECT_TYPE_CURVE){if(m<_.numberPoints)break;m-=_.numberPoints}return m===_.numberPoints-1&&(m-=1),m<0?0:_.X(m+1)-_.X(m)},function(){var _,g,m=Math.floor(s.position);for(g=0;g<o.objects.length;g++)if(_=o.objects[g],_.type===constants.OBJECT_TYPE_CURVE){if(m<_.numberPoints)break;m-=_.numberPoints}return m===_.numberPoints-1&&(m-=1),m<0?0:_.Y(m+1)-_.Y(m)}],l);else throw new Error("JSXGraph: Can't create normal with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
124
+ Possible parent types: [point,line], [point,circle], [glider]`);return a.elType="normal",a.setParents(e),type_default.exists(s._is_new)?(a.addChild(s),delete s._is_new):s.addChild(a),o.addChild(a),a};jxg_default.createRadicalAxis=function(t,e,r){var s,o,a;if(e.length!==2||e[0].elementClass!==constants.OBJECT_CLASS_CIRCLE||e[1].elementClass!==constants.OBJECT_CLASS_CIRCLE)throw new Error("JSXGraph: Can't create 'radical axis' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
125
+ Possible parent type: [circle,circle]`);return o=t.select(e[0]),a=t.select(e[1]),s=t.create("line",[function(){var n=o.stdform,l=a.stdform;return math_default.matVecMult(math_default.transpose([n.slice(0,3),l.slice(0,3)]),[l[3],-n[3]])}],r),s.elType="radicalaxis",s.setParents([o.id,a.id]),o.addChild(s),a.addChild(s),s};jxg_default.createPolarLine=function(t,e,r){var s,o,a,n,l,h,d;if(e.length>1&&(n=e[0].type===constants.OBJECT_TYPE_CONIC||e[0].elementClass===constants.OBJECT_CLASS_CIRCLE,l=e[1].type===constants.OBJECT_TYPE_CONIC||e[1].elementClass===constants.OBJECT_CLASS_CIRCLE,h=type_default.isPoint(e[0]),d=type_default.isPoint(e[1])),e.length!==2||!(n&&d||h&&l))throw new Error("JSXGraph: Can't create 'polar line' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
126
+ Possible parent type: [conic|circle,point], [point,conic|circle]`);return d?(o=t.select(e[0]),a=t.select(e[1])):(o=t.select(e[1]),a=t.select(e[0])),s=t.create("tangent",[o,a],r),s.elType="polarline",s};jxg_default.createTangentTo=function(t,e,r){var s,o,a=t.select(e[0]),n=type_default.providePoints(t,e[1],r,"point")[0],l=type_default.def(e[2],0),h,d;if(a.type!==constants.OBJECT_TYPE_CIRCLE&&a.type!==constants.OBJECT_TYPE_CONIC||n.elementClass!==constants.OBJECT_CLASS_POINT)throw new Error("JSXGraph: Can't create tangentto with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+`'.
127
+ Possible parent types: [circle|conic,point,number]`);return o=type_default.copyAttributes(r,t.options,"tangentto"),d=t.create("polar",[a,n],o.polar),h=t.create("intersection",[d,a,l],o.point),s=t.create("tangent",[a,h],o),s.point=h,s.polar=d,s.elType="tangentto",s};jxg_default.registerElement("tangent",jxg_default.createTangent);jxg_default.registerElement("normal",jxg_default.createNormal);jxg_default.registerElement("tangentto",jxg_default.createTangentTo);jxg_default.registerElement("polar",jxg_default.createTangent);jxg_default.registerElement("radicalaxis",jxg_default.createRadicalAxis);jxg_default.registerElement("polarline",jxg_default.createPolarLine);var line_default=jxg_default.Line;jxg_default.Group=function(t,e,r,s,o){var a,n,l,h;for(this.board=t,this.objects={},a=this.board.numObjects,this.board.numObjects+=1,e===""||!type_default.exists(e)?this.id=this.board.id+"Group"+a:this.id=e,this.board.groups[this.id]=this,this.type=constants.OBJECT_TYPE_POINT,this.elementClass=constants.OBJECT_CLASS_POINT,r===""||!type_default.exists(r)?this.name="group_"+this.board.generateName(this):this.name=r,delete this.type,this.coords={},this.needsRegularUpdate=o.needsregularupdate,this.rotationCenter="centroid",this.scaleCenter=null,this.rotationPoints=[],this.translationPoints=[],this.scalePoints=[],this.scaleDirections={},this.parents=[],type_default.isArray(s)?n=s:n=Array.prototype.slice.call(arguments,3),l=0;l<n.length;l++)h=this.board.select(n[l]),!h.evalVisProp("fixed")&&type_default.exists(h.coords)&&this.addPoint(h)};type_default.copyMethodMap(jxg_default.Group,{ungroup:"ungroup",add:"addPoint",addPoint:"addPoint",addPoints:"addPoints",addGroup:"addGroup",remove:"removePoint",removePoint:"removePoint",setAttribute:"setAttribute",setProperty:"setAttribute"});jxg_default.extend(jxg_default.Group.prototype,{ungroup:function(){var t,e,r;for(t in this.objects)this.objects.hasOwnProperty(t)&&(e=this.objects[t].point,type_default.isArray(e.groups)&&(r=type_default.indexOf(e.groups,this.id),r>=0&&delete e.groups[r]));return this.objects={},this},addParents:function(t){var e,r,s;for(type_default.isArray(t)?s=t:s=arguments,r=s.length,e=0;e<r;++e)type_default.isId(this.board,s[e])?this.parents.push(s[e]):type_default.exists(s[e].id)&&this.parents.push(s[e].id);this.parents=type_default.uniqueArray(this.parents)},setParents:function(t){return this.parents=[],this.addParents(t),this},getParents:function(){return type_default.isArray(this.parents)?this.parents:[]},_updateCoordsCache:function(t){var e;t!==""&&type_default.exists(this.objects[t])&&(e=this.objects[t].point,this.coords[e.id]={usrCoords:e.coords.usrCoords.slice(0)})},update:function(){var t,e,r,s,o,a,n,l,h,d,u,c,p=null;if(!this.needsUpdate)return this;if(e=this._update_find_drag_type(),e.action==="nothing")return this._updateCoordsCache(e.id),this;if(p=this.objects[e.id].point,e.action==="translation"){if(d=[p.coords.usrCoords[1]-this.coords[e.id].usrCoords[1],p.coords.usrCoords[2]-this.coords[e.id].usrCoords[2]],p.elementClass!==constants.OBJECT_CLASS_POINT){for(d.unshift(0),t=0;t<p.transformations.length;t++)d=math_default.matVecMult(p.transformations[t].matrix,d);d.shift()}u=this.board.create("transform",d,{type:"translate"}),u.update()}else if(e.action==="rotation"||e.action==="scaling"){if(e.action==="rotation"?s="rotationCenter":s="scaleCenter",type_default.exists(this[s].coords))c=this[s].coords.usrCoords.slice(1);else if(this[s]==="centroid")c=this._update_centroid_center();else if(type_default.isArray(this[s]))c=this[s];else if(type_default.isFunction(this[s]))c=this[s]();else return jxg_default.debug("Group.update: No valid center for this transformation, get out of here."),this;if(e.action==="rotation")h=geometry_default.rad(this.coords[e.id].usrCoords.slice(1),c,this.objects[e.id].point),d=this.board.create("transform",[h,c[0],c[1]],{type:"rotate"}),d.update();else if(e.action==="scaling"){if(a=geometry_default.distance(this.coords[e.id].usrCoords.slice(1),c),Math.abs(a)<math_default.eps)return this;a=geometry_default.distance(p.coords.usrCoords.slice(1),c)/a,n=this.scaleDirections[e.id].indexOf("x")>=0?a:1,l=this.scaleDirections[e.id].indexOf("y")>=0?a:1,d=this.board.create("transform",[1,0,0,c[0]*(1-n),n,0,c[1]*(1-l),0,l],{type:"generic"}),d.update()}else return this}for(r in this.objects)p=this.objects[r].point,p.elementClass!==constants.OBJECT_CLASS_POINT&&(type_default.exists(d.board)?d.meltTo(p):e.id!==p.id&&u.meltTo(p));this._update_apply_transformation(e,d),this.needsUpdate=!1;for(r in this.objects)if(this.objects.hasOwnProperty(r))for(o in this.objects[r].descendants)this.objects[r].descendants.hasOwnProperty(o)&&(this.objects[r].descendants.needsUpdate=this.objects[r].descendants.needsRegularUpdate||this.board.needsFullUpdate);this.board.updateElements(e);for(r in this.objects)this.objects.hasOwnProperty(r)&&this._updateCoordsCache(r);return this},_update_find_drag_type:function(){var t,e,r="nothing",s=[],o;for(t in this.objects)this.objects.hasOwnProperty(t)&&(e=this.objects[t].point,e.coords.distance(constants.COORDS_BY_USER,this.coords[t])>math_default.eps&&s.push(e.id));return s.length===0?{action:r,id:"",changed:s}:(o=s[0],e=this.objects[o].point,s.length>1?r="translation":type_default.isInArray(this.rotationPoints,e)&&type_default.exists(this.rotationCenter)?r="rotation":type_default.isInArray(this.scalePoints,e)&&type_default.exists(this.scaleCenter)?r="scaling":type_default.isInArray(this.translationPoints,e)&&(r="translation"),{action:r,id:o,changed:s})},_update_centroid_center:function(){var t=[0,0],e=0,r;for(r in this.coords)this.coords.hasOwnProperty(r)&&(t[0]+=this.coords[r].usrCoords[1],t[1]+=this.coords[r].usrCoords[2],++e);return e>0&&(t[0]/=e,t[1]/=e),t},_update_apply_transformation:function(t,e){var r,s;for(r in this.objects)this.objects.hasOwnProperty(r)&&(type_default.exists(this.board.objects[r])?(s=this.objects[r].point,s.id!==t.id?t.action==="translation"?type_default.isInArray(t.changed,s.id)||s.elementClass===constants.OBJECT_CLASS_POINT&&s.coords.setCoordinates(constants.COORDS_BY_USER,[this.coords[r].usrCoords[1]+e[0],this.coords[r].usrCoords[2]+e[1]]):(t.action==="rotation"||t.action==="scaling")&&s.elementClass===constants.OBJECT_CLASS_POINT&&e.applyOnce([s]):(t.action==="rotation"||t.action==="scaling")&&s.coords.setCoordinates(constants.COORDS_BY_USER,math_default.matVecMult(e.matrix,this.coords[s.id].usrCoords))):delete this.objects[r])},addPoint:function(t){return this.objects[t.id]={point:this.board.select(t)},this._updateCoordsCache(t.id),this.translationPoints.push(t),t.groups.push(this.id),t.groups=type_default.uniqueArray(t.groups),this},addPoints:function(t){for(var e=0;e<t.length;e++)this.addPoint(t[e]);return this},addGroup:function(t){var e;for(e in t.objects)t.objects.hasOwnProperty(e)&&this.addPoint(t.objects[e].point);return this},removePoint:function(t){return delete this.objects[t.id],this},setRotationCenter:function(t){return this.rotationCenter=t,this},setRotationPoints:function(t){return this._setActionPoints("rotation",t)},addRotationPoint:function(t){return this._addActionPoint("rotation",t)},removeRotationPoint:function(t){return this._removeActionPoint("rotation",t)},setTranslationPoints:function(t){return this._setActionPoints("translation",t)},addTranslationPoint:function(t){return this._addActionPoint("translation",t)},removeTranslationPoint:function(t){return this._removeActionPoint("translation",t)},setScaleCenter:function(t){return this.scaleCenter=t,this},setScalePoints:function(t,e){var r,s,o;for(type_default.isArray(t)?r=t:r=arguments,o=r.length,s=0;s<o;++s)this.scaleDirections[this.board.select(r[s]).id]=e||"xy";return this._setActionPoints("scale",t)},addScalePoint:function(t,e){return this._addActionPoint("scale",t),this.scaleDirections[this.board.select(t).id]=e||"xy",this},removeScalePoint:function(t){return this._removeActionPoint("scale",t)},_setActionPoints:function(t,e){var r,s,o;for(type_default.isArray(e)?r=e:r=arguments,o=r.length,this[t+"Points"]=[],s=0;s<o;++s)this._addActionPoint(t,r[s]);return this},_addActionPoint:function(t,e){return this[t+"Points"].push(this.board.select(e)),this},_removeActionPoint:function(t,e){var r=this[t+"Points"].indexOf(this.board.select(e));return r>-1&&this[t+"Points"].splice(r,1),this},setProperty:function(){jxg_default.deprecated("Group.setProperty","Group.setAttribute()"),this.setAttribute.apply(this,arguments)},setAttribute:function(){var t;for(t in this.objects)this.objects.hasOwnProperty(t)&&this.objects[t].point.setAttribute.apply(this.objects[t].point,arguments);return this}});jxg_default.createGroup=function(t,e,r){var s=type_default.copyAttributes(r,t.options,"group"),o=new jxg_default.Group(t,s.id,s.name,e,s);return o.elType="group",o.setParents(e),o};jxg_default.registerElement("group",jxg_default.createGroup);var group_default=jxg_default.Group;jxg_default.Circle=function(t,e,r,s,o){this.constructor(t,o,constants.OBJECT_TYPE_CIRCLE,constants.OBJECT_CLASS_CIRCLE),this.method=e,this.midpoint=this.board.select(r),this.center=this.board.select(r),this.point2=null,this.radius=0,this.line=null,this.circle=null,this.points=[],e==="twoPoints"?(this.point2=t.select(s),this.radius=this.Radius()):e==="pointRadius"?(this.gxtterm=s,this.updateRadius=type_default.createFunction(s,this.board),this.updateRadius(),this.addParentsFromJCFunctions([this.updateRadius])):e==="pointLine"?(this.line=t.select(s),this.radius=this.line.point1.coords.distance(constants.COORDS_BY_USER,this.line.point2.coords)):e==="pointCircle"&&(this.circle=t.select(s),this.radius=this.circle.Radius()),this.id=this.board.setId(this,"C"),this.board.renderer.drawEllipse(this),this.board.finalizeAdding(this),this.createGradient(),this.elType="circle",this.createLabel(),type_default.exists(this.center._is_new)?(this.addChild(this.center),delete this.center._is_new):this.center.addChild(this),e==="pointRadius"?this.notifyParents(s):e==="pointLine"?this.line.addChild(this):e==="pointCircle"?this.circle.addChild(this):e==="twoPoints"&&(type_default.exists(this.point2._is_new)?(this.addChild(this.point2),delete this.point2._is_new):this.point2.addChild(this))};jxg_default.Circle.prototype=new element_default;type_default.copyMethodMap(jxg_default.Circle,{setRadius:"setRadius",getRadius:"getRadius",Area:"Area",area:"Area",Perimeter:"Perimeter",Circumference:"Perimeter",radius:"Radius",Radius:"Radius",Diameter:"Diameter",center:"center",line:"line",point2:"point2"});jxg_default.extend(jxg_default.Circle.prototype,{hasPoint:function(t,e){var r,s,o=this.center.coords.usrCoords,a=new coords_default(constants.COORDS_BY_SCREEN,[t,e],this.board),n=this.Radius(),l,h,d;return type_default.isObject(this.evalVisProp("precision"))?(s=this.board._inputDevice,r=this.evalVisProp("precision."+s)):r=this.board.options.precision.hasPoint,l=o[1]-a.usrCoords[1],h=o[2]-a.usrCoords[2],d=math_default.hypot(l,h),r+=this.evalVisProp("strokewidth")*.5,r/=Math.sqrt(Math.abs(this.board.unitX*this.board.unitY)),this.evalVisProp("hasinnerpoints")?d<n+r:Math.abs(d-n)<r},generatePolynomial:function(t){var e=this.center.symbolic.x,r=this.center.symbolic.y,s=t.symbolic.x,o=t.symbolic.y,a=this.generateRadiusSquared();return a===""?[]:["(("+s+")-("+e+"))^2 + (("+o+")-("+r+"))^2 - ("+a+")"]},generateRadiusSquared:function(){var t,e,r,s,o,a,n="";return this.method==="twoPoints"?(t=this.center.symbolic.x,e=this.center.symbolic.y,r=this.point2.symbolic.x,s=this.point2.symbolic.y,n="(("+r+")-("+t+"))^2 + (("+s+")-("+e+"))^2"):this.method==="pointRadius"?type_default.isNumber(this.radius)&&(n=(this.radius*this.radius).toString()):this.method==="pointLine"?(r=this.line.point1.symbolic.x,s=this.line.point1.symbolic.y,o=this.line.point2.symbolic.x,a=this.line.point2.symbolic.y,n="(("+r+")-("+o+"))^2 + (("+s+")-("+a+"))^2"):this.method==="pointCircle"&&(n=this.circle.Radius()),n},update:function(){var t,e,r,s,o,a;if(this.needsUpdate)for(this.evalVisProp("trace")&&this.cloneToBackground(!0),this.method==="pointLine"?this.radius=this.line.point1.coords.distance(constants.COORDS_BY_USER,this.line.point2.coords):this.method==="pointCircle"?this.radius=this.circle.Radius():this.method==="pointRadius"&&(this.radius=this.updateRadius()),this.radius=Math.abs(this.radius),this.updateStdform(),this.updateQuadraticform(),r=this.center.coords.usrCoords[0],t=this.center.coords.usrCoords[1]/r,e=this.center.coords.usrCoords[2]/r,r/=r,s=this.Radius(),o=.551915024494,this.numberPoints=13,this.dataX=[t+s,t+s,t+s*o,t,t-s*o,t-s,t-s,t-s,t-s*o,t,t+s*o,t+s,t+s],this.dataY=[e,e+s*o,e+s,e+s,e+s,e+s*o,e,e-s*o,e-s,e-s,e-s,e-s*o,e],this.bezierDegree=3,a=0;a<this.numberPoints;a++)this.points[a]=new coords_default(constants.COORDS_BY_USER,[this.dataX[a],this.dataY[a]],this.board);return this},updateQuadraticform:function(){var t=this.center,e=t.X(),r=t.Y(),s=this.Radius();this.quadraticform=[[e*e+r*r-s*s,-e,-r],[-e,1,0],[-r,0,1]]},updateStdform:function(){this.stdform[3]=.5,this.stdform[4]=this.Radius(),this.stdform[1]=-this.center.coords.usrCoords[1],this.stdform[2]=-this.center.coords.usrCoords[2],isFinite(this.stdform[4])||(this.stdform[0]=type_default.exists(this.point2)?-(this.stdform[1]*this.point2.coords.usrCoords[1]+this.stdform[2]*this.point2.coords.usrCoords[2]):0),this.normalize()},updateRenderer:function(){return this.needsUpdate?(this.visPropCalc.visible&&(this.isReal=!isNaN(this.center.coords.usrCoords[1]+this.center.coords.usrCoords[2]+this.Radius())&&this.center.isReal,this.isReal||this.updateVisibility(!1)),this.visPropCalc.visible&&this.board.renderer.updateEllipse(this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},notifyParents:function(t){type_default.isString(t)&&geonext_default.findDependencies(this,t,this.board)},setRadius:function(t){return this.updateRadius=type_default.createFunction(t,this.board),this.addParentsFromJCFunctions([this.updateRadius]),this.board.update(),this},Radius:function(t){return type_default.exists(t)?(this.setRadius(t),this.Radius()):this.method==="twoPoints"?type_default.cmpArrays(this.point2.coords.usrCoords,[0,0,0])||type_default.cmpArrays(this.center.coords.usrCoords,[0,0,0])?NaN:this.center.Dist(this.point2):this.method==="pointLine"||this.method==="pointCircle"?this.radius:this.method==="pointRadius"?this.evalVisProp("nonnegativeonly")?Math.max(0,this.updateRadius()):Math.abs(this.updateRadius()):NaN},Diameter:function(){return 2*this.Radius()},getRadius:function(){return jxg_default.deprecated("Circle.getRadius()","Circle.Radius()"),this.Radius()},getTextAnchor:function(){return this.center.coords},getLabelAnchor:function(){var t,e,r,s,o,a,n=1.5,l=this.Radius(),h=this.center.coords.usrCoords,d=.7071067811865;if(!type_default.exists(this.label))return new coords_default(constants.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(r=this.label.evalVisProp("position"),!type_default.isString(r))return new coords_default(constants.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(r.indexOf("right")<0&&r.indexOf("left")<0)switch(this.evalVisProp("label.position")){case"lft":t=h[1]-l,e=h[2];break;case"llft":t=h[1]-d*l,e=h[2]-d*l;break;case"rt":t=h[1]+l,e=h[2];break;case"lrt":t=h[1]+d*l,e=h[2]-d*l;break;case"urt":t=h[1]+d*l,e=h[2]+d*l;break;case"top":t=h[1],e=h[2]+l;break;case"bot":t=h[1],e=h[2]-l;break;default:t=h[1]-d*l,e=h[2]+d*l}else return h=this.center.coords.scrCoords,s=type_default.parsePosition(r),o=type_default.parseNumber(s.pos,2*Math.PI,1),s.pos.indexOf("fr")<0&&s.pos.indexOf("%")<0&&(s.pos.indexOf("px")>=0?o=0:o*=Math.PI/180),a=1,s.side==="left"&&(a=-1),type_default.exists(this.label)&&(n=a*.5*this.label.evalVisProp("distance")),t=h[1]+(l*this.board.unitX+this.label.size[0]*n)*Math.cos(o),e=h[2]-(l*this.board.unitY+this.label.size[1]*n)*Math.sin(o),new coords_default(constants.COORDS_BY_SCREEN,[t,e],this.board);return new coords_default(constants.COORDS_BY_USER,[t,e],this.board)},cloneToBackground:function(){var t,e=this.Radius(),r=type_default.getCloneObject(this);return r.center={coords:this.center.coords},r.Radius=function(){return e},r.getRadius=function(){return e},t=this.board.renderer.enhancedRendering,this.board.renderer.enhancedRendering=!0,this.board.renderer.drawEllipse(r),this.board.renderer.enhancedRendering=t,this.traces[r.id]=r.rendNode,this},addTransform:function(t){var e,r=type_default.isArray(t)?t:[t],s=r.length;for(e=0;e<s;e++)this.center.transformations.push(r[e]),this.method==="twoPoints"&&this.point2.transformations.push(r[e]);return this},removeTransform:function(t){var e,r=type_default.isArray(t)?t:[t],s=r.length;for(e=0;e<s;e++)type_default.removeElementFromArray(this.center.transformations,r[e]),this.method==="twoPoints"&&type_default.removeElementFromArray(this.point2.transformations,r[e]);return this},clearTransforms:function(){return this.center.transformations=[],this.method==="twoPoints"&&(this.point2.transformations=[]),this},snapToGrid:function(){var t=this.evalVisProp("snaptogrid");return this.center.handleSnapToGrid(t,!0),this.method==="twoPoints"&&this.point2.handleSnapToGrid(t,!0),this},snapToPoints:function(){var t=this.evalVisProp("snaptopoints");return this.center.handleSnapToPoints(t),this.method==="twoPoints"&&this.point2.handleSnapToPoints(t),this},X:function(t){return this.Radius()*Math.cos(t*2*Math.PI)+this.center.coords.usrCoords[1]},Y:function(t){return this.Radius()*Math.sin(t*2*Math.PI)+this.center.coords.usrCoords[2]},Z:function(t){return 1},minX:function(){return 0},maxX:function(){return 1},Area:function(){var t=this.Radius();return t*t*Math.PI},Perimeter:function(){return 2*this.Radius()*Math.PI},bounds:function(){var t=this.center.coords.usrCoords,e=this.Radius();return[t[1]-e,t[2]+e,t[1]+e,t[2]-e]},getParents:function(){return this.parents.length===1?this.parents.concat(this.radius):this.parents}});jxg_default.createCircle=function(t,e,r){var s,o,a,n,l,h=!0,d=["center","point2"];if(o=[],l=t.select(e[0]),type_default.isObject(l)&&l.elementClass===constants.OBJECT_CLASS_CIRCLE&&type_default.isTransformationOrArray(e[1]))return n=type_default.copyAttributes(r,t.options,"circle"),s=jxg_default.createEllipse(t,[l.center,l.center,function(){return 2*l.Radius()}],n),s.addTransform(e[1]),s;for(a=0;a<e.length;a++)if(type_default.isPointType(t,e[a])){if(e.length<3?o.push(type_default.providePoints(t,[e[a]],r,"circle",[d[a]])[0]):o.push(type_default.providePoints(t,[e[a]],r,"point")[0]),o[o.length-1]===!1)throw new Error("JSXGraph: Can't create circle from this type. Please provide a point type.")}else o.push(e[a]);if(n=type_default.copyAttributes(r,t.options,"circle"),o.length===2&&type_default.isPoint(o[0])&&type_default.isPoint(o[1]))s=new jxg_default.Circle(t,"twoPoints",o[0],o[1],n);else if((type_default.isNumber(o[0])||type_default.isFunction(o[0])||type_default.isString(o[0]))&&type_default.isPoint(o[1]))s=new jxg_default.Circle(t,"pointRadius",o[1],o[0],n);else if((type_default.isNumber(o[1])||type_default.isFunction(o[1])||type_default.isString(o[1]))&&type_default.isPoint(o[0]))s=new jxg_default.Circle(t,"pointRadius",o[0],o[1],n);else if(o[0].elementClass===constants.OBJECT_CLASS_CIRCLE&&type_default.isPoint(o[1]))s=new jxg_default.Circle(t,"pointCircle",o[1],o[0],n);else if(o[1].elementClass===constants.OBJECT_CLASS_CIRCLE&&type_default.isPoint(o[0]))s=new jxg_default.Circle(t,"pointCircle",o[0],o[1],n);else if(o[0].elementClass===constants.OBJECT_CLASS_LINE&&type_default.isPoint(o[1]))s=new jxg_default.Circle(t,"pointLine",o[1],o[0],n);else if(o[1].elementClass===constants.OBJECT_CLASS_LINE&&type_default.isPoint(o[0]))s=new jxg_default.Circle(t,"pointLine",o[0],o[1],n);else if(e.length===3&&type_default.isPoint(o[0])&&type_default.isPoint(o[1])&&type_default.isPoint(o[2]))if(jxg_default.elements.circumcircle)s=jxg_default.elements.circumcircle(t,o,n);else throw new Error("JSXGraph: Can't create circle with three points. Please include the circumcircle element (element/composition).");else throw new Error("JSXGraph: Can't create circle with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
128
+ Possible parent types: [point,point], [point,number], [point,function], [point,circle], [point,point,point], [circle,transformation]`);for(s.isDraggable=h,s.setParents(o),s.elType="circle",a=0;a<o.length;a++)type_default.isPoint(o[a])&&s.inherits.push(o[a]);return s};jxg_default.registerElement("circle",jxg_default.createCircle);var circle_default=jxg_default.Circle;jxg_default.createEllipse=function(t,e,r){var s,o,a,n,l,h,d,u=[],c=type_default.copyAttributes(r,t.options,"conic","foci"),p=type_default.copyAttributes(r,t.options,"conic","center"),f=type_default.copyAttributes(r,t.options,"conic");for(h=0;h<2;h++)if(e[h].length>1)u[h]=t.create("point",e[h],c);else if(type_default.isPoint(e[h]))u[h]=t.select(e[h]);else if(type_default.isFunction(e[h])&&type_default.isPoint(e[h]()))u[h]=e[h]();else if(type_default.isString(e[h]))u[h]=t.select(e[h]);else throw new Error("JSXGraph: Can't create Ellipse with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
129
+ Possible parent types: [point,point,point], [point,point,number|function]`);if(type_default.isNumber(e[2]))l=type_default.createFunction(e[2],t);else if(type_default.isFunction(e[2])&&type_default.isNumber(e[2]()))l=e[2];else{if(type_default.isPoint(e[2]))n=t.select(e[2]);else if(e[2].length>1)n=t.create("point",e[2],c);else if(type_default.isFunction(e[2])&&type_default.isPoint(e[2]()))n=e[2]();else if(type_default.isString(e[2]))n=t.select(e[2]);else throw new Error("JSXGraph: Can't create Ellipse with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+`'.
130
+ Possible parent types: [point,point,point], [point,point,number|function]`);l=function(){return n.Dist(u[0])+n.Dist(u[1])}}for(type_default.exists(e[4])||(e[4]=2*Math.PI),type_default.exists(e[3])||(e[3]=0),a=t.create("point",[function(){return(u[0].X()+u[1].X())*.5},function(){return(u[0].Y()+u[1].Y())*.5}],p),o=t.create("curve",[function(_){return 0},function(_){return 0},e[3],e[4]],f),o.majorAxis=l,d=o.hasPoint,s=function(_,g){var m,b,C,y,x,v,P,E,w;g||(m=l(),b=m*m,C=u[0].X(),y=u[0].Y(),x=u[1].X(),v=u[1].Y(),P=C-x,E=y-v,w=(b-C*C-y*y+x*x+v*v)/(2*m),o.quadraticform=[[w*w-x*x-v*v,w*P/m+x,w*E/m+v],[w*P/m+x,P*P/b-1,P*E/b],[w*E/m+v,P*E/b,E*E/b-1]])},o.X=function(_,g){var m=l(),b=u[1].Dist(u[0]),C=.5*(b*b-m*m)/(b*Math.cos(_)-m),y=Math.atan2(u[1].Y()-u[0].Y(),u[1].X()-u[0].X());return g||s(_,g),u[0].X()+Math.cos(y+_)*C},o.Y=function(_,g){var m=l(),b=u[1].Dist(u[0]),C=.5*(b*b-m*m)/(b*Math.cos(_)-m),y=Math.atan2(u[1].Y()-u[0].Y(),u[1].X()-u[0].X());return u[0].Y()+Math.sin(y+_)*C},o.midpoint=o.center=a,o.type=constants.OBJECT_TYPE_CONIC,o.subs={center:o.center},o.inherits.push(o.center,u[0],u[1]),type_default.isPoint(n)&&o.inherits.push(n),o.hasPoint=function(_,g){var m,b,C,y,x;return this.evalVisProp("hasinnerpoints")?(m=u[0].coords,b=u[1].coords,C=this.majorAxis(),y=new coords_default(constants.COORDS_BY_SCREEN,[_,g],this.board),x=y.distance(constants.COORDS_BY_USER,m)+y.distance(constants.COORDS_BY_USER,b),x<=C):d.apply(this,arguments)},a.addChild(o),h=0;h<2;h++)type_default.isPoint(u[h])&&u[h].addChild(o);return type_default.isPoint(n)&&n.addChild(o),o.setParents(e),o};jxg_default.createHyperbola=function(t,e,r){var s,o,a,n,l,h,d=[],u=type_default.copyAttributes(r,t.options,"conic","foci"),c=type_default.copyAttributes(r,t.options,"conic","center"),p=type_default.copyAttributes(r,t.options,"conic");for(h=0;h<2;h++)if(e[h].length>1)d[h]=t.create("point",e[h],u);else if(type_default.isPoint(e[h]))d[h]=t.select(e[h]);else if(type_default.isFunction(e[h])&&type_default.isPoint(e[h]()))d[h]=e[h]();else if(type_default.isString(e[h]))d[h]=t.select(e[h]);else throw new Error("JSXGraph: Can't create Hyperbola with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
131
+ Possible parent types: [point,point,point], [point,point,number|function]`);if(type_default.isNumber(e[2]))l=type_default.createFunction(e[2],t);else if(type_default.isFunction(e[2])&&type_default.isNumber(e[2]()))l=e[2];else{if(type_default.isPoint(e[2]))n=t.select(e[2]);else if(e[2].length>1)n=t.create("point",e[2],u);else if(type_default.isFunction(e[2])&&type_default.isPoint(e[2]()))n=e[2]();else if(type_default.isString(e[2]))n=t.select(e[2]);else throw new Error("JSXGraph: Can't create Hyperbola with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+`'.
132
+ Possible parent types: [point,point,point], [point,point,number|function]`);l=function(){return n.Dist(d[0])-n.Dist(d[1])}}for(type_default.exists(e[4])||(e[4]=1.0001*Math.PI),type_default.exists(e[3])||(e[3]=-1.0001*Math.PI),a=t.create("point",[function(){return(d[0].X()+d[1].X())*.5},function(){return(d[0].Y()+d[1].Y())*.5}],c),o=t.create("curve",[function(f){return 0},function(f){return 0},e[3],e[4]],p),o.majorAxis=l,s=function(f,_){var g,m,b,C,y,x,v,P,E;_||(g=l(),m=g*g,b=d[0].X(),C=d[0].Y(),y=d[1].X(),x=d[1].Y(),v=b-y,P=C-x,E=(m-b*b-C*C+y*y+x*x)/(2*g),o.quadraticform=[[E*E-y*y-x*x,E*v/g+y,E*P/g+x],[E*v/g+y,v*v/m-1,v*P/m],[E*P/g+x,v*P/m,P*P/m-1]])},o.X=function(f,_){var g=l(),m=d[1].Dist(d[0]),b=.5*(m*m-g*g)/(m*Math.cos(f)+g),C=Math.atan2(d[1].Y()-d[0].Y(),d[1].X()-d[0].X());return _||s(f,_),d[0].X()+Math.cos(C+f)*b},o.Y=function(f,_){var g=l(),m=d[1].Dist(d[0]),b=.5*(m*m-g*g)/(m*Math.cos(f)+g),C=Math.atan2(d[1].Y()-d[0].Y(),d[1].X()-d[0].X());return d[0].Y()+Math.sin(C+f)*b},o.midpoint=o.center=a,o.subs={center:o.center},o.inherits.push(o.center,d[0],d[1]),type_default.isPoint(n)&&o.inherits.push(n),o.type=constants.OBJECT_TYPE_CONIC,a.addChild(o),h=0;h<2;h++)type_default.isPoint(d[h])&&d[h].addChild(o);return type_default.isPoint(n)&&n.addChild(o),o.setParents(e),o};jxg_default.createParabola=function(t,e,r){var s,o,a,n=e[0],l=e[1],h=type_default.copyAttributes(r,t.options,"conic","foci"),d=type_default.copyAttributes(r,t.options,"conic","center"),u=type_default.copyAttributes(r,t.options,"conic"),c;if(e[0].length>1)n=t.create("point",e[0],h);else if(type_default.isPoint(e[0]))n=t.select(e[0]);else if(type_default.isFunction(e[0])&&type_default.isPoint(e[0]()))n=e[0]();else if(type_default.isString(e[0]))n=t.select(e[0]);else throw new Error("JSXGraph: Can't create Parabola with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
133
+ Possible parent types: [point,line]`);return type_default.isArray(l)&&l.length===2&&(c=type_default.copyAttributes(r,t.options,"conic","line"),l=t.create("line",l,c)),type_default.exists(e[3])||(e[3]=2*Math.PI),type_default.exists(e[2])||(e[2]=0),a=t.create("point",[function(){return geometry_default.projectPointToLine(n,l,t).usrCoords}],d),o=t.create("curve",[function(p){return 0},function(p){return 0},e[2],e[3]],u),o.midpoint=o.center=a,o.subs={center:o.center},o.inherits.push(o.center),s=function(p,f){var _,g,m,b,C,y;f||(_=l.stdform[1],g=l.stdform[2],m=l.stdform[0],b=_*_+g*g,C=n.X(),y=n.Y(),o.quadraticform=[[m*m-b*(C*C+y*y),m*_+b*C,m*g+b*y],[m*_+b*C,-g*g,_*g],[m*g+b*y,_*g,-_*_]])},o.X=function(p,f){var _,g,m=l.getAngle(),b=geometry_default.distPointLine(n.coords.usrCoords,l.stdform),C=l.point1.coords.usrCoords,y=l.point2.coords.usrCoords,x=n.coords.usrCoords;return C[0]===0?C=[1,y[1]+l.stdform[2],y[2]-l.stdform[1]]:y[0]===0&&(y=[1,C[1]+l.stdform[2],C[2]-l.stdform[1]]),g=(y[1]-C[1])*(x[2]-C[2])-(y[2]-C[2])*(x[1]-C[1])>=0?1:-1,_=g*b/(1-Math.sin(p)),f||s(p,f),n.X()+Math.cos(p+m)*_},o.Y=function(p,f){var _,g,m=l.getAngle(),b=geometry_default.distPointLine(n.coords.usrCoords,l.stdform),C=l.point1.coords.usrCoords,y=l.point2.coords.usrCoords,x=n.coords.usrCoords;return C[0]===0?C=[1,y[1]+l.stdform[2],y[2]-l.stdform[1]]:y[0]===0&&(y=[1,C[1]+l.stdform[2],C[2]-l.stdform[1]]),g=(y[1]-C[1])*(x[2]-C[2])-(y[2]-C[2])*(x[1]-C[1])>=0?1:-1,_=g*b/(1-Math.sin(p)),n.Y()+Math.sin(p+m)*_},o.type=constants.OBJECT_TYPE_CONIC,a.addChild(o),type_default.isPoint(n)&&(n.addChild(o),o.inherits.push(n)),l.addChild(o),o.setParents(e),o};jxg_default.createConic=function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f,_,g,m,b=[[1,0,0],[0,1,0],[0,0,1]],C=[[1,0,0],[0,1,0],[0,0,1]],y=[],x=[],v=type_default.copyAttributes(r,t.options,"conic","point"),P=type_default.copyAttributes(r,t.options,"conic","center"),E=type_default.copyAttributes(r,t.options,"conic");if(e.length===5)m=!0;else if(e.length===6)m=!1;else throw new Error("JSXGraph: Can't create generic Conic with "+e.length+" parameters.");if(m)for(_=0;_<5;_++)if(e[_].length>1)y[_]=t.create("point",e[_],v);else if(type_default.isPoint(e[_]))y[_]=t.select(e[_]);else if(type_default.isFunction(e[_])&&type_default.isPoint(e[_]()))y[_]=e[_]();else if(type_default.isString(e[_]))y[_]=t.select(e[_]);else throw new Error("JSXGraph: Can't create Conic section with parent types '"+typeof e[_]+`'.
134
+ Possible parent types: [point,point,point,point,point], [a00,a11,a22,a01,a02,a12]`);else g=[[0,0,0],[0,0,0],[0,0,0]],g[0][0]=type_default.isFunction(e[2])?function(){return e[2]()}:function(){return e[2]},g[0][1]=type_default.isFunction(e[4])?function(){return e[4]()}:function(){return e[4]},g[0][2]=type_default.isFunction(e[5])?function(){return e[5]()}:function(){return e[5]},g[1][1]=type_default.isFunction(e[0])?function(){return e[0]()}:function(){return e[0]},g[1][2]=type_default.isFunction(e[3])?function(){return e[3]()}:function(){return e[3]},g[2][2]=type_default.isFunction(e[1])?function(){return e[1]()}:function(){return e[1]};if(l=function(w){for(var O=0,S;O<3;O++)for(S=O;S<3;S++)w[O][S]+=w[S][O];for(O=0;O<3;O++)for(S=0;S<O;S++)w[O][S]=w[S][O];return w},n=function(w,O){var S,M,N=[[0,0,0],[0,0,0],[0,0,0]];for(S=0;S<3;S++)for(M=0;M<3;M++)N[S][M]=w[S]*O[M];return l(N)},a=function(w,O,S){var M,N,j,k,B,I=[[0,0,0],[0,0,0],[0,0,0]];for(B=math_default.matVecMult(O,S),j=math_default.innerProduct(S,B),B=math_default.matVecMult(w,S),k=math_default.innerProduct(S,B),M=0;M<3;M++)for(N=0;N<3;N++)I[M][N]=j*w[M][N]-k*O[M][N];return I},o=t.create("curve",[function(w){return 0},function(w){return 0},0,2*Math.PI],E),s=function(w,O){var S,M,N;if(!O){if(m){for(S=0;S<5;S++)x[S]=y[S].coords.usrCoords;p=n(math_default.crossProduct(x[0],x[1]),math_default.crossProduct(x[2],x[3])),f=n(math_default.crossProduct(x[0],x[2]),math_default.crossProduct(x[1],x[3])),C=a(p,f,x[4])}else for(S=0;S<3;S++)for(M=S;M<3;M++)C[S][M]=g[S][M](),M>S&&(C[M][S]=C[S][M]);o.quadraticform=C,h=numerics_default.Jacobi(C),h[0][0][0]<0&&(h[0][0][0]*=-1,h[0][1][1]*=-1,h[0][2][2]*=-1),b=h[1],c=Math.sqrt(Math.abs(h[0][0][0])),d=Math.sqrt(Math.abs(h[0][1][1])),u=Math.sqrt(Math.abs(h[0][2][2]))}return h[0][1][1]<=0&&h[0][2][2]<=0?N=math_default.matVecMult(b,[1/c,Math.cos(w)/d,Math.sin(w)/u]):h[0][1][1]<=0&&h[0][2][2]>0?N=math_default.matVecMult(b,[Math.cos(w)/c,1/d,Math.sin(w)/u]):h[0][2][2]<0&&(N=math_default.matVecMult(b,[Math.sin(w)/c,Math.cos(w)/d,1/u])),type_default.exists(N)?(N[1]/=N[0],N[2]/=N[0],N[0]=1):N=[1,NaN,NaN],N},o.X=function(w,O){return s(w,O)[1]},o.Y=function(w,O){return s(w,O)[2]},o.midpoint=t.create("point",[function(){var w=o.quadraticform;return[w[1][1]*w[2][2]-w[1][2]*w[1][2],w[1][2]*w[0][2]-w[2][2]*w[0][1],w[0][1]*w[1][2]-w[1][1]*w[0][2]]}],P),o.type=constants.OBJECT_TYPE_CONIC,o.center=o.midpoint,o.subs={center:o.center},o.inherits.push(o.center),o.inherits=o.inherits.concat(y),m){for(_=0;_<5;_++)type_default.isPoint(y[_])&&y[_].addChild(o);o.setParents(e)}return o.addChild(o.center),o};jxg_default.registerElement("ellipse",jxg_default.createEllipse);jxg_default.registerElement("hyperbola",jxg_default.createHyperbola);jxg_default.registerElement("parabola",jxg_default.createParabola);jxg_default.registerElement("conic",jxg_default.createConic);jxg_default.Polygon=function(t,e,r){this.constructor(t,r,constants.OBJECT_TYPE_POLYGON,constants.OBJECT_CLASS_AREA);var s,o,a,n,l,h=type_default.copyAttributes(r,t.options,"polygon","borders");for(this.withLines=r.withlines,this.attr_line=h,this.vertices=[],s=0;s<e.length;s++)this.vertices[s]=this.board.select(e[s]),this.vertices[s]._is_new&&(delete this.vertices[s]._is_new,this.vertices[s]._is_new_pol=!0);if(this.vertices.length>0&&this.vertices[this.vertices.length-1].id!==this.vertices[0].id&&this.vertices.push(this.vertices[0]),this.borders=[],this.withLines)for(a=this.vertices.length-1,n=0;n<a;n++)s=(n+1)%a,h.id=h.ids&&h.ids[s],h.name=h.names&&h.names[s],type_default.isArray(h.colors)&&h.colors.length>0&&(h.strokecolor=h.colors[s%h.colors.length]),h.visible=type_default.exists(r.borders.visible)?r.borders.visible:r.visible,h.strokecolor===!1&&(h.strokecolor="none"),o=t.create("segment",[this.vertices[s],this.vertices[s+1]],h),o.dump=!1,this.borders[s]=o,o.parentPolygon=this,this.addChild(o);for(this.inherits.push(this.vertices,this.borders),this.id=this.board.setId(this,"Py"),s=0;s<this.vertices.length-1;s++)l=this.board.select(this.vertices[s]),type_default.exists(l._is_new_pol)?(this.addChild(l),delete l._is_new_pol):l.addChild(this);this.board.renderer.drawPolygon(this),this.board.finalizeAdding(this),this.createGradient(),this.elType="polygon",this.createLabel()};jxg_default.Polygon.prototype=new element_default;type_default.copyMethodMap(jxg_default.Polygon,{borders:"borders",vertices:"vertices",A:"Area",Area:"Area",Perimeter:"Perimeter",L:"Perimeter",boundingBox:"bounds",BoundingBox:"bounds",addPoints:"addPoints",insertPoints:"insertPoints",removePoints:"removePoints",Intersect:"intersect"});jxg_default.extend(jxg_default.Polygon.prototype,{pnpoly:function(t,e,r){return geometry_default.pnpoly(t,e,this.vertices,r,this.board)},hasPoint:function(t,e){var r,s;if(this.evalVisProp("hasinnerpoints")&&this.pnpoly(t,e))return!0;for(s=this.borders.length,r=0;r<s;r++)if(this.borders[r].hasPoint(t,e))return!0;return!1},updateRenderer:function(){var t,e;if(!this.needsUpdate)return this;if(this.visPropCalc.visible){for(e=this.vertices.length-(this.elType==="polygonalchain"?0:1),this.isReal=!0,t=0;t<e;++t)if(!this.vertices[t].isReal){this.isReal=!1;break}if(!this.isReal){this.updateVisibility(!1);for(t in this.childElements)this.childElements.hasOwnProperty(t)&&this.childElements[t].setDisplayRendNode(!1)}}return this.visPropCalc.visible&&this.board.renderer.updatePolygon(this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this},getTextAnchor:function(){var t,e,r,s,o;if(this.vertices.length===0)return new coords_default(constants.COORDS_BY_USER,[1,0,0],this.board);for(t=this.vertices[0].X(),e=this.vertices[0].Y(),r=t,s=e,o=0;o<this.vertices.length;o++)this.vertices[o].X()<t&&(t=this.vertices[o].X()),this.vertices[o].X()>r&&(r=this.vertices[o].X()),this.vertices[o].Y()>e&&(e=this.vertices[o].Y()),this.vertices[o].Y()<s&&(s=this.vertices[o].Y());return new coords_default(constants.COORDS_BY_USER,[(t+r)*.5,(e+s)*.5],this.board)},getLabelAnchor:jxg_default.shortcut(jxg_default.Polygon.prototype,"getTextAnchor"),cloneToBackground:function(){var t,e=type_default.getCloneObject(this);return e.vertices=this.vertices,t=this.board.renderer.enhancedRendering,this.board.renderer.enhancedRendering=!0,this.board.renderer.drawPolygon(e),this.board.renderer.enhancedRendering=t,this.traces[e.id]=e.rendNode,this},hideElement:function(t){var e;if(jxg_default.deprecated("Element.hideElement()","Element.setDisplayRendNode()"),this.visPropCalc.visible=!1,this.board.renderer.display(this,!1),!t)for(e=0;e<this.borders.length;e++)this.borders[e].hideElement();this.hasLabel&&type_default.exists(this.label)&&(this.label.hiddenByParent=!0,this.label.visPropCalc.visible&&this.label.hideElement())},showElement:function(t){var e;if(jxg_default.deprecated("Element.showElement()","Element.setDisplayRendNode()"),this.visPropCalc.visible=!0,this.board.renderer.display(this,!0),!t)for(e=0;e<this.borders.length;e++)this.borders[e].showElement().updateRenderer();return type_default.exists(this.label)&&this.hasLabel&&this.label.hiddenByParent&&(this.label.hiddenByParent=!1,this.label.visPropCalc.visible||this.label.showElement().updateRenderer()),this},Area:function(){return Math.abs(geometry_default.signedPolygon(this.vertices,!0))},Perimeter:function(){var t,e=this.vertices.length,r=0;for(t=1;t<e;++t)r+=this.vertices[t].Dist(this.vertices[t-1]);return r},L:function(){return this.Perimeter()},boundingBox:function(){var t=[0,0,0,0],e,r,s=this.vertices.length-1;if(s===0)return t;for(t[0]=this.vertices[0].X(),t[2]=t[0],t[1]=this.vertices[0].Y(),t[3]=t[1],e=1;e<s;++e)r=this.vertices[e].X(),r<t[0]?t[0]=r:r>t[2]&&(t[2]=r),r=this.vertices[e].Y(),r>t[1]?t[1]=r:r<t[3]&&(t[3]=r);return t},bounds:function(){return this.boundingBox()},remove:function(){for(var t=0;t<this.borders.length;t++)this.board.removeObject(this.borders[t]);element_default.prototype.remove.call(this)},findPoint:function(t){var e;if(!type_default.isPoint(t))return-1;for(e=0;e<this.vertices.length;e++)if(this.vertices[e].id===t.id)return e;return-1},addPoints:function(t){var e,r=Array.prototype.slice.call(arguments);return this.elType==="polygonalchain"?e=this.vertices.length-1:e=this.vertices.length-2,this.insertPoints.apply(this,[e].concat(r))},insertPoints:function(t,e){var r,s,o,a,n;if(arguments.length===0)return this;if(o=this.vertices.length-1,this.elType==="polygon"&&o--,t<-1||t>o)return this;for(s=arguments.length-1,r=1;r<s+1;r++)n=type_default.providePoints(this.board,[arguments[r]],{},"polygon",["vertices"])[0],n._is_new&&(this.addChild(n),delete n._is_new),this.vertices.splice(t+r,0,n);if(this.withLines)for(a=t+1,this.elType==="polygon"?t<0?(this.vertices[this.vertices.length-1]=this.vertices[0],this.borders[this.borders.length-1].point2=this.vertices[this.vertices.length-1]):this.borders[t].point2=this.vertices[a]:t>=0&&(t<this.borders.length?this.borders[t].point2=this.vertices[a]:a=t),r=a;r<a+s;r++)this.borders.splice(r,0,this.board.create("segment",[this.vertices[r],this.vertices[r+1]],this.attr_line));return this.inherits=[],this.inherits.push(this.vertices,this.borders),this.board.update(),this},removePoints:function(t){var e,r,s,o,a=[],n=[],l=[],h=[];for(this.elType==="polygon"&&(o=this.vertices.pop()),e=0;e<arguments.length;e++)s=arguments[e],type_default.isPoint(s)&&(s=this.findPoint(s)),type_default.isNumber(s)&&s>-1&&s<this.vertices.length&&type_default.indexOf(l,s)===-1&&l.push(s);if(l.length===0)return this.elType==="polygon"&&this.vertices.push(o),this;for(e=0;e<l.length;e++)this.vertices[l[e]].removeChild(this);for(l=l.sort(),a=this.vertices.slice(),n=this.borders.slice(),this.withLines&&h.push([l[l.length-1]]),e=l.length-1;e>-1;e--)a[l[e]]=-1,this.withLines&&l.length>1&&l[e]-1>l[e-1]&&(h[h.length-1][1]=l[e],h.push([l[e-1]]));for(this.withLines&&(h[h.length-1][1]=l[0]),this.vertices=[],e=0;e<a.length;e++)type_default.isPoint(a[e])&&this.vertices.push(a[e]);if(this.elType==="polygon"&&this.vertices.length>1&&this.vertices[this.vertices.length-1].id!==this.vertices[0].id&&this.vertices.push(this.vertices[0]),this.withLines){for(e=0;e<h.length;e++){for(r=h[e][1]-1;r<h[e][0]+1;r++)r<0?this.elType==="polygon"&&(this.board.removeObject(this.borders[n.length-1]),n[n.length-1]=-1):r<n.length&&(this.board.removeObject(this.borders[r]),n[r]=-1);h[e][1]!==0&&h[e][0]!==a.length-1&&(n[h[e][0]-1]=this.board.create("segment",[a[h[e][1]-1],a[h[e][0]+1]],this.attr_line))}for(this.borders=[],e=0;e<n.length;e++)n[e]!==-1&&this.borders.push(n[e]);this.elType==="polygon"&&this.vertices.length>2&&(h[0][1]===this.vertices.length-1||h[h.length-1][1]===0)&&this.borders.push(this.board.create("segment",[this.vertices[this.vertices.length-2],this.vertices[0]],this.attr_line))}return this.inherits=[],this.inherits.push(this.vertices,this.borders),this.board.update(),this},getParents:function(){return this.setParents(this.vertices),this.parents},getAttributes:function(){var t=element_default.prototype.getAttributes.call(this),e;if(this.withLines)for(t.lines=t.lines||{},t.lines.ids=[],t.lines.colors=[],e=0;e<this.borders.length;e++)t.lines.ids.push(this.borders[e].id),t.lines.colors.push(this.borders[e].visProp.strokecolor);return t},snapToGrid:function(){var t,e;for(this.evalVisProp("snaptogrid")?e=!0:e=!1,t=0;t<this.vertices.length;t++)this.vertices[t].handleSnapToGrid(e,!0)},setPositionDirectly:function(t,e,r){var s,o,a,n,l=new coords_default(t,e,this.board),h=new coords_default(t,r,this.board);for(n=this.vertices.length-1,a=0;a<n;a++)if(!this.vertices[a].draggable())return this;return s=statistics_default.subtract(l.usrCoords,h.usrCoords),o=this.board.create("transform",s.slice(1),{type:"translate"}),o.applyOnce(this.vertices.slice(0,-1)),this},sutherlandHodgman:function(t){var e=jxg_default.Math.Geometry.sortVertices(this.vertices),r=jxg_default.Math.Geometry.sortVertices(t.vertices),s=e.length-1,o=r.length-1,a,n=[],l,h,d,u,c,p,f=function(_,g,m){return(g[1]-_[1])*(m[2]-_[2])-(g[2]-_[2])*(m[1]-_[1])>=0};for(h=0;h<o;h++)n.push(r[h]);for(h=0;h<s;h++)for(l=n.slice(0),a=l.length,n=[],u=l[a-1],d=0;d<a;d++)c=l[d],f(e[h],e[h+1],c)?(f(e[h],e[h+1],u)||(p=jxg_default.Math.Geometry.meetSegmentSegment(u,c,e[h],e[h+1]),p[0][1]/=p[0][0],p[0][2]/=p[0][0],p[0][0]=1,n.push(p[0])),n.push(c)):f(e[h],e[h+1],u)&&(p=jxg_default.Math.Geometry.meetSegmentSegment(u,c,e[h],e[h+1]),p[0][1]/=p[0][0],p[0][2]/=p[0][0],p[0][0]=1,n.push(p[0])),u=c;return n},intersect:function(t){return this.sutherlandHodgman(t)}});jxg_default.createPolygon=function(t,e,r){var s,o,a,n,l=[],h,d,u=!1;if(h=type_default.copyAttributes(r,t.options,"polygon"),n=t.select(e[0]),n===null&&(n=e[0]),type_default.isObject(n)&&n.type===constants.OBJECT_TYPE_POLYGON&&type_default.isTransformationOrArray(e[1]))for(u=!0,a=n.vertices.length-1,d=type_default.copyAttributes(r,t.options,"polygon","vertices"),o=0;o<a;o++)d.withlabel&&(d.name=n.vertices[o].name===""?"":n.vertices[o].name+"'"),l.push(t.create("point",[n.vertices[o],e[1]],d));else if(l=type_default.providePoints(t,e,r,"polygon",["vertices"]),l===!1)throw new Error("JSXGraph: Can't create polygon / polygonalchain with parent types other than 'point' and 'coordinate arrays' or a function returning an array of coordinates. Alternatively, a polygon and a transformation can be supplied");if(h=type_default.copyAttributes(r,t.options,"polygon"),s=new jxg_default.Polygon(t,l,h),s.isDraggable=!0,u)for(s.prepareUpdate().update().updateVisibility().updateRenderer(),a=n.vertices.length-1,o=0;o<a;o++)l[o].prepareUpdate().update().updateVisibility().updateRenderer();return s};jxg_default.createRegularPolygon=function(t,e,r){var s,o,a,n=[],l,h=e.length,d,u;if(a=e[h-1],type_default.isNumber(a)&&(e.length!==3||a<3))throw new Error("JSXGraph: A regular polygon needs two point types and a number > 2 as input.");if(type_default.isNumber(t.select(a))?(h--,d=!1):(a=h,d=!0),n=type_default.providePoints(t,e.slice(0,h),r,"regularpolygon",["vertices"]),n===!1)throw new Error("JSXGraph: Can't create regular polygon with parent types other than 'point' and 'coordinate arrays' or a function returning an array of coordinates");for(u=type_default.copyAttributes(r,t.options,"regularpolygon","vertices"),o=2;o<a;o++)l=t.create("transform",[Math.PI*(2-(a-2)/a),n[o-1]],{type:"rotate"}),d?(n[o].addTransform(n[o-2],l),n[o].fullUpdate()):(type_default.isArray(u.ids)&&u.ids.length>=a-2&&(u.id=u.ids[o-2]),n[o]=t.create("point",[n[o-2],l],u),n[o].type=constants.OBJECT_TYPE_CAS,n[o].isDraggable=!0,n[o].visProp.fixed=!1);return u=type_default.copyAttributes(r,t.options,"regularpolygon"),s=t.create("polygon",n,u),s.elType="regularpolygon",s};jxg_default.createPolygonalChain=function(t,e,r){var s=type_default.copyAttributes(r,t.options,"polygonalchain"),o=t.create("polygon",e,s);return o.elType="polygonalchain",o.vertices.pop(),t.removeObject(o.borders[o.borders.length-1]),o.borders.pop(),o};jxg_default.createParallelogram=function(t,e,r){var s,o,a=[],n,l;if(a=type_default.providePoints(t,e,r,"polygon",["vertices"]),a===!1||a.length<3)throw new Error("JSXGraph: Can't create parallelogram with parent types other than 'point' and 'coordinate arrays' or a function returning an array of coordinates.");return l=type_default.copyAttributes(r,t.options,"parallelogram","parallelpoint"),o=t.create("parallelpoint",a,l),n=type_default.copyAttributes(r,t.options,"parallelogram"),s=t.create("polygon",[a[0],a[1],o,a[2]],n),s.elType="parallelogram",s.parallelPoint=o,s.isDraggable=!0,o.isDraggable=!0,o.visProp.fixed=!1,s};jxg_default.registerElement("polygon",jxg_default.createPolygon);jxg_default.registerElement("regularpolygon",jxg_default.createRegularPolygon);jxg_default.registerElement("polygonalchain",jxg_default.createPolygonalChain);jxg_default.registerElement("parallelogram",jxg_default.createParallelogram);var polygon_default=jxg_default.Polygon;jxg_default.Curve=function(t,e,r){this.constructor(t,r,constants.OBJECT_TYPE_CURVE,constants.OBJECT_CLASS_CURVE),this.points=[],this.numberPoints=this.evalVisProp("numberpointshigh"),this.bezierDegree=1,this.dataX=null,this.dataY=null,this.ticks=[],this.qdt=null,type_default.exists(e[0])?this.varname=e[0]:this.varname="x",this.xterm=e[1],this.yterm=e[2],this.generateTerm(this.varname,this.xterm,this.yterm,e[3],e[4]),this.updateCurve(),this.id=this.board.setId(this,"G"),this.board.renderer.drawCurve(this),this.board.finalizeAdding(this),this.createGradient(),this.elType="curve",this.createLabel(),type_default.isString(this.xterm)&&this.notifyParents(this.xterm),type_default.isString(this.yterm)&&this.notifyParents(this.yterm)};jxg_default.Curve.prototype=new element_default;type_default.copyMethodMap(jxg_default.Curve,{generateTerm:"generateTerm",setTerm:"generateTerm",move:"moveTo",moveTo:"moveTo",MinX:"minX",MaxX:"maxX"});jxg_default.extend(jxg_default.Curve.prototype,{minX:function(){var t;return this.evalVisProp("curvetype")==="polar"?0:(t=new coords_default(constants.COORDS_BY_SCREEN,[-this.board.canvasWidth*.1,0],this.board,!1),t.usrCoords[1])},maxX:function(){var t;return this.evalVisProp("curvetype")==="polar"?2*Math.PI:(t=new coords_default(constants.COORDS_BY_SCREEN,[this.board.canvasWidth*1.1,0],this.board,!1),t.usrCoords[1])},X:function(t){return NaN},Y:function(t){return NaN},Z:function(t){return 1},Ft:function(t){var e=[this.Z(t),this.X(t),this.Y(t)];return this.transformations.length>0&&(e=math_default.matVecMult(this.transformMat,e)),e[1]/=e[0],e[2]/=e[0],e[0]/=e[0],e},hasPoint:function(t,e,r){var s,o,a,n,l,h,d,u,c,p=[],f,_,g=this.evalVisProp("numberpointslow"),m=(this.maxX()-this.minX())/g,b,C,y=1/0,x,v,P,E,w,O=!0;if(type_default.isObject(this.evalVisProp("precision"))?(C=this.board._inputDevice,b=this.evalVisProp("precision."+C)):b=this.board.options.precision.hasPoint,h=new coords_default(constants.COORDS_BY_SCREEN,[t,e],this.board,!1),t=h.usrCoords[1],e=h.usrCoords[2],this.bezierDegree===1&&this.evalVisProp("hasinnerpoints")&&(c=geometry_default.windingNumber([1,t,e],this.points,!0),c!==0))return!0;if(b+=this.evalVisProp("strokewidth")*.5,b*=b,x=this.board.unitX*this.board.unitX,v=this.board.unitY*this.board.unitY,E=this.minX(),w=this.maxX(),type_default.exists(this._visibleArea)&&(E=this._visibleArea[0],w=this._visibleArea[1],m=(w-E)/g),P=this.evalVisProp("curvetype"),P==="parameter"||P==="polar")for(this.transformations.length>0&&(this.updateTransformMatrix(),u=math_default.inverse(this.transformMat),o=math_default.matVecMult(u,[1,t,e]),t=o[1],e=o[2]),a=0,s=E;a<g;a++){if(n=this.X(s,O),l=this.Y(s,O),y=(t-n)*(t-n)*x+(e-l)*(e-l)*v,y<=b)return!0;s+=m}else if(P==="plot"||P==="functiongraph"){for((!type_default.exists(r)||r<0)&&(r=0),type_default.exists(this.qdt)&&this.evalVisProp("useqdt")&&this.bezierDegree!==3?(_=this.qdt.query(new coords_default(constants.COORDS_BY_USER,[t,e],this.board)),f=_.points,d=f.length):(f=this.points,d=this.numberPoints-1),a=r;a<d;a++)if(this.bezierDegree===3?p=geometry_default.projectCoordsToBeziersegment([1,t,e],this,a):_?(f[a].prev&&(p=geometry_default.projectCoordsToSegment([1,t,e],f[a].prev.usrCoords,f[a].usrCoords)),f[a].next&&f[a+1]!==f[a].next&&(p=geometry_default.projectCoordsToSegment([1,t,e],f[a].usrCoords,f[a].next.usrCoords))):p=geometry_default.projectCoordsToSegment([1,t,e],f[a].usrCoords,f[a+1].usrCoords),p[1]>=0&&p[1]<=1&&(t-p[0][1])*(t-p[0][1])*x+(e-p[0][2])*(e-p[0][2])*v<=b)return!0;return!1}return y<b},allocatePoints:function(){var t,e=this.numberPoints;if(this.points.length<this.numberPoints)for(t=this.points.length;t<e;t++)this.points[t]=new coords_default(constants.COORDS_BY_USER,[0,0],this.board,!1)},update:function(){return this.needsUpdate&&(this.evalVisProp("trace")&&this.cloneToBackground(!0),this.updateCurve()),this},updateRenderer:function(){return this.needsUpdate?(this.visPropCalc.visible&&(this.isReal=plot_default.checkReal(this.points),this.isReal||this.updateVisibility(!1)),this.visPropCalc.visible&&this.board.renderer.updateCurve(this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},updateDataArray:function(){},updateCurve:function(){var t,e,r,s,o,a,n,l,h=this.visProp.plotversion,d=!1;if(this.updateTransformMatrix(),this.updateDataArray(),r=this.minX(),s=this.maxX(),type_default.exists(this.dataX))for(this.numberPoints=this.dataX.length,e=this.numberPoints,this.allocatePoints(),t=0;t<e;t++)o=t,type_default.exists(this.dataY)?(a=t,this.points[t].setCoordinates(constants.COORDS_BY_USER,[this.dataX[t],this.dataY[t]],!1)):(a=this.X(o),this.points[t].setCoordinates(constants.COORDS_BY_USER,[this.dataX[t],this.Y(a,d)],!1)),this.points[t]._t=t,d=!0;else if(this.evalVisProp("doadvancedplot")?h===1||this.evalVisProp("doadvancedplotold")?plot_default.updateParametricCurveOld(this,r,s):h===2?plot_default.updateParametricCurve_v2(this,r,s):h===3?plot_default.updateParametricCurve_v3(this,r,s):h===4?plot_default.updateParametricCurve_v4(this,r,s):plot_default.updateParametricCurve_v2(this,r,s):(this.board.updateQuality===this.board.BOARD_QUALITY_HIGH?this.numberPoints=this.evalVisProp("numberpointshigh"):this.numberPoints=this.evalVisProp("numberpointslow"),this.allocatePoints(),plot_default.updateParametricCurveNaive(this,r,s,this.numberPoints)),e=this.numberPoints,this.evalVisProp("useqdt")&&this.board.updateQuality===this.board.BOARD_QUALITY_HIGH)for(this.qdt=new qdt_default(this.board.getBoundingBox()),t=0;t<this.points.length;t++)this.qdt.insert(this.points[t]),t>0&&(this.points[t].prev=this.points[t-1]),t<e-1&&(this.points[t].next=this.points[t+1]);for(this.bezierDegree===1&&this.evalVisProp("rdpsmoothing")&&(n=this.board.getBoundingBox(),l=this.evalVisProp("rdpthreshold")*Math.sqrt((n[2]-n[0])*(n[1]-n[3]))*.00125,this.points=numerics_default.RamerDouglasPeucker(this.points,l,!0),this.numberPoints=this.points.length),e=this.numberPoints,t=0;t<e;t++)this.updateTransform(this.points[t]);return this},updateTransformMatrix:function(){var t,e,r=this.transformations.length;for(this.transformMat=[[1,0,0],[0,1,0],[0,0,1]],e=0;e<r;e++)t=this.transformations[e],t.update(),this.transformMat=math_default.matMatMult(t.matrix,this.transformMat);return this},updateTransform:function(t){var e;return this.transformations.length>0&&(e=math_default.matVecMult(this.transformMat,t.usrCoords),t.setCoordinates(constants.COORDS_BY_USER,e,!1,!0)),t},addTransform:function(t){var e,r=type_default.isArray(t)?t:[t],s=r.length;for(e=0;e<s;e++)this.transformations.push(r[e]);return this},removeTransform:function(t){var e,r=type_default.isArray(t)?t:[t],s=r.length;for(e=0;e<s;e++)type_default.removeElementFromArray(this.transformations,r[e]);return this},clearTransforms:function(){return this.transformations=[],this},interpolationFunctionFromArray:function(t){var e="data"+t,r=this;return function(s,o){var a,n,l,h,d=r[e],u=d.length,c,p=[];if(isNaN(s))return NaN;if(s<0)return type_default.isFunction(d[0])?d[0]():d[0];if(r.bezierDegree===3){if(c=(u-1)/3,s>=c)return type_default.isFunction(d[d.length-1])?d[d.length-1]():d[d.length-1];for(a=Math.floor(s)*3,l=s%1,h=1-l,n=0;n<4;n++)type_default.isFunction(d[a+n])?p[n]=d[a+n]():p[n]=d[a+n];return h*h*(h*p[0]+3*l*p[1])+(3*h*p[2]+l*p[3])*l*l}if(s>u-2?a=u-2:a=parseInt(Math.floor(s),10),a===s)return type_default.isFunction(d[a])?d[a]():d[a];for(n=0;n<2;n++)type_default.isFunction(d[a+n])?p[n]=d[a+n]():p[n]=d[a+n];return p[0]+(p[1]-p[0])*(s-a)}},generateTerm:function(t,e,r,s,o){var a,n,l,h;type_default.isArray(e)?(this.dataX=e,this.numberPoints=this.dataX.length,this.X=this.interpolationFunctionFromArray.apply(this,["X"]),this.visProp.curvetype="plot",this.isDraggable=!0):(this.X=type_default.createFunction(e,this.board,t),type_default.isString(e)?this.visProp.curvetype="functiongraph":(type_default.isFunction(e)||type_default.isNumber(e))&&(this.visProp.curvetype="parameter"),this.isDraggable=!0),type_default.isArray(r)?(this.dataY=r,this.Y=this.interpolationFunctionFromArray.apply(this,["Y"])):type_default.exists(r)?this.Y=type_default.createFunction(r,this.board,t):(l=math_default.transpose(e),h=l.length>2?1:0,this.dataX=l[h],this.dataY=l[h+1],this.numberPoints=this.dataX.length,this.Y=this.interpolationFunctionFromArray.apply(this,["Y"])),type_default.isFunction(e)&&type_default.isArray(r)&&(a=type_default.createFunction(r[0],this.board,""),n=type_default.createFunction(r[1],this.board,""),this.X=function(d){return e(d)*Math.cos(d)+a()},this.X.deps=a.deps,this.Y=function(d){return e(d)*Math.sin(d)+n()},this.Y.deps=n.deps,this.visProp.curvetype="polar"),type_default.exists(s)?this.minX=type_default.createFunction(s,this.board,""):delete this.minX,type_default.exists(o)?this.maxX=type_default.createFunction(o,this.board,""):delete this.maxX,this.addParentsFromJCFunctions([this.X,this.Y,this.minX,this.maxX])},notifyParents:function(t){var e,r,s=!1,o={xterm:1,yterm:1};for(e in o)if(o.hasOwnProperty(e)&&this.hasOwnProperty(e)&&this[e].origin){s=!0;for(r in this[e].origin.deps)this[e].origin.deps.hasOwnProperty(r)&&this[e].origin.deps[r].addChild(this)}s||geonext_default.findDependencies(this,t,this.board)},getLabelPosition:function(t,e){var r,s,o,a,n,l,h,d,u,c,p,f,_,g,m,b,C,y=1.5;return f=this.minX(),_=this.maxX(),g=numerics_default.findDomain(this.X,[f,_],null,!1),g=numerics_default.findDomain(this.Y,g,null,!1),f=Math.max(g[0],g[0]),_=Math.min(g[1],g[1]),o=type_default.parsePosition(t),p=type_default.parseNumber(o.pos,_-f,1),o.pos.indexOf("fr")<0&&o.pos.indexOf("%")<0&&(p=0),m=f+p,h=this.Ft(m),r=h[1],s=h[2],isNaN(r+s)&&(p/=_-f,m=f+p,c=this.Ft(f),u=this.Ft(_),r=c[1]+p*(u[1]-c[1]),s=c[2]+p*(u[2]-c[2])),a=new coords_default(constants.COORDS_BY_USER,[r,s],this.board).scrCoords,l=math_default.eps,m<f+l?(d=this.Ft(m+l),b=(d[1]-h[1])/l,C=(d[2]-h[2])/l):m>_-l?(d=this.Ft(m-l),b=(h[1]-d[1])/l,C=(h[2]-d[2])/l):(d=this.Ft(m+l),h=this.Ft(m-l),b=.5*(d[1]-h[1])/l,C=.5*(d[2]-h[2])/l),b=isNaN(b)?1:b,C=isNaN(C)?1:C,n=math_default.hypot(b,C),o.side==="left"?C*=-1:b*=-1,type_default.exists(this.label)&&(y=.5*e/n),r=a[1]+C*this.label.size[0]*y,s=a[2]-b*this.label.size[1]*y,new coords_default(constants.COORDS_BY_SCREEN,[r,s],this.board)},getLabelAnchor:function(){var t,e,r,s,o=.1,a=.9,n=o*this.board.canvasWidth,l=o*this.board.canvasHeight,h=a*this.board.canvasWidth,d=a*this.board.canvasHeight;if(!type_default.exists(this.label))return new coords_default(constants.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(r=this.label.evalVisProp("position"),!type_default.isString(r))return new coords_default(constants.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(r.indexOf("right")<0&&r.indexOf("left")<0)switch(this.evalVisProp("label.position")){case"ulft":t=n,e=l;break;case"llft":t=n,e=d;break;case"rt":t=h,e=.5*d;break;case"lrt":t=h,e=d;break;case"urt":t=h,e=l;break;case"top":t=.5*h,e=l;break;case"bot":t=.5*h,e=d;break;default:t=n,e=.5*d}else return this.getLabelPosition(r,this.label.evalVisProp("distance"));return s=new coords_default(constants.COORDS_BY_SCREEN,[t,e],this.board,!1),geometry_default.projectCoordsToCurve(s.usrCoords[1],s.usrCoords[2],0,this,this.board)[0]},cloneToBackground:function(){var t,e=type_default.getCloneObject(this);return e.points=this.points.slice(0),e.bezierDegree=this.bezierDegree,e.numberPoints=this.numberPoints,t=this.board.renderer.enhancedRendering,this.board.renderer.enhancedRendering=!0,this.board.renderer.drawCurve(e),this.board.renderer.enhancedRendering=t,this.traces[e.id]=e.rendNode,this},bounds:function(){var t=1/0,e=-1/0,r=1/0,s=-1/0,o=this.points.length,a,n,l;if(this.bezierDegree===3){for(a=0;a<o;a++)this.points[a].X=type_default.bind(function(){return this.usrCoords[1]},this.points[a]),this.points[a].Y=type_default.bind(function(){return this.usrCoords[2]},this.points[a]);return n=numerics_default.bezier(this.points),l=n[3](),t=numerics_default.fminbr(function(h){return n[0](h)},[0,l]),e=numerics_default.fminbr(function(h){return-n[0](h)},[0,l]),r=numerics_default.fminbr(function(h){return n[1](h)},[0,l]),s=numerics_default.fminbr(function(h){return-n[1](h)},[0,l]),t=n[0](t),e=n[0](e),r=n[1](r),s=n[1](s),[t,s,e,r]}for(a=0;a<o;a++)t>this.points[a].usrCoords[1]&&(t=this.points[a].usrCoords[1]),e<this.points[a].usrCoords[1]&&(e=this.points[a].usrCoords[1]),r>this.points[a].usrCoords[2]&&(r=this.points[a].usrCoords[2]),s<this.points[a].usrCoords[2]&&(s=this.points[a].usrCoords[2]);return[t,s,e,r]},getParents:function(){var t=[this.xterm,this.yterm,this.minX(),this.maxX()];return this.parents.length!==0&&(t=this.parents),t},moveTo:function(t){var e=[],r;return this.points.length>0&&!this.evalVisProp("fixed")?(r=this.points[0],t.length===3?e=[t[0]-r.usrCoords[0],t[1]-r.usrCoords[1],t[2]-r.usrCoords[2]]:e=[t[0]-r.usrCoords[1],t[1]-r.usrCoords[2]],this.setPosition(constants.COORDS_BY_USER,e),this.board.update(this)):this},getTransformationSource:function(){var t,e;return type_default.exists(this._transformationSource)&&(e=this._transformationSource,e.elementClass===constants.OBJECT_CLASS_CURVE&&(t=!0)),[t,e]},getCoords:function(){var t,e,r=[];for(t=this.numberPoints,e=0;e<t;e++)r.push(this.points[e].usrCoords.slice());return r}});jxg_default.createCurve=function(t,e,r){var s,o,a=type_default.copyAttributes(r,t.options,"curve");return s=t.select(e[0],!0),type_default.isTransformationOrArray(e[1])&&type_default.isObject(s)&&(s.type===constants.OBJECT_TYPE_CURVE||s.type===constants.OBJECT_TYPE_ANGLE||s.type===constants.OBJECT_TYPE_ARC||s.type===constants.OBJECT_TYPE_CONIC||s.type===constants.OBJECT_TYPE_SECTOR)?(s.type===constants.OBJECT_TYPE_SECTOR?a=type_default.copyAttributes(r,t.options,"sector"):s.type===constants.OBJECT_TYPE_ARC?a=type_default.copyAttributes(r,t.options,"arc"):s.type===constants.OBJECT_TYPE_ANGLE?(type_default.exists(r.withLabel)||(r.withLabel=!1),a=type_default.copyAttributes(r,t.options,"angle")):a=type_default.copyAttributes(r,t.options,"curve"),a=type_default.copyAttributes(a,t.options,"curve"),o=new jxg_default.Curve(t,["x",[],[]],a),o.updateDataArray=function(){var n,l=s.numberPoints;for(this.bezierDegree=s.bezierDegree,this.dataX=[],this.dataY=[],n=0;n<l;n++)this.dataX.push(s.points[n].usrCoords[1]),this.dataY.push(s.points[n].usrCoords[2]);return this},o.addTransform(e[1]),s.addChild(o),o.setParents([s]),o._transformationSource=s,o):(a=type_default.copyAttributes(r,t.options,"curve"),new jxg_default.Curve(t,["x"].concat(e),a))};jxg_default.registerElement("curve",jxg_default.createCurve);jxg_default.createFunctiongraph=function(t,e,r){var s,o=["x","x"].concat(e);return s=type_default.copyAttributes(r,t.options,"functiongraph"),s=type_default.copyAttributes(s,t.options,"curve"),s.curvetype="functiongraph",new jxg_default.Curve(t,o,s)};jxg_default.registerElement("functiongraph",jxg_default.createFunctiongraph);jxg_default.registerElement("plot",jxg_default.createFunctiongraph);jxg_default.createSpline=function(t,e,r){var s,o=function(){var n,l=[],h=[];return[function(d,u){var c,p,f;if(!u){if(l=[],h=[],e.length===2&&type_default.isArray(e[0])&&type_default.isArray(e[1])&&e[0].length===e[1].length)for(c=0;c<e[0].length;c++)type_default.isFunction(e[0][c])?l.push(e[0][c]()):l.push(e[0][c]),type_default.isFunction(e[1][c])?h.push(e[1][c]()):h.push(e[1][c]);else for(c=0;c<e.length;c++)if(type_default.isPoint(e[c]))l.push(e[c].X()),h.push(e[c].Y());else if(type_default.isArray(e[c])&&e[c].length===2)for(p=0;p<e.length;p++)type_default.isFunction(e[p][0])?l.push(e[p][0]()):l.push(e[p][0]),type_default.isFunction(e[p][1])?h.push(e[p][1]()):h.push(e[p][1]);else type_default.isFunction(e[c])&&e[c]().length===2&&(f=e[c](),l.push(f[0]),h.push(f[1]));n=numerics_default.splineDef(l,h)}return numerics_default.splineEval(d,l,h,n)},function(){return l[0]},function(){return l[l.length-1]}]},a;return r=type_default.copyAttributes(r,t.options,"curve"),r.curvetype="functiongraph",a=o(),s=new jxg_default.Curve(t,["x","x",a[0],a[1],a[2]],r),s.setParents(e),s.elType="spline",s};jxg_default.registerElement("spline",jxg_default.createSpline);jxg_default.createCardinalSpline=function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f=`
135
+ Possible parent types: [points:array, tau:number|function, type:string]`;if(!type_default.exists(e[0])||!type_default.isArray(e[0]))throw new Error("JSXGraph: JXG.createCardinalSpline: argument 1 'points' has to be array of points or coordinate pairs"+f);if(!type_default.exists(e[1])||!type_default.isNumber(e[1])&&!type_default.isFunction(e[1]))throw new Error("JSXGraph: JXG.createCardinalSpline: argument 2 'tau' has to be number between [0,1] or function'"+f);if(!type_default.exists(e[2])||!type_default.isString(e[2])?l="uniform":l=e[2],r=type_default.copyAttributes(r,t.options,"curve"),r=type_default.copyAttributes(r,t.options,"cardinalspline"),r.curvetype="parameter",h=e[0],d=[],!r.isarrayofcoordinates&&h.length===2&&type_default.isArray(h[0])&&type_default.isArray(h[1])&&h[0].length===h[1].length)for(u=0;u<h[0].length;u++)d[u]=[],type_default.isFunction(h[0][u])?d[u].push(h[0][u]()):d[u].push(h[0][u]),type_default.isFunction(h[1][u])?d[u].push(h[1][u]()):d[u].push(h[1][u]);else for(u=0;u<h.length;u++)type_default.isString(h[u])?d.push(t.select(h[u])):type_default.isPoint(h[u])?d.push(h[u]):type_default.isArray(h[u])&&h[u].length===2?(d[u]=[],type_default.isFunction(h[u][0])?d[u].push(h[u][0]()):d[u].push(h[u][0]),type_default.isFunction(h[u][1])?d[u].push(h[u][1]()):d[u].push(h[u][1])):type_default.isFunction(h[u])&&h[u]().length===2&&d.push(e[u]());if(r.createpoints===!0)a=type_default.providePoints(t,d,r,"cardinalspline",["points"]);else for(a=[],o=function(_){return{X:function(){return d[_][0]},Y:function(){return d[_][1]},Dist:function(g){var m=this.X()-g.X(),b=this.Y()-g.Y();return math_default.hypot(m,b)}}},u=0;u<d.length;u++)type_default.isPoint(d[u])?a.push(d[u]):a.push(o(u));for(n=e[1],p=["x"].concat(numerics_default.CardinalSpline(a,n,l)),s=new jxg_default.Curve(t,p,r),c=a.length,s.setParents(a),u=0;u<c;u++)h=a[u],type_default.isPoint(h)&&(type_default.exists(h._is_new)?(s.addChild(h),delete h._is_new):h.addChild(s));return s.elType="cardinalspline",s};jxg_default.registerElement("cardinalspline",jxg_default.createCardinalSpline);jxg_default.createMetapostSpline=function(t,e,r){var s,o,a,n,l,h,d,u,c=`
136
+ Possible parent types: [points:array, controls:object`;if(!type_default.exists(e[0])||!type_default.isArray(e[0]))throw new Error("JSXGraph: JXG.createMetapostSpline: argument 1 'points' has to be array of points or coordinate pairs"+c);if(!type_default.exists(e[1])||!type_default.isObject(e[1]))throw new Error("JSXGraph: JXG.createMetapostSpline: argument 2 'controls' has to be a JavaScript object'"+c);if(r=type_default.copyAttributes(r,t.options,"curve"),r=type_default.copyAttributes(r,t.options,"metapostspline"),r.curvetype="parameter",l=e[0],h=[],!r.isarrayofcoordinates&&l.length===2&&type_default.isArray(l[0])&&type_default.isArray(l[1])&&l[0].length===l[1].length)for(d=0;d<l[0].length;d++)h[d]=[],type_default.isFunction(l[0][d])?h[d].push(l[0][d]()):h[d].push(l[0][d]),type_default.isFunction(l[1][d])?h[d].push(l[1][d]()):h[d].push(l[1][d]);else for(d=0;d<l.length;d++)type_default.isString(l[d])?h.push(t.select(l[d])):type_default.isPoint(l[d])?h.push(l[d]):type_default.isArray(l[d])&&l[d].length===2?(h[d]=[],type_default.isFunction(l[d][0])?h[d].push(l[d][0]()):h[d].push(l[d][0]),type_default.isFunction(l[d][1])?h[d].push(l[d][1]()):h[d].push(l[d][1])):type_default.isFunction(l[d])&&l[d]().length===2&&h.push(e[d]());if(r.createpoints===!0)a=type_default.providePoints(t,h,r,"metapostspline",["points"]);else for(a=[],o=function(p){return{X:function(){return h[p][0]},Y:function(){return h[p][1]}}},d=0;d<h.length;d++)type_default.isPoint(h[d])?a.push(h[d]):a.push(o);for(n=e[1],s=new jxg_default.Curve(t,["t",[],[],0,l.length-1],r),s.updateDataArray=function(){var p,f,_=a.length,g=[];for(f=0;f<_;f++)g.push([a[f].X(),a[f].Y()]);p=metapost_default.curve(g,n),this.dataX=p[0],this.dataY=p[1]},s.bezierDegree=3,u=a.length,s.setParents(a),d=0;d<u;d++)type_default.isPoint(a[d])&&a[d].addChild(s);return s.elType="metapostspline",s};jxg_default.registerElement("metapostspline",jxg_default.createMetapostSpline);jxg_default.createRiemannsum=function(t,e,r){var s,o,a,n,l,h=type_default.copyAttributes(r,t.options,"riemannsum");if(h.curvetype="plot",a=e[0],s=type_default.createFunction(e[1],t,""),!type_default.exists(s))throw new Error(`JSXGraph: JXG.createRiemannsum: argument '2' n has to be number or function.
137
+ Possible parent types: [function,n:number|function,type,start:number|function,end:number|function]`);if(typeof e[2]=="string"&&(e[2]="'"+e[2]+"'"),o=type_default.createFunction(e[2],t,""),!type_default.exists(o))throw new Error(`JSXGraph: JXG.createRiemannsum: argument 3 'type' has to be string or function.
138
+ Possible parent types: [function,n:number|function,type,start:number|function,end:number|function]`);return n=[[0],[0]].concat(e.slice(3)),l=t.create("curve",n,h),l.sum=0,l.Value=function(){return this.sum},l.updateDataArray=function(){var d=numerics_default.riemann(a,s(),o(),this.minX(),this.maxX());this.dataX=d[0],this.dataY=d[1],this.sum=d[2]},l.addParentsFromJCFunctions([s,o]),l};jxg_default.registerElement("riemannsum",jxg_default.createRiemannsum);jxg_default.createTracecurve=function(t,e,r){var s,o,a,n;if(e.length!==2)throw new Error(`JSXGraph: Can't create trace curve with given parent'
139
+ Possible parent types: [glider, point]`);if(o=t.select(e[0]),a=t.select(e[1]),o.type!==constants.OBJECT_TYPE_GLIDER||!type_default.isPoint(a))throw new Error("JSXGraph: Can't create trace curve with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
140
+ Possible parent types: [glider, point]`);return n=type_default.copyAttributes(r,t.options,"tracecurve"),n.curvetype="plot",s=t.create("curve",[[0],[0]],n),s.updateDataArray=function(){var l,h,d,u,c,p,f,_,g,m=this.visProp.numberpoints,b=o.position,C=o.slideObject,y=C.minX();for(h=(C.maxX()-y)/m,this.dataX=[],this.dataY=[],C.elementClass!==constants.OBJECT_CLASS_CURVE&&m++,l=0;l<m;l++){d=y+l*h,p=C.X(d)/C.Z(d),f=C.Y(d)/C.Z(d),o.setPositionDirectly(constants.COORDS_BY_USER,[p,f]),_=!1;for(u in this.board.objects)if(this.board.objects.hasOwnProperty(u)&&(c=this.board.objects[u],c===o&&(_=!0),_&&c.needsRegularUpdate&&(g=c.visProp.trace,c.visProp.trace=!1,c.needsUpdate=!0,c.update(!0),c.visProp.trace=g,c===a)))break;this.dataX[l]=a.X(),this.dataY[l]=a.Y()}o.position=b,_=!1;for(u in this.board.objects)if(this.board.objects.hasOwnProperty(u)&&(c=this.board.objects[u],c===o&&(_=!0),_&&c.needsRegularUpdate&&(g=c.visProp.trace,c.visProp.trace=!1,c.needsUpdate=!0,c.update(!0),c.visProp.trace=g,c===a)))break},s};jxg_default.registerElement("tracecurve",jxg_default.createTracecurve);jxg_default.createStepfunction=function(t,e,r){var s,o;if(e.length!==2)throw new Error(`JSXGraph: Can't create step function with given parent'
141
+ Possible parent types: [array, array|function]`);return o=type_default.copyAttributes(r,t.options,"stepfunction"),s=t.create("curve",e,o),s.updateDataArray=function(){var a,n=0,l=this.xterm.length;if(this.dataX=[],this.dataY=[],l!==0)for(this.dataX[n]=this.xterm[0],this.dataY[n]=this.yterm[0],++n,a=1;a<l;++a)this.dataX[n]=this.xterm[a],this.dataY[n]=this.dataY[n-1],++n,this.dataX[n]=this.xterm[a],this.dataY[n]=this.yterm[a],++n},s};jxg_default.registerElement("stepfunction",jxg_default.createStepfunction);jxg_default.createDerivative=function(t,e,r){var s,o,a,n,l;if(e.length!==1&&e[0].class!==constants.OBJECT_CLASS_CURVE)throw new Error(`JSXGraph: Can't create derivative curve with given parent'
142
+ Possible parent types: [curve]`);return l=type_default.copyAttributes(r,t.options,"curve"),o=e[0],a=numerics_default.D(o.X),n=numerics_default.D(o.Y),s=t.create("curve",[function(h){return o.X(h)},function(h){return n(h)/a(h)},o.minX(),o.maxX()],l),s.setParents(o),s};jxg_default.registerElement("derivative",jxg_default.createDerivative);jxg_default.createCurveIntersection=function(t,e,r){var s;if(e.length!==2)throw new Error(`JSXGraph: Can't create curve intersection with given parent'
143
+ Possible parent types: [array, array|function]`);return s=t.create("curve",[[],[]],r),s.updateDataArray=function(){var o=clip_default.intersection(e[0],e[1],this.board);this.dataX=o[0],this.dataY=o[1]},s};jxg_default.createCurveUnion=function(t,e,r){var s;if(e.length!==2)throw new Error(`JSXGraph: Can't create curve union with given parent'
144
+ Possible parent types: [array, array|function]`);return s=t.create("curve",[[],[]],r),s.updateDataArray=function(){var o=clip_default.union(e[0],e[1],this.board);this.dataX=o[0],this.dataY=o[1]},s};jxg_default.createCurveDifference=function(t,e,r){var s;if(e.length!==2)throw new Error(`JSXGraph: Can't create curve difference with given parent'
145
+ Possible parent types: [array, array|function]`);return s=t.create("curve",[[],[]],r),s.updateDataArray=function(){var o=clip_default.difference(e[0],e[1],this.board);this.dataX=o[0],this.dataY=o[1]},s};jxg_default.registerElement("curvedifference",jxg_default.createCurveDifference);jxg_default.registerElement("curveintersection",jxg_default.createCurveIntersection);jxg_default.registerElement("curveunion",jxg_default.createCurveUnion);jxg_default.createBoxPlot=function(t,e,r){var s,o,a,n=type_default.copyAttributes(r,t.options,"boxplot");if(e.length!==3)throw new Error(`JSXGraph: Can't create boxplot with given parent'
146
+ Possible parent types: [array, number|function, number|function] containing quantiles, axis, width`);if(e[0].length<5)throw new Error(`JSXGraph: Can't create boxplot with given parent[0]'
147
+ parent[0] has to contain at least 5 quantiles.`);for(s=t.create("curve",[[],[]],n),a=e[0].length,s.Q=[],o=0;o<a;o++)s.Q[o]=type_default.createFunction(e[0][o],t);return s.x=type_default.createFunction(e[1],t),s.w=type_default.createFunction(e[2],t),s.updateDataArray=function(){var l,h,d,u,c,p,f=this.evalVisProp("smallwidth"),_=this.evalVisProp("dir"),g=this.x(),m,b,C,y,x,v,P,E,w,O;if(d=g-this.w()*.5,u=g-this.w()*.5*f,c=g+this.w()*.5,p=g+this.w()*.5*f,l=[g,u,p,g,g,d,d,c,c,g,NaN,d,c,NaN,g,g,u,p,g],h=[this.Q[0](),this.Q[0](),this.Q[0](),this.Q[0](),this.Q[1](),this.Q[1](),this.Q[3](),this.Q[3](),this.Q[1](),this.Q[1](),NaN,this.Q[2](),this.Q[2](),NaN,this.Q[3](),this.Q[4](),this.Q[4](),this.Q[4](),this.Q[4]()],this.Q.length>5&&type_default.isArray(this.Q[5]()))for(l.push(NaN),h.push(NaN),O=this.evalVisProp("outlier.face"),_==="vertical"?(x=this.evalVisProp("outlier.size")/this.board.unitX,v=this.evalVisProp("outlier.size")/this.board.unitY):(v=this.evalVisProp("outlier.size")/this.board.unitX,x=this.evalVisProp("outlier.size")/this.board.unitY),P=x*Math.sqrt(2),E=v*Math.sqrt(2),C=this.Q[5](),b=C.length,m=0;m<b;m++)switch(y=C[m],O){case"x":case"cross":l.push(g-x,g+x,NaN,g-x,g+x,NaN),h.push(y+v,y-v,NaN,y-v,y+v,NaN);break;case"[]":case"square":l.push(g-x,g+x,g+x,g-x,g-x,NaN),h.push(y+v,y+v,y-v,y-v,y+v,NaN);break;case"<>":case"diamond":l.push(g,g+x,g,g-x,g,NaN),h.push(y+v,y,y-v,y,y+v,NaN);break;case"<<>>":case"diamond2":l.push(g,g+P,g,g-P,g,NaN),h.push(y+E,y,y-E,y,y+E,NaN);break;case"+":case"plus":l.push(g-x,g+x,NaN,g,g,NaN),h.push(y,y,NaN,y-v,y+v,NaN);break;case"-":case"minus":l.push(g-x,g+x,NaN),h.push(y,y,NaN);break;case"|":case"divide":l.push(g,g,NaN),h.push(y-v,y+v,NaN);break;default:case"o":case"circle":for(w=0;w<=2*Math.PI;w+=2*Math.PI/17)l.push(g-x*Math.sin(w)),h.push(y-v*Math.cos(w));l.push(NaN),h.push(NaN)}_==="vertical"?(this.dataX=l,this.dataY=h):(this.dataX=h,this.dataY=l)},s.addParentsFromJCFunctions([s.Q,s.x,s.w]),s};jxg_default.registerElement("boxplot",jxg_default.createBoxPlot);jxg_default.createImplicitCurve=function(t,e,r){var s,o;if([1,3,5].indexOf(e.length)<0)throw new Error(`JSXGraph: Can't create curve implicitCurve with given parent'
148
+ Possible parent types: [f], [f, rangex, rangey], [f, dfx, dfy] or [f, dfx, dfy, rangex, rangey]
149
+ with functions f, dfx, dfy and arrays of length 2 rangex, rangey.`);return o=type_default.copyAttributes(r,t.options,"implicitcurve"),s=t.create("curve",[[],[]],o),s.f=type_default.createFunction(e[0],t,"x, y"),e.length===5||type_default.isString(e[1])||type_default.isFunction(e[1])?s.dfx=type_default.createFunction(e[1],t,"x, y"):s.dfx=null,e.length===5||type_default.isString(e[2])||type_default.isFunction(e[2])?s.dfy=type_default.createFunction(e[2],t,"x, y"):s.dfy=null,s.domain=null,e.length===5?s.domain=[e[3],e[4]]:e.length===3&&(s.domain=[e[1],e[2]]),s.updateDataArray=function(){var a,n,l,h,d,u=[],c;this.domain===null?(c=this.evalVisProp("margin"),a=this.board.getBoundingBox(),a[0]-=c,a[1]+=c,a[2]+=c,a[3]-=c):(n=type_default.evaluate(this.domain[0]),l=type_default.evaluate(this.domain[1]),a=[Math.min(n[0],n[1]),Math.max(l[0],l[1]),Math.max(n[0],n[1]),Math.min(l[0],l[1])]),d={resolution_out:Math.max(.01,this.evalVisProp("resolution_outer")),resolution_in:Math.max(.01,this.evalVisProp("resolution_inner")),max_steps:this.evalVisProp("max_steps"),alpha_0:this.evalVisProp("alpha_0"),tol_u0:this.evalVisProp("tol_u0"),tol_newton:this.evalVisProp("tol_newton"),tol_cusp:this.evalVisProp("tol_cusp"),tol_progress:this.evalVisProp("tol_progress"),qdt_box:this.evalVisProp("qdt_box"),kappa_0:this.evalVisProp("kappa_0"),delta_0:this.evalVisProp("delta_0"),h_initial:this.evalVisProp("h_initial"),h_critical:this.evalVisProp("h_critical"),h_max:this.evalVisProp("h_max"),loop_dist:this.evalVisProp("loop_dist"),loop_dir:this.evalVisProp("loop_dir"),loop_detection:this.evalVisProp("loop_detection"),unitX:this.board.unitX,unitY:this.board.unitY},this.dataX=[],this.dataY=[],h=new implicitplot_default(a,d,this.f,this.dfx,this.dfy),this.qdt=h.qdt,u=h.plot(),this.dataX=u[0],this.dataY=u[1]},s.elType="implicitcurve",s};jxg_default.registerElement("implicitcurve",jxg_default.createImplicitCurve);jxg_default.createSketchCurve=function(t,e,r){var s,o=type_default.copyAttributes(r,t.options,"sketchcurve");return s=t.create("curve",[[],[]],o),s.elType="sketchcurve",s};jxg_default.registerElement("sketchcurve",jxg_default.createSketchCurve);var curve_default=jxg_default.Curve;jxg_default.createArc=function(t,e,r){var s,o,a=type_default.providePoints(t,e,r,"arc",["center","radiuspoint","anglepoint"]);if(a===!1||a.length<3)throw new Error("JSXGraph: Can't create Arc with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+`'.
150
+ Possible parent types: [point,point,point], [arc, transformation]`);return o=type_default.copyAttributes(r,t.options,"arc"),s=t.create("curve",[[0],[0],0,4],o),s.elType="arc",s.setParents(a),s.type=constants.OBJECT_TYPE_ARC,s.center=a[0],s.radiuspoint=a[1],s.point2=s.radiuspoint,s.anglepoint=a[2],s.point3=s.anglepoint,type_default.exists(s.center._is_new)?(s.addChild(s.center),delete s.center._is_new):s.center.addChild(s),type_default.exists(s.radiuspoint._is_new)?(s.addChild(s.radiuspoint),delete s.radiuspoint._is_new):s.radiuspoint.addChild(s),type_default.exists(s.anglepoint._is_new)?(s.addChild(s.anglepoint),delete s.anglepoint._is_new):s.anglepoint.addChild(s),s.useDirection=o.usedirection,s.updateDataArray=function(){var n,l,h,d,u,c,p=1,f=this.radiuspoint,_=this.center,g=this.anglepoint,m,b,C,y=this.evalVisProp("selection"),x=this.evalVisProp("orientation");l=geometry_default.rad(f,_,g),(y==="minor"&&l>Math.PI||y==="major"&&l<Math.PI||y==="auto"&&x==="clockwise")&&(p=-1),this.useDirection&&(d=a[1].coords.usrCoords,u=a[3].coords.usrCoords,c=a[2].coords.usrCoords,h=(d[1]-c[1])*(d[2]-u[2])-(d[2]-c[2])*(d[1]-u[1]),h<0?(this.radiuspoint=a[1],this.anglepoint=a[2]):(this.radiuspoint=a[2],this.anglepoint=a[1])),m=f.coords.usrCoords,b=_.coords.usrCoords,C=g.coords.usrCoords,n=geometry_default.bezierArc(m,b,C,!1,p),this.dataX=n[0],this.dataY=n[1],this.bezierDegree=3,this.updateStdform(),this.updateQuadraticform()},s.Radius=function(){return this.radiuspoint.Dist(this.center)},s.getRadius=function(){return jxg_default.deprecated("Arc.getRadius()","Arc.Radius()"),this.Radius()},s.Value=function(n,l){var h;return l===void 0&&(l=geometry_default.rad(this.radiuspoint,this.center,this.anglepoint),this.evalVisProp("orientation")==="clockwise"&&(l=2*Math.PI-l)),n=n||"length",n=n.toLocaleLowerCase(),n===""||n.indexOf("len")===0?h=l*this.Radius():n.indexOf("rad")===0?h=l:n.indexOf("deg")===0?h=l*180/Math.PI:n.indexOf("sem")===0?h=l/Math.PI:n.indexOf("cir")===0&&(h=l*.5/Math.PI),h},s.L=function(){return this.Value("length")},s.hasPoint=function(n,l){var h,d,u,c,p,f,_,g=this.Radius();return this.evalVisProp("hasinnerpoints")?this.hasPointSector(n,l):(type_default.isObject(this.evalVisProp("precision"))?(_=this.board._inputDevice,f=this.evalVisProp("precision."+_)):f=this.board.options.precision.hasPoint,f/=Math.min(Math.abs(this.board.unitX),Math.abs(this.board.unitY)),d=new coords_default(constants.COORDS_BY_SCREEN,[n,l],this.board),this.transformations.length>0&&(this.updateTransformMatrix(),c=math_default.inverse(this.transformMat),p=math_default.matVecMult(c,d.usrCoords),d=new coords_default(constants.COORDS_BY_USER,p,this.board)),h=this.center.coords.distance(constants.COORDS_BY_USER,d),u=Math.abs(h-g)<f,u&&(u=geometry_default.coordsOnArc(this,d)),u)},s.hasPointSector=function(n,l){var h=new coords_default(constants.COORDS_BY_SCREEN,[n,l],this.board),d=this.Radius(),u=this.center.coords.distance(constants.COORDS_BY_USER,h)<d;return u&&(u=geometry_default.coordsOnArc(this,h)),u},s.getTextAnchor=function(){return this.center.coords},s.getLabelAnchor=function(){var n,l,h,d,u,c=this.label.evalVisProp("position"),p=geometry_default.rad(this.radiuspoint,this.center,this.anglepoint),f=10/this.board.unitX,_=10/this.board.unitY,g=this.point2.coords.usrCoords,m=this.center.coords.usrCoords,b=g[1]-m[1],C=g[2]-m[2],y=this.evalVisProp("selection"),x=this.evalVisProp("orientation"),v=this.label?this.label.visProp:this.visProp.label;return!type_default.isString(c)||c.indexOf("right")<0&&c.indexOf("left")<0?((y==="minor"&&p>Math.PI||y==="major"&&p<Math.PI||y==="auto"&&x==="clockwise")&&(p=-(2*Math.PI-p)),n=new coords_default(constants.COORDS_BY_USER,[m[1]+Math.cos(p*.5)*b-Math.sin(p*.5)*C,m[2]+Math.sin(p*.5)*b+Math.cos(p*.5)*C],this.board),h=n.usrCoords[1]-m[1],d=n.usrCoords[2]-m[2],u=math_default.hypot(h,d),h=h*(u+f)/u,d=d*(u+_)/u,l=[m[1]+h,m[2]+d],v.position=geometry_default.calcLabelQuadrant(geometry_default.rad([1,0],[0,0],l)),new coords_default(constants.COORDS_BY_USER,l,this.board)):this.getLabelPosition(c,this.label.evalVisProp("distance"))},s.updateQuadraticform=circle_default.prototype.updateQuadraticform,s.updateStdform=circle_default.prototype.updateStdform,s.prepareUpdate().update(),type_default.extendInstanceMethodMap(s,{getRadius:"getRadius",radius:"Radius",Radius:"Radius",center:"center",radiuspoint:"radiuspoint",anglepoint:"anglepoint",Value:"Value",L:"L"}),s};jxg_default.registerElement("arc",jxg_default.createArc);jxg_default.createSemicircle=function(t,e,r){var s,o,a,n=type_default.providePoints(t,e,r,"point");if(n===!1||n.length!==2)throw new Error("JSXGraph: Can't create Semicircle with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
151
+ Possible parent types: [point,point]`);return a=type_default.copyAttributes(r,t.options,"semicircle","center"),o=t.create("midpoint",n,a),o.dump=!1,a=type_default.copyAttributes(r,t.options,"semicircle"),s=t.create("arc",[o,n[1],n[0]],a),s.elType="semicircle",s.setParents([n[0].id,n[1].id]),s.subs={midpoint:o},s.inherits.push(o),s.midpoint=s.center=o,s};jxg_default.registerElement("semicircle",jxg_default.createSemicircle);jxg_default.createCircumcircleArc=function(t,e,r){var s,o,a,n=type_default.providePoints(t,e,r,"point");if(n===!1||n.length!==3)throw new Error("JSXGraph: create Circumcircle Arc with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+`'.
152
+ Possible parent types: [point,point,point]`);return a=type_default.copyAttributes(r,t.options,"circumcirclearc","center"),o=t.create("circumcenter",n,a),o.dump=!1,a=type_default.copyAttributes(r,t.options,"circumcirclearc"),a.usedirection=!0,s=t.create("arc",[o,n[0],n[2],n[1]],a),s.elType="circumcirclearc",s.setParents([n[0].id,n[1].id,n[2].id]),s.subs={center:o},s.inherits.push(o),s.center=o,s};jxg_default.registerElement("circumcirclearc",jxg_default.createCircumcircleArc);jxg_default.createMinorArc=function(t,e,r){return r.selection="minor",jxg_default.createArc(t,e,r)};jxg_default.registerElement("minorarc",jxg_default.createMinorArc);jxg_default.createMajorArc=function(t,e,r){return r.selection="major",jxg_default.createArc(t,e,r)};jxg_default.registerElement("majorarc",jxg_default.createMajorArc);jxg_default.createSector=function(t,e,r){var s,o,a,n=1e-14,l="invalid",h,d,u=["center","radiusPoint","anglePoint"],c;if(e[0].elementClass===constants.OBJECT_CLASS_LINE&&e[1].elementClass===constants.OBJECT_CLASS_LINE&&(type_default.isArray(e[2])||type_default.isNumber(e[2]))&&(type_default.isArray(e[3])||type_default.isNumber(e[3]))&&(type_default.isNumber(e[4])||type_default.isFunction(e[4])||type_default.isString(e[4])))l="2lines";else{if(c=type_default.providePoints(t,e,r,"sector",u),c===!1)throw new Error("JSXGraph: Can't create Sector with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.");l="3points"}if(o=type_default.copyAttributes(r,t.options,"sector"),s=t.create("curve",[[0],[0],0,6],o),s.type=constants.OBJECT_TYPE_SECTOR,s.elType="sector",s.autoRadius=function(){var p=20/s.board.unitX,f=1/0,_=50/s.board.unitX;return type_default.isPoint(s.center)&&(f=s.center.Dist(s.point2)*.3333),Math.max(p,Math.min(f,_))},l==="2lines")s.Radius=function(){var p=type_default.evaluate(e[4]);return p==="auto"?this.autoRadius():p},s.line1=t.select(e[0]),s.line2=t.select(e[1]),s.line1.addChild(s),s.line2.addChild(s),s.setParents(e),s.point1={visProp:{}},s.point2={visProp:{}},s.point3={visProp:{}},h=geometry_default.meetLineLine(s.line1.stdform,s.line2.stdform,0,t),geometry_default.distance(h.usrCoords,[0,0,0],3)<n&&(s.line1.point1.Dist(s.line2.point1)<n||s.line1.point1.Dist(s.line2.point2)<n?h=s.line1.point1.coords:s.line1.point2.Dist(s.line2.point1)<n||s.line1.point2.Dist(s.line2.point1)<n?h=s.line1.point2.coords:console.log("JSXGraph warning: Can't create Sector from parallel lines with no common defining point.")),type_default.isArray(e[2])?(e[2].length===2&&(e[2]=[1].concat(e[2])),d=geometry_default.projectPointToLine({coords:{usrCoords:e[2]}},s.line1,t),d=statistics_default.subtract(d.usrCoords,h.usrCoords),s.direction1=math_default.innerProduct(d,[0,s.line1.stdform[2],-s.line1.stdform[1]],3)>=0?1:-1):s.direction1=e[2]>=0?1:-1,type_default.isArray(e[3])?(e[3].length===2&&(e[3]=[1].concat(e[3])),d=geometry_default.projectPointToLine({coords:{usrCoords:e[3]}},s.line2,t),d=statistics_default.subtract(d.usrCoords,h.usrCoords),s.direction2=math_default.innerProduct(d,[0,s.line2.stdform[2],-s.line2.stdform[1]],3)>=0?1:-1):s.direction2=e[3]>=0?1:-1,s.updateDataArray=function(){var p,f,_,g=1e-14,m=[0,0,0],b=[0,0,0],C=[0,0,0],y;if(f=this.line1,_=this.line2,b=math_default.crossProduct(f.stdform,_.stdform),geometry_default.distance(b,[0,0,0],3)<g&&(f.point1.Dist(_.point1)<g||f.point1.Dist(_.point2)<g?b=f.point1.coords.usrCoords:(f.point2.Dist(_.point1)<g||f.point2.Dist(_.point1)<g)&&(b=f.point2.coords.usrCoords)),Math.abs(b[0])>g&&(b[1]/=b[0],b[2]/=b[0],b[0]/=b[0]),p=this.direction1*this.Radius(),m=statistics_default.add(b,[0,p*f.stdform[2],-p*f.stdform[1]]),p=this.direction2*this.Radius(),C=statistics_default.add(b,[0,p*_.stdform[2],-p*_.stdform[1]]),this.point2.coords=new coords_default(constants.COORDS_BY_USER,m,s.board),this.point1.coords=new coords_default(constants.COORDS_BY_USER,b,s.board),this.point3.coords=new coords_default(constants.COORDS_BY_USER,C,s.board),Math.abs(m[0])<math_default.eps||Math.abs(b[0])<math_default.eps||Math.abs(C[0])<math_default.eps){this.dataX=[NaN],this.dataY=[NaN];return}y=geometry_default.bezierArc(m,b,C,!0,1),this.dataX=y[0],this.dataY=y[1],this.bezierDegree=3},type_default.extendInstanceMethodMap(s,{arc:"arc",center:"center",line1:"line1",line2:"line2"});else if(l==="3points"){for(s.point1=c[0],s.point2=c[1],s.point3=c[2],a=0;a<3;a++)type_default.exists(c[a]._is_new)?(s.addChild(c[a]),delete c[a]._is_new):c[a].addChild(s);s.useDirection=r.usedirection,s.setParents(c),type_default.exists(c[3])&&(s.point4=c[3],s.point4.addChild(s)),s.updateDataArray=function(){var p,f,_,g,m,b=this.point2,C=this.point1,y=this.point3,x,v,P,E,w=1,O=this.evalVisProp("selection"),S=this.evalVisProp("orientation");if(!b.isReal||!C.isReal||!y.isReal){this.dataX=[NaN],this.dataY=[NaN];return}E=geometry_default.rad(b,C,y),(S==="counterclockwise"&&(O==="minor"&&E>Math.PI||O==="major"&&E<Math.PI)||S==="clockwise"&&(O==="auto"||O==="minor"&&E>Math.PI||O==="major"&&E<Math.PI))&&(w=-1),this.useDirection&&type_default.exists(this.point4)&&(_=this.point2.coords.usrCoords,g=this.point4.coords.usrCoords,m=this.point3.coords.usrCoords,f=(_[1]-m[1])*(_[2]-g[2])-(_[2]-m[2])*(_[1]-g[1]),f>=0&&(y=this.point2,b=this.point3)),x=b.coords.usrCoords,v=C.coords.usrCoords,P=y.coords.usrCoords,p=geometry_default.bezierArc(x,v,P,!0,w),this.dataX=p[0],this.dataY=p[1],this.bezierDegree=3},s.Radius=function(){return this.point2.Dist(this.point1)},type_default.extendInstanceMethodMap(s,{arc:"arc",center:"center",radiuspoint:"radiuspoint",anglepoint:"anglepoint"})}return s.center=s.point1,s.radiuspoint=s.point2,s.anglepoint=s.point3,o=type_default.copyAttributes(r,t.options,"arc"),o=type_default.copyAttributes(o,t.options,"sector","arc"),o.withlabel=!1,o.selection=s.visProp.selection,o.name+="_arc",l==="2lines"?(s.updateDataArray(),s.arc=t.create("arc",[function(){return s.point1.coords.usrCoords},function(){var p=s.point2.coords.distance(constants.COORDS_BY_USER,s.point1.coords);return p===0?[s.point1.coords.usrCoords[1],s.point1.coords.usrCoords[2]]:[s.point1.coords.usrCoords[1]+s.Radius()*(s.point2.coords.usrCoords[1]-s.point1.coords.usrCoords[1])/p,s.point1.coords.usrCoords[2]+s.Radius()*(s.point2.coords.usrCoords[2]-s.point1.coords.usrCoords[2])/p]},function(){return s.point3.coords.usrCoords}],o)):s.arc=t.create("arc",[s.point1,function(){var p=s.point2.Dist(s.point1),f=s.point1,_=s.point2;return p===0?[f.X(),f.Y()]:[f.X()+s.Radius()*(_.X()-f.X())/p,f.Y()+s.Radius()*(_.Y()-f.Y())/p]},s.point3],o),s.addChild(s.arc),s.inherits.push(s.arc),s.hasPointCurve=function(p,f){var _,g,m,b,C,y=new coords_default(constants.COORDS_BY_SCREEN,[p,f],this.board),x=this.Radius(),v=this.center.coords.distance(constants.COORDS_BY_USER,y),P,E=this.evalVisProp("selection"),w=this.evalVisProp("orientation");return type_default.isObject(this.evalVisProp("precision"))?(C=this.board._inputDevice,b=this.evalVisProp("precision."+C)):b=this.board.options.precision.hasPoint,b/=Math.min(Math.abs(this.board.unitX),Math.abs(this.board.unitY)),P=Math.abs(v-x)<b,P&&(_=geometry_default.rad(this.point2,this.center,y.usrCoords.slice(1)),g=0,m=geometry_default.rad(this.point2,this.center,this.point3),w==="clockwise"&&(_=2*Math.PI-_,m=2*Math.PI-m),(E==="minor"&&m>Math.PI||E==="major"&&m<Math.PI)&&(g=m,m=2*Math.PI),(_<g||_>m)&&(P=!1)),P},s.hasPointSector=function(p,f){var _,g=new coords_default(constants.COORDS_BY_SCREEN,[p,f],this.board),m=this.Radius(),b=this.point1.coords.distance(constants.COORDS_BY_USER,g),C,y,x=b<m,v=this.evalVisProp("selection"),P=this.evalVisProp("orientation");return x&&(_=geometry_default.rad(this.radiuspoint,this.center,g.usrCoords.slice(1)),C=0,y=geometry_default.rad(this.radiuspoint,this.center,this.anglepoint),P==="clockwise"&&(_=2*Math.PI-_,y=2*Math.PI-y),(v==="minor"&&y>Math.PI||v==="major"&&y<Math.PI)&&(C=y,y=2*Math.PI),(_<C||_>y)&&(x=!1)),x},s.hasPoint=function(p,f){return this.evalVisProp("highlightonsector")||this.evalVisProp("hasinnerpoints")?this.hasPointSector(p,f):this.hasPointCurve(p,f)},s.getTextAnchor=function(){return this.point1.coords},s.getLabelAnchor=function(){var p,f,_,g,m,b=this.label.evalVisProp("position"),C=geometry_default.rad(this.point2,this.point1,this.point3),y=13/this.board.unitX,x=13/this.board.unitY,v=this.point2.coords.usrCoords,P=this.point1.coords.usrCoords,E=v[1]-P[1],w=v[2]-P[2],O=this.evalVisProp("selection"),S=this.evalVisProp("orientation"),M=this.label?this.label.visProp:this.visProp.label;return!type_default.isString(b)||b.indexOf("right")<0&&b.indexOf("left")<0?((O==="minor"&&C>Math.PI||O==="major"&&C<Math.PI||O==="auto"&&S==="clockwise")&&(C=-(2*Math.PI-C)),p=new coords_default(constants.COORDS_BY_USER,[P[1]+Math.cos(C*.5)*E-Math.sin(C*.5)*w,P[2]+Math.sin(C*.5)*E+Math.cos(C*.5)*w],this.board),_=p.usrCoords[1]-P[1],g=p.usrCoords[2]-P[2],m=math_default.hypot(_,g),_=_*(m+y)/m,g=g*(m+x)/m,f=[P[1]+_,P[2]+g],M.position=geometry_default.calcLabelQuadrant(geometry_default.rad([1,0],[0,0],f)),new coords_default(constants.COORDS_BY_USER,f,this.board)):this.getLabelPosition(b,this.label.evalVisProp("distance"))},s.setRadius=function(p){var f,_=type_default.evaluate(p);p==="auto"||_==="auto"?f="auto":type_default.isNumber(p)?f="number":type_default.isFunction(p)&&!type_default.isString(_)?f="function":f="undefined",f!=="undefined"&&(this.visProp.radius=p),s.Radius=function(){var g=type_default.evaluate(p);return g==="auto"?this.autoRadius():g}},s.getRadius=function(){return jxg_default.deprecated("Sector.getRadius()","Sector.Radius()"),this.Radius()},s.Value=function(p){return this.arc.Value(p)},s.L=function(){return this.arc.L()},s.Area=function(){var p=this.Radius();return .5*p*p*this.Value("radians")},s.Perimeter=function(){return this.L()+2*this.Radius()},l==="3points"&&(s.setPositionDirectly=function(p,f,_){var g,m,b=new coords_default(p,f,this.board),C=new coords_default(p,_,this.board);return!s.point1.draggable()||!s.point2.draggable()||!s.point3.draggable()?this:(g=statistics_default.subtract(b.usrCoords,C.usrCoords),m=this.board.create("transform",g.slice(1),{type:"translate"}),m.applyOnce([s.point1,s.point2,s.point3]),this)}),type_default.extendInstanceMethodMap(s,{radius:"Radius",Radius:"Radius",getRadius:"Radius",setRadius:"setRadius",Value:"Value",L:"L",Area:"Area",Perimeter:"Perimeter"}),s};jxg_default.registerElement("sector",jxg_default.createSector);jxg_default.createCircumcircleSector=function(t,e,r){var s,o,a,n=type_default.providePoints(t,e,r,"point");if(n===!1)throw new Error("JSXGraph: Can't create circumcircle sector with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.");return o=t.create("circumcenter",n.slice(0,3),a),o.dump=!1,a=type_default.copyAttributes(r,t.options,"circumcirclesector"),s=t.create("sector",[o,n[0],n[2],n[1]],a),s.elType="circumcirclesector",s.setParents(n),s.center=o,s.subs={center:o},s};jxg_default.registerElement("circumcirclesector",jxg_default.createCircumcircleSector);jxg_default.createMinorSector=function(t,e,r){return r.selection="minor",jxg_default.createSector(t,e,r)};jxg_default.registerElement("minorsector",jxg_default.createMinorSector);jxg_default.createMajorSector=function(t,e,r){return r.selection="major",jxg_default.createSector(t,e,r)};jxg_default.registerElement("majorsector",jxg_default.createMajorSector);jxg_default.createAngle=function(t,e,r){var s,o,a,n,l,h,d="invalid";if(e[0].elementClass===constants.OBJECT_CLASS_LINE&&e[1].elementClass===constants.OBJECT_CLASS_LINE&&(type_default.isArray(e[2])||type_default.isNumber(e[2]))&&(type_default.isArray(e[3])||type_default.isNumber(e[3])))d="2lines";else{if(a={name:""},h=type_default.providePoints(t,e,a,"point"),h===!1)throw new Error("JSXGraph: Can't create angle with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.");d="3points"}if(a=type_default.copyAttributes(r,t.options,"angle"),type_default.exists(a.name)||(a.name=t.generateName({type:constants.OBJECT_TYPE_ANGLE})),type_default.exists(a.radius)?o=a.radius:o=0,t.suspendUpdate(),d==="2lines"?(e.push(o),s=t.create("sector",e,a),s.updateDataArraySector=s.updateDataArray,s.setAngle=function(u){},s.free=function(u){}):(s=t.create("sector",[h[1],h[0],h[2]],a),s.arc.visProp.priv=!0,s.point=s.point2=s.radiuspoint=h[0],s.pointsquare=s.point3=s.anglepoint=h[2],s.Radius=function(){var u=type_default.evaluate(o);return u==="auto"?s.autoRadius():u},s.updateDataArraySector=function(){var u=this.point2,c=this.point1,p=this.point3,f=this.Radius(),_=c.Dist(u),g,m,b,C,y,x=1,v=this.evalVisProp("selection"),P=this.evalVisProp("orientation");y=geometry_default.rad(u,c,p),(v==="minor"&&y>Math.PI||v==="major"&&y<Math.PI||v==="auto"&&P==="clockwise")&&(x=-1),g=u.coords.usrCoords,m=c.coords.usrCoords,b=p.coords.usrCoords,g=[1,m[1]+(g[1]-m[1])*f/_,m[2]+(g[2]-m[2])*f/_],b=[1,m[1]+(b[1]-m[1])*f/_,m[2]+(b[2]-m[2])*f/_],C=geometry_default.bezierArc(g,m,b,!0,x),this.dataX=C[0],this.dataY=C[1],this.bezierDegree=3},s.setAngle=function(u){var c,p,f,_,g=this.anglepoint,m=this.radiuspoint;return g.draggable()&&(this.evalVisProp("orientation")==="clockwise"?f=function(){return Math.PI*2-type_default.evaluate(u)}:f=function(){return type_default.evaluate(u)},c=this.board.create("transform",[f,this.center],{type:"rotate"}),g.addTransform(m,c),c.update(),g.moveTo(math_default.matVecMult(c.matrix,m.coords.usrCoords)),_=function(){return Math.PI*2-f()},p=this.board.create("transform",[_,this.center],{type:"rotate"}),g.coords.on("update",function(){p.update(),m.setPositionDirectly(constants.COORDS_BY_USER,math_default.matVecMult(p.matrix,g.coords.usrCoords))}),g.setParents(m),this.hasFixedAngle=!0),this},s.free=function(){var u=this.anglepoint;return u.transformations.length>0&&(u.transformations.pop(),u.isDraggable=!0,u.parents=[],u.coords.off("update")),this.hasFixedAngle=!1,this},s.setParents(h)),type_default.exists(s.visProp.text)&&s.label.setText(s.evalVisProp("text")),s.elType="angle",s.type=constants.OBJECT_TYPE_ANGLE,s.subs={},s.updateDataArraySquare=function(){var u,c,p,f,_,g,m,b,C=this.Radius();d==="2lines"&&this.updateDataArraySector(),u=this.point2,c=this.point1,p=this.point3,u=u.coords.usrCoords,c=c.coords.usrCoords,p=p.coords.usrCoords,f=geometry_default.distance(u,c,3),_=geometry_default.distance(p,c,3),u=[1,c[1]+(u[1]-c[1])*C/f,c[2]+(u[2]-c[2])*C/f],p=[1,c[1]+(p[1]-c[1])*C/_,c[2]+(p[2]-c[2])*C/_],g=math_default.crossProduct(p,c),m=[-u[1]*g[1]-u[2]*g[2],u[0]*g[1],u[0]*g[2]],g=math_default.crossProduct(u,c),b=[-p[1]*g[1]-p[2]*g[2],p[0]*g[1],p[0]*g[2]],g=math_default.crossProduct(m,b),g[1]/=g[0],g[2]/=g[0],this.dataX=[c[1],u[1],g[1],p[1],c[1]],this.dataY=[c[2],u[2],g[2],p[2],c[2]],this.bezierDegree=1},s.updateDataArrayNone=function(){this.dataX=[NaN],this.dataY=[NaN],this.bezierDegree=1},s.updateDataArray=function(){var u=this.evalVisProp("type"),c=geometry_default.trueAngle(this.point2,this.point1,this.point3),p=this.evalVisProp("selection"),f=this.evalVisProp("orientation");(p==="minor"&&c>180||p==="major"&&c<180||p==="auto"&&f==="clockwise")&&(c=360-c),Math.abs(c-90)<this.evalVisProp("orthosensitivity")+math_default.eps&&(u=this.evalVisProp("orthotype")),u==="none"?(this.updateDataArrayNone(),this.maxX=function(){return 0}):u==="square"?(this.updateDataArraySquare(),this.maxX=function(){return 4}):u==="sector"?(this.updateDataArraySector(),this.maxX=function(){return 6}):u==="sectordot"&&(this.updateDataArraySector(),this.maxX=function(){return 6},this.dot.visProp.visible||this.dot.setAttribute({visible:!0})),(!this.visProp.visible||u!=="sectordot"&&this.dot.visProp.visible)&&this.dot.setAttribute({visible:!1})},n=type_default.copyAttributes(r,t.options,"angle","dot"),s.dot=t.create("point",[function(){var u,c,p,f,_,g,m,b,C,y;return type_default.exists(s.dot)&&!s.dot.visProp.visible?[0,0]:(u=s.point2.coords.usrCoords,c=s.point1.coords.usrCoords,p=s.Radius(),f=geometry_default.distance(u,c,3),_=geometry_default.rad(s.point2,s.point1,s.point3),C=s.evalVisProp("selection"),y=s.evalVisProp("orientation"),(C==="minor"&&_>Math.PI||C==="major"&&_<Math.PI||C==="auto"&&y==="clockwise")&&(_=-(2*Math.PI-_)),_*=.5,g=Math.cos(_),m=Math.sin(_),u=[1,c[1]+(u[1]-c[1])*p/f,c[2]+(u[2]-c[2])*p/f],b=[[1,0,0],[c[1]-.5*c[1]*g+.5*c[2]*m,g*.5,-m*.5],[c[2]-.5*c[1]*m-.5*c[2]*g,m*.5,g*.5]],math_default.matVecMult(b,u))}],n),s.dot.dump=!1,s.subs.dot=s.dot,d==="2lines")for(l=0;l<2;l++)t.select(e[l]).addChild(s.dot);else for(l=0;l<3;l++)t.select(h[l]).addChild(s.dot);return t.unsuspendUpdate(),s.Value=function(u){return u=u||"radians",u===""&&(u="radians"),s.arc.Value(u)},s.getLabelAnchor=function(){var u,c=12,p,f,_,g,m,b,C,y,x=s.evalVisProp("selection"),v=s.evalVisProp("orientation"),P=this.label?this.label.visProp:this.visProp.label,E=this.label?this.label.evalVisProp("position"):this.evalVisProp("label.position");return!type_default.isString(E)||E.indexOf("right")<0&&E.indexOf("left")<0?(type_default.exists(this.label)&&type_default.exists(this.label.visProp.fontsize)&&(c=this.label.evalVisProp("fontsize")),c/=this.board.unitX,p=s.point2.coords.usrCoords,f=s.point1.coords.usrCoords,_=s.Radius(),g=geometry_default.distance(p,f,3),m=geometry_default.rad(s.point2,s.point1,s.point3),(x==="minor"&&m>Math.PI||x==="major"&&m<Math.PI||x==="auto"&&v==="clockwise")&&(m=-(2*Math.PI-m)),m*=.5,b=Math.cos(m),C=Math.sin(m),p=[1,f[1]+(p[1]-f[1])*_/g,f[2]+(p[2]-f[2])*_/g],y=[[1,0,0],[f[1]-.5*f[1]*b+.5*f[2]*C,b*.5,-C*.5],[f[2]-.5*f[1]*C-.5*f[2]*b,C*.5,b*.5]],u=math_default.matVecMult(y,p),u[1]/=u[0],u[2]/=u[0],u[0]/=u[0],g=geometry_default.distance(u,f,3),u=[u[0],f[1]+(u[1]-f[1])*(_+c)/g,f[2]+(u[2]-f[2])*(_+c)/g],P.position=geometry_default.calcLabelQuadrant(geometry_default.rad([1,0],[0,0],u)),new coords_default(constants.COORDS_BY_USER,u,this.board)):this.getLabelPosition(E,this.label.evalVisProp("distance"))},type_default.extendInstanceMethodMap(s,{setAngle:"setAngle",Value:"Value",free:"free"}),s};jxg_default.registerElement("angle",jxg_default.createAngle);jxg_default.createNonreflexAngle=function(t,e,r){var s;return r.selection="minor",r=type_default.copyAttributes(r,t.options,"nonreflexangle"),s=jxg_default.createAngle(t,e,r),s.Value=function(o){var a=geometry_default.rad(this.point2,this.point1,this.point3);return o=o||"radians",o===""&&(o="radians"),a=a<Math.PI?a:2*Math.PI-a,this.arc.Value(o,a)},s};jxg_default.registerElement("nonreflexangle",jxg_default.createNonreflexAngle);jxg_default.createReflexAngle=function(t,e,r){var s;return r.selection="major",r=type_default.copyAttributes(r,t.options,"reflexangle"),s=jxg_default.createAngle(t,e,r),s.Value=function(o){var a=geometry_default.rad(this.point2,this.point1,this.point3);return o=o||"radians",o===""&&(o="radians"),a=a>=Math.PI?a:2*Math.PI-a,this.arc.Value(o,a)},s};jxg_default.registerElement("reflexangle",jxg_default.createReflexAngle);jxg_default.createOrthogonalProjection=function(t,e,r){var s,o,a,n;if(e[0]=t.select(e[0]),e[1]=t.select(e[1]),type_default.isPointType(t,e[0])&&e[1].elementClass===constants.OBJECT_CLASS_LINE)o=type_default.providePoints(t,[e[0]],r,"point")[0],s=e[1];else if(type_default.isPointType(t,e[1])&&e[0].elementClass===constants.OBJECT_CLASS_LINE)o=type_default.providePoints(t,[e[1]],r,"point")[0],s=e[0];else throw new Error("JSXGraph: Can't create perpendicular point with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
153
+ Possible parent types: [point,line]`);return n=type_default.copyAttributes(r,t.options,"orthogonalprojection"),a=t.create("point",[function(){return geometry_default.projectPointToLine(o,s,t)}],n),type_default.exists(o._is_new)?(a.addChild(o),delete o._is_new):o.addChild(a),s.addChild(a),a.elType="orthogonalprojection",a.setParents([o.id,a.id]),a.update(),a.generatePolynomial=function(){var l=s.point1.symbolic.x,h=s.point1.symbolic.y,d=s.point2.symbolic.x,u=s.point2.symbolic.y,c=o.symbolic.x,p=o.symbolic.y,f=a.symbolic.x,_=a.symbolic.y;return["("+h+")*("+f+")-("+h+")*("+d+")+("+_+")*("+d+")-("+l+")*("+_+")+("+l+")*("+u+")-("+f+")*("+u+")","("+p+")*("+h+")-("+p+")*("+u+")-("+_+")*("+h+")+("+_+")*("+u+")+("+c+")*("+l+")-("+c+")*("+d+")-("+f+")*("+l+")+("+f+")*("+d+")"]},a};jxg_default.createPerpendicular=function(t,e,r){var s,o,a,n;if(e[0]=t.select(e[0]),e[1]=t.select(e[1]),type_default.isPointType(t,e[0])&&e[1].elementClass===constants.OBJECT_CLASS_LINE)o=e[1],s=type_default.providePoints(t,[e[0]],r,"point")[0];else if(type_default.isPointType(t,e[1])&&e[0].elementClass===constants.OBJECT_CLASS_LINE)o=e[0],s=type_default.providePoints(t,[e[1]],r,"point")[0];else throw new Error("JSXGraph: Can't create perpendicular with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
154
+ Possible parent types: [line,point]`);return n=type_default.copyAttributes(r,t.options,"perpendicular"),a=jxg_default.createLine(t,[function(){return o.stdform[2]*s.X()-o.stdform[1]*s.Y()},function(){return-o.stdform[2]*s.Z()},function(){return o.stdform[1]*s.Z()}],n),a.elType="perpendicular",a.setParents([o.id,s.id]),type_default.exists(s._is_new)?(a.addChild(s),delete s._is_new):s.addChild(a),o.addChild(a),a};jxg_default.createPerpendicularPoint=function(t,e,r){var s,o,a;if(e[0]=t.select(e[0]),e[1]=t.select(e[1]),type_default.isPointType(t,e[0])&&e[1].elementClass===constants.OBJECT_CLASS_LINE)o=type_default.providePoints(t,[e[0]],r,"point")[0],s=e[1];else if(type_default.isPointType(t,e[1])&&e[0].elementClass===constants.OBJECT_CLASS_LINE)o=type_default.providePoints(t,[e[1]],r,"point")[0],s=e[0];else throw new Error("JSXGraph: Can't create perpendicular point with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
155
+ Possible parent types: [point,line]`);return a=t.create("point",[function(){return geometry_default.perpendicular(s,o,t)[0]}],r),type_default.exists(o._is_new)?(a.addChild(o),delete o._is_new):o.addChild(a),s.addChild(a),a.elType="perpendicularpoint",a.setParents([o.id,s.id]),a.update(),a.generatePolynomial=function(){var n=s.point1.symbolic.x,l=s.point1.symbolic.y,h=s.point2.symbolic.x,d=s.point2.symbolic.y,u=o.symbolic.x,c=o.symbolic.y,p=a.symbolic.x,f=a.symbolic.y;return["("+l+")*("+p+")-("+l+")*("+h+")+("+f+")*("+h+")-("+n+")*("+f+")+("+n+")*("+d+")-("+p+")*("+d+")","("+c+")*("+l+")-("+c+")*("+d+")-("+f+")*("+l+")+("+f+")*("+d+")+("+u+")*("+n+")-("+u+")*("+h+")-("+p+")*("+n+")+("+p+")*("+h+")"]},a};jxg_default.createPerpendicularSegment=function(t,e,r){var s,o,a,n,l;if(e[0]=t.select(e[0]),e[1]=t.select(e[1]),type_default.isPointType(t,e[0])&&e[1].elementClass===constants.OBJECT_CLASS_LINE)o=e[1],s=type_default.providePoints(t,[e[0]],r,"point")[0];else if(type_default.isPointType(t,e[1])&&e[0].elementClass===constants.OBJECT_CLASS_LINE)o=e[0],s=type_default.providePoints(t,[e[1]],r,"point")[0];else throw new Error("JSXGraph: Can't create perpendicular with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
156
+ Possible parent types: [line,point]`);return l=type_default.copyAttributes(r,t.options,"perpendicularsegment","point"),n=jxg_default.createPerpendicularPoint(t,[o,s],l),n.dump=!1,type_default.exists(r.layer)||(r.layer=t.options.layer.line),l=type_default.copyAttributes(r,t.options,"perpendicularsegment"),a=jxg_default.createLine(t,[function(){return geometry_default.perpendicular(o,s,t)[1]?[n,s]:[s,n]}],l),a.point=n,type_default.exists(s._is_new)?(a.addChild(s),delete s._is_new):s.addChild(a),o.addChild(a),a.elType="perpendicularsegment",a.setParents([s.id,o.id]),a.subs={point:n},a.inherits.push(n),a};jxg_default.createMidpoint=function(t,e,r){for(var s,o,a,n=0,l;n<e.length;++n)e[n]=t.select(e[n]);if(e.length===2&&type_default.isPointType(t,e[0])&&type_default.isPointType(t,e[1]))e=type_default.providePoints(t,e,r,"point"),s=e[0],o=e[1];else if(e.length===1&&e[0].elementClass===constants.OBJECT_CLASS_LINE)s=e[0].point1,o=e[0].point2;else throw new Error(`JSXGraph: Can't create midpoint.
157
+ Possible parent types: [point,point], [line]`);return l=type_default.copyAttributes(r,t.options,"midpoint"),a=t.create("point",[function(){var h=s.coords.usrCoords[1]+o.coords.usrCoords[1];return isNaN(h)||Math.abs(s.coords.usrCoords[0])<math_default.eps||Math.abs(o.coords.usrCoords[0])<math_default.eps?NaN:h*.5},function(){var h=s.coords.usrCoords[2]+o.coords.usrCoords[2];return isNaN(h)||Math.abs(s.coords.usrCoords[0])<math_default.eps||Math.abs(o.coords.usrCoords[0])<math_default.eps?NaN:h*.5}],l),type_default.exists(s._is_new)?(a.addChild(s),delete s._is_new):s.addChild(a),type_default.exists(o._is_new)?(a.addChild(o),delete o._is_new):o.addChild(a),a.elType="midpoint",a.setParents([s.id,o.id]),a.prepareUpdate().update(),a.generatePolynomial=function(){var h=s.symbolic.x,d=s.symbolic.y,u=o.symbolic.x,c=o.symbolic.y,p=a.symbolic.x,f=a.symbolic.y;return["("+d+")*("+p+")-("+d+")*("+u+")+("+f+")*("+u+")-("+h+")*("+f+")+("+h+")*("+c+")-("+p+")*("+c+")","("+h+")^2 - 2*("+h+")*("+p+")+("+d+")^2-2*("+d+")*("+f+")-("+u+")^2+2*("+u+")*("+p+")-("+c+")^2+2*("+c+")*("+f+")"]},a};jxg_default.createParallelPoint=function(t,e,r){for(var s,o,a,n,l=0,h;l<e.length;++l)e[l]=t.select(e[l]);if(e.length===3&&type_default.isPointType(t,e[0])&&type_default.isPointType(t,e[1])&&type_default.isPointType(t,e[2]))e=type_default.providePoints(t,e,r,"point"),s=e[0],o=e[1],a=e[2];else if(type_default.isPointType(t,e[0])&&e[1].elementClass===constants.OBJECT_CLASS_LINE)a=type_default.providePoints(t,[e[0]],r,"point")[0],s=e[1].point1,o=e[1].point2;else if(type_default.isPointType(t,e[1])&&e[0].elementClass===constants.OBJECT_CLASS_LINE)a=type_default.providePoints(t,[e[1]],r,"point")[0],s=e[0].point1,o=e[0].point2;else throw new Error("JSXGraph: Can't create parallel point with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+`'.
158
+ Possible parent types: [line,point], [point,point,point]`);return h=type_default.copyAttributes(r,t.options,"parallelpoint"),n=t.create("point",[function(){return a.coords.usrCoords[1]+o.coords.usrCoords[1]-s.coords.usrCoords[1]},function(){return a.coords.usrCoords[2]+o.coords.usrCoords[2]-s.coords.usrCoords[2]}],h),type_default.exists(s._is_new)?(n.addChild(s),delete s._is_new):s.addChild(n),type_default.exists(o._is_new)?(n.addChild(o),delete o._is_new):o.addChild(n),type_default.exists(a._is_new)?(n.addChild(a),delete a._is_new):a.addChild(n),n.elType="parallelpoint",n.setParents([s.id,o.id,a.id]),n.prepareUpdate().update(),n.generatePolynomial=function(){var d=s.symbolic.x,u=s.symbolic.y,c=o.symbolic.x,p=o.symbolic.y,f=a.symbolic.x,_=a.symbolic.y,g=n.symbolic.x,m=n.symbolic.y;return["("+p+")*("+g+")-("+p+")*("+f+")-("+u+")*("+g+")+("+u+")*("+f+")-("+m+")*("+c+")+("+m+")*("+d+")+("+_+")*("+c+")-("+_+")*("+d+")","("+m+")*("+d+")-("+m+")*("+f+")-("+p+")*("+d+")+("+p+")*("+f+")-("+g+")*("+u+")+("+g+")*("+_+")+("+c+")*("+u+")-("+c+")*("+_+")"]},n};jxg_default.createParallel=function(t,e,r){var s,o,a,n,l,h,d=1;for(l=0;l<e.length;++l)e[l]=t.select(e[l]);return s=null,e.length===3?(e=type_default.providePoints(t,e,r,"point"),s=e[2],d=0):type_default.isPointType(t,e[0])?(s=type_default.providePoints(t,[e[0]],r,"point")[0],n=function(){return e[1].stdform}):type_default.isPointType(t,e[1])&&(s=type_default.providePoints(t,[e[1]],r,"point")[0],n=function(){return e[0].stdform}),type_default.exists(r.layer)||(r.layer=t.options.layer.line),h=type_default.copyAttributes(r,t.options,"parallel","point"),d===1?o=t.create("point",[function(){return math_default.crossProduct([1,0,0],n())}],h):o=t.create("parallelpoint",e,h),o.isDraggable=!0,h=type_default.copyAttributes(r,t.options,"parallel"),a=t.create("line",[s,o],h),a.elType="parallel",a.subs={point:o},a.inherits.push(o),a.setParents([e[0].id,e[1].id]),e.length===3&&a.addParents(e[2].id),a.point=o,a};jxg_default.createArrowParallel=function(t,e,r){var s,o;try{return o=type_default.copyAttributes(r,t.options,"arrowparallel"),o.lastArrow===!1&&(o.lastArrow=!0),s=jxg_default.createParallel(t,e,o).setAttribute({straightFirst:!1,straightLast:!1}),s.type=constants.OBJECT_TYPE_VECTOR,s.elType="arrowparallel",s}catch{throw new Error("JSXGraph: Can't create arrowparallel with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
159
+ Possible parent types: [line,point], [point,point,point]`)}};jxg_default.createBisector=function(t,e,r){var s,o,a,n;if(e=type_default.providePoints(t,e,r,"point"),type_default.isPoint(e[0])&&type_default.isPoint(e[1])&&type_default.isPoint(e[2])){for(n=type_default.copyAttributes(r,t.options,"bisector","point"),n.snapToGrid=!1,s=t.create("point",[function(){return geometry_default.angleBisector(e[0],e[1],e[2],t)}],n),s.dump=!1,a=0;a<3;a++)type_default.exists(e[a]._is_new)?(s.addChild(e[a]),delete e[a]._is_new):e[a].addChild(s);return type_default.exists(r.layer)||(r.layer=t.options.layer.line),n=type_default.copyAttributes(r,t.options,"bisector"),o=jxg_default.createLine(t,[e[1],s],n),o.point=s,o.elType="bisector",o.setParents(e),o.subs={point:s},o.inherits.push(s),o}throw new Error("JSXGraph: Can't create angle bisector with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
160
+ Possible parent types: [point,point,point]`)};jxg_default.createAngularBisectorsOfTwoLines=function(t,e,r){var s,o,a,n,l=t.select(e[0]),h=t.select(e[1]);if(l.elementClass!==constants.OBJECT_CLASS_LINE||h.elementClass!==constants.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create angle bisectors of two lines with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
161
+ Possible parent types: [line,line]`);return type_default.exists(r.layer)||(r.layer=t.options.layer.line),a=type_default.copyAttributes(r,t.options,"bisectorlines","line1"),s=t.create("line",[function(){var d=math_default.hypot(l.stdform[1],l.stdform[2]),u=math_default.hypot(h.stdform[1],h.stdform[2]);return l.stdform[0]/d-h.stdform[0]/u},function(){var d=math_default.hypot(l.stdform[1],l.stdform[2]),u=math_default.hypot(h.stdform[1],h.stdform[2]);return l.stdform[1]/d-h.stdform[1]/u},function(){var d=math_default.hypot(l.stdform[1],l.stdform[2]),u=math_default.hypot(h.stdform[1],h.stdform[2]);return l.stdform[2]/d-h.stdform[2]/u}],a),type_default.exists(r.layer)||(r.layer=t.options.layer.line),a=type_default.copyAttributes(r,t.options,"bisectorlines","line2"),o=t.create("line",[function(){var d=math_default.hypot(l.stdform[1],l.stdform[2]),u=math_default.hypot(h.stdform[1],h.stdform[2]);return l.stdform[0]/d+h.stdform[0]/u},function(){var d=math_default.hypot(l.stdform[1],l.stdform[2]),u=math_default.hypot(h.stdform[1],h.stdform[2]);return l.stdform[1]/d+h.stdform[1]/u},function(){var d=math_default.hypot(l.stdform[1],l.stdform[2]),u=math_default.hypot(h.stdform[1],h.stdform[2]);return l.stdform[2]/d+h.stdform[2]/u}],a),n=new composition_default({line1:s,line2:o}),s.dump=!1,o.dump=!1,n.elType="bisectorlines",n.setParents([l.id,h.id]),n.subs={line1:s,line2:o},n};jxg_default.createCircumcenter=function(t,e,r){var s,o,a,n,l;if(e=type_default.providePoints(t,e,r,"point"),type_default.isPoint(e[0])&&type_default.isPoint(e[1])&&type_default.isPoint(e[2])){for(a=e[0],n=e[1],l=e[2],s=jxg_default.createPoint(t,[function(){return geometry_default.circumcenter(a,n,l,t)}],r),o=0;o<3;o++)type_default.exists(e[o]._is_new)?(s.addChild(e[o]),delete e[o]._is_new):e[o].addChild(s);return s.elType="circumcenter",s.setParents(e),s.generatePolynomial=function(){var h=a.symbolic.x,d=a.symbolic.y,u=n.symbolic.x,c=n.symbolic.y,p=l.symbolic.x,f=l.symbolic.y,_=s.symbolic.x,g=s.symbolic.y;return[["((",_,")-(",h,"))^2+((",g,")-(",d,"))^2-((",_,")-(",u,"))^2-((",g,")-(",c,"))^2"].join(""),["((",_,")-(",h,"))^2+((",g,")-(",d,"))^2-((",_,")-(",p,"))^2-((",g,")-(",f,"))^2"].join("")]},s}throw new Error("JSXGraph: Can't create circumcircle midpoint with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+`'.
162
+ Possible parent types: [point,point,point]`)};jxg_default.createIncenter=function(t,e,r){var s,o,a,n,l;if(e=type_default.providePoints(t,e,r,"point"),e.length>=3&&type_default.isPoint(e[0])&&type_default.isPoint(e[1])&&type_default.isPoint(e[2])){for(o=e[0],a=e[1],n=e[2],s=t.create("point",[function(){var h=math_default.hypot(a.X()-n.X(),a.Y()-n.Y()),d=math_default.hypot(o.X()-n.X(),o.Y()-n.Y()),u=math_default.hypot(a.X()-o.X(),a.Y()-o.Y());return new coords_default(constants.COORDS_BY_USER,[(h*o.X()+d*a.X()+u*n.X())/(h+d+u),(h*o.Y()+d*a.Y()+u*n.Y())/(h+d+u)],t)}],r),l=0;l<3;l++)type_default.exists(e[l]._is_new)?(s.addChild(e[l]),delete e[l]._is_new):e[l].addChild(s);s.elType="incenter",s.setParents(e)}else throw new Error("JSXGraph: Can't create incenter with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+`'.
163
+ Possible parent types: [point,point,point]`);return s};jxg_default.createCircumcircle=function(t,e,r){var s,o,a,n;if(e=type_default.providePoints(t,e,r,"point"),e===!1)throw new Error("JSXGraph: Can't create circumcircle with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+`'.
164
+ Possible parent types: [point,point,point]`);try{for(a=type_default.copyAttributes(r,t.options,"circumcircle","center"),s=jxg_default.createCircumcenter(t,e,a),s.dump=!1,type_default.exists(r.layer)||(r.layer=t.options.layer.circle),a=type_default.copyAttributes(r,t.options,"circumcircle"),o=jxg_default.createCircle(t,[s,e[0]],a),o.elType="circumcircle",o.setParents(e),o.subs={center:s},o.inherits.push(o),n=0;n<3;n++)type_default.exists(e[n]._is_new)?(o.addChild(e[n]),delete e[n]._is_new):e[n].addChild(o)}catch{throw new Error("JSXGraph: Can't create circumcircle with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+`'.
165
+ Possible parent types: [point,point,point]`)}return o};jxg_default.createIncircle=function(t,e,r){var s,o,a,n;if(e=type_default.providePoints(t,e,r,"point"),e===!1)throw new Error("JSXGraph: Can't create circumcircle with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+`'.
166
+ Possible parent types: [point,point,point]`);try{for(n=type_default.copyAttributes(r,t.options,"incircle","center"),o=jxg_default.createIncenter(t,e,n),o.dump=!1,type_default.exists(r.layer)||(r.layer=t.options.layer.circle),n=type_default.copyAttributes(r,t.options,"incircle"),a=jxg_default.createCircle(t,[o,function(){var l=math_default.hypot(e[1].X()-e[2].X(),e[1].Y()-e[2].Y()),h=math_default.hypot(e[0].X()-e[2].X(),e[0].Y()-e[2].Y()),d=math_default.hypot(e[1].X()-e[0].X(),e[1].Y()-e[0].Y()),u=(l+h+d)/2;return Math.sqrt((u-l)*(u-h)*(u-d)/u)}],n),a.elType="incircle",a.setParents(e),s=0;s<3;s++)type_default.exists(e[s]._is_new)?(a.addChild(e[s]),delete e[s]._is_new):e[s].addChild(a);a.center=o,a.subs={center:a.center},a.inherits.push(o)}catch{throw new Error("JSXGraph: Can't create circumcircle with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+`'.
167
+ Possible parent types: [point,point,point]`)}return a};jxg_default.createReflection=function(t,e,r){var s,o,a,n,l,h,d,u,c=`
168
+ Possible parent types: [point|line|curve|polygon|circle|arc|sector, line]`;for(h=0;h<e.length;++h)e[h]=t.select(e[h]);if(d=type_default.copyAttributes(r,t.options,"reflection"),type_default.isPoint(e[0]))o=type_default.providePoints(t,[e[0]],u)[0];else if(e[0].elementClass===constants.OBJECT_CLASS_CURVE||e[0].elementClass===constants.OBJECT_CLASS_LINE||e[0].type===constants.OBJECT_TYPE_POLYGON||e[0].elementClass===constants.OBJECT_CLASS_CIRCLE)o=e[0];else throw new Error("JSXGraph: Can't create reflection element with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'."+c);if(e[1].elementClass===constants.OBJECT_CLASS_LINE)s=e[1];else throw new Error("JSXGraph: Can't create reflected element with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'."+c);if(l=jxg_default.createTransform(t,[s],{type:"reflect"}),type_default.isPoint(o))a=jxg_default.createPoint(t,[o,l],d);else if(o.elementClass===constants.OBJECT_CLASS_CURVE)a=jxg_default.createCurve(t,[o,l],d);else if(o.elementClass===constants.OBJECT_CLASS_LINE)a=jxg_default.createLine(t,[o,l],d);else if(o.type===constants.OBJECT_TYPE_POLYGON)a=jxg_default.createPolygon(t,[o,l],d);else if(o.elementClass===constants.OBJECT_CLASS_CIRCLE)d.type.toLowerCase()==="euclidean"?(u=type_default.copyAttributes(r,t.options,"reflection","center"),n=jxg_default.createPoint(t,[o.center,l],u),n.prepareUpdate().update().updateVisibility(n.evalVisProp("visible")).updateRenderer(),a=jxg_default.createCircle(t,[n,function(){return o.Radius()}],d)):a=jxg_default.createCircle(t,[o,l],d);else throw new Error("JSXGraph: Can't create reflected element with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'."+c);return type_default.exists(o._is_new)&&(a.addChild(o),delete o._is_new),s.addChild(a),a.elType="reflection",a.addParents(s),a.prepareUpdate().update(),type_default.isPoint(a)&&(a.generatePolynomial=function(){var p=s.point1.symbolic.x,f=s.point1.symbolic.y,_=s.point2.symbolic.x,g=s.point2.symbolic.y,m=o.symbolic.x,b=o.symbolic.y,C=a.symbolic.x,y=a.symbolic.y;return[["((",y,")-(",b,"))*((",f,")-(",g,"))+((",p,")-(",_,"))*((",C,")-(",m,"))"].join(""),["((",C,")-(",p,"))^2+((",y,")-(",f,"))^2-((",m,")-(",p,"))^2-((",b,")-(",f,"))^2"].join("")]}),a};jxg_default.createMirrorElement=function(t,e,r){var s,o,a,n,l,h,d,u,c=`
169
+ Possible parent types: [point|line|curve|polygon|circle|arc|sector, point]`;for(o=0;o<e.length;++o)e[o]=t.select(e[o]);if(d=type_default.copyAttributes(r,t.options,"mirrorelement"),type_default.isPoint(e[0]))s=type_default.providePoints(t,[e[0]],d)[0];else if(e[0].elementClass===constants.OBJECT_CLASS_CURVE||e[0].elementClass===constants.OBJECT_CLASS_LINE||e[0].type===constants.OBJECT_TYPE_POLYGON||e[0].elementClass===constants.OBJECT_CLASS_CIRCLE)s=e[0];else throw new Error("JSXGraph: Can't create mirror element with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'."+c);if(type_default.isPoint(e[1]))u=type_default.copyAttributes(r,t.options,"mirrorelement","point"),a=type_default.providePoints(t,[e[1]],u)[0];else throw new Error("JSXGraph: Can't create mirror element with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'."+c);if(h=jxg_default.createTransform(t,[Math.PI,a],{type:"rotate"}),type_default.isPoint(s))n=jxg_default.createPoint(t,[s,h],d);else if(s.elementClass===constants.OBJECT_CLASS_CURVE)n=jxg_default.createCurve(t,[s,h],d);else if(s.elementClass===constants.OBJECT_CLASS_LINE)n=jxg_default.createLine(t,[s,h],d);else if(s.type===constants.OBJECT_TYPE_POLYGON)n=jxg_default.createPolygon(t,[s,h],d);else if(s.elementClass===constants.OBJECT_CLASS_CIRCLE)d.type.toLowerCase()==="euclidean"?(u=type_default.copyAttributes(r,t.options,"mirrorelement","center"),l=jxg_default.createPoint(t,[s.center,h],u),l.prepareUpdate().update().updateVisibility(l.evalVisProp("visible")).updateRenderer(),n=jxg_default.createCircle(t,[l,function(){return s.Radius()}],d)):n=jxg_default.createCircle(t,[s,h],d);else throw new Error("JSXGraph: Can't create mirror element with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'."+c);return type_default.exists(s._is_new)&&(n.addChild(s),delete s._is_new),a.addChild(n),n.elType="mirrorelement",n.addParents(a),n.prepareUpdate().update(),n};jxg_default.createMirrorPoint=function(t,e,r){var s=jxg_default.createMirrorElement(t,e,r);return s.elType="mirrorpoint",s};jxg_default.createIntegral=function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f,_,g,m,b=null,C;if(type_default.isArray(e[0])&&e[1].elementClass===constants.OBJECT_CLASS_CURVE)s=e[0],o=e[1];else if(type_default.isArray(e[1])&&e[0].elementClass===constants.OBJECT_CLASS_CURVE)s=e[1],o=e[0];else throw new Error("JSXGraph: Can't create integral with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
170
+ Possible parent types: [[number|function,number|function],curve]`);return a=type_default.copyAttributes(r,t.options,"integral"),a.withlabel=!1,C=t.create("curve",[[0],[0]],a),t.objectsList.pop(),n=s[0],l=s[1],type_default.isFunction(n)?(h=n,d=function(){return o.Y(h())},n=h()):(h=n,d=o.Y(n)),type_default.isFunction(l)?(u=l,c=function(){return o.Y(u())},l=u()):(u=l,c=o.Y(l)),a=type_default.copyAttributes(r,t.options,"integral","curveleft"),p=t.create("glider",[h,d,o],a),type_default.isFunction(h)&&p.hideElement(),a=type_default.copyAttributes(r,t.options,"integral","baseleft"),f=t.create("point",[function(){return C.evalVisProp("axis")==="y"?0:p.X()},function(){return C.evalVisProp("axis")==="y"?p.Y():0}],a),a=type_default.copyAttributes(r,t.options,"integral","curveright"),_=t.create("glider",[u,c,o],a),type_default.isFunction(u)&&_.hideElement(),a=type_default.copyAttributes(r,t.options,"integral","baseright"),g=t.create("point",[function(){return C.evalVisProp("axis")==="y"?0:_.X()},function(){return C.evalVisProp("axis")==="y"?_.Y():0}],a),C._pos=t.objectsList.length,t.objectsList.push(C),a=type_default.copyAttributes(r,t.options,"integral"),a.withlabel!==!1&&a.axis!=="y"&&(a=type_default.copyAttributes(r,t.options,"integral","label"),a=type_default.copyAttributes(a,t.options,"label"),b=t.create("text",[function(){var y=new coords_default(constants.COORDS_BY_SCREEN,[this.evalVisProp("offset.0")+this.board.origin.scrCoords[1],0],this.board,!1),x=this.board.getBoundingBox(),v=(x[2]-x[0])*.1,P=_.X();return P<x[0]?P=x[0]+v:P>x[2]&&(P=x[2]-v),P+y.usrCoords[1]},function(){var y=new coords_default(constants.COORDS_BY_SCREEN,[0,this.evalVisProp("offset.1")+this.board.origin.scrCoords[2]],this.board,!1),x=this.board.getBoundingBox(),v=(x[1]-x[3])*.1,P=_.Y();return P>x[1]?P=x[1]-v:P<x[3]&&(P=x[3]+v),P+y.usrCoords[2]},""],a),m=function(){var y="&int;",x=numerics_default.NewtonCotes([f.X(),g.X()],o.Y),v=b.evalVisProp("digits"),P;return b.useLocale()?P=b.formatNumberLocale(x,v):P=type_default.toFixed(x,v),(b.evalVisProp("usemathjax")||b.evalVisProp("usekatex"))&&(y="\\int"),y+" = "+P},b.setText(m),b.dump=!1,p.addChild(b),_.addChild(b)),p.dump=!1,f.dump=!1,_.dump=!1,g.dump=!1,C.elType="integral",C.setParents([o.id,s]),C.subs={curveLeft:p,baseLeft:f,curveRight:_,baseRight:g},C.inherits.push(p,f,_,g),a.withlabel&&(C.subs.label=b,C.inherits.push(b)),C.Value=function(){return numerics_default.I([f.X(),g.X()],o.Y)},C.updateDataArray=function(){var y,x,v,P,E,w,O,S,M;if(this.evalVisProp("axis")==="y"){for(p.Y()<_.Y()?(w=p.X(),S=p.Y(),O=_.X(),M=_.Y()):(w=_.X(),S=_.Y(),O=p.X(),M=p.Y()),P=Math.min(w,O),E=Math.max(w,O),y=[0,w],x=[S,S],v=0;v<o.numberPoints;v++)S<=o.points[v].usrCoords[2]&&P<=o.points[v].usrCoords[1]&&o.points[v].usrCoords[2]<=M&&o.points[v].usrCoords[1]<=E&&(y.push(o.points[v].usrCoords[1]),x.push(o.points[v].usrCoords[2]));y.push(O),x.push(M),y.push(0),x.push(M),y.push(0),x.push(S)}else{for(f.X()<g.X()?(P=f.X(),E=g.X()):(P=g.X(),E=f.X()),y=[P,P],x=[0,o.Y(P)],v=0;v<o.numberPoints;v++)P<=o.points[v].usrCoords[1]&&o.points[v].usrCoords[1]<=E&&(y.push(o.points[v].usrCoords[1]),x.push(o.points[v].usrCoords[2]));y.push(E),x.push(o.Y(E)),y.push(E),x.push(0),y.push(P),x.push(0)}this.dataX=y,this.dataY=x},p.addChild(C),_.addChild(C),f.addChild(C),g.addChild(C),C.baseLeft=f,C.baseRight=g,C.curveLeft=p,C.curveRight=_,C.label=b,type_default.extendInstanceMethodMap(C,{curveLeft:"curveLeft",baseLeft:"baseLeft",curveRight:"curveRight",baseRight:"baseRight",Value:"Value"}),C};jxg_default.createInequality=function(t,e,r){var s,o,a=type_default.copyAttributes(r,t.options,"inequality");if(e[0].elementClass===constants.OBJECT_CLASS_LINE)o=t.create("curve",[[],[]],a),o.hasPoint=function(){return!1},o.updateDataArray=function(){var n,l,h,d=t.getBoundingBox(),u=this.evalVisProp("inverse"),c=u?-1:1,p=1.5,f=p*Math.max(d[2]-d[0],d[1]-d[3]),_={coords:{usrCoords:[1,(d[0]+d[2])*.5,u?d[1]:d[3]]}},g=e[0].stdform.slice(1),m=g;h=p*Math.max(geometry_default.perpendicular(e[0],_,t)[0].distance(constants.COORDS_BY_USER,_.coords),f),h*=c,_={coords:{usrCoords:[1,(d[0]+d[2])*.5,(d[1]+d[3])*.5]}},Math.abs(math_default.innerProduct(_.coords.usrCoords,e[0].stdform,3))>=math_default.eps?_=geometry_default.perpendicular(e[0],_,t)[0].usrCoords:_=_.coords.usrCoords,n=[1,_[1]+g[1]*f,_[2]-g[0]*f],l=[1,_[1]-m[1]*f,_[2]+m[0]*f],this.dataX=[n[1],n[1]+g[0]*h,l[1]+m[0]*h,l[1],n[1]],this.dataY=[n[2],n[2]+g[1]*h,l[2]+m[1]*h,l[2],n[2]]};else if(e[0].elementClass===constants.OBJECT_CLASS_CURVE&&e[0].visProp.curvetype==="functiongraph")o=t.create("curve",[[],[]],a),o.updateDataArray=function(){var n=this.board.getBoundingBox(),l=[],h,d,u,c,p,f=1/0,_=-1/0,g,m=e[0].minX(),b=e[0].maxX(),C,y,x,v,P=(n[1]-n[3])*1;if(h=this.evalVisProp("inverse")?1:3,this.dataX=[],this.dataY=[],c=e[0].points.length,c!==0)for(n[1]+=P,n[3]-=P,u=-1;u<c-1;){for(p=u+1,d=c;p<c;p++)if(e[0].points[p].isReal()){d=p;break}if(d>=c)break;for(p=d,u=c-1;p<c-1;p++)if(!e[0].points[p+1].isReal()){u=p;break}for(x=e[0].points[d].usrCoords[1],v=e[0].points[u].usrCoords[1],C=n[0]<m?m:n[0],y=n[2]>b?b:n[2],C=d===0?C:Math.max(C,x),y=u===c-1?y:Math.min(y,v),C=d===0?m:x,y=u===c-1?b:v,l=[],l.push([1,C,n[h]]),l.push([1,C,e[0].points[d].usrCoords[2]]),p=d;p<=u;p++)g=e[0].points[p].usrCoords,l.push(e[0].points[p].usrCoords),f=g[2]<f?g[2]:f,_=g[2]>_?g[2]:_;for(h===1?l[0][2]=_+P:l[0][2]=f-P,l.push([1,y,e[0].points[u].usrCoords[2]]),l.push([1,y,n[h]]),l.push(l[0]),p=0;p<l.length;p++)this.dataX.push(l[p][1]),this.dataY.push(l[p][2]);u<c-1&&(this.dataX.push(NaN),this.dataY.push(NaN))}},o.hasPoint=function(){return!1};else if(s=type_default.createFunction(e[0]),o.addParentsFromJCFunctions([s]),!type_default.exists(s))throw new Error(`JSXGraph: Can't create area with the given parents.
171
+ Possible parent types: [line], [function]`);return o.addParents(e[0]),o};jxg_default.registerElement("arrowparallel",jxg_default.createArrowParallel);jxg_default.registerElement("bisector",jxg_default.createBisector);jxg_default.registerElement("bisectorlines",jxg_default.createAngularBisectorsOfTwoLines);jxg_default.registerElement("msector",jxg_default.createMsector);jxg_default.registerElement("circumcircle",jxg_default.createCircumcircle);jxg_default.registerElement("circumcirclemidpoint",jxg_default.createCircumcenter);jxg_default.registerElement("circumcenter",jxg_default.createCircumcenter);jxg_default.registerElement("incenter",jxg_default.createIncenter);jxg_default.registerElement("incircle",jxg_default.createIncircle);jxg_default.registerElement("integral",jxg_default.createIntegral);jxg_default.registerElement("midpoint",jxg_default.createMidpoint);jxg_default.registerElement("mirrorelement",jxg_default.createMirrorElement);jxg_default.registerElement("mirrorpoint",jxg_default.createMirrorPoint);jxg_default.registerElement("orthogonalprojection",jxg_default.createOrthogonalProjection);jxg_default.registerElement("parallel",jxg_default.createParallel);jxg_default.registerElement("parallelpoint",jxg_default.createParallelPoint);jxg_default.registerElement("perpendicular",jxg_default.createPerpendicular);jxg_default.registerElement("perpendicularpoint",jxg_default.createPerpendicularPoint);jxg_default.registerElement("perpendicularsegment",jxg_default.createPerpendicularSegment);jxg_default.registerElement("reflection",jxg_default.createReflection);jxg_default.registerElement("inequality",jxg_default.createInequality);jxg_default.createGrid=function(t,e,r){var s=math_default.eps,o=5e3,a,n,l,h,d,u,c,p=[],f=[],_;if(l=e,l.length>2||l.length>=1&&l[0].elType!=="axis"||l.length>=2&&l[1].elType!=="axis")throw new Error("JSXGraph: Can't create 'grid' with parent type '"+e[0].elType+"'. Possible parent types: [axis,axis]");return!type_default.exists(l[0])&&type_default.exists(t.defaultAxes)&&(l[0]=t.defaultAxes.x),!type_default.exists(l[1])&&type_default.exists(t.defaultAxes)&&(l[1]=t.defaultAxes.y),_=function(g,m,b,C,y,x,v){var P,E,w,O,S,M,N;switch(g.toLowerCase()){case".":case"point":return m.visProp.linecap="round",m.visProp.strokewidth=y*m.board.unitX+x*m.board.unitY,[[b,b,NaN],[C,C,NaN]];case"o":case"circle":return m.visProp.linecap="square",m.bezierDegree=3,E=4*Math.tan(Math.PI/8)/3,[[b+y,b+y,b+E*y,b,b-E*y,b-y,b-y,b-y,b-E*y,b,b+E*y,b+y,b+y,NaN],[C,C+E*x,C+x,C+x,C+x,C+E*x,C,C-E*x,C-x,C-x,C-x,C-E*x,C,NaN]];case"regpol":case"regularpolygon":for(m.visProp.linecap="round",O=m.evalVisProp("polygonvertices"),S=[[],[]],P=0;P<=2*Math.PI;P+=2*Math.PI/O)S[0].push(b-y*Math.sin(P)),S[1].push(C-x*Math.cos(P));return S[0].push(NaN),S[1].push(NaN),S;case"[]":case"square":return m.visProp.linecap="square",[[b-y,b+y,b+y,b-y,b-y,NaN],[C+x,C+x,C-x,C-x,C+x,NaN]];case"<>":case"diamond":return m.visProp.linecap="square",[[b,b+y,b,b-y,b,NaN],[C+x,C,C-x,C,C+x,NaN]];case"<<>>":case"diamond2":return m.visProp.linecap="square",M=y*Math.sqrt(2),N=x*Math.sqrt(2),[[b,b+M,b,b-M,b,NaN],[C+N,C,C-N,C,C+N,NaN]];case"x":case"cross":return[[b-y,b+y,NaN,b-y,b+y,NaN],[C+x,C-x,NaN,C-x,C+x,NaN]];case"+":case"plus":return[[b-y,b+y,NaN,b,b,NaN],[C,C,NaN,C-x,C+x,NaN]];case"-":case"minus":return[[b-y,b+y,NaN],[C,C,NaN]];case"|":case"divide":return[[b,b,NaN],[C-x,C+x,NaN]];case"^":case"a":case"A":case"triangleup":return[[b-y,b,b+y,NaN],[C-x,C,C-x,NaN]];case"v":case"triangledown":return[[b-y,b,b+y,NaN],[C+x,C,C+x,NaN]];case"<":case"triangleleft":return[[b+y,b,b+y,NaN],[C+x,C,C-x,NaN]];case">":case"triangleright":return[[b-y,b,b-y,NaN],[C+x,C,C-x,NaN]];case"line":return w=m.evalVisProp("margin"),[[b,b,NaN,v[0]-w/m.board.unitX,v[2]+w/m.board.unitX,NaN],[v[1]+w/m.board.unitY,v[3]-w/m.board.unitY,NaN,C,C,NaN]];default:return[[],[]]}},h=type_default.copyAttributes(r,t.options,"grid"),type_default.mergeAttr(h,h.themes[h.theme],!1),d={},type_default.mergeAttr(d,h,!0,!0),type_default.mergeAttr(d,h.major,!0,!0),a=t.create("curve",[[null],[null]],d),a.elType="grid",a.type=constants.OBJECT_TYPE_GRID,u={},type_default.mergeAttr(u,h,!0,!0),type_default.mergeAttr(u,h.minor,!0,!0),u.id===d.id&&(u.id=a.id+"_minor"),u.name===d.name&&(u.name=a.name+"_minor"),n=t.create("curve",[[null],[null]],u),n.elType="grid",n.type=constants.OBJECT_TYPE_GRID,a.minorGrid=n,n.majorGrid=a,a.hasPoint=function(){return!1},n.hasPoint=function(){return!1},a.inherits.push(n),a.updateDataArray=function(){var g=this.board.getBoundingBox(),m,b,C,y,x,v,P,E,w=this.evalVisProp("gridx"),O=this.evalVisProp("gridy"),S=this.evalVisProp("face"),M=this.evalVisProp("drawzero"),N=M===!0||type_default.isObject(M)&&this.eval(M.origin)===!0,j=M===!0||type_default.isObject(M)&&this.eval(M.x)===!0,k=M===!0||type_default.isObject(M)&&this.eval(M.y)===!0,B=this.evalVisProp("includeboundaries"),I=this.evalVisProp("forcesquare");if(this.dataX=[],this.dataY=[],c=this.evalVisProp("majorstep"),type_default.isArray(c)||(c=[c,c]),c.length<2&&(c=[c[0],c[0]]),type_default.exists(w)&&(jxg_default.deprecated("gridX","majorStep"),c[0]=w),type_default.exists(O)&&(jxg_default.deprecated("gridY","majorStep"),c[1]=O),c[0]==="auto"?(E=Math.pow(10,Math.floor(Math.log(50/this.board.unitX)/Math.LN10)),c[0]=E,type_default.exists(l[0])&&(c[0]=l[0].ticks[0].getDistanceMajorTicks())):c[0]=type_default.parseNumber(c[0],Math.abs(g[1]-g[3]),1/this.board.unitX),c[1]==="auto"?(E=Math.pow(10,Math.floor(Math.log(50/this.board.unitY)/Math.LN10)),c[1]=E,type_default.exists(l[1])&&(c[1]=l[1].ticks[0].getDistanceMajorTicks())):c[1]=type_default.parseNumber(c[1],Math.abs(g[0]-g[2]),1/this.board.unitY),I==="min"||I===!0?c[0]*this.board.unitX<=c[1]*this.board.unitY?c[1]=c[0]/this.board.unitY*this.board.unitX:c[0]=c[1]/this.board.unitX*this.board.unitY:I==="max"&&(c[0]*this.board.unitX<=c[1]*this.board.unitY?c[0]=c[1]/this.board.unitX*this.board.unitY:c[1]=c[0]/this.board.unitY*this.board.unitX),p=this.evalVisProp("size"),type_default.isArray(p)||(p=[p,p]),p.length<2&&(p=[p[0],p[0]]),type_default.isNumber(p[0],!0)&&(p[0]=p[0]+"px"),type_default.isNumber(p[1],!0)&&(p[1]=p[1]+"px"),p[0]=type_default.parseNumber(p[0],c[0],1/this.board.unitX),p[1]=type_default.parseNumber(p[1],c[1],1/this.board.unitY),f[0]=p[0]/2,f[1]=p[1]/2,m=math_default.roundToStep(g[0],c[0]),b=math_default.roundToStep(g[1],c[1]),P=isFinite(m)&&isFinite(b)&&isFinite(g[2])&&isFinite(g[3])&&Math.abs(g[2])<Math.abs(c[0]*o)&&Math.abs(g[3])<Math.abs(c[1]*o),S.toLowerCase()==="line"){for(x=a.evalVisProp("margin"),y=b;P&&y>=g[3];y-=c[1])!N&&Math.abs(y)<s||!k&&Math.abs(y)<s||!B&&(y<=g[3]+f[1]||y>=g[1]-f[1])||(v=[[g[0]-x/a.board.unitX,g[2]+x/a.board.unitX,NaN],[y,y,NaN]],type_default.concat(this.dataX,v[0]),type_default.concat(this.dataY,v[1]));for(C=m;P&&C<=g[2];C+=c[0])!N&&Math.abs(C)<s||!j&&Math.abs(C)<s||!B&&(C<=g[0]+f[0]||C>=g[2]-f[0])||(v=[[C,C,NaN],[g[1]+x/a.board.unitY,g[3]-x/a.board.unitY,NaN]],type_default.concat(this.dataX,v[0]),type_default.concat(this.dataY,v[1]))}else for(y=b;P&&y>=g[3];y-=c[1])for(C=m;P&&C<=g[2];C+=c[0])!N&&Math.abs(y)<s&&Math.abs(C)<s||!j&&Math.abs(y)<s&&Math.abs(C)>=s||!k&&Math.abs(C)<s&&Math.abs(y)>=s||!B&&(C<=g[0]+f[0]||C>=g[2]-f[0]||y<=g[3]+f[1]||y>=g[1]-f[1])||(v=_(S,a,C,y,f[0],f[1],g),type_default.concat(this.dataX,v[0]),type_default.concat(this.dataY,v[1]))},n.updateDataArray=function(){var g=this.board.getBoundingBox(),m,b,C,y,x,v,P,E=[],w=[],O,S,M,N,j,k,B,I,X,J,Y,F,D=this.evalVisProp("minorelements"),A=this.evalVisProp("size"),T=this.evalVisProp("face"),U=this.evalVisProp("drawzero"),V=U===!0||type_default.isObject(U)&&this.eval(U.x)===!0,K=U===!0||type_default.isObject(U)&&this.eval(U.y)===!0,H=this.majorGrid.evalVisProp("face"),G=this.majorGrid.evalVisProp("drawzero"),tt=G===!0||type_default.isObject(G)&&this.eval(G.origin)===!0,st=G===!0||type_default.isObject(G)&&this.eval(G.x)===!0,it=G===!0||type_default.isObject(G)&&this.eval(G.y)===!0,et=this.evalVisProp("includeboundaries");if(this.dataX=[],this.dataY=[],type_default.isArray(D)||(D=[D,D]),D.length<2&&(D=[D[0],D[0]]),type_default.isNumber(D[0],!0)?D[0]=parseFloat(D[0]):(D[0]=3,type_default.exists(l[0])&&(D[0]=l[0].eval(l[0].getAttribute("ticks").minorticks))),E[0]=c[0]/(D[0]+1),type_default.isNumber(D[1],!0)?D[1]=parseFloat(D[1]):(D[1]=3,type_default.exists(l[1])&&(D[1]=l[1].eval(l[1].getAttribute("ticks").minorticks))),E[1]=c[1]/(D[1]+1),type_default.isArray(A)||(A=[A,A]),A.length<2&&(A=[A[0],A[0]]),type_default.isNumber(A[0],!0)&&(A[0]=A[0]+"px"),type_default.isNumber(A[1],!0)&&(A[1]=A[1]+"px"),A[0]=type_default.parseNumber(A[0],E[0],1/this.board.unitX),A[1]=type_default.parseNumber(A[1],E[1],1/this.board.unitY),w[0]=A[0]*.5,w[1]=A[1]*.5,m=math_default.roundToStep(g[0],E[0]),b=math_default.roundToStep(g[1],E[1]),P=isFinite(m)&&isFinite(b)&&isFinite(g[2])&&isFinite(g[3])&&Math.abs(g[2])<=Math.abs(E[0]*o)&&Math.abs(g[3])<Math.abs(E[1]*o),T.toLowerCase()!=="line")for(y=b;P&&y>=g[3];y-=E[1])for(C=m;P&&C<=g[2];C+=E[0]){if(O=math_default.roundToStep(Math.abs(C),c[0]),O=Math.abs(O-Math.abs(C)),S=c[0]-O,M=math_default.roundToStep(Math.abs(y),c[1]),M=Math.abs(M-Math.abs(y)),N=c[1]-M,H==="line"){if(O-w[0]-f[0]<s||S-w[0]-f[0]<s||M-w[1]-f[1]<s||N-w[1]-f[1]<s)continue}else if((O-w[0]-f[0]<s||S-w[0]-f[0]<s)&&(M-w[1]-f[1]<s||N-w[1]-f[1]<s)&&(tt||f[1]-Math.abs(y)+w[1]<s||f[0]-Math.abs(C)+w[0]<s)&&(st||f[1]-Math.abs(y)+w[1]<s||f[0]+Math.abs(C)-w[0]<s)&&(it||f[0]-Math.abs(C)+w[0]<s||f[1]+Math.abs(y)-w[1]<s))continue;!K&&Math.abs(C)<s||!V&&Math.abs(y)<s||(j=Math.abs(g[0]%c[0]),k=Math.abs(g[1]%c[1]),B=Math.abs(g[2]%c[0]),I=Math.abs(g[3]%c[1]),X=c[0]-j,J=c[1]-k,Y=c[0]-B,F=c[1]-I,!(!et&&(C-w[0]-g[0]-f[0]+X<s&&X-f[0]<s||C-w[0]-g[0]-f[0]-j<s&&j-f[0]<s||-C-w[0]+g[2]-f[0]+Y<s&&Y-f[0]<s||-C-w[0]+g[2]-f[0]-B<s&&B-f[0]<s||-y-w[1]+g[1]-f[1]+J<s&&J-f[1]<s||-y-w[1]+g[1]-f[1]-k<s&&k-f[1]<s||y-w[1]-g[3]-f[1]+F<s&&F-f[1]<s||y-w[1]-g[3]-f[1]-I<s&&I-f[1]<s||-y-w[1]+g[1]<s||C-w[0]-g[0]<s||y-w[1]-g[3]<s||-C-w[0]+g[2]<s))&&(v=_(T,n,C,y,w[0],w[1],g),type_default.concat(this.dataX,v[0]),type_default.concat(this.dataY,v[1])))}else{for(x=n.evalVisProp("margin"),y=b;P&&y>=g[3];y-=E[1]){if(M=math_default.roundToStep(Math.abs(y),c[1]),M=Math.abs(M-Math.abs(y)),N=c[1]-M,H==="line"){if(M-w[1]-f[1]<s||N-w[1]-f[1]<s)continue}else if((M-w[1]-f[1]<s||N-w[1]-f[1]<s)&&(tt||f[1]-Math.abs(y)+w[1]<s)&&(st||f[1]-Math.abs(y)+w[1]<s)&&(it||f[1]+Math.abs(y)-w[1]<s))continue;!V&&Math.abs(y)<s||(j=Math.abs(g[0]%c[0]),k=Math.abs(g[1]%c[1]),B=Math.abs(g[2]%c[0]),I=Math.abs(g[3]%c[1]),X=c[0]-j,J=c[1]-k,Y=c[0]-B,F=c[1]-I,!(!et&&(-y-w[1]+g[1]-f[1]+J<s&&J-f[1]<s||-y-w[1]+g[1]-f[1]-k<s&&k-f[1]<s||y-w[1]-g[3]-f[1]+F<s&&F-f[1]<s||y-w[1]-g[3]-f[1]-I<s&&I-f[1]<s||-y-w[1]+g[1]<s||y-w[1]-g[3]<s))&&(v=[[g[0]-x/n.board.unitX,g[2]+x/n.board.unitX,NaN],[y,y,NaN]],type_default.concat(this.dataX,v[0]),type_default.concat(this.dataY,v[1])))}for(C=m;P&&C<=g[2];C+=E[0]){if(O=math_default.roundToStep(Math.abs(C),c[0]),O=Math.abs(O-Math.abs(C)),S=c[0]-O,H==="line"){if(O-w[0]-f[0]<s||S-w[0]-f[0]<s)continue}else if((O-w[0]-f[0]<s||S-w[0]-f[0]<s)&&(tt||f[0]-Math.abs(C)+w[0]<s)&&(st||f[0]+Math.abs(C)-w[0]<s)&&(it||f[0]-Math.abs(C)+w[0]<s))continue;!K&&Math.abs(C)<s||(j=Math.abs(g[0]%c[0]),k=Math.abs(g[1]%c[1]),B=Math.abs(g[2]%c[0]),I=Math.abs(g[3]%c[1]),X=c[0]-j,J=c[1]-k,Y=c[0]-B,F=c[1]-I,!(!et&&(C-w[0]-g[0]-f[0]+X<s&&X-f[0]<s||C-w[0]-g[0]-f[0]-j<s&&j-f[0]<s||-C-w[0]+g[2]-f[0]+Y<s&&Y-f[0]<s||-C-w[0]+g[2]-f[0]-B<s&&B-f[0]<s||C-w[0]-g[0]<s||-C-w[0]+g[2]<s))&&(v=[[C,C,NaN],[g[1]+x/n.board.unitY,g[3]-x/n.board.unitY,NaN]],type_default.concat(this.dataX,v[0]),type_default.concat(this.dataY,v[1])))}}},t.grids.push(a),t.grids.push(n),n.dump=!1,a.getParents=n.getParents=function(){return l.slice()},a};jxg_default.registerElement("grid",jxg_default.createGrid);jxg_default.Image=function(t,e,r,s,o){this.constructor(t,r,constants.OBJECT_TYPE_IMAGE,constants.OBJECT_CLASS_OTHER),this.element=this.board.select(r.anchor),this.coordsConstructor(e),this.W=type_default.createFunction(o[0],this.board,""),this.H=type_default.createFunction(o[1],this.board,""),this.addParentsFromJCFunctions([this.W,this.H]),this.usrSize=[this.W(),this.H()],this.size=[Math.abs(this.usrSize[0]*t.unitX),Math.abs(this.usrSize[1]*t.unitY)],this.url=s,this.elType="image",this.span=[this.coords.usrCoords.slice(0),[this.coords.usrCoords[0],this.W(),0],[this.coords.usrCoords[0],0,this.H()]],this.id=this.board.setId(this,"Im"),this.board.renderer.drawImage(this),this.board.finalizeAdding(this)};jxg_default.Image.prototype=new element_default;type_default.copyPrototypeMethods(jxg_default.Image,coordselement_default,"coordsConstructor");type_default.copyMethodMap(jxg_default.Image,{addTransformation:"addTransform",trans:"addTransform",W:"W",Width:"W",H:"H",Height:"H",setSize:"setSize"});jxg_default.extend(jxg_default.Image.prototype,{hasPoint:function(t,e){var r,s,o,a,n,l,h,d,u,c=this.transformations.length;return type_default.isObject(this.evalVisProp("precision"))?(a=this.board._inputDevice,n=this.evalVisProp("precision."+a)):n=this.board.options.precision.hasPoint,c===0?(r=t-this.coords.scrCoords[1],s=this.coords.scrCoords[2]-e,o=n,r>=-o&&r-this.size[0]<=o&&s>=-o&&s-this.size[1]<=o):(l=new coords_default(constants.COORDS_BY_SCREEN,[t,e],this.board),l=l.usrCoords,h=[l[0]-this.span[0][0],l[1]-this.span[0][1],l[2]-this.span[0][2]],u=math_default.innerProduct,d=u(h,this.span[1]),0<=d&&d<=u(this.span[1],this.span[1])&&(d=u(h,this.span[2]),0<=d&&d<=u(this.span[2],this.span[2])))},update:function(t){return this.needsUpdate?(this.updateCoords(t),this.updateSize(),this.updateSpan(),this):this},updateRenderer:function(){return this.updateRendererGeneric("updateImage")},updateSize:function(){return this.usrSize=[this.W(),this.H()],this.size=[Math.abs(this.usrSize[0]*this.board.unitX),Math.abs(this.usrSize[1]*this.board.unitY)],this},updateSpan:function(){var t,e,r=this.transformations.length,s=[];if(r===0)this.span=[[this.Z(),this.X(),this.Y()],[this.Z(),this.W(),0],[this.Z(),0,this.H()]];else{for(s[0]=[this.Z(),this.X(),this.Y()],s[1]=[this.Z(),this.X()+this.W(),this.Y()],s[2]=[this.Z(),this.X(),this.Y()+this.H()],t=0;t<r;t++)for(e=0;e<3;e++)s[e]=math_default.matVecMult(this.transformations[t].matrix,s[e]);for(e=0;e<3;e++)s[e][1]/=s[e][0],s[e][2]/=s[e][0],s[e][0]/=s[e][0];for(e=1;e<3;e++)s[e][0]-=s[0][0],s[e][1]-=s[0][1],s[e][2]-=s[0][2];this.span=s}return this},addTransform:function(t){var e,r=type_default.isArray(t)?t:[t],s=r.length;for(e=0;e<s;e++)this.transformations.push(r[e]);return this},removeTransform:function(t){var e,r=type_default.isArray(t)?t:[t],s=r.length;for(e=0;e<s;e++)type_default.removeElementFromArray(this.transformations,r[e]);return this},clearTransforms:function(){return this.transformations=[],this},getParents:function(){var t=[this.url,[this.Z(),this.X(),this.Y()],this.usrSize];return this.parents.length!==0&&(t=this.parents),t},setSize:function(t,e){return this.W=type_default.createFunction(t,this.board,""),this.H=type_default.createFunction(e,this.board,""),this.addParentsFromJCFunctions([this.W,this.H]),this},W:function(){},H:function(){}});jxg_default.createImage=function(t,e,r){var s,o,a=e[0],n=e[1],l=e[2];if(s=type_default.copyAttributes(r,t.options,"image"),o=coordselement_default.create(jxg_default.Image,t,n,s,a,l),!o)throw new Error("JSXGraph: Can't create image with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
172
+ Possible parent types: [x,y], [z,x,y], [element,transformation]`);return s.rotate!==0&&o.addRotation(s.rotate),o};jxg_default.registerElement("image",jxg_default.createImage);var image_default=jxg_default.Image;jxg_default.createSlider=function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f,_,g,m,b,C,y,x,v,P,E,w,O,S=type_default.copyAttributes(r,t.options,"slider");return x=S.withticks,y=S.withlabel,E=S.snapwidth,v=S.snapvalues,P=S.snapvaluedistance,d=t.create("point",e[0],S.point1),u=t.create("point",e[1],S.point2),p=t.create("segment",[d,u],S.baseline),p.updateStdform(),s=d.coords.usrCoords.slice(1),o=u.coords.usrCoords.slice(1),a=e[2][0],n=e[2][1],l=e[2][2],h=l-a,w=type_default.evaluate(E),O=w===-1?n:Math.round((n-a)/w)*w+a,b=s[0]+(o[0]-s[0])*(O-a)/(l-a),C=s[1]+(o[1]-s[1])*(O-a)/(l-a),S.withlabel=!1,c=t.create("glider",[b,C,p],S),c.setAttribute({snapwidth:E,snapvalues:v,snapvaluedistance:P}),f=t.create("segment",[d,c],S.highline),c.Value=function(){var M=this._smax-this._smin,N=this.evalVisProp("snapwidth");return N===-1?this.position*M+this._smin:Math.round(this.position*M/N)*N+this._smin},c._smax=l,c._smin=a,c.setMax=function(M){return this._smax=M,this},c.setValue=function(M){var N=this._smax-this._smin;return Math.abs(N)>math_default.eps?this.position=(M-this._smin)/N:this.position=0,this.position=Math.max(0,Math.min(1,this.position)),this},c.setMin=function(M){return this._smin=M,this},y&&(m=t.create("text",[function(){return(u.X()-d.X())*.05+u.X()},function(){return(u.Y()-d.Y())*.05+u.Y()},function(){var M,N=c.evalVisProp("digits"),j=c.evalVisProp("suffixlabel"),k=c.evalVisProp("unitlabel"),B=c.evalVisProp("postlabel");return N===2&&c.evalVisProp("precision")!==2&&(N=c.evalVisProp("precision")),j!==null?M=j:c.name&&c.name!==""?M=c.name+" = ":M="",c.useLocale()?M+=c.formatNumberLocale(c.Value(),N):M+=type_default.toFixed(c.Value(),N),k!==null&&(M+=k),B!==null&&(M+=B),M}],S.label),c.label=m,c.visProp.withlabel=!0,c.hasLabel=!0,c.inherits.push(m),m.addParents(c),c.addChild(m)),c.point1=d,c.point2=u,c.baseline=p,c.highline=f,x&&(type_default.exists(S.generatelabeltext)||(S.ticks.generateLabelText=function(M,N,j){var k,B=c.point1.Dist(c.point2),I=c._smin,X=c._smax,J=this.getDistanceFromZero(N,M)*(X-I)/B+I;return B<math_default.eps||Math.abs(J)<math_default.eps?k="0":k=this.formatLabelText(J),k}),_=2,g=t.create("ticks",[c.baseline,c.point1.Dist(d)/_,function(M){var N=c.point1.Dist(c.point2),j=c.point1.coords.distance(constants.COORDS_BY_USER,M);return N<math_default.eps?0:j/N*h+a}],S.ticks),c.ticks=g),c.remove=function(){y&&t.removeObject(m),t.removeObject(f),t.removeObject(p),t.removeObject(u),t.removeObject(d),point_default.prototype.remove.call(c)},d.dump=!1,u.dump=!1,p.dump=!1,f.dump=!1,y&&(m.dump=!1),c.elType="slider",c.parents=e,c.subs={point1:d,point2:u,baseLine:p,highLine:f},c.inherits.push(d,u,p,f),p.inherits=[],f.inherits=[],x&&(g.dump=!1,c.subs.ticks=g,c.inherits.push(g)),c.getParents=function(){return[this.point1.coords.usrCoords.slice(1),this.point2.coords.usrCoords.slice(1),[this._smin,this.position*(this._smax-this._smin)+this._smin,this._smax]]},c.baseline.on("up",function(M){var N,j;c.evalVisProp("moveonup")&&!c.evalVisProp("fixed")&&(N=p.board.getMousePosition(M,0),j=new coords_default(constants.COORDS_BY_SCREEN,N,this.board),c.moveTo([j.usrCoords[1],j.usrCoords[2]]),c.triggerEventHandlers(["drag"],[M]))}),c.prepareUpdate().update(),t.isSuspendedUpdate||(c.updateVisibility().updateRenderer(),c.baseline.prepareUpdate().updateVisibility().updateRenderer(),c.highline.updateVisibility().updateRenderer(),x&&c.prepareUpdate().ticks.updateVisibility().updateRenderer()),type_default.extendInstanceMethodMap(c,{Value:"Value",setValue:"setValue",smax:"_smax",smin:"_smin",setMax:"setMax",setMin:"setMin",point1:"point1",point2:"point2",baseline:"baseline",highline:"highline",ticks:"ticks",label:"label"}),c};jxg_default.registerElement("slider",jxg_default.createSlider);jxg_default.PrefixParser={parse:function(t,e){var r,s,o,a,n,l;if(type_default.isNumber(t)||type_default.isString(t))return t;if(!type_default.isArray(t)||t.length<2)throw new Error("prefixParser.parse: term is not an array, number or string");if(r=t[0],o=t.length,e==="execute")if(type_default.isInArray(["+","-","*","/"],r))for(a=this.parse(t[1],e),s=2;s<o;s++)switch(l=this.parse(t[s],e),r){case"+":a+=l;break;case"-":a-=l;break;case"*":a*=l;break;case"/":a/=l}else if(r==="exec"){for(n=t[1],l=[],s=2;s<o;s++)l.push(this.parse(t[s],e));if(type_default.exists(Math[n]))a=Math[n].apply(this,l);else if(type_default.exists(math_default[n]))a=math_default[n].apply(this,l);else throw new Error("PrefixParser.parse: "+n+" is not allowed")}else{if(n=t[0],n==="V"&&(n="Value"),n==="Coords"&&(t[2]="true"),!type_default.exists(t[1][n]))throw new Error("PrefixParser.parse: "+n+" is not a method of "+t[1]);for(l=[],s=2;s<o;s++)l.push(this.parse(t[s],e));a=t[1][n].apply(t[1],l)}return a},dimension:function(t){var e,r,s,o,a,n,l,h;if(type_default.isNumber(t))return 0;if(!type_default.isArray(t)||t.length<2)throw new Error("PrefixParser.dimension: term is not an array");if(e=t[0],s=t.length,type_default.isInArray(["+","-","*","/"],e))for(o=this.dimension(t[1]),r=2;r<s;r++)switch(l=this.dimension(t[r]),e){case"+":l!==o&&(o=NaN);break;case"-":l!==o&&(o=NaN);break;case"*":o+=l;break;case"/":o-=l}else if(e==="exec")t[2].type===type_default.OBJECT_TYPE_MEASUREMENT?(o=t[2].Dimension(),type_default.exists(t[2].visProp.dim)&&(n=t[2].evalVisProp("dim"),n!==null&&(o=n))):o=0;else switch(a=t[0],a){case"Slope":case"Angle":o=0;break;case"L":case"Length":case"Perimeter":case"Diameter":case"Radius":case"R":case"DeltaX":case"DeltaY":o=1;break;case"Area":case"A":o=2;break;default:t[1].type===type_default.OBJECT_TYPE_MEASUREMENT?(o=t[1].Dimension(),type_default.exists(t[1].visProp.dim)&&(n=t[1].evalVisProp("dim"),n!==null&&(o=n))):(o=0,(a==="Value"||a==="V")&&[constants.OBJECT_TYPE_ARC,constants.OBJECT_TYPE_SECTOR,constants.OBJECT_TYPE_ANGLE].indexOf(t[1].type)>=0&&(h="",t.length===3&&type_default.isString(t[2])&&(h=t[2].toLowerCase()),h===""?t[1].type===constants.OBJECT_TYPE_ANGLE?o=0:o=1:h.indexOf("len")===0?o=1:o=0))}return o},toPrefix:function(t){var e,r,s,o;if(type_default.isNumber(t))return t;if(!type_default.isArray(t)||t.length<2)throw new Error("PrefixParser.toPrefix: term is not an array");for(e=t[0],s=t.length,o=[e],r=1;r<s;r++)type_default.isInArray(["+","-","*","/"],e)?o.push(this.toPrefix(t[r])):e==="V"&&t[r].type===type_default.OBJECT_TYPE_MEASUREMENT?o=t[r].toPrefix():e==="exec"?r===1?o.push(t[r]):o.push(this.toPrefix(t[r])):o=[e,t[r].id];return o},getParents:function(t){var e,r,s,o;if(type_default.isNumber(t))return[];if(!type_default.isArray(t)||t.length<2)throw new Error("PrefixParser.getParents: term is not an array");for(e=t[0],s=t.length,o=[],r=1;r<s;r++)type_default.isInArray(["+","-","*","/"],e)?type_default.concat(o,this.getParents(t[r])):e==="V"&&t[r].type===type_default.OBJECT_TYPE_MEASUREMENT?type_default.concat(o,t[r].getParents()):e==="exec"?r>1&&type_default.concat(o,this.getParents(t[r])):o.push(t[r]);return o}};var prefix_default=jxg_default.PrefixParser;jxg_default.createTapemeasure=function(t,e,r){var s=e[0],o=e[1],a=type_default.copyAttributes(r,t.options,"tapemeasure","point1"),n,l,h,d,u=t.create("point",s,a),c,p,f;return a=type_default.copyAttributes(r,t.options,"tapemeasure","point2"),c=t.create("point",o,a),u.setAttribute({ignoredSnapToPoints:[c.id]}),c.setAttribute({ignoredSnapToPoints:[u.id]}),a=type_default.copyAttributes(r,t.options,"tapemeasure"),n=a.withticks,l=a.withlabel,h=a.digits,h===2&&a.precision!==2&&(h=a.precision),l&&(a.withlabel=!0),d=t.create("segment",[u,c],a),l&&(r.name&&r.name!==""?p=r.name+" = ":p="",d.label.setText(function(){var _=d.label.evalVisProp("digits");return d.label.useLocale()?p+d.label.formatNumberLocale(u.Dist(c),_):p+type_default.toFixed(u.Dist(c),_)})),n&&(a=type_default.copyAttributes(r,t.options,"tapemeasure","ticks"),f=t.create("ticks",[d,.1],a),d.inherits.push(f)),d.remove=function(){n&&d.removeTicks(f),t.removeObject(c),t.removeObject(u),element_default.prototype.remove.call(this)},d.Value=function(){return u.Dist(c)},u.dump=!1,c.dump=!1,d.elType="tapemeasure",d.getParents=function(){return[[u.X(),u.Y()],[c.X(),c.Y()]]},d.subs={point1:u,point2:c},n&&(f.dump=!1),d.prepareUpdate().update(),t.isSuspendedUpdate||(d.updateVisibility().updateRenderer(),d.point1.updateVisibility().updateRenderer(),d.point2.updateVisibility().updateRenderer()),type_default.extendInstanceMethodMap(d,{Value:"Value"}),d};jxg_default.registerElement("tapemeasure",jxg_default.createTapemeasure);jxg_default.createMeasurement=function(t,e,r){var s,o=type_default.copyAttributes(r,t.options,"measurement"),a=e[0],n=e[1],l=e[2],h;for(s=t.create("text",[a,n,""],o),s.type=type_default.OBJECT_TYPE_MEASUREMENT,s.elType="measurement",s.Value=function(){return prefix_default.parse(l,"execute")},s.Dimension=function(){var d=s.evalVisProp("dim");return d!==null?d:prefix_default.dimension(l)},s.Unit=function(d){var u="",c=s.evalVisProp("units"),p=d,f={},_;if(type_default.exists(p)||(p=s.Dimension()),type_default.isArray(d)){for(_=0;_<d.length;_++)f["dim"+d[_]]=s.Unit(d[_]);return f}return type_default.isObject(c)&&type_default.exists(c[p])&&c[p]!==!1?u=s.eval(c[p]):type_default.isObject(c)&&type_default.exists(c["dim"+p])&&c["dim"+p]!==!1?u=s.eval(c["dim"+p]):(u=s.evalVisProp("baseUnit"),p===0?u="":p>1&&u!==""&&(u=u+"^{"+p+"}")),u},s.getTerm=function(){return l},s.getMethod=function(){var d=l[0];return d==="V"&&(d="Value"),d},s.toPrefix=function(){return prefix_default.toPrefix(l)},s.getParents=function(){return prefix_default.getParents(l)},s.addParents(s.getParents()),h=0;h<s.parents.length;h++)t.select(s.parents[h]).addChild(s);return s.setText(function(){var d="",u="",c=s.Dimension(),p=s.evalVisProp("digits"),f=s.Unit(),_=s.Value(),g;if(s.evalVisProp("showPrefix")&&(d=s.evalVisProp("prefix")),s.evalVisProp("showSuffix")&&(u=s.evalVisProp("suffix")),type_default.isNumber(_))p==="none"||(p==="auto"?s.useLocale()?_=s.formatNumberLocale(_):_=type_default.autoDigits(_):s.useLocale()?_=s.formatNumberLocale(_,p):_=type_default.toFixed(_,p));else if(type_default.isArray(_))for(g=0;g<_.length;g++)type_default.isNumber(_[g])&&(p==="none"||(p==="auto"?s.useLocale()?_[g]=s.formatNumberLocale(_[g]):_[g]=type_default.autoDigits(_[g]):s.useLocale()?_[g]=s.formatNumberLocale(_[g],p):_[g]=type_default.toFixed(_[g],p)));return c==="coords"&&type_default.isArray(_)&&(_.length===2&&_.unshift(void 0),_=s.visProp.formatcoords(s,_[1],_[2],_[0])),c==="direction"&&type_default.isArray(_)&&(_=s.visProp.formatdirection(s,_[0],_[1])),type_default.isString(c)?d+_+u:isNaN(c)?d+"NaN"+u:d+_+f+u}),type_default.extendInstanceMethodMap(s,{Value:"Value",V:"Value",Dimension:"Dimension",Unit:"Unit",getTerm:"getTerm",Term:"getTerm",getMethod:"getMethod",Method:"getMethod",getParents:"getParents",Parents:"getParents"}),s};jxg_default.registerElement("measurement",jxg_default.createMeasurement);jxg_default.DataSource=function(){return this.data=[],this.columnHeaders=[],this.rowHeaders=[],this};jxg_default.extend(jxg_default.DataSource.prototype,{loadFromArray:function(t,e,r){var s,o,a;if(type_default.isArray(e)&&(this.columnHeaders=e,e=!1),type_default.isArray(r)&&(this.rowHeaders=r,r=!1),this.data=[],e&&(this.columnHeaders=[]),r&&(this.rowHeaders=[]),type_default.exists(t)){for(this.data=[],s=0;s<t.length;s++)for(this.data[s]=[],o=0;o<t[s].length;o++)a=t[s][o],parseFloat(a).toString()===a?this.data[s][o]=parseFloat(a):a!=="-"?this.data[s][o]=a:this.data[s][o]=NaN;if(e&&(this.columnHeaders=this.data[0].slice(1),this.data=this.data.slice(1)),r)for(this.rowHeaders=[],s=0;s<this.data.length;s++)this.rowHeaders.push(this.data[s][0]),this.data[s]=this.data[s].slice(1)}return this},loadFromTable:function(t,e,r){var s,o,a,n,l;if(type_default.isArray(e)&&(this.columnHeaders=e,e=!1),type_default.isArray(r)&&(this.rowHeaders=r,r=!1),this.data=[],e&&(this.columnHeaders=[]),r&&(this.rowHeaders=[]),t=document.getElementById(t),type_default.exists(t)){for(s=t.getElementsByTagName("tr"),this.data=[],o=0;o<s.length;o++)for(n=s[o].getElementsByTagName("td"),this.data[o]=[],a=0;a<n.length;a++)l=n[a].innerText,parseFloat(l).toString()===l?this.data[o][a]=parseFloat(l):l!=="-"?this.data[o][a]=l:this.data[o][a]=NaN;if(e&&(this.columnHeaders=this.data[0].slice(1),this.data=this.data.slice(1)),r)for(this.rowHeaders=[],o=0;o<this.data.length;o++)this.rowHeaders.push(this.data[o][0]),this.data[o]=this.data[o].slice(1)}return this},addColumn:function(t,e,r){throw new Error("not implemented")},addRow:function(t,e,r){throw new Error("not implemented")},getColumn:function(t){var e,r=[];if(type_default.isString(t)){for(e=0;e<this.columnHeaders.length;e++)if(t===this.columnHeaders[e]){t=e;break}}for(e=0;e<this.data.length;e++)this.data[e].length>t&&(r[e]=parseFloat(this.data[e][t]));return r},getRow:function(t){var e,r;if(type_default.isString(t)){for(r=0;r<this.rowHeaders.length;r++)if(t===this.rowHeaders[r]){t=r;break}}for(e=[],r=0;r<this.data[t].length;r++)e[r]=this.data[t][r];return e}});var datasource_default=jxg_default.DataSource;jxg_default.Chart=function(t,e,r){this.constructor(t,r);var s,o,a,n,l,h;if(!type_default.isArray(e)||e.length===0)throw new Error("JSXGraph: Can't create a chart without data");if(this.elements=[],type_default.isNumber(e[0]))for(o=e,s=[],a=0;a<o.length;a++)s[a]=a+1;else if(e.length===1&&type_default.isArray(e[0]))for(o=e[0],s=[],h=type_default.evaluate(o).length,a=0;a<h;a++)s[a]=a+1;else e.length===2&&(h=Math.min(e[0].length,e[1].length),s=e[0].slice(0,h),o=e[1].slice(0,h));if(type_default.isArray(o)&&o.length===0)throw new Error("JSXGraph: Can't create charts without data.");for(l=r.chartstyle.replace(/ /g,"").split(","),a=0;a<l.length;a++){switch(l[a]){case"bar":n=this.drawBar(t,s,o,r);break;case"line":n=this.drawLine(t,s,o,r);break;case"fit":n=this.drawFit(t,s,o,r);break;case"spline":n=this.drawSpline(t,s,o,r);break;case"pie":n=this.drawPie(t,o,r);break;case"point":n=this.drawPoints(t,s,o,r);break;case"radar":n=this.drawRadar(t,e,r)}this.elements.push(n)}return this.id=this.board.setId(this,"Chart"),this.elements};jxg_default.Chart.prototype=new element_default;jxg_default.extend(jxg_default.Chart.prototype,{drawLine:function(t,e,r,s){return s.fillcolor="none",s.highlightfillcolor="none",t.create("curve",[e,r],s)},drawSpline:function(t,e,r,s){return s.fillColor="none",s.highlightfillcolor="none",t.create("spline",[e,r],s)},drawFit:function(t,e,r,s){var o=s.degree;return o=Math.max(parseInt(o,10),1)||1,s.fillcolor="none",s.highlightfillcolor="none",t.create("functiongraph",[numerics_default.regressionPolynomial(o,e,r)],s)},drawBar:function(t,e,r,s){var o,a,n,l,h,d,u,c,p=[],f=[],_,g,m=function(C,y){return function(){return e[C]()-y*n}},b={fixed:!0,withLabel:!1,visible:!1,name:""};if(_=type_default.copyAttributes(s,t.options,"chart"),_&&_.width)n=_.width;else{if(e.length<=1)n=1;else for(n=e[1]-e[0],o=1;o<e.length-1;o++)n=e[o+1]-e[o]<n?e[o+1]-e[o]:n;n*=.8}for(g=type_default.copyAttributes(s,t.options,"chart","label"),o=0;o<e.length;o++)type_default.isFunction(e[o])?(l=m(o,-.5),h=m(o,0),d=m(o,.5)):(l=e[o]-n*.5,h=e[o],d=e[o]+n*.5),type_default.isFunction(r[o])?u=r[o]():u=r[o],u=r[o],_.dir==="horizontal"?(f[0]=t.create("point",[0,l],b),f[1]=t.create("point",[u,l],b),f[2]=t.create("point",[u,d],b),f[3]=t.create("point",[0,d],b),type_default.exists(_.labels)&&type_default.exists(_.labels[o])&&(g.anchorX=function(C){return C.X()>=0?"left":"right"},g.anchorY="middle",a=t.create("text",[u,h,_.labels[o]],g))):(f[0]=t.create("point",[l,0],b),f[1]=t.create("point",[l,u],b),f[2]=t.create("point",[d,u],b),f[3]=t.create("point",[d,0],b),type_default.exists(_.labels)&&type_default.exists(_.labels[o])&&(g.anchorX="middle",g.anchorY=function(C){return C.Y()>=0?"bottom":"top"},a=t.create("text",[h,u,_.labels[o]],g))),type_default.isArray(_.colors)&&(c=_.colors,_.fillcolor=c[o%c.length]),p[o]=t.create("polygon",f,_),type_default.exists(_.labels)&&type_default.exists(_.labels[o])&&(p[o].text=a,p[o].addChild(a));return p},drawPoints:function(t,e,r,s){var o,a=[],n=s.infoboxarray;for(s.fixed=!0,s.name="",o=0;o<e.length;o++)s.infoboxtext=n?n[o%n.length]:!1,a[o]=t.create("point",[e[o],r[o]],s);return a},drawPie:function(t,e,r){var s,o,a=[],n=[],l=r.colors,h=r.highlightcolors,d=r.labels,u=r.radius||4,c=u,p=r.center||[0,0],f=p[0],_=p[1],g=function(x,v,P){return function(){var E,w,O,S=0;for(w=0;w<=x;w++)S+=parseFloat(type_default.evaluate(e[w]));for(E=S,w=x+1;w<e.length;w++)E+=parseFloat(type_default.evaluate(e[w]));return O=E!==0?2*Math.PI*S/E:0,c()*Math[v](O)+P}},m=function(x,v){var P=-this.point1.coords.usrCoords[1]+this.point2.coords.usrCoords[1],E=-this.point1.coords.usrCoords[2]+this.point2.coords.usrCoords[2];type_default.exists(this.label)&&(this.label.rendNode.style.fontSize=v*this.label.evalVisProp("fontsize")+"px",this.label.fullUpdate()),this.point2.coords=new coords_default(constants.COORDS_BY_USER,[this.point1.coords.usrCoords[1]+P*x,this.point1.coords.usrCoords[2]+E*x],this.board),this.fullUpdate()},b=function(){this.highlighted||(this.highlighted=!0,this.board.highlightedObjects[this.id]=this,this.board.renderer.highlight(this),m.call(this,1.1,2))},C=function(){this.highlighted&&(this.highlighted=!1,this.board.renderer.noHighlight(this),m.call(this,.9090909,1))},y={fixed:!0,withLabel:!1,visible:!1,name:""};if(!type_default.isArray(d))for(d=[],s=0;s<e.length;s++)d[s]="";for(type_default.isFunction(u)||(c=function(){return u}),r.highlightonsector=r.highlightonsector||!1,r.straightfirst=!1,r.straightlast=!1,o=t.create("point",[f,_],y),a[0]=t.create("point",[function(){return c()+f},function(){return _}],y),s=0;s<e.length;s++)a[s+1]=t.create("point",[g(s,"cos",f),g(s,"sin",_)],y),r.name=d[s],r.withlabel=r.name!=="",r.fillcolor=l&&l[s%l.length],r.labelcolor=l&&l[s%l.length],r.highlightfillcolor=h&&h[s%h.length],n[s]=t.create("sector",[o,a[s],a[s+1]],r),r.highlightonsector&&(n[s].hasPoint=n[s].hasPointSector),r.highlightbysize&&(n[s].highlight=b,n[s].noHighlight=C);return{sectors:n,points:a,midpoint:o}},drawRadar:function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f,_,g,m,b,C,y,x,v,P,E,w,O,S,M,N,j,k,B,I,X,J,Y,F,D,A,T,U,V,K,H,G,tt,st,it=e.length,et=function(){var nt,ot,dt,ft,ut=this.evalVisProp("label.offset").slice(0);return nt=this.point1.X(),ot=this.point2.X(),dt=this.point1.Y(),ft=this.point2.Y(),ot<nt&&(ut[0]=-ut[0]),ft<dt&&(ut[1]=-ut[1]),this.setLabelRelativeCoords(ut),new coords_default(constants.COORDS_BY_USER,[this.point2.X(),this.point2.Y()],this.board)},lt=function(nt,ot){var dt=t.create("transform",[-(b[ot]-g[ot]),0],{type:"translate"}),ft=t.create("transform",[v/(C[ot]+m[ot]-(b[ot]-g[ot])),1],{type:"scale"}),ut;return dt.melt(ft),ut=t.create("transform",[nt],{type:"rotate"}),dt.melt(ut),dt};if(it<=0)throw new Error("JSXGraph radar chart: no data");if(a=r.paramarray,!type_default.exists(a))throw new Error("JSXGraph radar chart: need paramArray attribute");if(n=a.length,n<=1)throw new Error("JSXGraph radar chart: need more than one param in paramArray");for(s=0;s<it;s++)if(n!==e[s].length)throw new Error("JSXGraph radar chart: use data length equal to number of params ("+e[s].length+" != "+n+")");for(l=[],h=[],o=0;o<n;o++)l[o]=e[0][o],h[o]=l[o];for(s=1;s<it;s++)for(o=0;o<n;o++)e[s][o]>l[o]&&(l[o]=e[s][o]),e[s][o]<h[o]&&(h[o]=e[s][o]);for(d=[],u=[],s=0;s<it;s++)d[s]="",u[s]=[];for(c=[],p=[],f=r.startshiftratio||0,_=r.endshiftratio||0,s=0;s<n;s++)c[s]=(l[s]-h[s])*f,p[s]=(l[s]-h[s])*_;if(g=r.startshiftarray||c,m=r.endshiftarray||p,b=r.startarray||h,type_default.exists(r.start))for(s=0;s<n;s++)b[s]=r.start;if(C=r.endarray||l,type_default.exists(r.end))for(s=0;s<n;s++)C[s]=r.end;if(g.length!==n)throw new Error("JSXGraph radar chart: start shifts length is not equal to number of parameters");if(m.length!==n)throw new Error("JSXGraph radar chart: end shifts length is not equal to number of parameters");if(b.length!==n)throw new Error("JSXGraph radar chart: starts length is not equal to number of parameters");if(C.length!==n)throw new Error("JSXGraph radar chart: snds length is not equal to number of parameters");for(y=r.labelarray||d,x=r.colors,v=r.radius||10,tt=r.strokewidth||1,type_default.exists(r.highlightonsector)||(r.highlightonsector=!1),P={name:r.name,id:r.id,strokewidth:tt,polystrokewidth:r.polystrokewidth||tt,strokecolor:r.strokecolor||"black",straightfirst:!1,straightlast:!1,fillcolor:r.fillColor||"#FFFF88",fillopacity:r.fillOpacity||.4,highlightfillcolor:r.highlightFillColor||"#FF7400",highlightstrokecolor:r.highlightStrokeColor||"black",gradient:r.gradient||"none"},E=r.center||[0,0],w=E[0],O=E[1],S=t.create("point",[w,O],{name:"",fixed:!0,withlabel:!1,visible:!1}),M=Math.PI/2-Math.PI/n,M=r.startangle||0,N=M,j=[],k=[],s=0;s<n;s++)for(N+=2*Math.PI/n,I=v*Math.cos(N)+w,X=v*Math.sin(N)+O,j[s]=t.create("point",[I,X],{name:"",fixed:!0,withlabel:!1,visible:!1}),k[s]=t.create("line",[S,j[s]],{name:a[s],strokeColor:P.strokecolor,strokeWidth:P.strokewidth,strokeOpacity:1,straightFirst:!1,straightLast:!1,withLabel:!0,highlightStrokeColor:P.highlightstrokecolor}),k[s].getLabelAnchor=et,B=lt(N,s),o=0;o<e.length;o++)st=e[o][s],u[o][s]=t.create("point",[st,0],{name:"",fixed:!0,withlabel:!1,visible:!1}),u[o][s].addTransform(u[o][s],B);for(J=[],s=0;s<it;s++)for(P.labelcolor=x&&x[s%x.length],P.strokecolor=x&&x[s%x.length],P.fillcolor=x&&x[s%x.length],J[s]=t.create("polygon",u[s],{withLines:!0,withLabel:!1,fillColor:P.fillcolor,fillOpacity:P.fillopacity,highlightFillColor:P.highlightfillcolor}),o=0;o<n;o++)J[s].borders[o].setAttribute("strokecolor:"+x[s%x.length]),J[s].borders[o].setAttribute("strokewidth:"+P.polystrokewidth);switch(Y=r.legendposition||"none",Y){case"right":D=r.legendleftoffset||2,A=r.legendtopoffset||1,this.legend=t.create("legend",[w+v+D,O+v-A],{labels:y,colors:x});break;case"none":break;default:jxg_default.debug("Unknown legend position")}if(F=[],r.showcircles){for(T=[],s=0;s<6;s++)T[s]=20*s;if(T[0]="0",U=r.circlelabelarray||T,V=U.length,V<2)throw new Error("JSXGraph radar chart: too less circles in circleLabelArray");for(K=[],H=M+Math.PI/n,B=lt(H,0),P.fillcolor="none",P.highlightfillcolor="none",P.strokecolor=r.strokecolor||"black",P.strokewidth=r.circlestrokewidth||.5,P.layer=0,G=(C[0]-b[0])/(V-1),s=0;s<V;s++)K[s]=t.create("point",[b[0]+s*G,0],{name:U[s],size:0,fixed:!0,withLabel:!0,visible:!0}),K[s].addTransform(K[s],B),F[s]=t.create("circle",[S,K[s]],P)}return this.rendNode=J[0].rendNode,{circles:F,lines:k,points:u,midpoint:S,polygons:J}},updateRenderer:function(){return this},update:function(){return this.needsUpdate&&this.updateDataArray(),this},updateDataArray:function(){return this}});jxg_default.createChart=function(t,e,r){var s,o,a,n,l,h=[],d,u,c,p,f,_,g,m,b,C,y,x=env_default.isBrowser?t.document.getElementById(e[0]):null;if(e.length===1&&type_default.isString(e[0])){if(type_default.exists(x)){if(p=type_default.copyAttributes(r,t.options,"chart"),x=new datasource_default().loadFromTable(e[0],p.withheaders,p.withheaders),s=x.data,l=x.columnHeaders,o=x.rowHeaders,f=p.width,_=p.name,g=p.strokecolor,m=p.fillcolor,b=p.highlightstrokecolor,C=p.highlightfillcolor,t.suspendUpdate(),y=s.length,c=[],p.rows&&type_default.isArray(p.rows)){for(a=0;a<y;a++)for(n=0;n<p.rows.length;n++)if(p.rows[n]===a||p.withheaders&&p.rows[n]===o[a]){c.push(s[a]);break}}else c=s;for(y=c.length,a=0;a<y;a++){if(u=[],p.chartstyle&&p.chartstyle.indexOf("bar")!==-1){for(f?d=f:d=.8,u.push(1-d/2+(a+.5)*d/y),n=1;n<c[a].length;n++)u.push(u[n-1]+1);p.width=d/y}_&&_.length===y?p.name=_[a]:p.withheaders&&(p.name=l[a]),g&&g.length===y?p.strokecolor=g[a]:p.strokecolor=color_default.hsv2rgb((a+1)/y*360,.9,.6),m&&m.length===y?p.fillcolor=m[a]:p.fillcolor=color_default.hsv2rgb((a+1)/y*360,.9,1),b&&b.length===y?p.highlightstrokecolor=b[a]:p.highlightstrokecolor=color_default.hsv2rgb((a+1)/y*360,.9,1),C&&C.length===y?p.highlightfillcolor=C[a]:p.highlightfillcolor=color_default.hsv2rgb((a+1)/y*360,.9,.6),p.chartstyle&&p.chartstyle.indexOf("bar")!==-1?h.push(new jxg_default.Chart(t,[u,c[a]],p)):h.push(new jxg_default.Chart(t,[c[a]],p))}t.unsuspendUpdate()}return h}return p=type_default.copyAttributes(r,t.options,"chart"),new jxg_default.Chart(t,e,p)};jxg_default.registerElement("chart",jxg_default.createChart);jxg_default.Legend=function(t,e,r){var s;if(this.constructor(),s=type_default.copyAttributes(r,t.options,"legend"),this.board=t,this.coords=new coords_default(constants.COORDS_BY_USER,e,this.board),this.myAtts={},this.label_array=s.labelarray||s.labels,this.color_array=s.colorarray||s.colors,this.opacy_array=s.strokeopacity||[1],this.lines=[],this.myAtts.strokewidth=s.strokewidth||5,this.myAtts.straightfirst=!1,this.myAtts.straightlast=!1,this.myAtts.withlabel=!0,this.myAtts.fixed=!0,this.myAtts.frozen=s.frozen||!1,this.style=s.legendstyle||s.style,this.style==="vertical")this.drawVerticalLegend(t,s);else throw new Error("JSXGraph: Unknown legend style: "+this.style);this.id=this.board.setId(this,"Leg")};jxg_default.Legend.prototype=new element_default;jxg_default.Legend.prototype.drawVerticalLegend=function(t,e){var r,s=e.linelength||1,o=(e.rowheight||20)/this.board.unitY,a=function(){return this.setLabelRelativeCoords(this.visProp.label.offset),new coords_default(constants.COORDS_BY_USER,[this.point2.X(),this.point2.Y()],this.board)};for(r=0;r<this.label_array.length;r++)this.myAtts.name=this.label_array[r],this.myAtts.strokecolor=this.color_array[r%this.color_array.length],this.myAtts.highlightstrokecolor=this.color_array[r%this.color_array.length],this.myAtts.strokeopacity=this.opacy_array[r%this.opacy_array.length],this.myAtts.highlightstrokeopacity=this.opacy_array[r%this.opacy_array.length],this.myAtts.label={offset:[10,0],strokeColor:this.color_array[r%this.color_array.length],strokeWidth:this.myAtts.strokewidth},this.lines[r]=t.create("line",[[this.coords.usrCoords[1],this.coords.usrCoords[2]-r*o],[this.coords.usrCoords[1]+s,this.coords.usrCoords[2]-r*o]],this.myAtts),this.myAtts.frozen&&this.lines[r].setAttribute({point1:{frozen:!0},point2:{frozen:!0}}),this.lines[r].getLabelAnchor=a,this.lines[r].prepareUpdate().update().updateVisibility(this.lines[r].evalVisProp("visible")).updateRenderer(),this.addChild(this.lines[r])};jxg_default.createLegend=function(t,e,r){var s=[0,0];if(type_default.exists(e)&&e.length===2)s=e;else throw new Error("JSXGraph: Legend element needs two numbers as parameters");return new jxg_default.Legend(t,s,r)};jxg_default.registerElement("legend",jxg_default.createLegend);var chart_default={Chart:jxg_default.Chart,Legend:jxg_default.Legend};jxg_default.Transformation=function(t,e,r,s){this.elementClass=constants.OBJECT_CLASS_OTHER,this.type=constants.OBJECT_TYPE_TRANSFORMATION,this.elType="",this.transformationType="none",s?(this.is3D=!0,this.matrix=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]):(this.is3D=!1,this.matrix=[[1,0,0],[0,1,0],[0,0,1]]),this.board=t,this.isNumericMatrix=!1,this.is3D?this.setMatrix3D(r[0],e,r.slice(1)):this.setMatrix(t,e,r)};jxg_default.Transformation.prototype={};type_default.copyMethodMap(jxg_default.Transformation,{apply:"apply",applyOnce:"applyOnce",bindTo:"bindTo",bind:"bindTo",melt:"melt",meltTo:"meltTo"});jxg_default.extend(jxg_default.Transformation.prototype,{update:function(){return this},setMatrix:function(t,e,r){var s;for(this.isNumericMatrix=!0,s=0;s<r.length;s++)if(typeof r[s]!="number"){this.isNumericMatrix=!1;break}if(e==="translate"){if(r.length!==2)throw new Error("JSXGraph: translate transformation needs 2 parameters.");this.evalParam=type_default.createEvalFunction(t,r,2),this.update=function(){this.matrix[1][0]=this.evalParam(0),this.matrix[2][0]=this.evalParam(1)}}else if(e==="scale"){if(r.length!==2)throw new Error("JSXGraph: scale transformation needs 2 parameters.");this.evalParam=type_default.createEvalFunction(t,r,2),this.update=function(){this.matrix[1][1]=this.evalParam(0),this.matrix[2][2]=this.evalParam(1)}}else if(e==="reflect")r.length<4&&(r[0]=t.select(r[0])),r.length===2&&(r[1]=t.select(r[1])),r.length===4&&(this.evalParam=type_default.createEvalFunction(t,r,4)),this.update=function(){var o,a,n,l,h,d,u,c;r.length===1?u=r[0].stdform:r.length===2?u=math_default.crossProduct(r[1].coords.usrCoords,r[0].coords.usrCoords):r.length===4&&(u=math_default.crossProduct([1,this.evalParam(2),this.evalParam(3)],[1,this.evalParam(0),this.evalParam(1)])),o=u[1],a=u[2],n=u[0],c=[-n*o,-n*a,o*o+a*a],d=c[2],l=c[0]/c[2],h=c[1]/c[2],o=-u[2],a=u[1],this.matrix[1][1]=(o*o-a*a)/d,this.matrix[1][2]=2*o*a/d,this.matrix[2][1]=this.matrix[1][2],this.matrix[2][2]=-this.matrix[1][1],this.matrix[1][0]=l*(1-this.matrix[1][1])-h*this.matrix[1][2],this.matrix[2][0]=h*(1-this.matrix[2][2])-l*this.matrix[2][1]};else if(e==="rotate")r.length===3?this.evalParam=type_default.createEvalFunction(t,r,3):r.length>0&&r.length<=2&&(this.evalParam=type_default.createEvalFunction(t,r,1),r.length===2&&!type_default.isArray(r[1])&&(r[1]=t.select(r[1]))),this.update=function(){var o,a,n=this.evalParam(0),l=Math.cos(n),h=Math.sin(n);this.matrix[1][1]=l,this.matrix[1][2]=-h,this.matrix[2][1]=h,this.matrix[2][2]=l,r.length>1&&(r.length===3?(o=this.evalParam(1),a=this.evalParam(2)):type_default.isArray(r[1])?(o=r[1][0],a=r[1][1]):(o=r[1].X(),a=r[1].Y()),this.matrix[1][0]=o*(1-l)+a*h,this.matrix[2][0]=a*(1-l)-o*h)};else if(e==="shear"){if(r.length!==2)throw new Error("JSXGraph: shear transformation needs 2 parameters.");this.evalParam=type_default.createEvalFunction(t,r,2),this.update=function(){this.matrix[1][2]=this.evalParam(0),this.matrix[2][1]=this.evalParam(1)}}else if(e==="affine"){if(r.length!==4)throw new Error("JSXGraph: affine transformation needs 4 parameters.");this.evalParam=type_default.createEvalFunction(t,r,9),this.update=function(){this.matrix[1][1]=this.evalParam(0),this.matrix[1][2]=this.evalParam(1),this.matrix[2][1]=this.evalParam(2),this.matrix[2][2]=this.evalParam(3)}}else if(e==="affinematrix"){if(r.length!==1)throw new Error("JSXGraph: transformation of type 'matrix' needs 1 parameter.");this.evalParam=r[0].slice(),this.update=function(){for(var o=0,a;o<2;o++)for(a=0;a<2;a++)this.matrix[o+1][a+1]=type_default.evaluate(this.evalParam[o][a])}}else if(e==="generic"){if(r.length!==9)throw new Error("JSXGraph: generic transformation needs 9 parameters.");this.evalParam=type_default.createEvalFunction(t,r,9),this.update=function(){this.matrix[0][0]=this.evalParam(0),this.matrix[0][1]=this.evalParam(1),this.matrix[0][2]=this.evalParam(2),this.matrix[1][0]=this.evalParam(3),this.matrix[1][1]=this.evalParam(4),this.matrix[1][2]=this.evalParam(5),this.matrix[2][0]=this.evalParam(6),this.matrix[2][1]=this.evalParam(7),this.matrix[2][2]=this.evalParam(8)}}else if(e==="matrix"){if(r.length!==1)throw new Error("JSXGraph: transformation of type 'matrix' needs 1 parameter.");this.evalParam=r[0].slice(),this.update=function(){for(var o=0,a;o<3;o++)for(a=0;a<3;a++)this.matrix[o][a]=type_default.evaluate(this.evalParam[o][a])}}else return;this.transformationType=e},setMatrix3D:function(t,e,r){var s,o=t.board;for(this.isNumericMatrix=!0,s=0;s<r.length;s++)if(typeof r[s]!="number"){this.isNumericMatrix=!1;break}if(e==="translate"){if(r.length!==3)throw new Error("JSXGraph: 3D translate transformation needs 3 parameters.");this.evalParam=type_default.createEvalFunction(o,r,3),this.update=function(){this.matrix[1][0]=this.evalParam(0),this.matrix[2][0]=this.evalParam(1),this.matrix[3][0]=this.evalParam(2)}}else if(e==="scale"){if(r.length!==3&&r.length!==4)throw new Error("JSXGraph: 3D scale transformation needs either 3 or 4 parameters.");this.evalParam=type_default.createEvalFunction(o,r,3),this.update=function(){var a=this.evalParam(0),n=this.evalParam(1),l=this.evalParam(2);this.matrix[1][1]=a,this.matrix[2][2]=n,this.matrix[3][3]=l}}else if(e==="rotateX")r.splice(1,0,[1,0,0]),this.setMatrix3D(t,"rotate",r);else if(e==="rotateY")r.splice(1,0,[0,1,0]),this.setMatrix3D(t,"rotate",r);else if(e==="rotateZ")r.splice(1,0,[0,0,1]),this.setMatrix3D(t,"rotate",r);else if(e==="rotate"){if(r.length<2)throw new Error("JSXGraph: 3D rotate transformation needs 2 or 3 parameters.");r.length===3&&!type_default.isFunction(r[2])&&!type_default.isArray(r[2])?(this.evalParam=type_default.createEvalFunction(o,r,2),r[2]=t.select(r[2])):this.evalParam=type_default.createEvalFunction(o,r,r.length),this.update=function(){var a=this.evalParam(0),n=this.evalParam(1),l=[1,0,0,0],h=Math.cos(a),d=Math.sin(a),u,c,p,f=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],_=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],g=math_default.norm(n);n.length===3?(u=n[0]/g,c=n[1]/g,p=n[2]/g):(u=n[1]/g,c=n[2]/g,p=n[3]/g),r.length===3&&(r.length===3&&type_default.exists(r[2].is3D)?l=r[2].coords.slice():l=this.evalParam(2),l.length===3&&l.unshift(1),f[1][0]=-l[1],f[2][0]=-l[2],f[3][0]=-l[3],_[1][0]=l[1],_[2][0]=l[2],_[3][0]=l[3]),this.matrix=[[1,0,0,0],[0,u*u*(1-h)+h,u*c*(1-h)-p*d,u*p*(1-h)+c*d],[0,c*u*(1-h)+p*d,c*c*(1-h)+h,c*p*(1-h)-u*d],[0,p*u*(1-h)-c*d,p*c*(1-h)+u*d,p*p*(1-h)+h]],this.matrix=math_default.matMatMult(this.matrix,f),this.matrix=math_default.matMatMult(_,this.matrix)}}else if(e==="affine"){if(r.length!==9)throw new Error("JSXGraph: 3D transformation of type 'affine' needs 9 parameters.");this.evalParam=type_default.createEvalFunction(o,r,9),this.update=function(){this.matrix[1][1]=this.evalParam(0),this.matrix[1][2]=this.evalParam(1),this.matrix[1][3]=this.evalParam(2),this.matrix[2][1]=this.evalParam(3),this.matrix[2][2]=this.evalParam(4),this.matrix[2][3]=this.evalParam(5),this.matrix[3][1]=this.evalParam(6),this.matrix[3][2]=this.evalParam(7),this.matrix[3][3]=this.evalParam(8)}}else if(e==="affinematrix"){if(r.length!==1)throw new Error("JSXGraph: 3D transformation of type 'affinematrix' needs 1 parameter.");this.evalParam=r[0].slice(),this.update=function(){for(var a=0,n;a<3;a++)for(n=0;n<3;n++)this.matrix[a+1][n+1]=type_default.evaluate(this.evalParam[a][n])}}else if(e==="generic"){if(r.length!==16)throw new Error("JSXGraph: 3D transformation of type 'generic' needs 16 parameters.");this.evalParam=type_default.createEvalFunction(o,r,6),this.update=function(){this.matrix[0][0]=this.evalParam(0),this.matrix[0][1]=this.evalParam(1),this.matrix[0][2]=this.evalParam(2),this.matrix[0][3]=this.evalParam(3),this.matrix[1][0]=this.evalParam(4),this.matrix[1][1]=this.evalParam(5),this.matrix[1][2]=this.evalParam(6),this.matrix[1][3]=this.evalParam(7),this.matrix[2][0]=this.evalParam(8),this.matrix[2][1]=this.evalParam(9),this.matrix[2][2]=this.evalParam(10),this.matrix[2][3]=this.evalParam(11),this.matrix[3][0]=this.evalParam(12),this.matrix[3][1]=this.evalParam(13),this.matrix[3][2]=this.evalParam(14),this.matrix[3][3]=this.evalParam(15)}}else if(e==="matrix"){if(r.length!==1)throw new Error("JSXGraph: 3D transformation of type 'matrix' needs 1 parameter.");this.evalParam=r[0].slice(),this.update=function(){for(var a=0,n;a<4;a++)for(n=0;n<4;n++)this.matrix[a][n]=type_default.evaluate(this.evalParam[a][n])}}else return;this.transformationType=e},apply:function(t,e){var r;return this.update(),this.is3D?r=t.coords:type_default.exists(e)?r=t.initialCoords.usrCoords:r=t.coords.usrCoords,math_default.matVecMult(this.matrix,r)},applyOnce:function(t){var e,r,s;for(type_default.isArray(t)||(t=[t]),r=t.length,s=0;s<r;s++)this.update(),this.is3D?t[s].coords=math_default.matVecMult(this.matrix,t[s].coords):(e=math_default.matVecMult(this.matrix,t[s].coords.usrCoords),t[s].coords.setCoordinates(constants.COORDS_BY_USER,e))},bindTo:function(t){var e,r;if(type_default.isArray(t))for(r=t.length,e=0;e<r;e++)t[e].transformations.push(this);else t.transformations.push(this)},meltTo:function(t){var e,r,s;if(type_default.isArray(t))for(e=0;e<t.length;e++)this.meltTo(t[e]);else r=t.transformations,r.length>0&&r[r.length-1].isNumericMatrix&&this.isNumericMatrix?r[r.length-1].melt(this):(s=this.clone(),r.push(s))},clone:function(){var t=null;return this.update(),this.isNumericMatrix&&(t=new jxg_default.Transformation(this.board,"none",[]),t.matrix=this.matrix.slice(),t.transformationType=this.transformationType),t},setProperty:function(t){jxg_default.deprecated("Transformation.setProperty()","Transformation.setAttribute()")},setAttribute:function(t){},melt:function(t){var e=[];return this.update(),t.update(),e=math_default.matMatMult(t.matrix,this.matrix),this.update=function(){this.matrix=e},this},getParents:function(){var t=[[].concat.apply([],this.matrix)];return this.parents.length!==0&&(t=this.parents),t}});jxg_default.createTransform=function(t,e,r){return new jxg_default.Transformation(t,r.type,e)};jxg_default.registerElement("transform",jxg_default.createTransform);jxg_default.createTransform3D=function(t,e,r){return new jxg_default.Transformation(t,r.type,e,!0)};jxg_default.registerElement("transform3d",jxg_default.createTransform3D);var transformation_default=jxg_default.Transformation;jxg_default.Turtle=function(t,e,r){var s,o,a;return this.constructor(t,r,constants.OBJECT_TYPE_TURTLE,constants.OBJECT_CLASS_OTHER),this.turtleIsHidden=!1,this.board=t,this.visProp.curveType="plot",this._attributes=type_default.copyAttributes(this.visProp,t.options,"turtle"),delete this._attributes.id,s=0,o=0,a=90,e.length!==0&&(e.length===3?(s=e[0],o=e[1],a=e[2]):e.length===2?type_default.isArray(e[0])?(s=e[0][0],o=e[0][1],a=e[1]):(s=e[0],o=e[1]):(s=e[0][0],o=e[0][1])),this.init(s,o,a),this};jxg_default.Turtle.prototype=new element_default;type_default.copyMethodMap(jxg_default.Turtle,{forward:"forward",fd:"forward",back:"back",bk:"back",right:"right",rt:"right",left:"left",lt:"left",penUp:"penUp",pu:"penUp",up:"penUp",penDown:"penDown",pd:"penDown",down:"penDown",clearScreen:"clearScreen",cs:"clearScreen",clean:"clean",setPos:"setPos",home:"home",hideTurtle:"hideTurtle",ht:"hideTurtle",hide:"hideTurtle",showTurtle:"showTurtle",st:"showTurtle",show:"showTurtle",penSize:"setPenSize",setPenSize:"setPenSize",penColor:"setPenColor",setPenColor:"setPenColor",highlightPenColor:"setHighlightPenColor",setHighlightPenColor:"setHighlightPenColor",getPenColor:"getPenColor",Color:"getPenColor",getHighlightPenColor:"getHighlightPenColor",HighlightColor:"getHighlightPenColor",getPenSize:"getPenSize",Size:"getPenSize",pushTurtle:"pushTurtle",push:"pushTurtle",popTurtle:"popTurtle",pop:"popTurtle",lookTo:"lookTo",pos:"pos",Pos:"pos",moveTo:"moveTo",X:"X",Y:"Y"});jxg_default.extend(jxg_default.Turtle.prototype,{init:function(t,e,r){var s={fixed:!0,name:"",visible:!1,withLabel:!1};this.arrowLen=20/math_default.hypot(this.board.unitX,this.board.unitY),this.pos=[t,e],this.isPenDown=!0,this.dir=90,this.stack=[],this.objects=[],this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve),this.turtle=this.board.create("point",this.pos,s),this.objects.push(this.turtle),this.turtle2=this.board.create("point",[this.pos[0],this.pos[1]+this.arrowLen],s),this.objects.push(this.turtle2),this.visProp.arrow.lastArrow=!0,this.visProp.arrow.straightFirst=!1,this.visProp.arrow.straightLast=!1,this.arrow=this.board.create("line",[this.turtle,this.turtle2],this.visProp.arrow),this.objects.push(this.arrow),this.subs={arrow:this.arrow},this.inherits.push(this.arrow),this.right(90-r),this.board.update()},forward:function(t){if(t===0)return this;var e,r=t*Math.cos(this.dir*Math.PI/180),s=t*Math.sin(this.dir*Math.PI/180);return this.turtleIsHidden||(e=this.board.create("transform",[r,s],{type:"translate"}),e.applyOnce(this.turtle),e.applyOnce(this.turtle2)),this.isPenDown&&this.curve.dataX.length>=8192&&(this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve)),this.pos[0]+=r,this.pos[1]+=s,this.isPenDown&&(this.curve.dataX.push(this.pos[0]),this.curve.dataY.push(this.pos[1])),this.board.update(),this},back:function(t){return this.forward(-t)},right:function(t){return this.dir-=t,this.dir%=360,this.turtleIsHidden||this.board.create("transform",[-t*Math.PI/180,this.turtle],{type:"rotate"}).applyOnce(this.turtle2),this.board.update(),this},left:function(t){return this.right(-t)},penUp:function(){return this.isPenDown=!1,this},penDown:function(){return this.isPenDown=!0,this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve),this},clean:function(){for(var t=0,e;t<this.objects.length;t++)e=this.objects[t],e.type===constants.OBJECT_TYPE_CURVE&&(this.board.removeObject(e),this.objects.splice(t,1));return this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve),this.board.update(),this},clearScreen:function(){return this.board.removeObject(this.objects),this.objects=[],this.init(0,0,90),this},setPos:function(t,e){var r;return type_default.isArray(t)?this.pos=t:this.pos=[t,e],this.turtleIsHidden||(this.turtle.setPositionDirectly(constants.COORDS_BY_USER,[t,e]),this.turtle2.setPositionDirectly(constants.COORDS_BY_USER,[t,e+this.arrowLen]),r=this.board.create("transform",[-(this.dir-90)*Math.PI/180,this.turtle],{type:"rotate"}),r.applyOnce(this.turtle2)),this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve),this.board.update(),this},setPenSize:function(t){return this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this.copyAttr("strokeWidth",t)),this.objects.push(this.curve),this},setPenColor:function(t){return this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this.copyAttr("strokeColor",t)),this.objects.push(this.curve),this},getPenAttribute:function(t){var e,r=this.objects.length;return r===4?e=0:e=r-1,this.objects[e].evalVisProp(t)},getPenSize:function(){return this.getPenAttribute("strokewidth")},getPenColor:function(){return this.getPenAttribute("strokecolor")},getHighlightPenColor:function(){return this.getPenAttribute("highlightstrokecolor")},setHighlightPenColor:function(t){return this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this.copyAttr("highlightStrokeColor",t)),this.objects.push(this.curve),this},setAttribute:function(t){var e,r,s,o=this.objects.length;for(e=0;e<o;e++)r=this.objects[e],r.type===constants.OBJECT_TYPE_CURVE&&r.setAttribute(t);return s=this.visProp.id,this.visProp=type_default.deepCopy(this.curve.visProp),this.visProp.id=s,this._attributes=type_default.deepCopy(this.visProp),delete this._attributes.id,this},copyAttr:function(t,e){return this._attributes[t.toLowerCase()]=e,this._attributes},showTurtle:function(){return this.turtleIsHidden=!1,this.arrow.setAttribute({visible:!0}),this.visProp.arrow.visible=!1,this.setPos(this.pos[0],this.pos[1]),this.board.update(),this},hideTurtle:function(){return this.turtleIsHidden=!0,this.arrow.setAttribute({visible:!1}),this.visProp.arrow.visible=!1,this.board.update(),this},home:function(){return this.pos=[0,0],this.setPos(this.pos[0],this.pos[1]),this},pushTurtle:function(){return this.stack.push([this.pos[0],this.pos[1],this.dir]),this},popTurtle:function(){var t=this.stack.pop();return this.pos[0]=t[0],this.pos[1]=t[1],this.dir=t[2],this.setPos(this.pos[0],this.pos[1]),this},lookTo:function(t){var e,r,s,o,a;return type_default.isArray(t)?(e=this.pos[0],r=this.pos[1],s=t[0],o=t[1],a=Math.atan2(o-r,s-e),this.right(this.dir-a*180/Math.PI)):type_default.isNumber(t)&&this.right(this.dir-t),this},moveTo:function(t){var e,r,s;return type_default.isArray(t)&&(e=t[0]-this.pos[0],r=t[1]-this.pos[1],this.turtleIsHidden||(s=this.board.create("transform",[e,r],{type:"translate"}),s.applyOnce(this.turtle),s.applyOnce(this.turtle2)),this.isPenDown&&this.curve.dataX.length>=8192&&(this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve)),this.pos[0]=t[0],this.pos[1]=t[1],this.isPenDown&&(this.curve.dataX.push(this.pos[0]),this.curve.dataY.push(this.pos[1])),this.board.update()),this},fd:function(t){return this.forward(t)},bk:function(t){return this.back(t)},lt:function(t){return this.left(t)},rt:function(t){return this.right(t)},pu:function(){return this.penUp()},pd:function(){return this.penDown()},ht:function(){return this.hideTurtle()},st:function(){return this.showTurtle()},cs:function(){return this.clearScreen()},push:function(){return this.pushTurtle()},pop:function(){return this.popTurtle()},evalAt:function(t,e){var r,s,o,a,n=this.objects.length;for(r=0,s=0;r<n;r++)if(o=this.objects[r],o.elementClass===constants.OBJECT_CLASS_CURVE){if(s<=t&&t<s+o.numberPoints)return a=t-s,o[e](a);s+=o.numberPoints}return this[e]()},X:function(t){return type_default.exists(t)?this.evalAt(t,"X"):this.pos[0]},Y:function(t){return type_default.exists(t)?this.evalAt(t,"Y"):this.pos[1]},Z:function(t){return 1},minX:function(){return 0},maxX:function(){var t,e,r=this.objects.length,s=0;for(t=0;t<r;t++)e=this.objects[t],e.elementClass===constants.OBJECT_CLASS_CURVE&&(s+=this.objects[t].numberPoints);return s},hasPoint:function(t,e){for(var r=0,s;r<this.objects.length;r++)if(s=this.objects[r],s.type===constants.OBJECT_TYPE_CURVE&&s.hasPoint(t,e))return!0;return!1}});jxg_default.createTurtle=function(t,e,r){var s;return e=e||[],s=type_default.copyAttributes(r,t.options,"turtle"),new jxg_default.Turtle(t,e,s)};jxg_default.registerElement("turtle",jxg_default.createTurtle);var turtle_default=jxg_default.Turtle;jxg_default.Ticks=function(t,e,r){if(this.constructor(t.board,r,constants.OBJECT_TYPE_TICKS,constants.OBJECT_CLASS_OTHER),this.line=t,this.board=this.line.board,this.fixedTicks=null,this.equidistant=!1,this.labelsData=[],type_default.isFunction(e))throw this.ticksFunction=e,new Error("Function arguments are no longer supported.");type_default.isArray(e)?this.fixedTicks=e:this.equidistant=!0,this.ticks=[],this.labels=[],this.labelCounter=0,this.id=this.line.addTicks(this),this.elType="ticks",this.inherits.push(this.labels),this.board.setId(this,"Ti")};jxg_default.Ticks.prototype=new element_default;jxg_default.extend(jxg_default.Ticks.prototype,{hasPoint:function(t,e){var r,s,o,a,n=this.ticks&&this.ticks.length||0;if(!this.line.evalVisProp("scalable")||this.line.elementClass===constants.OBJECT_CLASS_CURVE||(type_default.isObject(this.evalVisProp("precision"))?(a=this.board._inputDevice,o=this.evalVisProp("precision."+a)):o=this.board.options.precision.hasPoint,o+=this.evalVisProp("strokewidth")*.5,this.line.stdform[1]!==0&&this.line.stdform[2]!==0&&this.line.type!==constants.OBJECT_TYPE_AXIS))return!1;for(r=0;r<n;r++)if(s=this.ticks[r],s[2]&&!(this.line.stdform[1]===0&&Math.abs(s[0][0]-this.line.point1.coords.scrCoords[1])<math_default.eps||this.line.stdform[2]===0&&Math.abs(s[1][0]-this.line.point1.coords.scrCoords[2])<math_default.eps)&&(Math.abs(s[0][0]-s[0][1])>=1||Math.abs(s[1][0]-s[1][1])>=1)){if(this.line.stdform[1]===0){if(Math.abs(e-this.line.point1.coords.scrCoords[2])<2*o&&s[0][0]-o<t&&t<s[0][1]+o)return!0}else if(this.line.stdform[2]===0&&Math.abs(t-this.line.point1.coords.scrCoords[1])<2*o&&s[1][0]-o<e&&e<s[1][1]+o)return!0}return!1},setPositionDirectly:function(t,e,r){var s,o,a=new coords_default(t,e,this.board),n=new coords_default(t,r,this.board),l=this.board.getBoundingBox();return this.line.type!==constants.OBJECT_TYPE_AXIS||!this.line.evalVisProp("scalable")?this:(Math.abs(this.line.stdform[1])<math_default.eps&&Math.abs(a.usrCoords[1]*n.usrCoords[1])>math_default.eps?(s=n.usrCoords[1]/a.usrCoords[1],l[0]*=s,l[2]*=s,this.board.setBoundingBox(l,this.board.keepaspectratio,"update")):Math.abs(this.line.stdform[2])<math_default.eps&&Math.abs(a.usrCoords[2]*n.usrCoords[2])>math_default.eps&&(o=n.usrCoords[2]/a.usrCoords[2],l[3]*=o,l[1]*=o,this.board.setBoundingBox(l,this.board.keepaspectratio,"update")),this)},calculateTicksCoordinates:function(){var t,e,r,s;if(!(this.line.elementClass===constants.OBJECT_CLASS_LINE&&(this.setTicksSizeVariables(),Math.abs(this.dx)<math_default.eps&&Math.abs(this.dy)<math_default.eps)))return t=this.getZeroCoordinates(),this.line.elementClass===constants.OBJECT_CLASS_LINE?e=this.getLowerAndUpperBounds(t,"ticksdistance"):e={lower:this.line.minX(),upper:this.line.maxX(),a1:0,a2:0,m1:0,m2:0},this.evalVisProp("type")==="polar"&&(s=this.board.getBoundingBox(),r=Math.max(math_default.hypot(s[0],s[1]),math_default.hypot(s[2],s[3])),e.upper=r),this.ticks=[],this.labelsData=[],this.equidistant?this.generateEquidistantTicks(t,e):this.generateFixedTicks(t,e),this},setTicksSizeVariables:function(t){var e,r,s,o,a=this.evalVisProp("majorheight")*.5,n=this.evalVisProp("minorheight")*.5;type_default.exists(t)?(r=this.line.minX(),s=this.line.maxX(),o=this.line.points.length,o<2?(this.dxMaj=0,this.dyMaj=0):math_default.relDif(t,r)<math_default.eps?(this.dxMaj=this.line.points[0].usrCoords[2]-this.line.points[1].usrCoords[2],this.dyMaj=this.line.points[1].usrCoords[1]-this.line.points[0].usrCoords[1]):math_default.relDif(t,s)<math_default.eps?(this.dxMaj=this.line.points[o-2].usrCoords[2]-this.line.points[o-1].usrCoords[2],this.dyMaj=this.line.points[o-1].usrCoords[1]-this.line.points[o-2].usrCoords[1]):(this.dxMaj=-numerics_default.D(this.line.Y)(t),this.dyMaj=numerics_default.D(this.line.X)(t))):(this.dxMaj=this.line.stdform[1],this.dyMaj=this.line.stdform[2]),this.dxMin=this.dxMaj,this.dyMin=this.dyMaj,this.dx=this.dxMaj,this.dy=this.dyMaj,e=math_default.hypot(this.dxMaj*this.board.unitX,this.dyMaj*this.board.unitY),this.dxMaj*=a/e*this.board.unitX,this.dyMaj*=a/e*this.board.unitY,this.dxMin*=n/e*this.board.unitX,this.dyMin*=n/e*this.board.unitY,this.minStyle=this.evalVisProp("minorheight")<0?"infinite":"finite",this.majStyle=this.evalVisProp("majorheight")<0?"infinite":"finite"},getZeroCoordinates:function(){var t,e,r,s,o,a,n,l,h,d=this.evalVisProp("anchor");return this.line.elementClass===constants.OBJECT_CLASS_LINE?this.line.type===constants.OBJECT_TYPE_AXIS?geometry_default.projectPointToLine({coords:{usrCoords:[1,0,0]}},this.line,this.board):(r=this.line.point1.coords.usrCoords[0],t=this.line.point1.coords.usrCoords[1],e=this.line.point1.coords.usrCoords[2],a=this.line.point2.coords.usrCoords[0],s=this.line.point2.coords.usrCoords[1],o=this.line.point2.coords.usrCoords[2],d==="right"?this.line.point2.coords:d==="middle"?new coords_default(constants.COORDS_BY_USER,[(r+a)*.5,(t+s)*.5,(e+o)*.5],this.board):type_default.isNumber(d)?new coords_default(constants.COORDS_BY_USER,[r+(a-r)*d,t+(s-t)*d,e+(o-e)*d],this.board):this.line.point1.coords):(l=this.line.minX(),h=this.line.maxX(),d==="right"?n=h:d==="middle"?n=(l+h)*.5:type_default.isNumber(d)?n=l*(1-d)+h*d:n=l,n)},getLowerAndUpperBounds:function(t,e){var r,s,o,a,n,l,h,d,u,c,p,f,_,g,m,b=math_default.eps*10,C=this.line.evalVisProp("straightfirst"),y=this.line.evalVisProp("straightlast"),x=this.evalVisProp("includeboundaries");return this.line.elementClass===constants.OBJECT_CLASS_CURVE?{lower:this.line.minX(),upper:this.line.maxX()}:(n=new coords_default(constants.COORDS_BY_USER,this.line.point1.coords.usrCoords,this.board),l=new coords_default(constants.COORDS_BY_USER,this.line.point2.coords.usrCoords,this.board),h=Math.abs(n.usrCoords[0])>=math_default.eps&&n.scrCoords[1]>=0&&n.scrCoords[1]<=this.board.canvasWidth&&n.scrCoords[2]>=0&&n.scrCoords[2]<=this.board.canvasHeight,d=Math.abs(l.usrCoords[0])>=math_default.eps&&l.scrCoords[1]>=0&&l.scrCoords[1]<=this.board.canvasWidth&&l.scrCoords[2]>=0&&l.scrCoords[2]<=this.board.canvasHeight,type_default.exists(e)&&e==="ticksdistance"?(geometry_default.calcStraight(this.line,n,l,0),g=this.getDistanceFromZero(t,n),m=this.getDistanceFromZero(t,l),geometry_default.calcStraight(this.line,n,l,this.line.evalVisProp("margin")),g=this.getDistanceFromZero(t,n)-g,m=this.getDistanceFromZero(t,l).m2):geometry_default.calcLineDelimitingPoints(this.line,n,l),o=this.line.evalVisProp("firstarrow"),a=this.line.evalVisProp("lastarrow"),f=this.getDistanceFromZero(t,n),_=this.getDistanceFromZero(t,l),(o||a)&&(p=this.board.renderer.getArrowHeadData(this.line,this.line.evalVisProp("strokewidth"),""),this.board.renderer.getPositionArrowHead(this.line,n,l,p)),u=this.getDistanceFromZero(t,n),c=this.getDistanceFromZero(t,l),f=u-f,_=u-_,u<c?(r=u,s=c,!C&&h&&!x&&(r+=b),!y&&d&&!x&&(s-=b)):c<u?(r=c,s=u,!y&&d&&!x&&(r+=b),!C&&h&&!x&&(s-=b)):(r=0,s=0),{lower:r,upper:s,a1:f,a2:_,m1:g,m2:m})},getDistanceFromZero:function(t,e){var r=this.line.point1.coords,s=this.line.point2.coords,o,a,n=t.distance(constants.COORDS_BY_USER,e);return o=[s.usrCoords[0]-r.usrCoords[0],s.usrCoords[1]-r.usrCoords[1],s.usrCoords[2]-r.usrCoords[2]],a=[e.usrCoords[0]-t.usrCoords[0],e.usrCoords[1]-t.usrCoords[1],e.usrCoords[2]-t.usrCoords[2]],math_default.innerProduct(o,a,3)<0&&(n*=-1),n},generateEquidistantTicks:function(t,e){var r,s=math_default.eps,o,a,n=this.evalVisProp("minorticks");if(a=this.getDistanceMajorTicks(),this.line.elementClass===constants.OBJECT_CLASS_LINE&&(o=this.getXandYdeltas()),a*=this.evalVisProp("scale"),a/=n+1,this.ticksDelta=a,!(a<math_default.eps)){if(Math.abs(e.upper-e.lower)>a*2048){jxg_default.warn("JSXGraph ticks: too many ticks (>2048). Please increase ticksDistance.");return}for(r=0,this.evalVisProp("drawzero")||(r=a),r<e.lower&&(r=Math.floor((e.lower-s)/a)*a);r<=e.upper+s&&(r>=e.lower-s&&this.processTickPosition(t,r,a,o),r+=a,!(e.upper-r>a*1e4)););for(r=-a,r>e.upper&&(r=Math.ceil((e.upper+s)/-a)*-a);r>=e.lower-s&&(r<=e.upper+s&&this.processTickPosition(t,r,a,o),r-=a,!(r-e.lower>a*1e4)););}},getDistanceMajorTicks:function(){var t,e,r,s,o,a,n=5,l,h,d;return this.evalVisProp("insertticks")?(r=this.getLowerAndUpperBounds(this.getZeroCoordinates(),""),o=r.upper-r.lower,a=this.evalVisProp("scale"),l=o/(n+1)/a,h=this.evalVisProp("minticksdistance")/a,d=this.evalVisProp("minorticks"),s=this.getXandYdeltas(),s.x*=this.board.unitX,s.y*=this.board.unitY,h/=math_default.hypot(s.x,s.y),h*=d+1,t=Math.pow(10,Math.floor(Math.log(h)/Math.LN10)),2*t>=h?t*=2:5*t>=h&&(t*=5),e=Math.pow(10,Math.floor(Math.log(l)/Math.LN10)),5*e<l?e*=5:2*e<l&&(e*=2),t=Math.max(t,e),t):this.evalVisProp("ticksdistance")},processTickPosition:function(t,e,r,s){var o,a,n,l,h,d,u=this.evalVisProp("ticksperlabel"),c=null;this.line.elementClass===constants.OBJECT_CLASS_LINE?(o=t.usrCoords[1]+e*s.x,a=t.usrCoords[2]+e*s.y):(o=this.line.X(t+e),a=this.line.Y(t+e)),n=new coords_default(constants.COORDS_BY_USER,[o,a],this.board),this.line.elementClass===constants.OBJECT_CLASS_CURVE&&(c=t+e,this.setTicksSizeVariables(c)),h=this.evalVisProp("minorticks"),n.major=Math.round(e/r)%(h+1)===0,u||(u=h+1),d=Math.round(e/r)%u===0,l=this.createTickPath(n,n.major),l.length===3&&(this.ticks.push(l),d&&this.evalVisProp("drawlabels")?this.labelsData.push(this.generateLabelData(this.generateLabelText(n,t,c),n,this.ticks.length)):this.labelsData.push(null))},generateFixedTicks:function(t,e){var r,s,o,a,n,l,h=math_default.eps,d,u=type_default.isArray(this.visProp.labels),c,p=this.evalVisProp("drawlabels");for(this.line.elementClass===constants.OBJECT_CLASS_LINE&&(c=this.getXandYdeltas()),o=0;o<this.fixedTicks.length;o++)this.line.elementClass===constants.OBJECT_CLASS_LINE?(d=this.fixedTicks[o],n=t.usrCoords[1]+d*c.x,l=t.usrCoords[2]+d*c.y):(d=t+this.fixedTicks[o],n=this.line.X(d),l=this.line.Y(d)),r=new coords_default(constants.COORDS_BY_USER,[n,l],this.board),this.line.elementClass===constants.OBJECT_CLASS_CURVE&&this.setTicksSizeVariables(d),a=this.createTickPath(r,!0),a.length===3&&d>=e.lower-h&&d<=e.upper+h&&(this.ticks.push(a),p&&(u||type_default.exists(this.visProp.labels[o]))?(s=u?this.evalVisProp("labels."+o):d,this.labelsData.push(this.generateLabelData(this.generateLabelText(r,t,s),r,o))):this.labelsData.push(null))},getXandYdeltas:function(){var t,e,r=this.line.point1.Dist(this.line.point2);return t=this.line.point1.coords.usrCoords,e=this.line.point2.coords.usrCoords,{x:(e[1]-t[1])/r,y:(e[2]-t[2])/r}},_isInsideCanvas:function(t,e,r){var s=this.board.canvasWidth,o=this.board.canvasHeight;return r===void 0&&(r=0),t[0]>=r&&t[0]<=s-r&&e[0]>=r&&e[0]<=o-r||t[1]>=r&&t[1]<=s-r&&e[1]>=r&&e[1]<=o-r},createTickPath:function(t,e){var r,s,o,a,n,l,h,d,u,c=[-2e6,-2e6],p=[-2e6,-2e6],f,_,g,m,b,C,y,x,v;if(r=t.scrCoords,e?(a=this.dxMaj,n=this.dyMaj,u=this.majStyle,y=this.evalVisProp("majortickendings.0")>0,x=this.evalVisProp("majortickendings.1")>0):(a=this.dxMin,n=this.dyMin,u=this.minStyle,y=this.evalVisProp("tickendings.0")>0,x=this.evalVisProp("tickendings.1")>0),s=[-n*r[1]-a*r[2],n,a],e&&this.evalVisProp("type")==="polar"){if(m=this.board.getBoundingBox(),b=2*Math.PI,C=b/180,r=t.usrCoords,_=math_default.hypot(r[1],r[2]),g=Math.max(math_default.hypot(m[0],m[1]),math_default.hypot(m[2],m[3])),_<g){for(c=[],p=[],f=0;f<=b;f+=C)c.push(this.board.origin.scrCoords[1]+_*Math.cos(f)*this.board.unitX),p.push(this.board.origin.scrCoords[2]+_*Math.sin(f)*this.board.unitY);return[c,p,e]}}else{if(u==="infinite"){if(this.evalVisProp("ignoreinfinitetickendings")&&(y=x=!0),o=geometry_default.meetLineBoard(s,this.board),y&&x)c[0]=o[0].scrCoords[1],c[1]=o[1].scrCoords[1],p[0]=o[0].scrCoords[2],p[1]=o[1].scrCoords[2];else if(v=[math_default.innerProduct(o[0].usrCoords.slice(1,3),this.line.stdform.slice(1,3))+this.line.stdform[0],math_default.innerProduct(o[1].usrCoords.slice(1,3),this.line.stdform.slice(1,3))+this.line.stdform[0]],v[0]<v[1]&&(o.reverse(),v.reverse()),y){if(v[0]<0)return[];v[1]<0?(c[0]=o[0].scrCoords[1],p[0]=o[0].scrCoords[2],c[1]=r[1],p[1]=r[2]):(c[0]=o[0].scrCoords[1],p[0]=o[0].scrCoords[2],c[1]=o[1].scrCoords[1],p[1]=o[1].scrCoords[2])}else if(x){if(v[1]>0)return[];v[0]>0?(c[0]=r[1],p[0]=r[2],c[1]=o[1].scrCoords[1],p[1]=o[1].scrCoords[2]):(c[0]=o[0].scrCoords[1],p[0]=o[0].scrCoords[2],c[1]=o[1].scrCoords[1],p[1]=o[1].scrCoords[2])}}else this.evalVisProp("face")===">"?d=Math.PI/4:this.evalVisProp("face")==="<"?d=-Math.PI/4:d=0,l=Math.cos(d)*a-Math.sin(d)*n,h=Math.sin(d)*a+Math.cos(d)*n,c[0]=r[1]+l*y,p[0]=r[2]-h*y,c[1]=r[1],p[1]=r[2],d=-d,l=Math.cos(d)*a-Math.sin(d)*n,h=Math.sin(d)*a+Math.cos(d)*n,c[2]=r[1]-l*x,p[2]=r[2]+h*x;if(!this.evalVisProp("clip")||this._isInsideCanvas(c,p))return[c,p,e]}return[]},formatLabelText:function(t){var e,r,s=this.evalVisProp("label.usemathjax"),o=this.evalVisProp("label.usekatex"),a=this.evalVisProp("scalesymbol");return type_default.isNumber(t)?(this.evalVisProp("label.tofraction")?s?e="\\("+type_default.toFraction(t,!0)+"\\)":e=type_default.toFraction(t,o):(r=this.evalVisProp("digits"),this.useLocale()?e=this.formatNumberLocale(t,r):(e=(Math.round(t*1e11)/1e11).toString(),(e.length>this.evalVisProp("maxlabellength")||e.indexOf("e")!==-1)&&(this.evalVisProp("precision")!==3&&r===3&&(r=this.evalVisProp("precision")),e=t.toExponential(r).toString()))),this.evalVisProp("beautifulscientificticklabels")&&(e=this.beautifyScientificNotationLabel(e)),e.indexOf(".")>-1&&e.indexOf("e")===-1&&(e=e.replace(/0+$/,""),e=e.replace(/\.$/,""))):e=t.toString(),a.length>0&&(e==="1"?e=a:e==="-1"?e="-"+a:e!=="0"&&(e=e+a)),this.evalVisProp("useunicodeminus")&&(e=e.replace(/-/g,"−")),e},beautifyScientificNotationLabel:function(t){var e;return t.indexOf("e")===-1?t:(e=parseFloat(t.substring(0,t.indexOf("e")))+t.substring(t.indexOf("e")),e=e.replace(/e(.*)$/g,function(r,s){var o="•10";return o+=s.replace(/-/g,"⁻").replace(/\+/g,"").replace(/0/g,"⁰").replace(/1/g,"¹").replace(/2/g,"²").replace(/3/g,"³").replace(/4/g,"⁴").replace(/5/g,"⁵").replace(/6/g,"⁶").replace(/7/g,"⁷").replace(/8/g,"⁸").replace(/9/g,"⁹"),o}),e)},generateLabelText:function(t,e,r){var s,o;if(!type_default.exists(r)){if(o=this.getDistanceFromZero(e,t),Math.abs(o)<math_default.eps)return"0";r=o/this.evalVisProp("scale")}return s=this.formatLabelText(r),s},generateLabelData:function(t,e,r){var s,o,a,n=this.evalVisProp("label.fontsize");return s=[e.scrCoords[1],e.scrCoords[1]],o=[e.scrCoords[2],e.scrCoords[2]],a=n===void 0?12:n,a*=.5,!this.evalVisProp("clip")||!this._isInsideCanvas(s,o,a)?null:(s=this.evalVisProp("label.offset")[0],o=this.evalVisProp("label.offset")[1],{x:e.usrCoords[1]+s/this.board.unitX,y:e.usrCoords[2]+o/this.board.unitY,t,i:r})},update:function(){return this.needsUpdate&&this.board.canvasWidth!==0&&this.board.canvasHeight!==0&&this.calculateTicksCoordinates(),this},updateRenderer:function(){return this.needsUpdate?(this.visPropCalc.visible&&this.board.renderer.updateTicks(this),this.updateRendererLabels(),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},updateRendererLabels:function(){var t,e,r=this.labelsData.length,s=this.labels.length,o,a,n,l;for(t=0,e=0;t<r;t++)this.labelsData[t]!==null&&(n=this.labelsData[t],e<s?(a=this.labels[e],a.setText(n.t),a.setCoords(n.x,n.y),e++):(this.labelCounter+=1,o=type_default.deepCopy(this.visProp.label),o.isLabel=!0,o.priv=this.visProp.priv,o.id=this.id+n.i+"Label"+this.labelCounter,a=jxg_default.createText(this.board,[n.x,n.y,n.t],o),this.addChild(a),a.setParents(this),a.elType="label",a.isDraggable=!1,a.dump=!1,this.labels.push(a)),l=this.evalVisProp("label.visible"),l==="inherit"&&(l=this.visPropCalc.visible),a.prepareUpdate().updateVisibility(l).updateRenderer(),a.distanceX=this.evalVisProp("label.offset")[0],a.distanceY=this.evalVisProp("label.offset")[1]);for(r=e,e=r;e<s;e++)this.board.renderer.display(this.labels[e],!1),this.labels[e].visProp.visible=this.labels[e].visPropCalc.visible=!1;return this},hideElement:function(){var t;for(jxg_default.deprecated("Element.hideElement()","Element.setDisplayRendNode()"),this.visPropCalc.visible=!1,this.board.renderer.display(this,!1),t=0;t<this.labels.length;t++)type_default.exists(this.labels[t])&&this.labels[t].hideElement();return this},showElement:function(){var t;for(jxg_default.deprecated("Element.showElement()","Element.setDisplayRendNode()"),this.visPropCalc.visible=!0,this.board.renderer.display(this,!1),t=0;t<this.labels.length;t++)type_default.exists(this.labels[t])&&this.labels[t].showElement();return this}});jxg_default.createTicks=function(t,e,r){var s,o,a=type_default.copyAttributes(r,t.options,"ticks");if(e.length<2?o=a.ticksdistance:o=e[1],e[0].elementClass===constants.OBJECT_CLASS_LINE||e[0].elementClass===constants.OBJECT_CLASS_CURVE)s=new jxg_default.Ticks(e[0],o,a);else throw new Error("JSXGraph: Can't create Ticks with parent types '"+typeof e[0]+"'.");return type_default.isFunction(a.generatelabelvalue)&&(s.generateLabelText=a.generatelabelvalue),type_default.isFunction(a.generatelabeltext)&&(s.generateLabelText=a.generatelabeltext),s.setParents(e[0]),s.isDraggable=!0,s.fullUpdate(e[0].visPropCalc.visible),s};jxg_default.createHatchmark=function(t,e,r){var s,o,a,n,l,h,d=[],u=type_default.copyAttributes(r,t.options,"hatch");if(e[0].elementClass!==constants.OBJECT_CLASS_LINE&&e[0].elementClass!==constants.OBJECT_CLASS_CURVE||typeof e[1]!="number")throw new Error("JSXGraph: Can't create Hatch mark with parent types '"+typeof e[0]+"' and '"+typeof e[1]+" and ''"+typeof e[2]+"'.");for(s=e[1],n=u.ticksdistance,l=(s-1)*n,a=-l*.5,o=0;o<s;o++)d[o]=a+o*n;return h=t.create("ticks",[e[0],d],u),h.elType="hatch",e[0].inherits.push(h),h};jxg_default.registerElement("ticks",jxg_default.createTicks);jxg_default.registerElement("hash",jxg_default.createHatchmark);jxg_default.registerElement("hatch",jxg_default.createHatchmark);var ticks_default=jxg_default.Ticks,bitReverse=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,3,131,67,195,35,163,99,227,19,147,83,211,51,179,115,243,11,139,75,203,43,171,107,235,27,155,91,219,59,187,123,251,7,135,71,199,39,167,103,231,23,151,87,215,55,183,119,247,15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255],cplens=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],cplext=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99],cpdist=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],cpdext=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],border=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],NAMEMAX=256;jxg_default.Util=jxg_default.Util||{};jxg_default.Util.Unzip=function(t){var e,r,s,o,a=[],n=0,l=[],h=new Array(32768),d=0,u=!1,c=t.length,p=0,f=1,_=new Array(288),g=new Array(32),m=0,b=null,C=0,y=new Array(17),x=[];y[0]=0;function v(){return p<c?t[p++]:-1}function P(){f=1}function E(){var Y;try{Y=f&1,f>>=1,f===0&&(f=v(),Y=f&1,f=f>>1|128)}catch(F){throw console.log("Probably problems on iOS7 with >>"),F}return Y}function w(Y){var F=0,D=Y;try{for(;D--;)F=F<<1|E();Y&&(F=bitReverse[F]>>8-Y)}catch(A){throw console.log("Probably problems on iOS7 with >>"),A}return F}function O(){d=0}function S(Y){h[d++]=Y,a.push(String.fromCharCode(Y)),d===32768&&(d=0)}function M(){this.b0=0,this.b1=0,this.jump=null,this.jumppos=-1}function N(){for(var Y=!0;Y;){if(y[C]>=o)return-1;if(s[y[C]]===C)return y[C]++;y[C]++}}function j(){var Y=b[m],F;if(C===17)return-1;if(m++,C++,F=N(),F>=0)Y.b0=F;else if(Y.b0=32768,j())return-1;if(F=N(),F>=0)Y.b1=F,Y.jump=null;else if(Y.b1=32768,Y.jump=b[m],Y.jumppos=m,j())return-1;return C--,0}function k(Y,F,D,A){var T;for(b=Y,m=0,s=D,o=F,T=0;T<17;T++)y[T]=0;return C=0,j()?-1:0}function B(Y){for(var F,D,A,T=!0,U=0,V=Y[U];T;)if(A=E(),A){if(!(V.b1&32768))return V.b1;for(V=V.jump,F=Y.length,D=0;D<F;D++)if(Y[D]===V){U=D;break}}else{if(!(V.b0&32768))return V.b0;U++,V=Y[U]}}function I(){var Y,F,D,A,T,U,V,K,H,G,tt,st,it,et,lt,nt,ot=!0;do if(Y=E(),D=w(2),D===0)for(P(),G=v(),G|=v()<<8,st=v(),st|=v()<<8,(G^~st)&65535&&jxg_default.debug(`BlockLen checksum mismatch
173
+ `);G--;)F=v(),S(F);else if(D===1)for(;ot;)if(T=bitReverse[w(7)]>>1,T>23?(T=T<<1|E(),T>199?(T-=128,T=T<<1|E()):(T-=48,T>143&&(T=T+136))):T+=256,T<256)S(T);else{if(T===256)break;for(T-=257,H=w(cplext[T])+cplens[T],T=bitReverse[w(5)]>>3,cpdext[T]>8?(tt=w(8),tt|=w(cpdext[T]-8)<<8):tt=w(cpdext[T]),tt+=cpdist[T],T=0;T<H;T++)F=h[d-tt&32767],S(F)}else if(D===2){for(V=new Array(320),et=257+w(5),lt=1+w(5),nt=4+w(4),T=0;T<19;T++)V[T]=0;for(T=0;T<nt;T++)V[border[T]]=w(3);for(H=g.length,A=0;A<H;A++)g[A]=new M;if(k(g,19,V,0))return O(),1;for(it=et+lt,A=0;A<it;)if(T=B(g),T<16)V[A++]=T;else if(T===16){if(T=3+w(2),A+T>it)return O(),1;for(U=A?V[A-1]:0;T--;)V[A++]=U}else{if(T===17?T=3+w(3):T=11+w(7),A+T>it)return O(),1;for(;T--;)V[A++]=0}for(H=_.length,A=0;A<H;A++)_[A]=new M;if(k(_,et,V,0))return O(),1;for(H=_.length,A=0;A<H;A++)g[A]=new M;for(K=[],A=et;A<V.length;A++)K[A-et]=V[A];if(k(g,lt,K,0))return O(),1;for(;ot;)if(T=B(_),T>=256){if(T-=256,T===0)break;for(T-=1,H=w(cplext[T])+cplens[T],T=B(g),cpdext[T]>8?(tt=w(8),tt|=w(cpdext[T]-8)<<8):tt=w(cpdext[T]),tt+=cpdist[T];H--;)F=h[d-tt&32767],S(F)}else S(T)}while(!Y);return O(),P(),0}function X(){var Y,F,D,A,T,U,V,K,H=[];try{if(a=[],u=!1,H[0]=v(),H[1]=v(),H[0]===120&&H[1]===218&&(I(),l[n]=[a.join(""),"geonext.gxt"],n++),H[0]===31&&H[1]===139&&(J(),l[n]=[a.join(""),"file"],n++),H[0]===80&&H[1]===75){if(u=!0,H[2]=v(),H[3]=v(),H[2]===3&&H[3]===4){for(H[0]=v(),H[1]=v(),e=v(),e|=v()<<8,K=v(),K|=v()<<8,v(),v(),v(),v(),V=v(),V|=v()<<8,V|=v()<<16,V|=v()<<24,U=v(),U|=v()<<8,U|=v()<<16,U|=v()<<24,T=v(),T|=v()<<8,T|=v()<<16,T|=v()<<24,A=v(),A|=v()<<8,D=v(),D|=v()<<8,Y=0,x=[];A--;)F=v(),F==="/"|F===":"?Y=0:Y<NAMEMAX-1&&(x[Y++]=String.fromCharCode(F));for(r||(r=x),Y=0;Y<D;)F=v(),Y++;if(K===8&&(I(),l[n]=new Array(2),l[n][0]=a.join(""),l[n][1]=x.join(""),n++),J())return!1}return!0}}catch(G){throw console.log("Probably problems on iOS7 with >>"),G}return!1}function J(){var Y,F,D,A,T,U=[];if(e&8&&(U[0]=v(),U[1]=v(),U[2]=v(),U[3]=v(),U[0]===80&&U[1]===75&&U[2]===7&&U[3]===8?(Y=v(),Y|=v()<<8,Y|=v()<<16,Y|=v()<<24):Y=U[0]|U[1]<<8|U[2]<<16|U[3]<<24,F=v(),F|=v()<<8,F|=v()<<16,F|=v()<<24,D=v(),D|=v()<<8,D|=v()<<16,D|=v()<<24),u&&X())return!1;if(U[0]=v(),U[0]!==8)return!0;if(e=v(),v(),v(),v(),v(),v(),v(),e&4)for(U[0]=v(),U[2]=v(),C=U[0]+256*U[1],A=0;A<C;A++)v();if(e&8)for(A=0,x=[],T=v();T;)(T==="7"||T===":")&&(A=0),A<NAMEMAX-1&&(x[A++]=T),T=v();if(e&16)for(T=v();T;)T=v();return e&2&&(v(),v()),I(),Y=v(),Y|=v()<<8,Y|=v()<<16,Y|=v()<<24,D=v(),D|=v()<<8,D|=v()<<16,D|=v()<<24,u&&X(),!1}jxg_default.Util.Unzip.prototype.unzipFile=function(Y){var F;for(this.unzip(),F=0;F<l.length;F++)if(l[F][1]===Y)return l[F][0];return""},jxg_default.Util.Unzip.prototype.unzip=function(){return X(),l}};var zip_default=jxg_default.Util;jxg_default.CA=function(t,e,r){this.node=t,this.createNode=e,this.parser=r};jxg_default.extend(jxg_default.CA.prototype,{findMapNode:function(t,e){var r,s,o;if(e.value==="op_assign"&&e.children[0].value===t)return e.children[1];if(e.children){for(s=e.children.length,r=0;r<s;++r)if(o=this.findMapNode(t,e.children[r]),o!==null)return o}return null},setMath:function(t){var e,r;if((t.type=="node_op"&&(t.value=="op_add"||t.value=="op_sub"||t.value=="op_mul"||t.value=="op_div"||t.value=="op_neg"||t.value=="op_execfun"||t.value=="op_exp")||t.type=="node_var"||t.type=="node_const")&&(t.isMath=!0),t.children)for(r=t.children.length,e=0;e<r;++e)this.setMath(t.children[e])},deriveElementary:function(t,e){var r=t.children[0].value,s=t.children[1],o;switch(r){case"abs":o=this.createNode("node_op","op_div",s[0],this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_mul",type_default.deepCopy(s[0]),type_default.deepCopy(s[0]))]));break;case"sqrt":o=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_mul",this.createNode("node_const",2),this.createNode(t.type,t.value,type_default.deepCopy(t.children[0]),type_default.deepCopy(t.children[1]))));break;case"sin":o=this.createNode("node_op","op_execfun",this.createNode("node_var","cos"),type_default.deepCopy(s));break;case"cos":o=this.createNode("node_op","op_neg",this.createNode("node_op","op_execfun",this.createNode("node_var","sin"),type_default.deepCopy(s)));break;case"tan":o=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_exp",this.createNode("node_op","op_execfun",this.createNode("node_var","cos"),type_default.deepCopy(s)),this.createNode("node_const",2)));break;case"cot":o=this.createNode("node_op","op_neg",this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_exp",this.createNode("node_op","op_execfun",this.createNode("node_var","sin"),type_default.deepCopy(s)),this.createNode("node_const",2))));break;case"exp":o=this.createNode(t.type,t.value,type_default.deepCopy(t.children[0]),type_default.deepCopy(t.children[1]));break;case"pow":o=this.createNode("node_op","op_mul",this.createNode("node_op","op_execfun",type_default.deepCopy(t.children[0]),type_default.deepCopy(t.children[1])),this.createNode("node_op","op_add",this.createNode("node_op","op_mul",this.derivative(t.children[1][0],e),this.createNode("node_op","op_div",type_default.deepCopy(t.children[1][1]),type_default.deepCopy(t.children[1][0]))),this.createNode("node_op","op_mul",this.derivative(t.children[1][1],e),this.createNode("node_op","op_execfun",this.createNode("node_var","log"),[type_default.deepCopy(t.children[1][0])]))));break;case"log":case"ln":o=this.createNode("node_op","op_div",this.createNode("node_const",1),type_default.deepCopy(s[0]));break;case"log2":case"lb":case"ld":o=this.createNode("node_op","op_mul",this.createNode("node_op","op_div",this.createNode("node_const",1),type_default.deepCopy(s[0])),this.createNode("node_const",1.4426950408889634));break;case"log10":case"lg":o=this.createNode("node_op","op_mul",this.createNode("node_op","op_div",this.createNode("node_const",1),type_default.deepCopy(s[0])),this.createNode("node_const",.43429448190325176));break;case"asin":o=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_sub",this.createNode("node_const",1),this.createNode("node_op","op_mul",type_default.deepCopy(s[0]),type_default.deepCopy(s[0])))]));break;case"acos":o=this.createNode("node_op","op_neg",this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_sub",this.createNode("node_const",1),this.createNode("node_op","op_mul",type_default.deepCopy(s[0]),type_default.deepCopy(s[0])))])));break;case"atan":o=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_add",this.createNode("node_const",1),this.createNode("node_op","op_mul",type_default.deepCopy(s[0]),type_default.deepCopy(s[0]))));break;case"acot":o=this.createNode("node_op","op_neg",this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_add",this.createNode("node_const",1),this.createNode("node_op","op_mul",type_default.deepCopy(s[0]),type_default.deepCopy(s[0])))));break;case"sinh":o=this.createNode("node_op","op_execfun",this.createNode("node_var","cosh"),[type_default.deepCopy(s[0])]);break;case"cosh":o=this.createNode("node_op","op_execfun",this.createNode("node_var","sinh"),[type_default.deepCopy(s[0])]);break;case"tanh":o=this.createNode("node_op","op_sub",this.createNode("node_const",1),this.createNode("node_op","op_exp",this.createNode("node_op","op_execfun",this.createNode("node_var","tanh"),[type_default.deepCopy(s[0])]),this.createNode("node_const",2)));break;case"asinh":o=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_add",this.createNode("node_op","op_mul",type_default.deepCopy(s[0]),type_default.deepCopy(s[0])),this.createNode("node_const",1))]));break;case"acosh":o=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_sub",this.createNode("node_op","op_mul",type_default.deepCopy(s[0]),type_default.deepCopy(s[0])),this.createNode("node_const",1))]));break;case"atanh":o=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_sub",this.createNode("node_const",1),this.createNode("node_op","op_mul",type_default.deepCopy(s[0]),type_default.deepCopy(s[0]))));break;default:throw o=this.createNode("node_const",0),console.log('Derivative of "'+r+'" not yet implemented'),new Error("Error("+this.line+"): ")}return o},derivative:function(t,e){var r;switch(t.type){case"node_op":switch(t.value){case"op_execfun":t.children[0].value=="pow"?r=this.deriveElementary(t,e):t.children[1].length===0?r=this.createNode("node_const",0):r=this.createNode("node_op","op_mul",this.deriveElementary(t,e),this.derivative(t.children[1][0],e));break;case"op_div":r=this.createNode("node_op","op_div",this.createNode("node_op","op_sub",this.createNode("node_op","op_mul",this.derivative(t.children[0],e),type_default.deepCopy(t.children[1])),this.createNode("node_op","op_mul",type_default.deepCopy(t.children[0]),this.derivative(t.children[1],e))),this.createNode("node_op","op_mul",type_default.deepCopy(t.children[1]),type_default.deepCopy(t.children[1])));break;case"op_mul":r=this.createNode("node_op","op_add",this.createNode("node_op","op_mul",type_default.deepCopy(t.children[0]),this.derivative(t.children[1],e)),this.createNode("node_op","op_mul",this.derivative(t.children[0],e),type_default.deepCopy(t.children[1])));break;case"op_neg":r=this.createNode("node_op","op_neg",this.derivative(t.children[0],e));break;case"op_add":case"op_sub":r=this.createNode("node_op",t.value,this.derivative(t.children[0],e),this.derivative(t.children[1],e));break;case"op_exp":r=this.createNode("node_op","op_mul",type_default.deepCopy(t),this.createNode("node_op","op_add",this.createNode("node_op","op_mul",this.derivative(t.children[0],e),this.createNode("node_op","op_div",type_default.deepCopy(t.children[1]),type_default.deepCopy(t.children[0]))),this.createNode("node_op","op_mul",this.derivative(t.children[1],e),this.createNode("node_op","op_execfun",this.createNode("node_var","log"),[type_default.deepCopy(t.children[0])]))))}break;case"node_var":t.value===e?r=this.createNode("node_const",1):r=this.createNode("node_const",0);break;case"node_const":r=this.createNode("node_const",0)}return r},expandDerivatives:function(t,e,r){var s,o,a,n,l,h=0,d,u,c,p,f,_,g;if(!t)return h;for(this.line=t.line,this.col=t.col,s=t.children.length,o=0;o<s;++o)if(t.children[o]&&t.children[o].type)t.children[o]=this.expandDerivatives(t.children[o],t,r);else if(type_default.isArray(t.children[o]))for(a=0;a<t.children[o].length;++a)t.children[o][a]&&t.children[o][a].type&&(t.children[o][a]=this.expandDerivatives(t.children[o][a],t,r));switch(t.type){case"node_op":switch(t.value){case"op_execfun":if(t.children[0]&&t.children[0].value==="D"){if(g=!1,t.children[1][0].type=="node_var"&&(c=t.children[1][0].value,n=this.findMapNode(c,r),n!==null&&(g=!0)),g?(f=n.children[0],t.children[1].length>=2?p=t.children[1][1].value:p=n.children[0][0],l=n.children[1]):(l=t.children[1][0],f=["x"],t.children[1].length>=2?p=t.children[1][1].value:p="x"),t.children[1].length>=3?_=t.children[1][2].value:_=1,u=l,_>=1)for(;_>=1;)u=this.derivative(u,p),u=this.removeTrivialNodes(u),_--;e.type=="node_op"&&e.value=="op_assign"?d=this.createNode("node_op","op_map",f,u):d=u,this.setMath(d),t.type=d.type,t.value=d.value,d.children.length>0&&(t.children[0]=d.children[0]),d.children.length>1&&(t.children[1]=d.children[1])}}}return t},removeTrivialNodes:function(t){var e,r,s,o,a;if(type_default.isArray(t))for(r=t.length,e=0;e<r;++e)t[e]=this.removeTrivialNodes(t[e]);if(t.type!="node_op"||!t.children)return t;for(r=t.children.length,e=0;e<r;++e){this.mayNotBeSimplified=!1;do t.children[e]=this.removeTrivialNodes(t.children[e]);while(this.mayNotBeSimplified)}switch(t.value){case"op_map":if(s=t.children[0],o=t.children[1],o.type=="node_var"){for(e=0;e<s.length;++e)if(s[e]==o.value){o.isMath=!0;break}}break;case"op_add":if(s=t.children[0],o=t.children[1],s.type=="node_const"&&s.value===0)return o;if(o.type=="node_const"&&o.value===0)return s;if(s.type=="node_const"&&o.type=="node_const")return s.value+=o.value,s;break;case"op_mul":if(s=t.children[0],o=t.children[1],s.type=="node_const"&&s.value==1)return o;if(o.type=="node_const"&&o.value==1||s.type=="node_const"&&s.value===0)return s;if(o.type=="node_const"&&o.value===0||o.type=="node_const"&&o.value===0)return o;if(s.type=="node_op"&&s.value=="op_neg"&&o.type=="node_op"&&o.value=="op_neg")return t.children=[s.children[0],o.children[0]],this.mayNotBeSimplified=!0,t;if(s.value=="op_neg"&&o.value!="op_neg")return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_op","op_mul",s.children[0],o)],this.mayNotBeSimplified=!0,t;if(s.value!="op_neg"&&o.value=="op_neg")return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_op","op_mul",s,o.children[0])],this.mayNotBeSimplified=!0,t;if(s.value=="op_div"&&s.children[0].type=="node_const"&&s.children[0].value==1)return t.type="node_op",t.value="op_div",t.children=[o,s.children[1]],this.mayNotBeSimplified=!0,t;if(o.value=="op_div"&&o.children[0].type=="node_const"&&o.children[0].value==1)return t.type="node_op",t.value="op_div",t.children=[s,o.children[1]],this.mayNotBeSimplified=!0,t;if(s.type!="node_const"&&o.type=="node_const")return t.children=[o,s],this.mayNotBeSimplified=!0,t;if(s.type!="node_const"&&o.type=="node_op"&&o.value=="op_neg"&&o.children[0].type=="node_const")return t.children=[o,s],this.mayNotBeSimplified=!0,t;if(s.type=="node_op"&&s.value!="op_execfun"&&(o.type=="node_var"||o.type=="node_op"&&o.value=="op_execfun"))return t.children=[o,s],this.mayNotBeSimplified=!0,t;if(s.type!="node_op"&&o.type=="node_op"&&o.value=="op_neg"&&o.children[0].type=="node_var")return t.children=[o,s],this.mayNotBeSimplified=!0,t;if(s.type!="node_const"&&o.type=="node_op"&&(o.value=="op_mul"||o.value=="op_div")&&o.children[0].type=="node_const")return a=o.children[0],o.children[0]=s,t.children=[a,o],this.mayNotBeSimplified=!0,t;if(o.type!="node_const"&&s.type=="node_op"&&s.value=="op_mul"&&s.children[0].type=="node_const")return t.children=[s.children[0],this.createNode("node_op","op_mul",s.children[1],o)],this.mayNotBeSimplified=!0,t;if(s.type=="node_const"&&o.type=="node_const")return s.value*=o.value,s;if(s.type=="node_const"&&o.type=="node_op"&&(o.value=="op_mul"||o.value=="op_div")&&o.children[0].type=="node_const")return o.children[0].value*=s.value,o;if(s.hash=this.parser.compile(s),o.hash=this.parser.compile(o),s.hash===o.hash)return t.value="op_exp",t.children[1]=this.createNode("node_const",2),t;if(s.type=="node_const"&&o.type=="node_op"&&(o.value=="op_mul"||o.value=="op_div")&&o.children[0].type=="node_const")return o.children[0].value*=s.value,o;if(o.type=="node_op"&&o.value=="op_exp"&&(s.hash||(s.hash=this.parser.compile(s)),o.children[0].hash||(o.children[0].hash=this.parser.compile(o.children[0])),s.hash===o.children[0].hash))return o.children[1]=this.createNode("node_op","op_add",o.children[1],this.createNode("node_const",1)),this.mayNotBeSimplified=!0,o;if(s.type=="node_op"&&s.value=="op_exp"&&o.type=="node_op"&&o.value=="op_exp"&&(s.children[0].hash=this.parser.compile(s.children[0]),o.children[0].hash=this.parser.compile(o.children[0]),s.children[0].hash===o.children[0].hash))return s.children[1]=this.createNode("node_op","op_add",s.children[1],o.children[1]),this.mayNotBeSimplified=!0,s;break;case"op_sub":if(s=t.children[0],o=t.children[1],s.type=="node_const"&&s.value===0)return t.value="op_neg",t.children[0]=o,t;if(o.type=="node_const"&&o.value===0)return s;if(s.type=="node_const"&&o.type=="node_const"&&s.value==o.value)return this.createNode("node_const",0);if(s.type=="node_var"&&o.type=="node_var"&&s.value==o.value)return this.createNode("node_const",0);if(s.type=="node_const"&&o.type=="node_const")return s.value-=o.value,s;if(s.type=="node_op"&&s.value=="op_mul"&&o.type=="node_op"&&o.value=="op_mul"&&(s.children[1].hash=this.parser.compile(s.children[1]),o.children[1].hash=this.parser.compile(o.children[1]),s.children[1].hash===o.children[1].hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_sub",s.children[0],o.children[0]),s.children[1]],this.mayNotBeSimplified=!0,t;if(s.type=="node_op"&&s.value=="op_mul"&&(s.children[1].hash=this.parser.compile(s.children[1]),o.hash=this.parser.compile(o),s.children[1].hash===o.hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_sub",s.children[0],this.createNode("node_const",1)),o],this.mayNotBeSimplified=!0,t;if(o.type=="node_op"&&o.value=="op_mul"&&(o.children[1].hash=this.parser.compile(o.children[1]),s.hash=this.parser.compile(s),o.children[1].hash===s.hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_sub",this.createNode("node_const",1),o.children[0]),s],this.mayNotBeSimplified=!0,t;break;case"op_neg":if(s=t.children[0],s.type=="node_const"&&s.value===0)return s;if(s.type=="node_op"&&s.value=="op_neg")return s.children[0];break;case"op_div":if(s=t.children[0],o=t.children[1],s.type=="node_const"&&o.type=="node_const"&&s.value==o.value&&s.value!==0)return s.value=1,s;if(s.type=="node_const"&&s.value===0&&o.type=="node_const"&&o.value!==0)return s.value=0,s;if(s.type=="node_const"&&s.value===0&&(o.type=="node_op"||o.type=="node_var"))return t.type="node_const",t.value=0,t;if(s.type=="node_var"&&o.type=="node_var"&&s.value==o.value)return this.createNode("node_const",1);if(s.type=="node_const"&&s.value!==0&&o.type=="node_const"&&o.value===0)return s.value>0?s.value=1/0:s.value=-1/0,s;if(s.type=="node_op"&&s.value=="op_neg"&&o.type=="node_op"&&o.value=="op_neg")return t.children=[s.children[0],o.children[0]],this.mayNotBeSimplified=!0,t;if(s.value=="op_neg"&&o.value!="op_neg")return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_op","op_div",s.children[0],o)],this.mayNotBeSimplified=!0,t;if(s.value!="op_neg"&&o.value=="op_neg")return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_op","op_div",s,o.children[0])],this.mayNotBeSimplified=!0,t;if(s.type=="node_op"&&s.value=="op_exp"&&(o.hash||(o.hash=this.parser.compile(o)),s.children[0].hash||(s.children[0].hash=this.parser.compile(s.children[0])),o.hash===s.children[0].hash))return s.children[1]=this.createNode("node_op","op_sub",s.children[1],this.createNode("node_const",1)),this.mayNotBeSimplified=!0,s;if(o.type!="node_const"&&s.type=="node_op"&&s.value=="op_mul"&&s.children[0].type=="node_const")return t.value="op_mul",t.children=[s.children[0],this.createNode("node_op","op_div",s.children[1],o)],this.mayNotBeSimplified=!0,t;if(s.type=="node_op"&&s.value=="op_exp"&&o.type=="node_op"&&o.value=="op_exp"&&(s.children[0].hash=this.parser.compile(s.children[0]),o.children[0].hash=this.parser.compile(o.children[0]),s.children[0].hash===o.children[0].hash))return s.children[1]=this.createNode("node_op","op_sub",s.children[1],o.children[1]),this.mayNotBeSimplified=!0,s;break;case"op_exp":if(s=t.children[0],o=t.children[1],o.type=="node_const"&&o.value===0)return o.value=1,o;if(o.type=="node_const"&&o.value==1||s.type=="node_const"&&s.value==1||s.type=="node_const"&&s.value===0&&o.type=="node_const"&&o.value!==0)return s;if(s.type=="node_op"&&s.value=="op_exp")return t.children=[s.children[0],this.createNode("node_op","op_mul",s.children[1],o)],t}switch(t.value){case"op_add":if(s=t.children[0],o=t.children[1],s.type=="node_const"&&o.type=="node_const"&&s.value==o.value)return s.value+=o.value,s;if(s.type=="node_var"&&o.type=="node_var"&&s.value==o.value)return t.children[0]=this.createNode("node_const",2),t.value="op_mul",t;if(s.type=="node_op"&&s.value=="op_neg")return t.value="op_sub",t.children[0]=o,t.children[1]=s.children[0],this.mayNotBeSimplified=!0,t;if(o.type=="node_op"&&o.value=="op_neg")return t.value="op_sub",t.children[1]=o.children[0],this.mayNotBeSimplified=!0,t;if(s.type=="node_op"&&s.value=="op_mul"&&o.type=="node_op"&&o.value=="op_mul"&&(s.children[1].hash=this.parser.compile(s.children[1]),o.children[1].hash=this.parser.compile(o.children[1]),s.children[1].hash===o.children[1].hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_add",s.children[0],o.children[0]),s.children[1]],this.mayNotBeSimplified=!0,t;if(s.type=="node_op"&&s.value=="op_mul"&&(s.children[1].hash=this.parser.compile(s.children[1]),o.hash=this.parser.compile(o),s.children[1].hash===o.hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_add",s.children[0],this.createNode("node_const",1)),o],this.mayNotBeSimplified=!0,t;if(o.type=="node_op"&&o.value=="op_mul"&&(o.children[1].hash=this.parser.compile(o.children[1]),s.hash=this.parser.compile(s),o.children[1].hash===s.hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_add",this.createNode("node_const",1),o.children[0]),s],this.mayNotBeSimplified=!0,t;break;case"op_sub":if(s=t.children[0],o=t.children[1],o.type=="node_op"&&o.value=="op_neg")return t.value="op_add",t.children[1]=o.children[0],this.mayNotBeSimplified=!0,t;break;case"op_execfun":return this.simplifyElementary(t)}return t},simplifyElementary:function(t){var e=t.children[0].value,r=t.children[1];if(r.length==0)return t;switch(e){case"sin":case"tan":if(r[0].type=="node_const"&&r[0].value===0||r[0].type=="node_var"&&r[0].value=="PI"||r[0].type=="node_op"&&r[0].value=="op_mul"&&r[0].children[0].type=="node_const"&&r[0].children[0].value%1===0&&r[0].children[1].type=="node_var"&&r[0].children[1].value=="PI")return t.type="node_const",t.value=0,t;break;case"cos":if(r[0].type=="node_const"&&r[0].value===0)return t.type="node_const",t.value=1,t;if(r[0].type=="node_var"&&r[0].value=="PI")return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_const",1)],t;break;case"exp":if(r[0].type=="node_const"&&r[0].value===0)return t.type="node_const",t.value=1,t;break;case"pow":if(r[1].type=="node_const"&&r[1].value===0)return t.type="node_const",t.value=1,t}return t}});var ca_default=jxg_default.CA;jxg_default.Dump={addMarkers:function(t,e,r){var s,o,a;type_default.isArray(e)||(e=[e]),type_default.isArray(r)||(r=[r]),o=Math.min(e.length,r.length),e.length=o,r.length=o;for(s in t.objects)if(t.objects.hasOwnProperty(s))for(a=0;a<o;a++)t.objects[s][e[a]]=r[a]},deleteMarkers:function(t,e){var r,s,o;type_default.isArray(e)||(e=[e]),s=e.length,e.length=s;for(r in t.objects)if(t.objects.hasOwnProperty(r))for(o=0;o<s;o++)delete t.objects[r][e[o]]},str:function(t){return typeof t=="string"&&t.slice(0,7)!=="function"&&(t='"'+t+'"'),t},_minimizeSubObject:function(t,e,r){var s,o,a,n=!0,l=t;for(s in e)e.hasOwnProperty(s)&&(o=s.toLowerCase(),e[s]===l[o]||!type_default.exists(e[s])&&!type_default.exists(l[o])?delete l[o]:type_default.isArray(e[s])&&type_default.isArray(l[o])?type_default.cmpArrays(l[o],e[s])?delete l[o]:n=!1:type_default.exists(e[s])&&typeof e[s]=="object"&&type_default.exists(l[o])&&typeof l[o]=="object"?(a=this._minimizeSubObject(l[o],e[s],r+" "),a?delete l[o]:n=!1):n=!1);return n&&Object.keys(e).length===0&&Object.keys(l).length!==0&&(n=!1),n},minimizeObject:function(t,e){var r,s,o={},a=type_default.deepCopy(t),n=[];for(r=1;r<arguments.length;r++)n.push(arguments[r]);for(o=type_default.deepCopy(o,jxg_default.Options.elements,!0),r=n.length-1;r>=0;r--)o=type_default.deepCopy(o,n[r],!0);return s=this._minimizeSubObject(a,o," "),s===!0&&(a={}),a},prepareAttributes:function(t,e){var r,s,o=jxg_default.Options[e.elType]||{};r=this.minimizeObject(e.getAttributes(),o);for(s in e.subs)e.subs.hasOwnProperty(s)&&(r[s]=this.minimizeObject(e.subs[s].getAttributes(),o[s],jxg_default.Options[e.subs[s].elType]||{}),r[s].id=e.subs[s].id,r[s].name=e.subs[s].name);return type_default.exists(r.label)&&(o=jxg_default.Options.label||{},r.label=this.minimizeObject(r.label,o),type_default.isEmpty(r.label)&&delete r.label),type_default.exists(r.layer)&&(o=jxg_default.Options.layer||{},r.layer===o[e.elType]&&delete r.layer),type_default.exists(r.draft)&&r.draft===!1&&delete r.draft,r.id=e.id,r.name=e.name,r},setBoundingBox:function(t,e,r){return t.push({obj:r,method:"setBoundingBox",params:[e.getBoundingBox(),e.keepaspectratio]}),t},dump:function(t,e){var r,s,o,a,n=[],l=[],h=[],d=t.objectsList.length;for(this.addMarkers(t,"dumped",!1),r=0;r<d;r++)if(s=t.objectsList[r],o={},!s.dumped&&s.dump){for(o.type=s.getType(),o.parents=s.getParents().slice(),o.children=[],o.type==="point"&&o.parents[0]===1&&(o.parents=o.parents.slice(1)),a=0;a<o.parents.length;a++)e!==!0&&type_default.isString(o.parents[a])&&o.parents[a][0]!=="'"&&o.parents[a][0]!=='"'?o.parents[a]='"'+o.parents[a]+'"':type_default.isArray(o.parents[a])&&(o.parents[a]="["+o.parents[a].toString()+"]");o.attributes=this.prepareAttributes(t,s),o.type==="glider"&&s.onPolygon&&n.push({obj:s.id,prop:"onPolygon",val:!0}),h.push(o)}return this.deleteMarkers(t,"dumped"),{elements:h,props:n,methods:l}},arrayToParamStr:function(t,e){var r,s=[];for(r=0;r<t.length;r++)s.push(e.call(this,t[r]));return s.join(", ")},toJCAN:function(t){var e,r,s;switch(typeof t){case"object":if(t){if(r=[],type_default.isArray(t)){for(e=0;e<t.length;e++)r.push(this.toJCAN(t[e]));return"["+r.join(",")+"]"}for(s in t)t.hasOwnProperty(s)&&r.push(s+": "+this.toJCAN(t[s]));return"<<"+r.join(", ")+">> "}return"null";case"string":return"'"+t.replace(/\\/g,"\\\\").replace(/(["'])/g,"\\$1")+"'";case"number":case"boolean":return t.toString();case"null":return"null"}},toJessie:function(t,e){var r,s,o,a,n=this.dump(t),l=[];if(n.methods=this.setBoundingBox(n.methods,t,"$board"),o=n.elements,e===!0)for(r=0;r<o.length;r++)for(s in o[r].attributes)o[r].attributes.hasOwnProperty(s)&&s!=="id"&&s!=="name"&&delete o[r].attributes[s];for(r=0;r<o.length;r++)o[r].attributes.name.length>0&&l.push("// "+o[r].attributes.name),l.push("s"+r+" = "+o[r].type+"("+o[r].parents.join(", ")+") "+this.toJCAN(o[r].attributes).replace(/\n/,"\\n")+";"),o[r].type==="axis"&&(a=o[r].attributes.id,t.objects[a].defaultTicks===null&&l.push("s"+r+".removeAllTicks();")),l.push("");for(r=0;r<n.methods.length;r++)l.push(n.methods[r].obj+"."+n.methods[r].method+"("+this.arrayToParamStr(n.methods[r].params,this.toJCAN)+");"),l.push("");for(r=0;r<n.props.length;r++)l.push(n.props[r].obj+"."+n.props[r].prop+" = "+this.toJCAN(n.props[r].val)+";"),l.push("");return l.join(`
174
+ `)},toJSON:function(t,e){var r=this.dump(t,!0),s,o,a,n=r.elements;for(s=0;s<n.length;s++)if(n[s].properties={},n[s].ancestors=[],o=t.objects[n[s].attributes.id],type_default.exists(o)){for(a in o.childElements)o.childElements.hasOwnProperty(a)&&o.childElements[a].dump&&n[s].children.push(a);n[s].children=type_default.uniqueArray(n[s].children),n[s].properties.isDraggable=o.isDraggable&&o.visPropCalc.visible,n[s].properties.elType=o.elType;for(a in o.ancestors)o.ancestors.hasOwnProperty(a)&&o.ancestors[a].dump&&n[s].ancestors.push(a);n[s].ancestors=type_default.uniqueArray(n[s].ancestors)}return r.userLog=t.userLog.slice(),e===!0?r:JSON.stringify(r)},toJavaScript:function(t){var e,r,s,o=this.dump(t),a=[];for(o.methods=this.setBoundingBox(o.methods,t,"board"),r=o.elements,e=0;e<r.length;e++)a.push('board.create("'+r[e].type+'", ['+r[e].parents.join(", ")+"], "+type_default.toJSON(r[e].attributes)+");"),r[e].type==="axis"&&(s=r[e].attributes.id,t.objects[s].defaultTicks===null&&a.push('board.objects["'+s+'"].removeTicks(board.objects["'+s+'"].defaultTicks);'));for(e=0;e<o.methods.length;e++)a.push(o.methods[e].obj+"."+o.methods[e].method+"("+this.arrayToParamStr(o.methods[e].params,type_default.toJSON)+");"),a.push("");for(e=0;e<o.props.length;e++)a.push(o.props[e].obj+"."+o.props[e].prop+" = "+type_default.toJSON(o.props[e].val)+";"),a.push("");return a.join(`
175
+ `)}};var dump_default=jxg_default.Dump;jxg_default.createComb=function(t,e,r){var s,o,a,n,l;if(e.length===2){if(type_default.isArray(e[0])&&e[0].length>1)n=type_default.copyAttributes(r,t.options,"comb","point1"),s=t.create("point",e[0],n);else if(type_default.isString(e[0])||type_default.isPoint(e[0]))s=t.select(e[0]);else if(type_default.isFunction(e[0])&&type_default.isPoint(e[0]()))s=e[0]();else if(type_default.isFunction(e[0])&&e[0]().length&&e[0]().length>=2)n=type_default.copyAttributes(r,t.options,"comb","point1"),s=jxg_default.createPoint(t,e[0](),n);else throw new Error("JSXGraph: Can't create comb with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
176
+ Possible parent types: [point,point], [[x1,y1],[x2,y2]]`);if(type_default.isArray(e[1])&&e[1].length>1)n=type_default.copyAttributes(r,t.options,"comb","point2"),o=t.create("point",e[1],n);else if(type_default.isString(e[1])||type_default.isPoint(e[1]))o=t.select(e[1]);else if(type_default.isFunction(e[1])&&type_default.isPoint(e[1]()))o=e[1]();else if(type_default.isFunction(e[1])&&e[1]().length&&e[1]().length>=2)n=type_default.copyAttributes(r,t.options,"comb","point2"),o=jxg_default.createPoint(t,e[1](),n);else throw new Error("JSXGraph: Can't create comb with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
177
+ Possible parent types: [point,point], [[x1,y1],[x2,y2]]`)}else throw l=e.map(function(h){return"'"+typeof h+"'"}),new Error("JSXGraph: Can't create comb with parent types "+l.join(", ")+`.
178
+ Possible parent types: [point,point], [[x1,y1],[x2,y2]]`);return n=type_default.copyAttributes(r,t.options,"comb"),a=t.create("curve",[[0],[0]],n),a.updateDataArray=function(){var h=0,d=s.Dist(o),u,c,p,f,_,g,m,b=s,C=o,y=a.evalVisProp("frequency"),x=-a.evalVisProp("angle"),v=a.evalVisProp("width");for(a.evalVisProp("reverse")&&(b=o,C=s,x=-x),u=Math.cos(x),c=Math.sin(x),p=(C.X()-b.X())/d,f=(C.Y()-b.Y())/d,u*=v/Math.abs(c),c*=v/Math.abs(c),this.dataX=[],this.dataY=[];h<d;)_=b.X()+p*h,g=b.Y()+f*h,m=Math.min(u,d-h)/Math.abs(u),c*=m,u*=m,this.dataX.push(_),this.dataY.push(g),this.dataX.push(_+p*u+f*c),this.dataY.push(g-p*c+f*u),this.dataX.push(NaN),this.dataY.push(NaN),h+=y},a};jxg_default.registerElement("comb",jxg_default.createComb);var priv$3={removeSlopeTriangle:function(){polygon_default.prototype.remove.call(this),this.board.removeObject(this.toppoint),this.board.removeObject(this.glider),this.board.removeObject(this.baseline),this.board.removeObject(this.basepoint),this.board.removeObject(this.label),this._isPrivateTangent&&this.board.removeObject(this.tangent)},Slope:function(){return this.tangent.getSlope()},getAngle:function(t){return this.tangent.getAngle(t)},DeltaX:function(){return this.borderHorizontal.Direction()[0]},DeltaY:function(){return this.borderVertical.Direction()[1]},Direction:function(){return this.tangent.Direction()}};jxg_default.createSlopeTriangle=function(t,e,r){var s,o,a,n,l,h,d,u,c,p=!1;if(e.length===1&&e[0].type===constants.OBJECT_TYPE_TANGENT)o=e[0],a=o.glider;else if(e.length===1&&e[0].type===constants.OBJECT_TYPE_GLIDER)a=e[0],c=type_default.copyAttributes(r,t.options,"slopetriangle","tangent"),o=t.create("tangent",[a],c),p=!0;else if(e.length===2&&e[0].elementClass===constants.OBJECT_CLASS_LINE&&type_default.isPoint(e[1]))o=e[0],a=e[1];else throw new Error("JSXGraph: Can't create slope triangle with parent types '"+typeof e[0]+"'.");return c=type_default.copyAttributes(r,t.options,"slopetriangle","basepoint"),d=t.create("point",[function(){return[a.X()+1,a.Y()]}],c),c=type_default.copyAttributes(r,t.options,"slopetriangle","baseline"),h=t.create("line",[a,d],c),c=type_default.copyAttributes(r,t.options,"slopetriangle","glider"),n=t.create("glider",[a.X()+1,a.Y(),h],c),c=type_default.copyAttributes(r,t.options,"slopetriangle","toppoint"),l=t.create("point",[function(){return[n.X(),n.Y()+(n.X()-a.X())*o.getSlope()]}],c),c=type_default.copyAttributes(r,t.options,"slopetriangle"),s=t.create("polygon",[a,n,l],c),s.elType="slopetriangle",s.Slope=priv$3.Slope,s.getAngle=priv$3.getAngle,s.DeltaX=priv$3.DeltaX,s.DeltaY=priv$3.DeltaY,s.Direction=priv$3.Direction,s.tangent=o,s._isPrivateTangent=p,s.borderHorizontal=s.borders[0],s.borderVertical=s.borders[1],s.borderParallel=s.borders[2],s.borderParallel.setArrow(!1,!1),c=type_default.copyAttributes(r,t.options,"slopetriangle","label"),c=type_default.copyAttributes(c,t.options,"label"),c.isLabel=!0,c.anchor=s.borderVertical,c.priv=s.borderVertical.visProp.priv,c.id=s.borderVertical.id+"Label",u=t.create("text",[0,0,function(){return""}],c),u.elType="label",u.needsUpdate=!0,u.dump=!1,s.borderVertical.label=u,s.borderVertical.hasLabel=!0,s.borderVertical.visProp.withlabel=!0,s.borderVertical.slopetriangle=s,s.borderHorizontal.slopetriangle=s,n.slopetriangle=s,d.slopetriangle=s,h.slopetriangle=s,l.slopetriangle=s,u.slopetriangle=s,u.setText(function(){var f="",_="",g=u.evalVisProp("digits"),m=s.Slope();return u.evalVisProp("showprefix")&&(f=u.evalVisProp("prefix")),u.evalVisProp("showsuffix")&&(_=u.evalVisProp("suffix")),g==="none"||(g==="auto"?u.useLocale()?m=u.formatNumberLocale(m):m=type_default.autoDigits(m):u.useLocale()?m=u.formatNumberLocale(m,g):m=type_default.toFixed(m,g)),type_default.isFunction(s.visProp.formatvalue)&&(m=s.visProp.formatvalue(s,m)),f+m+_}),u.fullUpdate(),s.glider=n,s.basepoint=d,s.baseline=h,s.toppoint=l,s.label=u,s.subs={glider:n,basePoint:d,baseLine:h,topPoint:l,label:u},s.inherits.push(n,d,h,l,u),s.remove=priv$3.removeSlopeTriangle,type_default.extendInstanceMethodMap(s,{tangent:"tangent",glider:"glider",basepoint:"basepoint",baseline:"baseline",toppoint:"toppoint",borderHorizontal:"borderHorizontal",borderVertical:"borderVertical",borderParallel:"borderParallel",label:"label",Value:"Slope",V:"Slope",Slope:"Slope",Angle:"getAngle",getAngle:"getAngle",DeltaX:"DeltaX",DeltaY:"DeltaY",Direction:"Direction"}),s};jxg_default.registerElement("slopetriangle",jxg_default.createSlopeTriangle);var priv$2={CheckboxChangeEventHandler:function(){this._value=this.rendNodeCheckbox.checked,this.board.update()}};jxg_default.createCheckbox=function(t,e,r){var s,o,a,n=type_default.copyAttributes(r,t.options,"checkbox");return o=[e[0],e[1],'<span style="display:inline"><input type="checkbox" /><label for=""></label></span>'],a=text_default.prototype.setText,text_default.prototype.setText=text_default.prototype._setText,s=t.create("text",o,n),s.type=type_default.OBJECT_TYPE_CHECKBOX,text_default.prototype.setText=a,s.rendNodeCheckbox=s.rendNode.childNodes[0].childNodes[0],s.rendNodeLabel=s.rendNode.childNodes[0].childNodes[1],s.rendNodeTag=s.rendNodeCheckbox,s.rendNodeTag.disabled=!!n.disabled,s.rendNodeCheckbox.id=s.rendNode.id+"_checkbox",s.rendNodeLabel.id=s.rendNode.id+"_label",s.rendNodeLabel.setAttribute("for",s.rendNodeCheckbox.id),s.setText(e[2]),s.visPropOld.fontsize="0px",t.renderer.updateTextStyle(s,!1),s.rendNodeCheckbox.checked=n.checked,s._value=n.checked,s.Value=function(){return this._value},s.update=function(){return this.needsUpdate&&(jxg_default.Text.prototype.update.call(this),this._value=this.rendNodeCheckbox.checked),this},env_default.addEvent(s.rendNodeCheckbox,"change",priv$2.CheckboxChangeEventHandler,s),s};jxg_default.registerElement("checkbox",jxg_default.createCheckbox);var priv$1={InputInputEventHandler:function(t){this._value=this.rendNodeInput.value,this.board.update()}};jxg_default.createInput=function(t,e,r){var s,o,a,n=type_default.copyAttributes(r,t.options,"input");return o=[e[0],e[1],'<span style="display:inline; white-space:nowrap; padding:0px;"><label></label><input type="text" maxlength="'+n.maxlength+'" style="width:100%" /></span>'],a=text_default.prototype.setText,text_default.prototype.setText=text_default.prototype._setText,s=t.create("text",o,n),s.type=type_default.OBJECT_TYPE_INPUT,text_default.prototype.setText=a,s.rendNodeLabel=s.rendNode.childNodes[0].childNodes[0],s.rendNodeInput=s.rendNode.childNodes[0].childNodes[1],s.rendNodeInput.value=e[2],s.rendNodeTag=s.rendNodeInput,s.rendNodeTag.disabled=!!n.disabled,s.rendNodeLabel.id=s.rendNode.id+"_label",s.rendNodeInput.id=s.rendNode.id+"_input",s.rendNodeInput.setAttribute("aria-labelledby",s.rendNodeLabel.id),s.setText(e[3]),s._value=e[2],s.rendNodeInput.addEventListener("keydown",l=>{(l.key==="ArrowLeft"||l.key==="ArrowRight")&&l.stopPropagation()}),s.update=function(){return this.needsUpdate&&(jxg_default.Text.prototype.update.call(this),this._value=this.rendNodeInput.value),this},s.Value=function(){return this._value},s.set=function(l){return this._value=l,this.rendNodeInput.value=l,this},env_default.addEvent(s.rendNodeInput,"input",priv$1.InputInputEventHandler,s),env_default.addEvent(s.rendNodeInput,"mousedown",function(l){type_default.exists(l.stopPropagation)&&l.stopPropagation()},s),env_default.addEvent(s.rendNodeInput,"touchstart",function(l){type_default.exists(l.stopPropagation)&&l.stopPropagation()},s),env_default.addEvent(s.rendNodeInput,"pointerdown",function(l){type_default.exists(l.stopPropagation)&&l.stopPropagation()},s),s.visPropOld.fontsize="0px",t.renderer.updateTextStyle(s,!1),s};jxg_default.registerElement("input",jxg_default.createInput);var priv={ButtonClickEventHandler:function(){this._handler&&this._handler(),this.board.update()}};jxg_default.createButton=function(t,e,r){var s,o,a,n=type_default.copyAttributes(r,t.options,"button");return a=text_default.prototype.setText,text_default.prototype.setText=text_default.prototype._setText,o=[e[0],e[1],'<button type="button" style="width:100%; height:100%;" tabindex="0"></button>'],s=t.create("text",o,n),s.type=type_default.OBJECT_TYPE_BUTTON,text_default.prototype.setText=a,s.rendNodeButton=s.rendNode.childNodes[0],s.rendNodeButton.id=s.rendNode.id+"_button",s.rendNodeTag=s.rendNodeButton,s.rendNodeTag.disabled=!!n.disabled,s.setText(e[2]),s.visPropOld.fontsize="0px",t.renderer.updateTextStyle(s,!1),e[3]&&(type_default.isString(e[3])?(s._jc=new jxg_default.JessieCode,s._jc.use(t),s._handler=function(){s._jc.parse(e[3])}):s._handler=e[3]),env_default.addEvent(s.rendNodeButton,"click",priv.ButtonClickEventHandler,s),env_default.addEvent(s.rendNodeButton,"mousedown",function(l){type_default.exists(l.stopPropagation)&&l.stopPropagation()},s),env_default.addEvent(s.rendNodeButton,"touchstart",function(l){type_default.exists(l.stopPropagation)&&l.stopPropagation()},s),env_default.addEvent(s.rendNodeButton,"pointerdown",function(l){type_default.exists(l.stopPropagation)&&l.stopPropagation()},s),s};jxg_default.registerElement("button",jxg_default.createButton);jxg_default.createVectorField=function(t,e,r){var s,o;if(!(e.length>=3&&(type_default.isArray(e[0])||type_default.isFunction(e[0])||type_default.isString(e[0]))&&type_default.isArray(e[1])&&e[1].length===3&&type_default.isArray(e[2])&&e[2].length===3))throw new Error("JSXGraph: Can't create vector field with parent types '"+typeof e[0]+"', '"+typeof e[1]+"', '"+typeof e[2]+"'.");return o=type_default.copyAttributes(r,t.options,"vectorfield"),s=t.create("curve",[[],[]],o),s.elType="vectorfield",s.setF=function(a,n){var l,h;return type_default.isArray(a)?(l=type_default.createFunction(a[0],this.board,n),h=type_default.createFunction(a[1],this.board,n),this.F=function(d,u){return[l(d,u),h(d,u)]}):this.F=type_default.createFunction(a,s.board,n),this},s.setF(e[0],"x, y"),s.xData=e[1],s.yData=e[2],s.updateDataArray=function(){var a,n,l,h,d=this.evalVisProp("scale"),u=type_default.evaluate(this.xData[0]),c=type_default.evaluate(this.xData[1]),p=(type_default.evaluate(this.xData[2])-u)/c,f=type_default.evaluate(this.yData[0]),_=type_default.evaluate(this.yData[1]),g=(type_default.evaluate(this.yData[2])-f)/_,m,b,C,y,x=this.evalVisProp("arrowhead.enabled"),v,P,E,w;for(x&&(v=this.evalVisProp("arrowhead.size"),P=v/t.unitX,E=v/t.unitY,w=this.evalVisProp("arrowhead.angle")),this.dataX=[],this.dataY=[],l=0,a=u;l<=c;a+=p,l++)for(h=0,n=f;h<=_;n+=g,h++)m=this.F(a,n),m[0]*=d,m[1]*=d,type_default.concat(this.dataX,[a,a+m[0],NaN]),type_default.concat(this.dataY,[n,n+m[1],NaN]),x&&Math.abs(m[0])+Math.abs(m[1])>0&&(b=Math.atan2(m[1],m[0]),C=b+w,y=b-w,type_default.concat(this.dataX,[a+m[0]-Math.cos(C)*P,a+m[0],a+m[0]-Math.cos(y)*P,NaN]),type_default.concat(this.dataY,[n+m[1]-Math.sin(C)*E,n+m[1],n+m[1]-Math.sin(y)*E,NaN]))},type_default.extendInstanceMethodMap(s,{setF:"setF"}),s};jxg_default.registerElement("vectorfield",jxg_default.createVectorField);jxg_default.createSlopeField=function(t,e,r){var s,o,a;if(!(e.length>=3&&(type_default.isFunction(e[0])||type_default.isString(e[0]))&&type_default.isArray(e[1])&&e[1].length===3&&type_default.isArray(e[2])&&e[2].length===3))throw new Error("JSXGraph: Can't create slope field with parent types '"+typeof e[0]+"', '"+typeof e[1]+"', '"+typeof e[2]+"'.");return o=type_default.createFunction(e[0],t,"x, y"),e[0]=function(n,l){var h=o(n,l),d=Math.sqrt(1+h*h);return[1/d,h/d]},a=type_default.copyAttributes(r,t.options,"slopefield"),s=t.create("vectorfield",e,a),s.elType="slopefield",s.setF=function(n,l){var h=type_default.createFunction(n,s.board,l);this.F=function(d,u){var c=h(d,u),p=Math.sqrt(1+c*c);return[1/p,c/p]}},type_default.extendInstanceMethodMap(s,{setF:"setF"}),s};jxg_default.registerElement("slopefield",jxg_default.createSlopeField);jxg_default.createSmartLabel=function(t,e,r){var s,o,a,n;if(e.length===0||[constants.OBJECT_CLASS_POINT,constants.OBJECT_CLASS_LINE,constants.OBJECT_CLASS_CIRCLE].indexOf(e[0].elementClass)<0&&[constants.OBJECT_TYPE_POLYGON,constants.OBJECT_TYPE_ANGLE].indexOf(e[0].type)<0)throw new Error("JSXGraph: Can't create smartlabel with parent types '"+typeof e[0]+"', '"+typeof e[1]+"'.");return a=e[0],n=e[1]||"",o=type_default.copyAttributes(r,t.options,"smartlabel"),a.elementClass===constants.OBJECT_CLASS_POINT?o=type_default.merge(o,type_default.copyAttributes(r,t.options,"smartlabelpoint")):a.elementClass===constants.OBJECT_CLASS_LINE?(o=type_default.merge(o,type_default.copyAttributes(r,t.options,"smartlabelline")),o.rotate=function(l){var h=l.evalVisProp("orientation"),d;switch(h){case"none":return 0;case"orthogonal":d=270;break;case"orthogonal-inverted":d=90;break;case"parallel-inverted":case"inverted":d=0;break;default:d=360}return(Math.atan(a.getSlope())*180/Math.PI+d)%360},o.visible=function(l){var h=l.evalVisProp("orientation"),d=l.evalVisProp("visibleThreshold"),u=l.getSize(),c,p=a.point1.coords.scrCoords,f=a.point2.coords.scrCoords,_=f[1]-p[1],g=f[2]-p[2];switch(c=Math.floor(Math.sqrt(_*_+g*g)),h){case"parallel":case"parallel-inverted":case"inverted":return u[0]<c*d;case"orthogonal":case"orthogonal-inverted":return u[1]<c*d;default:return a.L()>=1.5}}):a.elementClass===constants.OBJECT_CLASS_CIRCLE?(o=type_default.merge(o,type_default.copyAttributes(r,t.options,"smartlabelcircle")),o.visible=function(l){var h=l.getSize(),d=l.evalVisProp("visibleThreshold"),u,c=a.center.coords.scrCoords,p,f,_;return a.point2?p=a.point2.coords.scrCoords:p=new jxg_default.Coords(jxg_default.COORDS_BY_USER,[a.center.coords.usrCoords[0],a.center.coords.usrCoords[1]+a.Radius()],a.board).scrCoords,f=p[1]-c[1],_=p[2]-c[2],u=Math.floor(Math.sqrt(f*f+_*_))*2,h[0]<u*d}):a.type===constants.OBJECT_TYPE_POLYGON?o=type_default.merge(o,type_default.copyAttributes(r,t.options,"smartlabelpolygon")):a.type===constants.OBJECT_TYPE_ANGLE&&(o=type_default.merge(o,type_default.copyAttributes(r,t.options,"smartlabelangle")),o.rotate=function(){var l=a.center.coords.usrCoords,h=a.getLabelAnchor().usrCoords,d=(Math.atan2(h[2]-l[2],h[1]-l[1])*180/Math.PI+360)%360;return d>90&&d<270?d+180:d},o.anchorX=function(){var l=a.center.coords.usrCoords,h=a.getLabelAnchor().usrCoords,d=(Math.atan2(h[2]-l[2],h[1]-l[1])*180/Math.PI+360)%360;return d>90&&d<270?"right":"left"}),a.elementClass===constants.OBJECT_CLASS_POINT?s=t.create("text",[function(){return a.X()},function(){return a.Y()},""],o):a.elementClass===constants.OBJECT_CLASS_LINE?o.measure==="length"?s=t.create("text",[function(){return(a.point1.X()+a.point2.X())*.5},function(){return(a.point1.Y()+a.point2.Y())*.5},""],o):o.measure==="slope"&&(s=t.create("text",[function(){return a.point1.X()*.25+a.point2.X()*.75},function(){return a.point1.Y()*.25+a.point2.Y()*.75},""],o)):a.elementClass===constants.OBJECT_CLASS_CIRCLE?o.measure==="radius"?s=t.create("text",[function(){return a.center.X()+a.Radius()*.5},function(){return a.center.Y()},""],o):o.measure==="area"?s=t.create("text",[function(){return a.center.X()},function(){return a.center.Y()+a.Radius()*.5},""],o):(o.measure==="circumference"||o.measure==="perimeter")&&(s=t.create("text",[function(){return a.getLabelAnchor()},""],o)):a.type===constants.OBJECT_TYPE_POLYGON?o.measure==="area"?s=t.create("text",[function(){return a.getTextAnchor()},""],o):o.measure==="perimeter"&&(s=t.create("text",[function(){var l=a.borders.length-1;return l>=0?[(a.borders[l].point1.X()+a.borders[l].point2.X())*.5,(a.borders[l].point1.Y()+a.borders[l].point2.Y())*.5]:a.getTextAnchor()},""],o)):a.type===constants.OBJECT_TYPE_ANGLE&&(s=t.create("text",[function(){return a.getLabelAnchor()},""],o)),type_default.exists(s)?(s.elType="smartlabel",s.parentObject=a,s.Value=function(){switch(this.evalVisProp("measure")){case"length":return a.L();case"slope":return a.Slope();case"area":return a.Area();case"radius":return a.Radius();case"perimeter":case"circumference":return a.Perimeter();case"rad":return a.Value();case"deg":return a.Value()*180/Math.PI;case"coords":return[a.X(),a.Y()];default:return 0}},s.Dimension=function(){switch(this.evalVisProp("measure")){case"area":return 2;case"length":case"radius":case"perimeter":case"circumference":return 1;case"slope":return 0;case"rad":case"deg":return 0;case"coords":return 1;default:return 0}},s.Unit=function(l){var h="",d=s.evalVisProp("units"),u=l,c={},p;if(type_default.exists(u)||(u=s.Dimension()),type_default.isArray(l)){for(p=0;p<l.length;p++)c["dim"+l[p]]=s.Unit(l[p]);return c}return type_default.isObject(d)&&type_default.exists(d[u])&&d[u]!==!1?h=s.eval(d[u]):type_default.isObject(d)&&type_default.exists(d["dim"+u])&&d["dim"+u]!==!1?h=s.eval(d["dim"+u]):(h=s.evalVisProp("baseUnit"),h===""&&s.evalVisProp("unit")!==""&&(h=s.evalVisProp("unit")),u===0?h="":u>1&&h!==""&&(h=h+"^{"+u+"}")),h},s.setText(function(){var l,h,d,u=type_default.evaluate(n),c="",p="",f="",_,g,m;if(u!=="")return u;if(h=s.Value(),l=s.evalVisProp("digits"),d=s.Unit(),p="",f="",_=s.evalVisProp("dir"),g=s.evalVisProp("usemathjax")||s.evalVisProp("usekatex"),s.evalVisProp("showPrefix")&&(p=s.evalVisProp("prefix")),s.evalVisProp("showSuffix")&&(f=s.evalVisProp("suffix")),s.useLocale())if(type_default.isArray(h))for(m=0;m<h.length;m++)h[m]=s.formatNumberLocale(h[m],l);else h=s.formatNumberLocale(h,l);else if(type_default.isArray(h))for(m=0;m<h.length;m++)h[m]=type_default.toFixed(h[m],l);else h=type_default.toFixed(h,l);if(type_default.isFunction(s.visProp.formatvalue)&&(h=s.visProp.formatvalue(s,h)),type_default.isArray(h)){if(_==="row"){if(c=[],g){for(c.push("\\(",p),m=0;m<h.length;m++)c.push(h[m],"\\,",d),m<h.length-1&&c.push(" / ");c.push(f,"\\)")}else{for(c.push(p),m=0;m<h.length;m++)c.push(h[m]," ",d),m<h.length-1&&c.push(" / ");c.push(f)}c=c.join("")}else if(_.indexOf("col")===0){if(c=[],g){for(c.push("\\(",p,"\\left(\\array{"),m=0;m<h.length;m++)c.push(h[m],"\\,",d),m<h.length-1&&c.push("\\\\ ");c.push("}\\right)",f,"\\)")}else{for(c.push(p),m=0;m<h.length;m++)c.push(h[m]," ",d),m<h.length-1&&c.push("<br />");c.push(f)}c=c.join("")}}else g?c=["\\(",p,h,"\\,",d,f,"\\)"].join(""):c=[p,h,d,f].join("");return c}),a.addChild(s),s.setParents([a]),type_default.extendInstanceMethodMap(s,{Value:"Value",V:"Value",Dimension:"Dimension",Unit:"Unit",parent:"parentObject",parentObject:"parentObject"}),s):null};jxg_default.registerElement("smartlabel",jxg_default.createSmartLabel);jxg_default.ForeignObject=function(t,e,r,s,o){this.constructor(t,r,constants.OBJECT_TYPE_FOREIGNOBJECT,constants.OBJECT_CLASS_OTHER),this.element=this.board.select(r.anchor),this.coordsConstructor(e),this._useUserSize=!1,this.size=[1,1],type_default.exists(o)&&o.length>0&&(this._useUserSize=!0,this.W=type_default.createFunction(o[0],this.board,""),this.H=type_default.createFunction(o[1],this.board,""),this.addParentsFromJCFunctions([this.W,this.H]),this.usrSize=[this.W(),this.H()]),this.content=s,this.elType="foreignobject",this.id=this.board.setId(this,"Im"),this.board.renderer.drawForeignObject(this),this.board.finalizeAdding(this)};jxg_default.ForeignObject.prototype=new element_default;type_default.copyPrototypeMethods(jxg_default.ForeignObject,coordselement_default,"coordsConstructor");type_default.copyMethodMap(jxg_default.ForeignObject,{addTransformation:"addTransform",trans:"addTransform",W:"W",Width:"W",H:"H",Height:"H"});jxg_default.extend(jxg_default.ForeignObject.prototype,{hasPoint:function(t,e){var r,s,o,a,n,l,h,d,u,c=this.transformations.length;return type_default.isObject(this.evalVisProp("precision"))?(a=this.board._inputDevice,n=this.evalVisProp("precision."+a)):n=this.board.options.precision.hasPoint,c===0?(r=t-this.coords.scrCoords[1],s=this.coords.scrCoords[2]-e,o=n,r>=-o&&r-this.size[0]<=o&&s>=-o&&s-this.size[1]<=o):(l=new coords_default(constants.COORDS_BY_SCREEN,[t,e],this.board),l=l.usrCoords,h=[l[0]-this.span[0][0],l[1]-this.span[0][1],l[2]-this.span[0][2]],u=math_default.innerProduct,d=u(h,this.span[1]),0<=d&&d<=u(this.span[1],this.span[1])&&(d=u(h,this.span[2]),0<=d&&d<=u(this.span[2],this.span[2])))},update:function(t){return this.needsUpdate?(this.updateCoords(t),this.updateSize(),this):this},updateRenderer:function(){return this.updateRendererGeneric("updateForeignObject")},updateSize:function(){var t=[0,0];return this._useUserSize?(this.usrSize=[this.W(),this.H()],this.size=[Math.abs(this.usrSize[0]*this.board.unitX),Math.abs(this.usrSize[1]*this.board.unitY)]):this.rendNode.hasChildNodes()&&(t=this.rendNode.childNodes[0].getBoundingClientRect(),this.size=[t.width,t.height]),this},updateSpan:function(){var t,e,r=this.transformations.length,s=[];if(r===0)this.span=[[this.Z(),this.X(),this.Y()],[this.Z(),this.W(),0],[this.Z(),0,this.H()]];else{for(s[0]=[this.Z(),this.X(),this.Y()],s[1]=[this.Z(),this.X()+this.W(),this.Y()],s[2]=[this.Z(),this.X(),this.Y()+this.H()],t=0;t<r;t++)for(e=0;e<3;e++)s[e]=math_default.matVecMult(this.transformations[t].matrix,s[e]);for(e=0;e<3;e++)s[e][1]/=s[e][0],s[e][2]/=s[e][0],s[e][0]/=s[e][0];for(e=1;e<3;e++)s[e][0]-=s[0][0],s[e][1]-=s[0][1],s[e][2]-=s[0][2];this.span=s}return this},addTransform:function(t){var e,r=type_default.isArray(t)?t:[t],s=r.length;for(e=0;e<s;e++)this.transformations.push(r[e]);return this},removeTransform:function(t){var e,r=type_default.isArray(t)?t:[t],s=r.length;for(e=0;e<s;e++)type_default.removeElementFromArray(this.transformations,r[e]);return this},clearTransforms:function(){return this.transformations=[],this},getParents:function(){var t=[this.url,[this.Z(),this.X(),this.Y()],this.usrSize];return this.parents.length!==0&&(t=this.parents),t},setSize:function(t,e){return this.W=type_default.createFunction(t,this.board,""),this.H=type_default.createFunction(e,this.board,""),this._useUserSize=!0,this.addParentsFromJCFunctions([this.W,this.H]),this},W:function(){},H:function(){}});jxg_default.createForeignObject=function(t,e,r){var s,o,a=e[0],n=e[1],l=[];if(e.length>=2&&(l=e[2]),s=type_default.copyAttributes(r,t.options,"foreignobject"),o=coordselement_default.create(jxg_default.ForeignObject,t,n,s,a,l),!o)throw new Error("JSXGraph: Can't create foreignObject with parent types '"+typeof e[0]+"' and '"+typeof e[1]+`'.
179
+ Possible parent types: [string, [x, y], [w, h]], [string, [x, y]], [element,transformation]`);return o};jxg_default.registerElement("foreignobject",jxg_default.createForeignObject);jxg_default.registerElement("fo",jxg_default.createForeignObject);var foreignobject_default=jxg_default.ForeignObject;jxg_default.extend(options_default,{axes3d:{axesPosition:"center",xAxis:{name:"X",withlabel:!0,visible:!0,layer:12,point2:{name:"x"},strokeColor:jxg_default.palette.red},yAxis:{name:"Y",withlabel:!0,visible:!0,layer:12,point2:{name:"y"},strokeColor:jxg_default.palette.green},zAxis:{name:"Z",visible:!0,withlabel:!0,layer:12,point2:{name:""},strokeColor:jxg_default.palette.blue},xAxisBorder:{name:"x",visible:"ìnherit",withLabel:!1,label:{position:"50% left",offset:[30,0],fontsize:15},strokeWidth:1,lastArrow:!1,ticks3d:{visible:"ìnherit",label:{anchorX:"middle",anchorY:"middle"}}},yAxisBorder:{name:"y",visible:"ìnherit",withLabel:!1,label:{position:"50% right",offset:[0,-30],fontsize:15},strokeWidth:1,lastArrow:!1,ticks3d:{visible:"ìnherit",label:{anchorX:"middle"}}},zAxisBorder:{name:"z",visible:"ìnherit",withLabel:!1,label:{position:"50% right",offset:[30,0],fontsize:15},strokeWidth:1,lastArrow:!1,ticks3d:{visible:"ìnherit",label:{anchorX:"middle",anchorY:"middle"}}},xPlaneRear:{visible:!0,layer:0,strokeWidth:1,strokeColor:"#dddddd",fillColor:"#dddddd",mesh3d:{layer:1},stepsU:10,stepsV:10,tiling:"rectangle",polyhedron:{visible:"inherit",strokeWidth:.5,strokeOpacity:.7,strokeColor:"#cccccc",fillOpacity:.3,fillColorArray:["#e7e7e7"],shader:{enabled:!0,fixed:!0,type:"zIndex",hue:0,saturation:0,minlightness:65,maxLightness:98}}},yPlaneRear:{visible:!0,strokeWidth:1,strokeColor:"#dddddd",fillColor:"#dddddd",layer:0,mesh3d:{layer:1},stepsU:10,stepsV:10,tiling:"rectangle",polyhedron:{visible:"inherit",strokeWidth:.5,strokeOpacity:.7,strokeColor:"#cccccc",fillOpacity:.3,fillColorArray:["#e7e7e7"],shader:{enabled:!0,fixed:!0,type:"zIndex",hue:0,saturation:0,minlightness:65,maxLightness:98}}},zPlaneRear:{visible:!0,strokeWidth:1,strokeColor:"#dddddd",fillColor:"#dddddd",layer:0,mesh3d:{layer:1},stepsU:10,stepsV:10,tiling:"rectangle",polyhedron:{visible:"inherit",strokeWidth:.5,strokeOpacity:.7,strokeColor:"#cccccc",fillOpacity:.3,fillColorArray:["#e7e7e7"],shader:{enabled:!0,fixed:!0,type:"zIndex",hue:0,saturation:0,minlightness:65,maxLightness:98}}},xPlaneFront:{visible:!1,type:"wireframe",strokeWidth:1,strokeColor:"#dddddd",fillColor:"none",layer:0,mesh3d:{layer:1,visible:!1},stepsU:10,stepsV:10,tiling:"rectangle",polyhedron:{visible:"inherit",strokeWidth:.5,strokeOpacity:.7,strokeColor:"#cccccc",fillOpacity:.3,fillColorArray:["#e7e7e7"],shader:{enabled:!0,fixed:!0,type:"zIndex",hue:0,saturation:0,minlightness:65,maxLightness:98}}},yPlaneFront:{visible:!1,type:"wireframe",strokeWidth:1,strokeColor:"#dddddd",fillColor:"none",layer:0,mesh3d:{layer:1,visible:!1},stepsU:10,stepsV:10,tiling:"rectangle",polyhedron:{visible:"inherit",strokeWidth:.5,strokeOpacity:.7,strokeColor:"#cccccc",fillOpacity:.3,fillColorArray:["#e7e7e7"],shader:{enabled:!0,fixed:!0,type:"zIndex",hue:0,saturation:0,minlightness:65,maxLightness:98}}},zPlaneFront:{visible:!1,type:"wireframe",strokeWidth:1,strokeColor:"#dddddd",fillColor:"none",layer:0,mesh3d:{layer:1,visible:!1},stepsU:10,stepsV:10,tiling:"rectangle",polyhedron:{visible:"inherit",strokeWidth:.5,strokeOpacity:.7,strokeColor:"#cccccc",fillOpacity:.3,fillColorArray:["#e7e7e7"],shader:{enabled:!0,fixed:!0,type:"zIndex",hue:0,saturation:0,minlightness:65,maxLightness:98}}},xPlaneRearYAxis:{visible:"inherit",strokeColor:"#aaaaaa",strokeWidth:1.2,layer:12},xPlaneRearZAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1.2,layer:12},xPlaneFrontYAxis:{visible:!1,strokeColor:"#888888",strokeWidth:1.2,layer:12},xPlaneFrontZAxis:{visible:!1,strokeColor:"#888888",strokeWidth:1.2,layer:12},yPlaneRearXAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1.2,layer:12},yPlaneRearZAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1.2,layer:12},yPlaneFrontXAxis:{visible:!1,strokeColor:"#888888",strokeWidth:1.2,layer:12},yPlaneFrontZAxis:{visible:!1,strokeColor:"#888888",strokeWidth:1.2,layer:12},zPlaneRearXAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1.2,layer:12},zPlaneRearYAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1.2,layer:12},zPlaneFrontXAxis:{visible:!1,strokeColor:"#888888",strokeWidth:1.2,layer:12},zPlaneFrontYAxis:{visible:!1,strokeColor:"#888888",strokeWidth:1.2,layer:12}},axis3d:{highlight:!1,fixed:!0,strokeColor:"black",strokeWidth:1,lastArrow:!0,tabindex:null,label:{position:"103% left",offset:[0,0]},point1:{visible:!1,name:"",withLabel:!1},point2:{visible:!1,name:"",withLabel:!1,label:{visible:!0}}},circle3d:{layer:12,point:{visible:!1,name:""},needsRegularUpdate:!0},curve3d:{layer:12,highlight:!1,tabindex:-1,strokeWidth:1,numberPointsHigh:200,needsRegularUpdate:!0},face3d:{transitionProperties:[],layer:12,highlight:!1,tabindex:null,strokeWidth:1,fillColor:jxg_default.palette.yellow,fillOpacity:.4,needsRegularUpdate:!0,visible:!0,shader:{enabled:!1,fixed:!0,type:"angle",hue:60,saturation:90,minLightness:30,maxLightness:90,light:{type:1,az:-45,el:20,bank:0,dir:-1}}},intersectionline3d:{point1:{visible:!1,name:""},point2:{visible:!1,name:""}},line3d:{layer:12,strokeWidth:1,strokeColor:"black",fixed:!0,tabindex:null,needsRegularUpdate:!0,point:{visible:!1,name:""},point1:{visible:!1,name:""},point2:{visible:!1,name:""},straightFirst:!1,straightLast:!1},mesh3d:{layer:12,strokeWidth:1,strokeColor:"#9a9a9a",strokeOpacity:.6,highlight:!1,tabindex:null,needsRegularUpdate:!0,stepWidthU:1,stepWidthV:1},plane3d:{layer:12,strokeWidth:1,strokeColor:"black",strokeOpacity:1,highlight:!1,tabindex:null,needsRegularUpdate:!0,visible:!0,gradient:"linear",gradientSecondColor:"#ffffff",gradientAngle:Math.PI,fillColor:"#bbbbbb",fillOpacity:.3,type:"shader",tiling:"rectangle",mesh3d:{visible:"inherit"},stepsU:6,stepsV:6,colormap:{min:[-5,190],max:[5,0],s:.9,v:.9},polyhedron:{layer:12,visible:"inherit",strokeWidth:.1,fillOpacity:.8,fillColorArray:["white",jxg_default.palette.blue],shader:{enabled:!1,fixed:!0,hue:60,saturation:90,minLightness:55,maxLightness:90,light:{dir:-1}}},threePoints:!1,point:{visible:!1,name:"",fixed:!0},point1:{visible:!1,name:""},point2:{visible:!1,name:""},point3:{visible:!1,name:""}},point3d:{layer:13,infoboxDigits:"auto",strokeWidth:0,gradient:"radial",gradientSecondColor:"#555555",fillColor:"yellow",highlightStrokeColor:"#555555",gradientFX:.7,gradientFY:.3,needsRegularUpdate:!0,cyclic:!1},polygon3d:{layer:12,highlight:!1,tabindex:-1,strokeWidth:1,fillColor:"none",needsRegularUpdate:!0},polyhedron3d:{fillColorArray:["white","black"],needsRegularUpdate:!0},sphere3d:{layer:12,highlight:!1,strokeWidth:1,strokeColor:"#00ff80",fillColor:"white",gradient:"radial",gradientSecondColor:"#00ff80",gradientFX:.7,gradientFY:.3,fillOpacity:.4,needsRegularUpdate:!0},surface3d:{visible:!0,layer:12,highlight:!1,tabindex:-1,type:"wireframe",tiling:"rectangle",strokeWidth:.75,colormap:{min:[-5,190],max:[5,0],s:.9,v:.9},polyhedron:{visible:"inherit",strokeWidth:.1,fillOpacity:.8,fillColorArray:["white",jxg_default.palette.blue],shader:{enabled:!1,fixed:!0,hue:60,saturation:90,minLightness:55,maxLightness:90,light:{dir:-1}}},stepsU:30,stepsV:30,needsRegularUpdate:!0},text3d:{withLabel:!1,needsRegularUpdate:!0},ticks3d:{visible:!0,ticksDistance:1,majorHeight:10,minorTicks:0,tickEndings:[0,1],drawLabels:!0,needsRegularUpdate:!0,label:{visible:!0,withLabel:!1}},vectorfield3d:{scale:1,arrowhead:{enabled:!0,size:5,angle:Math.PI*.125},needsRegularUpdate:!0},view3d:{needsRegularUpdate:!0,depthOrder:{enabled:!0,layers:[12,13]},projection:"parallel",verticalDrag:{enabled:!0,key:"shift"},az:{pointer:{enabled:!0,speed:1,outside:!0,button:-1,key:"none"},keyboard:{enabled:!0,step:10,key:"ctrl"},continuous:!0,slider:{visible:"inherit",style:6,point1:{pos:"auto",frozen:!1},point2:{pos:"auto",frozen:!1},min:0,max:2*Math.PI,start:1}},el:{pointer:{enabled:!0,speed:1,outside:!0,button:-1,key:"none"},keyboard:{enabled:!0,step:10,key:"ctrl"},continuous:!0,slider:{visible:"inherit",style:6,point1:{frozen:!1,pos:"auto"},point2:{frozen:!1,pos:"auto"},min:0,max:2*Math.PI,start:.3}},bank:{pointer:{enabled:!0,speed:.08,outside:!0,button:-1,key:"none"},keyboard:{enabled:!0,step:10,key:"ctrl"},continuous:!0,slider:{visible:"inherit",style:6,point1:{frozen:!1,pos:"auto"},point2:{frozen:!1,pos:"auto"},min:-Math.PI,max:Math.PI,start:0}},r:"auto",trackball:{enabled:!1,outside:!0,button:-1,key:"none"},fov:.4*Math.PI,values:[[0,1.57],[.78,.62],[0,0],[5.49,.62],[4.71,0],[3.93,.62],[3.14,0],[2.36,.62],[1.57,1.57]],infobox:{strokeColor:"#000000",fontSize:16,useKatex:!1,useMathjax:!1,intl:{enabled:!0,options:{minimumFractionDigits:2,maximumFractionDigits:3}}},_currentView:-1}});var options3d_default=jxg_default.Options;jxg_default.View3D=function(t,e,r){this.constructor(t,r,constants.OBJECT_TYPE_VIEW3D,constants.OBJECT_CLASS_3D),this.objects={},this.depthOrdered={},this.elementsByName={},this.defaultAxes=null,this.angles={az:null,el:null,bank:null},this.matrix3DRot=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],this.matrix3DRotShift=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],this.matrix3D=[[1,0,0,0],[0,1,0,0],[0,0,1,0]],this.boxToCam=[],this.llftCorner=e[0],this.size=e[1],this.bbox3D=e[2],this.r=null,this.focalDist=-1,this.projectionType="parallel",this.trackballEnabled=!1,this._lastPos={x:0,y:0},this.timeoutAzimuth=null,this.zIndexMin=1/0,this.zIndexMax=-1/0,this.id=this.board.setId(this,"V"),this.board.finalizeAdding(this),this.elType="view3d"};jxg_default.View3D.prototype=new element_default;type_default.copyMethodMap(jxg_default.View3D,{});jxg_default.extend(jxg_default.View3D.prototype,{create:function(t,e,r){var s=[],o;return t.indexOf("3d")>0&&s.push(this),o=this.board.create(t,s.concat(e),r),o},select:function(t,e){var r,s,o,a,n=t;if(n===null)return n;if(type_default.isString(n)&&n!=="")type_default.exists(this.objects[n])?n=this.objects[n]:type_default.exists(this.elementsByName[n])&&(n=this.elementsByName[n]);else if(!e&&(type_default.isFunction(n)||type_default.isObject(n)&&!type_default.isFunction(n.setAttribute))){for(r=type_default.filterElements(this.objectsList,n),s={},a=r.length,o=0;o<a;o++)s[r[o].id]=r[o];n=new composition_default(s)}else type_default.isObject(n)&&type_default.exists(n.id)&&!type_default.exists(this.objects[n.id])&&(n=null);return n},setAnglesFromRotation:function(){var t=this.matrix3DRot,e=Math.sqrt(t[1][3]*t[1][3]+t[2][3]*t[2][3]),r,s,o,a,n,l;e>math_default.eps?(r=t[2][3]/e,s=t[1][3]/e):(r=Math.cos(this.angles.bank),s=Math.sin(this.angles.bank)),t=math_default.matMatMult([[1,0,0,0],[0,r,-s,0],[0,s,r,0],[0,0,0,1]],t),this.angles.bank=Math.atan2(s,r),o=t[2][3],a=t[3][3],t=math_default.matMatMult([[1,0,0,0],[0,1,0,0],[0,0,o,a],[0,0,-a,o]],t),this.angles.el=Math.atan2(a,o),n=-t[1][1],l=t[3][1],this.angles.az=Math.atan2(l,n),this.angles.az<0&&(this.angles.az+=2*Math.PI),this.setSlidersFromAngles()},anglesHaveMoved:function(){return this._hasMoveAz||this._hasMoveEl||Math.abs(this.angles.az-this.az_slide.Value())>math_default.eps||Math.abs(this.angles.el-this.el_slide.Value())>math_default.eps||Math.abs(this.angles.bank-this.bank_slide.Value())>math_default.eps},getAnglesFromSliders:function(){this.angles.az=this.az_slide.Value(),this.angles.el=this.el_slide.Value(),this.angles.bank=this.bank_slide.Value()},setSlidersFromAngles:function(){this.az_slide.setValue(this.angles.az),this.el_slide.setValue(this.angles.el),this.bank_slide.setValue(this.angles.bank)},getRotationFromAngles:function(){var t,e,r,s,o,a,n=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];return t=this.angles.az,e=this.angles.el,r=this.angles.bank,s=-Math.sin(e),n[1][1]=-Math.cos(t),n[1][2]=Math.sin(t),n[1][3]=0,n[2][1]=s*Math.sin(t),n[2][2]=s*Math.cos(t),n[2][3]=Math.cos(e),n[3][1]=Math.cos(e)*Math.sin(t),n[3][2]=Math.cos(e)*Math.cos(t),n[3][3]=Math.sin(e),o=Math.cos(r),a=Math.sin(r),n=math_default.matMatMult([[1,0,0,0],[0,o,a,0],[0,-a,o,0],[0,0,0,1]],n),n},_projectToSphere:function(t,e,r){var s=math_default.hypot(e,r),o,a;return s<t*.7071067811865475?a=Math.sqrt(t*t-s*s):(o=t/1.414213562373095,a=o*o/s),a},updateProjectionTrackball:function(t){var e=100,r,s,o,a,n,l,h,d,u,c,p,f,_,g=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];return type_default.exists(this._trackball)?(r=this._trackball.dx,s=this._trackball.dy,o=r*r+s*s,o>math_default.eps&&(e=(this.size[0]*this.board.unitX+this.size[1]*this.board.unitY)*.25,l=this._trackball.x,h=this._trackball.y,n=[l,h,this._projectToSphere(e,l,h)],l-=r,h-=s,a=[l,h,this._projectToSphere(e,l,h)],_=math_default.crossProduct(a,n),c=math_default.hypot(_[0],_[1],_[2]),_[0]/=c,_[1]/=c,_[2]/=c,u=geometry_default.distance(n,a,3)/(2*e),u=u>1?1:u,u=u<-1?-1:u,d=2*Math.asin(u),p=Math.cos(d),u=1-p,f=Math.sin(d),g[1][1]=p+_[0]*_[0]*u,g[2][1]=_[1]*_[0]*u+_[2]*f,g[3][1]=_[2]*_[0]*u-_[1]*f,g[1][2]=_[0]*_[1]*u-_[2]*f,g[2][2]=p+_[1]*_[1]*u,g[3][2]=_[2]*_[1]*u+_[0]*f,g[1][3]=_[0]*_[2]*u+_[1]*f,g[2][3]=_[1]*_[2]*u-_[0]*f,g[3][3]=p+_[2]*_[2]*u),g=math_default.matMatMult(g,this.matrix3DRot),g):this.matrix3DRot},updateAngleSliderBounds:function(){var t,e,r,s,o,a,n,l,h,d,u,c,p;this.trackballEnabled=this.evalVisProp("trackball.enabled"),this.trackballEnabled?(this.az_slide.setMin(0),this.az_slide.setMax(2*Math.PI),this.el_slide.setMin(-.5*Math.PI),this.el_slide.setMax(.5*Math.PI),this.bank_slide.setMin(-Math.PI),this.bank_slide.setMax(Math.PI)):(this.az_slide.setMin(this.visProp.az.slider.min),this.az_slide.setMax(this.visProp.az.slider.max),this.el_slide.setMin(this.visProp.el.slider.min),this.el_slide.setMax(this.visProp.el.slider.max),this.bank_slide.setMin(this.visProp.bank.slider.min),this.bank_slide.setMax(this.visProp.bank.slider.max)),t=this.az_slide._smax,e=this.az_slide._smin,r=this.el_slide._smax,s=this.el_slide._smin,c=this.bank_slide._smax,p=this.bank_slide._smin,this.trackballEnabled?(o=math_default.mod(this.angles.el,2*Math.PI),.5*Math.PI<o&&o<1.5*Math.PI&&(this.angles.el=Math.PI-o,this.angles.az=math_default.wrap(this.angles.az+Math.PI,e,t),this.angles.bank=math_default.wrap(this.angles.bank+Math.PI,p,c)),this.angles.az=math_default.wrap(this.angles.az,e,t),this.angles.el=math_default.wrap(this.angles.el,s,r),this.angles.bank=math_default.wrap(this.angles.bank,p,c)):(u=function(f){return f<s?s-f:r<f?f-r:0},a=.5*(s+r),n=math_default.wrap(this.angles.el,a-Math.PI,a+Math.PI),l=math_default.wrap(Math.PI-this.angles.el,a-Math.PI,a+Math.PI),h=u(n),d=u(l),h<=d?this.angles.el=math_default.clamp(n,s,r):(this.angles.el=math_default.clamp(l,s,r),this.angles.az=math_default.wrap(this.angles.az+Math.PI,e,t),this.angles.bank=math_default.wrap(this.angles.bank+Math.PI,p,c)),this.angles.az=math_default.wrapAndClamp(this.angles.az,e,t,2*Math.PI),this.angles.bank=math_default.wrapAndClamp(this.angles.bank,p,c,2*Math.PI),this.matrix3DRot=this.getRotationFromAngles()),this.setSlidersFromAngles()},getCameraDistance:function(){var t,e,r=type_default.evaluate(this.r),s;return r===null||r===0?t=this.evalVisProp("r"):t=r,t==="auto"?e=1.01:e=this.projectionType==="central"?t:1/t,this.projectionType==="central"&&(s=math_default.hypot(this.bbox3D[0][0]-this.bbox3D[0][1],this.bbox3D[1][0]-this.bbox3D[1][1],this.bbox3D[2][0]-this.bbox3D[2][1]),e=s*e),e},_updateCentralProjection:function(){var t=20,e=8,r=this.getCameraDistance(),s;return this.boxToCam=this.matrix3DRot.map(function(o){return o.slice()}),this.boxToCam[3][0]=-r,this.focalDist=1/Math.tan(.5*this.evalVisProp("fov")),s=[[0,0,0,-1],[0,this.focalDist,0,0],[0,0,this.focalDist,0],[2*t*e/(e-t),0,0,(t+e)/(e-t)]],math_default.matMatMult(s,this.boxToCam)},update:function(){var t,e,r,s,o,a,n;return!type_default.exists(this.el_slide)||!type_default.exists(this.az_slide)||!type_default.exists(this.bank_slide)||!this.needsUpdate?(this.needsUpdate=!1,this):(r=[[1,0,0],[0,1,0],[0,0,1]],this.projectionType=this.evalVisProp("projection").toLowerCase(),this.trackballEnabled!==this.evalVisProp("trackball.enabled")&&this.updateAngleSliderBounds(),this._hasMoveTrackball?(this.matrix3DRot=this.updateProjectionTrackball(),this.setAnglesFromRotation()):this.anglesHaveMoved()&&(this.getAnglesFromSliders(),this.matrix3DRot=this.getRotationFromAngles()),this.shift=[[1,0,0,0],[-.5*(this.bbox3D[0][0]+this.bbox3D[0][1]),1,0,0],[-.5*(this.bbox3D[1][0]+this.bbox3D[1][1]),0,1,0],[-.5*(this.bbox3D[2][0]+this.bbox3D[2][1]),0,0,1]],this.projectionType==="central"?(o=.8,r[1][1]=this.size[0]/o,r[2][2]=this.size[1]/o,r[1][0]=this.llftCorner[0]+r[1][1]*.5*o,r[2][0]=this.llftCorner[1]+r[2][2]*.5*o,this.viewPortTransform=r,s=this._updateCentralProjection(),this.matrix3D=math_default.matMatMult(s,this.shift)):(t=this.getCameraDistance(),e=[[1,0,0,0],[0,t,0,0],[0,0,t,0],[0,0,0,t]],a=this.bbox3D[0][1]-this.bbox3D[0][0],n=this.bbox3D[1][1]-this.bbox3D[1][0],r[1][1]=this.size[0]/a,r[2][2]=this.size[1]/n,r[1][0]=this.llftCorner[0]+r[1][1]*.5*a,r[2][0]=this.llftCorner[1]+r[2][2]*.5*n,this.matrix3D=math_default.matMatMult(r,math_default.matMatMult(math_default.matMatMult(this.matrix3DRot,e),this.shift).slice(0,3))),this.matrix3DRotShift=math_default.matMatMult(this.matrix3DRot,this.shift),this)},compareDepth:function(t,e){return t.zIndex-e.zIndex},updateZIndices:function(){var t,e;for(t in this.objects)this.objects.hasOwnProperty(t)&&(e=this.objects[t],(e.type===constants.OBJECT_TYPE_LINE3D||e.type===constants.OBJECT_TYPE_POLYGON3D)&&type_default.exists(e.element2D)&&e.element2D.evalVisProp("visible")&&e.updateZIndex())},updateShaders:function(){var t,e,r;for(t in this.objects)this.objects.hasOwnProperty(t)&&(e=this.objects[t],e.visPropCalc.visible&&type_default.exists(e.shader)&&(this.board._change3DView&&e.evalVisProp("shader.fixed")?r=e.zIndex:r=e.shader(),r<this.zIndexMin?this.zIndexMin=r:r>this.zIndexMax&&(this.zIndexMax=r)))},updateDepthOrdering:function(){var t,e,r,s,o,a=this.evalVisProp("depthorder.layers"),n;for(r=0;r<a.length;r++)this.depthOrdered[a[r]]=[];for(t in this.objects)this.objects.hasOwnProperty(t)&&(e=this.objects[t],(e.type===constants.OBJECT_TYPE_FACE3D||e.type===constants.OBJECT_TYPE_LINE3D||e.type===constants.OBJECT_TYPE_POINT3D||e.type===constants.OBJECT_TYPE_POLYGON3D)&&type_default.exists(e.element2D)&&e.element2D.visPropCalc.visible&&(n=e.element2D.evalVisProp("layer"),a.indexOf(n)>=0&&this.depthOrdered[n].push(e)));if(this.board.renderer&&this.board.renderer.type==="svg")for(r=0;r<a.length;r++)for(n=a[r],this.depthOrdered[n].sort(this.compareDepth.bind(this)),o=this.depthOrdered[n],s=0;s<o.length;s++)this.board.renderer.setLayer(o[s].element2D,n);return this},updateRenderer:function(){return this.needsUpdate?(this.depthOrdered={},this.shift!==void 0&&this.evalVisProp("depthorder.enabled")&&(this.updateZIndices(),this.updateShaders(),this.board.renderer&&this.board.renderer.type==="svg"&&this.updateDepthOrdering()),this.needsUpdate=!1,this):this},removeObject:function(t,e){var r,s,o,a,n,l;if(type_default.isArray(t)){for(r=0;r<t.length;r++)this.removeObject(t[r]);return this}if(t=this.select(t),!type_default.exists(t)||type_default.isString(t))return this;try{for(s in t.childElements)t.childElements.hasOwnProperty(s)&&this.removeObject(t.childElements[s]);if(t.type===constants.OBJECT_TYPE_POLYHEDRON3D){for(o=t.faces.length,o>0&&(n=t.faces[0]._pos,n=t.faces[0].element2D._pos<n?t.faces[0].element2D._pos:n),r=0;r<o;r++)l=t.faces[r],delete this.objects[l.id],delete this.board.objects[l.element2D.id],delete this.board.elementsByName[l.element2D.name],l.element2D.remove(),this.board.objectsList.splice(l.element2D._pos,1),delete this.board.objects[l.id],delete this.board.elementsByName[l.name],l.remove(),this.board.objectsList.splice(l._pos,1);for(o=this.board.objectsList.length,r=n;r<this.board.objectsList.length;r++)a=this.board.objectsList[r],a._pos>-1&&(a._pos=r);t.faces=[]}delete this.objects[t.id]}catch(h){jxg_default.debug("View3D "+t.id+": Could not be removed: "+h)}return this.board.removeObject(t,e),this},worldToFocal:function(t,e=!0){var r,s=math_default.matVecMult(this.boxToCam,math_default.matVecMult(this.shift,t));if(s[3]-=s[0]*this.focalDist,e)return s;for(r=1;r<4;r++)s[r]/=s[0];return s.slice(1,4)},project3DTo2D:function(t,e,r){var s,o;return arguments.length===3?s=[1,t,e,r]:t.length===3?(s=t.slice(),s.unshift(1)):s=t,o=math_default.matVecMult(this.matrix3D,s),this.projectionType==="central"?(o[1]/=o[0],o[2]/=o[0],o[3]/=o[0],o[0]/=o[0],math_default.matVecMult(this.viewPortTransform,o.slice(0,3))):o},_getW0:function(t,e,r){var s=math_default.inverse(t),o=s[0][0]+e[1]*s[0][1]+e[2]*s[0][2],a=s[3][0]+e[1]*s[3][1]+e[2]*s[3][2],n,l,h=r*s[0][3]-s[3][3];return n=(a*s[0][3]-o*s[3][3])/h,l=(a-o*r)/h,[1/n,l]},project2DTo3DPlane:function(t,e,r){var s,o,a,n,l,h=r.slice(1)||[0,0,0],d=e.slice(1),u,c,p;if(n=math_default.norm(d,3),a=math_default.innerProduct(h,d,3)/n,this.projectionType==="parallel"){s=this.matrix3D.slice(0,3),s.push([0,d[0],d[1],d[2]]),o=t.coords.usrCoords.slice(),o.push(a);try{s[2][3]===1&&(s[2][1]=s[2][2]=math_default.eps*.001),l=math_default.Numerics.Gauss(s,o)}catch{l=[0,NaN,NaN,NaN]}}else{s=this.matrix3D,o=t.coords.usrCoords.slice(),u=math_default.Numerics.Gauss(this.viewPortTransform,o),p=this._getW0(s,u,a),c=p[0],o=[u[0]*c,u[1]*c,u[2]*c,p[1]*c];try{s[2][3]===1&&(s[2][1]=s[2][2]=math_default.eps*.001),l=math_default.Numerics.Gauss(s,o),l[1]/=l[0],l[2]/=l[0],l[3]/=l[0],l[0]/=l[0]}catch{l=[0,NaN,NaN,NaN]}}return l},projectScreenToSegment:function(t,e,r){var s=this.project3DTo2D(e).slice(1,3),o=this.project3DTo2D(r).slice(1,3),a=[o[0]-s[0],o[1]-s[1]],n=math_default.innerProduct(a,a),l=[t[0]-s[0],t[1]-s[1]],h=math_default.innerProduct(l,a)/n,d,u,c,p,f,_,g;return this.projectionType==="central"?(d=[1,.5*(e[1]+r[1]),.5*(e[2]+r[2]),.5*(e[3]+r[3])],u=this.project3DTo2D(d).slice(1,3),c=[u[0]-s[0],u[1]-s[1]],p=math_default.innerProduct(c,a)/n,f=(1-p)*h/((1-2*p)*h+p)):f=h,_=Math.min(Math.max(f,0),1),g=1-_,[1,g*e[1]+_*r[1],g*e[2]+_*r[2],g*e[3]+_*r[3]]},project2DTo3DVertical:function(t,e){var r=t.coords.usrCoords.slice(1,3),s=[1,e[1],e[2],this.bbox3D[2][0]],o=[1,e[1],e[2],this.bbox3D[2][1]];return this.projectScreenToSegment(r,s,o)},project3DToCube:function(t){var e=this.bbox3D,r=!1;return t[1]<e[0][0]&&(t[1]=e[0][0],r=!0),t[1]>e[0][1]&&(t[1]=e[0][1],r=!0),t[2]<e[1][0]&&(t[2]=e[1][0],r=!0),t[2]>e[1][1]&&(t[2]=e[1][1],r=!0),t[3]<=e[2][0]&&(t[3]=e[2][0],r=!0),t[3]>=e[2][1]&&(t[3]=e[2][1],r=!0),[t,r]},intersectionLineCube:function(t,e,r){var s,o,a,n,l=e.length===3?e:e.slice(1);for(s=r,o=0;o<3;o++)l[o]!==0&&(a=(this.bbox3D[o][0]-t[o+1])/l[o],n=(this.bbox3D[o][1]-t[o+1])/l[o],r<0?s=Math.max(s,Math.min(a,n)):s=Math.min(s,Math.max(a,n)));return s},isInCube:function(t,e){var r;if(t.length===4){if(t[0]===0)return!1;r=t.slice(1)}return r[0]>this.bbox3D[0][0]-math_default.eps&&r[0]<this.bbox3D[0][1]+math_default.eps&&r[1]>this.bbox3D[1][0]-math_default.eps&&r[1]<this.bbox3D[1][1]+math_default.eps&&r[2]>this.bbox3D[2][0]-math_default.eps&&r[2]<this.bbox3D[2][1]+math_default.eps},intersectionPlanePlane:function(t,e,r){var s=[!1,!1],o,a,n,l,h;return r=r||e.d,l=math_default.crossProduct(t.normal.slice(1),e.normal.slice(1)),l.unshift(0),o=math_default.Geometry.meet3Planes(t.normal,t.d,e.normal,r,l,0),h=math_default.Geometry.meetPlanePlane(t.vec1,t.vec2,e.vec1,e.vec2),n=this.intersectionLineCube(o,h,1/0),a=math_default.axpy(n,h,o),this.isInCube(a)&&(s[0]=a),n=this.intersectionLineCube(o,h,-1/0),a=math_default.axpy(n,h,o),this.isInCube(a)&&(s[1]=a),s},intersectionPlaneFace:function(t,e){var r=[],s,o,a,n,l,h,d,u,c,p,f,_,g,m,b,C,y=[],x=[],v;for(C=math_default.crossProduct(t.normal.slice(1),e.normal.slice(1)),C.unshift(0),a=geometry_default.meet3Planes(t.normal,t.d,e.normal,e.d,C,0),m=geometry_default.meetPlanePlane(t.vec1,t.vec2,e.vec1,e.vec2),u=e.polyhedron.faces[e.faceNumber],n=e.polyhedron.coords,c=u.length,s=1;s<=c;s++)l=n[u[s-1]],h=n[u[s%c]],b=[0,h[1]-l[1],h[2]-l[2],h[3]-l[3]],p=Math.random(),f=Math.random(),_=Math.random(),g=Math.random(),y=[[p*m[1]+f*m[3],p*-b[1]+f*-b[3]],[_*m[2]+g*m[3],_*-b[2]+g*-b[3]]],x=[p*(l[1]-a[1])+f*(l[3]-a[3]),_*(l[2]-a[2])+g*(l[3]-a[3])],v=numerics_default.Gauss(y,x),o=v[1],o>-math_default.eps&&o<1+math_default.eps&&(d=[1,l[1]+o*b[1],l[2]+o*b[2],l[3]+o*b[3]],r.push(d));return r},intersectionPlanePolyhedron:function(t,e){var r,s,o,a,n,l,h,d=1e-12,u=[],c=[],p=[],f=[];for(r=0;r<e.numberFaces;r++)if(!(e.def.faces[r].length<3)&&(o=this.intersectionPlaneFace(t,e.faces[r]),!(o.length<2)&&o[0].length===4&&o[1].length===4)){for(s=0;s<u.length&&!(geometry_default.distance(o[0],u[s][0],4)<d&&geometry_default.distance(o[1],u[s][1],4)<d||geometry_default.distance(o[0],u[s][1],4)<d&&geometry_default.distance(o[1],u[s][0],4)<d);s++);s===u.length&&u.push(o.slice())}if(u.length===0)return{X:c,Y:p,Z:f};n=0,l=n,r=0;do{for(a=u[l][r],a.length===4&&(c.push(a[1]),p.push(a[2]),f.push(a[3])),r=(r+1)%2,a=u[l][r],h=l,s=0;s<u.length;s++){if(s!==l&&geometry_default.distance(a,u[s][0])<d){l=s,r=0;break}if(s!==l&&geometry_default.distance(a,u[s][1])<d){l=s,r=1;break}}if(l===h){console.log("Error face3d intersection update: did not find next",l,r);break}}while(l!==n);return c.push(c[0]),p.push(p[0]),f.push(f[0]),{X:c,Y:p,Z:f}},getMesh:function(t,e,r){var s,o,a,n,l,h,d,u=[0,0,0],c=type_default.evaluate(e[2]),p=type_default.evaluate(r[2]),f=[],_=[];for(h=(type_default.evaluate(e[1])-type_default.evaluate(e[0]))/c,d=(type_default.evaluate(r[1])-type_default.evaluate(r[0]))/p,s=0;s<=c;s++){for(a=e[0]+h*s,o=0;o<=p;o++)n=r[0]+d*o,type_default.isFunction(t)?u=t(a,n):u=[t[0](a,n),t[1](a,n),t[2](a,n)],l=this.project3DTo2D(u),f.push(l[1]),_.push(l[2]);f.push(NaN),_.push(NaN)}for(o=0;o<=p;o++){for(n=r[0]+d*o,s=0;s<=c;s++)a=e[0]+h*s,type_default.isFunction(t)?u=t(a,n):u=[t[0](a,n),t[1](a,n),t[2](a,n)],l=this.project3DTo2D(u),f.push(l[1]),_.push(l[2]);f.push(NaN),_.push(NaN)}return[f,_]},animateAzimuth:function(){var t=this.az_slide._smin,e=this.az_slide._smax-t,r=this.az_slide.Value()+.1;this.az_slide.position=(r-t)/e,this.az_slide.position>1&&(this.az_slide.position=0),this.board._change3DView=!0,this.board.update(),this.board._change3DView=!1,this.timeoutAzimuth=setTimeout(function(){this.animateAzimuth()}.bind(this),200)},stopAzimuth:function(){clearTimeout(this.timeoutAzimuth),this.timeoutAzimuth=null},isVerticalDrag:function(){var t=this.board,e;return this.evalVisProp("verticaldrag.enabled")?(e="_"+this.evalVisProp("verticaldrag.key")+"Key",t[e]):!1},freeR:function(){this.r=null},setView:function(t,e,r){return r!==void 0&&(this.r=r),r=this.getCameraDistance(),this.az_slide.setValue(t),this.el_slide.setValue(e),this.board.update(),this},nextView:function(){var t=this.evalVisProp("values"),e=this.visProp._currentview;return e=(e+1)%t.length,this.setCurrentView(e),this},previousView:function(){var t=this.evalVisProp("values"),e=this.visProp._currentview;return e=(e+t.length-1)%t.length,this.setCurrentView(e),this},setCurrentView:function(t){var e=this.evalVisProp("values");return(t<0||t>=e.length)&&(t=(t%e.length+e.length)%e.length),this.setView(e[t][0],e[t][1],e[t][2]),this.visProp._currentview=t,this},_az_elEventHandler:function(t){var e=this.az_slide._smax,r=this.az_slide._smin,s=(e-r)/this.board.canvasWidth*this.evalVisProp("az.pointer.speed"),o,a,n=this.az_slide.Value(),l=this.el_slide.Value();return o=t.screenX-this._lastPos.x,this._lastPos.x=t.screenX,a=t.screenY-this._lastPos.y,this._lastPos.y=t.screenY,this.board.mode===this.board.BOARD_MODE_DRAG||!this.board._change3DView?this:(this.evalVisProp("az.pointer.enabled")&&o!==0&&t.key==null&&(n+=o*s),this.evalVisProp("el.pointer.enabled")&&a!==0&&t.key==null&&(l+=a*s),this.evalVisProp("az.continuous")?n=math_default.wrap(n,r,e):n>0?n=Math.min(e,n):n<0&&(n=Math.max(r,n)),e=this.el_slide._smax,r=this.el_slide._smin,this.evalVisProp("el.continuous")&&!this.trackballEnabled?l=math_default.wrap(l,r,e):l>0?l=Math.min(e,l):l<0&&(l=Math.max(r,l)),this.setView(n,l),this)},_azEventHandler:function(t){var e=this.az_slide._smax,r=this.az_slide._smin,s=(e-r)/this.board.canvasWidth*this.evalVisProp("az.pointer.speed"),o,a=this.az_slide.Value(),n=this.el_slide.Value();return o=t.screenX-this._lastPos.x,this._lastPos.x=t.screenX,this.board.mode===this.board.BOARD_MODE_DRAG||!this.board._change3DView?this:(this.evalVisProp("az.keyboard.enabled")&&(t.key==="ArrowRight"?a=a+this.evalVisProp("az.keyboard.step")*Math.PI/180:t.key==="ArrowLeft"&&(a=a-this.evalVisProp("az.keyboard.step")*Math.PI/180)),this.evalVisProp("az.pointer.enabled")&&o!==0&&t.key==null&&(a+=o*s),this.evalVisProp("az.continuous")?a=math_default.wrap(a,r,e):a>0?a=Math.min(e,a):a<0&&(a=Math.max(r,a)),this.setView(a,n),this)},_elEventHandler:function(t){var e=this.el_slide._smax,r=this.el_slide._smin,s=(e-r)/this.board.canvasHeight*this.evalVisProp("el.pointer.speed"),o,a=this.az_slide.Value(),n=this.el_slide.Value();return o=t.screenY-this._lastPos.y,this._lastPos.y=t.screenY,this.board.mode===this.board.BOARD_MODE_DRAG||!this.board._change3DView?this:(this.evalVisProp("el.keyboard.enabled")&&(t.key==="ArrowUp"?n=n-this.evalVisProp("el.keyboard.step")*Math.PI/180:t.key==="ArrowDown"&&(n=n+this.evalVisProp("el.keyboard.step")*Math.PI/180)),this.evalVisProp("el.pointer.enabled")&&o!==0&&t.key==null&&(n+=o*s),this.evalVisProp("el.continuous")&&!this.trackballEnabled?n=math_default.wrap(n,r,e):n>0?n=Math.min(e,n):n<0&&(n=Math.max(r,n)),this.setView(a,n),this)},_bankEventHandler:function(t){var e=this.bank_slide._smax,r=this.bank_slide._smin,s,o,a=t.deltaY,n=this.bank_slide.Value();return this.board.mode===this.board.BOARD_MODE_DRAG||!this.board._change3DView?this:(this.evalVisProp("bank.keyboard.enabled")&&(s=this.evalVisProp("bank.keyboard.step")*Math.PI/180,t.key==="."||t.key==="<"?n-=s:(t.key===","||t.key===">")&&(n+=s)),this.evalVisProp("bank.pointer.enabled")&&a!==0&&t.key==null&&(o=(e-r)/this.board.canvasHeight*this.evalVisProp("bank.pointer.speed"),n+=a*o,t.preventDefault()),this.evalVisProp("bank.continuous")?n=math_default.wrap(n,r,e):n=math_default.clamp(n,r,e),this.bank_slide.setValue(n),this.board.update(),this)},_trackballHandler:function(t){var e=this.board.getMousePosition(t),r,s,o,a,n=new coords_default(constants.COORDS_BY_USER,[this.llftCorner[0]+this.size[0]*.5,this.llftCorner[1]+this.size[1]*.5],this.board);return r=e[0]-n.scrCoords[1],s=e[1]-n.scrCoords[2],o=t.screenX-this._lastPos.x,a=t.screenY-this._lastPos.y,this._lastPos.x=t.screenX,this._lastPos.y=t.screenY,this._trackball={dx:o,dy:-a,x:r,y:-s},this.board.update(),this},pointerDownHandler:function(t){var e,r,s;this._hasMoveAzEl=!1,this._hasMoveAz=!1,this._hasMoveEl=!1,this._hasMoveBank=!1,this._hasMoveTrackball=!1,this.board.mode===this.board.BOARD_MODE_NONE&&(this.board._change3DView=!0,this._lastPos.x=t.screenX,this._lastPos.y=t.screenY,this.evalVisProp("trackball.enabled")?(e=this.evalVisProp("trackball.button"),r=this.evalVisProp("trackball.key"),(e===-1||e===t.button)&&(r==="none"||r.indexOf("shift")>-1&&t.shiftKey||r.indexOf("ctrl")>-1&&t.ctrlKey)&&(s=this.evalVisProp("trackball.outside")?document:this.board.containerObj,env_default.addEvent(s,"pointermove",this._trackballHandler,this),this._hasMoveTrackball=!0)):(this.evalVisProp("az.pointer.enabled")&&this.evalVisProp("el.pointer.enabled")&&(e=this.evalVisProp("az.pointer.button"),r=this.evalVisProp("az.pointer.key"),e===this.evalVisProp("el.pointer.button")&&r===this.evalVisProp("el.pointer.key")&&(e===-1||e===t.button)&&(r==="none"||r.indexOf("shift")>-1&&t.shiftKey||r.indexOf("ctrl")>-1&&t.ctrlKey)&&(s=this.evalVisProp("az.pointer.outside")?document:this.board.containerObj,s===(this.evalVisProp("el.pointer.outside")?document:this.board.containerObj)&&(env_default.addEvent(s,"pointermove",this._az_elEventHandler,this),this._hasMoveAzEl=!0))),this._hasMoveAzEl||(this.evalVisProp("az.pointer.enabled")&&(e=this.evalVisProp("az.pointer.button"),r=this.evalVisProp("az.pointer.key"),(e===-1||e===t.button)&&(r==="none"||r.indexOf("shift")>-1&&t.shiftKey||r.indexOf("ctrl")>-1&&t.ctrlKey)&&(s=this.evalVisProp("az.pointer.outside")?document:this.board.containerObj,env_default.addEvent(s,"pointermove",this._azEventHandler,this),this._hasMoveAz=!0)),this.evalVisProp("el.pointer.enabled")&&(e=this.evalVisProp("el.pointer.button"),r=this.evalVisProp("el.pointer.key"),(e===-1||e===t.button)&&(r==="none"||r.indexOf("shift")>-1&&t.shiftKey||r.indexOf("ctrl")>-1&&t.ctrlKey)&&(s=this.evalVisProp("el.pointer.outside")?document:this.board.containerObj,env_default.addEvent(s,"pointermove",this._elEventHandler,this),this._hasMoveEl=!0))),this.evalVisProp("bank.pointer.enabled")&&(e=this.evalVisProp("bank.pointer.button"),r=this.evalVisProp("bank.pointer.key"),(e===-1||e===t.button)&&(r==="none"||r.indexOf("shift")>-1&&t.shiftKey||r.indexOf("ctrl")>-1&&t.ctrlKey)&&(s=this.evalVisProp("bank.pointer.outside")?document:this.board.containerObj,env_default.addEvent(s,"wheel",this._bankEventHandler,this,{passive:!1}),this._hasMoveBank=!0))),env_default.addEvent(document,"pointerup",this.pointerUpHandler,this))},pointerUpHandler:function(t){var e;this._hasMoveAzEl&&(e=this.evalVisProp("az.pointer.outside")?document:this.board.containerObj,env_default.removeEvent(e,"pointermove",this._az_elEventHandler,this),this._hasMoveAzEl=!1),this._hasMoveAz&&(e=this.evalVisProp("az.pointer.outside")?document:this.board.containerObj,env_default.removeEvent(e,"pointermove",this._azEventHandler,this),this._hasMoveAz=!1),this._hasMoveEl&&(e=this.evalVisProp("el.pointer.outside")?document:this.board.containerObj,env_default.removeEvent(e,"pointermove",this._elEventHandler,this),this._hasMoveEl=!1),this._hasMoveBank&&(e=this.evalVisProp("bank.pointer.outside")?document:this.board.containerObj,env_default.removeEvent(e,"wheel",this._bankEventHandler,this),this._hasMoveBank=!1),this._hasMoveTrackball&&(e=this.evalVisProp("trackball.outside")?document:this.board.containerObj,env_default.removeEvent(e,"pointermove",this._trackballHandler,this),this._hasMoveTrackball=!1),env_default.removeEvent(document,"pointerup",this.pointerUpHandler,this),this.board._change3DView=!1,this.board.mode=this.board.BOARD_MODE_NONE}});jxg_default.createView3D=function(t,e,r){var s,o,a,n,l,h,d,u,c,p,f,_,g=e[0],m=e[1];return o=type_default.copyAttributes(r,t.options,"view3d"),s=new jxg_default.View3D(t,e,o),s.defaultAxes=s.create("axes3d",[],o),h=g[0],d=g[1],u=m[0],c=m[1],a=type_default.copyAttributes(o,t.options,"view3d","az","slider"),a.name="az",n=type_default.copyAttributes(o,t.options,"view3d","el","slider"),n.name="el",l=type_default.copyAttributes(o,t.options,"view3d","bank","slider"),l.name="bank",_=type_default.evaluate(a.point1.pos),type_default.isArray(_)?p=_:p=[h-1,d-2],_=type_default.evaluate(a.point2.pos),type_default.isArray(_)?f=_:f=[h+u+1,d-2],s.az_slide=t.create("slider",[p,f,[type_default.evaluate(a.min),type_default.evaluate(a.start),type_default.evaluate(a.max)]],a),s.inherits.push(s.az_slide),s.az_slide.elType="view3d_slider",_=type_default.evaluate(n.point1.pos),type_default.isArray(_)?p=_:p=[h-1,d],_=type_default.evaluate(n.point2.pos),type_default.isArray(_)?f=_:f=[h-1,d+c],s.el_slide=t.create("slider",[p,f,[type_default.evaluate(n.min),type_default.evaluate(n.start),type_default.evaluate(n.max)]],n),s.inherits.push(s.el_slide),s.el_slide.elType="view3d_slider",_=type_default.evaluate(l.point1.pos),type_default.isArray(_)?p=_:p=[h-1,d+c+2],_=type_default.evaluate(l.point2.pos),type_default.isArray(_)?f=_:f=[h+u+1,d+c+2],s.bank_slide=t.create("slider",[p,f,[type_default.evaluate(l.min),type_default.evaluate(l.start),type_default.evaluate(l.max)]],l),s.inherits.push(s.bank_slide),s.bank_slide.elType="view3d_slider",s.board.infobox.visProp=type_default.merge(s.board.infobox.visProp,o.infobox),s.board.highlightInfobox=function(b,C,y){var x,v,P,E,w="",O=y.board,S,M,N=null;for(this.mode===this.BOARD_MODE_DRAG&&(s.isVerticalDrag()?w='<span style="color:black; font-size:200%">⇅ &nbsp;</span>':w='<span style="color:black; font-size:200%">⇄ &nbsp;</span>'),v=0;v<y.parents.length&&(N=O.objects[y.parents[v]],!N.is3D);v++);if(N&&type_default.exists(N.element2D)){if(E=[1,0,0,N.coords[3]],s._w0=math_default.innerProduct(s.matrix3D[0],E,4),P=s.project2DTo3DPlane(N.element2D,[1,0,0,1],E),!s.isInCube(P)){s.board.highlightCustomInfobox("",N);return}x=N.evalVisProp("infoboxdigits"),M=s.board.infobox,x==="auto"?M.useLocale()?S=[w,"(",M.formatNumberLocale(N.X())," | ",M.formatNumberLocale(N.Y())," | ",M.formatNumberLocale(N.Z()),")"]:S=[w,"(",type_default.autoDigits(N.X())," | ",type_default.autoDigits(N.Y())," | ",type_default.autoDigits(N.Z()),")"]:M.useLocale()?S=[w,"(",M.formatNumberLocale(N.X(),x)," | ",M.formatNumberLocale(N.Y(),x)," | ",M.formatNumberLocale(N.Z(),x),")"]:S=[w,"(",type_default.toFixed(N.X(),x)," | ",type_default.toFixed(N.Y(),x)," | ",type_default.toFixed(N.Z(),x),")"],s.board.highlightCustomInfobox(S.join(""),N)}else s.board.highlightCustomInfobox("("+b+", "+C+")",y)},s.BOARD_MODE_NONE=0,env_default.addEvent(t.containerObj,"keydown",function(b){var C,y=!1;s.evalVisProp("el.keyboard.enabled")&&(b.key==="ArrowUp"||b.key==="ArrowDown")&&(C=s.evalVisProp("el.keyboard.key"),(C==="none"||C.indexOf("shift")>-1&&b.shiftKey||C.indexOf("ctrl")>-1&&b.ctrlKey)&&(s._elEventHandler(b),y=!0)),s.evalVisProp("az.keyboard.enabled")&&(b.key==="ArrowLeft"||b.key==="ArrowRight")&&(C=s.evalVisProp("az.keyboard.key"),(C==="none"||C.indexOf("shift")>-1&&b.shiftKey||C.indexOf("ctrl")>-1&&b.ctrlKey)&&(s._azEventHandler(b),y=!0)),s.evalVisProp("bank.keyboard.enabled")&&(b.key===","||b.key==="<"||b.key==="."||b.key===">")&&(C=s.evalVisProp("bank.keyboard.key"),(C==="none"||C.indexOf("shift")>-1&&b.shiftKey||C.indexOf("ctrl")>-1&&b.ctrlKey)&&(s._bankEventHandler(b),y=!0)),b.key==="PageUp"?(s.nextView(),y=!0):b.key==="PageDown"&&(s.previousView(),y=!0),y&&b.preventDefault(),this.board._change3DView=!1},s),env_default.addEvent(t.containerObj,"pointerdown",s.pointerDownHandler,s),s.getAnglesFromSliders(),s.matrix3DRot=s.getRotationFromAngles(),s.updateAngleSliderBounds(),s.board.update(),s};jxg_default.registerElement("view3d",jxg_default.createView3D);var view3d_default=jxg_default.View3D;jxg_default.GeometryElement3D=function(t,e){this.elType=e,this.view=t,this.id=this.view.board.setId(this,e),this.element2D=null,this.is3D=!0,this.zIndex=0,this.view.objects[this.id]=this,this.name!==""&&(this.view.elementsByName[this.name]=this)};jxg_default.extend(jxg_default.GeometryElement3D.prototype,{setAttr2D:function(t){var e=t;return e.name=this.name,e.element3d=this,e.id=null,e},setAttribute:function(t){var e,r,s,o,a,n={};for(e=0;e<arguments.length;e++)o=arguments[e],type_default.isString(o)?(a=o.split(":"),n[type_default.trim(a[0])]=type_default.trim(a[1])):type_default.isArray(o)?n[o[0]]=o[1]:jxg_default.extend(n,o);for(e in n)if(n.hasOwnProperty(e))switch(r=e.replace(/\s+/g,"").toLowerCase(),s=n[e],r){case"fillColor":case"numberpointshigh":case"stepsu":case"stepsv":type_default.exists(this.visProp[r])&&(!jxg_default.Validator[r]||jxg_default.Validator[r]&&jxg_default.Validator[r](s)||jxg_default.Validator[r]&&type_default.isFunction(s)&&jxg_default.Validator[r](s()))&&(s=s.toLowerCase&&s.toLowerCase()==="false"?!1:s,this._set(r,s));break;default:this._set(r,s),type_default.exists(this.element2D)&&this.element2D.setAttribute(n)}},getAttribute:function(t){var e;switch(t=t.toLowerCase(),t){case"numberpointshigh":case"stepsu":case"stepsv":e=this.visProp[t];break;default:type_default.exists(this.element2D)&&(e=this.element2D.getAttribute(t))}return e},getAttributes:function(){var t={},e,r,s=["numberpointshigh","stepsu","stepsv"],o=s.length;for(type_default.exists(this.element2D)&&(t=type_default.merge(this.element2D.getAttributes())),e=0;e<o;e++)r=s[e],type_default.exists(this.visProp[r])&&(t[r]=this.visProp[r]);return t},addTransformGeneric:function(t,e){var r,s=type_default.isArray(e)?e:[e],o=s.length;for(this.transformations.length===0&&(this.baseElement=t),r=0;r<o;r++)this.transformations.push(s[r]);return this},removeTransformGeneric:function(t){var e,r=type_default.isArray(t)?t:[t],s=r.length;for(e=0;e<s;e++)type_default.removeElementFromArray(this.transformations,r[e]);return this.transformations.length===0&&(this.baseElement=null),this},clearTransforms:function(){return this.transformations=[],this.baseElement=null,this},setPosition2D:function(t){},projectCoords:function(t,e){},projectScreenCoords:function(t,e,r){return geometry_default.projectScreenCoordsToParametric(t,this,e,r)},remove:function(){}});var element3d_default=jxg_default.GeometryElement3D;jxg_default.createAxes3D=function(t,e,r){var s=e[0],o=["x","y","z"],a="Axis",n=["Rear","Front"],l=[0,0,0],h=[0,0,0],d,u,c,p,f,_,g,m,b,C,y,x,v,P,E,w,O,S,M,N={};if(type_default.exists(s.bbox3D))for(d=0;d<o.length;d++)l[d]=s.bbox3D[d][0],h[d]=s.bbox3D[d][1];else for(d=0;d<o.length;d++)l[d]=e[1][d],h[d]=e[2][d];for(_=type_default.copyAttributes(r,t.options,"axes3d"),g=_.axesposition,d=0;d<o.length;d++)m=o[d],O=m+a,g==="center"?(y=[0,0,0],x=[0,0,0],x[d]=h[d],N[O]=s.create("axis3d",[y,x],_[O.toLowerCase()]),N[O].view=s):g==="border"&&(O+="Border",y=l.slice(),x=h.slice(),m==="z"?(y[1]=h[1],x[0]=l[0]):m==="x"?(y=[l[0],h[1],l[2]],x=[h[0],h[1],l[2]]):(y=[h[0],l[1],l[2]],x=[h[0],h[1],l[2]]),x[d]=h[d],N[O]=s.create("axis3d",[y,x],_[O.toLowerCase()]),N[O].view=s,M=_[O.toLowerCase()].ticks3d,M.element3d=!0,C=h[d]-l[d],m==="x"?N[O+"Ticks"]=s.create("ticks3d",[y,[1,0,0],C,[0,1,0]],M):m==="y"?N[O+"Ticks"]=s.create("ticks3d",[y,[0,1,0],C,[1,0,0]],M):N[O+"Ticks"]=s.create("ticks3d",[y,[0,0,1],C,[0,1,0]],M),N[O+"Ticks"].view=s);for(g==="center"?(N.O=s.create("intersection",[N[o[0]+a],N[o[1]+a]],{name:"",visible:!1,withLabel:!1}),N.O.view=s):N.O=null,d=0;d<o.length;d++)for(p=(d+1)%3,f=(d+2)%3,m=o[d],u=0;u<n.length;u++)O=m+"Plane"+n[u],y=[0,0,0],y[d]=u===0?l[d]:h[d],v=[0,0,0],P=[0,0,0],v[p]=1,P[f]=1,E=[l[p],h[p]],w=[l[f],h[f]],_=type_default.copyAttributes(r,t.options,"axes3d",O),N[O]=s.create("plane3d",[y,v,P,E,w],_),N[O].elType="axisplane3d";for(d=0;d<o.length;d++)for(m=o[d],u=0;u<n.length;u++)for(c=1;c<=2;c++)p=(d+c)%3,b=o[p],O=m+"Plane"+n[u]+b.toUpperCase()+"Axis",S=m+"Plane"+n[u],y=[0,0,0],x=[0,0,0],y[d]=x[d]=u===0?l[d]:h[d],y[p]=l[p],x[p]=h[p],_=type_default.copyAttributes(r,t.options,"axes3d",O),N[O]=s.create("axis3d",[y,x],_),N[O].view=s,N[S].addChild(N[O]),N[S].element2D.inherits.push(N[O]);return N};jxg_default.registerElement("axes3d",jxg_default.createAxes3D);jxg_default.createAxis3D=function(t,e,r){var s=e[0],o=type_default.copyAttributes(r,t.options,"axis3d");return s.create("line3d",e.slice(1),o)};jxg_default.registerElement("axis3d",jxg_default.createAxis3D);jxg_default.createMesh3D=function(t,e,r){var s=e[0],o=type_default.copyAttributes(r,t.options,"mesh3d"),a;return o.element3d=!0,a=s.create("curve",[[],[]],o),a.point=e[1],a.direction1=e[2],a.direction2=e[3],a.range1=e[4],a.range2=e[5],a.updateDataArray=function(){var n=type_default.evaluate(this.range1),l=type_default.evaluate(this.range2),h=n[0],d=n[1],u=l[0],c=l[1],p,f,_,g,m=[0,0,0],b=[0,0,0],C=this.evalVisProp("stepwidthu"),y=this.evalVisProp("stepwidthv"),x=[0,0,0];if(this.dataX=[],this.dataY=[],type_default.isFunction(this.point))x=this.point();else if(type_default.isPoint3D(this.point))x=this.point.coords;else for(g=0;g<this.point.length;g++)x[g]=type_default.evaluate(this.point[g]);if(type_default.isFunction(this.direction1))m=type_default.evaluate(this.direction1);else for(g=0;g<this.direction1.length;g++)m[g]=type_default.evaluate(this.direction1[g]);if(type_default.isFunction(this.direction2))b=type_default.evaluate(this.direction2);else for(g=0;g<this.direction2.length;g++)b[g]=type_default.evaluate(this.direction2[g]);for(x.length===4&&(x=x.slice(1)),m.length===4&&(m=m.slice(1)),b.length===4&&(b=b.slice(1)),p=jxg_default.Math.norm(m,3),f=jxg_default.Math.norm(b,3),g=0;g<3;g++)m[g]/=p,b[g]/=f;_=s.getMesh([function(v,P){return x[0]+v*m[0]+P*b[0]},function(v,P){return x[1]+v*m[1]+P*b[1]},function(v,P){return x[2]+v*m[2]+P*b[2]}],[Math.ceil(h),Math.floor(d),(Math.ceil(d)-Math.floor(h))/C],[Math.ceil(u),Math.floor(c),(Math.ceil(c)-Math.floor(u))/y]),this.dataX=_[0],this.dataY=_[1]},a};jxg_default.registerElement("mesh3d",jxg_default.createMesh3D);jxg_default.Circle3D=function(t,e,r,s,o){var a,n;this.constructor(t.board,o,constants.OBJECT_TYPE_CIRCLE3D,constants.OBJECT_CLASS_3D),this.constructor3D(t,"circle3d"),this.center=this.board.select(e),this.normalFunc=r,this.normal=[0,0,0,0],this.curve,this.frame1,this.frame2,type_default.exists(this.center._is_new)?(this.addChild(this.center),delete this.center._is_new):this.center.addChild(this),this.updateRadius=type_default.createFunction(s,this.board),this.addParentsFromJCFunctions([this.updateRadius]),this.updateNormal(),this.frame1=math_default.crossProduct(this.normal.slice(1),[1,0,0]),this.frame1.unshift(0),a=math_default.crossProduct(this.normal.slice(1),[-.5,.8660254037844386,0]),a.unshift(0),math_default.norm(a)>math_default.norm(this.frame1)&&(this.frame1=a),this.frame2=math_default.crossProduct(this.normal.slice(1),this.frame1.slice(1)),this.frame2.unshift(0),this.normalizeFrame(),n=this,this.curve=t.create("curve3d",[function(l){var h=n.Radius(),d=Math.sin(l),u=Math.cos(l);return[n.center.coords[1]+h*(u*n.frame1[1]+d*n.frame2[1]),n.center.coords[2]+h*(u*n.frame1[2]+d*n.frame2[2]),n.center.coords[3]+h*(u*n.frame1[3]+d*n.frame2[3])]},[0,2*Math.PI]],o)};jxg_default.Circle3D.prototype=new jxg_default.GeometryElement;type_default.copyPrototypeMethods(jxg_default.Circle3D,jxg_default.GeometryElement3D,"constructor3D");jxg_default.extend(jxg_default.Circle3D.prototype,{update:function(){return this.needsUpdate&&(this.updateNormal().updateFrame(),this.curve.visProp.visible=!isNaN(this.Radius())),this},updateRenderer:function(){return this.needsUpdate=!1,this},setRadius:function(t){return this.updateRadius=type_default.createFunction(t,this.board),this.addParentsFromJCFunctions([this.updateRadius]),this.board.update(),this},Radius:function(t){return type_default.exists(t)?(this.setRadius(t),this.Radius()):Math.abs(this.updateRadius())},normalizeFrame:function(){for(var t=math_default.norm(this.frame1),e=math_default.norm(this.frame2),r=0;r<4;r++)this.frame1[r]/=t,this.frame2[r]/=e;return this},updateNormal:function(){var t,e,r=math_default.eps*math_default.eps;if(this.normal=type_default.evaluate(this.normalFunc),e=math_default.norm(this.normal),Math.abs(e)>r)for(t=0;t<4;t++)this.normal[t]/=e;return this},updateFrame:function(){return this.frame1=math_default.crossProduct(this.frame2.slice(1),this.normal.slice(1)),this.frame1.unshift(0),this.frame2=math_default.crossProduct(this.normal.slice(1),this.frame1.slice(1)),this.frame2.unshift(0),this.normalizeFrame(),this},projectCoords:function(t,e){return this.curve.projectCoords(t,e)},projectScreenCoords:function(t,e,r){return this.curve.projectScreenCoords(t,e,r)}});jxg_default.createCircle3D=function(t,e,r){var s=e[0],o=type_default.copyAttributes(r,t.options,"circle3d"),a=type_default.providePoints3D(s,[e[1]],r,"circle3d",["point"])[0],n=e[2],l=e[3],h;return type_default.isArray(n)&&n.length===3&&n.unshift(0),h=new jxg_default.Circle3D(s,a,n,l,o),h.curve.addParents([h]),h.addChild(h.curve),h.update(),h};jxg_default.registerElement("circle3d",jxg_default.createCircle3D);jxg_default.createIntersectionCircle3D=function(t,e,r){var s=e[0],o=e[1],a=e[2],n,l,h,d=type_default.copyAttributes(r,t.options,"intersectioncircle3d");try{h=geometry_default.intersectionFunction3D(s,o,a),l=s.create("point3d",h[0],{visible:!1}),n=s.create("circle3d",[l,h[1],h[2]],d),o.addChild(n),a.addChild(n)}catch{throw new Error("JSXGraph: Can't create 'intersection' with parent types '"+typeof e[1]+"' and '"+typeof e[2]+"'.")}return n.type=constants.OBJECT_TYPE_INTERSECTION_CIRCLE3D,n.elType="intersectioncircle3d",n.setParents([o.id,a.id]),n};jxg_default.registerElement("intersectioncircle3d",jxg_default.createIntersectionCircle3D);jxg_default.Point3D=function(t,e,r,s){this.constructor(t.board,s,constants.OBJECT_TYPE_POINT3D,constants.OBJECT_CLASS_3D),this.constructor3D(t,"point3d"),this.board.finalizeAdding(this),this.coords=[0,0,0,0],this.initialCoords=[0,0,0,0],this.F=e,this.slide=r,this.position=[],this.movePath=[],this.moveCallback=null,this.moveInterval=null,this._c2d=null};jxg_default.Point3D.prototype=new jxg_default.GeometryElement;type_default.copyPrototypeMethods(jxg_default.Point3D,jxg_default.GeometryElement3D,"constructor3D");type_default.copyMethodMap(jxg_default.Point3D,{});jxg_default.extend(jxg_default.Point3D.prototype,{X:function(){return this.coords[1]},Y:function(){return this.coords[2]},Z:function(){return this.coords[3]},W:function(){return this.coords[0]},updateCoords:function(){var t,e=0;if(type_default.isFunction(this.F))this.coords=type_default.evaluate(this.F),this.coords.length===3&&this.coords.unshift(1);else for(this.F.length===3&&(this.coords[0]=1,e=1),t=0;t<this.F.length;t++)type_default.isFunction(this.F[t])&&(this.coords[e+t]=type_default.evaluate(this.F[t]));return this},initCoords:function(){var t,e=0;if(type_default.isFunction(this.F))this.coords=type_default.evaluate(this.F),this.coords.length===3&&this.coords.unshift(1);else for(this.F.length===3&&(this.coords[0]=1,e=1),t=0;t<this.F.length;t++)this.coords[e+t]=type_default.evaluate(this.F[t]);return this.initialCoords=this.coords.slice(),this},normalizeCoords:function(){return Math.abs(this.coords[0])>1e-14&&(this.coords[1]/=this.coords[0],this.coords[2]/=this.coords[0],this.coords[3]/=this.coords[0],this.coords[0]=1),this},setPosition:function(t,e){var r=this.coords;return t.length===3?(r[0]=1,r[1]=t[0],r[2]=t[1],r[3]=t[2]):(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=t[3],this.normalizeCoords()),this},addTransform:function(t,e){return this.addTransformGeneric(t,e),this},removeTransform:function(t){return this.removeTransformGeneric(t),this},clearTransforms:function(){return this.clearTransformsGeneric(),this},updateTransform:function(){var t,e;if(this.transformations.length===0||this.baseElement===null)return this;for(this===this.baseElement?t=this.initialCoords:t=this.baseElement.coords,e=0;e<this.transformations.length;e++)this.transformations[e].update(),t=math_default.matVecMult(this.transformations[e].matrix,t);return this.coords=t,this},update:function(t){var e,r,s;return this.element2D.draggable()&&geometry_default.distance(this._c2d,this.element2D.coords.usrCoords)!==0?this.slide?(this.coords=this.slide.projectScreenCoords([this.element2D.X(),this.element2D.Y()],this.position,this.evalVisProp("cyclic")),this.element2D.coords.setCoordinates(constants.COORDS_BY_USER,this.view.project3DTo2D(this.coords))):(this.view.isVerticalDrag()?e=this.view.project2DTo3DVertical(this.element2D,this.coords):(r=[1,0,0,this.coords[3]],e=this.view.project2DTo3DPlane(this.element2D,[1,0,0,1],r)),e[0]!==0&&(s=this.view.project3DToCube(e),this.coords=s[0],s[1]&&this.element2D.coords.setCoordinates(constants.COORDS_BY_USER,this.view.project3DTo2D(this.coords)),this.slide&&(this.coords=this.slide.projectCoords([1,this.X(),this.Y(),this.Z()],this.position),this.element2D.coords.setCoordinates(constants.COORDS_BY_USER,this.view.project3DTo2D(this.coords))))):(this.updateCoords().updateTransform(),this.slide&&(this.coords=this.slide.projectCoords([1,this.X(),this.Y(),this.Z()],this.position)),e=this.coords,this.element2D.coords.setCoordinates(constants.COORDS_BY_USER,this.view.project3DTo2D(e)),this.zIndex=math_default.innerProduct(this.view.matrix3DRotShift[3],e)),this._c2d=this.element2D.coords.usrCoords.slice(),this},updateRenderer:function(){return this.needsUpdate=!1,this},testIfFinite:function(){return Math.abs(this.coords[0])>1e-12},distance:function(t){var e=1e-12,r=this.coords,s=t.coords;return r[0]*r[0]>e&&s[0]*s[0]>e?math_default.hypot(s[1]-r[1],s[2]-r[2],s[3]-r[3]):Number.POSITIVE_INFINITY},moveTo:function(t,e,r){r=r||{};var s,o=Math.ceil(e/this.board.attr.animationdelay),a=t[0],n=t[1],l=t[2],h=this.coords[1]-a,d=this.coords[2]-n,u=this.coords[3]-l,c=()=>{},p;if(r.callback&&(c=r.callback),p=function(f){var _=f/o;if(r.effect){if(r.effect==="<>")return Math.pow(Math.sin(_*Math.PI/2),2);if(r.effect==="<")return _*_*_;if(r.effect===">")return 1-Math.pow(1-_,3);if(r.effect==="==")return f/o;throw new Error("valid effects are '==', '<>', '>', and '<'.")}return f/o},!type_default.exists(e)||e===0)return this.setPosition([a,n,l],!0),this.board.update(this);if(!type_default.exists(r.callback)&&Math.abs(h)<math_default.eps&&Math.abs(d)<math_default.eps&&Math.abs(u)<math_default.eps)return this;for(this.animationPath=[],s=o;s>=0;s--)this.animationPath[o-s]=[a+h*p(s),n+d*p(s),l+u*p(s)];return this.moveAlong(this.animationPath,e,{callback:c})},moveAlong:function(t,e,r){let s=e/t.length;if(type_default.isObject(r)&&"callback"in r&&(this.moveCallback=r.callback),this.movePath.length>0){this.movePath=t;return}return this.movePath=t,new Promise((o,a)=>{this.moveInterval=setInterval(()=>{if(this.movePath.length>0){let n=this.movePath.shift();this.setPosition(n,!0),this.board.update(this)}this.movePath.length===0&&(clearInterval(this.moveInterval),o(),type_default.isFunction(this.moveCallback)&&this.moveCallback())},s)})},__evt__update3D:function(t){}});jxg_default.createPoint3D=function(t,e,r){var s=e[0],o,a,n,l,h,d=null,u=null;if(e.length>2&&type_default.exists(e[e.length-1].is3D)&&!type_default.isTransformationOrArray(e[e.length-1])?n=e.pop():n=null,e.length===2)a=e[1];else if(e.length===3&&type_default.isPoint3D(e[1])&&type_default.isTransformationOrArray(e[2]))a=[0,0,0],d=e[1],u=e[2];else if(e.length===4)a=e.slice(1);else if(e.length===5)a=e.slice(1);else throw new Error("JSXGraph: Can't create point3d with parent types '"+typeof e[1]+"' and '"+typeof e[2]+`'.
180
+ Possible parent types: [[x,y,z]], [x,y,z], or [[x,y,z], slide], () => [x, y, z], or [point, transformation(s)]`);return o=type_default.copyAttributes(r,t.options,"point3d"),h=new jxg_default.Point3D(s,a,n,o),h.initCoords(),d!==null&&u!==null&&h.addTransform(d,u),l=s.project3DTo2D(h.coords),o=h.setAttr2D(o),h.element2D=s.create("point",l,o),h.element2D.view=s,h.element2D.dump=!1,h.addChild(h.element2D),h.inherits.push(h.element2D),h.element2D.setParents(h),h.slide&&(h.slide.addChild(h),h.setParents(h.slide)),d&&h.setParents(d),h._c2d=h.element2D.coords.usrCoords.slice(),h};jxg_default.registerElement("point3d",jxg_default.createPoint3D);jxg_default.Curve3D=function(t,e,r,s,o,a,n){this.constructor(t.board,n,constants.OBJECT_TYPE_CURVE3D,constants.OBJECT_CLASS_3D),this.constructor3D(t,"curve3d"),this.board.finalizeAdding(this),this._F=e,this._X=r,this._Y=s,this._Z=o,this.points=[],this.numberPoints=0,this.dataX=null,this.dataY=null,this.dataZ=null,this._F!==null?(this._X=function(l){return this._F(l)[0]},this._Y=function(l){return this._F(l)[1]},this._Z=function(l){return this._F(l)[2]}):type_default.isFunction(this._X)?this._F=function(l){return[this._X(l),this._Y(l),this._Z(l)]}:this._F=null,this.range=a};jxg_default.Curve3D.prototype=new jxg_default.GeometryElement;type_default.copyPrototypeMethods(jxg_default.Curve3D,jxg_default.GeometryElement3D,"constructor3D");type_default.copyMethodMap(jxg_default.Curve3D,{});jxg_default.extend(jxg_default.Curve3D.prototype,{updateCoords:function(){var t=this.evalVisProp("numberpointshigh"),e,r,s,o,a,n,l=[1,0,0,0];if(this.points=[],type_default.exists(this.dataX))for(t=this.dataX.length,a=0;a<t;a++)this.points.push([1,this.dataX[a],this.dataY[a],this.dataZ[a]]);else if(type_default.isArray(this._X))for(t=this._X.length,a=0;a<t;a++)this.points.push([1,this._X[a],this._Y[a],this._Z[a]]);else for(e=type_default.evaluate(this.range),r=type_default.evaluate(e[0]),s=type_default.evaluate(e[1]),o=(s-r)/(t-1),n=0,a=r;n<t&&a<=s;n++,a+=o)l=this.F(a),l.unshift(1),this.points.push(l);return this.numberPoints=this.points.length,this},evalF:function(t){var e,r,s=[0,0,0,0];if(this.transformations.length===0||!type_default.exists(this.baseElement))return type_default.exists(this._F)?s=this._F(t):s=[this._X[t],this._Y[t],this._Z[t]],s;for(e=this.transformations,r=0;r<e.length;r++)e[r].update();for(s.length===3&&s.unshift(1),this===this.baseElement?type_default.exists(this._F)?s=this._F(t):s=[this._X[t],this._Y[t],this._Z[t]]:s=this.baseElement.evalF(t),s.unshift(1),s=math_default.matVecMult(e[0].matrix,s),r=1;r<e.length;r++)s=math_default.matVecMult(e[r].matrix,s);return s.slice(1)},F:function(t){return this.evalF(t)},X:function(t){return this.evalF(t)[0]},Y:function(t){return this.evalF(t)[1]},Z:function(t){return this.evalF(t)[2]},updateDataArray2D:function(){var t,e,r=[],s=[],o=this.points.length;for(t=0;t<o;t++)e=this.view.project3DTo2D(this.points[t]),r.push(e[1]),s.push(e[2]);return{X:r,Y:s}},addTransform:function(t,e){return this.addTransformGeneric(t,e),this},removeTransform:function(t){return this.removeTransformGeneric(t),this},clearTransforms:function(){return this.clearTransformsGeneric(),this},updateTransform:function(){var t,e,r,s,o;if(this.transformations.length===0||this.baseElement===null||type_default.exists(this._F))return this;for(t=this.transformations,r=0;r<t.length;r++)t[r].update();for(o=this.baseElement.numberPoints,r=0;r<o;r++){for(this===this.baseElement?e=this.points[r]:e=this.baseElement.points[r],s=0;s<t.length;s++)e=math_default.matVecMult(t[s].matrix,e);this.points[r]=e}return this.numberPoints=o,this},updateDataArray:function(){},update:function(){return this.needsUpdate&&(this.updateDataArray(),this.updateCoords().updateTransform()),this},updateRenderer:function(){return this.needsUpdate=!1,this},projectCoords:function(t,e){return geometry_default.projectCoordsToParametric(t,this,1,e)}});jxg_default.createCurve3D=function(t,e,r){var s=e[0],o,a,n,l,h,d,u,c,p=null,f=null;return e.length===3?type_default.isTransformationOrArray(e[2])&&e[1].type===constants.OBJECT_TYPE_CURVE3D?(p=e[1],f=e[2],o=null,a=[],n=[],l=[]):(o=e[1],h=e[2],a=null,n=null,l=null):e.length===2&&type_default.isArray(e[1])?(c=math_default.transpose(e[1]),a=c[0],n=c[1],l=c[2],o=null):(a=e[1],n=e[2],l=e[3],h=e[4],o=null),d=type_default.copyAttributes(r,t.options,"curve3d"),u=new jxg_default.Curve3D(s,o,a,n,l,h,d),d=u.setAttr2D(d),u.element2D=s.create("curve",[[],[]],d),u.element2D.view=s,u.element2D.dump=!1,p!==null&&(u.addTransform(p,f),u.addParents(p)),u.element2D.updateDataArray=function(){var _=u.updateDataArray2D();this.dataX=_.X,this.dataY=_.Y},u.addChild(u.element2D),u.inherits.push(u.element2D),u.element2D.setParents(u),u.element2D.prepareUpdate().update(),t.isSuspendedUpdate||u.element2D.updateVisibility().updateRenderer(),u};jxg_default.registerElement("curve3d",jxg_default.createCurve3D);jxg_default.createVectorfield3D=function(t,e,r){var s=e[0],o,a;if(!(e.length>=5&&(type_default.isArray(e[1])||type_default.isFunction(e[1])||type_default.isString(e[1]))&&type_default.isArray(e[2])&&e[1].length===3&&type_default.isArray(e[3])&&e[2].length===3&&type_default.isArray(e[4])&&e[3].length===3))throw new Error("JSXGraph: Can't create vector field 3D with parent types '"+typeof e[1]+"', '"+typeof e[2]+"', '"+typeof e[3]+"'.'"+typeof e[4]+"', ");return a=type_default.copyAttributes(r,t.options,"vectorfield3d"),o=s.create("curve3d",[[],[],[]],a),o.setF=function(n,l){var h,d,u;return type_default.isArray(n)?(h=type_default.createFunction(n[0],this.board,l),d=type_default.createFunction(n[1],this.board,l),u=type_default.createFunction(n[2],this.board,l),this.F=function(c,p,f){return[h(c,p,f),d(c,p,f),u(c,p,f)]}):this.F=type_default.createFunction(n,o.board,l),this},o.setF(e[1],"x, y, z"),o.xData=e[2],o.yData=e[3],o.zData=e[4],o.updateDataArray=function(){var n,l,h,d,u,c,p,f,_=this.evalVisProp("scale"),g=[type_default.evaluate(this.xData[0]),type_default.evaluate(this.yData[0]),type_default.evaluate(this.zData[0])],m=[type_default.evaluate(this.xData[1]),type_default.evaluate(this.yData[1]),type_default.evaluate(this.zData[1])],b=[type_default.evaluate(this.xData[2]),type_default.evaluate(this.yData[2]),type_default.evaluate(this.zData[2])],C=[(b[0]-g[0])/m[0],(b[1]-g[1])/m[1],(b[2]-g[2])/m[2]],y,x,v,P,E=this.evalVisProp("arrowhead.enabled"),w,O,S,M,N;for(E&&(w=this.evalVisProp("arrowhead.size"),N=this.evalVisProp("arrowhead.angle"),O=w/t.unitX,S=w/t.unitY,M=w/Math.sqrt(t.unitX*t.unitY)),this.dataX=[],this.dataY=[],this.dataZ=[],l=0,c=g[0];l<=m[0];c+=C[0],l++)for(h=0,p=g[1];h<=m[1];p+=C[1],h++)for(n=0,f=g[2];n<=m[2];f+=C[2],n++)d=this.F(c,p,f),u=math_default.norm(d),!(u<Number.EPSILON)&&(d[0]*=_,d[1]*=_,d[2]*=_,type_default.concat(this.dataX,[c,c+d[0],NaN]),type_default.concat(this.dataY,[p,p+d[1],NaN]),type_default.concat(this.dataZ,[f,f+d[2],NaN]),E&&(u*=_,y=Math.atan2(d[1],d[0]),P=Math.asin(d[2]/u),x=P-N,v=P+N,type_default.concat(this.dataX,[c+d[0]-O*Math.cos(y)*Math.cos(x),c+d[0],c+d[0]-O*Math.cos(y)*Math.cos(v),NaN]),type_default.concat(this.dataY,[p+d[1]-S*Math.sin(y)*Math.cos(x),p+d[1],p+d[1]-S*Math.sin(y)*Math.cos(v),NaN]),type_default.concat(this.dataZ,[f+d[2]-M*Math.sin(v),f+d[2],f+d[2]-M*Math.sin(x),NaN])))},type_default.extendInstanceMethodMap(o,{setF:"setF"}),o};jxg_default.registerElement("vectorfield3D",jxg_default.createVectorfield3D);jxg_default.Line3D=function(t,e,r,s,o){this.constructor(t.board,o,constants.OBJECT_TYPE_LINE3D,constants.OBJECT_CLASS_3D),this.constructor3D(t,"line3d"),this.point=e,this.direction=r,this.vec=[0,0,0,0],this.range=s||[-1/0,1/0],this.point1=null,this.point2=null,this.board.finalizeAdding(this)};jxg_default.Line3D.prototype=new jxg_default.GeometryElement;type_default.copyPrototypeMethods(jxg_default.Line3D,jxg_default.GeometryElement3D,"constructor3D");type_default.copyMethodMap(jxg_default.Line3D,{});jxg_default.extend(jxg_default.Line3D.prototype,{updateCoords:function(){var t,e=0;if(type_default.exists(this.direction.view)&&this.direction.type===constants.OBJECT_TYPE_LINE3D)this.vec=this.direction.vec.slice();else if(type_default.isFunction(this.direction))this.vec=type_default.evaluate(this.direction),this.vec.length===3&&this.vec.unshift(0);else for(this.direction.length===3&&(this.vec[0]=0,e=1),t=0;t<this.direction.length;t++)this.vec[e+t]=type_default.evaluate(this.direction[t]);return this},getPointCoords:function(t){var e=[],r=[],s;return e=this.point.coords,r=this.vec,s=type_default.evaluate(t),t=this.view.intersectionLineCube(e,r,s),Math.abs(t)===1/0&&(t=0),[e[0]+r[0]*t,e[1]+r[1]*t,e[2]+r[2]*t,e[3]+r[3]*t]},addTransform:function(t,e){return this.point.addTransform(t.point,e),this.addTransformGeneric(t,e),this},removeTransform:function(t){return this.point.removeTransform(t),this.removeTransformGeneric(t),this},clearTransforms:function(){return this.point.clearTransformsGeneric(),this.clearTransformsGeneric(),this},updateTransform:function(){var t,e;if(this.transformations.length===0||this.baseElement===null)return this;for(this===this.baseElement?t=this.vec:t=this.baseElement.vec,e=0;e<this.transformations.length;e++)this.transformations[e].update(),t=math_default.matVecMult(this.transformations[e].matrix,t);return this.vec=t,this},update:function(){return this.needsUpdate&&this.updateCoords().updateTransform(),this},setPosition2D:function(t){for(var e=0,r;e<this.parents.length;e++)r=this.view.select(this.parents[e]),r.elType==="point3d"&&r.element2D.draggable()&&t.applyOnce(r.element2D);this.endpoints[0].update(),this.endpoints[1].update()},updateRenderer:function(){return this.needsUpdate=!1,this},projectCoords:function(t,e){var r=this.getPointCoords(0),s=this.getPointCoords(1),o=[s[0]-r[0],s[1]-r[1],s[2]-r[2]],a=[t[0]-r[0],t[1]-r[1],t[2]-r[2]],n=math_default.innerProduct(a,o)/math_default.innerProduct(o,o),l=Math.min(Math.max(n,type_default.evaluate(this.range[0])),type_default.evaluate(this.range[1])),h=this.getPointCoords(l).slice();return e[0]=l,h},projectScreenCoords:function(t){var e=this.range,r=1e5,s,o;return e[0]=e[0]===1/0?r:e[0],e[0]=e[0]===-1/0?-r:e[0],e[1]=e[1]===1/0?r:e[1],e[1]=e[1]===-1/0?-r:e[1],s=this.getPointCoords(e[0]),o=this.getPointCoords(e[1]),this.view.projectScreenToSegment(t,s,o)},updateZIndex:function(){var t=this.endpoints[0],e=this.endpoints[1],r=[1,t.X()+e.X(),t.Y()+e.Y(),t.Z()+e.Z()];return r[1]*=.5,r[2]*=.5,r[3]*=.5,this.zIndex=math_default.innerProduct(this.view.matrix3DRotShift[3],r),this}});jxg_default.createLine3D=function(t,e,r){var s=e[0],o,a,n,l,h,d,u,c,p,f=null,_=null;if(o=type_default.copyAttributes(r,t.options,"line3d"),e[1].type===constants.OBJECT_TYPE_LINE3D&&type_default.isTransformationOrArray(e[2])&&(f=e[1],_=e[2],a=type_default.providePoints3D(s,[[0,0,0,0],[0,0,0,0]],r,"line3d",["point1","point2"])),f===null&&(type_default.isPoint3D(e[2])||e.length===3&&(type_default.isArray(e[2])||type_default.isFunction(e[2]))))d=type_default.providePoints3D(s,[e[1]],r,"line3d",["point1"])[0],u=type_default.providePoints3D(s,[e[2]],r,"line3d",["point2"])[0],l=function(){return[0,u.X()-d.X(),u.Y()-d.Y(),u.Z()-d.Z()]},h=[0,1],p=new jxg_default.Line3D(s,d,l,h,o),p.prepareUpdate().update(),c=type_default.providePoints3D(s,[[1,0,0,0],[1,0,0,0]],{visible:!0},"line3d",["point1","point2"]),c[0].F=function(){var g=0;return p.evalVisProp("straightfirst")&&(g=-1/0),p.getPointCoords(g)},c[1].F=function(){var g=1;return p.evalVisProp("straightlast")&&(g=1/0),p.getPointCoords(g)},c[0].prepareUpdate().update(),c[1].prepareUpdate().update(),o=p.setAttr2D(o),o.straightfirst=!1,o.straightlast=!1,p.element2D=s.create("segment",[c[0].element2D,c[1].element2D],o),p.element2D.view=s,p.element2D.dump=!1,p.endpoints=c,p.addChild(c[0]),p.addChild(c[1]),p.addParents([d,u]);else{if(f!==null)n=type_default.providePoints3D(s,[[0,0,0]],r,"line3d",["point"])[0],l=[0,0,0,1e-4],h=e[3]||[-1/0,1/0];else if(type_default.exists(e[2].view)&&e[2].type===constants.OBJECT_TYPE_LINE3D||type_default.isFunction(e[2])||e[2].length===3||e[2].length===4)n=type_default.providePoints3D(s,[e[1]],r,"line3d",["point"])[0],l=e[2],h=e[3];else throw new Error("JSXGraph: Can't create line3d with parents of type '"+typeof e[1]+", "+typeof e[2]+", "+typeof e[3]+"'.");a=type_default.providePoints3D(s,[[1,0,0,0],[1,0,0,0]],r,"line3d",["point1","point2"]),p=new jxg_default.Line3D(s,n,l,h,o),p.prepareUpdate().update(),a[0].F=function(){return p.getPointCoords(type_default.evaluate(p.range[0]))},a[0].prepareUpdate().update(),d=a[0],a[1].F=function(){return p.getPointCoords(type_default.evaluate(p.range[1]))},a[1].prepareUpdate().update(),u=a[1],o=p.setAttr2D(o),o.straightfirst=!1,o.straightlast=!1,p.element2D=s.create("segment",[d.element2D,u.element2D],o),p.element2D.view=s,p.element2D.dump=!1,p.endpoints=a,p.addParents(n),f!==null&&_!==null&&(p.addTransform(f,_),p.addParents(f))}return p.addChild(p.element2D),p.inherits.push(p.element2D),p.element2D.addParents(p),p.point1=d,p.point2=u,p.point1._is_new?(p.addChild(p.point1),delete p.point1._is_new):p.point1.addChild(p),p.point2._is_new?(p.addChild(p.point2),delete p.point2._is_new):p.point2.addChild(p),type_default.exists(n)&&(n._is_new?(p.addChild(n),delete n._is_new):n.addChild(p)),p.update(),p.element2D.prepareUpdate().update().updateRenderer(),p};jxg_default.registerElement("line3d",jxg_default.createLine3D);jxg_default.Plane3D=function(t,e,r,s,o,a,n){this.constructor(t.board,n,constants.OBJECT_TYPE_PLANE3D,constants.OBJECT_CLASS_3D),this.constructor3D(t,"plane3d"),this.board.finalizeAdding(this),this.point=e,this.direction1=r,this.direction2=o,this.range_u=s||[-1/0,1/0],this.range_v=a||[-1/0,1/0],this.vec1=[0,0,0,0],this.vec2=[0,0,0,0],this.mesh3d=null,this.normal=[0,0,0,0],this.d=0,this.updateCoords(),this.updateNormal()};jxg_default.Plane3D.prototype=new jxg_default.GeometryElement;type_default.copyPrototypeMethods(jxg_default.Plane3D,jxg_default.GeometryElement3D,"constructor3D");type_default.copyMethodMap(jxg_default.Plane3D,{});jxg_default.extend(jxg_default.Plane3D.prototype,{F:function(t,e){var r,s=this.vec1.slice(),o=this.vec2.slice(),a=math_default.norm(s,4),n=math_default.norm(o,4);for(r=1;r<4;r++)s[r]/=a,o[r]/=n;return[1,this.point.X()+t*s[0]+e*o[0],this.point.Y()+t*s[1]+e*o[1],this.point.Z()+t*s[2]+e*o[2]]},X:function(t,e){return this.F(t,e)[1]},Y:function(t,e){return this.F(t,e)[2]},Z:function(t,e){return this.F(t,e)[3]},updateCoords:function(){var t,e;if(type_default.exists(this.direction1.view)&&this.direction1.type===constants.OBJECT_TYPE_LINE3D)this.vec1=this.direction1.vec.slice();else if(type_default.isFunction(this.direction1))this.vec1=type_default.evaluate(this.direction1),this.vec1.length===3&&this.vec1.unshift(0);else for(e=0,this.direction1.length===3&&(this.vec1[0]=0,e=1),t=0;t<this.direction1.length;t++)this.vec1[e+t]=type_default.evaluate(this.direction1[t]);if(type_default.exists(this.direction2.view)&&this.direction2.type===constants.OBJECT_TYPE_LINE3D)this.vec2=this.direction2.vec.slice();else if(type_default.isFunction(this.direction2))this.vec2=type_default.evaluate(this.direction2),this.vec2.length===3&&this.vec2.unshift(0);else for(e=0,this.direction2.length===3&&(this.vec2[0]=0,e=1),t=0;t<this.direction2.length;t++)this.vec2[e+t]=type_default.evaluate(this.direction2[t]);return this},updateNormal:function(){var t,e;if(this.needsUpdate,this.normal=math_default.crossProduct(this.vec1.slice(1),this.vec2.slice(1)),e=math_default.norm(this.normal),Math.abs(e)>math_default.eps*math_default.eps)for(t=0;t<3;t++)this.normal[t]/=e;return this.normal.unshift(0),this.d=math_default.innerProduct(this.point.coords,this.normal,4),this},updateDataArray:function(){var t,e,r,s,o,a,n,l=["xPlaneRear","yPlaneRear","zPlaneRear"],h=[],d=[0,0,0],u=[0,0,0],c=[0,0,0],p=[0,0,0],f=1e-12,_,g,m,b,C,y,x,v,P=this.view;if(this.dataX=[],this.dataY=[],this.updateNormal(),this.elType!=="axisplane3d"&&P.defaultAxes&&type_default.evaluate(this.range_u[0])===-1/0&&type_default.evaluate(this.range_u[1])===1/0&&type_default.evaluate(this.range_v[0])===-1/0&&type_default.evaluate(this.range_v[1])===1/0){for(m=0;m<l.length;m++){if(p=P.intersectionPlanePlane(this,P.defaultAxes[l[m]]),p[0]!==!1&&p[1]!==!1){for(g=0;g<h.length&&!(geometry_default.distance(p[0],h[g][0],4)<f&&geometry_default.distance(p[1],h[g][1],4)<f||geometry_default.distance(p[0],h[g][1],4)<f&&geometry_default.distance(p[1],h[g][0],4)<f);g++);g===h.length&&h.push(p.slice())}if(p=[1,0,0,0],p[m+1]=P.bbox3D[m][1],_=math_default.innerProduct(p,P.defaultAxes[l[m]].normal,4),p=P.intersectionPlanePlane(this,P.defaultAxes[l[m]],_),p[0]!==!1&&p[1]!==!1){for(g=0;g<h.length&&!(geometry_default.distance(p[0],h[g][0],4)<f&&geometry_default.distance(p[1],h[g][1],4)<f||geometry_default.distance(p[0],h[g][1],4)<f&&geometry_default.distance(p[1],h[g][0],4)<f);g++);g===h.length&&h.push(p.slice())}}if(h.length===0)return{X:this.dataX,Y:this.dataY};y=0,x=y,g=0;do{for(p=h[x][g],p.length===4&&(o=P.project3DTo2D(p),this.dataX.push(o[1]),this.dataY.push(o[2])),g=(g+1)%2,p=h[x][g],v=x,m=0;m<h.length;m++){if(m!==x&&geometry_default.distance(p,h[m][0])<f){x=m,g=0;break}if(m!==x&&geometry_default.distance(p,h[m][1])<f){x=m,g=1;break}}if(x===v){console.log("Error plane3d update: did not find next",x);break}}while(x!==y);o=P.project3DTo2D(h[y][0]),this.dataX.push(o[1]),this.dataY.push(o[2])}else{for(t=type_default.evaluate(this.range_u[0]),e=type_default.evaluate(this.range_u[1]),r=type_default.evaluate(this.range_v[0]),s=type_default.evaluate(this.range_v[1]),c=this.point.coords,d=this.vec1.slice(),u=this.vec2.slice(),a=math_default.norm(d,4),n=math_default.norm(u,4),g=1;g<4;g++)d[g]/=a,u[g]/=n;for(m=0;m<4;m++){switch(m){case 0:b=t,C=r;break;case 1:b=e,C=r;break;case 2:b=e,C=s;break;case 3:b=t,C=s}for(g=0;g<4;g++)p[g]=c[g]+b*d[g]+C*u[g];o=P.project3DTo2D(p),this.dataX.push(o[1]),this.dataY.push(o[2])}this.dataX.push(this.dataX[0]),this.dataY.push(this.dataY[0])}return{X:this.dataX,Y:this.dataY}},addTransform:function(t,e){return this.addTransformGeneric(t,e),this.point.addTransform(t.point,e),this},removeTransform:function(t){return this.removeTransformGeneric(t),this.point.removeTransform(t),this},clearTransforms:function(){return this.clearTransformsGeneric(),this.point.clearTransformsGeneric(),this},updateTransform:function(){var t,e,r;if(this.transformations.length===0||this.baseElement===null)return this;for(this===this.baseElement?(t=this.vec1,e=this.vec2):(t=this.baseElement.vec1,e=this.baseElement.vec2),r=0;r<this.transformations.length;r++)this.transformations[r].update(),t=math_default.matVecMult(this.transformations[r].matrix,t),e=math_default.matVecMult(this.transformations[r].matrix,e);return this.vec1=t,this.vec2=e,this},update:function(){return this.needsUpdate&&this.updateCoords().updateTransform(),this},updateRenderer:function(){return this.needsUpdate=!1,this},projectCoords:function(t,e){return geometry_default.projectCoordsToParametric(t,this,2,e)}});jxg_default.createPlane3D=function(t,e,r){var s=e[0],o,a,n,l,h,d,u,c,p,f,_,g,m,b,C,y,x,v,P,E,w,O,S,M=!0,N=null,j=null;if(o=type_default.copyAttributes(r,t.options,"plane3d"),o.threepoints||type_default.isPoint3D(e[2])||type_default.isPoint3D(e[3]))a=type_default.providePoints3D(s,[e[1]],r,"plane3d",["point1"])[0],n=type_default.providePoints3D(s,[e[2]],r,"plane3d",["point2"])[0],l=type_default.providePoints3D(s,[e[3]],r,"plane3d",["point3"])[0],h=function(){return[n.X()-a.X(),n.Y()-a.Y(),n.Z()-a.Z()]},d=function(){return[l.X()-a.X(),l.Y()-a.Y(),l.Z()-a.Z()]},u=e[4]||[-1/0,1/0],c=e[5]||[-1/0,1/0];else{if(e[1].type===constants.OBJECT_TYPE_PLANE3D&&type_default.isTransformationOrArray(e[2])?(N=e[1],j=e[2],a=type_default.providePoints3D(s,[[0,0,0,0]],r,"plane3d",["point"])[0],h=[0,1e-4,0,0],d=[0,0,1e-4,0],u=e[3]||[-1/0,1/0],c=e[4]||[-1/0,1/0]):(a=type_default.providePoints3D(s,[e[1]],r,"plane3d",["point"])[0],h=e[2],d=e[3],u=e[4]||[-1/0,1/0],c=e[5]||[-1/0,1/0]),a===!1)throw new Error("JSXGraph: Can't create plane3d with first parent of type '"+typeof e[1]+`'.
181
+ Possible first parent types are: point3d, array of length 3, function returning an array of length 3.`);if(N!==null&&e<3||N===null&&e.length<4)throw new Error("JSXGraph: Can't create plane3d with parents of type '"+typeof e[1]+", "+typeof e[2]+", "+typeof e[3]+", "+typeof e[4]+", "+typeof e[5]+"'.")}if(p=new jxg_default.Plane3D(s,a,h,u,d,c,o),a.addChild(p),b=p.evalVisProp("type"),C=p.evalVisProp("tiling"),o=p.setAttr2D(o),p.element2D=s.create("curve",[[],[]],o),p.element2D.view=s,p.element2D.dump=!1,N!==null&&j!==null&&(p.addTransform(N,j),p.addParents(N)),p.element2D.updateDataArray=function(){var k=p.updateDataArray();this.dataX=k.X,this.dataY=k.Y},p.addChild(p.element2D),p.inherits.push(p.element2D),p.element2D.setParents(p),Math.abs(p.range_u[0])!==1/0&&Math.abs(p.range_u[1])!==1/0&&Math.abs(p.range_v[0])!==1/0&&Math.abs(p.range_v[1])!==1/0)if(b==="wireframe")o=type_default.copyAttributes(o.mesh3d,t.options,"mesh3d"),f=s.create("mesh3d",[function(){return a.coords},function(){return p.vec1},function(){return p.vec2},p.range_u,p.range_v],o),p.mesh3d=f,p.addChild(f),p.element2D.inherits.push(f),f.setParents(p),p.mesh3d.view=s;else{if(g=p.evalVisProp("stepsu"),m=p.evalVisProp("stepsv"),p.element2D.updateDataArray=function(){},p.F=function(k,B){return[p.point.coords[0]+k*p.vec1[0]+B*p.vec2[0],p.point.coords[1]+k*p.vec1[1]+B*p.vec2[1],p.point.coords[2]+k*p.vec1[2]+B*p.vec2[2],p.point.coords[3]+k*p.vec1[3]+B*p.vec2[3]]},C==="triangle"?_=tiling_default.triangulation(p,p.range_u,p.range_v,g,m):_=tiling_default.rectangulation(p,p.range_u,p.range_v,g,m),b==="colormap"){o.polyhedron.shader.enabled=!1,y=p.evalVisProp("colormap.max"),x=y[0],P=y[1],y=p.evalVisProp("colormap.min"),v=y[0],E=y[1],w=p.evalVisProp("colormap.s"),O=p.evalVisProp("colormap.v");for(S in p.visProp.colormap)if(p.visProp.colormap.hasOwnProperty(S)&&type_default.isFunction(p.visProp.colormap[S])){M=!1;break}o.polyhedron.fillcolorarray=[],o.polyhedron.fillcolor=k=>{var B,I,X=0,J=k.polyhedron,Y=J.faces[k.faceNumber],F=Y.length;if(M||(y=p.evalVisProp("colormap.max"),x=y[0],P=y[1],y=p.evalVisProp("colormap.min"),v=y[0],E=y[1]),F!==0){for(B=0;B<F;B++)X+=J.coords[Y[B]][3];X/=F}return X=E+(X-v)*(P-E)/(x-v),M?I=jxg_default.hsv2hsl(X,w,O):I=jxg_default.hsv2hsl(X,p.evalVisProp("colormap.s"),p.evalVisProp("colormap.v")),`hsl(${X} ${I[1]*100}% ${I[2]*100}%)`}}else b==="shader"?o.polyhedron.shader.enabled=!0:o.polyhedron.shader.enabled=!1;p.polyhedron=s.create("polyhedron3d",_,o.polyhedron),p.addChild(p.polyhedron),p.inherits.push(p.polyhedron),p.polyhedron.setParents(p)}return p.element2D.prepareUpdate().update(),t.isSuspendedUpdate||p.element2D.updateVisibility().updateRenderer(),p};jxg_default.registerElement("plane3d",jxg_default.createPlane3D);jxg_default.createIntersectionLine3D=function(t,e,r){var s=e[0],o=e[1],a=e[2],n,l,h,d=type_default.copyAttributes(r,t.options,"intersectionline3d"),u=[];for(h=geometry_default.intersectionFunction3D(s,o,a),l=0;l<2;l++)u[l]=s.create("point3d",h[l],d["point"+(l+1)]);n=s.create("line3d",u,d);try{o.addChild(n),a.addChild(n)}catch{throw new Error("JSXGraph: Can't create 'intersection' with parent types '"+typeof e[1]+"' and '"+typeof e[2]+"'.")}return n.type=constants.OBJECT_TYPE_INTERSECTION_LINE3D,n.elType="intersectionline3d",n.setParents([o.id,a.id]),n};jxg_default.registerElement("intersectionline3d",jxg_default.createIntersectionLine3D);jxg_default.Text3D=function(t,e,r,s,o){this.constructor(t.board,o,constants.OBJECT_TYPE_TEXT3D,constants.OBJECT_CLASS_3D),this.constructor3D(t,"text3d"),this.board.finalizeAdding(this),this.coords=[0,0,0,0],this.F=e,this.slide=s,this.X=function(){return this.coords[1]},this.Y=function(){return this.coords[2]},this.Z=function(){return this.coords[3]},this.position=[],this._c2d=null};jxg_default.Text3D.prototype=new jxg_default.GeometryElement;type_default.copyPrototypeMethods(jxg_default.Text3D,jxg_default.GeometryElement3D,"constructor3D");type_default.copyMethodMap(jxg_default.Text3D,{});jxg_default.extend(jxg_default.Text3D.prototype,{updateCoords:function(){var t;if(type_default.isFunction(this.F))this.coords=type_default.evaluate(this.F),this.coords.unshift(1);else for(this.coords[0]=1,t=0;t<3;t++)type_default.isFunction(this.F[t])&&(this.coords[t+1]=type_default.evaluate(this.F[t]));return this},initCoords:function(){var t;if(type_default.isFunction(this.F))this.coords=type_default.evaluate(this.F),this.coords.unshift(1);else for(this.coords[0]=1,t=0;t<3;t++)this.coords[t+1]=type_default.evaluate(this.F[t]);return this},normalizeCoords:function(){return Math.abs(this.coords[0])>math_default.eps&&(this.coords[1]/=this.coords[0],this.coords[2]/=this.coords[0],this.coords[3]/=this.coords[0],this.coords[0]=1),this},setPosition:function(t,e){var r=this.coords;return t.length===3?(r[0]=1,r[1]=t[0],r[2]=t[1],r[3]=t[2]):(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=t[3],this.normalizeCoords()),this},update:function(t){var e,r,s;return this.element2D.draggable()&&geometry_default.distance(this._c2d,this.element2D.coords.usrCoords)!==0?(this.view.isVerticalDrag()?e=this.view.project2DTo3DVertical(this.element2D,this.coords):(r=[1,0,0,this.coords[3]],e=this.view.project2DTo3DPlane(this.element2D,[1,0,0,1],r)),e[0]!==0&&(s=this.view.project3DToCube(e),this.coords=s[0],s[1]&&this.element2D.coords.setCoordinates(constants.COORDS_BY_USER,this.view.project3DTo2D(this.coords)),this.slide&&(this.coords=this.slide.projectCoords([this.X(),this.Y(),this.Z()],this.position),this.element2D.coords.setCoordinates(constants.COORDS_BY_USER,this.view.project3DTo2D(this.coords))))):(this.updateCoords(),this.slide&&(this.coords=this.slide.projectCoords([this.X(),this.Y(),this.Z()],this.position)),e=this.coords,this.element2D.coords.setCoordinates(constants.COORDS_BY_USER,this.view.project3DTo2D(e)),this.zIndex=math_default.innerProduct(this.view.matrix3DRotShift[3],e),this.element2D.prepareUpdate().update()),this._c2d=this.element2D.coords.usrCoords.slice(),this},updateRenderer:function(){return this.needsUpdate=!1,this},testIfFinite:function(){return Math.abs(this.coords[0])>math_default.eps},__evt__update3D:function(t){}});jxg_default.createText3D=function(t,e,r){var s=e[0],o,a,n,l,h,d;if(e.length>2&&type_default.exists(e[e.length-1].is3D)?n=e.pop():n=null,e.length===3)a=e[1],l=e[2];else if(e.length===5)a=e.slice(1,4),l=e[4];else throw new Error("JSXGraph: Can't create text3d with parent types '"+typeof e[1]+"' and '"+typeof e[2]+`'.
182
+ Possible parent types: [[x,y,z], text], [x,y,z, text]`);return o=type_default.copyAttributes(r,t.options,"text3d"),d=new jxg_default.Text3D(s,a,l,n,o),d.initCoords(),h=s.project3DTo2D(d.coords),o=d.setAttr2D(o),d.element2D=s.create("text",[h[1],h[2],l],o),d.element2D.view=s,d.element2D.dump=!1,d.addChild(d.element2D),d.inherits.push(d.element2D),d.element2D.setParents(d),d.slide&&(d.slide.addChild(d),d.setParents(d.slide)),d._c2d=d.element2D.coords.usrCoords.slice(),d};jxg_default.registerElement("text3d",jxg_default.createText3D);jxg_default.createTicks3D=function(t,e,r){var s=e[0],o=e[1],a=e[2],n=e[3],l=e[4],h,d=type_default.copyAttributes(r,t.options,"ticks3d");return h=s.create("curve",[[],[]],d),h.point=o,h.direction1=a,h.len=n,h.direction2=l,h.drawLabels=function(u){var c=0,p=this.len,f=this.evalVisProp("ticksdistance"),_=this.evalVisProp("tickendings"),g=this.evalVisProp("majorheight"),m,b,C,y,x,v,P,E=[0,0,0],w=[0,0,0],O=[0,0,0],S=[];if(g/=Math.sqrt(t.unitX*t.unitY),m=g*_[1]*2,this.dataX=[],this.dataY=[],type_default.isFunction(this.point))O=this.point().slice(1);else for(y=0;y<3;y++)O[y]=type_default.evaluate(this.point[y]);for(y=0;y<3;y++)E[y]=type_default.evaluate(this.direction1[y]),w[y]=type_default.evaluate(this.direction2[y]);for(b=jxg_default.Math.norm(E,3),C=jxg_default.Math.norm(w,3),y=0;y<3;y++)E[y]/=b,w[y]/=C;if(!(Math.abs(f)<math_default.eps)){for(x=c;x<=p;x+=f){for(P=[O[0]+x*E[0]+m*w[0],O[1]+x*E[1]+m*w[1],O[2]+x*E[2]+m*w[2]],y=0;y<3;y++)E[y]!==0&&(v=O[y]+x*E[y]);S.push(s.create("text3d",[P,v],u))}return S}},h.evalVisProp("drawlabels")&&(h.labels=h.drawLabels(d.label)),h.updateDataArray=function(){var u=0,c=this.len,p=this.evalVisProp("ticksdistance"),f=this.evalVisProp("tickendings"),_=this.evalVisProp("majorheight"),g,m,b,C,y,x,v,P,E=[0,0,0],w=[0,0,0],O=[0,0,0];if(_/=Math.sqrt(t.unitX*t.unitY),g=_*-f[0],m=_*f[1],this.dataX=[],this.dataY=[],type_default.isFunction(this.point))O=this.point().slice(1);else for(y=0;y<3;y++)O[y]=type_default.evaluate(this.point[y]);for(y=0;y<3;y++)E[y]=type_default.evaluate(this.direction1[y]),w[y]=type_default.evaluate(this.direction2[y]);for(b=jxg_default.Math.norm(E,3),C=jxg_default.Math.norm(w,3),y=0;y<3;y++)E[y]/=b,w[y]/=C;if(!(Math.abs(p)<math_default.eps))for(x=u;x<=c;x+=p)P=[O[0]+x*E[0]+g*w[0],O[1]+x*E[1]+g*w[1],O[2]+x*E[2]+g*w[2]],v=s.project3DTo2D(P),this.dataX.push(v[1]),this.dataY.push(v[2]),P=[O[0]+x*E[0]+m*w[0],O[1]+x*E[1]+m*w[1],O[2]+x*E[2]+m*w[2]],v=s.project3DTo2D(P),this.dataX.push(v[1]),this.dataY.push(v[2]),this.dataX.push(NaN),this.dataY.push(NaN)},h};jxg_default.registerElement("ticks3d",jxg_default.createTicks3D);jxg_default.Polygon3D=function(t,e,r){var s;for(this.constructor(t.board,r,constants.OBJECT_TYPE_POLYGON3D,constants.OBJECT_CLASS_3D),this.constructor3D(t,"polygon3d"),this.board.finalizeAdding(this),this.vertices=[],s=0;s<e.length;s++)this.vertices[s]=this.board.select(e[s]),this.vertices[s]._is_new&&(delete this.vertices[s]._is_new,this.vertices[s]._is_new_pol=!0)};jxg_default.Polygon3D.prototype=new jxg_default.GeometryElement;type_default.copyPrototypeMethods(jxg_default.Polygon3D,jxg_default.GeometryElement3D,"constructor3D");jxg_default.extend(jxg_default.Polygon3D.prototype,{update:function(){return this},updateRenderer:function(){return this.needsUpdate=!1,this},updateZIndex:function(){var t,e=this.vertices.length,r=[1,0,0,0];if(e<=0)return[NaN,NaN,NaN,NaN];for(t=0;t<e;t++)r[1]+=this.vertices[t].coords[1],r[2]+=this.vertices[t].coords[2],r[3]+=this.vertices[t].coords[3];return r[1]/=e,r[2]/=e,r[3]/=e,this.zIndex=math_default.innerProduct(this.view.matrix3DRotShift[3],r),this}});jxg_default.createPolygon3D=function(t,e,r){var s=e[0],o,a,n,l,h=[],d=[],u,c,p=!1;if(u=type_default.copyAttributes(r,t.options,"polygon3d"),l=t.select(e[1]),l===null&&(l=e[1]),type_default.isObject(l)&&l.type===constants.OBJECT_TYPE_POLYGON3D&&type_default.isTransformationOrArray(e[2]))for(p=!0,n=l.vertices.length-1,c=type_default.copyAttributes(r,t.options,"polygon3d","vertices"),a=0;a<n;a++)c.withlabel&&(c.name=l.vertices[a].name===""?"":l.vertices[a].name+"'"),h.push(t.create("point3d",[l.vertices[a],e[2]],c));else if(type_default.isArray(e[1])&&e[1].every(f=>type_default.isPoint3D(f)))h=e[1];else if(h=type_default.providePoints3D(s,e.slice(1),r,"polygon3d",["vertices"]),h===!1)throw new Error("JSXGraph: Can't create polygon3d with parent types other than 'point' and 'coordinate arrays' or a function returning an array of coordinates. Alternatively, a polygon3d and a transformation can be supplied");for(o=new jxg_default.Polygon3D(s,h,u),o.isDraggable=!0,u=o.setAttr2D(u),a=0;a<h.length;a++)d.push(h[a].element2D);if(o.element2D=t.create("polygon",d,u),o.element2D.view=s,o.element2D.dump=!1,o.addChild(o.element2D),o.inherits.push(o.element2D),o.element2D.setParents(o),p)for(o.prepareUpdate().update().updateVisibility().updateRenderer(),n=l.vertices.length-1,a=0;a<n;a++)h[a].prepareUpdate().update().updateVisibility().updateRenderer();return o};jxg_default.registerElement("polygon3d",jxg_default.createPolygon3D);jxg_default.Face3D=function(t,e,r,s){this.constructor(t.board,s,constants.OBJECT_TYPE_FACE3D,constants.OBJECT_CLASS_3D),this.constructor3D(t,"face3d"),this.board.finalizeAdding(this),this.polyhedron=e,this.faceNumber=r,this.normal=[0,0,0,0],this.d=0,this.vec1=[0,0,0,0],this.vec2=[0,0,0,0],this.faceNumber===0&&this.updateCoords()};jxg_default.Face3D.prototype=new jxg_default.GeometryElement;type_default.copyPrototypeMethods(jxg_default.Face3D,jxg_default.GeometryElement3D,"constructor3D");type_default.copyMethodMap(jxg_default.Face3D,{});jxg_default.extend(jxg_default.Face3D.prototype,{updateCoords:function(){var t,e,r,s,o=this.polyhedron;for(t in o.vertices){if(s=o.vertices[t],type_default.isFunction(s))o.coords[t]=type_default.evaluate(s);else if(type_default.isArray(s))for(o.coords[t]=[],r=s.length,e=0;e<r;e++)o.coords[t][e]=type_default.evaluate(s[e]);else if(s=o.view.select(s),type_default.isPoint3D(s))o.coords[t]=s.coords;else throw new Error("Polyhedron3D.updateCoords: unknown vertices type!");o.coords[t].length===3&&o.coords[t].unshift(1)}return this},updateDataArray2D:function(){var t,e,r,s,o=[],a=[],n=this.polyhedron,l=n.faces[this.faceNumber];if(this.faceNumber===0)for(t in n.vertices)n.coords2D[t]=[];for(e=l.length,this.zIndex=0,t=0;t<e;t++)s=n.coords2D[l[t]],s.length===0&&(r=n.coords[l[t]],s=this.view.project3DTo2D(r),n.coords2D[l[t]]=s,n.zIndex[l[t]]=math_default.innerProduct(this.view.matrix3DRotShift[3],r)),o.push(s[1]),a.push(s[2]),this.zIndex+=n.zIndex[l[t]];return e>0&&(this.zIndex/=e),e!==2&&(o.push(o[0]),a.push(a[0])),{X:o,Y:a}},addTransform:function(t,e){return this.faceNumber===0&&this.addTransformGeneric(t,e),this},removeTransform:function(t){return this.faceNumber===0&&this.removeTransformGeneric(t),this},clearTransforms:function(){return this.faceNumber===0&&this.clearTransformsGeneric(),this},updateTransform:function(){var t,e,r,s,o;if(this.faceNumber!==0)return this;if(this.transformations.length===0||this.baseElement===null)return this;for(t=this.transformations,r=0;r<t.length;r++)t[r].update();this===this.baseElement?o=this.polyhedron:o=this.baseElement.polyhedron;for(r in o.coords)if(o.coords.hasOwnProperty(r)){for(e=o.coords[r],s=0;s<t.length;s++)e=math_default.matVecMult(t[s].matrix,e);this.polyhedron.coords[r]=e}return this},update:function(){var t,e,r,s,o,a,n;if(this.needsUpdate&&!this.view.board._change3DView){if(r=this.polyhedron,this.faceNumber===0&&this.updateCoords().updateTransform(),n=r.faces[this.faceNumber],e=n.length,e<3)return this;if(o=r.coords[n[0]],a=r.coords[n[1]],this.vec1=[a[0]-o[0],a[1]-o[1],a[2]-o[2],a[3]-o[3]],a=r.coords[n[2]],this.vec2=[a[0]-o[0],a[1]-o[1],a[2]-o[2],a[3]-o[3]],this.normal=math_default.crossProduct(this.vec1.slice(1),this.vec2.slice(1)),s=math_default.norm(this.normal),this.normal.unshift(0),Math.abs(s)>1e-12)for(t=1;t<4;t++)this.normal[t]/=s;this.d=math_default.innerProduct(o,this.normal,4)}return this},updateRenderer:function(){return this.needsUpdate&&(this.needsUpdate=!1),this},getRotationFromAngles:function(t){var e,r,s,o,a,n,l=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];return e=t.az,r=t.el,s=t.bank,o=-Math.sin(r),l[1][1]=-Math.cos(e),l[1][2]=Math.sin(e),l[1][3]=0,l[2][1]=o*Math.sin(e),l[2][2]=o*Math.cos(e),l[2][3]=Math.cos(r),l[3][1]=Math.cos(r)*Math.sin(e),l[3][2]=Math.cos(r)*Math.cos(e),l[3][3]=Math.sin(r),a=Math.cos(s),n=Math.sin(s),l=math_default.matMatMult([[1,0,0,0],[0,a,n,0],[0,-n,a,0],[0,0,0,1]],l),l},shader:function(){var t,e,r,s,o,a,n,l,h,d,u,c,p;if(this.evalVisProp("shader.enabled")){if(t=this.evalVisProp("shader.hue"),e=this.evalVisProp("shader.saturation"),c=this.evalVisProp("shader.minlightness"),p=this.evalVisProp("shader.maxlightness"),this.evalVisProp("shader.type").toLowerCase()==="angle"){switch(h=this.evalVisProp("shader.light"),h.type){case 2:n={az:h.az*Math.PI/180,el:h.el*Math.PI/180,bank:h.bank*Math.PI/180},a=this.getRotationFromAngles(n)[3],l=h.dir;break;case 3:n={az:this.view.angles.az+h.az*Math.PI/180,el:this.view.angles.el+h.el*Math.PI/180,bank:this.view.angles.bank},a=this.getRotationFromAngles(n)[3],l=h.dir;break;default:a=this.view.matrix3DRotShift[3],l=h.dir}s=math_default.innerProduct(a,this.normal),s=l===0?Math.abs(s):l<0?-s:s,r=c+(p-c)*s}else u=this.view.zIndexMax,d=this.view.zIndexMin,r=c+(p-c)*((this.zIndex-d)/(u-d));return o="hsl("+t+","+e+"%,"+r+"%)",this.element2D.visProp.fillcolor=o,this._shadingDone=!0,this.zIndex}}});jxg_default.createFace3D=function(t,e,r){var s=e[0],o=e[1],a=e[2],n=type_default.copyAttributes(r,t.options,"face3d"),l=new jxg_default.Face3D(s,o,a,n);return n=l.setAttr2D(n),l.element2D=s.create("curve",[[],[]],n),l.element2D.view=s,l.element2D.dump=!1,l.element2D.updateDataArray=function(){var h=l.updateDataArray2D();this.dataX=h.X,this.dataY=h.Y},l.element2D.hasPoint=function(){},l.addChild(l.element2D),l.inherits.push(l.element2D),l.element2D.setParents(l),l.element2D.prepareUpdate().update(),t.isSuspendedUpdate||l.element2D.updateVisibility().updateRenderer(),l};jxg_default.registerElement("face3d",jxg_default.createFace3D);jxg_default.Polyhedron3D=function(t,e,r,s){var o,a,n,l=this;for(this.constructor(t.board,s,constants.OBJECT_TYPE_POLYHEDRON3D,constants.OBJECT_CLASS_3D),this.constructor3D(t,"polyhedron3d"),this.board.finalizeAdding(this),this.elType="polyhedron3d",this.faces=r,this.numberFaces=r.length,this.def=e,a=["setAttribute","setParents","prepareUpdate","updateRenderer","update","fullUpdate","highlight","noHighlight"],n=function(h){return function(){var d;for(d in l.faces)l.faces.hasOwnProperty(d)&&type_default.exists(l.faces[d][h])&&l.faces[d][h].apply(l.faces[d],arguments);return l}},o=0;o<a.length;o++)this[a[o]]=n(a[o])};jxg_default.Polyhedron3D.prototype=new jxg_default.GeometryElement;type_default.copyPrototypeMethods(jxg_default.Polyhedron3D,jxg_default.GeometryElement3D,"constructor3D");type_default.copyMethodMap(jxg_default.Polyhedron3D,{setAttribute:"setAttribute",setParents:"setParents",addTransform:"addTransform",removeTransform:"removeTransform",clearTransforms:"clearTransforms"});jxg_default.extend(jxg_default.Polyhedron3D.prototype,{addTransform:function(t,e){if(this.faces.length>0&&t.faces.length>0)this.faces[0].addTransform(t.faces[0],e);else throw new Error("Adding transformation failed. At least one of the two polyhedra has no faces.");return this},removeTransform:function(t){if(this.faces.length>0)this.faces[0].removeTransform(t);else throw new Error("Removing transformation failed. The polyhedron has no faces.");return this},clearTransforms:function(){if(this.faces.length>0)this.faces[0].clearTransforms();else throw new Error("Removing transformation failed. The polyhedron has no faces.");return this},toSTL:function(t){var e,r,s,o,a,n,l="solid ";for(t===void 0&&(t=this.name),l+=t+`
183
+ `,e=0;e<this.def.faces.length;e++){for(l+=` facet normal 0 0 0
184
+ outer loop
185
+ `,o=this.def.faces[e],n=o.length,s=this.def.coords,r=0;r<n;r++)a=s[o[r]],l+=" vertex "+a[1]+" "+a[2]+" "+a[3]+`
186
+ `;l+=` endloop
187
+ endfacet
188
+ `}return l+="endsolid "+t+`
189
+ `,l}});jxg_default.createPolyhedron3D=function(t,e,r){var s=e[0],o,a,n,l,h,d,u,c=[],p=null,f=null,_={view:s,vertices:{},coords:{},coords2D:{},zIndex:{},faces:[]};if(type_default.exists(e[1].type)&&e[1].type===constants.OBJECT_TYPE_POLYHEDRON3D)p=e[1],f=e[2],_.vertices=p.def.vertices,_.faces=p.def.faces;else{if(type_default.isArray(e[1]))for(a=e[1].length,o=0;o<a;o++)_.vertices[o]=e[1][o];else if(type_default.isObject(e[1]))for(o in e[1])e[1].hasOwnProperty(o)&&(_.vertices[o]=e[1][o]);_.faces=e[2]}for(u=type_default.copyAttributes(r,t.options,"polyhedron3d"),console.time("polyhedron"),s.board.suspendUpdate(),a=_.faces.length,o=0;o<a;o++)d=type_default.copyAttributes(r,t.options,"face3d"),u.fillcolorarray.length>0&&(d.fillcolor=u.fillcolorarray[o%u.fillcolorarray.length]),l=_.faces[o],type_default.isArray(l)&&l.length===2&&type_default.isObject(l[1])&&type_default.isArray(l[0])&&(type_default.mergeAttr(d,l[1]),_.faces[o]=l[0]),n=s.create("face3d",[_,o],d),c.push(n);for(h=new jxg_default.Polyhedron3D(s,_,c,u),h.setParents(h),o=0;o<a;o++)h.inherits.push(h.faces[o]);return p!==null&&(h.addTransform(p,f),h.addParents(p)),s.board.unsuspendUpdate(),console.timeEnd("polyhedron"),h};jxg_default.registerElement("polyhedron3d",jxg_default.createPolyhedron3D);jxg_default.Sphere3D=function(t,e,r,s,o){this.constructor(t.board,o,constants.OBJECT_TYPE_SPHERE3D,constants.OBJECT_CLASS_3D),this.constructor3D(t,"sphere3d"),this.board.finalizeAdding(this),this.method=e,this.center=this.board.select(r),this.point2=null,this.points=[],this.element2D=null,this.aux2D=[],this.projectionType=t.projectionType,e==="twoPoints"?(this.point2=this.board.select(s),this.radius=this.Radius()):e==="pointRadius"&&(this.updateRadius=type_default.createFunction(s,this.board),this.updateRadius(),this.addParentsFromJCFunctions([this.updateRadius])),type_default.exists(this.center._is_new)?(this.addChild(this.center),delete this.center._is_new):this.center.addChild(this),e==="twoPoints"&&(type_default.exists(this.point2._is_new)?(this.addChild(this.point2),delete this.point2._is_new):this.point2.addChild(this))};jxg_default.Sphere3D.prototype=new jxg_default.GeometryElement;type_default.copyPrototypeMethods(jxg_default.Sphere3D,jxg_default.GeometryElement3D,"constructor3D");type_default.copyMethodMap(jxg_default.Sphere3D,{center:"center",point2:"point2",Radius:"Radius"});jxg_default.extend(jxg_default.Sphere3D.prototype,{X:function(t,e){return this.Radius()*Math.sin(t)*Math.cos(e)},Y:function(t,e){return this.Radius()*Math.sin(t)*Math.sin(e)},Z:function(t,e){return this.Radius()*Math.cos(t)},range_u:[0,2*Math.PI],range_v:[0,Math.PI],update:function(){return this.projectionType!==this.view.projectionType&&this.rebuildProjection(),this},updateRenderer:function(){return this.needsUpdate=!1,this},setRadius:function(t){return this.updateRadius=type_default.createFunction(t,this.board),this.addParentsFromJCFunctions([this.updateRadius]),this.board.update(),this},Radius:function(t){return type_default.exists(t)?(this.setRadius(t),this.Radius()):this.method==="twoPoints"?!this.center.testIfFinite()||!this.point2.testIfFinite()?NaN:this.center.distance(this.point2):this.method==="pointRadius"?Math.abs(this.updateRadius()):NaN},focusFn:function(t){var e=this;return function(){var r=e.view.boxToCam[3],s=e.Radius();return e.view.project3DTo2D([e.center.X()+t*s*r[1],e.center.Y()+t*s*r[2],e.center.Z()+t*s*r[3]]).slice(1,3)}},innerVertexFn:function(){var t=this;return function(){var e=t.view,r=e.worldToFocal(t.center.coords,!1),s=math_default.hypot(r[0],r[1]),o=e.boxToCam,a=t.Radius(),n=Math.atan(-s/r[2])+Math.acos(a/math_default.norm(r)),l=Math.cos(n),h=Math.sin(n),d;return s>1e-8?d=[-(r[0]*o[1][1]+r[1]*o[2][1])/s,-(r[0]*o[1][2]+r[1]*o[2][2])/s,-(r[0]*o[1][3]+r[1]*o[2][3])/s]:d=[o[1][1],o[1][2],o[1][3]],e.project3DTo2D([t.center.X()+a*(h*d[0]+l*o[3][1]),t.center.Y()+a*(h*d[1]+l*o[3][2]),t.center.Z()+a*(h*d[2]+l*o[3][3])])}},buildCentralProjection:function(t){var e=this.view,r={visible:!1,withLabel:!1},s=e.create("point",this.focusFn(-1),r),o=e.create("point",this.focusFn(1),r),a=e.create("point",this.innerVertexFn(e),r);this.aux2D=[s,o,a],this.element2D=e.create("ellipse",this.aux2D,t===void 0?this.visProp:t)},buildParallelProjection:function(t){var e=this,r=function(){var s=e.view.bbox3D[0][1]-e.view.bbox3D[0][0];return e.Radius()*e.view.size[0]/s};this.aux2D=[],this.element2D=this.view.create("circle",[e.center.element2D,r],t===void 0?this.visProp:t)},rebuildProjection:function(t){var e;if(this.element2D){this.view.board.removeObject(this.element2D);for(e in this.aux2D)this.aux2D.hasOwnProperty(e)&&this.view.board.removeObject(this.aux2D[e])}this.projectionType=this.view.projectionType,this.projectionType==="central"?this.buildCentralProjection(t):this.buildParallelProjection(t),this.addChild(this.element2D),this.inherits.push(this.element2D),this.element2D.view=this.view,this.element2D.dump=!1},projectCoords:function(t,e){var r=this.Radius(),s=[1].concat(t),o=this.center.coords,a=geometry_default.distance(o,s,4),n=statistics_default.subtract(s,o);return a===0?(e[0]=0,e[1]=0,[1,r,0,0]):r===0?(e[0]=0,e[1]=0,this.center.coords):(a=r/a,n[0]=1,n[1]*=a,n[2]*=a,n[3]*=a,e[1]=Math.atan2(n[2],n[1]),e[1]+=e[1]<0?Math.PI:0,e[1]!==0?e[0]=Math.atan2(n[2],n[3]*Math.sin(e[1])):e[0]=Math.atan2(n[1],n[3]*Math.cos(e[1])),e[0]+=e[0]<0?2*Math.PI:0,n)}});jxg_default.createSphere3D=function(t,e,r){for(var s=e[0],o=type_default.copyAttributes(r,t.options,"sphere3d"),a=[],n,l,h,d=1;d<e.length;d++)if(type_default.isPointType3D(t,e[d])){if(a.length===0?n="center":n="point",l=type_default.providePoints3D(s,[e[d]],r,"sphere3d",[n])[0],l===!1)throw new Error("JSXGraph: Can't create sphere3d from this type. Please provide a point type.");a.push(l)}else a.push(e[d]);if(type_default.isPoint3D(a[0])&&type_default.isPoint3D(a[1]))h=new jxg_default.Sphere3D(s,"twoPoints",a[0],a[1],o);else if(type_default.isPoint3D(a[0])&&(type_default.isNumber(a[1])||type_default.isFunction(a[1])||type_default.isString(a[1])))h=new jxg_default.Sphere3D(s,"pointRadius",a[0],a[1],o);else throw new Error("JSXGraph: Can't create sphere3d with parent types '"+typeof e[1]+"' and '"+typeof e[2]+`'.
190
+ Possible parent types: [point,point], [point,number], [point,function]`);return o=h.setAttr2D(o),h.rebuildProjection(o),h.element2D.prepareUpdate().update(),t.isSuspendedUpdate||h.element2D.updateVisibility().updateRenderer(),h};jxg_default.registerElement("sphere3d",jxg_default.createSphere3D);jxg_default.Surface3D=function(t,e,r,s,o,a,n,l){this.constructor(t.board,l,constants.OBJECT_TYPE_SURFACE3D,constants.OBJECT_CLASS_3D),this.constructor3D(t,"surface3d"),this.board.finalizeAdding(this),this._F=e,this._X=r,this._Y=s,this._Z=o,this._F!==null?(this._X=function(h,d){return this._F(h,d)[0]},this._Y=function(h,d){return this._F(h,d)[1]},this._Z=function(h,d){return this._F(h,d)[2]}):this._X!==null&&(this._F=function(h,d){return[this._X(h,d),this._Y(h,d),this._Z(h,d)]}),this.polyhedron=null,this.range_u=a,this.range_v=n,this.dataX=null,this.dataY=null,this.dataZ=null,this.points=[]};jxg_default.Surface3D.prototype=new jxg_default.GeometryElement;type_default.copyPrototypeMethods(jxg_default.Surface3D,jxg_default.GeometryElement3D,"constructor3D");type_default.copyMethodMap(jxg_default.Surface3D,{});jxg_default.extend(jxg_default.Surface3D.prototype,{updateWireframe:function(){var t,e,r,s,o,a,n,l,h,d,u,c,p,f,_=[1,0,0,0];if(this.evalVisProp("type")!=="wireframe")return this;for(this.points=[],t=Math.max(this.evalVisProp("stepsu"),1),e=Math.max(this.evalVisProp("stepsv"),1),o=type_default.evaluate(this.range_u),a=type_default.evaluate(this.range_v),n=type_default.evaluate(o[0]),l=type_default.evaluate(a[0]),h=type_default.evaluate(o[1]),d=type_default.evaluate(a[1]),u=(h-n)/t,c=(d-l)/e,r=0,p=n;r<=t;r++,p+=u)for(this.points.push([]),s=0,f=l;s<=e;s++,f+=c)_=this.F(p,f),this.points[r].push(_);return this},updateCoords:function(){return this._F!==null?this.updateWireframe():this.updateTransform(),this},evalF:function(t,e){var r,s,o=[0,0,0,0];if(this.transformations.length===0||!type_default.exists(this.baseElement))return o=this._F(t,e),o.unshift(1),o;for(r=this.transformations,s=0;s<r.length;s++)r[s].update();for(this===this.baseElement?(o=this._F(t,e),o.unshift(1)):o=this.baseElement.evalF(t,e),o=math_default.matVecMult(r[0].matrix,o),s=1;s<r.length;s++)o=math_default.matVecMult(r[s].matrix,o);return o},F:function(t,e){return this.evalF(t,e)},X:function(t,e){return this.evalF(t,e)[1]},Y:function(t,e){return this.evalF(t,e)[2]},Z:function(t,e){return this.evalF(t,e)[3]},updateDataArray2D:function(){var t,e,r,s,o=[],a=[],n,l=this.evalVisProp("stepsu"),h=this.evalVisProp("stepsv");if(r=this.points.length,r!==0){for(s=this.points[0].length,t=0;t<r;t++){if(l>0)for(e=0;e<s;e++)n=this.view.project3DTo2D(this.points[t][e]),o.push(n[1]),a.push(n[2]);o.push(NaN),a.push(NaN)}for(e=0;e<s;e++){if(h>0)for(t=0;t<r;t++)n=this.view.project3DTo2D(this.points[t][e]),o.push(n[1]),a.push(n[2]);o.push(NaN),a.push(NaN)}}return{X:o,Y:a}},addTransform:function(t,e){return this.addTransformGeneric(t,e),this},removeTransform:function(t){return this.removeTransformGeneric(t),this},clearTransforms:function(){return this.clearTransformsGeneric(),this},updateTransform:function(){var t,e,r,s,o,a,n;if(this.transformations.length===0||this.baseElement===null||type_default.exists(this._F))return this;for(t=this.transformations,r=0;r<t.length;r++)t[r].update();if(this!==this.baseElement&&(this.points=[]),a=this.baseElement.points.length,a>0)for(n=this.baseElement.points[0].length,r=0;r<a;r++)for(this!==this.baseElement&&this.points.push([]),s=0;s<n;s++){for(this===this.baseElement?e=this.points[r][s]:e=this.baseElement.points[r][s],o=0;o<t.length;o++)e=math_default.matVecMult(t[o].matrix,e);this===this.baseElement?this.points[r][s]=e:this.points[r].push(e)}return this},updateDataArray:function(){},update:function(){return this.needsUpdate&&(this.updateDataArray(),this.updateCoords()),this},updateRenderer:function(){return this.needsUpdate=!1,this},projectCoords:function(t,e){return geometry_default.projectCoordsToParametric(t,this,2,e)}});jxg_default.createParametricSurface3D=function(t,e,r){var s=e[0],o,a,n,l,h,d,u,c,p=null,f=null,_,g,m,b,C,y,x,v,P,E,w,O,S;if(e.length===3?(p=e[1],f=e[2],o=null,a=null,n=null,l=null):e.length===4?(o=e[1],h=e[2],d=e[3],a=null,n=null,l=null):(a=e[1],n=e[2],l=e[3],h=e[4],d=e[5],o=null),u=type_default.copyAttributes(r,t.options,"surface3d"),S=new jxg_default.Surface3D(s,o,a,n,l,h,d,u),g=S.evalVisProp("tiling"),m=S.evalVisProp("type"),c=S.setAttr2D(u),S.element2D=s.create("curve",[[],[]],c),S.element2D.view=s,S.element2D.dump=!1,p!==null&&(S.addTransform(p,f),S.addParents(p)),S.element2D.updateDataArray=function(){var M=S.updateDataArray2D();this.dataX=M.X,this.dataY=M.Y},S.addChild(S.element2D),S.inherits.push(S.element2D),S.element2D.setParents(S),m!=="wireframe"){if((g==="triangle"||g==="rectangle")&&(g==="triangle"?_=tiling_default.triangulation(S,S.range_u,S.range_v,S.evalVisProp("stepsu"),S.evalVisProp("stepsv")):g==="rectangle"&&(_=tiling_default.rectangulation(S,S.range_u,S.range_v,S.evalVisProp("stepsu"),S.evalVisProp("stepsv")))),S.element2D.setAttribute({visible:!1}),S.element2D.updateDataArray=function(){},m==="colormap"){u.polyhedron.shader.enabled=!1,b=S.evalVisProp("colormap.max"),C=b[0],x=b[1],b=S.evalVisProp("colormap.min"),y=b[0],v=b[1],P=S.evalVisProp("colormap.s"),E=S.evalVisProp("colormap.v"),w=!0;for(O in S.visProp.colormap)if(S.visProp.colormap.hasOwnProperty(O)&&type_default.isFunction(S.visProp.colormap[O])){w=!1;break}u.polyhedron.fillcolorarray=[],u.polyhedron.fillcolor=M=>{var N,j,k=0,B=M.polyhedron,I=B.faces[M.faceNumber],X=I.length;if(w||(b=S.evalVisProp("colormap.max"),C=b[0],x=b[1],b=S.evalVisProp("colormap.min"),y=b[0],v=b[1]),X!==0){for(N=0;N<X;N++)k+=B.coords[I[N]][3];k/=X}return k=v+(k-y)*(x-v)/(C-y),w?j=jxg_default.hsv2hsl(k,P,E):j=jxg_default.hsv2hsl(k,S.evalVisProp("colormap.s"),S.evalVisProp("colormap.v")),`hsl(${k} ${j[1]*100}% ${j[2]*100}%)`}}else m==="shader"?u.polyhedron.shader.enabled=!0:u.polyhedron.shader.enabled=!1;S.polyhedron=s.create("polyhedron3d",_,u.polyhedron),S.addChild(S.polyhedron),S.inherits.push(S.polyhedron),S.polyhedron.setParents(S)}return S.element2D.prepareUpdate().update(),t.isSuspendedUpdate||S.element2D.updateVisibility().updateRenderer(),S};jxg_default.registerElement("parametricsurface3d",jxg_default.createParametricSurface3D);jxg_default.createFunctiongraph3D=function(t,e,r){var s=e[0],o=function(u,c){return u},a=function(u,c){return c},n=type_default.createFunction(e[1],t,"x, y"),l=e[2],h=e[3],d=s.create("parametricsurface3d",[o,a,n,l,h],r);return d.elType="functiongraph3d",d};jxg_default.registerElement("functiongraph3d",jxg_default.createFunctiongraph3D);jxg_default.Parse3D={STL:function(t){var e,r,s,o,a,n,l,h,d,u=[],c=[],p=[];for(n=t.split(`
191
+ `),o=n.length,e=0;e<o;e++)if(a=n[e].trim(),a.indexOf("solid")===0)h=-1,c=[],p=[];else if(a.indexOf("endsolid")===0)u.push([c.slice(),p.slice()]);else if(a.indexOf("facet")===0)h++,p.push([]);else{if(a.indexOf("outer loop")===0||a.indexOf("endloop")===0)continue;if(a.indexOf("vertex")===0){for(l=a.split(" ").slice(1).map(f=>parseFloat(f)),d=!1,r=0;r<c.length;r++)if(jxg_default.Math.Geometry.distance(c[r],l,3)<jxg_default.Math.eps){d=!0,s=r;break}d===!1&&(s=c.length,c.push(l)),p[h].push(s)}}return u}};var _3dmodels_default=jxg_default.Parse3D,size=.75,color="#000";jxg_default.themes.mono_thin={board:{showInfobox:!1,showCopyright:!0,defaultAxes:{x:{ticks:{minorTicks:0,majorHeight:10,majorTickEndings:[1,0]}},y:{ticks:{minorTicks:0,majorHeight:10,majorTickEndings:[0,1]}}}},navbar:{strokeColor:"#bbb",fillColor:"none"},elements:{strokeColor:color,highlightStrokeColor:color,fillColor:"none",highlightFillColor:"none",strokeOpacity:.6,highlightStrokeOpacity:1},angle:{strokeColor:color,fillColor:"#aaaaaa55",fillOpacity:.3,highlightFillColor:"#aaaaaa33",highlightFillOpacity:.3,label:{strokeColor:color}},arc:{strokeColor:color,strokeWidth:size,highlightStrokeColor:color,highlightStrokeWidth:size},axis:{},boxplot:{strokeWidth:size,strokeColor:color,fillColor:color,fillOpacity:.2,highlightStrokeWidth:size,highlightStrokeColor:color,highlightFillColor:color,highlightFillOpacity:.1},circle:{strokeWidth:size,highlightStrokeWidth:1.5*size,strokeColor:color,highlightFillColor:"none",highlightStrokeColor:color,center:{size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color},point2:{size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color}},circumcircle:{strokeWidth:size,highlightStrokeWidth:1.5*size,strokeColor:color,highlightFillColor:"none",highlightStrokeColor:color,center:{size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color}},circumcirclearc:{strokeColor:color,strokeWidth:size,highlightStrokeColor:color,highlightStrokeWidth:size},circumcirclesector:{strokeColor:color,fillColor:"#aaaaaa55",fillOpacity:.3,highlightFillColor:"#aaaaaa33",highlightFillOpacity:.3},comb:{strokeColor:color,strokeWidth:size},conic:{strokeWidth:size,highlightStrokeWidth:1.5*size,strokeColor:color,highlightStrokeColor:color,fillColor:"none",highlightFillColor:"none"},curve:{strokeColor:color,strokeWidth:size,highlightStrokeColor:color,highlightStrokeWidth:size},grid:{strokeWidth:size},hatch:{strokeColor:color,strokeWidth:size},incircle:{strokeWidth:size,highlightStrokeWidth:1.5*size,strokeColor:color,highlightFillColor:"none",highlightStrokeColor:color,center:{size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color}},inequality:{fillColor:"#aaaaaa55",fillOpacity:.2},integral:{fillColor:"#aaaaaa55",highlightFillColor:"#aaaaa33",fillOpacity:.3,highlightFillOpacity:.3,curveLeft:{color},baseLeft:{color},curveRight:{color},baseRight:{color}},label:{strokeColor:color},line:{strokeColor:color,strokeWidth:size,highlightStrokeColor:color,highlightStrokeWidth:size,point1:{size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color},point2:{size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color}},normal:{strokeColor:color},parallel:{strokeColor:color},perpendicular:{strokeColor:color},perpendicularsegment:{strokeColor:color},point:{size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color},polygon:{fillColor:"#aaaaaa55",highlightFillColor:"#aaaaaa33",fillOpacity:.3,highlightFillOpacity:.3,vertices:{size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color},borders:{strokeColor:color,strokeWidth:size,highlightStrokeColor:color,highlightStrokeWidth:size}},sector:{strokeColor:color,fillColor:"#aaaaaa55",fillOpacity:.3,highlightFillColor:"#aaaaaa33",highlightFillOpacity:.3},semicircle:{center:{size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color}},slider:{size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color,baseline:{strokeWidth:size,strokeColor:color,highlightStrokeColor:color},label:{strokeColor:color},highline:{strokeWidth:3*size,name:"",strokeColor:color,highlightStrokeColor:color},ticks:{strokeColor:color}},slopefield:{strokeWidth:.75*size,highlightStrokeWidth:size,highlightStrokeColor:color,highlightStrokeOpacity:.8},tapemeasure:{strokeColor:color,strokeWidth:size,highlightStrokeColor:color,highlightStrokeWidth:size,point1:{size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color},point2:{size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color},ticks:{strokeWidth:size}},text:{strokeColor:color},tracecurve:{strokeColor:color},turtle:{strokeWidth:size,strokeColor:color,arrow:{strokeWidth:2*size,strokeColor:"#aaaaaa55"}},vectorfield:{strokeWidth:.75*size,highlightStrokeWidth:size,highlightStrokeColor:color,highlightStrokeOpacity:.8}};var COORDS_BY_SCREEN=jxg_default.COORDS_BY_SCREEN,COORDS_BY_USER=jxg_default.COORDS_BY_USER,Dump=jxg_default.Dump,Expect=jxg_default.Expect,JSXGraph=jxg_default.JSXGraph,Mat=jxg_default.Math,Options=jxg_default.Options,boards=jxg_default.boards,elements=jxg_default.elements,palette=jxg_default.palette,paletteWong=jxg_default.paletteWong,Board=jxg_default.Board,Chart=jxg_default.Chart,Circle=jxg_default.Circle,Complex=jxg_default.Complex,Composition=jxg_default.Composition,Coords=jxg_default.Coords,CoordsElement=jxg_default.CoordsElement,Curve=jxg_default.Curve,GeometryElement=jxg_default.GeometryElement,Group=jxg_default.Group,Image$1=jxg_default.Image,JessieCode=jxg_default.JessieCode,Prefix=jxg_default.PrefixParser,Line=jxg_default.Line,Point=jxg_default.Point,Polygon=jxg_default.Polygon,Text=jxg_default.Text,Ticks=jxg_default.Ticks,Transformation=jxg_default.Transformation,Turtle=jxg_default.Turtle,View3D=jxg_default.View3D,LMS2rgb=jxg_default.LMS2rgb,addEvent=jxg_default.addEvent,autoDigits=jxg_default.autoDigits,autoHighlight=jxg_default.autoHighlight,bind=jxg_default.bind,capitalize=jxg_default.capitalize,clearVisPropOld=jxg_default.clearVisPropOld,clone=jxg_default.clone,cloneAndCopy=jxg_default.cloneAndCopy,cmpArrays=jxg_default.cmpArrays,coordsArrayToMatrix=jxg_default.coordsArrayToMatrix,copyAttributes=jxg_default.copyAttributes,createEvalFunction=jxg_default.createEvalFunction,createFunction=jxg_default.createFunction,createHTMLSlider=jxg_default.createHTMLSlider,darkenColor=jxg_default.darkenColor,debug=jxg_default.debug,debugInt=jxg_default.debugInt,debugLine=jxg_default.debugLine,debugWST=jxg_default.debugWST,deepCopy=jxg_default.deepCopy,def=jxg_default.def,deprecated=jxg_default.deprecated,eliminateDuplicates=jxg_default.eliminateDuplicates,escapeHTML=jxg_default.escapeHTML,evalSlider=jxg_default.evalSlider,evaluate=jxg_default.evaluate,filterElements=jxg_default.filterElements,getBoardByContainerId=jxg_default.getBoardByContainerId,getCSSTransformMatrix=jxg_default.getCSSTransformMatrix,getCSSTransform=jxg_default.getCSSTransform,getDimensions=jxg_default.getDimensions,getOffset=jxg_default.getOffset,getPosition=jxg_default.getPosition,getProp=jxg_default.getProp,hex2rgb=jxg_default.hex2rgb,hsv2rgb=jxg_default.hsv2rgb,isAndroid=jxg_default.isAndroid,isApple=jxg_default.isApple,isArray=jxg_default.isArray,isDesktop=jxg_default.isDesktop,isInArray=jxg_default.isInArray,isInObject=jxg_default.isInObject,isMetroApp=jxg_default.isMetroApp,isMobile=jxg_default.isMobile,isMozilla=jxg_default.isMozilla,isBoard=jxg_default.isBoard,isName=jxg_default.isName,isNode=jxg_default.isNode,isNumber=jxg_default.isNumber,isObject=jxg_default.isObject,isPoint=jxg_default.isPoint,isPoint3D=jxg_default.isPoint3D,isPointType=jxg_default.isPointType,isPointType3D=jxg_default.isPointType3D,isString=jxg_default.isString,isTouchDevice=jxg_default.isTouchDevice,isTransformationOrArray=jxg_default.isTransformationOrArray,isWebWorker=jxg_default.isWebWorker,isWebkitAndroid=jxg_default.isWebkitAndroid,isWebkitApple=jxg_default.isWebkitApple,keys=jxg_default.keys,lightenColor=jxg_default.lightenColor,merge=jxg_default.merge,normalizePointFace=jxg_default.normalizePointFace,providePoints=jxg_default.providePoints,registerElement=jxg_default.registerElement,registerReader=jxg_default.registerReader,removeAllEvents=jxg_default.removeAllEvents,removeElementFromArray=jxg_default.removeElementFromArray,removeEvent=jxg_default.removeEvent,rgb2LMS=jxg_default.rgb2LMS,rgb2bw=jxg_default.rgb2bw,rgb2cb=jxg_default.rgb2cb,rgb2css=jxg_default.rgb2css,rgb2hex=jxg_default.rgb2hex,rgb2hsv=jxg_default.rgb2hsv,rgbParser=jxg_default.rgbParser,rgb2rgbo=jxg_default.rgba2rgbo,rgb2rgba=jxg_default.rgbo2rgba,sanitizeHTML=jxg_default.sanitizeHTML,shortcut=jxg_default.shortcut,strBool=jxg_default.str2Bool,supportsCanvas=jxg_default.supportsCanvas,supportsPointerEvents=jxg_default.supportsPointerEvents,supportsSVG=jxg_default.supportsSVG,supportsVML=jxg_default.supportsVML,swap=jxg_default.swap,timeChunk=jxg_default.timedChunk,toFixed=jxg_default.toFixed,toFullscreen=jxg_default.toFullscreen,toJSON=jxg_default.toJSON,trim=jxg_default.trim,trimNumber=jxg_default.trimNumber,truncate=jxg_default.truncate,unescapeHTML=jxg_default.unescapeHTML,uniqueArray=jxg_default.uniqueArray,useBlackWhiteOptions=jxg_default.useBlackWhiteOptions,useStandardOptions=jxg_default.useStandardOptions,warn=jxg_default.warn;env_default.isBrowser?window.JXG=jxg_default:env_default.isWebWorker()&&(self.JXG=jxg_default);var src_default=jxg_default;export{src_default as default};