${this.getDebugHTML()}

`)}popupDebug(){window.open(this.getDebugURI())}iframeDebug(){const e=document.createElement("iframe");e.width=""+window.innerWidth,e.height=""+window.innerHeight,e.style.position="absolute",e.style.left="0",e.style.top="0",e.style.zIndex="10000",document.body.appendChild(e),e.contentWindow.document.open(),e.contentWindow.document.write(this.getDebugHTML()),e.contentWindow.document.close(),e.contentWindow.document.body.style.background="white";const t=document.createElement("button");t.style.position="absolute",t.style.top="0",t.style.right="0",t.style.zIndex="10001",document.body.appendChild(t),t.textContent="close",["pointerdown","click","touchdown"].forEach(i=>{t.addEventListener(i,()=>{document.body.removeChild(e),document.body.removeChild(t)},!0)})}getPDOMDebugHTML(){let e="";const t="font-weight: bold; font-size: 120%; margin-top: 5px;",i="    ";e+=`

Accessible Instances

`,function t(n,r){e+=r+Rc(`${n.isRootInstance?"":n.node.tagName} ${n.toString()}`)+"
",n.children.forEach(e=>{t(e,r+i)})}(this._rootPDOMInstance,""),e+=`

Parallel DOM

`;let n=this._rootPDOMInstance.peer.primarySibling.outerHTML;n=n.replace(/>\n<");const r=n.split("\n");let s="";for(let o=0;o",n||(s+=i)}return e}foreignObjectRasterization(e){const t={};let i=0;function n(e){e.id||(e.id="unknown-canvas-"+i++),t[e.id]=e.toDataURL()}!function e(t){if(t instanceof oE)_.each(t.blocks,t=>{e(t)});else if(t instanceof NA&&t.firstDrawable&&t.lastDrawable){for(let i=t.firstDrawable;i!==t.lastDrawable;i=i.nextDrawable)e(i);e(t.lastDrawable),(t instanceof BA||t instanceof XA)&&t.canvas&&t.canvas instanceof window.HTMLCanvasElement&&n(t.canvas)}Py&&t instanceof Py&&(t.domElement instanceof window.HTMLCanvasElement&&n(t.domElement),Array.prototype.forEach.call(t.domElement.getElementsByTagName("canvas"),e=>{n(e)}))}(this._rootBackbone);const r=document.implementation.createHTMLDocument("");r.documentElement.innerHTML=this.domElement.outerHTML,r.documentElement.setAttribute("xmlns",r.documentElement.namespaceURI),r.documentElement.appendChild(document.createElement("style")).innerHTML=`.${vl.ROOT_CLASS_NAME} { display:none; } `;let s=r.documentElement.getElementsByTagName("canvas");s=Array.prototype.slice.call(s);for(let d=0;d{VE.elementToSVGDataURL(r.documentElement,o,a,e)};let h=0,c=!1;const u=Array.prototype.slice.call(r.documentElement.getElementsByTagName("image"));for(let d=0;d{const i=new window.Image,n=e;i.onload=()=>{const e=document.createElement("canvas");e.width=i.width,e.height=i.height,e.getContext("2d").drawImage(i,0,0),n.setAttribute("xlink:href",e.toDataURL()),0==--h&&l()},i.onerror=()=>{0==--h&&l()},i.src=t})())}c||l()}popupRasterization(){this.foreignObjectRasterization(e=>{e&&window.open(e)})}getTrailFromPDOMIndicesString(e){if(!this._rootPDOMInstance)return null;let t=this._rootPDOMInstance;const i=e.split(Rl.PDOM_UNIQUE_ID_SEPARATOR);for(let n=0;n

${(new window.XMLSerializer).serializeToString(e)}
`,a=new window.Image;a.onload=()=>{s.drawImage(a,0,0),n(r.toDataURL())},a.onerror=()=>{n(null)};const l=new window.TextEncoderLite("utf-8").encode(o),h=window.fromByteArray(l);a.src="data:image/svg+xml;base64,"+h}static assertSubtreeDisposed(e){0}static addInputListener(e){_.includes(VE.inputListeners,e)||VE.inputListeners.push(e)}static removeInputListener(e){VE.inputListeners.splice(_.indexOf(VE.inputListeners,e),1)}static interruptInput(){const e=VE.inputListeners.slice(0);for(let t=0;t0&&n=0&&n{const t={index:null};return e.parents[0]&&(t.index=e.parents[0].indexOfChild(e)),t},applyState:(e,t)=>{const i=e.parents[0];if(i&&t.index){const n=i.children;n[i.indexOfChild(e)]=n[t.index],n[t.index]=e,i.setChildren(n)}},stateSchema:{index:hn(bt)},methods:{linkIndex:{returnType:bt,parameterTypes:[on(un,[bt])],documentation:"Following the PropertyIO.link pattern, subscribe for notifications when the index in the parent changes, and receive a callback with the current value. The return value is a numeric ID for use with clearLinkIndex.",implementation:function(e){const t=()=>{const t=this.parents[0].indexOfChild(this);e(t)};this.parents[0].childrenChangedEmitter.addListener(t),t();const i=xE;return PE[i]=t,xE++,i}},clearLinkIndex:{returnType:un,parameterTypes:[bt],documentation:"Unlink a listener that has been added using linkIndex, by its numerical ID (like setTimeout/clearTimeout)",implementation:function(e){const t=PE[e];this.parents[0].childrenChangedEmitter.removeListener(t),delete PE[e]}},moveForward:{returnType:un,parameterTypes:[],implementation:function(){var e;(e=this)._parents.forEach(t=>CE(t,e,1))},documentation:"Move this Node one index forward in each of its parents, skipping invisible Nodes. If the Node is already at the front, this is a no-op."},moveBackward:{returnType:un,parameterTypes:[],implementation:function(){var e;(e=this)._parents.forEach(t=>CE(t,e,-1))},documentation:"Move this Node one index backward in each of its parents, skipping invisible Nodes. If the Node is already at the back, this is a no-op."}}});uo.register("IndexedNodeIO",_E);const RE=_E;class NE extends ir{constructor(e,t,i){i=We({nodeTandem:Oi.REQUIRED},i),super([new Nn(!0,{tandem:i.nodeTandem.createTandem("visibleProperty")}),...e],(function(e){for(var i=arguments.length,n=new Array(i>1?i-1:0),r=1;rthis.lineTo(e.x,e.y)),this.close()}}static getArrowShapePoints(e,t,i,n,r,s){const o=$e()({tailWidth:5,headWidth:10,headHeight:10,fractionalHeadHeight:.5,doubleHead:!1,isHeadDynamic:!1,scaleTailToo:!1},s);if(r||(r=[]),i===e&&n===t)r.length=0;else{const s=new Ht(i-e,n-t),a=s.magnitude;let l=o.headWidth,h=o.headHeight,c=o.tailWidth;if(o.isHeadDynamic){const e=o.fractionalHeadHeight*a;o.headHeight>e&&(h=e,o.scaleTailToo&&(l=o.headWidth*h/o.headHeight,c=o.tailWidth*h/o.headHeight))}else h=Math.min(o.headHeight,o.doubleHead?.35*a:.99*a);let u=0;const d=s.normalized(),p=d.rotated(Math.PI/2),m=function(i,n){const s=d.x*i+p.x*n+e,o=d.y*i+p.y*n+t;r[u]?(r[u].x=s,r[u].y=o):r.push(new Ht(s,o)),u++};o.doubleHead?(m(0,0),m(h,l/2),m(h,c/2)):m(0,c/2),m(a-h,c/2),m(a-h,l/2),m(a,0),m(a-h,-l/2),m(a-h,-c/2),o.doubleHead?(m(h,-c/2),m(h,-l/2)):m(0,-c/2),u1){e.moveToPoint(this.shapePoints[0]);for(let t=1;tthis.update();e.changedEmitter.addListener(r),this.disposeAxisNode=()=>e.changedEmitter.removeListener(r)}update(){const e=this.chartTransform.modelToView(this.axisOrientation.opposite,this.value);this.axisOrientation===$t.VERTICAL?(this.setTailAndTip(e,this.chartTransform.viewHeight+this.extension,e,0-this.extension),this.setVisible(e>=0&&e<=this.chartTransform.viewWidth)):(this.setTailAndTip(0-this.extension,e,this.chartTransform.viewWidth+this.extension,e),this.setVisible(e>=0&&e<=this.chartTransform.viewHeight))}dispose(){this.disposeAxisNode(),super.dispose()}}br.register("AxisArrowNode",DE);class kE extends Uc{constructor(e,t,i){const n=$e()({value:0,extension:0,stroke:"black",lineWidth:2},i);super(0,0,0,0,n),this.chartTransform=e,this.axisOrientation=t,this.value=n.value,this.extension=n.extension,this.update();const r=()=>this.update();e.changedEmitter.addListener(r),this.disposeAxisLine=()=>e.changedEmitter.removeListener(r)}update(){const e=this.chartTransform.modelToView(this.axisOrientation.opposite,this.value);this.axisOrientation===$t.VERTICAL?(this.setLine(e,0-this.extension,e,this.chartTransform.viewHeight+this.extension),this.setVisible(e>=0&&e<=this.chartTransform.viewWidth)):(this.setLine(0-this.extension,e,this.chartTransform.viewWidth+this.extension,e),this.setVisible(e>=0&&e<=this.chartTransform.viewHeight))}dispose(){this.disposeAxisLine(),super.dispose()}}br.register("AxisLine",kE);const qE=new Ye("joist"),BE=_.sortBy(Object.keys(phet.chipper.strings),e=>zu.localeToLocalizedName(e).toLowerCase()),OE=e=>!(!e||!BE.includes(e)),HE="string"==typeof phet.chipper.locale?phet.chipper.locale.slice(0,2):void 0,YE=OE(phet.chipper.locale)?phet.chipper.locale:OE(HE)?HE:"en";phet.chipper.locale=YE;const GE=new class extends Rn{unguardedSet(e){BE.includes(e)&&super.unguardedSet(e)}}(YE,{tandem:Oi.GENERAL_MODEL.createTandem("localeProperty"),phetioFeatured:!0,phetioValueType:Yi,validValues:BE,phetioDocumentation:"Specifies language currently displayed in the simulation"});if(phet.chipper.queryParameters.keyboardLocaleSwitcher){const e=ga.KEY_I,t=ga.KEY_U;Iu.keydownEmitter.addListener(i=>{const n=e=>{i.preventDefault();const t=(BE.indexOf(GE.value)+e+BE.length)%BE.length;GE.value=BE[t],console.log(GE.value)};!i.ctrlKey||i.shiftKey||i.metaKey||i.altKey||(ga.isKeyEvent(i,e)?n(1):ga.isKeyEvent(i,t)&&n(-1))})}qE.register("localeProperty",GE);const FE=GE,UE=new Rn([],{tandem:Oi.GENERAL_MODEL.createTandem("fallbackLocalesProperty"),phetioDocumentation:'An ordered list of locales to "fall back" on when a translation is missing for the selected locale, for example: ["es", "de" ]. "en" will always be added to the end of this, because it has guaranteed full coverage of all translated keys.',phetioFeatured:!0,isValidValue:e=>_.every(e,e=>!!Gu[e]),phetioValueType:nn(Yi)});qE.register("fallbackLocalesProperty",UE);const zE=new ir([FE,UE],(e,t)=>{const i=[e],n=e.slice(0,2);e===n||i.includes(n)||i.push(n);for(let s=0;se.getLocaleSpecificProperty(t),bidirectional:!0,phetioValueType:Yi,phetioState:!1,tandem:t,phetioFeatured:r,phetioReadOnly:n,phetioDocumentation:s}),this.localizedString=e}get stringKey(){return this.localizedString.stringKey}}jE.register("LocalizedStringProperty",XE);const QE=XE;class KE{constructor(e,t,i,n){_defineProperty(this,"localePropertyMap",new Map),_defineProperty(this,"initialValues",{}),this.stringKey=e,this.englishProperty=new vn(t),this.initialValues.en=t,this.localeOrderListener=this.onLocaleOrderChange.bind(this),WE.lazyLink(this.localeOrderListener),this.property=new QE(this,i,n),ZE.push(this)}setInitialValue(e,t){this.initialValues[e]=t,this.getLocaleSpecificProperty(e).value=t}getStateDelta(){const e={};return this.usedLocales.forEach(t=>{const i=this.getRawStringValue(t);null!==i&&i!==this.initialValues[t]&&(e[t]=i)}),e}setStateDelta(e){Object.keys(e).forEach(e=>this.getLocaleSpecificProperty(e)),this.usedLocales.forEach(t=>{const i=this.getLocaleSpecificProperty(t),n=void 0!==this.initialValues[t]?this.initialValues[t]:null,r=void 0!==e[t]?e[t]:null;null===r?null===n?i.clearOverride():i.value=n:i.value=r})}getRawStringValue(e){const t=this.getLocaleSpecificProperty(e);return t instanceof Er?t.isOverridden?t.value:null:t.value}get usedLocales(){return["en",...this.localePropertyMap.keys()]}onLocaleOrderChange(e){const t=[...this.usedLocales,...e];for(let i=t.length-1;i>=0;i--){const e=t[i],n=this.getLocaleSpecificProperty(e);n instanceof Er&&(n.targetProperty=this.getLocaleSpecificProperty(KE.getFallbackLocale(e)))}}getLocaleSpecificProperty(e){return"en"===e?this.englishProperty:(this.localePropertyMap.has(e)||this.localePropertyMap.set(e,new Er(this.getLocaleSpecificProperty(KE.getFallbackLocale(e)))),this.localePropertyMap.get(e))}static getFallbackLocale(e){if("en"===e)return"en";const t=WE.value,i=t.indexOf(e);return i>=0?t[i+1]:e.includes("_")?e.slice(0,2):"en"}dispose(){WE.unlink(this.localeOrderListener),this.property.dispose(),Ai(ZE,this)}restoreInitialValue(e){this.property.value=this.initialValues[e]}}jE.register("LocalizedString",KE);const JE=KE,ZE=[];window.phet.chipper.localizedStrings=ZE,window.phet.chipper.setAllStrings=e=>{ZE.forEach(t=>{t.property.value=e})};const $E=new yt("StringStateIO",{valueType:Zi,toStateObject:()=>{const e={};return ZE.forEach(t=>{const i=t.getStateDelta();Object.keys(i).length>0&&(e[t.property.tandem.phetioID]=i)}),{data:e}},stateSchema:{data:Sa},applyState:(e,t)=>{Object.keys(t.data).forEach(e=>{if(!ZE.find(t=>t.property.tandem.phetioID===e))throw new Kl}),ZE.forEach(e=>{e.setStateDelta(t.data[e.property.tandem.phetioID]||{})})}});Zi.create({phetioType:$E,tandem:Oi.GENERAL_MODEL.createTandem("stringsState"),phetioDocumentation:"Strings that have changed from their initial values. Each string value is specific to the locale it changed in.",phetioState:!0});const ev=e=>{const t=e+"/";let i=Object.keys(phet.chipper.strings.en).filter(e=>e.startsWith(t));phet.chipper.usedStringsEN&&(i=i.filter(e=>phet.chipper.usedStringsEN.hasOwnProperty(e)));const n={},r={};return i.forEach(i=>{const s=i.slice(t.length).split("."),o=s[s.length-1],a=s.slice(0,s.length-1);let l=r,h=t;if(a.forEach((e,t)=>{h+=`${t>0?".":""}${e}`,l[e]||(l[e]={}),l=l[e]}),"string"!=typeof l){let t=Oi.GENERAL_MODEL.createTandem("strings").createTandem(_.camelCase(e));for(let e=0;ee[1].toUpperCase());if(e===s.length-1){let e=i,n=0,r=!0;for(;r;)n++,e=`${i}${1===n?"":n}StringProperty`,r=t.hasChild(e);i=e}t=t.createTandem(i)}t.phetioID.includes(".a11y.")&&(t=Oi.OPT_OUT);const r=new JE(i,phet.chipper.mapString(phet.chipper.strings.en[i]),t,phet.chipper.stringMetadata[i]);n[i]=r,Object.keys(phet.chipper.strings).forEach(e=>{const t=phet.chipper.strings[e][i];"string"==typeof t&&""!==t&&r.setInitialValue(e,phet.chipper.mapString(t))}),l[o+"StringProperty"]=r.property,r.property.link(e=>{l[o]=e})}}),r},tv=ev("BAMBOO");br.register("BambooStrings",tv);const iv={fill:"black"};class nv extends Lh{constructor(e,t,i){const n=$e()({barWidth:10,barTailValue:0,pointToPaintableFields:e=>iv},i);super(n),this.chartTransform=e,this.barTailValue=n.barTailValue,this.dataSet=t,this.barWidth=n.barWidth,this.pointToPaintableFields=n.pointToPaintableFields,this.rectangles=[],this.setDataSet(t);const r=()=>this.update();e.changedEmitter.addListener(r),this.disposeBarPlot=()=>e.changedEmitter.removeListener(r)}setDataSet(e){this.dataSet=e,this.update()}update(){for(;this.rectangles.lengththis.dataSet.length;){const e=this.rectangles.pop();this.removeChild(e)}for(let e=0;e{this.axisOrientation===$t.VERTICAL?(e.moveTo(0,i),e.lineTo(this.chartTransform.viewWidth,i)):(e.moveTo(i,0),e.lineTo(i,this.chartTransform.viewHeight))}),e.stroke()}}br.register("CanvasGridLineSet",ov);br.register("CanvasLinePlot",class extends sv{constructor(e,t,i){const n=$e()({stroke:"black",lineWidth:1,lineDash:[]},i);super(),this.chartTransform=e,this.dataSet=t,this.lineWidth=n.lineWidth,this.lineDash=n.lineDash,this.strokeCSS=null,this.setStroke(n.stroke)}setStroke(e){this.strokeCSS=e instanceof Eo?e.toCSS():e}set stroke(e){this.setStroke(e)}dispose(){this.isDisposed=!0}setDataSet(e){this.dataSet=e}paintCanvas(e){if(e.beginPath(),this.strokeCSS){e.strokeStyle=this.strokeCSS,e.lineWidth=this.lineWidth,e.setLineDash(this.lineDash);let t=!0;const i=this.dataSet.length;for(let n=0;nthis.update();e.changedEmitter.addListener(n),this.disposeChartCanvasLinePlot=()=>e.changedEmitter.removeListener(n)}setPainters(e){this.painters=e,this.update()}update(){this.invalidatePaint()}paintCanvas(e){this.painters.forEach(t=>{t.visible&&(e.save(),t.paintCanvas(e),e.restore())})}dispose(){this.disposeChartCanvasLinePlot(),super.dispose()}}br.register("ChartCanvasNode",av);class lv extends Wc{constructor(e,t){super(0,0,0,0,t),this.chartTransform=e,this.update();const i=()=>this.update();e.changedEmitter.addListener(i),this.disposeChartRectangle=()=>e.changedEmitter.removeListener(i)}update(){this.setRect(0,0,this.chartTransform.viewWidth,this.chartTransform.viewHeight)}dispose(){this.disposeChartRectangle(),super.dispose()}}br.register("ChartRectangle",lv);class hv{constructor(e,t,i){i=We({domain:new zt(Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY),range:new zt(Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY)},i),this.evaluationFunction=e,this.inverseFunction=t,this.domain=i.domain,this.range=i.range}evaluate(e){const t=this.evaluationFunction(e);return t}inverse(e){const t=this.inverseFunction(e);return t}}wt.register("Transform1",hv);const cv=hv;class uv{constructor(e){const t=$e()({viewWidth:100,modelXRange:new zt(-1,1),modelXRangeInverted:!1,xTransform:new cv(e=>e,e=>e),viewHeight:100,modelYRange:new zt(-1,1),modelYRangeInverted:!1,yTransform:new cv(e=>e,e=>e)},e);this.changedEmitter=new Yn,this.viewWidth=t.viewWidth,this.viewHeight=t.viewHeight,this.modelXRange=t.modelXRange,this.modelXRangeInverted=t.modelXRangeInverted,this.modelYRange=t.modelYRange,this.modelYRangeInverted=t.modelYRangeInverted,this.xTransform=t.xTransform,this.yTransform=t.yTransform}dispose(){this.changedEmitter.dispose()}forEachSpacing(e,t,i,n,r){const s=this.getSpacingBorders(e,t,i,n),o=s.min,a=s.max;for(let l=o;l<=a+1e-6;l++){const n=l*t+i;r(n,this.modelToView(e,n))}}modelToView(e,t){const i=e===$t.HORIZONTAL?this.modelXRange:this.modelYRange,n=e===$t.HORIZONTAL?this.viewWidth:this.viewHeight,r=e===$t.HORIZONTAL?this.xTransform:this.yTransform,s=e===$t.HORIZONTAL?this.modelXRangeInverted:this.modelYRangeInverted,o=r.evaluate(t),a=s?n:0,l=s?0:n,h=e===$t.HORIZONTAL?Bt.linear(r.evaluate(i.min),r.evaluate(i.max),a,l,o):Bt.linear(r.evaluate(i.max),r.evaluate(i.min),a,l,o);return h}modelToViewX(e){return this.modelToView($t.HORIZONTAL,e)}modelToViewY(e){return this.modelToView($t.VERTICAL,e)}modelToViewXY(e,t){return new Ht(this.modelToViewX(e),this.modelToViewY(t))}modelToViewPosition(e){return this.modelToViewXY(e.x,e.y)}modelToViewDelta(e,t){return this.modelToView(e,t)-this.modelToView(e,0)}modelToViewDeltaX(e){return this.modelToViewDelta($t.HORIZONTAL,e)}modelToViewDeltaY(e){return this.modelToViewDelta($t.VERTICAL,e)}modelToViewDeltaXY(e,t){return new Ht(this.modelToViewDeltaX(e),this.modelToViewDeltaY(t))}viewToModel(e,t){const i=e===$t.HORIZONTAL?this.modelXRange:this.modelYRange,n=e===$t.HORIZONTAL?this.viewWidth:this.viewHeight,r=e===$t.HORIZONTAL?this.xTransform:this.yTransform,s=e===$t.HORIZONTAL?this.modelXRangeInverted:this.modelYRangeInverted,o=s?n:0,a=s?0:n,l=e===$t.HORIZONTAL?Bt.linear(o,a,r.evaluate(i.min),r.evaluate(i.max),t):Bt.linear(o,a,r.evaluate(i.max),r.evaluate(i.min),t),h=r.inverse(l);return h}viewToModelX(e){return this.viewToModel($t.HORIZONTAL,e)}viewToModelY(e){return this.viewToModel($t.VERTICAL,e)}viewToModelXY(e,t){return new Ht(this.viewToModelX(e),this.viewToModelY(t))}viewToModelPosition(e){return this.viewToModelXY(e.x,e.y)}viewToModelDeltaX(e){return this.viewToModelX(e)-this.viewToModelX(0)}viewToModelDeltaY(e){return this.viewToModelY(e)-this.viewToModelY(0)}viewToModelDelta(e){return this.viewToModelPosition(e).minus(this.viewToModelPosition(Ht.ZERO))}setViewWidth(e){e!==this.viewWidth&&(this.viewWidth=e,this.changedEmitter.emit())}setViewHeight(e){e!==this.viewHeight&&(this.viewHeight=e,this.changedEmitter.emit())}setModelXRange(e){e.equals(this.modelXRange)||(this.modelXRange=e,this.changedEmitter.emit())}setModelYRange(e){e.equals(this.modelYRange)||(this.modelYRange=e,this.changedEmitter.emit())}getModelRange(e){return e===$t.HORIZONTAL?this.modelXRange:this.modelYRange}setXTransform(e){this.xTransform!==e&&(this.xTransform=e,this.changedEmitter.emit())}setYTransform(e){this.yTransform!==e&&(this.yTransform=e,this.changedEmitter.emit())}getSpacingBorders(e,t,i,n){const r=this.getModelRange(e),s=dv(r.min,n,i,t,Math.ceil),o=dv(r.max,n,i,t,Math.floor);return new zt(s,o)}}function dv(e,t,i,n,r){return"lenient"===t?Bt.roundSymmetric((e-i)/n):r((e-i)/n)}br.register("ChartTransform",uv);br.register("ClippingTypeValues",["strict","lenient"]);class pv extends Cc{constructor(e,t,i,n){const r=$e()({origin:0,clippingType:"strict",stroke:"black"},n);super(null,r),this.chartTransform=e,this.axisOrientation=t,this.spacing=i,this.origin=r.origin,this.clippingType=r.clippingType,this.update();const s=()=>this.update();e.changedEmitter.addListener(s),this.disposeGridLineSet=()=>e.changedEmitter.removeListener(s)}update(){const e=new bs;this.chartTransform.forEachSpacing(this.axisOrientation,this.spacing,this.origin,this.clippingType,(t,i)=>{this.axisOrientation===$t.VERTICAL?(e.moveTo(0,i),e.lineTo(this.chartTransform.viewWidth,i)):(e.moveTo(i,0),e.lineTo(i,this.chartTransform.viewHeight))}),this.shape=e.makeImmutable()}setSpacing(e){this.spacing!==e&&(this.spacing=e,this.update())}getSpacing(){return this.spacing}dispose(){this.disposeGridLineSet(),super.dispose()}getSpacingBorders(){return this.chartTransform.getSpacingBorders(this.axisOrientation,this.spacing,this.origin,this.clippingType)}}br.register("GridLineSet",pv);class mv extends Cc{constructor(e,t,i){super(null,$e()({stroke:"black"},i)),this.chartTransform=e,this.dataSet=t,this.update();const n=()=>this.update();e.changedEmitter.addListener(n),this.disposeLinePlot=()=>e.changedEmitter.removeListener(n)}setDataSet(e){this.dataSet=e,this.update()}update(){const e=new bs;let t=!0;for(let i=0;ithis.update();e.changedEmitter.addListener(r),this.disposeStraightLinePlot=()=>e.changedEmitter.removeListener(r)}setSlope(e){this._m=e,this.update()}set m(e){this.setSlope(e)}get m(){return this._m}setYIntercept(e){this._b=e,this.update()}set b(e){this.setYIntercept(e)}get b(){return this._b}solve(e){return this._m*e+this._b}update(){if(this._m===1/0||this._m===-1/0){const e=0,t=this.chartTransform.modelYRange.min,i=this.chartTransform.modelYRange.max,n=this.chartTransform.modelToViewX(e),r=this.chartTransform.modelToViewY(t),s=this.chartTransform.modelToViewY(i);this.setLine(n,r,n,s)}else{const e=this.chartTransform.modelXRange.min,t=this.solve(e),i=this.chartTransform.modelXRange.max,n=this.solve(i),r=this.chartTransform.modelToViewX(e),s=this.chartTransform.modelToViewY(t),o=this.chartTransform.modelToViewX(i),a=this.chartTransform.modelToViewY(n);this.setLine(r,s,o,a)}}dispose(){this.disposeStraightLinePlot(),super.dispose()}}br.register("LinearEquationPlot",gv);class fv extends Cc{constructor(e,t,i){const n=$e()({radius:2,fill:"black"},i);super(null,n),this.chartTransform=e,this.dataSet=t,this.radius=n.radius,this.update();const r=()=>this.update();e.changedEmitter.addListener(r),this.disposeScatterPlot=()=>e.changedEmitter.removeListener(r)}setDataSet(e){this.dataSet=e,this.update()}update(){const e=new bs,t=this.dataSet.length;for(let i=0;ithis.update();e.changedEmitter.addListener(o),this.disposeSpanNode=()=>e.changedEmitter.removeListener(o)}setDelta(e){e!==this.delta&&(this.delta=e,this.update())}update(){const e=this.chartTransform.modelToViewDelta(this.axisOrientation,this.delta);if(Math.abs(e-this.viewWidth)>1e-13){this.viewWidth=e;const t=e=>new Uc(0,0,0,this.outerLineLength,{stroke:this.color,centerX:e}),i=t(0),n=t(e),r=new IE(i.right,i.centerY,n.left,n.centerY,this.arrowNodeOptions),s=new Lh({children:[i,n,r]});this.labelNode.maxWidth=s.width,this.children=[s,this.labelNode]}}dispose(){this.disposeSpanNode(),super.dispose()}}br.register("SpanNode",Av);class Ev extends Cc{constructor(e,t,i,n){const r=$e()({value:0,edge:null,origin:0,skipCoordinates:[],stroke:"black",lineWidth:1,extent:Ev.DEFAULT_EXTENT,clippingType:"strict"},n);r.edge,super(null,r),this.chartTransform=e,this.axisOrientation=t,this.spacing=i,this.value=r.value,this.edge=r.edge,this.origin=r.origin,this.skipCoordinates=r.skipCoordinates,this.extent=r.extent,this.clippingType=r.clippingType,this.update();const s=()=>this.update();e.changedEmitter.addListener(s),this.disposeTickMarkSet=()=>e.changedEmitter.removeListener(s)}setSpacing(e){e!==this.spacing&&(this.spacing=e,this.update())}getSpacing(){return this.spacing}update(){const e=new bs;this.chartTransform.forEachSpacing(this.axisOrientation,this.spacing,this.origin,this.clippingType,(t,i)=>{if(!this.skipCoordinates.includes(t)){const t=new ti(0,0,0,0);if(this.axisOrientation===$t.HORIZONTAL){const n="min"===this.edge?this.chartTransform.viewHeight:"max"===this.edge?0:this.chartTransform.modelToView(this.axisOrientation.opposite,this.value);e.moveTo(i,n-this.extent/2),e.lineTo(i,n+this.extent/2),t.setMinMax(i,n-this.extent/2,i,n+this.extent/2)}else{const n="min"===this.edge?0:"max"===this.edge?this.chartTransform.viewWidth:this.chartTransform.modelToView(this.axisOrientation.opposite,this.value);e.moveTo(n-this.extent/2,i),e.lineTo(n+this.extent/2,i),t.setMinMax(n-this.extent/2,i,n+this.extent/2,i)}}}),this.shape=e.makeImmutable()}dispose(){this.disposeTickMarkSet(),super.dispose()}getSpacingBorders(){return this.chartTransform.getSpacingBorders(this.axisOrientation,this.spacing,this.origin,this.clippingType)}}_defineProperty(Ev,"DEFAULT_EXTENT",10),br.register("TickMarkSet",Ev);const vv=Ev;class Sv extends Cc{constructor(e,t,i,n){const r=$e()({value:0,edge:null,origin:0,skipCoordinates:[],extent:vv.DEFAULT_EXTENT,clippingType:"strict",createLabel:e=>new qc(Bt.toFixed(e,1),{fontSize:12}),positionLabel:(e,t,i)=>(i===$t.HORIZONTAL?e.centerTop=t.centerBottom.plusXY(0,1):e.rightCenter=t.leftCenter.plusXY(-1,0),e)},n);r.edge,super(null,r),this.chartTransform=e,this.axisOrientation=t,this.spacing=i,this.origin=r.origin,this.skipCoordinates=r.skipCoordinates,this.extent=r.extent,this.value=r.value,this.clippingType=r.clippingType,this.edge=r.edge,this.createLabel=r.createLabel,this.positionLabel=r.positionLabel,this.labelMap=new Map,this.update();const s=()=>this.update();e.changedEmitter.addListener(s),this.disposeTickLabelSet=()=>e.changedEmitter.removeListener(s)}setSpacing(e){this.spacing!==e&&(this.spacing=e,this.update())}getSpacing(){return this.spacing}update(){const e=[],t=new Set;this.chartTransform.forEachSpacing(this.axisOrientation,this.spacing,this.origin,this.clippingType,(i,n)=>{if(!this.skipCoordinates.includes(i)){const r=new ti(0,0,0,0);if(this.axisOrientation===$t.HORIZONTAL){const e="min"===this.edge?this.chartTransform.viewHeight:"max"===this.edge?0:this.chartTransform.modelToView(this.axisOrientation.opposite,this.value);r.setMinMax(n,e-this.extent/2,n,e+this.extent/2)}else{const e="min"===this.edge?0:"max"===this.edge?this.chartTransform.viewWidth:this.chartTransform.modelToView(this.axisOrientation.opposite,this.value);r.setMinMax(e-this.extent/2,n,e+this.extent/2,n)}const s=this.labelMap.has(i)?this.labelMap.get(i):this.createLabel?this.createLabel(i):null;this.labelMap.set(i,s),s&&this.positionLabel(s,r,this.axisOrientation),s&&e.push(s),t.add(i)}});const i=[];for(const n of this.labelMap.keys())t.has(n)||i.push(n);i.forEach(e=>{this.labelMap.delete(e)}),this.children=e}invalidateTickLabelSet(){this.labelMap.clear(),this.update()}setCreateLabel(e){this.createLabel=e,this.invalidateTickLabelSet()}dispose(){this.disposeTickLabelSet(),super.dispose()}getSpacingBorders(){return this.chartTransform.getSpacingBorders(this.axisOrientation,this.spacing,this.origin,this.clippingType)}}br.register("TickLabelSet",Sv);const bv={fill:"black"};class Tv extends Lh{constructor(e,t,i){const n=$e()({arrowNodeOptions:{},pointToPaintableFields:e=>bv},i);super(n),this.chartTransform=e,this.dataSet=t,this.pointToPaintableFields=n.pointToPaintableFields,this.arrowNodeOptions=n.arrowNodeOptions,this.arrowNodes=[],this.setDataSet(t);const r=()=>this.update();e.changedEmitter.addListener(r),this.disposeUpDownArrowPLot=()=>e.changedEmitter.removeListener(r)}setDataSet(e){this.dataSet=e,this.update()}update(){for(;this.arrowNodes.lengththis.dataSet.length;){const e=this.arrowNodes.pop();this.removeChild(e)}for(let e=0;e0&&this.getHeight()>0&&this.getDepth()>0}isValid(){return!this.isEmpty()&&this.isFinite()}containsCoordinates(e,t,i){return this.minX<=e&&e<=this.maxX&&this.minY<=t&&t<=this.maxY&&this.minZ<=i&&i<=this.maxZ}containsPoint(e){return this.containsCoordinates(e.x,e.y,e.z)}containsBounds(e){return this.minX<=e.minX&&this.maxX>=e.maxX&&this.minY<=e.minY&&this.maxY>=e.maxY&&this.minZ<=e.minZ&&this.maxZ>=e.maxZ}intersectsBounds(e){return!this.intersection(e).isEmpty()}toString(){return`[x:(${this.minX},${this.maxX}),y:(${this.minY},${this.maxY}),z:(${this.minZ},${this.maxZ})]`}equals(e){return this.minX===e.minX&&this.minY===e.minY&&this.minZ===e.minZ&&this.maxX===e.maxX&&this.maxY===e.maxY&&this.maxZ===e.maxZ}equalsEpsilon(e,t){t=void 0!==t?t:0;const i=this.isFinite(),n=e.isFinite();return i&&n?Math.abs(this.minX-e.minX)({minX:e.minX,minY:e.minY,minZ:e.minZ,maxX:e.maxX,maxY:e.maxY,maxZ:e.maxZ}),fromStateObject:e=>new wv(e.minX,e.minY,e.minZ,e.maxX,e.maxY,e.maxZ)});class Vv{constructor(e){this.inclusions=e}size(){return this.inclusions.length}includes(e){return this.inclusions[e]}apply(e){return e.filter((e,t)=>this.inclusions[t])}inverted(){return new Vv(this.inclusions.map(e=>!e))}getIncludedIndices(){return _.range(0,this.size()).filter(e=>this.inclusions[e])}toString(){return`C[${this.inclusions.map(e=>e?"1":"0").join("")}]`}equals(e){return this.inclusions.length===e.inclusions.length&&_.isEqual(this.inclusions,e.inclusions)}static empty(e){return new Vv(_.range(0,e).map(()=>!1))}static full(e){return new Vv(_.range(0,e).map(()=>!0))}static combinations(e){const t=[],i=[];return function n(r){r===e?t.push(new Vv(i.slice())):(i.push(!1),n(r+1),i.pop(),i.push(!0),n(r+1),i.pop())}(0),t}static forEachCombination(e,t){const i=[];!function n(r){r===e.length?t(i):(n(r+1),i.push(e[r]),n(r+1),i.pop())}(0)}static combinationsOf(e){const t=[];return Vv.forEachCombination(e,e=>{t.push(e.slice())}),t}}wt.register("Combination",Vv);class Pv{constructor(e){this.points=e.slice();for(let t=0;te.x).concat(e.points.map(e=>e.x)))}getIntersectedXValues(e){const t=this.getCombinedXValues(e),i=[];for(let r=0;rn)&&(r===t.length-2||o.xnew Ht(i,t(this.evaluate(i),e.evaluate(i)))))}binaryPointwiseOperation(e,t){return this.binaryXOperation(e,t,this.getCombinedXValues(e))}binaryIntersectingOperation(e,t){return this.binaryXOperation(e,t,this.getIntersectedXValues(e))}plus(e){return this.binaryPointwiseOperation(e,(e,t)=>e+t)}minus(e){return this.binaryPointwiseOperation(e,(e,t)=>e-t)}min(e){return this.binaryIntersectingOperation(e,Math.min)}max(e){return this.binaryIntersectingOperation(e,Math.max)}withXValues(e){return new Pv(e.map(e=>new Ht(e,this.evaluate(e))))}inverted(){const e=this.points.map(e=>new Ht(e.y,e.x));return e.length>1&&e[0].x>e[1].x&&e.reverse(),new Pv(e)}static sum(){for(var e=arguments.length,t=new Array(e),i=0;ie.plus(t))}static min(){for(var e=arguments.length,t=new Array(e),i=0;ie.min(t))}static max(){for(var e=arguments.length,t=new Array(e),i=0;ie.max(t))}static constant(e){return new Pv([new Ht(0,e)])}static linear(e,t){return new Pv([new Ht(0,t),new Ht(1,e+t)])}static sortedUniqueEpsilon(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e-10;e=_.sortBy(e);for(let i=0;i=0?1:-1)*Math.sqrt((e-this.real)/2))}powerByReal(e){const t=Math.pow(this.magnitude,e),i=e*this.phase();return new Cv(t*Math.cos(i),t*Math.sin(i))}sinOf(){return new Cv(Math.sin(this.real)*Bt.cosh(this.imaginary),Math.cos(this.real)*Bt.sinh(this.imaginary))}cosOf(){return new Cv(Math.cos(this.real)*Bt.cosh(this.imaginary),-Math.sin(this.real)*Bt.sinh(this.imaginary))}squared(){return this.times(this)}conjugated(){return new Cv(this.real,-this.imaginary)}exponentiated(){return Cv.createPolar(Math.exp(this.real),this.imaginary)}setRealImaginary(e,t){return this.real=e,this.imaginary=t,this}setReal(e){return this.real=e,this}setImaginary(e){return this.imaginary=e,this}set(e){return this.setRealImaginary(e.real,e.imaginary)}setPolar(e,t){return this.setRealImaginary(e*Math.cos(t),e*Math.sin(t))}add(e){return this.setRealImaginary(this.real+e.real,this.imaginary+e.imaginary)}subtract(e){return this.setRealImaginary(this.real-e.real,this.imaginary-e.imaginary)}multiply(e){return this.setRealImaginary(this.real*e.real-this.imaginary*e.imaginary,this.real*e.imaginary+this.imaginary*e.real)}divide(e){const t=e.magnitudeSquared;return this.setRealImaginary((this.real*e.real+this.imaginary*e.imaginary)/t,(this.imaginary*e.real-this.real*e.imaginary)/t)}negate(){return this.setRealImaginary(-this.real,-this.imaginary)}exponentiate(){return this.setPolar(Math.exp(this.real),this.imaginary)}square(){return this.multiply(this)}sqrt(){const e=this.magnitude;return this.setRealImaginary(Math.sqrt((e+this.real)/2),(this.imaginary>=0?1:-1)*Math.sqrt((e-this.real)/2))}sin(){return this.setRealImaginary(Math.sin(this.real)*Bt.cosh(this.imaginary),Math.cos(this.real)*Bt.sinh(this.imaginary))}cos(){return this.setRealImaginary(Math.cos(this.real)*Bt.cosh(this.imaginary),-Math.sin(this.real)*Bt.sinh(this.imaginary))}conjugate(){return this.setRealImaginary(this.real,-this.imaginary)}getCubeRoots(){const e=this.argument/3,t=this.magnitude,i=Cv.real(Math.cbrt(t));return[i.times(Cv.imaginary(e).exponentiate()),i.times(Cv.imaginary(e+2*Math.PI/3).exponentiate()),i.times(Cv.imaginary(e-2*Math.PI/3).exponentiate())]}toString(){return`Complex(${this.real}, ${this.imaginary})`}static real(e){return new Cv(e,0)}static imaginary(e){return new Cv(0,e)}static createPolar(e,t){return new Cv(e*Math.cos(t),e*Math.sin(t))}static solveLinearRoots(e,t){return e.equals(Cv.ZERO)?t.equals(Cv.ZERO)?null:[]:[t.dividedBy(e).negate()]}static solveQuadraticRoots(e,t,i){if(e.equals(Cv.ZERO))return Cv.solveLinearRoots(t,i);const n=Cv.real(2).multiply(e),r=t.times(t),s=Cv.real(4).multiply(e).multiply(i),o=r.subtract(s).sqrt();return[o.minus(t).divide(n),o.negated().subtract(t).divide(n)]}static solveCubicRoots(e,t,i,n){if(e.equals(Cv.ZERO))return Cv.solveQuadraticRoots(t,i,n);const r=e.times(Cv.real(3)).negate(),s=e.times(e),o=t.times(t),a=o.times(t),l=i.times(i),h=l.times(i),c=e.times(t).times(i),u=o,d=e.times(i).times(Cv.real(3)),p=a.times(Cv.real(2)).add(s.times(n).multiply(Cv.real(27))),m=c.times(Cv.real(9));if(u.equals(d)&&p.equals(m)){const e=t.divide(r);return[e,e,e]}const g=u.minus(d),f=p.minus(m),y=c.times(n).multiply(Cv.real(18)).add(o.times(l)),A=a.times(n).multiply(Cv.real(4)).add(h.times(e).multiply(Cv.real(4))).add(s.times(n).multiply(n).multiply(Cv.real(27)));if(y.equals(A)){const r=c.times(Cv.real(4)).subtract(a.plus(s.times(n).multiply(Cv.real(9)))).divide(e.times(g)),o=e.times(n).multiply(Cv.real(9)).subtract(t.times(i)).divide(g.times(Cv.real(2)));return[r,o,o]}let E;return E=u.equals(d)?f:f.plus(f.times(f).subtract(g.times(g).multiply(g).multiply(Cv.real(4))).sqrt()).divide(Cv.real(2)),E.getCubeRoots().map(e=>t.plus(e).add(g.dividedBy(e)).divide(r))}}wt.register("Complex",Cv),Cv.ZERO=new Cv(0,0),Cv.ONE=new Cv(1,0),Cv.I=Cv.imaginary(1);const _v={grahamScan:(e,t)=>{if(e.length<=2)return e;let i=Number.POSITIVE_INFINITY,n=null;_.each(e,e=>{e.y<=i&&(e.y===i&&n?e.xe.minus(n).angle)).splice(_.indexOf(e,n),1);const r=[n];return _.each(e,e=>{if(n.x!==e.x||n.y!==e.y){for(;i();)r.pop();r.push(e)}function i(){if(r.length<2)return!1;const i=(n=r[r.length-2],s=r[r.length-1],o=e,s.minus(n).crossScalar(o.minus(n)));var n,s,o;return t?i<0:i<=0}}),r}};wt.register("ConvexHull2",_v);class Rv extends jt{}_defineProperty(Rv,"OVER_DAMPED",new(ve=Rv)),_defineProperty(Rv,"UNDER_DAMPED",new ve),_defineProperty(Rv,"CRITICALLY_DAMPED",new ve),_defineProperty(Rv,"UNKNOWN",new ve),_defineProperty(Rv,"enumeration",new Jt(ve));class Nv{constructor(e,t,i,n,r){this.dampingConstant=t/e,this.angularFrequencySquared=i/e,this.discriminant=this.dampingConstant*this.dampingConstant-4*this.angularFrequencySquared,this.solutionType=Rv.UNKNOWN,this.c1=0,this.c2=0,Math.abs(this.discriminant)<1e-5?(this.solutionType=Rv.CRITICALLY_DAMPED,this.angularFrequency=Math.sqrt(this.angularFrequencySquared),this.c1=n,this.c2=r+this.angularFrequency*n):this.discriminant<0?(this.solutionType=Rv.UNDER_DAMPED,this.frequency=.5*Math.sqrt(-this.discriminant),this.c1=n,this.c2=this.dampingConstant*n/(2*this.frequency)+r/this.frequency):(this.solutionType=Rv.OVER_DAMPED,this.positiveRoot=.5*(-this.dampingConstant+Math.sqrt(this.discriminant)),this.negativeRoot=.5*(-this.dampingConstant-Math.sqrt(this.discriminant)),this.c2=(this.negativeRoot*n-r)/(this.negativeRoot-this.positiveRoot),this.c1=n-this.c2)}getValue(e){if(this.solutionType===Rv.CRITICALLY_DAMPED)return(this.c1+this.c2*e)*Math.exp(-this.angularFrequency*e);if(this.solutionType===Rv.UNDER_DAMPED){const t=this.frequency*e;return Math.exp(-this.dampingConstant/2*e)*(this.c1*Math.cos(t)+this.c2*Math.sin(t))}if(this.solutionType===Rv.OVER_DAMPED)return this.c1*Math.exp(this.negativeRoot*e)+this.c2*Math.exp(this.positiveRoot*e);throw new Error("Unknown solution type?")}getDerivative(e){if(this.solutionType===Rv.CRITICALLY_DAMPED)return Math.exp(-this.angularFrequency*e)*(this.c2-this.angularFrequency*(this.c1+this.c2*e));if(this.solutionType===Rv.UNDER_DAMPED){const t=this.frequency*e,i=Math.cos(t),n=Math.sin(t),r=this.frequency*(this.c2*i-this.c1*n),s=.5*this.dampingConstant*(this.c1*i+this.c2*n);return Math.exp(-.5*this.dampingConstant*e)*(r-s)}if(this.solutionType===Rv.OVER_DAMPED)return this.c1*this.negativeRoot*Math.exp(this.negativeRoot*e)+this.c2*this.positiveRoot*Math.exp(this.positiveRoot*e);throw new Error("Unknown solution type?")}}wt.register("DampedHarmonic",Nv);const Mv=Nv;class Lv{constructor(e,t,i){let n;if(i=We({},i),this.points=e,this.constraints=t,this.triangles=[],this.edges=[],this.convexHull=[],0===e.length)return;for(this.vertices=e.map((e,t)=>new Iv(e,t)),n=0;n=0;t--){const i=e.constrainedVertices[t];-1===i.sortedIndex&&(i.constrainedVertices.push(e),e.constrainedVertices.splice(t,1))}}this.bottomVertex=this.vertices[0],this.remainingVertices=this.vertices.slice(1);const r=ti.NOTHING.copy();for(n=e.length-1;n>=0;n--)r.addPoint(e[n]);this.artificialMinVertex=new Iv(new Ht(r.minX-.4*r.width,r.minY-.4*r.height),-1),this.artificialMaxVertex=new Iv(new Ht(r.maxX+.4*r.width,r.minY-.4*r.height),-2),this.edges.push(new Dv(this.artificialMinVertex,this.artificialMaxVertex)),this.edges.push(new Dv(this.artificialMaxVertex,this.bottomVertex)),this.edges.push(new Dv(this.bottomVertex,this.artificialMinVertex)),this.triangles.push(new kv(this.artificialMinVertex,this.artificialMaxVertex,this.bottomVertex,this.edges[1],this.edges[2],this.edges[0])),this.firstFrontEdge=this.edges[1],this.edges[1].connectAfter(this.edges[2]),this.firstHullEdge=this.edges[0]}step(){const e=this.remainingVertices.shift(),t=e.point.x;let i=this.firstFrontEdge;for(;i;){if(t>i.endVertex.point.x){const t=new Dv(i.startVertex,e),n=new Dv(e,i.endVertex);t.connectAfter(n),this.edges.push(t),this.edges.push(n),this.triangles.push(new kv(i.endVertex,i.startVertex,e,t,n,i)),this.reconnectFrontEdges(i,i,t,n),this.legalizeEdge(i),this.addHalfPiHeuristic(t,n),this.constrainEdges(e,t,n);break}if(t===i.endVertex.point.x){const t=i.nextEdge,n=i,r=i.endVertex,s=t.endVertex,o=n.startVertex,a=new Dv(e,s),l=new Dv(o,e),h=new Dv(r,e);l.connectAfter(a),this.edges.push(a),this.edges.push(l),this.edges.push(h),this.triangles.push(new kv(s,r,e,h,a,t)),this.triangles.push(new kv(r,o,e,l,h,n)),this.reconnectFrontEdges(n,t,l,a),this.legalizeEdge(t),this.legalizeEdge(n),this.legalizeEdge(h),this.addHalfPiHeuristic(l,a),this.constrainEdges(e,l,a);break}i=i.nextEdge}}fillBorderTriangle(e,t,i,n,r){const s=new Dv(i,r);return this.edges.push(s),this.triangles.push(new kv(r,n,i,e,s,t)),this.legalizeEdge(e),this.legalizeEdge(t),s}reconnectFrontEdges(e,t,i,n){const r=e.previousEdge,s=t.nextEdge;r?(r.disconnectAfter(),r.connectAfter(i)):this.firstFrontEdge=i,s&&(t.disconnectAfter(),n.connectAfter(s))}addHalfPiHeuristic(e,t){const i=e.endVertex;for(;e.previousEdge&&Bt.triangleAreaSigned(i.point,e.startVertex.point,e.previousEdge.startVertex.point)>0&&i.point.minus(e.startVertex.point).angleBetween(e.previousEdge.startVertex.point.minus(e.startVertex.point))0&&i.point.minus(t.endVertex.point).angleBetween(t.nextEdge.endVertex.point.minus(t.endVertex.point))0,d=Lv.vertexProduct(e,i.endVertex,r)<0;if(!u&&!d){let i,n=t.startVertex;for(a=t.triangles[0];Lv.vertexProduct(e,i=a.getEdgeOppositeFromVertex(e).getOtherVertex(n),r)<0;)a=a.getEdgeOppositeFromVertex(n).getOtherTriangle(a),n=i;if(a.hasVertex(r))break;h.push(a),l=a.getEdgeOppositeFromVertex(e),c.push(l),s.push(a.getEdgeOppositeFromVertex(n)),o.push(a.getEdgeOppositeFromVertex(l.getOtherVertex(n)))}for(;!u&&!d;)if(l.triangles.length>1){const t=l.getOtherTriangle(a);if(t.hasVertex(r)){h.push(t),s.push(t.getNextEdge(l)),o.push(t.getPreviousEdge(l));break}{let i;t.aEdge!==l&&t.aEdge.intersectsConstrainedEdge(e,r)?i=t.aEdge:t.bEdge!==l&&t.bEdge.intersectsConstrainedEdge(e,r)?i=t.bEdge:t.cEdge!==l&&t.cEdge.intersectsConstrainedEdge(e,r)&&(i=t.cEdge),t.getNextEdge(i)===l?s.push(t.getPreviousEdge(i)):o.push(t.getNextEdge(i)),l=i,c.push(l),a=t,h.push(a)}}else r.point.x3;){for(let t=0;t=-1e-10&&o>=-1e-10&&r+o<1+1e-10){g=!0;break}}m=i}if(!g){const l=new Dv(o,a);this.edges.push(l),this.triangles.push(new kv(o,s,a,r,l,n)),i>t?e.splice(t,2,l):(e.splice(t,1,l),e.splice(i,1)),window.triDebug&&window.triDebug(this)}}}3===e.length&&(this.triangles.push(new kv(e[0].getSharedVertex(e[1]),e[1].getSharedVertex(e[2]),e[0].getSharedVertex(e[2]),e[2],e[0],e[1])),window.triDebug&&window.triDebug(this))}finalize(){const e=[];let t=this.firstFrontEdge.nextEdge;for(;t&&t.nextEdge;)e.push(t),t=t.nextEdge;const i=this.firstFrontEdge,n=t;for(let a=0;a1e-10){const n=this.fillBorderTriangle(t,i,t.startVertex,t.endVertex,i.endVertex);e.splice(a,2,n),a=Math.max(a-2,-1),window.triDebug&&window.triDebug(this)}}this.firstFrontEdge=null;const r=[],s=[i];let o=i;for(;o!==n;){const e=o.triangles[0];e.remove(),Ai(this.triangles,e);const t=e.getNonArtificialEdge();if(t){r.push(t);const i=t.getSharedVertex(o);o=e.getEdgeOppositeFromVertex(i)}else s.push(e.getEdgeOppositeFromVertex(o.endVertex)),o=e.getEdgeOppositeFromVertex(o.startVertex);s.push(o)}for(let a=0;a1e-10){const o=this.fillBorderTriangle(e,t,n,i,s);r.splice(a,2,o),a=Math.max(a-2,-1),window.triDebug&&window.triDebug(this)}}for(let a=0;a=1;a--)this.convexHull.push(r[a].getSharedVertex(r[a-1]))}legalizeEdge(e){if(!_.includes(this.edges,e)||2!==e.triangles.length||e.isConstrained)return;const t=e.triangles[0],i=e.triangles[1],n=t.getVertexOppositeFromEdge(e),r=i.getVertexOppositeFromEdge(e);if(Bt.pointInCircleFromPoints(t.aVertex.point,t.bVertex.point,t.cVertex.point,r.point)||Bt.pointInCircleFromPoints(i.aVertex.point,i.bVertex.point,i.cVertex.point,n.point)){t.remove(),i.remove(),Ai(this.triangles,t),Ai(this.triangles,i),Ai(this.edges,e);const s=new Dv(n,r);this.edges.push(s);const o=i.getEdgeOppositeFromVertex(i.getVertexBefore(r)),a=t.getEdgeOppositeFromVertex(t.getVertexAfter(n)),l=t.getEdgeOppositeFromVertex(t.getVertexBefore(n)),h=i.getEdgeOppositeFromVertex(i.getVertexAfter(r));this.triangles.push(new kv(n,r,t.getVertexBefore(n),o,a,s)),this.triangles.push(new kv(r,n,i.getVertexBefore(r),l,h,s)),this.legalizeEdge(o),this.legalizeEdge(a),this.legalizeEdge(l),this.legalizeEdge(h)}}static vertexComparison(e,t){return e=e.point,t=t.point,e.yt.y?1:e.xt.x?1:0}static vertexProduct(e,t,i){const n=t.point.minus(e.point),r=i.point.minus(e.point);return n.crossScalar(r)}}wt.register("DelaunayTriangulation",Lv);class Iv{constructor(e,t){this.point=e,this.index=t,this.sortedIndex=-1,this.constrainedVertices=[]}isArtificial(){return this.index<0}}class Dv{constructor(e,t){this.startVertex=e,this.endVertex=t,this.triangles=[],this.nextEdge=null,this.previousEdge=null,this.isConstrained=!1}isArtificial(){return this.startVertex.isArtificial()||this.endVertex.isArtificial()}connectAfter(e){this.nextEdge=e,e.previousEdge=this}disconnectAfter(){this.nextEdge.previousEdge=null,this.nextEdge=null}addTriangle(e){this.triangles.push(e)}removeTriangle(e){Ai(this.triangles,e)}getSharedTriangle(e){for(let t=0;t4&&void 0!==arguments[4]&&arguments[4];this.a1=e,this.a2=t,this.b1=i,this.b2=n,this.clamp=r}evaluate(e){return Bv(this.a1,this.a2,this.b1,this.b2,e,this.clamp)}inverse(e){return Bv(this.b1,this.b2,this.a1,this.a2,e,this.clamp)}}const Bv=(e,t,i,n,r,s)=>{let o=Bt.linear(e,t,i,n,r);if(s){const e=Math.max(i,n),t=Math.min(i,n);o=Bt.clamp(o,t,e)}return o};wt.register("LinearFunction",qv);const Ov=Math.sqrt(.5),Hv={Array:wt.FastArray,index3:(e,t)=>3*e+t,set3(e,t){t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8]},transpose3(e,t){const i=e[3],n=e[6],r=e[1],s=e[7],o=e[2],a=e[5];t[0]=e[0],t[1]=i,t[2]=n,t[3]=r,t[4]=e[4],t[5]=s,t[6]=o,t[7]=a,t[8]=e[8]},det3:e=>e[0]*e[4]*e[8]+e[1]*e[5]*e[6]+e[2]*e[3]*e[7]-e[2]*e[4]*e[6]-e[1]*e[3]*e[8]-e[0]*e[5]*e[7],mult3(e,t,i){const n=e[0]*t[0]+e[1]*t[3]+e[2]*t[6],r=e[0]*t[1]+e[1]*t[4]+e[2]*t[7],s=e[0]*t[2]+e[1]*t[5]+e[2]*t[8],o=e[3]*t[0]+e[4]*t[3]+e[5]*t[6],a=e[3]*t[1]+e[4]*t[4]+e[5]*t[7],l=e[3]*t[2]+e[4]*t[5]+e[5]*t[8],h=e[6]*t[0]+e[7]*t[3]+e[8]*t[6],c=e[6]*t[1]+e[7]*t[4]+e[8]*t[7],u=e[6]*t[2]+e[7]*t[5]+e[8]*t[8];i[0]=n,i[1]=r,i[2]=s,i[3]=o,i[4]=a,i[5]=l,i[6]=h,i[7]=c,i[8]=u},mult3LeftTranspose(e,t,i){const n=e[0]*t[0]+e[3]*t[3]+e[6]*t[6],r=e[0]*t[1]+e[3]*t[4]+e[6]*t[7],s=e[0]*t[2]+e[3]*t[5]+e[6]*t[8],o=e[1]*t[0]+e[4]*t[3]+e[7]*t[6],a=e[1]*t[1]+e[4]*t[4]+e[7]*t[7],l=e[1]*t[2]+e[4]*t[5]+e[7]*t[8],h=e[2]*t[0]+e[5]*t[3]+e[8]*t[6],c=e[2]*t[1]+e[5]*t[4]+e[8]*t[7],u=e[2]*t[2]+e[5]*t[5]+e[8]*t[8];i[0]=n,i[1]=r,i[2]=s,i[3]=o,i[4]=a,i[5]=l,i[6]=h,i[7]=c,i[8]=u},mult3RightTranspose(e,t,i){const n=e[0]*t[0]+e[1]*t[1]+e[2]*t[2],r=e[0]*t[3]+e[1]*t[4]+e[2]*t[5],s=e[0]*t[6]+e[1]*t[7]+e[2]*t[8],o=e[3]*t[0]+e[4]*t[1]+e[5]*t[2],a=e[3]*t[3]+e[4]*t[4]+e[5]*t[5],l=e[3]*t[6]+e[4]*t[7]+e[5]*t[8],h=e[6]*t[0]+e[7]*t[1]+e[8]*t[2],c=e[6]*t[3]+e[7]*t[4]+e[8]*t[5],u=e[6]*t[6]+e[7]*t[7]+e[8]*t[8];i[0]=n,i[1]=r,i[2]=s,i[3]=o,i[4]=a,i[5]=l,i[6]=h,i[7]=c,i[8]=u},mult3BothTranspose(e,t,i){const n=e[0]*t[0]+e[3]*t[1]+e[6]*t[2],r=e[0]*t[3]+e[3]*t[4]+e[6]*t[5],s=e[0]*t[6]+e[3]*t[7]+e[6]*t[8],o=e[1]*t[0]+e[4]*t[1]+e[7]*t[2],a=e[1]*t[3]+e[4]*t[4]+e[7]*t[5],l=e[1]*t[6]+e[4]*t[7]+e[7]*t[8],h=e[2]*t[0]+e[5]*t[1]+e[8]*t[2],c=e[2]*t[3]+e[5]*t[4]+e[8]*t[5],u=e[2]*t[6]+e[5]*t[7]+e[8]*t[8];i[0]=n,i[1]=r,i[2]=s,i[3]=o,i[4]=a,i[5]=l,i[6]=h,i[7]=c,i[8]=u},mult3Vector3(e,t,i){const n=e[0]*t.x+e[1]*t.y+e[2]*t.z,r=e[3]*t.x+e[4]*t.y+e[5]*t.z,s=e[6]*t.x+e[7]*t.y+e[8]*t.z;i.x=n,i.y=r,i.z=s},swapNegateColumn(e,t,i){const n=e[t],r=e[t+3],s=e[t+6];e[t]=e[i],e[t+3]=e[i+3],e[t+6]=e[i+6],e[i]=-n,e[i+3]=-r,e[i+6]=-s},setIdentity3(e){e[0]=e[4]=e[8]=1,e[1]=e[2]=e[3]=e[5]=e[6]=e[7]=0},setGivens3(e,t,i,n,r){this.setIdentity3(e),e[this.index3(n,n)]=t,e[this.index3(r,r)]=t,e[this.index3(n,r)]=i,e[this.index3(r,n)]=-i},preMult3Givens(e,t,i,n,r){const s=3*n,o=3*r,a=t*e[s+0]+i*e[o+0],l=t*e[o+0]-i*e[s+0],h=t*e[s+1]+i*e[o+1],c=t*e[o+1]-i*e[s+1],u=t*e[s+2]+i*e[o+2],d=t*e[o+2]-i*e[s+2];e[s+0]=a,e[o+0]=l,e[s+1]=h,e[o+1]=c,e[s+2]=u,e[o+2]=d},postMult3Givens(e,t,i,n,r){const s=t*e[n+0]+i*e[r+0],o=t*e[r+0]-i*e[n+0],a=t*e[n+3]+i*e[r+3],l=t*e[r+3]-i*e[n+3],h=t*e[n+6]+i*e[r+6],c=t*e[r+6]-i*e[n+6];e[n+0]=s,e[r+0]=o,e[n+3]=a,e[r+3]=l,e[n+6]=h,e[r+6]=c},applyJacobi3(e,t,i,n){const r=e[3*i+i],s=e[3*i+n],o=e[3*n+n],a=s*s;let l=r-o;l*=l;const h=a0?1:0,s=0;else{const e=1/Math.sqrt(l+h);r=e*o,s=e*a}this.preMult3Givens(t,r,s,n,i),this.postMult3Givens(e,r,s,n,i)},svd3(e,t,i,n,r){const s=i,o=r,a=n;this.mult3LeftTranspose(e,e,a),this.setIdentity3(s),this.jacobiIteration3(a,s,t),this.transpose3(s,o),this.mult3(e,o,a);let l,h=a[0]*a[0]+a[3]*a[3]+a[6]*a[6],c=a[1]*a[1]+a[4]*a[4]+a[7]*a[7],u=a[2]*a[2]+a[5]*a[5]+a[8]*a[8];ht*i+n,transpose(e,t,i,n){for(let r=0;r0?2/e:0,i=this.x*this.x*t,n=this.x*this.y*t,r=this.x*this.z*t,s=this.w*this.x*t,o=this.y*this.y*t,a=this.y*this.z*t,l=this.w*this.y*t,h=this.z*this.z*t,c=this.w*this.z*t;return jr.pool.fetch().columnMajor(1-(o+h),n+c,r-l,n-c,1-(i+h),a+s,r+l,a-s,1-(i+o))}static fromEulerAngles(e,t,i){const n=Math.sin(.5*i),r=Math.cos(.5*i),s=Math.sin(.5*t),o=Math.cos(.5*t),a=Math.sin(.5*e),l=Math.cos(.5*e),h=o*r,c=s*n,u=o*n,d=s*r;return new Gv(h*a+c*l,d*l+u*a,u*l-d*a,h*l-c*a)}static fromRotationMatrix(e){const t=e.m00(),i=e.m01(),n=e.m02(),r=e.m10(),s=e.m11(),o=e.m12(),a=e.m20(),l=e.m21(),h=e.m22(),c=t+s+h;let u;return c>=0?(u=Math.sqrt(c+1),new Gv(.5*(l-o)/u,.5*(n-a)/u,.5*(r-i)/u,.5*u)):t>s&&t>h?(u=Math.sqrt(1+t-s-h),new Gv(.5*u,.5*(r+i)/u,.5*(n+a)/u,.5*(l-o)/u)):s>h?(u=Math.sqrt(1+s-t-h),new Gv(.5*(r+i)/u,.5*u,.5*(l+o)/u,.5*(n-a)/u)):(u=Math.sqrt(1+h-t-s),new Gv(.5*(n+a)/u,.5*(l+o)/u,.5*u,.5*(r-i)/u))}static getRotationQuaternion(e,t){return Gv.fromRotationMatrix(jr.rotateAToB(e,t))}static slerp(e,t,i){if(e.x===t.x&&e.y===t.y&&e.z===t.z&&e.w===t.w)return e;let n=e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w;n<0&&(t=t.negated(),n=-n);let r=1-i,s=i;if(1-n>.1){const e=Math.acos(n),t=1/Math.sin(e);r=Math.sin((1-i)*e)*t,s=Math.sin(i*e)*t}return new Gv(r*e.x+s*t.x,r*e.y+s*t.y,r*e.z+s*t.z,r*e.w+s*t.w)}}Gv.prototype.isQuaternion=!0,wt.register("Quaternion",Gv),Oa.mixInto(Gv,{initialize:Gv.prototype.setXYZW});class Fv{constructor(e,t){this.position=e,this.direction=t}shifted(e){return new Fv(this.pointAtDistance(e),this.direction)}pointAtDistance(e){return this.position.plus(this.direction.timesScalar(e))}distanceToPlane(e){return(e.distance-this.position.dot(e.normal))/this.direction.dot(e.normal)}toString(){return`${this.position.toString()} => ${this.direction.toString()}`}}wt.register("Ray3",Fv);class Uv extends ti{constructor(e,t,i,n){super(e,t,e+i,t+n)}}wt.register("Rectangle",Uv);class zv{constructor(e,t){this.center=e,this.radius=t}intersect(e,t){const i=e.direction,n=e.position,r=n.minus(this.center),s=i.dot(r),o=4*s*s-4*(r.magnitudeSquared-this.radius*this.radius);if(onew Wc(0,0,i.barWidth,0,{centerX:0})),this.borderRectangle=new Wc(0,0,i.barWidth+2*i.borderWidth,0,{fill:i.borderColor,centerX:0}),this.offScaleArrow=new IE(0,0,0,i.barWidth,{fill:i.offScaleArrowFill,stroke:"black",headHeight:i.barWidth/2,headWidth:i.barWidth,tailWidth:3*i.barWidth/5,centerX:0});const n=[this.borderRectangle].concat(this.bars);i.showOffScaleArrow&&n.push(this.offScaleArrow),i.children=n,this.mutate(i),this.update()}update(){const e=this.scaleProperty.value,t=this.offScaleArrow.height+this.offScaleArrowOffset;let i=this.totalRangeProperty.value;i=new zt(i.min<0?i.min+this.borderWidth:i.min,i.max-this.borderWidth),this.showOffScaleArrow&&(i=new zt(i.min<0?i.min+t:i.min,i.max-t));let n=0,r=!1;for(let o=0;o1){s=i.constrainValue(n);const e=this.bars[0];e.fill=this.invalidBarColor,nS(e,0,s),e.visible=!0;for(let t=1;t{const n=We({offScaleArrowFill:void 0===e.offScaleArrowFill?e.entries.length>1?"#bbb":e.entries[0].color:e.offScaleArrowFill},i.barOptions);return new rS(e.entries,t,n)}),this.barLabelNodes=e.map(e=>{const t=new cf({spacing:4});if(e.labelString){const n=new Nf(e.labelString,We({},i.barLabelOptions,{fill:e.labelColor||"black"})),r=new eS(n,{stroke:null,fill:i.labelBackgroundColor,cornerRadius:3,xMargin:0,yMargin:2});t.addChild(r)}return e.labelNode&&t.addChild(e.labelNode),t});const n=new hf({spacing:i.barSpacing,align:"origin",children:this.barNodes}),r=new Lh({children:this.barLabelNodes});for(let l=0;l{o.setTailAndTip(-i.xAxisOptions.minPadding,0,-i.xAxisOptions.minPadding,-e.max),this.localBounds=this.localBounds.withMinY(Math.min(o.bottom,-e.max)).withMaxY(Math.max(i.xAxisOptions.lineWidth/2,-e.min,r.bottom))};t.link(a),this.mutate(i),this.disposeBarChartNode=()=>{t.unlink(a)}}dispose(){this.disposeBarChartNode(),super.dispose()}update(){for(let e=0;e0}removeDataPoints(e){e.forEach(e=>{this.data.slice().forEach((t,i)=>{e.equals(t)&&this.data.splice(i,1)})}),this.emitter.emit()}removeDataPointsAtX(e){e.forEach(e=>{this.data.slice().forEach((t,i)=>{e===t.x&&this.data.splice(i,1)})}),this.emitter.emit()}}Xv.register("DynamicSeries",oS);const aS=oS,lS=Je.byKeys(["SCATTER","LINE"]);class hS extends Yc{constructor(e,t,i,n,r){r=We({plotStyle:lS.LINE},r),super({canvasBounds:i}),this.modelViewTransformProperty=n,this.plotStyle=r.plotStyle,this.dynamicSeries=e;const s=e=>{this.visible=e};e.visibleProperty.link(s);const o=()=>{this.invalidatePaint()};e.addDynamicSeriesListener(o),n.link(o),e.visibleProperty.link(o),this.disposeDynamicSeriesNode=()=>{e.removeDynamicSeriesListener(o),e.visibleProperty.unlink(s),e.visibleProperty.unlink(o),n.unlink(o)}}paintCanvas(e){this.dynamicSeries.visibleProperty.get()&&(this.plotStyle===lS.LINE?this.drawDataLine(e):this.drawDataScatter(e))}drawDataScatter(e){const t=this.dynamicSeries.color instanceof Eo?this.dynamicSeries.color.toCSS():this.dynamicSeries.color;e.fillStyle=t;for(let i=0;i{this.modelViewTransformProperty.unlink(r),n&&this.modelViewTransformProperty.dispose()}}setLineSpacings(e){const t={majorVerticalLineSpacing:null,minorVerticalLineSpacing:null,majorHorizontalLineSpacing:null,minorHorizontalLineSpacing:null};e=We(t,e),this.validateMajorMinorPair(e.majorVerticalLineSpacing,e.minorVerticalLineSpacing),this.validateMajorMinorPair(e.majorHorizontalLineSpacing,e.minorHorizontalLineSpacing),this.majorVerticalLineSpacing===e.majorVerticalLineSpacing&&this.majorHorizontalLineSpacing===e.majorHorizontalLineSpacing||(this.majorVerticalLineSpacing=e.majorVerticalLineSpacing,this.majorHorizontalLineSpacing=e.majorHorizontalLineSpacing,this.drawMajorLines()),this.minorVerticalLineSpacing===e.minorVerticalLineSpacing&&this.minorHorizontalLineSpacing===e.minorHorizontalLineSpacing||(this.minorVerticalLineSpacing=e.minorVerticalLineSpacing,this.minorHorizontalLineSpacing=e.minorHorizontalLineSpacing,this.drawMinorLines())}validateMajorMinorPair(e,t){}setGridWidth(e){this.gridWidth=e,this.drawAllLines()}setGridHeight(e){this.gridHeight=e,this.drawAllLines()}drawMinorLines(){this.drawVerticalLines(this.minorVerticalLineSpacing,uS.MINOR_VERTICAL,this.minorVerticalLines),this.drawHorizontalLines(this.minorHorizontalLineSpacing,uS.MINOR_HORIZONTAL,this.minorHorizontalLines)}drawMajorLines(){this.drawVerticalLines(this.majorVerticalLineSpacing,uS.MAJOR_VERTICAL,this.majorVerticalLines),this.drawHorizontalLines(this.majorHorizontalLineSpacing,uS.MAJOR_HORIZONTAL,this.majorHorizontalLines)}drawVerticalLines(e,t,i){const n=new bs,r=this.modelViewTransformProperty.get();this.getLinePositionsInGrid(e,t).forEach(e=>{const t=r.modelToViewX(e);n.moveTo(t,0),n.lineTo(t,this.gridHeight)}),i.lineDashOffset=-r.modelToViewY(0),i.shape=n}drawHorizontalLines(e,t,i){const n=new bs,r=this.modelViewTransformProperty.get();this.getLinePositionsInGrid(e,t).forEach(e=>{const t=r.modelToViewY(e);n.moveTo(0,t),n.lineTo(this.gridWidth,t)}),i.lineDashOffset=-r.modelToViewX(0),i.shape=n}drawAllLines(){this.drawMajorLines(),this.drawMinorLines()}getLinePositionsInGrid(e,t){const i=[];if(null===e)return i;const n=this.modelViewTransformProperty.get();let r,s,o;if(t===uS.MAJOR_VERTICAL||t===uS.MINOR_VERTICAL?(r=n.viewToModelX(0),s=Math.abs(n.viewToModelDeltaX(this.gridWidth)),o=n.viewToModelX(this.gridWidth)):t!==uS.MAJOR_HORIZONTAL&&t!==uS.MINOR_HORIZONTAL||(r=n.viewToModelY(0),s=Math.abs(n.viewToModelDeltaY(this.gridHeight)),o=n.viewToModelY(this.gridHeight)),r>o){const e=r;r=o,o=e}const a=r+s,l=1e-7*(o-r);for(let h=r+(e-Bt.toFixedNumber(r%e,10))%e;h<=a+l;h+=e)h>a&&(h=a),i.push(h);return i}dispose(){this.disposeGridNode()}}dS.LineType=uS,Xv.register("GridNode",dS);const pS=dS,mS=ev("GRIDDLE");Xv.register("GriddleStrings",mS);const gS={getValuesInRangeWithAnchor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const r=Math.floor((e-n)/i),s=Math.ceil((t-n)/i),o=[];for(let a=r;a<=s;a++){const r=n+a*i;r>=e&&r<=t&&o.push(r)}return o}};Xv.register("GriddleUtils",gS);class fS{constructor(e){e=We({opacity:null,visible:!0,strokeStyle:null,lineWidth:1,radius:null},e),this.opacity=e.opacity,this.radius=e.radius,this.visible=e.visible,this.lineWidth=e.lineWidth,this.strokeStyle=e.strokeStyle}}Xv.register("PointStyle",fS);class yS extends Ht{constructor(e,t,i){super(e,t),this.pointStyle=i}}Xv.register("PointStyledVector2",yS);class AS extends cS{constructor(e,t,i,n){super(e,t,i,n);const r=new Gc(4.5,{fill:e.color,centerX:t,centerY:i.height/2});this.addChild(r);const s=()=>{const t=n.get(),i=e.getLength()-1;if(i>=0){const n=e.getDataPoint(i);isNaN(n.y)?r.centerY=t.modelToViewY(0):r.centerY=t.modelToViewY(n.y)}};e.addDynamicSeriesListener(s),n.link(s),this.disposeSeismographDynamicSeriesNode=()=>{e.removeDynamicSeriesListener(s),n.unlink(s)}}dispose(){this.disposeSeismographDynamicSeriesNode(),super.dispose()}}Xv.register("SeismographDynamicSeriesNode",AS);const ES=AS;class vS extends cf{constructor(e,t,i){i=We({spacing:-2},i);const n=e=>new Uc(0,0,0,6,{stroke:"white",centerX:e}),r=n(0),s=n(t),o=new IE(r.right+1,r.centerY,s.left-1,s.centerY,{fill:"white",stroke:"white",doubleHead:!0,headHeight:3,headWidth:3.5,tailWidth:.5}),a=new Lh({children:[r,s,o]});e.maxWidth=a.width,-i.spacing>e.height&&(i.spacing=-e.height),i.children=[a,e],super(i)}}Xv.register("SpanNode",vS);const SS=vS;class bS extends Lh{constructor(e){super(),e=We({width:500,height:300,modelViewTransformProperty:null,defaultModelXRange:new zt(0,4),defaultModelYRange:new zt(-1,1),cornerRadius:5,verticalAxisLabelNode:null,horizontalAxisLabelNode:null,plotStyle:cS.PlotStyle.LINE,chartPanelOptions:null,showVerticalGridLabels:!0,showHorizontalGridLabels:!0,verticalGridLabelNumberOfDecimalPlaces:0,horizontalGridLabelNumberOfDecimalPlaces:0,gridLabelOptions:{},majorVerticalLineSpacing:1,majorHorizontalLineSpacing:1,gridNodeOptions:{majorLineOptions:{stroke:"lightGray",lineWidth:.8}},tandem:Oi.OPTIONAL},e),this.chartWidth=e.width,this.chartHeight=e.height,this.showVerticalGridLabels=e.showVerticalGridLabels,this.showHorizontalGridLabels=e.showHorizontalGridLabels,this.verticalGridLabelNumberOfDecimalPlaces=e.verticalGridLabelNumberOfDecimalPlaces,this.horizontalGridLabelNumberOfDecimalPlaces=e.horizontalGridLabelNumberOfDecimalPlaces,this.majorHorizontalLineSpacing=e.majorHorizontalLineSpacing,this.majorVerticalLineSpacing=e.majorVerticalLineSpacing,this.plotStyle=e.plotStyle,this.gridLabelOptions=e.gridLabelOptions,e.chartPanelOptions=We({fill:"white",lineWidth:1,stroke:"black",right:this.chartWidth,pickable:!1},e.chartPanelOptions),e.chartPanelOptions=We({clipArea:bs.roundedRectangleWithRadii(0,0,this.chartWidth,this.chartHeight,{topLeft:e.cornerRadius,topRight:e.cornerRadius,bottomLeft:e.cornerRadius,bottomRight:e.cornerRadius})},e.chartPanelOptions);const t=new Wc(0,0,this.chartWidth,this.chartHeight,e.cornerRadius,e.cornerRadius,e.chartPanelOptions);this.modelViewTransformProperty=e.modelViewTransformProperty||new Rn(this.createRectangularModelViewTransform(e.defaultModelXRange,e.defaultModelYRange));const i=We({majorHorizontalLineSpacing:this.majorHorizontalLineSpacing,majorVerticalLineSpacing:this.majorVerticalLineSpacing,modelViewTransformProperty:this.modelViewTransformProperty},e.gridNodeOptions);this.gridNode=new pS(this.chartWidth,this.chartHeight,i),t.addChild(this.gridNode),this.verticalGridLabelLayer=new Lh,this.horizontalGridLabelLayer=new Lh,this.addChild(this.verticalGridLabelLayer),this.addChild(this.horizontalGridLabelLayer);const n=this.chartWidth;this.dynamicSeriesMap=new Map,this.addChild(t),this.chartPanel=t,this.redrawLabels();const r=(e,t)=>{const i=e.matrix.minus(t.matrix),n=i.scaleVector,r=i.translation,s=0!==n.x||0!==r.x;(0!==n.y||0!==r.y)&&this.redrawVerticalLabels(),s&&this.redrawHorizontalLabels()};if(this.modelViewTransformProperty.lazyLink(r),this.scrollingChartNodeDisposeEmitter=new Yn,t.addChild(new Wc(0,0,this.chartWidth,this.chartHeight,e.cornerRadius,e.cornerRadius,{stroke:t.stroke,lineWidth:t.lineWidth,pickable:!1})),e.verticalAxisLabelNode&&(e.verticalAxisLabelNode.mutate({maxHeight:t.height,right:this.bounds.minX-8,centerY:t.centerY}),this.addChild(e.verticalAxisLabelNode)),e.horizontalAxisLabelNode){this.addChild(e.horizontalAxisLabelNode),e.horizontalAxisLabelNode.maxWidth=t.right-8;const i=this.showHorizontalGridLabels?this.horizontalGridLabelLayer.bottom+3:t.bottom+3;e.horizontalAxisLabelNode.mutate({top:i,centerX:n/2+t.bounds.minX}),e.horizontalAxisLabelNode.left<4&&(e.horizontalAxisLabelNode.left=4)}this.mutate(e),this.disposeScrollingChartNode=()=>{this.scrollingChartNodeDisposeEmitter.emit(),this.scrollingChartNodeDisposeEmitter.dispose(),this.modelViewTransformProperty.unlink(r)}}setVerticalGridLabelNumberOfDecimalPlaces(e){this.verticalGridLabelNumberOfDecimalPlaces=e,this.redrawVerticalLabels()}setHorizontalGridLabelNumberOfDecimalPlaces(e){this.horizontalGridLabelNumberOfDecimalPlaces=e,this.redrawHorizontalLabels()}addDynamicSeries(e){const t=new cS(e,this.chartWidth,new ti(0,0,this.chartWidth,this.chartHeight),this.modelViewTransformProperty);this.dynamicSeriesMap.set(e,t),this.chartPanel.addChild(t),this.scrollingChartNodeDisposeEmitter.addListener(()=>t.dispose())}addDynamicSeriesArray(e){e.forEach(this.addDynamicSeries.bind(this))}removeDynamicSeries(e){this.chartPanel.removeChild(this.dynamicSeriesMap.get(e)),this.dynamicSeriesMap.delete(e)}setLineSpacings(e){e=We({majorVerticalLineSpacing:null,majorHorizontalLineSpacing:null,minorVerticalLineSpacing:null,minorHorizontalLineSpacing:null},e),this.majorHorizontalLineSpacing=e.majorHorizontalLineSpacing,this.majorVerticalLineSpacing=e.majorVerticalLineSpacing,this.gridNode.setLineSpacings(e),this.redrawLabels()}redrawVerticalLabels(){if(this.showVerticalGridLabels){const e=[];this.gridNode.getLinePositionsInGrid(this.majorHorizontalLineSpacing,pS.LineType.MAJOR_HORIZONTAL).forEach(t=>{const i=this.modelViewTransformProperty.get().modelToViewY(t),n=this.chartPanel.localToParentPoint(new Ht(this.gridNode.bounds.left,i)),r=new qc(Bt.toFixed(t,this.verticalGridLabelNumberOfDecimalPlaces),We({rightCenter:n.plusXY(-3,0)},this.gridLabelOptions));e.push(r)}),this.verticalGridLabelLayer.children=e}}redrawHorizontalLabels(){if(this.showHorizontalGridLabels){const e=[];this.gridNode.getLinePositionsInGrid(this.majorVerticalLineSpacing,pS.LineType.MAJOR_VERTICAL).forEach(t=>{const i=this.modelViewTransformProperty.get().modelToViewX(t),n=this.chartPanel.localToParentPoint(new Ht(i,this.gridNode.bounds.bottom)),r=new qc(Bt.toFixed(t,this.horizontalGridLabelNumberOfDecimalPlaces),We({centerTop:n.plusXY(0,3)},this.gridLabelOptions));e.push(r)}),this.horizontalGridLabelLayer.children=e}}redrawLabels(){this.redrawVerticalLabels(),this.redrawHorizontalLabels()}setPlotStyle(e){this.plotStyle=e,this.dynamicSeriesMap.forEach(t=>{t.setPlotStyle(e)})}createRectangularModelViewTransform(e,t){return Lm.createRectangleInvertedYMapping(new ti(e.min,t.min,e.max,t.max),new ti(0,0,this.chartWidth,this.chartHeight))}dispose(){this.disposeScrollingChartNode(),super.dispose()}}Xv.register("XYChartNode",bS);const TS=bS;class wS extends TS{constructor(e,t,i,n){const r=new Rn(Lm.createIdentity());(n=We({verticalRanges:[new zt(-1,1)],initialVerticalRangeIndex:0,verticalRangeProperty:new Rn(new zt(-1,1)),horizontalRangeProperty:new Rn(new zt(0,4)),numberHorizontalLines:5,numberVerticalLines:5,horizontalAxisLabelNode:null,showHorizontalGridLabels:!1,scrollGridNode:!1,gridLabelOptions:{fill:"white"},gridNodeOptions:{majorLineOptions:{stroke:"lightGray",lineDash:[5,5],lineWidth:.8,lineDashOffset:2.5}},rightMargin:10,tandem:Oi.OPTIONAL},n)).gridNodeOptions.modelViewTransformProperty=r,super(n),this.rightMargin=n.rightMargin,this.verticalRangeProperty=n.verticalRangeProperty,this.horizontalRangeProperty=n.horizontalRangeProperty,this.addDynamicSeriesArray(t);const s=new Rn(n.initialVerticalRangeIndex,{isValidValue:e=>e>=0&&e{this.verticalRangeProperty.set(n.verticalRanges[e])};s.link(o);const a=this.chartWidth-n.rightMargin,l=pr.multilink([e,this.verticalRangeProperty],(e,t)=>{const i=Lm.createRectangleInvertedYMapping(new ti(e-4,t.min,e,t.max),new ti(0,0,a,this.chartHeight));if(this.modelViewTransformProperty.set(i),n.scrollGridNode)r.set(i);else{const e=Lm.createRectangleInvertedYMapping(new ti(0,t.min,4,t.max),new ti(0,0,a,this.chartHeight));e.matrix.equals(r.get().matrix)||r.set(e)}}),h=r.get().modelToViewDeltaX(this.majorVerticalLineSpacing),c=new SS(i,h,{left:this.chartPanel.left,top:this.chartPanel.bottom+2});n.horizontalAxisLabelNode&&n.horizontalAxisLabelNode.left{const t=e.getLength()/(n.numberHorizontalLines-1),i=this.horizontalRangeProperty.get().getLength()/(n.numberVerticalLines-1);this.setLineSpacings({majorVerticalLineSpacing:i,majorHorizontalLineSpacing:t})}),this.resetSeismographNode=()=>{s.reset()},this.disposeSeismographNode=()=>{s.unlink(o),pr.unmultilink(l)}}addDynamicSeries(e){const t=new ES(e,this.chartWidth-this.rightMargin,new ti(0,0,this.chartWidth,this.chartHeight),this.modelViewTransformProperty);this.chartPanel.addChild(t),this.scrollingChartNodeDisposeEmitter.addListener(()=>t.dispose())}reset(){this.resetSeismographNode()}dispose(){this.disposeSeismographNode(),super.dispose()}}Xv.register("SeismographNode",wS);const VS=wS,PS=new Eo(50,50,200,.2),xS=Eo.DARK_GRAY,CS=new Eo(180,180,230),_S=Eo.DARK_GRAY;class RS extends TS{constructor(e){super(e=We({cursorOptions:null,chartPanelOptions:{pickable:!0},tandem:Oi.OPTIONAL},e)),this._cursorVisibleOverride=null,this.cursorValue=0,this.minRecordedXValue=0,this.maxRecordedXValue=0,this.dynamicSeriesListenerMap=new Map,this.dynamicSeriesArray=[],this.chartCursor=new NS(this,this.modelViewTransformProperty,e.cursorOptions),this.chartPanel.addChild(this.chartCursor),this.updateCursor()}addDynamicSeries(e){super.addDynamicSeries(e),this.dynamicSeriesArray.push(e);const t=()=>{this.updateMinMaxRecordedValues(),this.updateCursor()};this.dynamicSeriesListenerMap.set(e,t),e.addDynamicSeriesListener(t)}removeDynamicSeries(e){super.removeDynamicSeries(e);const t=this.dynamicSeriesArray.indexOf(e);this.dynamicSeriesArray.splice(t,1),e.removeDynamicSeriesListener(this.dynamicSeriesListenerMap.get(e)),this.dynamicSeriesListenerMap.delete(e)}setCursorValue(e){const t=this.modelViewTransformProperty.get(),i=t.viewToModelX(0),n=t.viewToModelX(this.chartWidth+this.chartCursor.width/2);this.cursorValue=Bt.clamp(e,i,n),this.updateCursor()}getCursorValue(){return this.cursorValue}resetCursor(){this.chartCursor.reset()}setCursorVisibleOverride(e){this._cursorVisibleOverride=e,this.updateCursorVisibility()}updateCursor(){this.updateCursorVisibility(),this.chartCursor.isVisible()&&this.updateCursorPosition()}updateCursorPosition(){this.moveCursorToValue(this.cursorValue)}updateCursorVisibility(){const e=this.chartCursor.visible;if("boolean"==typeof this._cursorVisibleOverride)this.chartCursor.setVisible(this._cursorVisibleOverride);else{const e=this.modelViewTransformProperty.get().viewToModelX(this.chartWidth+this.chartCursor.width/2),t=this.modelViewTransformProperty.get().viewToModelX(0),i=this.cursorValue>=t&&this.cursorValue<=e,n=this.hasData(),r=i&&n;this.chartCursor.setVisible(r)}!this.chartCursor.visible&&e&&this.chartCursor.interruptDrag()}hasData(){return _.some(this.dynamicSeriesArray,e=>e.hasData())}moveCursorToValue(e){const t=this.modelViewTransformProperty.get().modelToViewX(e);this.chartCursor.centerX=Bt.clamp(t,0,this.chartWidth),this.chartCursor.centerY=this.gridNode.centerY}updateMinMaxRecordedValues(){let e=Number.POSITIVE_INFINITY,t=Number.NEGATIVE_INFINITY;this.dynamicSeriesArray.forEach(i=>{if(i.getLength()>0){const n=i.getDataPoint(0).x,r=i.getDataPoint(i.getLength()-1).x;nt&&(t=r)}}),this.minRecordedXValue=e,this.maxRecordedXValue=t}}class NS extends Wc{constructor(e,t,i){i=We({startDrag:()=>{},endDrag:()=>{},drag:()=>{},includeDragCue:!1,tandem:Oi.OPTIONAL},i);const n=.013*e.chartWidth,r=e.chartHeight;super(0,-r,n,r,0,0,{cursor:"ew-resize",fill:PS,stroke:xS,lineWidth:.4,lineDash:[4,4]}),this.chart=e,this.modelViewTransformProperty=t,this.mouseArea=this.localBounds.dilatedX(12),this.touchArea=this.localBounds.dilatedX(12),this.includeDragCue=i.includeDragCue,this.includeDragCue&&(this.dragCueArrowNode=new IE(2*-n,0,2*n,0,{doubleHead:!0,headWidth:12,headHeight:10,fill:CS,stroke:_S,center:this.center.plusXY(0,.4*r)}),this.addChild(this.dragCueArrowNode));const s=new Lh,o=.05*r;for(let a=0;a<3;a++){const e=new MS(n/2,PS);e.top=a*(e.height+o),s.addChild(e)}s.center=this.center,this.addChild(s),this.dragListener=new dm({start:(e,t)=>{i.startDrag()},drag:(e,t)=>{const n=t.parentPoint.x;let r=this.modelViewTransformProperty.get().viewToModelX(n);r=Bt.clamp(r,this.chart.minRecordedXValue,this.chart.maxRecordedXValue),this.chart.setCursorValue(r),i.drag()},end:()=>{i.endDrag(),this.includeDragCue&&(this.dragCueArrowNode.visible=!1)},tandem:i.tandem.createTandem("dragListener")}),this.addInputListener(this.dragListener)}interruptDrag(){this.dragListener.interrupt()}reset(){this.includeDragCue&&(this.dragCueArrowNode.visible=!0)}}class MS extends Gc{constructor(e,t,i){i=We({lineWidth:.5},i);const n=t.darkerColor(.9),r=new Eo(n.getRed(),n.getGreen(),n.getBlue(),t.getAlpha()),s=t.brighterColor(.9),o=new Eo(s.getRed(),s.getGreen(),s.getBlue(),t.getAlpha());super(e/2-i.lineWidth,{fill:r,stroke:o,lineWidth:i.lineWidth})}}Xv.register("XYCursorChartNode",RS);const LS=new class{constructor(){this.pendingLocks=[],this.loadComplete=!1,this.listeners=[]}reset(){this.loadComplete=!1}addListener(e){this.listeners.push(e)}proceedIfReady(){0===this.pendingLocks.length&&(this.loadComplete=!0,this.listeners.forEach(e=>e()))}createLock(e){return this.pendingLocks.push(e),()=>{Ai(this.pendingLocks,e),this.proceedIfReady()}}};Ue.register("asyncLoader",LS);const IS=LS,DS=new Image,kS=IS.createLock(DS);DS.onload=kS,DS.src="data:image/png;base64,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";const qS=DS,BS=ev("SCENERY_PHET");ME.register("SceneryPhetStrings",BS);const OS=BS;class HS extends Lh{constructor(e,t){var i,n;const r=$e()({basePositionProperty:new xg(new Ht(0,0)),tipPositionProperty:new xg(new Ht(1,0)),hasValue:!0,dragBounds:ti.EVERYTHING,textPosition:new Ht(0,30),modelViewTransform:Lm.createIdentity(),significantFigures:1,textColor:"white",textBackgroundColor:null,textBackgroundXMargin:4,textBackgroundYMargin:2,textBackgroundCornerRadius:2,textMaxWidth:200,textFont:new Jv({size:16,weight:"bold"}),baseScale:.8,lineColor:"gray",tapeLineWidth:2,tipCircleColor:"rgba(0,0,0,0.1)",tipCircleRadius:10,crosshairColor:"rgb(224, 95, 32)",crosshairSize:5,crosshairLineWidth:2,isBaseCrosshairRotating:!0,isTipCrosshairRotating:!0,isTipDragBounded:!0,interactive:!0,baseDragStarted:_.noop,baseDragEnded:_.noop,keyboardDragListenerOptions:{baseDragVelocity:600,baseShiftDragVelocity:300,tipDragVelocity:600,tipShiftDragVelocity:150}},t);super(),this.unitsProperty=e,this.significantFigures=r.significantFigures,this.dragBoundsProperty=new Rn(r.dragBounds),this.modelViewTransformProperty=new Rn(r.modelViewTransform),this.isTipDragBounded=r.isTipDragBounded,this.basePositionProperty=r.basePositionProperty,this.tipPositionProperty=r.tipPositionProperty,this._isTipUserControlledProperty=new Rn(!1),this.isTipUserControlledProperty=this._isTipUserControlledProperty,this._isBaseUserControlledProperty=new Rn(!1),this.isBaseUserControlledProperty=this._isBaseUserControlledProperty,this.measuredDistanceProperty=new ir([this.basePositionProperty,this.tipPositionProperty],(e,t)=>e.distance(t),{tandem:null===(i=r.tandem)||void 0===i?void 0:i.createTandem("measuredDistanceProperty"),phetioDocumentation:"The distance measured by the measuring tape",phetioValueType:bt,units:this.basePositionProperty.units});const s=(new bs).moveTo(-r.crosshairSize,0).moveTo(-r.crosshairSize,0).lineTo(r.crosshairSize,0).moveTo(0,-r.crosshairSize).lineTo(0,r.crosshairSize),o=new Cc(s,{stroke:r.crosshairColor,lineWidth:r.crosshairLineWidth}),a=new Cc(s,{stroke:r.crosshairColor,lineWidth:r.crosshairLineWidth}),l=new Gc(r.tipCircleRadius,{fill:r.tipCircleColor}),h=new Ou({interactiveHighlightEnabled:!1});this.baseImage=new Pc(qS,{scale:r.baseScale,cursor:"pointer",tagName:"div",focusable:!0,ariaRole:"application",innerContent:OS.a11y.measuringTapeStringProperty,ariaLabel:OS.a11y.measuringTapeStringProperty}),h.addChild(this.baseImage);const c=new Uc(this.basePositionProperty.value,this.tipPositionProperty.value,{stroke:r.lineColor,lineWidth:r.tapeLineWidth}),u=new Ou({children:[l,a],cursor:"pointer",interactiveHighlightEnabled:!1,tagName:"div",focusable:!0,ariaRole:"application",innerContent:OS.a11y.measuringTapeTipStringProperty,ariaLabel:OS.a11y.measuringTapeTipStringProperty}),d=new mr([this.unitsProperty,this.measuredDistanceProperty,OS.measuringTapeReadoutPatternStringProperty],(e,t,i)=>{const n=Bt.toFixed(e.multiplier*t,this.significantFigures);return zu.fillIn(i,{distance:n,units:e.name})},{tandem:null===(n=r.tandem)||void 0===n?void 0:n.createTandem("readoutStringProperty"),phetioDocumentation:"The text content of the readout on the measuring tape"});this.valueNode=new qc(d,{font:r.textFont,fill:r.textColor,maxWidth:r.textMaxWidth}),this.valueBackgroundNode=new Wc(0,0,1,1,{cornerRadius:r.textBackgroundCornerRadius,fill:r.textBackgroundColor});const p=()=>{const e=this.valueNode.width+2*r.textBackgroundXMargin,t=this.valueNode.height+2*r.textBackgroundYMargin;this.valueBackgroundNode.setRect(0,0,e,t),this.valueBackgroundNode.center=this.valueNode.center};let m;if(this.valueNode.boundsProperty.lazyLink(p),p(),u.touchArea=u.localBounds.dilated(15),this.baseImage.touchArea=this.baseImage.localBounds.dilated(20),this.baseImage.mouseArea=this.baseImage.localBounds.dilated(10),this.addChild(c),this.addChild(o),this.addChild(h),this.valueContainer=new Lh({children:[this.valueBackgroundNode,this.valueNode]}),r.hasValue&&this.addChild(this.valueContainer),this.addChild(u),this.baseDragListener=null,r.interactive){var g,f,y,A;h.interactiveHighlightEnabled=!0,u.interactiveHighlightEnabled=!0;const e=()=>{this.moveToFront(),r.baseDragStarted(),this._isBaseUserControlledProperty.value=!0},t=()=>{this._isBaseUserControlledProperty.value=!1,r.baseDragEnded()},i=e=>{if(!this.isTipUserControlledProperty.value){const t=e.plus(this.tipPositionProperty.value);if(r.isTipDragBounded){const e=this.dragBoundsProperty.value.closestPointTo(t);this.tipPositionProperty.set(e)}else this.tipPositionProperty.set(t)}};this.baseDragListener=new dm({tandem:null===(g=r.tandem)||void 0===g?void 0:g.createTandem("baseDragListener"),start:t=>{e();const i=this.modelViewTransformProperty.value.modelToViewPosition(this.basePositionProperty.value);m=t.currentTarget.globalToParentPoint(t.pointer.point).minus(i)},drag:(e,t)=>{const n=t.currentTarget.globalToParentPoint(e.pointer.point).minus(m),r=this.modelViewTransformProperty.value.viewToModelPosition(n),s=this.dragBoundsProperty.value.closestPointTo(r),o=s.minus(this.basePositionProperty.value);this.basePositionProperty.set(s),i(o)},end:t}),this.baseImage.addInputListener(this.baseDragListener);const n=new Jm({tandem:null===(f=r.tandem)||void 0===f?void 0:f.createTandem("baseKeyboardDragListener"),positionProperty:this.basePositionProperty,transform:this.modelViewTransformProperty,dragBoundsProperty:this.dragBoundsProperty,dragVelocity:r.keyboardDragListenerOptions.baseDragVelocity,shiftDragVelocity:r.keyboardDragListenerOptions.baseShiftDragVelocity,start:e,drag:i,end:t});this.baseImage.addInputListener(n);const s=()=>{this._isTipUserControlledProperty.value=!1};let o;const a=new dm({tandem:null===(y=r.tandem)||void 0===y?void 0:y.createTandem("tipDragListener"),start:e=>{this.moveToFront(),this._isTipUserControlledProperty.value=!0;const t=this.modelViewTransformProperty.value.modelToViewPosition(this.tipPositionProperty.value);o=e.currentTarget.globalToParentPoint(e.pointer.point).minus(t)},drag:(e,t)=>{const i=t.currentTarget.globalToParentPoint(e.pointer.point).minus(o),n=this.modelViewTransformProperty.value.viewToModelPosition(i);r.isTipDragBounded?this.tipPositionProperty.value=this.dragBoundsProperty.value.closestPointTo(n):this.tipPositionProperty.value=n},end:s});u.addInputListener(a);const l=new Jm({tandem:null===(A=r.tandem)||void 0===A?void 0:A.createTandem("tipKeyboardDragListener"),positionProperty:this.tipPositionProperty,dragBoundsProperty:r.isTipDragBounded?this.dragBoundsProperty:null,transform:this.modelViewTransformProperty,dragVelocity:r.keyboardDragListenerOptions.tipDragVelocity,shiftDragVelocity:r.keyboardDragListenerOptions.tipShiftDragVelocity,start:()=>{this.moveToFront(),this._isTipUserControlledProperty.value=!0},end:s});u.addInputListener(l)}const E=()=>{this.valueNode.centerTop=this.baseImage.center.plus(r.textPosition.times(r.baseScale))};d.link(E);const v=pr.multilink([this.measuredDistanceProperty,e,this.modelViewTransformProperty,this.tipPositionProperty,this.basePositionProperty],(e,t,i,n,s)=>{const a=i.modelToViewPosition(n),l=i.modelToViewPosition(s),h=this.baseImage.getRotation(),d=Math.atan2(a.y-l.y,a.x-l.x),p=d-h;o.center=l,u.center=a,this.baseImage.setRotation(0),this.baseImage.rightBottom=l,this.baseImage.rotateAround(this.baseImage.rightBottom,d),c.setLine(l.x,l.y,a.x,a.y),r.isTipCrosshairRotating&&u.rotateAround(a,p),r.isBaseCrosshairRotating&&o.rotateAround(l,p),E()});this.disposeMeasuringTapeNode=()=>{v.dispose(),d.dispose(),h.dispose(),u.dispose()},this.mutate(r)}reset(){this.basePositionProperty.reset(),this.tipPositionProperty.reset()}dispose(){this.disposeMeasuringTapeNode(),super.dispose()}setDragBounds(e){const t=e.copy();this.dragBoundsProperty.value=t,this.basePositionProperty.value=t.closestPointTo(this.basePositionProperty.value),this.isTipDragBounded&&(this.tipPositionProperty.value=t.closestPointTo(this.tipPositionProperty.value))}getDragBounds(){return this.dragBoundsProperty.value.copy()}getLocalBaseCenter(){return new Ht(-this.baseImage.imageWidth/2,-this.baseImage.imageHeight/2)}getLocalBaseBounds(){return this.baseImage.bounds.copy()}startBaseDrag(e){this.baseDragListener&&this.baseDragListener.press(e)}static createIcon(e){const t=$e()({tapeLength:30},e),i=new HS(new Rn({name:"",multiplier:1}),{tipPositionProperty:new xg(new Ht(t.tapeLength,0)),hasValue:!1,interactive:!1});t.children=[i];const n=new Lh(t);return i.toImage(e=>n.setChildren([new Pc(e)])),n}}ME.register("MeasuringTapeNode",HS);const YS=HS,GS=(e,t)=>{const i=t.replace(new RegExp("^.*,"),""),n=atob(i),r=new Uint8Array(n.length);for(let s=0;s{ZS||(KS(),ZS=!0)},eb=jS.decodeAudioData(QS.buffer,e=>{null===JS.audioBufferProperty.value&&(JS.audioBufferProperty.set(e),$S())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),JS.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),$S()});eb&&eb.then(e=>{null===JS.audioBufferProperty.value&&(JS.audioBufferProperty.set(e),$S())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),$S()});const tb=JS,ib=[],nb=[],rb={addStateChangeListener(e,t){let i,n=ib.indexOf(e);-1===n?(ib.push(e),n=ib.length-1,i=[],nb.push(i),e.onstatechange=()=>{_.clone(i).forEach(t=>{t(e.state)})}):i=nb[n],i.push(t)},removeStateChangeListener(e,t){const i=ib.indexOf(e),n=nb[i],r=n.indexOf(t);n.splice(r,1)},hasListener(e,t){let i=!1;const n=ib.indexOf(e);if(n>=0){const e=nb[n];e&&(i=e.includes(t))}return i}};FS.register("audioContextStateChangeMonitor",rb);const sb=rb,ob={DEFAULT_PARAM_CHANGE_TIME_CONSTANT:.015,DEFAULT_LINEAR_GAIN_CHANGE_TIME:.1,TWELFTH_ROOT_OF_TWO:Math.pow(2,1/12)};FS.register("soundConstants",ob);const ab=ob,lb={detectSoundBounds:e=>{const t=e.length,i=[],n=[];for(let s=0;s{let n,r=0,s=!1;for(n=0;ni&&e[n+1]>e[n]&&(r=n,s=!0);let o=0;for(s=!1,n=r;n>0&&!s;n--){const t=e[n];t<=0&&(o=0===t?n:n+1,s=!0)}let a=0,l=0;for(n=0;n{let n,r=t-1,s=!1;for(n=t-1;n>0&&!s;n--)e[n]<=-i&&e[n-1]=0&&(o=n,s=!0);let a=0,l=0;for(n=o;n{this.fullyEnabledProperty.value=_.every(this.enableControlProperties,e=>e.value)};this.enableControlProperties.addItemAddedListener(e=>{e.link(i);const t=n=>{n===e&&(n.unlink(i),this.enableControlProperties.removeItemRemovedListener(t))};this.enableControlProperties.addItemRemovedListener(t)}),t.enableControlProperties.forEach(e=>{this.addEnableControlProperty(e)}),this.locallyEnabledProperty=new Nn(!0),this.addEnableControlProperty(this.locallyEnabledProperty),this.mainGainNode=this.audioContext.createGain(),this.mainGainNode.gain.setValueAtTime(this._outputLevel,this.audioContext.currentTime),t.connectImmediately&&this.mainGainNode.connect(this.audioContext.destination),this.fullyEnabledProperty.link(e=>{const t=e?0:this._outputLevel,i=e?this._outputLevel:0,n=this.audioContext.currentTime;this.mainGainNode.gain.setValueAtTime(t,n),this.mainGainNode.gain.linearRampToValueAtTime(i,this.audioContext.currentTime+ab.DEFAULT_LINEAR_GAIN_CHANGE_TIME)}),this.soundSourceDestination=this.mainGainNode;for(let n=t.additionalAudioNodes.length-1;n>=0;n--){const e=t.additionalAudioNodes[n];e.connect(this.soundSourceDestination),this.soundSourceDestination=e}Oi.PHET_IO_ENABLED&&!t.enabledDuringPhetioStateSetting&&this.addEnableControlProperty(pb),this.disposeEmitter.addListener(()=>{this.enableControlProperties.clear()})}connect(e){this.mainGainNode.connect(e),this.connectionList.push(e)}disconnect(e){this.mainGainNode.disconnect(e),this.connectionList=_.without(this.connectionList,e)}isConnectedTo(e){return this.connectionList.includes(e)}setOutputLevel(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:db;if(e!==this._outputLevel){const i=this.audioContext.currentTime;this.fullyEnabledProperty.value&&(this.mainGainNode.gain.cancelScheduledValues(i),0===t?this.mainGainNode.gain.setValueAtTime(e,i):"running"===this.audioContext.state?this.mainGainNode.gain.setTargetAtTime(e,i,t):this.mainGainNode.gain.linearRampToValueAtTime(e,i+ab.DEFAULT_LINEAR_GAIN_CHANGE_TIME)),this._outputLevel=e}}set outputLevel(e){this.setOutputLevel(e)}get outputLevel(){return this.getOutputLevel()}getOutputLevel(){return this._outputLevel}addEnableControlProperty(e){this.enableControlProperties.push(e)}removeEnableControlProperty(e){this.enableControlProperties.remove(e)}get locallyEnabled(){return this.locallyEnabledProperty.value}set locallyEnabled(e){this.locallyEnabledProperty.value=e}get fullyEnabled(){return this.fullyEnabledProperty.value}}FS.register("SoundGenerator",mb);const gb=mb,fb=ab.DEFAULT_PARAM_CHANGE_TIME_CONSTANT;class yb extends gb{constructor(e,t){const i=$e()({loop:!1,trimSilence:!0,initialPlaybackRate:1,initiateWhenDisabled:!1,rateChangesAffectPlayingSounds:!0},t);if(super(i),this.wrappedAudioBuffer=e,this.loop=i.loop,this.rateChangesAffectPlayingSounds=i.rateChangesAffectPlayingSounds,this.initiateWhenDisabled=i.initiateWhenDisabled,this.soundStart=0,this.soundEnd=null,i.trimSilence){const e=t=>{if(t){const i=ub.detectSoundBounds(t);this.soundStart=i.soundStart,this.soundEnd=i.soundEnd,this.wrappedAudioBuffer.audioBufferProperty.unlink(e)}};this.wrappedAudioBuffer.audioBufferProperty.link(e)}this.activeBufferSources=[],this.localGainNode=this.audioContext.createGain(),this.localGainNode.connect(this.soundSourceDestination),this._playbackRate=i.initialPlaybackRate,this.isPlayingProperty=new Nn(!1),this.timeOfDeferredPlayRequest=Number.NEGATIVE_INFINITY,this.audioContextStateChangeListener=e=>{"running"===e&&((this.loop||(Date.now()-this.timeOfDeferredPlayRequest)/1e3<.2)&&this.play(.1),sb.removeStateChangeListener(this.audioContext,this.audioContextStateChangeListener))},this.fullyEnabledProperty.lazyLink(e=>{this.loop||e||this.stop()})}play(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if("running"===this.audioContext.state&&this.wrappedAudioBuffer.audioBufferProperty.value){const t=this.audioContext.currentTime;if(this.loop&&!this.isPlayingProperty.get()||!this.loop&&(this.fullyEnabled||this.initiateWhenDisabled)){const i=this.audioContext.createBufferSource();i.buffer=this.wrappedAudioBuffer.audioBufferProperty.value,i.loop=this.loop,i.loopStart=this.soundStart,this.soundEnd&&(i.loopEnd=this.soundEnd),this.localGainNode.gain.cancelScheduledValues(t),this.localGainNode.gain.setValueAtTime(1,t),i.connect(this.soundSourceDestination),this.activeBufferSources.push(i),this.loop||(i.onended=()=>{const e=this.activeBufferSources.indexOf(i);e>-1&&this.activeBufferSources.splice(e,1),this.isPlayingProperty.value=this.activeBufferSources.length>0}),i.playbackRate.setValueAtTime(this._playbackRate,t),i.start(t+e,this.soundStart),this.isPlayingProperty.value=!0}}else"suspended"===this.audioContext.state&&(this.timeOfDeferredPlayRequest=Date.now(),sb.hasListener(this.audioContext,this.audioContextStateChangeListener)||sb.addStateChangeListener(this.audioContext,this.audioContextStateChangeListener))}stop(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:.1;const t=e>0?e/4.61:ab.DEFAULT_PARAM_CHANGE_TIME_CONSTANT,i=this.audioContext.currentTime,n=i+e;this.localGainNode.gain.cancelScheduledValues(i),this.localGainNode.gain.setTargetAtTime(0,i,t),this.activeBufferSources.forEach(e=>{e.stop(n)}),this.activeBufferSources.length=0,this.isPlayingProperty.value=!1,sb.hasListener(this.audioContext,this.audioContextStateChangeListener)&&sb.removeStateChangeListener(this.audioContext,this.audioContextStateChangeListener)}setPlaybackRate(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:fb;if(this.rateChangesAffectPlayingSounds){const i=this.audioContext.currentTime;this.activeBufferSources.forEach(n=>{n.playbackRate.cancelScheduledValues(i),n.playbackRate.setTargetAtTime(e,i,t)})}this._playbackRate=e}getPlaybackRate(){return this._playbackRate}get playbackRate(){return this.getPlaybackRate()}get isPlaying(){return this.isPlayingProperty.value}getNumberOfPlayingInstances(){return this.activeBufferSources.length}}FS.register("SoundClip",yb);const Ab=yb,Eb="data:audio/mpeg;base64,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",vb=GS(jS,Eb),Sb=IS.createLock(Eb),bb=new zS;let Tb=!1;const wb=()=>{Tb||(Sb(),Tb=!0)},Vb=jS.decodeAudioData(vb.buffer,e=>{null===bb.audioBufferProperty.value&&(bb.audioBufferProperty.set(e),wb())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),bb.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),wb()});Vb&&Vb.then(e=>{null===bb.audioBufferProperty.value&&(bb.audioBufferProperty.set(e),wb())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),wb()});const Pb=bb;class xb extends jt{}_defineProperty(xb,"BASIC",new(be=xb)),_defineProperty(xb,"EXTRA",new be),_defineProperty(xb,"enumeration",new Jt(be,{phetioDocumentation:"describes whether a sound is considered part of the basic or the extra sounds for the sim"})),FS.register("SoundScope",xb);const Cb=xb,_b=ab.DEFAULT_LINEAR_GAIN_CHANGE_TIME;const Rb=new class extends Zi{constructor(e){super({tandem:e,phetioState:!1,phetioDocumentation:"Controls the simulation's sound. For sims that do not support sound, this element and its children can be ignored."}),_defineProperty(this,"viewNodeDisplayedPropertyMap",new Map),this.enabledProperty=new Nn(phet.chipper.queryParameters.supportsSound,{tandem:null==e?void 0:e.createTandem("enabledProperty"),phetioState:!1,phetioDocumentation:"Determines whether sound is enabled. Supported only if this sim supportsSound=true."}),this.extraSoundEnabledProperty=new Nn(phet.chipper.queryParameters.extraSoundInitiallyEnabled,{tandem:null==e?void 0:e.createTandem("extraSoundEnabledProperty"),phetioState:!1,phetioDocumentation:"Determines whether extra sound is enabled. Extra sound is additional sounds that can serve to improve the learning experience for individuals with visual disabilities. Note that not all simulations that support sound also support extra sound. Also note that the value is irrelevant when enabledProperty is false."}),this.soundGeneratorInfoArray=[],this._mainOutputLevel=1,this._reverbLevel=.02,this.gainNodesForCategories=new Map,this.duckingProperties=er(),this.initialized=!1,this.soundGeneratorsAwaitingAdd=[],this.mainGainNode=null,this.duckingGainNode=null,this.convolver=null,this.reverbGainNode=null,this.dryGainNode=null}initialize(e,t,i,n,r,s){const o=$e()({categories:["sim-specific","user-interface"]},s),a=jS.currentTime,l=jS.createDynamicsCompressor();l.threshold.setValueAtTime(-6,a),l.knee.setValueAtTime(5,a),l.ratio.setValueAtTime(12,a),l.attack.setValueAtTime(0,a),l.release.setValueAtTime(.25,a),l.connect(jS.destination),this.duckingGainNode=jS.createGain(),this.duckingGainNode.connect(l),this.mainGainNode=jS.createGain(),this.mainGainNode.connect(this.duckingGainNode),this.convolver=jS.createConvolver();const h=e=>{e&&(this.convolver.buffer=e,Pb.audioBufferProperty.unlink(h))};Pb.audioBufferProperty.link(h),this.reverbGainNode=jS.createGain(),this.reverbGainNode.connect(this.mainGainNode),this.reverbGainNode.gain.setValueAtTime(this._reverbLevel,jS.currentTime),this.convolver.connect(this.reverbGainNode),this.dryGainNode=jS.createGain(),this.dryGainNode.gain.setValueAtTime(1-this._reverbLevel,jS.currentTime),this.dryGainNode.gain.linearRampToValueAtTime(1-this._reverbLevel,jS.currentTime+_b),this.dryGainNode.connect(this.mainGainNode),o.categories.forEach(e=>{const t=jS.createGain();t.connect(this.convolver),t.connect(this.dryGainNode),this.gainNodesForCategories.set(e,t)}),pr.multilink([this.enabledProperty,t,e,i,n,r],(e,t,i,n,r,s)=>{const o=e&&t&&i&&n&&r&&!s?this._mainOutputLevel:0;this.mainGainNode.gain.linearRampToValueAtTime(o,jS.currentTime+_b)});const c=new Nn(!1),u=()=>{c.value=this.duckingProperties.reduce((e,t)=>e||t.value,!1)};c.lazyLink(e=>{var t,i;const n=e?.05:.5,r=jS.currentTime;null===(t=this.duckingGainNode)||void 0===t||t.gain.cancelScheduledValues(r),null===(i=this.duckingGainNode)||void 0===i||i.gain.setTargetAtTime(e?.15:1,r,n)}),this.duckingProperties.addItemAddedListener(e=>{e.link(u);const t=i=>{i===e&&(i.unlink(u),this.duckingProperties.removeItemRemovedListener(t))};this.duckingProperties.addItemRemovedListener(t)});const d=()=>{window.removeEventListener("touchstart",p,!1),VE.userGestureEmitter.hasListener(p)&&VE.userGestureEmitter.removeListener(p)},p=()=>{"running"!==jS.state?(phet.log&&phet.log("audio context not running, attempting to resume, state = "+jS.state),jS.resume().then(()=>{phet.log&&phet.log("resume appears to have succeeded, phetAudioContext.state = "+jS.state),d()}).catch(e=>{const t="error when trying to resume audio context, err = "+e;console.error(t)})):d()};window.addEventListener("touchstart",p,!1),VE.userGestureEmitter.addListener(p);let m=jS.state;sb.addStateChangeListener(jS,e=>{phet.log&&phet.log(`audio context state changed, old state = ${m}, new state = ${e}, audio context time = ${jS.currentTime}`),"running"!==e?(window.addEventListener("touchstart",p,!1),VE.userGestureEmitter.hasListener(p)||VE.userGestureEmitter.addListener(p)):console.log("AudioContext is now running."),m=e}),this.initialized=!0,this.soundGeneratorsAwaitingAdd.forEach(e=>{this.addSoundGenerator(e.soundGenerator,e.soundGeneratorAddOptions)}),this.soundGeneratorsAwaitingAdd.length=0}hasSoundGenerator(e){return _.some(this.soundGeneratorInfoArray,t=>t.soundGenerator===e)}addSoundGenerator(e,t){if(void 0===t&&(t={}),!this.initialized)return void this.soundGeneratorsAwaitingAdd.push({soundGenerator:e,soundGeneratorAddOptions:t});this.hasSoundGenerator(e);const i=$e()({sonificationLevel:Cb.BASIC,associatedViewNode:null,categoryName:null},t);null===i.categoryName?(e.connect(this.convolver),e.connect(this.dryGainNode)):e.connect(this.gainNodesForCategories.get(i.categoryName));const n={soundGenerator:e,sonificationLevel:i.sonificationLevel};if(this.soundGeneratorInfoArray.push(n),e.addEnableControlProperty(this.enabledProperty),i.sonificationLevel===Cb.EXTRA&&e.addEnableControlProperty(this.extraSoundEnabledProperty),i.associatedViewNode){const t=new Ua(i.associatedViewNode);e.addEnableControlProperty(t),this.viewNodeDisplayedPropertyMap.set(e,t)}}removeSoundGenerator(e){if(!this.initialized){const t=this.soundGeneratorsAwaitingAdd.filter(t=>t.soundGenerator===e);for(;t.length>0;)Ai(this.soundGeneratorsAwaitingAdd,t[0]),t.shift();return}let t=null;for(let i=0;i{e.isConnectedTo(t)&&e.disconnect(t)}),t&&this.soundGeneratorInfoArray.splice(this.soundGeneratorInfoArray.indexOf(t),1),this.viewNodeDisplayedPropertyMap.has(e)&&(this.viewNodeDisplayedPropertyMap.get(e).dispose(),this.viewNodeDisplayedPropertyMap.delete(e))}setMainOutputLevel(e){this.initialized?(this._mainOutputLevel=e,this.enabledProperty.value&&this.mainGainNode.gain.linearRampToValueAtTime(e,jS.currentTime+_b)):console.warn("an attempt was made to set the main output level on an uninitialized sound manager, ignoring")}set mainOutputLevel(e){this.setMainOutputLevel(e)}get mainOutputLevel(){return this.getMainOutputLevel()}getMainOutputLevel(){return this._mainOutputLevel}setOutputLevelForCategory(e,t){if(!this.initialized)return void console.warn("an attempt was made to set the output level for a sound category on an uninitialized sound manager, ignoring");const i=this.gainNodesForCategories.get(e);i&&i.gain.setValueAtTime(t,jS.currentTime)}addDuckingProperty(e){this.duckingProperties.add(e)}removeDuckingProperty(e){this.duckingProperties.remove(e)}getOutputLevelForCategory(e){if(!this.initialized)return console.warn("an attempt was made to get the output level for a sound category on an uninitialized sound manager, returning 0"),0;const t=this.gainNodesForCategories.get(e);return t.gain.value}setReverbLevel(e){if(this.initialized){if(e!==this._reverbLevel){const t=jS.currentTime;this.reverbGainNode.gain.linearRampToValueAtTime(e,t+_b),this.dryGainNode.gain.linearRampToValueAtTime(1-e,t+_b),this._reverbLevel=e}}else console.warn("an attempt was made to set the reverb level on an uninitialized sound manager, ignoring")}set reverbLevel(e){this.setReverbLevel(e)}get reverbLevel(){return this.getReverbLevel()}getReverbLevel(){return this._reverbLevel}set enabled(e){this.enabledProperty.value=e}get enabled(){return this.enabledProperty.value}set sonificationLevel(e){this.extraSoundEnabledProperty.value=e===Cb.EXTRA}get sonificationLevel(){return this.extraSoundEnabledProperty.value?Cb.EXTRA:Cb.BASIC}logGain(e,t){t=t||1;Date.now()}logMainGain(e){this.mainGainNode&&this.logGain(this.mainGainNode,e)}logReverbGain(e){this.reverbGainNode&&this.logGain(this.reverbGainNode,e)}};FS.register("soundManager",Rb);const Nb=Rb;class Mb{constructor(e,t){this.soundPlayer=e,this.playbackRate=t}play(){this.soundPlayer.setPlaybackRate(this.playbackRate),this.soundPlayer.play()}stop(){this.soundPlayer.stop()}}const Lb=new class{constructor(){this._basisSoundClip=null,this.soundPlayers=[]}getSoundClipInstance(){return this._basisSoundClip||(this._basisSoundClip=new Ab(tb,{initialOutputLevel:.7,rateChangesAffectPlayingSounds:!1}),Nb.addSoundGenerator(this._basisSoundClip,{categoryName:"user-interface"})),this._basisSoundClip}getSelectionSoundPlayer(e){if(!this.soundPlayers[e]){const t=Math.pow(2,-e/12);this.soundPlayers[e]=new Mb(this.getSoundClipInstance(),t)}return this.soundPlayers[e]}};FS.register("multiSelectionSoundPlayerFactory",Lb);const Ib=Lb;class Db extends(Xh(Md(Lh))){constructor(e,t,i,n){const r=$e()({centerColor:"black",radius:Db.DEFAULT_RADIUS,selectedColor:"rgb( 143, 197, 250 )",deselectedColor:"white",xSpacing:8,stroke:"black",soundPlayer:Ib.getSelectionSoundPlayer(0),a11yNameAttribute:null,touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,cursor:"pointer",disabledOpacity:mo.DISABLED_OPACITY,tandem:Oi.REQUIRED,tandemNameSuffix:"RadioButton",visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0,tagName:"input",inputType:"radio",containerTagName:"li",labelTagName:"label",appendLabel:!0,appendDescription:!0},n);super(),_defineProperty(this,"onInputEmitter",new Yn),_defineProperty(this,"_isMouseAreaCustomized",!1),_defineProperty(this,"_isTouchAreaCustomized",!1),_defineProperty(this,"_isSettingAreas",!1),this.value=t;const s=new Lh,o=new Gc(r.radius/3,{fill:r.centerColor}),a=new Gc(r.radius,{fill:r.selectedColor,stroke:r.stroke}),l=new Lh({children:[a,o]});s.addChild(l);const h=new Lh,c=new Gc(r.radius,{fill:r.deselectedColor,stroke:r.stroke});h.addChild(c);const u=new Lh({children:[s,h],pickable:!1}),d=()=>{i.left=c.right+r.xSpacing,i.centerY=c.centerY};i.boundsProperty.link(d);const p=new Wc({});s.pickable=h.pickable=!1,i.pickable=!1,this.children=[u,i,p],this.constraint=new kb(this,u,i,p,r),this.constraint.updateLayout();const m=e=>{s.visible=e===t,h.visible=!s.visible};e.link(m);const g=()=>{const i=e.value;e.set(t),i!==e.value&&this.onInputEmitter.emit()},f=new cm({fire:g,tandem:r.tandem.createTandem("fireListener")});this.addInputListener(f),this.onInputEmitter.addListener(()=>r.soundPlayer.play());const y={change:g};this.addInputListener(y),e.value===t&&this.setPDOMAttribute("checked","checked");const A=e=>{this.pdomChecked=e===t};e.link(A),null!==r.a11yNameAttribute&&this.setPDOMAttribute("name",r.a11yNameAttribute),this.mutate(r),this.disposeAquaRadioButton=()=>{this.constraint.dispose(),this.onInputEmitter.dispose(),this.removeInputListener(f),this.removeInputListener(y),e.unlink(A),e.unlink(m),i.boundsProperty.hasListener(d)&&i.boundsProperty.unlink(d),f.dispose()}}dispose(){this.disposeAquaRadioButton(),super.dispose()}}_defineProperty(Db,"DEFAULT_RADIUS",7),_defineProperty(Db,"TANDEM_NAME_SUFFIX","RadioButton");class kb extends Ag{constructor(e,t,i,n,r){super(e),this.radioButton=e,this.radioNode=t,this.content=i,this.rectangle=n,this.options=r,this.radioButton.localPreferredWidthProperty.lazyLink(this._updateLayoutListener),this.addNode(i)}layout(){super.layout();const e=this.createLayoutProxy(this.content),t=e.minimumWidth,i=this.radioNode.width+this.options.xSpacing+t,n=Math.max(i,this.radioButton.localPreferredWidth||0);Wh(this.content)&&(e.preferredWidth=n-this.radioNode.width-this.options.xSpacing),e.left=this.radioNode.right+this.options.xSpacing,e.centerY=this.radioNode.centerY,this.rectangle.rectBounds=this.radioNode.bounds.union(e.bounds).withMaxX(Math.max(this.radioNode.left+n,e.right)),this.radioButton._isSettingAreas=!0,this.radioButton._isTouchAreaCustomized||(this.radioButton.touchArea=this.radioButton.localBounds.dilatedXY(this.options.touchAreaXDilation,this.options.touchAreaYDilation)),this.radioButton._isMouseAreaCustomized||(this.radioButton.mouseArea=this.radioButton.localBounds.dilatedXY(this.options.mouseAreaXDilation,this.options.mouseAreaYDilation)),this.radioButton._isSettingAreas=!1,e.dispose(),this.radioButton.localMinimumWidth=i}dispose(){this.radioButton.localPreferredWidthProperty.unlink(this._updateLayoutListener),super.dispose()}}function qb(e,t){return e.map(e=>e.createNode(t&&e.tandemName?t.createTandem(e.tandemName):Oi.OPTIONAL))}Zv.register("AquaRadioButton",Db);let Bb=0;class Ob extends Ug{constructor(e,t,i){Bb++;const n=$e()({touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,orientation:"vertical",spacing:3,stretch:!0,disabledOpacity:mo.DISABLED_OPACITY,tandem:Oi.REQUIRED,tandemNameSuffix:"RadioButtonGroup",visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0,phetioFeatured:!0,tagName:"ul",labelTagName:"h3",ariaRole:"radiogroup",groupFocusHighlight:!0},i),r=qb(t,n.tandem);"vertical"===n.orientation&&(n.align=n.align||"left");const s=t.map((t,i)=>{const s=r[i];return new Db(e,t.value,s,tt({a11yNameAttribute:"AquaRadioButtonGroup"+Bb,labelContent:t.labelContent||null,soundPlayer:Ib.getSelectionSoundPlayer(i),tandem:t.tandemName?n.tandem.createTandem(t.tandemName):n.tandem===Oi.OPT_OUT?Oi.OPT_OUT:Oi.REQUIRED,touchAreaXDilation:n.touchAreaXDilation,touchAreaYDilation:"vertical"===n.orientation?n.spacing/2:n.touchAreaYDilation,mouseAreaXDilation:n.mouseAreaXDilation,mouseAreaYDilation:"vertical"===n.orientation?n.spacing/2:n.mouseAreaYDilation},n.radioButtonOptions,t.options))});n.children=s,super(n),_defineProperty(this,"onInputEmitter",new Yn),this.addAriaLabelledbyAssociation({thisElementName:Tp.PRIMARY_SIBLING,otherNode:this,otherElementName:Tp.LABEL_SIBLING});const o=new $m({keys:["arrowLeft","arrowRight","arrowUp","arrowDown"],callback:e=>{e&&e.pointer.reserveForKeyboardDrag()}});this.addInputListener(o);const a=this.onRadioButtonInput.bind(this);for(let l=0;l{this.removeInputListener(o),o.dispose(),s.forEach(e=>e.dispose()),this.onInputEmitter.dispose(),r.forEach(e=>e.dispose())},this.radioButtons=s}onRadioButtonInput(){this.onInputEmitter.emit()}dispose(){this.disposeAquaRadioButtonGroup(),super.dispose()}getButton(e){const t=_.find(this.radioButtons,t=>t.value===e);return t}}Zv.register("AquaRadioButtonGroup",Ob);const Hb=new bs("M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z").makeImmutable(),Yb=new bs("M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z").makeImmutable(),Gb="data:audio/mpeg;base64,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VxjMbjCAqV6+9lyLbLv3a0X6ESHnjmkrTgX6ewW628bWpy6aAAAEIBKAAYVGgQJzEA7MHBAeERhQBG6YsEF4lDMeEoCAUYKgI6ZVAYEguZjC2ZGtMcWpghOAQLKNr1LwVPu2Wuurc61Zm1tOXWe/o1tDZJ5cXoLq47k/vbkMSqQ57UHqbUISVThclJqqsAa1V3dqUsXjENcTVSBUCQHmLDZKQCFtO+lwC+DVGKFZhA8Ck5ACX2THBAR54Dl4c+jQuNtZdZ7rPuOGX//7cMTJAk6AYtSvdwcB3graIe684Jd3Kc5TLcMqa1j+V2z++ZfljKYdvVqa/VlNNTWpkJR7VjzOVVd5NBQlGc8z5NIkUcNIozLbzkcqq84/8kUcf1PnK74dLEkq30DAFGtNIonJMclvNIy5wMFJGkUZk4lppFE4ldVr+qreaiclZEjO/scSJEtxTEFNRTMuOTguM6qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqCQACQKKEgQswmgpKTiyiyizTjSizDzDy2eLzc/ypo0osoCEihIoDEA5BDcqWco0FBgUUBgQsQLAzjSizDzDy2drzcqpo0ov/+3LE5QJOoF7PjnWHApQz1oW8mbkoso404so8w+GdnZ4tv//+7VNSUWUWUKEihIELECxAoSBFmHxcNebNGlFmnCRQkCFiBYkUJFAYgWIFgZRZRZh5h9VVVUUJppI1VUxBTUUzLjk4LjNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7cMS2A9IFejpDGM3IAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=",Fb=GS(jS,Gb),Ub=IS.createLock(Gb),zb=new zS;let Wb=!1;const jb=()=>{Wb||(Ub(),Wb=!0)},Xb=jS.decodeAudioData(Fb.buffer,e=>{null===zb.audioBufferProperty.value&&(zb.audioBufferProperty.set(e),jb())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),zb.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),jb()});Xb&&Xb.then(e=>{null===zb.audioBufferProperty.value&&(zb.audioBufferProperty.set(e),jb())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),jb()});const Qb=zb;class Kb{constructor(e,t){const i=$e()({soundClipOptions:{},soundManagerOptions:{}},t);this._soundClip=new Ab(e,i.soundClipOptions),Nb.addSoundGenerator(this._soundClip,i.soundManagerOptions)}play(){this._soundClip.play()}stop(){this._soundClip.stop()}getSoundClip(){return this._soundClip}}FS.register("SoundClipPlayer",Kb);const Jb=Kb,Zb=new Jb(Qb,{soundClipOptions:{initialOutputLevel:.7},soundManagerOptions:{categoryName:"user-interface"}});FS.register("checkboxCheckedSoundPlayer",Zb);const $b=Zb,eT="data:audio/mpeg;base64,//swxAAAB3BPLHWkgAEQCy03MPADAYAEAMYCIAZnV5vYJv2ZoxqgRhBhkBBkRJhwZa9g7/tbYe1+jC4beogQMZ4Z5zn7mgQQdxOH//////6SQAIzbNJJdtgAAAAAAHjcV2B1EBJLBB4wV9rCWp5eq0EHE43FpgLhkjdNEqGhFqhSQlQ4TwqZdZ7fN/Hm6YKiu/33NoUAACApAAAI//syxAOCSGxzQ123gDkDjCZJvLDmDQ0HhMRgBVEjBws2OIM9Cky1VU0REAhgK47nqWwHAkIYcB7ePHvXeo2cV1nG4uL6rjXjzXt951bbjQs/hQuyxEeFQaEGUgRohuYvQkhIfrBnlFyQoUla/qMye4qGxUqjhxTJIFPCOfamTewcOH2SkYCFVa21OLZrySygx+bV4B1xgBhA1DB0Bf/7MsQFAAfISyw1x4AxL4ssNzGAAigYRigH0YoI18mGQKOgZ+FY0UWnyRsLJgZYCShStOpdQYKdeV5/q9jbIDYPkLAYtiTETvrZLIYEb2u2uogAAAAAAhkChusjjbfkXleOGpiySKjhjUIlMla3JEsHQqgBs2ns50DIPtDIgjJE46JnUPRPPPOG5G8/yKxQADAZFTP1KgAAIX0AGkv/+zLEA4IIRJ9DPaUAMQuN5o2tmYqinck4ucZbhxEBHFls3WFfhr6dyvz3zgxEmEABChAREwQIwJRfc1jx6QHFWNNqQkrG5wvNNbdf1b//kxUACACHIGAlgmUgpccbebl+BkKCZXQyCAwpKkwRUzEk7AIAwgTBahUNNHisAuFoYmM12rXbbUJ2v5Cwa++fDf///+mgDERUoJgUemjg//swxAUDSExLJi3phxEQCmQBrbx0BkCOdSyG/xxiJyFwYUOAZiABRh0Zh64k8Pj7NAJTjWFStFgyvxBK5IhTLDstCt9Y/SAqpLqiYU1gRqYoIfCMbtwYtoG77YMaQdBGoPhoQOPIxjIsCrswBnOHTzqNAI9TIQEiAQc0oSX9JssKWBt5O9HJA8fEWBHxeXEQzXUAKsQAXwMjEM3O//syxAUCSDxVLM1lJzEbCWPFrmxBNqHM4RC+k5ZUzwUcEaSmKZZCdwJRBNZkJiwDdFN36YdSqdqUT6pYDZ5ScxSDVfZPSpL8M//b6NxDNtjDhTpxDmMDKQMMw1k08tNDTxrGMKLQxRDCMevDKlACBZi1WYsoiEOBwEwdI9e0vdBptNKZfgzJsVH29qtOpUET8k9v4mAAAExTEHgUKP/7MsQEggfQUyJNc0QA2AklmY2YpukjMG6N4KPFG4xmOjdBnIQqBgcbgGQGmcNGdaHtBQplqcsNdnbkroa0zXiUXxyr9wz/WF9usagQAkSHDHulGU3DjA44xIgQwADplHVAGUl7G/MbPAcXSMAgRGUSoN9OUp+zGuLf///V3//+ugKcCSTofFaj5oNcoyUgyJfAIDMwsQBGeEBQiGf/+zLEDgJHUD8UDOksQN6F39wxsAA60sBDGHr5bR5oZBEMkscKhnEIJPCh6j//////+n6AmBgKjhFZNEIgmCyGD2UQjAVEweC2peqxVyOIpL/WDXZ7cNcFTtQdJCEFQVGLPFgaUHJ6dhojDlVttOCJU4BB0qsXplV/tncqptv/p//+n//6abf////9QTTTTRVV9UEJK0kIixWmqoc///swxBiDxvgCi4CEYAgAADSAAAAE/1TTVEWK6UxBTUUzLjk5LjNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",tT=GS(jS,eT),iT=IS.createLock(eT),nT=new zS;let rT=!1;const sT=()=>{rT||(iT(),rT=!0)},oT=jS.decodeAudioData(tT.buffer,e=>{null===nT.audioBufferProperty.value&&(nT.audioBufferProperty.set(e),sT())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),nT.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),sT()});oT&&oT.then(e=>{null===nT.audioBufferProperty.value&&(nT.audioBufferProperty.set(e),sT())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),sT()});const aT=new Jb(nT,{soundClipOptions:{initialOutputLevel:.7},soundManagerOptions:{categoryName:"user-interface"}});FS.register("checkboxUncheckedSoundPlayer",aT);const lT=aT,hT={valueType:"boolean"},cT=Qr(.025,0,0,0,-.025,0,0,0,1),uT=Hb.transformed(cT),dT=Yb.transformed(cT);class pT extends(Xh(Md(Lh))){constructor(e,t,i){const n=$e()({spacing:5,boxWidth:21,checkboxColor:"black",checkboxColorBackground:"white",touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,checkedSoundPlayer:$b,uncheckedSoundPlayer:lT,phetioLinkProperty:!0,cursor:"pointer",disabledOpacity:mo.DISABLED_OPACITY,tandem:Oi.REQUIRED,tandemNameSuffix:"Checkbox",phetioEventType:wi.USER,visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0,phetioReadOnly:Zi.DEFAULT_OPTIONS.phetioReadOnly,phetioFeatured:!0,tagName:"input",inputType:"checkbox",appendDescription:!0,voicingCheckedObjectResponse:null,voicingUncheckedObjectResponse:null,checkedContextResponse:null,uncheckedContextResponse:null,voiceNameResponseOnSelection:!0},i);super(),_defineProperty(this,"_isMouseAreaCustomized",!1),_defineProperty(this,"_isTouchAreaCustomized",!1),_defineProperty(this,"_isSettingAreas",!1);const r=new Ru(()=>{e.value=!e.value,ot(e.value,hT),e.value?(n.checkedSoundPlayer.play(),n.checkedContextResponse&&this.alertDescriptionUtterance(n.checkedContextResponse),this.voicingSpeakResponse({nameResponse:n.voiceNameResponseOnSelection?this.voicingNameResponse:null,objectResponse:rd.alertableToText(n.voicingCheckedObjectResponse),contextResponse:rd.alertableToText(n.checkedContextResponse)})):(n.uncheckedSoundPlayer.play(),n.uncheckedContextResponse&&this.alertDescriptionUtterance(n.uncheckedContextResponse),this.voicingSpeakResponse({nameResponse:n.voiceNameResponseOnSelection?this.voicingNameResponse:null,objectResponse:rd.alertableToText(n.voicingUncheckedObjectResponse),contextResponse:rd.alertableToText(n.uncheckedContextResponse)}))},{parameters:[],tandem:n.tandem.createTandem("toggleAction"),phetioDocumentation:"Emits when user input causes the checkbox to toggle, emitting a single arg: the new boolean value of the checkbox state.",phetioReadOnly:!0,phetioEventType:wi.USER});this.backgroundNode=new Wc(0,-n.boxWidth,.95*n.boxWidth,.95*n.boxWidth,.2*n.boxWidth,.2*n.boxWidth,{fill:n.checkboxColorBackground}),this.uncheckedNode=new Cc(uT,{fill:n.checkboxColor});const s=n.boxWidth/this.uncheckedNode.width;this.uncheckedNode.scale(s),this.checkedNode=new Cc(dT,{scale:s,fill:n.checkboxColor});const o=new Lh({children:[this.backgroundNode,this.checkedNode,this.uncheckedNode]}),a=new Wc({});this.children=[o,t,a],this.constraint=new mT(this,o,this.checkedNode,t,a,n),this.constraint.updateLayout(),t.pickable=!1,t.pdomVisible=!1;const l=new cm({fire:()=>r.execute(),tandem:n.tandem.createTandem("fireListener")});this.addInputListener(l);const h=e=>{this.checkedNode.visible=e,this.uncheckedNode.visible=!e,this.pdomChecked=e};e.link(h),this.mutate(n),this.setExcludeLabelSiblingFromInput(),n.phetioLinkProperty&&this.addLinkedElement(e,{tandemName:"property"}),this.disposeCheckbox=()=>{a.dispose(),this.backgroundNode.dispose(),this.uncheckedNode.dispose(),this.checkedNode.dispose(),o.dispose(),l.dispose(),e.hasListener(h)&&e.unlink(h),r.dispose()}}dispose(){this.constraint.dispose(),this.disposeCheckbox(),super.dispose()}setCheckboxColorBackground(e){this.backgroundNode.fill=e}set checkboxColorBackground(e){this.setCheckboxColorBackground(e)}get checkboxColorBackground(){return this.getCheckboxColorBackground()}getCheckboxColorBackground(){return this.backgroundNode.fill}setCheckboxColor(e){this.checkedNode.fill=this.uncheckedNode.fill=e}set checkboxColor(e){this.setCheckboxColor(e)}get checkboxColor(){return this.getCheckboxColor()}getCheckboxColor(){return this.checkedNode.fill}setMouseArea(e){return this._isSettingAreas||(this._isMouseAreaCustomized=!0),super.setMouseArea(e)}setTouchArea(e){return this._isSettingAreas||(this._isTouchAreaCustomized=!0),super.setTouchArea(e)}}class mT extends Ag{constructor(e,t,i,n,r,s){super(e),this.checkbox=e,this.checkboxNode=t,this.checkedNode=i,this.content=n,this.rectangle=r,this.options=s,this.checkbox.localPreferredWidthProperty.lazyLink(this._updateLayoutListener),this.addNode(n)}layout(){super.layout();const e=this.createLayoutProxy(this.content),t=e.minimumWidth,i=this.checkedNode.right-this.checkboxNode.left,n=i+this.options.spacing+t,r=Math.max(n,this.checkbox.localPreferredWidth||0);Wh(this.content)&&null!==this.checkbox.localPreferredWidth&&(e.preferredWidth=r-i-this.options.spacing),e.left=this.checkedNode.right+this.options.spacing,e.centerY=this.checkedNode.centerY,this.rectangle.rectBounds=this.checkboxNode.bounds.union(e.bounds).withMaxX(Math.max(this.checkboxNode.left+r,e.right)),this.checkbox._isSettingAreas=!0,this.checkbox._isTouchAreaCustomized||(this.checkbox.touchArea=this.checkbox.localBounds.dilatedXY(this.options.touchAreaXDilation,this.options.touchAreaYDilation)),this.checkbox._isMouseAreaCustomized||(this.checkbox.mouseArea=this.checkbox.localBounds.dilatedXY(this.options.mouseAreaXDilation,this.options.mouseAreaYDilation)),this.checkbox._isSettingAreas=!1,e.dispose(),this.checkbox.localMinimumWidth=n}dispose(){this.checkbox.localPreferredWidthProperty.unlink(this._updateLayoutListener),super.dispose()}}Zv.register("Checkbox",pT);class gT extends Rn{constructor(e,t){const i=$e()({enumeration:e.enumeration},t);super(e,$e()({validValues:i.enumeration.values,phetioValueType:bi({enumeration:i.enumeration})},i))}}Ge.register("EnumerationProperty",gT);const fT="data:audio/mpeg;base64,//swxAAABlAhPLTAgDE1De+/HoACAH4CwkCAJDo5gDgPRksn2WLHOB8EHShd5cHwfBBwgBBOJw/UCAY/lAxWD/4DB9+CH/6XQjMTIIcYUIQPQIRAIBAACUIawkYq7IQ/BawVqEc7mTjD+OFygBAnHbHq7UkLJ8aCnnrZlPpg3IkRJBgPH/MCQCI985/yAnHAAhmv3lHuAgAgAxJF//syxAOACHQpa7zBAAD8EunxpI3HUCEZHQlA2EYuDsSjE5EkSQGhUDYDxOARLoiBmIgalVgq4qWeWBqsNYKywNO+p/sxFyKwVOlXRFDtZ0S86oQ0C2W+wBOmlaWuS6+BIqZMz+AYy3FuwBkKXM2idVoKlYwUd/oIGgsbLpEbaCsmIyZRtbw6TPwj+mYmGr8QqnGHBLo3LKAAxKabZ//7MsQGAAhsl1OsPMcxAo3mpbCaAvIuuQRmW4WNHhDBJnoBORIlh+I9dvGCTCKP0kzo7rHHTi87diQ2XqnRN77y8lnKUl8zf+X0Fu0iCDV/9AP7el8Cw8raZKqiYShe+6bzYk0zXmEuGnBDcQhyRzPeI4Jbsmj5OxzZVhSX9adVU4Kk9r9esE3etv+/6wUIg3Wm62nA3Ab0EIcLUQ7/+zLECABGICs9oemDMLwEZrQcvFYyDBCUCgUAwQCUSvgROof5poGn9O7o70P/X9P/T+360+lAhIJVtyuNDljXzM7Ek0fGUB/ltZQF8iD7dBcVTs00f31POqR0/V/q/pjEe1z3jyAAQRBHGmSBEEVK6QIYH2miQZKNfgCVtiH9vVLp+w7an/d0jdUx9VnqZIJSvFtsaUFKKFBVCzoe//swxBwABSAhLaDl4nCsA+a0fDyG3vbgKx5OhNXyuPYt7kJJSg9B6heqxP93q/9P6IwSQ8LbYIFBVUF85RwseJPX6+Q7qIq7f/8ayokh7P//V8oyAABbhbGEIBBhOJgEGTBx6KjUiosS54l6y0i3jOz/6f///RVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//syxDWABEQTMaCF4HCNAmL0EJgGVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==",yT=GS(jS,fT),AT=IS.createLock(fT),ET=new zS;let vT=!1;const ST=()=>{vT||(AT(),vT=!0)},bT=jS.decodeAudioData(yT.buffer,e=>{null===ET.audioBufferProperty.value&&(ET.audioBufferProperty.set(e),ST())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),ET.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),ST()});bT&&bT.then(e=>{null===ET.audioBufferProperty.value&&(ET.audioBufferProperty.set(e),ST())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),ST()});const TT=new Jb(ET,{soundClipOptions:{initialOutputLevel:.5},soundManagerOptions:{categoryName:"user-interface"}});FS.register("pushButtonSoundPlayer",TT);const wT=TT;class VT extends jt{}_defineProperty(VT,"IDLE",new(Te=VT)),_defineProperty(VT,"OVER",new Te),_defineProperty(VT,"PRESSED",new Te),_defineProperty(VT,"enumeration",new Jt(Te)),Zv.register("ButtonInteractionState",VT);class PT extends lr{constructor(e){super([e.focusedProperty,e.overProperty,e.looksOverProperty,e.looksPressedProperty],(e,t,i,n)=>i&&!n?VT.OVER:(t||e)&&n?VT.PRESSED:VT.IDLE,{valueType:VT})}}Zv.register("PushButtonInteractionStateProperty",PT);class xT extends Yu{constructor(e){const t=$e()({startCallback:_.noop,endCallback:_.noop,tandem:Oi.REQUIRED,phetioState:Zi.DEFAULT_OPTIONS.phetioState,phetioReadOnly:Zi.DEFAULT_OPTIONS.phetioReadOnly,phetioFeatured:Zi.DEFAULT_OPTIONS.phetioFeatured},e);t.enabledPropertyOptions=tt({phetioState:t.phetioState,phetioReadOnly:t.phetioReadOnly,phetioDocumentation:"When disabled, the button is grayed out and cannot be pressed",phetioFeatured:!0},t.enabledPropertyOptions),super(t),this.overProperty=new Nn(!1),this.downProperty=new Nn(!1,{reentrant:!0}),this.focusedProperty=new Nn(!1),this.looksPressedProperty=new Nn(!1),this.looksOverProperty=new Nn(!1),this.produceSoundEmitter=new Yn,this.interrupted=!1,this.listeners=[],this.looksPressedMultilink=null,this.looksOverMultilink=null,this.downProperty.lazyLink(e=>{e?t.startCallback():t.endCallback(this.looksOverProperty.get())}),this.enabledProperty.link(e=>{if(!e)for(let t=0;t{this.overProperty.dispose(),this.downProperty.dispose(),this.produceSoundEmitter.dispose(),this.looksPressedMultilink&&this.looksPressedMultilink.dispose(),this.looksOverMultilink&&this.looksOverMultilink.dispose(),this.listeners=[]}}dispose(){this.disposeButtonModel(),super.dispose()}createPressListener(e){var t=this;e=tt({canStartPress:()=>this.enabledProperty.value},e);const i=new hm(e);this.listeners.push(i),i.isPressedProperty.lazyLink(e=>{this.interrupted=i.interrupted,this.downProperty.set(e)}),i.isOverProperty.lazyLink(this.overProperty.set.bind(this.overProperty)),i.isFocusedProperty.lazyLink(this.focusedProperty.set.bind(this.focusedProperty)),this.looksPressedMultilink&&this.looksPressedMultilink.dispose(),this.looksOverMultilink&&this.looksOverMultilink.dispose();const n=this.listeners.map(e=>e.looksPressedProperty);n.push(this.downProperty),this.looksPressedMultilink=pr.multilinkAny(n,(function(){for(var e=arguments.length,i=new Array(e),n=0;ne||t,!1)}));const r=this.listeners.map(e=>e.looksOverProperty);return this.looksOverMultilink=pr.multilinkAny(r,(function(){for(var e=arguments.length,i=new Array(e),n=0;ne||t,!1)})),i}}Zv.register("ButtonModel",xT);class CT extends xT{constructor(e){const t=$e()({fireOnDown:!1,listener:null,fireOnHold:!1,fireOnHoldDelay:400,fireOnHoldInterval:100,tandem:Oi.REQUIRED,phetioReadOnly:Zi.DEFAULT_OPTIONS.phetioReadOnly},e);super(t),this.isFiringProperty=new Nn(!1),this.firedEmitter=new Yn({tandem:t.tandem.createTandem("firedEmitter"),phetioDocumentation:"Emits when the button is fired",phetioReadOnly:t.phetioReadOnly,phetioEventType:wi.USER}),null!==t.listener&&this.firedEmitter.addListener(t.listener),t.fireOnHold&&(this.timer=new In({callback:this.fire.bind(this),delay:t.fireOnHoldDelay,interval:t.fireOnHoldInterval}));const i=e=>{if(e)this.enabledProperty.get()&&(t.fireOnDown&&this.fire(),this.timer&&this.timer.start(),(t.fireOnDown||this.timer)&&this.produceSoundEmitter.emit());else{const e=!t.fireOnDown&&(this.overProperty.get()||this.focusedProperty.get())&&this.enabledProperty.get()&&!this.interrupted;this.timer?this.timer.stop(e):e&&(this.produceSoundEmitter.emit(),this.fire())}};this.downProperty.link(i);const n=e=>{!e&&this.timer&&this.timer.stop(!1)};this.enabledProperty.link(n),this.disposePushButtonModel=()=>{this.isFiringProperty.value=!1,this.isFiringProperty.dispose(),this.firedEmitter.dispose(),this.downProperty.unlink(i),this.enabledProperty.unlink(n),this.timer&&(this.timer.dispose(),this.timer=null)}}dispose(){this.disposePushButtonModel(),super.dispose()}addListener(e){this.firedEmitter.addListener(e)}removeListener(e){this.firedEmitter.removeListener(e)}fire(){this.isFiringProperty.value=!0,this.firedEmitter.emit(),this.isFiringProperty.value=!1}}Zv.register("PushButtonModel",CT);const _T={LIGHT_BLUE:new Eo(153,206,255),LIGHT_GRAY:new Eo(220,220,220)},RT=new lh(.7),NT=new ah(1.2);class MT extends(nc(Md(Lh))){constructor(e,t,i,n){var r;const s=$e()({content:null,minUnstrokedWidth:null,minUnstrokedHeight:null,xMargin:10,yMargin:5,xAlign:"center",yAlign:"center",xContentOffset:0,yContentOffset:0,baseColor:_T.LIGHT_BLUE,cursor:"pointer",buttonAppearanceStrategy:MT.FlatAppearanceStrategy,buttonAppearanceStrategyOptions:{},contentAppearanceStrategy:null,contentAppearanceStrategyOptions:{},enabledAppearanceStrategy:(e,t,i,n)=>{i.filters=e?[]:[RT,NT],n&&(n.filters=e?[]:[hh.FULL],n.opacity=e?1:mo.DISABLED_OPACITY)},disabledColor:_T.LIGHT_GRAY,tagName:"button",visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0},n);s.listenerOptions=tt({tandem:null===(r=s.tandem)||void 0===r?void 0:r.createTandem("pressListener")},s.listenerOptions),s.enabledProperty=e.enabledProperty,super(),_defineProperty(this,"buttonNodeConstraint",null),this.content=s.content,this.buttonModel=e,this._settableBaseColorProperty=new su(s.baseColor),this._disabledColorProperty=new su(s.disabledColor),this.baseColorProperty=new ir([this._settableBaseColorProperty,this.enabledProperty,this._disabledColorProperty],(e,t,i)=>t?e:i),this._pressListener=e.createPressListener(s.listenerOptions),this.addInputListener(this._pressListener),t.fill=this.baseColorProperty,this.addChild(t);const o=new s.buttonAppearanceStrategy(t,i,this.baseColorProperty,s.buttonAppearanceStrategyOptions);let a;s.contentAppearanceStrategy&&s.content&&(a=new s.contentAppearanceStrategy(s.content,i,s.contentAppearanceStrategyOptions)),this.maxLineWidth=o.maxLineWidth;let l=null,h=null;if(s.content){const e=s.content;e.pickable=!1,this.buttonNodeConstraint=new LT(this,{content:s.content,xMargin:s.xMargin,yMargin:s.yMargin,maxLineWidth:this.maxLineWidth,minUnstrokedWidth:s.minUnstrokedWidth,minUnstrokedHeight:s.minUnstrokedHeight}),this.layoutSizeProperty=this.buttonNodeConstraint.layoutSizeProperty,l=new rf(e,{xAlign:s.xAlign,yAlign:s.yAlign,leftMargin:s.xMargin+s.xContentOffset,rightMargin:s.xMargin-s.xContentOffset,topMargin:s.yMargin+s.yContentOffset,bottomMargin:s.yMargin-s.yContentOffset}),h=pr.multilink([t.boundsProperty,this.layoutSizeProperty],(e,t)=>{l.alignBounds=ti.point(e.center).dilatedXY(t.width/2,t.height/2)}),this.addChild(l)}else this.layoutSizeProperty=new vn(new sl(s.minUnstrokedWidth+this.maxLineWidth,s.minUnstrokedHeight+this.maxLineWidth));this.mutate(s),this.enabledProperty.link(e=>s.enabledAppearanceStrategy(e,this,t,l)),this.disposeButtonNode=()=>{l&&l.dispose(),h&&h.dispose(),o.dispose&&o.dispose(),a&&a.dispose&&a.dispose(),this._pressListener.dispose(),this.baseColorProperty.dispose()}}dispose(){this.buttonNodeConstraint&&this.buttonNodeConstraint.dispose(),this.disposeButtonNode(),super.dispose()}setBaseColor(e){this._settableBaseColorProperty.paint=e}set baseColor(e){this.setBaseColor(e)}get baseColor(){return this.getBaseColor()}getBaseColor(){return this._settableBaseColorProperty.paint}pdomClick(){this._pressListener.click(null)}isPDOMClicking(){return this._pressListener.pdomClickingProperty.get()}}class LT extends Ag{constructor(e,t){super(e),_defineProperty(this,"layoutSizeProperty",new vn(new sl(0,0))),_defineProperty(this,"isFirstLayout",!0),_defineProperty(this,"lastLocalPreferredWidth",0),_defineProperty(this,"lastLocalPreferredHeight",0),this.buttonNode=e,this.content=t.content,this.xMargin=t.xMargin,this.yMargin=t.yMargin,this.maxLineWidth=t.maxLineWidth,this.minUnstrokedWidth=t.minUnstrokedWidth,this.minUnstrokedHeight=t.minUnstrokedHeight,this.buttonNode.localPreferredWidthProperty.lazyLink(this._updateLayoutListener),this.buttonNode.localPreferredHeightProperty.lazyLink(this._updateLayoutListener),this.addNode(this.content,!1),this.layout()}layout(){super.layout();const e=this.buttonNode,t=this.content,i=Math.max(this.isFirstLayout||e.widthSizable?(Wh(t)?t.minimumWidth||0:t.width)+2*this.xMargin:e.localMinimumWidth,null===this.minUnstrokedWidth?0:this.minUnstrokedWidth+this.maxLineWidth),n=Math.max(this.isFirstLayout||e.heightSizable?(Jh(t)?t.minimumHeight||0:t.height)+2*this.yMargin:e.localMinimumHeight,null===this.minUnstrokedHeight?0:this.minUnstrokedHeight+this.maxLineWidth);this.lastLocalPreferredWidth=this.isFirstLayout||Wh(e)?Math.max(i,e.localPreferredWidth||0):this.lastLocalPreferredWidth,this.lastLocalPreferredHeight=this.isFirstLayout||Jh(e)?Math.max(n,e.localPreferredHeight||0):this.lastLocalPreferredHeight,this.isFirstLayout=!1,this.layoutSizeProperty.value=new sl(this.lastLocalPreferredWidth,this.lastLocalPreferredHeight),e.localMinimumWidth=i,e.localMinimumHeight=n}dispose(){this.buttonNode.localPreferredWidthProperty.unlink(this._updateLayoutListener),this.buttonNode.localPreferredHeightProperty.unlink(this._updateLayoutListener),super.dispose()}}MT.FlatAppearanceStrategy=class{constructor(e,t,i,n){const r=new su(i,{luminanceFactor:.4}),s=new su(i,{luminanceFactor:-.4}),o=i,a=r,l=s,h=tt({stroke:s},n),c="number"==typeof h.lineWidth?h.lineWidth:1;function u(t){switch(t){case VT.IDLE:e.fill=o;break;case VT.OVER:e.fill=a;break;case VT.PRESSED:e.fill=l;break;default:throw new Error("unsupported interactionState: "+t)}}e.stroke=h.stroke||s,e.lineWidth=c,this.maxLineWidth=e.hasStroke()?c:0,e.cachedPaints=[o,a,l],t.link(u),this.disposeFlatAppearanceStrategy=()=>{t.hasListener(u)&&t.unlink(u),r.dispose(),s.dispose()}}dispose(){this.disposeFlatAppearanceStrategy()}},Zv.register("ButtonNode",MT);class IT extends MT{constructor(e,t,i){const n=$e()({size:null,minWidth:10,minHeight:10,xMargin:8,yMargin:5,touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,touchAreaXShift:0,touchAreaYShift:0,mouseAreaXShift:0,mouseAreaYShift:0,stroke:null,lineWidth:.5,cornerRadius:4,leftTopCornerRadius:null,rightTopCornerRadius:null,leftBottomCornerRadius:null,rightBottomCornerRadius:null,buttonAppearanceStrategy:IT.ThreeDAppearanceStrategy},i);let r,s;n.content,n.size?(n.minUnstrokedWidth=n.size.width,n.minUnstrokedHeight=n.size.height):(void 0!==n.minWidth&&(n.minUnstrokedWidth=n.minWidth),void 0!==n.minHeight&&(n.minUnstrokedHeight=n.minHeight)),n.buttonAppearanceStrategyOptions||(n.buttonAppearanceStrategyOptions={stroke:n.stroke,lineWidth:n.lineWidth}),n.size?(r=n.size.width,s=n.size.height):(r=Math.max(n.content?n.content.width+2*n.xMargin:0,n.minWidth),s=Math.max(n.content?n.content.height+2*n.yMargin:0,n.minHeight));const o=new Cc(DT(r,s,n));if(n.size&&n.content){const e=n.content,t=Math.min((n.size.width-2*n.xMargin)/e.width,(n.size.height-2*n.yMargin)/e.height);n.content=new Lh({children:[e],scale:t})}super(e,o,t,n);let a=!0;pr.multilink([this.isWidthResizableProperty,this.isHeightResizableProperty,this.layoutSizeProperty],(e,t,i)=>{(e||t)&&(o.shape=DT(e?i.width-this.maxLineWidth:r,t?i.height-this.maxLineWidth:s,n)),(a||e||t)&&(this.touchArea=o.localBounds.dilatedXY(n.touchAreaXDilation,n.touchAreaYDilation).shiftedXY(n.touchAreaXShift,n.touchAreaYShift),this.mouseArea=o.localBounds.dilatedXY(n.mouseAreaXDilation,n.mouseAreaYDilation).shiftedXY(n.mouseAreaXShift,n.mouseAreaYShift)),a=!1})}}function DT(e,t,i){const n=Math.min(e/2,t/2);return bs.roundedRectangleWithRadii(0,0,e,t,{topLeft:Math.min(n,null!==i.leftTopCornerRadius?i.leftTopCornerRadius:i.cornerRadius),topRight:Math.min(n,null!==i.rightTopCornerRadius?i.rightTopCornerRadius:i.cornerRadius),bottomLeft:Math.min(n,null!==i.leftBottomCornerRadius?i.leftBottomCornerRadius:i.cornerRadius),bottomRight:Math.min(n,null!==i.rightBottomCornerRadius?i.rightBottomCornerRadius:i.cornerRadius)})}IT.ThreeDAppearanceStrategy=class{constructor(e,t,i,n){const r=n&&n.stroke?n.stroke:new su(i,{luminanceFactor:-.4}),s=n&&void 0!==n.lineWidth?n.lineWidth:.5,o=$e()({stroke:r,lineWidth:s,overStroke:r,overLineWidth:s,overFill:i,overButtonOpacity:1,selectedStroke:r,selectedLineWidth:s,selectedButtonOpacity:1,deselectedStroke:r,deselectedLineWidth:s,deselectedButtonOpacity:1},n),a=new su(i,{luminanceFactor:.7}),l=new su(i,{luminanceFactor:.5}),h=new su(i,{luminanceFactor:.2}),c=new su(i,{luminanceFactor:-.3}),u=new su(i,{luminanceFactor:-.4}),d=new su(i,{luminanceFactor:-.5}),p=new ir([i],e=>e.withAlpha(0)),m=new Eo(255,255,255,.7),g=new Cc(null,{stroke:o.stroke,lineWidth:o.lineWidth,pickable:!1});let f;e.addChild(g),this.maxLineWidth="number"==typeof o.lineWidth?o.lineWidth:0;const y=()=>{const n=e.shape.bounds.width,r=e.shape.bounds.height;g.shape=e.shape;const s=Math.min(7/r,1),u=Math.max(1-3/r,0),y=Math.min(7/n,1),A=Math.max(1-3/n,0),E=new Hl(0,0,0,r).addColorStop(0,a).addColorStop(s,i).addColorStop(u,i).addColorStop(1,d),v=new Hl(0,0,n,0).addColorStop(0,m).addColorStop(y,p).addColorStop(A,p).addColorStop(1,d),S=new Hl(0,0,0,r).addColorStop(0,a).addColorStop(s,l).addColorStop(u,l).addColorStop(1,d),b=new Hl(0,0,n,0).addColorStop(0,m).addColorStop(y/2,new Eo(255,255,255,0)).addColorStop(A,p).addColorStop(1,c),T=new Hl(0,0,0,r).addColorStop(0,a).addColorStop(.67*s,c).addColorStop(u,h).addColorStop(1,d);e.cachedPaints=[E,S,T],g.cachedPaints=[v,b],f&&t.unlink(f),f=t=>{switch(t){case VT.IDLE:e.fill=E,e.stroke=o.deselectedStroke,e.lineWidth=o.deselectedLineWidth,e.opacity=o.deselectedButtonOpacity,g.fill=v,g.opacity=o.deselectedButtonOpacity;break;case VT.OVER:e.fill=S,e.stroke=o.overStroke,e.lineWidth=o.overLineWidth,e.opacity=o.overButtonOpacity,g.fill=b,g.opacity=o.overButtonOpacity;break;case VT.PRESSED:e.fill=T,e.stroke=o.selectedStroke,e.lineWidth=o.selectedLineWidth,e.opacity=o.selectedButtonOpacity,g.fill=b,g.opacity=o.selectedButtonOpacity;break;default:throw new Error("unsupported interactionState: "+t)}},t.link(f)};e.selfBoundsProperty.link(y),this.disposeThreeDAppearanceStrategy=()=>{e.selfBoundsProperty.unlink(y),t.hasListener(f)&&t.unlink(f),a.dispose(),l.dispose(),h.dispose(),c.dispose(),u.dispose(),d.dispose(),p.dispose()}}dispose(){this.disposeThreeDAppearanceStrategy()}},Zv.register("RectangularButton",IT);class kT extends IT{constructor(e){const t=$e()({soundPlayer:wT,tandem:Oi.REQUIRED,tandemNameSuffix:"Button"},e),i=t.listener,n=_.omit(t,["listener"]),r=new CT(n);super(r,new PT(r),n),this.pushButtonModel=r,i&&this.addListener(i);const s=()=>{t.soundPlayer.play()};r.produceSoundEmitter.addListener(s),this.disposeRectangularPushButton=function(){r.produceSoundEmitter.removeListener(s),r.dispose()}}dispose(){super.dispose(),this.disposeRectangularPushButton()}addListener(e){this.pushButtonModel.addListener(e)}removeListener(e){this.pushButtonModel.removeListener(e)}}Zv.register("RectangularPushButton",kT);class qT extends Lh{constructor(e,t,i){var n;const r=$e()({alignChildren:qT.CENTER},i),s=qb(t,null===(n=r.tandem)||void 0===n?void 0:n.createTandem("elements")),o=e=>{for(let i=0;ie.dispose())}}dispose(){this.disposeToggleNode(),super.dispose()}static CENTER(e){for(let t=1;tt},{value:!1,createNode:()=>i}],n)}}Zv.register("BooleanToggleNode",BT);const OT="data:audio/mpeg;base64,//swxAAABdzxBVQRADFFHaWrNxAA6lqlJJEQAExvBGPAACkboRpPkaQjfnfz5z/zvk6HfzvO//6nzn/8n8Wo50RIcE5h04AwQBAIwAHAAGGKl44UnQFxrI7b6JARZgWfzRC7X2cjUCZG/TgeAfXziIB7AOgm3/Dlw5chhj/4aoJEnxOhr/+bkURTNP+37dN///zd5/WqMcFKOhHs//syxAMACFBlQBnXgAEQCuRbvLAAMh2cNcpzMDxDOxVSMlAjYsYOAlbMUQJ8hAkSABkLAPbGhQfrk7xotjWuYO3uc9FKLMWDXX39eK91WL8a4ARAYAYFAQZg2BpmMcTuZ9zx5rwEJFAZZgjA1mC8BuLASofGAOAMhs/U/GV40k0Dkso2K6Npbban/lI2Pnd6J3///t66ABTcYocjaf/7MsQDgAX8JTutseaw6RRnNZCJDkFdpsKMGTznDUOCFN3UBmSx0M4MasPlPO6Ar07embS//T/2f27SK//YUG03dpZI2oMaBN8MJA5tI6MkldtNZgLZ+dUe9LvQy6Odv9a9cr9VPRUaBtgq9EWmz6Xj3KZTzOv1ylUAC+0kk0oAEUn+I0HZ6jICCWahweFTlrz07qq2Ls9T3N/Xljr/+zLEEgAFSBMjQWBgUI8CIvA3vAbc1Vf//uoAABTglUoQoEElDJAFw2zpqMe6sqMzu59/9uvz32/t/onv/5FMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//swxC8DwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",HT=GS(jS,OT),YT=IS.createLock(OT),GT=new zS;let FT=!1;const UT=()=>{FT||(YT(),FT=!0)},zT=jS.decodeAudioData(HT.buffer,e=>{null===GT.audioBufferProperty.value&&(GT.audioBufferProperty.set(e),UT())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),GT.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),UT()});zT&&zT.then(e=>{null===GT.audioBufferProperty.value&&(GT.audioBufferProperty.set(e),UT())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),UT()});const WT=GT,jT=new Jb(WT,{soundClipOptions:{initialOutputLevel:.7},soundManagerOptions:{categoryName:"user-interface"}});FS.register("toggleOffSoundPlayer",jT);const XT=jT,QT="data:audio/mpeg;base64,//swxAAAByAnDnWRADEZkyy3M0ALJQcEAMk013znpOVkWGNCg9vD4oJlTQcNxQBIJ0PxSUlJSCwfB8Hz+CAIAN/DH/gg78EHS7//9QIJSLq/wFHg+AwFAAAAAAfFvo6+SmoCLgXFVlJaBRlrks8EfgdfwNGNDIX1icAtgSPunkTDV42yCf+OWMmXBP4hJ/+RAZg8nmowgLA3CbIw//syxAOACDxjRhnXgAEOCqVnuqAERLIypm8wTCMyMagDMoYEAyRAAgCAQ9za/ELra7bNcNI9BMVmPx3pF7P7a/wstMTOL6//gwrwjSeVKioAAkqgEBggJpjMDZgiPBm+0xy7jJ482ppET4kOhhSHhg8CKMhgGASP09uliMpAaC+Gyqiiyjd9/QiJjzxL//////p9lUBqv86UKJp6wP/7MsQEgAWgKTMsbMLwvwUmdaCI3g146KXMwJVAHDYhAjvxQKf+SIBJPJWbIrZ/1aVs/k7Lf2//7QQilFbJGkVBjWeEsADYyEamuw0dNdmGxS1qmJCrAKrGJZ+TX/V+1zX0fitWyROXKQQiijI22kTAod9keTOhUgChZfu1VSXOv2ubHdG+h4jXu2fLMV00rQvomqNH8kAAAARGFj3/+zLEGgDFrBkvoeWAcKKCYxBngBYhtAWgNUjlVDuFH+de4qlT5ENEZ7/8t7K3cKjB1Q/kmOcRTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//swxDMDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",KT=GS(jS,QT),JT=IS.createLock(QT),ZT=new zS;let $T=!1;const ew=()=>{$T||(JT(),$T=!0)},tw=jS.decodeAudioData(KT.buffer,e=>{null===ZT.audioBufferProperty.value&&(ZT.audioBufferProperty.set(e),ew())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),ZT.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),ew()});tw&&tw.then(e=>{null===ZT.audioBufferProperty.value&&(ZT.audioBufferProperty.set(e),ew())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),ew()});const iw=ZT,nw=new Jb(iw,{soundClipOptions:{initialOutputLevel:.7},soundManagerOptions:{categoryName:"user-interface"}});FS.register("toggleOnSoundPlayer",nw);const rw=nw;class sw extends ar{constructor(e){super([e.looksOverProperty,e.looksPressedProperty],(e,t)=>e&&!t?VT.OVER:t?VT.PRESSED:VT.IDLE,{valueType:VT})}}Zv.register("ToggleButtonInteractionStateProperty",sw);class ow extends xT{constructor(e,t,i,n){const r=$e()({tandem:Oi.REQUIRED},n);super(r),this.valueOff=e,this.valueOn=t,this.valueProperty=i;const s=e=>{(this.overProperty.get()||this.focusedProperty.get())&&this.enabledProperty.get()&&!this.interrupted&&(e||this.toggle())};this.downProperty.link(s),this.toggledEmitter=new Yn({tandem:r.tandem.createTandem("toggledEmitter"),phetioDocumentation:"Emits when the button is toggled",phetioEventType:wi.USER});this.toggledEmitter.addListener(()=>{this.valueProperty.value=this.valueProperty.value===this.valueOff?this.valueOn:this.valueOff}),this.disposeToggleButtonModel=()=>{this.downProperty.unlink(s),this.toggledEmitter.dispose()}}dispose(){this.disposeToggleButtonModel(),super.dispose()}toggle(){this.toggledEmitter.emit(),this.produceSoundEmitter.emit()}}Zv.register("ToggleButtonModel",ow);class aw extends IT{constructor(e,t,i,n){const r=$e()({valueOffSoundPlayer:XT,valueOnSoundPlayer:rw,tandem:Oi.REQUIRED,phetioFeatured:!0,tandemNameSuffix:"Button"},n),s=new ow(t,i,e,r),o=new sw(s);super(s,o,r),this.addLinkedElement(e,{tandemName:"property"});const a=()=>{e.value===t?r.valueOffSoundPlayer.play():e.value===i&&r.valueOnSoundPlayer.play()};this.buttonModel.produceSoundEmitter.addListener(a),this.disposeRectangularToggleButton=()=>{this.buttonModel.produceSoundEmitter.removeListener(a),s.dispose()}}dispose(){this.disposeRectangularToggleButton(),super.dispose()}}Zv.register("RectangularToggleButton",aw);class lw extends aw{constructor(e,t,i,n){const r=new BT(e,t,i);super(e,!1,!0,$e()({content:r,tandem:Oi.REQUIRED,tandemNameSuffix:"Button"},n)),this.disposeBooleanRectangularToggleButton=()=>{r.dispose()}}dispose(){this.disposeBooleanRectangularToggleButton(),super.dispose()}}Zv.register("BooleanRectangularToggleButton",lw);class hw extends lw{constructor(e,t){const i=$e()({sideLength:25,stroke:"black",touchAreaXDilation:5,touchAreaYDilation:5,tandem:Oi.REQUIRED,tandemNameSuffix:"Button"},t);i.cornerRadius=.1*i.sideLength,i.xMargin=.2*i.sideLength,i.yMargin=i.xMargin,i.buttonAppearanceStrategy=MT.FlatAppearanceStrategy;const n=.6*i.sideLength,r={lineWidth:.15*i.sideLength,stroke:"white",centerX:i.sideLength/2,centerY:i.sideLength/2,pickable:!1},s=(new bs).moveTo(n/2,0).lineTo(n/2,n).moveTo(0,n/2).lineTo(n,n/2),o=new Cc(s,r),a=(new bs).moveTo(-n/2,0).lineTo(n/2,0),l=new Cc(a,r);super(e,l,o,i);const h=e=>{this.baseColor=e?"rgb( 255, 85, 0 )":"rgb( 0, 179, 0 )",this.setPDOMAttribute("aria-expanded",e)};e.link(h),this.disposeExpandCollapseButton=()=>{e.unlink(h)}}dispose(){this.disposeExpandCollapseButton(),super.dispose()}}Zv.register("ExpandCollapseButton",hw);const cw=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return Bt.toFixed(e,t)};class uw extends jt{}_defineProperty(uw,"MOUSE",new(we=uw)),_defineProperty(uw,"TOUCH",new we),_defineProperty(uw,"NONE",new we),_defineProperty(uw,"enumeration",new Jt(we));class dw{constructor(e,t){this.sim=e,this.simDisplay=t,this.activeProperty=new vn(!1),this.visualTreeVisibleProperty=new Nn(!1,{tandem:Oi.OPT_OUT}),this.pdomTreeVisibleProperty=new Nn(!1,{tandem:Oi.OPT_OUT}),this.underPointerVisibleProperty=new Nn(!0,{tandem:Oi.OPT_OUT}),this.optionsVisibleProperty=new Nn(!0,{tandem:Oi.OPT_OUT}),this.previewVisibleProperty=new Nn(!1,{tandem:Oi.OPT_OUT}),this.selectedNodeContentVisibleProperty=new Nn(!0,{tandem:Oi.OPT_OUT}),this.selectedTrailContentVisibleProperty=new Nn(!0,{tandem:Oi.OPT_OUT}),this.highlightVisibleProperty=new Nn(!0,{tandem:Oi.OPT_OUT}),this.boundsVisibleProperty=new Nn(!0,{tandem:Oi.OPT_OUT}),this.selfBoundsVisibleProperty=new Nn(!1,{tandem:Oi.OPT_OUT}),this.getHelperNodeVisibleProperty=new Nn(!0,{tandem:Oi.OPT_OUT}),this.helperVisibleProperty=new Nn(!0,{tandem:Oi.OPT_OUT}),this.inputBasedPickingProperty=new Nn(!0,{tandem:Oi.OPT_OUT}),this.useLeafNodeProperty=new Nn(!1,{tandem:Oi.OPT_OUT}),this.pointerAreaTypeProperty=new gT(uw.MOUSE,{tandem:Oi.OPT_OUT}),this.pointerPositionProperty=new vn(Ht.ZERO),this.overInterfaceProperty=new Nn(!1,{tandem:Oi.OPT_OUT}),this.selectedTrailProperty=new vn(null),this.treeHoverTrailProperty=new vn(null),this.pointerTrailProperty=new ir([this.pointerPositionProperty,this.overInterfaceProperty,this.pointerAreaTypeProperty,this.inputBasedPickingProperty],(e,i,n,r)=>{if(i)return null;if(!r)return Pw(t.rootNode,e);let s=t.rootNode.hitTest(e,n===uw.MOUSE,n===uw.TOUCH);if(s&&!this.useLeafNodeProperty.value){for(;s.length>0&&0===s.lastNode().inputListeners.length;)s.removeDescendant();if(0===s.length)s=null;else{const e=s.lastNode().inputListeners[0];e instanceof hm&&e.targetNode&&e.targetNode!==s.lastNode()&&s.containsNode(e.targetNode)&&(s=s.subtrailTo(e.targetNode))}}return s},{tandem:Oi.OPT_OUT,valueComparisonStrategy:"equalsFunction"}),this.previewTrailProperty=new ir([this.selectedTrailProperty,this.treeHoverTrailProperty,this.pointerTrailProperty],(e,t,i)=>e||(t||i)),this.previewShapeProperty=new ir([this.previewTrailProperty,this.inputBasedPickingProperty,this.pointerAreaTypeProperty],(e,t,i)=>e?t?_w(e,i===uw.MOUSE,i===uw.TOUCH):_w(e,!1,!1):null),this.helperNodeProperty=new ir([this.selectedTrailProperty],e=>{if(e){const t=e.lastNode();return(e=>!!e.getHelperNode)(t)?t.getHelperNode():null}return null}),this.screenViewProperty=new vn(null),this.imageDataProperty=new vn(null),this.colorProperty=new ir([this.pointerPositionProperty,this.imageDataProperty],(e,t)=>{if(!t)return Eo.TRANSPARENT;const i=Math.floor(e.x/this.simDisplay.width*t.width),n=Math.floor(e.y/this.simDisplay.height*t.height),r=4*(i+t.width*n);return i<0||n<0||i>t.width||n>t.height?Eo.TRANSPARENT:new Eo(t.data[r],t.data[r+1],t.data[r+2],t.data[r+3]/255)},{tandem:Oi.OPT_OUT});const i=new Nn(phet.chipper.queryParameters.fuzz,{tandem:Oi.OPT_OUT});i.lazyLink(e=>{phet.chipper.queryParameters.fuzz=e});const n=new Nn(!1,{tandem:Oi.OPT_OUT}),r=new vn({name:"view units",multiplier:0}),s=new vn(ti.NOTHING),o=new Lh({renderer:"svg"}),a=new dr(this.pointerPositionProperty,{tandem:Oi.OPT_OUT,bidirectional:!0,map:e=>{const t=this.screenViewProperty.value;if(t){const i=t.globalToLocalPoint(e);return`global: x: ${cw(e.x)}, y: ${cw(e.y)}
view: x: ${cw(i.x)}, y: ${cw(i.y)}`}return"-"}}),l=new Nf(a,{font:new Jv(12)}),h=new dr(this.colorProperty,{tandem:Oi.OPT_OUT,bidirectional:!0,map:e=>`${e.toHexString()} ${e.toCSS()}`}),c=new Nf(h,{font:new Jv(12)});this.colorProperty.link(e=>{c.fill=Eo.getLuminance(e)>128?Eo.BLACK:Eo.WHITE});const u=new Eo("#804000"),d=new Eo("#208020"),p=new Eo(255,100,0),m=new Eo(0,0,255),g=new Eo(255,0,0),f=new Eo(200,0,200),y=new ir([this.inputBasedPickingProperty,this.pointerAreaTypeProperty],(e,t)=>e?t===uw.MOUSE?m:t===uw.TOUCH?g:f:p,{tandem:Oi.OPT_OUT}),A=new eS(c,{cornerRadius:0,stroke:null,fill:this.colorProperty}),E=new Lh({visibleProperty:this.previewVisibleProperty}),v=new Wc(0,0,200,200,{fill:new Fl(new Lh({children:[new Wc(0,0,10,10,{fill:"#ddd"}),new Wc(10,10,10,10,{fill:"#ddd"}),new Wc(0,10,10,10,{fill:"#fafafa"}),new Wc(10,0,10,10,{fill:"#fafafa"})]}),2,0,0,20,20),stroke:"black",visibleProperty:this.previewVisibleProperty});this.previewTrailProperty.link(e=>{if(E.removeAllChildren(),e){E.addChild(v);const t=e.lastNode();if(t.bounds.isValid()){const e=.9*window.devicePixelRatio*Math.min(v.selfBounds.width/t.width,v.selfBounds.height/t.height);E.addChild(new Lh({scale:e/window.devicePixelRatio,center:v.center,children:[t.rasterized({resolution:e,sourceBounds:t.bounds.dilated(.01*t.bounds.width).roundedOut()})]}))}}});const S=new cf({spacing:3,align:"left",visibleProperty:this.selectedNodeContentVisibleProperty});this.previewTrailProperty.link(e=>{S.children=e?Tw(e):[]});const b=new pw(i,"Fuzz"),T=new pw(n,"Measuring Tape"),w=new pw(this.visualTreeVisibleProperty,"Visual Tree"),V=new pw(this.pdomTreeVisibleProperty,"PDOM Tree"),P=new pw(this.inputBasedPickingProperty,"Input-based"),x=new pw(this.useLeafNodeProperty,"Use Leaf",{enabledProperty:this.inputBasedPickingProperty}),C=new pw(this.highlightVisibleProperty,"Highlight",{labelOptions:{fill:y}}),R=new pw(this.boundsVisibleProperty,"Bounds",{labelOptions:{fill:u}}),N=new pw(this.selfBoundsVisibleProperty,"Self Bounds",{labelOptions:{fill:d}}),M=new pw(this.getHelperNodeVisibleProperty,"getHelperNode()"),L=new Ob(this.pointerAreaTypeProperty,[{value:uw.MOUSE,createNode:e=>new qc("Mouse",{fontSize:12})},{value:uw.TOUCH,createNode:e=>new qc("Touch",{fontSize:12})},{value:uw.NONE,createNode:e=>new qc("None",{fontSize:12})}],{orientation:"horizontal",enabledProperty:this.inputBasedPickingProperty,radioButtonOptions:{xSpacing:3},spacing:10,tandem:Oi.OPT_OUT}),I=new cf({align:"left",visibleProperty:this.selectedTrailContentVisibleProperty});this.previewTrailProperty.link(e=>{if(I.children=[],e){e.nodes.slice().forEach((t,i)=>{I.addChild(new Nf(`${i>0?e.nodes[i-1].children.indexOf(t):"-"} ${t.constructor.name}`,{font:new Jv(12),fill:i===e.nodes.length-1?"black":"#bbb",layoutOptions:{leftMargin:10*i},cursor:"pointer",inputListeners:[new cm({fire:()=>{this.selectedTrailProperty.value=e.subtrailTo(t),q()},tandem:Oi.OPT_OUT})]}))}),e.lastNode().children.forEach((t,i)=>{I.addChild(new Nf(`${e.lastNode().children.indexOf(t)} ${t.constructor.name}`,{font:new Jv(12),fill:"#88f",layoutOptions:{leftMargin:10*e.nodes.length},cursor:"pointer",inputListeners:[new cm({fire:()=>{this.selectedTrailProperty.value=e.copy().addDescendant(t,i),q()},tandem:Oi.OPT_OUT})]}))}),e.isVisible()||I.addChild(new qc("invisible",{fill:"#60a",fontSize:12})),1!==e.getOpacity()&&I.addChild(new qc("opacity: "+e.getOpacity(),{fill:"#888",fontSize:12}));const t=_.some(e.nodes,e=>!1===e.pickable||!e.visible),i=_.some(e.nodes,e=>e.inputListeners.length>0||!0===e.pickable);!t&&i&&I.addChild(new qc("Hit Tested",{fill:"#f00",fontSize:12})),e.getMatrix().isIdentity()||I.addChild(new Lh({children:[new vw(e.getMatrix())]}))}});const D=new yw(this.visualTreeVisibleProperty,this,()=>new gw(new sc(t.rootNode),this)),k=new yw(this.pdomTreeVisibleProperty,this,()=>new fw(t._rootPDOMInstance,this)),q=()=>{D.focusSelected(),k.focusSelected()},B=new Cc(null,{visibleProperty:this.boundsVisibleProperty,stroke:u,fill:u.withAlpha(.1),lineDash:[2,2],lineDashOffset:2});this.previewTrailProperty.link(e=>{e&&e.lastNode().localBounds.isValid()?B.shape=bs.bounds(e.lastNode().localBounds).transformed(e.getMatrix()):B.shape=null});const O=new Cc(null,{visibleProperty:this.selfBoundsVisibleProperty,stroke:d,fill:d.withAlpha(.1),lineDash:[2,2],lineDashOffset:1});this.previewTrailProperty.link(e=>{e&&e.lastNode().selfBounds.isValid()?O.shape=bs.bounds(e.lastNode().selfBounds).transformed(e.getMatrix()):O.shape=null});const H=new ir([y],e=>e.withAlpha(.2),{tandem:Oi.OPT_OUT}),Y=new Cc(null,{stroke:y,lineDash:[2,2],fill:H,visibleProperty:this.highlightVisibleProperty});this.previewShapeProperty.link(e=>{Y.shape=e});const G=new Lh({visibleProperty:this.getHelperNodeVisibleProperty});this.selectedTrailProperty.link(e=>{e&&(G.matrix=e.getMatrix())}),this.helperNodeProperty.link(e=>{G.removeAllChildren(),e&&G.addChild(e)}),o.addChild(B),o.addChild(O),o.addChild(Y);const F=new Lh;F.addInputListener(new hm({press:()=>{this.selectedTrailProperty.value=this.pointerTrailProperty.value,q()},tandem:Oi.OPT_OUT})),o.addChild(F),o.addChild(G);const U=new Ug({orientation:"vertical",spacing:5,align:"left",children:[l,A],visibleProperty:this.underPointerVisibleProperty}),z=new cf({spacing:3,align:"left",children:[Aw("Tools"),new cf({spacing:3,align:"left",children:[new hf({spacing:10,children:[b,T]}),new hf({spacing:10,children:[w,...t._accessible?[V]:[]]})]}),Aw("Picking",void 0,{layoutOptions:{topMargin:3}}),new cf({spacing:3,align:"left",children:[new hf({spacing:10,children:[P,x]}),L]}),Aw("Show",void 0,{layoutOptions:{topMargin:3}}),new cf({spacing:3,align:"left",children:[new hf({spacing:10,children:[C,M]}),new hf({spacing:10,children:[R,N]})]})],visibleProperty:this.optionsVisibleProperty}),W=new cf({spacing:5,align:"left",children:[Ew("Under Pointer",this.underPointerVisibleProperty,U,{layoutOptions:{topMargin:0}}),U,Ew("Options",this.optionsVisibleProperty,z),z,Ew("Preview",this.previewVisibleProperty,E),E,Ew("Selected Trail",this.selectedTrailContentVisibleProperty,I),I,Ew("Selected Node",this.selectedNodeContentVisibleProperty,S),S],visibleProperty:this.helperVisibleProperty}),j=new cf({spacing:5,align:"left",children:[Ew("Helper",this.helperVisibleProperty,W),new gg,W]}),X=new eS(j,{fill:"rgba(255,255,255,0.85)",stroke:"rgba(0,0,0,0.85)",cornerRadius:0});X.addInputListener(new dm({translateNode:!0,targetNode:X,tandem:Oi.OPT_OUT})),X.addInputListener({wheel:e=>{const t=e.domEvent.deltaY;X.y-=1*t}}),o.addChild(X),o.addChild(D),o.addChild(k);const Q=new YS(r,{visibleProperty:n,textBackgroundColor:"rgba(0,0,0,0.5)"});Q.basePositionProperty.value=new Ht(100,300),Q.tipPositionProperty.value=new Ht(200,300),o.addChild(Q);const K=e=>{this.helperDisplay.width=e.width,this.helperDisplay.height=e.height,s.value=s.value.withMaxX(e.width).withMaxY(e.height),F.mouseArea=new ti(0,0,e.width,e.height),F.touchArea=new ti(0,0,e.width,e.height),D.resize(e),k.resize(e)},J=e=>{var t;this.overInterfaceProperty.value=X.bounds.containsPoint(this.pointerPositionProperty.value)||this.visualTreeVisibleProperty.value&&D.bounds.containsPoint(this.pointerPositionProperty.value)||this.pdomTreeVisibleProperty.value&&k.bounds.containsPoint(this.pointerPositionProperty.value)||G.containsPoint(this.pointerPositionProperty.value),null===(t=this.helperDisplay)||void 0===t||t.updateDisplay()};document.addEventListener("keyup",e=>{"Escape"===e.key&&(this.selectedTrailProperty.value=null)}),this.activeProperty.lazyLink(t=>{if(t){e.activeProperty.value=!1;const t=e.selectedScreenProperty.value;t.hasView()?this.screenViewProperty.value=t.view:this.screenViewProperty.value=null,this.helperDisplay=new VE(o,{assumeFullWindow:!0}),this.helperDisplay.initializeEvents(),e.dimensionProperty.link(K),di.addListener(J),document.body.appendChild(this.helperDisplay.domElement),this.helperDisplay.domElement.style.zIndex="10000";const i=e=>{this.pointerPositionProperty.value=e.pointer.point};this.helperDisplay.addInputListener({move:i,down:i,up:i}),this.screenViewProperty.value&&(r.value={name:"view units",multiplier:this.screenViewProperty.value.getGlobalToLocalMatrix().getScaleVector().x}),this.simDisplay.foreignObjectRasterization(e=>{if(e){const t=document.createElement("img");t.addEventListener("load",()=>{const e=t.width,i=t.height,n=document.createElement("canvas"),r=n.getContext("2d");n.width=e,n.height=i,r.drawImage(t,0,0),this.activeProperty.value&&(this.imageDataProperty.value=r.getImageData(0,0,e,i))}),t.src=e}else console.log("Could not load foreign object rasterization")})}else e.dimensionProperty.unlink(K),di.removeListener(J),document.body.removeChild(this.helperDisplay.domElement),this.helperDisplay.dispose(),e.activeProperty.value=!0,this.imageDataProperty.value=null,this.visualTreeVisibleProperty.value=!1})}static initialize(e,t){document.addEventListener("keydown",i=>{i.ctrlKey&&"H"===i.key&&(dw.helper||(dw.helper=new dw(e,t)),dw.helper.activeProperty.value=!dw.helper.activeProperty.value)})}}qE.register("Helper",dw);class pw extends pT{constructor(e,t,i){const n=$e()({tandem:Oi.OPT_OUT,boxWidth:14,labelOptions:{font:new Jv(12)}},i);super(e,new Nf(t,n.labelOptions),n)}}class mw extends Lh{constructor(e,t){const i=$e()({createChildren:()=>[],spacing:0,indent:5},t);super({excludeInvisibleChildrenFromBounds:!0}),this.selfNode=e,this.selfNode.centerY=0,this.expandedProperty=new vn(!0),this.childTreeNodes=er({elements:i.createChildren()});const n=(new bs).moveToPoint(Ht.createPolar(4.8,3/4*Math.PI).plusXY(1.5,0)).lineTo(1.5,0).lineToPoint(Ht.createPolar(4.8,5/4*Math.PI).plusXY(1.5,0));this.expandCollapseButton=new Wc(-6,-6,12,12,{children:[new Cc(n,{stroke:"#888",lineCap:"round",lineWidth:1.5})],visible:!1,cursor:"pointer",right:0}),this.expandedProperty.link(e=>{this.expandCollapseButton.rotation=e?Math.PI/2:0}),this.expandCollapseButton.addInputListener(new cm({fire:()=>{this.expandedProperty.value=!this.expandedProperty.value},tandem:Oi.OPT_OUT})),this.addChild(this.expandCollapseButton),this.childContainer=new Ug({orientation:"vertical",align:"left",spacing:i.spacing,children:this.childTreeNodes,x:i.indent,y:this.selfNode.bottom+i.spacing,visibleProperty:this.expandedProperty}),this.addChild(this.childContainer),this.addChild(e);const r=()=>{this.childContainer.children=this.childTreeNodes,this.expandCollapseButton.visible=this.childTreeNodes.length>0};this.childTreeNodes.addItemAddedListener(()=>{r()}),this.childTreeNodes.addItemRemovedListener(()=>{r()}),r(),this.mutate(i)}expand(){this.expandedProperty.value=!0}collapse(){this.expandedProperty.value=!1}expandRecusively(){this.expandedProperty.value=!0,this.childTreeNodes.forEach(e=>{e.expandRecusively()})}collapseRecursively(){this.expandedProperty.value=!1,this.childTreeNodes.forEach(e=>{e.collapseRecursively()})}}class gw extends mw{constructor(e,t){const i=e.lastNode(),n=e.isVisible(),r=new Io({size:12}),s=new hf({spacing:5}),o=i.constructor.name;o&&s.addChild(new qc(o,{font:r,pickable:!1,fill:n?"#000":"#60a"})),i instanceof qc&&s.addChild(new qc('"'+i.string+'"',{font:r,pickable:!1,fill:"#666"}));const a=Wc.bounds(s.bounds,{children:[s],cursor:"pointer",fill:new ir([t.selectedTrailProperty,t.pointerTrailProperty],(t,i)=>t&&e.equals(t)?"rgba(0,128,255,0.4)":i&&e.equals(i)?"rgba(0,128,255,0.2)":"transparent",{tandem:Oi.OPT_OUT})});a.addInputListener({enter:()=>{t.treeHoverTrailProperty.value=e},exit:()=>{t.treeHoverTrailProperty.value=null}}),a.addInputListener(new cm({fire:()=>{t.selectedTrailProperty.value=e},tandem:Oi.OPT_OUT})),super(a,{createChildren:()=>e.lastNode().children.map(i=>new gw(e.copy().addDescendant(i),t))}),i.visible||(this.expandedProperty.value=!1),this.trail=e}find(e){if(e.equals(this.trail))return this;{const t=_.find(this.childTreeNodes,t=>e.isExtensionOf(t.trail,!0));return t?t.find(e):null}}}class fw extends mw{constructor(e,t){const i=e.trail,n=i.isPDOMVisible(),r=new Io({size:12}),s=new hf({spacing:5});if(i.nodes.length){const t=n?"#000":"#60a",o=i.lastNode();o.tagName&&s.addChild(new qc(o.tagName,{font:new Io({size:12,weight:"bold"}),fill:t})),o.labelContent&&s.addChild(new qc(o.labelContent,{font:r,fill:"#800"})),o.innerContent&&s.addChild(new qc(o.innerContent,{font:r,fill:"#080"})),o.descriptionContent&&s.addChild(new qc(o.descriptionContent,{font:r,fill:"#444"}));const a=e.parent?e.parent.trail:new sc,l=i.nodes.slice(a.nodes.length).map(e=>e.constructor.name).filter(e=>"Node"!==e).join(",");l&&s.addChild(new qc(`(${l})`,{font:r,fill:"#008"}))}else s.addChild(new qc("(root)",{font:r}));const o=Wc.bounds(s.bounds,{children:[s],cursor:"pointer",fill:new ir([t.selectedTrailProperty,t.pointerTrailProperty],(e,t)=>e&&i.equals(e)?"rgba(0,128,255,0.4)":t&&i.equals(t)?"rgba(0,128,255,0.2)":"transparent",{tandem:Oi.OPT_OUT})});i.length&&(o.addInputListener({enter:()=>{t.treeHoverTrailProperty.value=i},exit:()=>{t.treeHoverTrailProperty.value=null}}),o.addInputListener(new cm({fire:()=>{t.selectedTrailProperty.value=i},tandem:Oi.OPT_OUT}))),super(o,{createChildren:()=>e.children.map(e=>new fw(e,t))}),this.instance=e,this.trail=i}find(e){if(e.equals(this.instance.trail))return this;{const t=_.find(this.childTreeNodes,t=>e.isExtensionOf(t.instance.trail,!0));return t?t.find(e):null}}}class yw extends Wc{constructor(e,t,i){super({fill:"rgba(255,255,255,0.85)",stroke:"black",rectWidth:400,visibleProperty:e,pickable:!0}),this.helper=t,this.treeContainer=new Lh,this.addChild(this.treeContainer),this.addInputListener(new dm({targetNode:this,drag:(e,t)=>{this.x=this.x+t.modelDelta.x},tandem:Oi.OPT_OUT})),this.addInputListener({wheel:e=>{const t=e.domEvent.deltaX,i=e.domEvent.deltaY;this.treeNode&&(this.treeNode.x-=1*t,this.treeNode.y-=1*i),this.constrainTree()}}),t.pointerTrailProperty.lazyLink(()=>{t.selectedTrailProperty.value||this.focusPointer()}),pr.multilink([t.activeProperty,e],(e,t)=>{e&&t?(this.treeNode=i(),this.treeNode.x=500,this.treeNode.y=500,this.treeContainer.children=[this.treeNode],this.focusSelected(),this.constrainTree()):this.treeContainer.children=[]})}resize(e){this.rectHeight=e.height,this.right=e.width,this.treeContainer.clipArea=bs.bounds(this.localBounds.dilated(10))}constrainTree(){this.treeNode&&(this.treeNode.bottomthis.selfBounds.top+5&&(this.treeNode.top=this.selfBounds.top+5),this.treeNode.rightthis.selfBounds.left+8&&(this.treeNode.left=this.selfBounds.left+8))}focusTrail(e){if(this.treeNode){const t=this.treeNode.find(e);if(t){const e=t.localToGlobalPoint(t.selfNode.center).y-this.centerY;this.treeNode.y-=e,this.constrainTree()}}}focusPointer(){this.helper.pointerTrailProperty.value&&this.focusTrail(this.helper.pointerTrailProperty.value)}focusSelected(){null!==this.helper.selectedTrailProperty.value&&this.focusTrail(this.helper.selectedTrailProperty.value)}}const Aw=(e,t,i)=>new qc(e,We({fontSize:14,fontWeight:"bold",visibleProperty:t?new ir([t.boundsProperty],e=>!e.isEmpty()):new vn(!0)},i)),Ew=(e,t,i,n)=>{const r=Aw(e,i,n);return r.addInputListener(new cm({fire:()=>{t.value=!t.value},tandem:Oi.OPT_OUT})),r.cursor="pointer",new hf({spacing:7,children:[new hw(t,{tandem:Oi.OPT_OUT,sideLength:14}),r],visibleProperty:r.visibleProperty})};class vw extends $g{constructor(e){super({xSpacing:5,ySpacing:0,children:[new qc(e.m00(),{layoutOptions:{column:0,row:0}}),new qc(e.m01(),{layoutOptions:{column:1,row:0}}),new qc(e.m02(),{layoutOptions:{column:2,row:0}}),new qc(e.m10(),{layoutOptions:{column:0,row:1}}),new qc(e.m11(),{layoutOptions:{column:1,row:1}}),new qc(e.m12(),{layoutOptions:{column:2,row:1}}),new qc(e.m20(),{layoutOptions:{column:0,row:2}}),new qc(e.m21(),{layoutOptions:{column:1,row:2}}),new qc(e.m22(),{layoutOptions:{column:2,row:2}})]})}}class Sw extends Cc{constructor(e){super(e,{maxWidth:15,maxHeight:15,stroke:"black",cursor:"pointer",strokePickable:!0}),this.addInputListener(new cm({fire:()=>xw(e.getSVGPath()),tandem:Oi.OPT_OUT}))}}class bw extends Pc{constructor(e){super(e.getImage(),{maxWidth:15,maxHeight:15})}}const Tw=e=>{const t=[],i=e.lastNode(),n=Qt(i.constructor).map(e=>e.name).filter(e=>e&&"Object"!==e),r=n.includes("Node")?n.slice(0,n.indexOf("Node")):n;r.length>0&&t.push(new Nf(r.map((e,t)=>0===t?`${e}`:`
 ${_.repeat(" ",t)}extends ${e}`).join(""),{font:new Jv(12)}));const s=(e,i)=>{t.push(new hf({spacing:0,align:"top",children:[new qc(e+": ",{fontSize:12}),i]}))},o=(e,t)=>{void 0!==t&&s(e,new Nf(""+t,{lineWrap:400,font:new Jv(12),cursor:"pointer",inputListeners:[new cm({fire:()=>xw(""+t),tandem:Oi.OPT_OUT})]}))},a=e=>new hf({spacing:4,children:[new Wc(0,0,10,10,{fill:e,stroke:"black",lineWidth:.5}),new qc(e.toHexString(),{fontSize:12}),new qc(e.toCSS(),{fontSize:12})],cursor:"pointer",inputListeners:[new cm({fire:()=>xw(e.toHexString()),tandem:Oi.OPT_OUT})]}),l=(e,t)=>{const i=e=>new hf({spacing:3,children:[new qc(e.ratio,{fontSize:12}),a(ww(e.color)||Eo.TRANSPARENT)]});t instanceof Bl?t instanceof Hl?s(e,new cf({align:"left",spacing:3,children:[new qc(`LinearGradient (${t.start.x},${t.start.y}) => (${t.end.x},${t.end.y})`,{fontSize:12}),...t.stops.map(i)]})):t instanceof Yl?s(e,new cf({align:"left",spacing:3,children:[new qc(`RadialGradient (${t.start.x},${t.start.y}) ${t.startRadius} => (${t.end.x},${t.end.y}) ${t.endRadius}`,{fontSize:12}),...t.stops.map(i)]})):t instanceof Gl&&s(e,new cf({align:"left",spacing:3,children:[new qc("Pattern",{fontSize:12}),new Pc(t.image,{maxWidth:10,maxHeight:10})]})):((e,t)=>{const i=ww(t);null!==i&&s(e,a(i))})(e,t)},h=(e,t)=>{t.equals(ti.NOTHING)||(t.equals(ti.EVERYTHING)?o(e,"everything"):s(e,new Nf(`x: [${t.minX}, ${t.maxX}]
y: [${t.minY}, ${t.maxY}]`,{font:new Jv(12)})))},c=(e,t)=>s(e,new Sw(t));return i.tandem.supplied&&o("tandem",i.tandem.phetioID.split(".").join(" ")),i instanceof Fc&&o("element",i.element.constructor.name),jh(i)&&(!i.widthSizable&&o("widthSizable",i.widthSizable),null!==i.preferredWidth&&o("preferredWidth",i.preferredWidth),i.preferredWidth!==i.localPreferredWidth&&o("localPreferredWidth",i.localPreferredWidth),null!==i.minimumWidth&&o("minimumWidth",i.minimumWidth),i.minimumWidth!==i.localMinimumWidth&&o("localMinimumWidth",i.localMinimumWidth)),Zh(i)&&(!i.heightSizable&&o("heightSizable",i.heightSizable),null!==i.preferredHeight&&o("preferredHeight",i.preferredHeight),i.preferredHeight!==i.localPreferredHeight&&o("localPreferredHeight",i.localPreferredHeight),null!==i.minimumHeight&&o("minimumHeight",i.minimumHeight),i.minimumHeight!==i.localMinimumHeight&&o("localMinimumHeight",i.localMinimumHeight)),i.layoutOptions&&o("layoutOptions",JSON.stringify(i.layoutOptions,null,2)),i instanceof _g&&(!i.resize&&o("resize",i.resize),!i.layoutOrigin.equals(Ht.ZERO)&&o("layoutOrigin",i.layoutOrigin)),i instanceof Ug&&(o("orientation",i.orientation),o("align",i.align),i.spacing&&o("spacing",i.spacing),i.lineSpacing&&o("lineSpacing",i.lineSpacing),o("justify",i.justify),i.justifyLines&&o("justifyLines",i.justifyLines),i.wrap&&o("wrap",i.wrap),i.stretch&&o("stretch",i.stretch),i.grow&&o("grow",i.grow),i.leftMargin&&o("leftMargin",i.leftMargin),i.rightMargin&&o("rightMargin",i.rightMargin),i.topMargin&&o("topMargin",i.topMargin),i.bottomMargin&&o("bottomMargin",i.bottomMargin),null!==i.minContentWidth&&o("minContentWidth",i.minContentWidth),null!==i.minContentHeight&&o("minContentHeight",i.minContentHeight),null!==i.maxContentWidth&&o("maxContentWidth",i.maxContentWidth),null!==i.maxContentHeight&&o("maxContentHeight",i.maxContentHeight)),i instanceof $g&&(o("xAlign",i.xAlign),o("yAlign",i.yAlign),i.xSpacing&&o("xSpacing",i.xSpacing),i.ySpacing&&o("ySpacing",i.ySpacing),i.xStretch&&o("xStretch",i.xStretch),i.yStretch&&o("yStretch",i.yStretch),i.xGrow&&o("xGrow",i.xGrow),i.yGrow&&o("yGrow",i.yGrow),i.leftMargin&&o("leftMargin",i.leftMargin),i.rightMargin&&o("rightMargin",i.rightMargin),i.topMargin&&o("topMargin",i.topMargin),i.bottomMargin&&o("bottomMargin",i.bottomMargin),null!==i.minContentWidth&&o("minContentWidth",i.minContentWidth),null!==i.minContentHeight&&o("minContentHeight",i.minContentHeight),null!==i.maxContentWidth&&o("maxContentWidth",i.maxContentWidth),null!==i.maxContentHeight&&o("maxContentHeight",i.maxContentHeight)),i instanceof Wc&&(h("rectBounds",i.rectBounds),(i.cornerXRadius||i.cornerYRadius)&&(i.cornerXRadius===i.cornerYRadius?o("cornerRadius",i.cornerRadius):(o("cornerXRadius",i.cornerXRadius),o("cornerYRadius",i.cornerYRadius)))),i instanceof Uc&&(o("x1",i.x1),o("y1",i.y1),o("x2",i.x2),o("y2",i.y2)),i instanceof Gc&&o("radius",i.radius),i instanceof qc&&(o("text",i.string),o("font",i.font),"hybrid"!==i.boundsMethod&&o("boundsMethod",i.boundsMethod)),i instanceof Nf&&(o("text",i.string),o("font",i.font instanceof Io?i.font.getFont():i.font),l("fill",i.fill),l("stroke",i.stroke),"hybrid"!==i.boundsMethod&&o("boundsMethod",i.boundsMethod),null!==i.lineWrap&&o("lineWrap",i.lineWrap)),i instanceof Pc&&(s("image",new bw(i)),o("imageWidth",i.imageWidth),o("imageHeight",i.imageHeight),1!==i.imageOpacity&&o("imageOpacity",i.imageOpacity),i.imageBounds&&h("imageBounds",i.imageBounds),i.initialWidth&&o("initialWidth",i.initialWidth),i.initialHeight&&o("initialHeight",i.initialHeight),i.hitTestPixels&&o("hitTestPixels",i.hitTestPixels)),(i instanceof Yc||i instanceof Xc)&&h("canvasBounds",i.canvasBounds),i instanceof Cc&&(i.shape&&c("shape",i.shape),"accurate"!==i.boundsMethod&&o("boundsMethod",i.boundsMethod)),(i instanceof Cc||i instanceof qc)&&(l("fill",i.fill),l("stroke",i.stroke),i.lineDash.length&&o("lineDash",i.lineDash),i.fillPickable||o("fillPickable",i.fillPickable),i.strokePickable&&o("strokePickable",i.strokePickable),1!==i.lineWidth&&o("lineWidth",i.lineWidth),"butt"!==i.lineCap&&o("lineCap",i.lineCap),"miter"!==i.lineJoin&&o("lineJoin",i.lineJoin),0!==i.lineDashOffset&&o("lineDashOffset",i.lineDashOffset),10!==i.miterLimit&&o("miterLimit",i.miterLimit)),i.tagName&&o("tagName",i.tagName),i.accessibleName&&o("accessibleName",i.accessibleName),i.helpText&&o("helpText",i.helpText),i.pdomHeading&&o("pdomHeading",i.pdomHeading),i.containerTagName&&o("containerTagName",i.containerTagName),i.containerAriaRole&&o("containerAriaRole",i.containerAriaRole),i.innerContent&&o("innerContent",i.innerContent),i.inputType&&o("inputType",i.inputType),i.inputValue&&o("inputValue",i.inputValue),i.pdomNamespace&&o("pdomNamespace",i.pdomNamespace),i.ariaLabel&&o("ariaLabel",i.ariaLabel),i.ariaRole&&o("ariaRole",i.ariaRole),i.ariaValueText&&o("ariaValueText",i.ariaValueText),i.labelTagName&&o("labelTagName",i.labelTagName),i.labelContent&&o("labelContent",i.labelContent),i.appendLabel&&o("appendLabel",i.appendLabel),i.descriptionTagName&&o("descriptionTagName",i.descriptionTagName),i.descriptionContent&&o("descriptionContent",i.descriptionContent),i.appendDescription&&o("appendDescription",i.appendDescription),i.pdomVisible||o("pdomVisible",i.pdomVisible),i.pdomOrder&&o("pdomOrder",i.pdomOrder.map(e=>null===e?"null":e.constructor.name)),i.visible||o("visible",i.visible),1!==i.opacity&&((e,t)=>{o(e,t)})("opacity",i.opacity),null!==i.pickable&&o("pickable",i.pickable),i.enabled||o("enabled",i.enabled),i.inputEnabled||o("inputEnabled",i.inputEnabled),null!==i.cursor&&o("cursor",i.cursor),i.transformBounds&&o("transformBounds",i.transformBounds),i.renderer&&o("renderer",i.renderer),i.usesOpacity&&o("usesOpacity",i.usesOpacity),i.layerSplit&&o("layerSplit",i.layerSplit),i.cssTransform&&o("cssTransform",i.cssTransform),i.excludeInvisible&&o("excludeInvisible",i.excludeInvisible),i.preventFit&&o("preventFit",i.preventFit),null!==i.webglScale&&o("webglScale",i.webglScale),i.matrix.isIdentity()||((e,t)=>{s(e,new vw(t))})("matrix",i.matrix),null!==i.maxWidth&&o("maxWidth",i.maxWidth),null!==i.maxHeight&&o("maxHeight",i.maxHeight),null!==i.clipArea&&c("clipArea",i.clipArea),null!==i.mouseArea&&(i.mouseArea instanceof ti?h("mouseArea",i.mouseArea):c("mouseArea",i.mouseArea)),null!==i.touchArea&&(i.touchArea instanceof ti?h("touchArea",i.touchArea):c("touchArea",i.touchArea)),i.inputListeners.length&&o("inputListeners",i.inputListeners.map(e=>e.constructor.name).join(", ")),t.push(new Jc(5,5)),h("localBounds",i.localBounds),i.localBoundsOverridden&&o("localBoundsOverridden",i.localBoundsOverridden),h("bounds",i.bounds),isFinite(i.width)&&o("width",i.width),isFinite(i.height)&&o("height",i.height),t.push(new kT({content:new qc("Copy Path",{fontSize:12}),listener:()=>xw("phet.joist.display.rootNode"+e.indices.map(e=>`.children[ ${e} ]`).join("")),tandem:Oi.OPT_OUT})),t},ww=e=>{const t=e instanceof _n||e instanceof vn?e.value:e;return null===t?null:Eo.toColor(t)},Vw=e=>{if(e instanceof Bl)return!0;{const t=ww(e);return!!t&&t.alpha>0}},Pw=(e,t)=>{if(!e.visible)return null;const i=e._transform.getInverse().timesVector2(t),n=e.clipArea;if(null!==n&&!n.containsPoint(i))return null;for(let r=e._children.length-1;r>=0;r--){const t=e._children[r],n=Pw(t,i);if(n)return n.addAncestor(e,r)}if(e.selfBounds.containsPoint(i))if(e instanceof Cc&&e.hasShape()){if(Vw(e.fill)&&e.getShape().containsPoint(i))return new sc(e);if(Vw(e.stroke)&&e.getStrokedShape().containsPoint(i))return new sc(e)}else if(e.containsPointSelf(i))return new sc(e);return null},xw=async e=>{var t;await(null===(t=navigator.clipboard)||void 0===t?void 0:t.writeText(e))},Cw=(e,t,i)=>{let n=bs.union([...t&&e.mouseArea?[e.mouseArea instanceof bs?e.mouseArea:bs.bounds(e.mouseArea)]:[],...i&&e.touchArea?[e.touchArea instanceof bs?e.touchArea:bs.bounds(e.touchArea)]:[],e.getSelfShape(),...e.children.filter(e=>e.visible&&!1!==e.pickable).map(e=>Cw(e,t,i).transformed(e.matrix))].filter(e=>e.bounds.isValid()));return e.hasClipArea()&&(n=n.shapeIntersection(e.clipArea)),n},_w=(e,t,i)=>{let n=Cw(e.lastNode(),t,i);for(let r=e.nodes.length-1;r>=0;r--){const t=e.nodes[r];t.hasClipArea()&&(n=n.shapeIntersection(t.clipArea)),n=n.transformed(t.matrix)}return n};class Rw extends hf{constructor(e,t,i){const n=$e()({fill:"white",highlightWidth:1,pickable:!1},i);n.spacing=e;const r=n.fill,s=Eo.toColor(r).withAlpha(0),o={fill:new Hl(0,0,0,t).addColorStop(0,s).addColorStop(.5,r).addColorStop(1,s)},a=new Wc(0,0,n.highlightWidth,t,o),l=new Wc(0,0,n.highlightWidth,t,o);n.children=[a,l],super(n)}}qE.register("HighlightNode",Rw);const Nw=Rw;class Mw extends(Md(Lh)){constructor(e,t,i){const n=$e()({cursor:"pointer",listener:null,highlightExtensionWidth:0,highlightExtensionHeight:0,highlightCenterOffsetX:0,highlightCenterOffsetY:0,pointerAreaDilationX:0,pointerAreaDilationY:0,enabledPropertyOptions:{phetioFeatured:!1},disabledOpacity:mo.DISABLED_OPACITY,tagName:"button"},i),r=function(t){return new Nw(e.width+n.highlightExtensionWidth,e.height+n.highlightExtensionHeight,{centerX:e.centerX+n.highlightCenterOffsetX,centerY:e.centerY+n.highlightCenterOffsetY,fill:t,pickable:!1})},s=r("white"),o=r("black");n.children=[e,s,o],super(n),this.buttonModel=new CT(n);const a=new PT(this.buttonModel);this.interactionStateProperty=a,pr.multilink([a,t,this.buttonModel.enabledProperty],(e,t,i)=>{const n=!t.equals(Eo.BLACK);s.visible=!n&&i&&(e===VT.OVER||e===VT.PRESSED),o.visible=n&&i&&(e===VT.OVER||e===VT.PRESSED)}),this.buttonModel.enabledProperty.link(e=>{this.cursor=e?n.cursor:null}),this._pressListener=this.buttonModel.createPressListener({tandem:n.tandem.createTandem("pressListener")}),this.addInputListener(this._pressListener),this.mouseArea=this.touchArea=bs.bounds(this.bounds.dilatedXY(n.pointerAreaDilationX,n.pointerAreaDilationY));const l=zd.getOuterLineWidthFromNode(this);this.focusHighlight=bs.bounds(this.bounds.shiftedY(-l))}isPDOMClicking(){return this._pressListener.pdomClickingProperty.get()}}qE.register("JoistButton",Mw);class Lw extends Cc{constructor(e){const t=new bs;for(let i=0;i<3;i++)t.circle(0,3.543*i*2.5,2.5);super(t,e)}}qE.register("KebabMenuIcon",Lw);class Iw{constructor(e){this.windowSize=e,this.samples=new Array(e),this.sampleIndex=0,this.total=0,this.numSamples=0,this.clear()}clear(){this.total=0,this.numSamples=0;for(let e=0;e=this.windowSize}updateRunningAverage(e){return this.numSamples=Math.min(this.windowSize,this.numSamples+1),this.total-=this.samples[this.sampleIndex],this.total+=e,this.samples[this.sampleIndex]=e,this.sampleIndex=(this.sampleIndex+1)%this.windowSize,this.getRunningAverage()}}wt.register("RunningAverage",Iw);const Dw=Iw;let kw=!1;class qw{constructor(e){const t=$e()({windowSize:2e3,memoryLimit:phet.chipper.queryParameters.memoryLimit},e);this.memoryLimit=1048576*t.memoryLimit,this.runningAverage=new Dw(t.windowSize),this.lastMemory=0}measure(){if(!window.performance||!window.performance.memory||!window.performance.memory.usedJSHeapSize)return;const e=window.performance.memory.usedJSHeapSize;this.lastMemory=e;const t=this.runningAverage.updateRunningAverage(e);if(this.memoryLimit&&this.runningAverage.isSaturated()&&!kw&&t>this.memoryLimit&&e>.5*this.memoryLimit)throw kw=!0,new Error(`Average memory used (${qw.memoryString(t)}) is above our memoryLimit (${qw.memoryString(this.memoryLimit)}). Current memory: ${qw.memoryString(e)}.`)}static memoryString(e){return Math.ceil(e/1048576)+"MB"}}qE.register("MemoryMonitor",qw);class Bw{constructor(){_defineProperty(this,"allTimes",[]),_defineProperty(this,"histogram",[]),_defineProperty(this,"longTimes",[]),_defineProperty(this,"frameStartTime",0),_defineProperty(this,"previousFrameStartTime",0);for(let e=0;e<30;e++)this.histogram.push(0);$("body").append('
')}static start(e){const t=new Bw;e.frameStartedEmitter.addListener(()=>t.frameStarted()),e.frameEndedEmitter.addListener(()=>t.frameEnded())}frameStarted(){this.frameStartTime=Date.now()}frameEnded(){if(this.allTimes.length>0&&this.allTimes.length%60==0){let e=0;for(let i=0;i0&&(this.longTimes.sort((e,t)=>t-e),t=t+" — "+this.longTimes),$("#phetProfiler").html(t);for(let i=0;i<30;i++)this.histogram[i]=0;this.longTimes.length=0,this.allTimes.length=0}if(this.previousFrameStartTime){const e=this.frameStartTime-this.previousFrameStartTime;this.allTimes.push(e),e<30?this.histogram[e]++:this.longTimes.push(e)}this.previousFrameStartTime=this.frameStartTime}}qE.register("Profiler",Bw);class Ow extends Lh{constructor(e,t){super($e()({containerTagName:"section",tagName:"div",labelContent:e,labelTagName:"h2"},t))}}ME.register("PDOMSectionNode",Ow);class Hw extends Ow{constructor(e){super(OS.a11y.simSection.controlAreaStringProperty,e)}}ME.register("ControlAreaNode",Hw);class Yw extends Ow{constructor(e){super(OS.a11y.simSection.playAreaStringProperty,e)}}ME.register("PlayAreaNode",Yw);class Gw extends Lh{constructor(){super(),this.openingSummaryNode=new Lh({tagName:"p"});const e=new Lh({tagName:"p",innerContent:OS.a11y.simSection.screenSummary.keyboardShortcutsHintStringProperty});this.addChild(this.openingSummaryNode),this.addChild(e),this.pdomOrder=[this.openingSummaryNode,null,e]}setIntroString(e,t,i){this.openingSummaryNode.innerContent=i&&t?zu.fillIn(OS.a11y.simSection.screenSummary.multiScreenIntroStringProperty,{screen:t}):zu.fillIn(OS.a11y.simSection.screenSummary.singleScreenIntroPatternStringProperty,{sim:e})}}ME.register("ScreenSummaryNode",Gw);const Fw=new ti(0,0,1024,618);class Uw extends Lh{constructor(e){const t=$e()({layoutBounds:Fw.copy(),layerSplit:!0,excludeInvisible:!0,tandem:Oi.REQUIRED,visiblePropertyOptions:{phetioState:!1,phetioReadOnly:!0},containerTagName:"article",tagName:"div",screenSummaryContent:null,includePDOMNodes:!0},e);super(t),this.layoutBounds=t.layoutBounds,this.visibleBoundsProperty=new Rn(t.layoutBounds),this.pdomTitleNode=new Lh({tagName:"h1",focusHighlight:"invisible"}),this.pdomPlayAreaNode=new Yw,this.pdomControlAreaNode=new Hw,this.pdomScreenSummaryNode=new Gw,this.screenSummaryContent=null,t.screenSummaryContent&&this.setScreenSummaryContent(t.screenSummaryContent),this.visibleProperty.lazyLink(e=>{e?(this.pdomTitleNode.focusable=!0,this.pdomTitleNode.focus()):this.pdomTitleNode.focusable=!1}),this.pdomTitleNode.addInputListener({blur:()=>{this.pdomTitleNode.focusable=!1}}),this.pdomParentNode=new Lh({children:t.includePDOMNodes?[this.pdomTitleNode,this.pdomScreenSummaryNode,this.pdomControlAreaNode,this.pdomPlayAreaNode]:[this.pdomTitleNode]}),this.addChild(this.pdomParentNode),this.pdomParentNode.pdomOrder=t.includePDOMNodes?[this.pdomTitleNode,this.pdomScreenSummaryNode,this.pdomPlayAreaNode,this.pdomControlAreaNode]:[this.pdomTitleNode]}setPDOMOrder(e){throw new Error("should not need to set accessible order on a ScreenView")}setChildren(e){return Lh.prototype.setChildren.call(this,e),this.pdomParentNode&&!this.hasChild(this.pdomParentNode)&&(this.addChild(this.pdomParentNode),this.pdomParentNode.moveToBack()),this}getLayoutScale(e){return Uw.getLayoutScale(this.layoutBounds,e)}layout(e,t){this.matrix=Uw.getLayoutMatrix(this.layoutBounds,e,t),this.visibleBoundsProperty.value=this.parentToLocalBounds(e)}setScreenSummaryContent(e){this.screenSummaryContent&&this.pdomScreenSummaryNode.removeChild(this.screenSummaryContent),this.screenSummaryContent=e,this.pdomScreenSummaryNode.addChild(e)}setScreenSummaryIntroAndTitle(e,t,i,n){this.pdomScreenSummaryNode.setIntroString(e,t,n),this.pdomTitleNode.innerContent=i}getVoicingOverviewContent(){throw new Error("The ScreenView should implement getVoicingOverviewContent if Voicing is enabled")}getVoicingDetailsContent(){throw new Error("The ScreenView should implement getVoicingDetailsContent when the Voicing feature is enabled.")}getVoicingHintContent(){throw new Error("The ScreenView should implement getVoicingHintContent when Voicing is enabled.")}static getLayoutScale(e,t){return Math.min(t.width/e.width,t.height/e.height)}static getLayoutMatrix(e,t,i){const n=$e()({verticalAlign:"center"},i),r=t.width,s=t.height,o=Uw.getLayoutScale(e,t);let a=0,l=0;return o===r/e.width?(l=s/o-e.height,"center"===n.verticalAlign&&(l/=2)):o===s/e.height&&(a=(r/o-e.width)/2),jr.rowMajor(o,0,a*o+t.left,0,o,l*o+t.top,0,0,1)}step(e){}}_defineProperty(Uw,"DEFAULT_LAYOUT_BOUNDS",Fw),qE.register("ScreenView",Uw);const zw=Uw,Ww=new Ye("mobius"),jw=QueryStringMachine.getAll({mobiusCanvasSupersampling:{type:"number",defaultValue:1},mobiusCanvasSkipGamma:{type:"boolean",defaultValue:!0}});Ww.register("MobiusQueryParameters",jw);const Xw=jw;class Qw extends THREE.Texture{constructor(e,t,i){const n=new Lh({renderer:"canvas",preventFit:!0});n.addChild(e);const r=new VE(n,{width:t,height:i,accessibility:!1});r.updateDisplay(),super(r.rootBackbone.blocks[0].canvas),this._display=r,this._scene=n,this._width=t,this._height=i,this.needsUpdate=!0}update(){this._display.updateDisplay(),this.needsUpdate=!0}dispose(){this._display.dispose(),this._scene.dispose(),super.dispose()}}Ww.register("NodeTexture",Qw);class Kw{constructor(e,t,i){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:_t.ZERO;this.positionArray=e,this.normalArray=t,this.uvArray=i,this.positionIndex=3*n,this.normalIndex=3*n,this.uvIndex=2*n,this.offset=n,this.offsetPosition=r}position(e,t,i){this.positionArray&&(this.positionArray[this.positionIndex++]=e+this.offsetPosition.x,this.positionArray[this.positionIndex++]=t+this.offsetPosition.y,this.positionArray[this.positionIndex++]=i+this.offsetPosition.z),this.offset++}normal(e,t,i){this.normalArray&&(this.normalArray[this.normalIndex++]=e,this.normalArray[this.normalIndex++]=t,this.normalArray[this.normalIndex++]=i)}uv(e,t){this.uvArray&&(this.uvArray[this.uvIndex++]=e,this.uvArray[this.uvIndex++]=t)}getOffset(){return this.offset}}Ww.register("TriangleArrayWriter",Kw);class Jw extends THREE.BufferGeometry{constructor(e,t,i,n,r,s,o,a,l,h,c,u,d,p,m){super();const g=new Float32Array(18),f=new Float32Array(18),y=new Float32Array(12);Jw.updateArrays(g,f,y,e,t,i,n,r,s,o,a,l,h,c,u,d,p,m),this.addAttribute("position",new THREE.BufferAttribute(g,3)),this.addAttribute("normal",new THREE.BufferAttribute(f,3)),this.addAttribute("uv",new THREE.BufferAttribute(y,2)),this._update=(e,t,i,n,r,s,o,a,l,h,c,u,d,p,m)=>{Jw.updateArrays(g,f,y,e,t,i,n,r,s,o,a,l,h,c,u,d,p,m),this.attributes.position.needsUpdate=!0,this.attributes.normal.needsUpdate=!0,this.computeBoundingSphere()}}set(e,t,i,n,r,s,o,a,l,h,c,u,d,p,m){this._update(e,t,i,n,r,s,o,a,l,h,c,u,d,p,m)}static updateArrays(e,t,i,n,r,s,o,a,l,h,c,u,d,p,m,g,f,y){let A=arguments.length>18&&void 0!==arguments[18]?arguments[18]:0,E=arguments.length>19&&void 0!==arguments[19]?arguments[19]:_t.ZERO;const v=new Kw(e,t,i,A,E);return v.position(n,r,s),v.position(o,a,l),v.position(h,c,u),v.position(n,r,s),v.position(h,c,u),v.position(d,p,m),v.uv(0,0),v.uv(1,0),v.uv(1,1),v.uv(0,0),v.uv(1,1),v.uv(0,1),v.normal(g,f,g),v.getOffset()}}Ww.register("Quad",Jw);class Zw extends THREE.Mesh{constructor(e,t,i,n){const r=new Jw(0,0,0,t,0,0,t,i,0,0,i,0,0,0,1),s=new THREE.MeshBasicMaterial(We({transparent:!0,depthTest:!1,map:e},n));super(r,s),this.quadGeometry=r,this.basicMaterial=s,this.textureQuadWidth=t,this.textureQuadHeight=i}updateTexture(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.textureQuadWidth,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.textureQuadHeight;this.basicMaterial.map=e,this.basicMaterial.needsUpdate=!0,t===this.textureQuadWidth&&i===this.textureQuadHeight||(this.textureQuadWidth=t,this.textureQuadHeight=i,this.quadGeometry.set(0,0,0,t,0,0,t,i,0,0,i,0,0,0,1))}dispose(){this.quadGeometry.dispose(),this.basicMaterial.dispose(),super.dispose&&super.dispose()}}Ww.register("TextureQuad",Zw);class $w extends Zi{constructor(e){super($e()({phetioType:$w.ThreeObject3DIO,tandem:Oi.REQUIRED},e))}}_defineProperty($w,"ThreeObject3DIO",new yt("ThreeObject3DIO",{valueType:$w,toStateObject:()=>({}),stateSchema:{}})),Ww.register("ThreeObject3DPhetioObject",$w);const eV=Fh(e=>class extends e{constructor(){for(var e=arguments.length,t=new Array(e),i=0;i{n.dispose()}}dispose(){this.disposeTextPushButton(),super.dispose()}}Zv.register("TextPushButton",iV);const nV=e=>{const t=_.get(window,e);return void 0!==t?t:null};Ue.register("getGlobal",nV);const rV=nV,sV=new Eo(0,200,0),oV=new Eo(255,85,0),aV=new Eo(0,135,0),lV=new Eo(106,206,245),hV=new Eo(254,225,5),cV={ACCELERATION:new Eo(255,255,50),APPLIED_FORCE:new Eo(236,153,55),BUTTON_YELLOW:hV,ELASTIC_POTENTIAL_ENERGY:new Eo(0,204,255),FRICTION_FORCE:oV,GRAVITATIONAL_FORCE:new Eo(50,130,215),GRAVITATIONAL_POTENTIAL_ENERGY:new Eo(55,130,215),HEAT_THERMAL_ENERGY:oV,IMAGINARY_PART:new Eo(153,51,102),KINETIC_ENERGY:new Eo(30,200,45),MOMENTUM:new Eo(50,50,255),NET_WORK:sV,NORMAL_FORCE:new Eo(255,235,0),PHET_LOGO_BLUE:lV,PHET_LOGO_YELLOW:hV,POSITION:Eo.BLUE,REAL_PART:new Eo(255,153,0),RED_COLORBLIND:oV,RESET_ALL_BUTTON_BASE_COLOR:new Eo(247,151,34),GREEN_COLORBLIND:aV,TOTAL_ENERGY:new Eo(180,180,0),TOTAL_FORCE:sV,VELOCITY:new Eo(50,255,50),WALL_FORCE:new Eo(153,51,0),SCREEN_ICON_FRAME:"#dddddd"};ME.register("PhetColorScheme",cV);const uV=cV;class dV extends kT{constructor(e){const t=$e()({iconLength:16,pathOptions:{stroke:"white",lineWidth:2.5,lineCap:"round"},baseColor:uV.RED_COLORBLIND,xMargin:4,yMargin:4,innerContent:OS.a11y.closeStringProperty,voicingNameResponse:OS.a11y.closeStringProperty},e),i=(new bs).moveTo(-t.iconLength/2,-t.iconLength/2).lineTo(t.iconLength/2,t.iconLength/2).moveTo(t.iconLength/2,-t.iconLength/2).lineTo(-t.iconLength/2,t.iconLength/2);t.content=new Cc(i,t.pathOptions),super(t)}}ME.register("CloseButton",dV);const pV="data:audio/mpeg;base64,//swxAAAB5gnMzRhAAEHDWyDNLAAAAAaAQAu7tjAQAAABgMBgNNiBBAWD7ykMQf1g+D5/qBMHwfB/iAEPWCDv+o5wfPg+8EAQBMHz6gQB8Hwfsu2uWDrkw/a9xgUaMwFxxwCLsWS7MHN7VJki8fVT75eTqpn7/Xt1QxW//lJVbnfNuFRTzwrLn/5GVBnKMy/FVs5dTYABARKCMRm//syxAQACHBHWZ2kAAEJi+jxpg1Qlry2AYclVGyMwNoFJ29hqHqa1TRqRMCoetKstcqUzHBxQdCJmVcSJ/EQdEo0FXSoNLGkav/ljqPtEvjAoAE0zuEoM3lMJlLY3Uj65AMeMzQN6QWeLFdCcxLNFy4dBVXVfZ1L+gIki4KPQVBb4dERU6CrsFSoaLVHv/Ev9Hw4ANdAAG7VBBhVdP/7MsQFAAh8YybVowABG49vdx6AAm8ODBg8FDy9pmwIBsHPVGiPMueyERxZdIFnSpkzI8fezb+0z6OJVv7HHw7XBWdXwa6/y34l6sq7uitTjFTEgsFYrFQqFQDAGrQXMbpbb3ZGQWPWvTnyyeKKHgQ/nvlUf/u74oOHp/8v3R/dl/UcSXDz+kMBEHI0p5efiDJqb/64foFiBSWqB2r/+zLEA4AIVDlivZGAAQePKiWmDNhtwTYmBYyxnJdmZwmMtZ8ZjInEMMpo+VFWESqmhsWBoClhKKEhCW5UNPCsFVgqImyWS6KTAhEUrYoO7kaAWIJCwQzbgl5XrFBB27xoQwfnY6kozJtFz0SgICsWM3VIKWs6qr0tgI15/pQomHhblqjycRUCWe1dUOpxFOiJ/ooQC+IEEBlVdh0r//swxAUACGCjMy0kSsDoiCAA95gpQaBI041ceup5PSlsv5QNXMyixFLVkTXWpYUBYy/lEl4YCdWlLoZ//zGlKUBEhV0SiFT+us7WdBXqAbQ2hdxgDfH4RQsI+kgo2RnWVECiCa0TrUSNjalrUVVKyg0yapYqqVlRTNVLFf/2P/1qVadsTFKlitVMQU1FMy45OS4zVVVVVVVVVVVV",mV=GS(jS,pV),gV=IS.createLock(pV),fV=new zS;let yV=!1;const AV=()=>{yV||(gV(),yV=!0)},EV=jS.decodeAudioData(mV.buffer,e=>{null===fV.audioBufferProperty.value&&(fV.audioBufferProperty.set(e),AV())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),fV.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),AV()});EV&&EV.then(e=>{null===fV.audioBufferProperty.value&&(fV.audioBufferProperty.set(e),AV())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),AV()});const vV=new Jb(fV,{soundClipOptions:{initialOutputLevel:.4},soundManagerOptions:{categoryName:"user-interface"}});FS.register("generalCloseSoundPlayer",vV);const SV=vV,bV="data:audio/mpeg;base64,//swxAAABswbPzQxABEQFyzDMlAAAAGoGRIdz0AAARQAAAAAMCd5QEAxBA4sPlz/BAMfw+ooc8EA/EAYKAh/qBBYfwfD4jB/4nD98ZXetEKIxIqnuursF7pTGkY4dNYcaZhOjzgxDNndb75ggdCsIvV3qoeM9HIX215a6Hftuc5FhwFRhvuJuhxbMPp+ir0KlAaCTHVtZuCsLISS//syxAYACGhJXR2jABEVIGmw8YpieZwGg6y5/p6bf69uls4kMS9HVvrXl8hI5WPBY8FawqGh3PYlLA0HQm6ZHvUe/4UB4ChNzls1AZIAAxJNQMBOy4KAeSsL0QgRcxFInzpyhsQ6tvdvaM160ZnbY/2bY19dTlJVJmhrQpT/Vf0eVjfzG////6PMYzmtqJdg0WqADvRwaGDBgBO5T//7MsQFgAkEZSA1swABDRYvdx5QAhmAEZHdFc2HHLBy/LcmfqWvq1yftVsQSJAxzSi25i5w6qqvMy/cjgNSoKu2Q1LHp1S4NCJQsHfLUSINPxK6oxocyIhmMRkMhQAQBuyhLerW2u5zoV4af2nULcHzwOiPxQjFU/nvIyflMKARabfnQqGI/v/FAIV6UJnPAgAca//9NZUgFEnVWuP/+zLEA4AIVL1vnYQAEQkIajDMpMja7T9a7DL+uzSEg2RRajlNmUzFPCBtL7Uyoa/iVlabnj1+Pi9f61X5WuJ9V1XhkOmtYltLGPI1//8s/0PMAKmLuWQPy0Hrh0Uy4C5MCaWoC5bwOjrQpVOQIn9JNDksr2zEBLvAp3LCI8Is9BX1FTsS50j5Us8OCIqEg73ZZ9QByyIAiddlUPU0//swxAUCSEyXLMywatDDBOHA8zBIRfBtlFDU3P7EItHsWE51WgaTVpJLPMzOMYE1qUSth4pRSd1WkZLqqrnGPUobBm4oDUDHol//+rJBUlwL0rYuAoOSuFITEsfTp5a46IhKRBQ6FQkBQCWJESR0KhIeNASKGnsJgJCf///1VUxBTUUzLjk5LjNVVVVVVVVVVVVVVVVVVVVVVVVV",TV=GS(jS,bV),wV=IS.createLock(bV),VV=new zS;let PV=!1;const xV=()=>{PV||(wV(),PV=!0)},CV=jS.decodeAudioData(TV.buffer,e=>{null===VV.audioBufferProperty.value&&(VV.audioBufferProperty.set(e),xV())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),VV.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),xV()});CV&&CV.then(e=>{null===VV.audioBufferProperty.value&&(VV.audioBufferProperty.set(e),xV())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),xV()});const _V=new Jb(VV,{soundClipOptions:{initialOutputLevel:.4},soundManagerOptions:{categoryName:"user-interface"}});FS.register("generalOpenSoundPlayer",_V);const RV=_V;const NV=new class{play(){}stop(){}};FS.register("nullSoundPlayer",NV);const MV=NV,LV=new yt("DynamicMarkerIO",{supertype:yt.ObjectIO,applyState:_.noop,toStateObject:()=>({}),isValidValue:_.stubTrue,documentation:"IO Type used as a place holder for dynamic elements to be created when set for state."});at.register("DynamicMarkerIO",LV);const IV=LV,DV=e=>{const t=e.split("."),i=t.pop(),n=_.get(window,t);return n?n[i].bind(n):null};Ue.register("gracefulBind",DV);const kV=DV,qV=(e,t)=>class extends e{constructor(){for(var e,i=arguments.length,n=new Array(i),r=0;r{l.disableModals&&l.isModal||(e?l.showPopup(this.popupParent,l.isModal):l.hidePopup(this.popupParent,l.isModal))})}layout(e){this.layoutBounds&&(this.popupParent.matrix=zw.getLayoutMatrix(this.layoutBounds,e))}show(){this._nodeToFocusOnHide=this._focusOnHideNode||qd.pdomFocusedNode,this.isShowingProperty.value=!0,this._focusOnShowNode&&this._focusOnShowNode.focusable&&this._focusOnShowNode.focus()}hide(){this.interruptSubtreeInput(),this.isShowingProperty.value=!1,this._nodeToFocusOnHide&&this._nodeToFocusOnHide.focusable&&this._nodeToFocusOnHide.focus()}get focusOnHideNode(){return this._focusOnHideNode}dispose(){this.hide(),this.isShowingProperty.dispose(),super.dispose()}};class BV extends Lh{constructor(e,t){const i=$e()({children:[e]},t);super(i),this.show=i.show,this.hide=i.hide,this.layout=i.layout}}Zv.register("Popupable",qV);const OV=qV,HV=ev("SUN");Zv.register("SunStrings",HV);const YV=HV;class GV extends(OV(eS,1)){constructor(e,t){var i;const n=$e()({xSpacing:10,ySpacing:10,topMargin:15,bottomMargin:15,leftMargin:null,maxWidthMargin:12,maxHeightMargin:12,closeButtonLength:18.2,closeButtonTopMargin:10,closeButtonRightMargin:10,title:null,titleAlign:"center",addAriaLabelledByFromTitle:!0,layoutStrategy:FV,closeButtonListener:()=>this.hide(),closeButtonColor:"black",closeButtonTouchAreaXDilation:0,closeButtonTouchAreaYDilation:0,closeButtonMouseAreaXDilation:0,closeButtonMouseAreaYDilation:0,closeButtonVoicingDialogTitle:null,closeButtonLastInPDOM:!1,openedSoundPlayer:RV,closedSoundPlayer:SV,sim:rV("phet.joist.sim"),showCallback:null,hideCallback:null,layoutBounds:zw.DEFAULT_LAYOUT_BOUNDS,focusOnShowNode:null,cornerRadius:10,resize:!0,fill:"white",stroke:"black",backgroundPickable:!0,maxHeight:null,maxWidth:null,phetioType:GV.DialogIO,phetioState:!0,phetioVisiblePropertyInstrumented:!1,tagName:"div",ariaRole:"dialog"},t);n.xMargin=0,n.yMargin=0,null===n.leftMargin&&(n.leftMargin=n.xSpacing+n.closeButtonLength+n.closeButtonRightMargin),!n.maxWidth&&n.layoutBounds&&(n.maxWidth=UV(n.layoutBounds.width,n.maxWidthMargin)),!n.maxHeight&&n.layoutBounds&&(n.maxHeight=UV(n.layoutBounds.height,n.maxHeightMargin));const r=new rd({priority:rd.MEDIUM_PRIORITY,voicingCanAnnounceProperties:[yd.voicingFullyEnabledProperty]}),s=new dV({iconLength:n.closeButtonLength,baseColor:"transparent",buttonAppearanceStrategy:MT.FlatAppearanceStrategy,xMargin:0,yMargin:0,listener:()=>{s.voicingSpeakContextResponse({utterance:r}),n.closeButtonListener()},pathOptions:{stroke:n.closeButtonColor},tandem:null===(i=n.tandem)||void 0===i?void 0:i.createTandem("closeButton"),phetioState:!1,phetioVisiblePropertyInstrumented:!1,phetioEnabledPropertyInstrumented:!1,soundPlayer:MV,tagName:"button",innerContent:YV.a11y.closeStringProperty,voicingContextResponse:YV.a11y.closedStringProperty});let o;if(n.closeButtonVoicingDialogTitle){const e="string"==typeof n.closeButtonVoicingDialogTitle?new vn(n.closeButtonVoicingDialogTitle):n.closeButtonVoicingDialogTitle;o=s.voicingNameResponse=new fr(YV.a11y.titleClosePatternStringProperty,{title:e},{tandem:Oi.OPT_OUT})}s.touchArea=s.bounds.dilatedXY(n.closeButtonTouchAreaXDilation,n.closeButtonTouchAreaYDilation),s.mouseArea=s.bounds.dilatedXY(n.closeButtonMouseAreaXDilation,n.closeButtonMouseAreaYDilation);let a=[n.title,e];n.closeButtonLastInPDOM?a.push(s):a.unshift(s),a=a.filter(e=>null!=e),n.focusOnShowNode=n.focusOnShowNode?n.focusOnShowNode:a[0].focusable?a[0]:s;const l=new cf({children:n.title?[n.title,e]:[e],spacing:n.ySpacing,align:n.titleAlign}),h=new rf(l,{topMargin:n.topMargin,bottomMargin:n.bottomMargin,leftMargin:n.leftMargin}),c=new rf(s,{topMargin:n.closeButtonTopMargin,rightMargin:n.closeButtonRightMargin}),u=new hf({children:[h,c],spacing:n.xSpacing,align:"top"});super(u,n),this.isShowingProperty.lazyLink(e=>{e?(n.openedSoundPlayer.play(),n.showCallback&&n.showCallback()):(n.closedSoundPlayer.play(),n.hideCallback&&n.hideCallback())}),this.sim=n.sim,this.closeButton=s;const d=pr.multilink([this.sim.boundsProperty,this.sim.screenBoundsProperty,this.sim.scaleProperty,this.sim.selectedScreenProperty,this.isShowingProperty,this.localBoundsProperty],(e,t,i)=>{e&&t&&i&&n.layoutStrategy(this,e,t,i)});this.pdomOrder=a,n.title&&n.title.tagName&&n.addAriaLabelledByFromTitle&&this.addAriaLabelledbyAssociation({thisElementName:Tp.PRIMARY_SIBLING,otherNode:n.title,otherElementName:Tp.PRIMARY_SIBLING});const p=new $m({keys:["escape","tab"],callback:(e,t)=>{const i=e.domEvent;if("escape"===t)i.preventDefault(),this.hide();else if("tab"===t&&qa.isFullScreen()){const e=qd.pdomFocus.trail.getUniqueId(),t=Rl.getNextFocusable().id===e,n=Rl.getPreviousFocusable().id===e;t&&n&&i.preventDefault()}}});this.addInputListener(p),this.disposeDialog=()=>{d.dispose(),c.dispose(),this.removeInputListener(p),p.dispose(),o&&o.dispose(),s.dispose(),r.dispose(),l.dispose(),u.removeAllChildren(),u.detach()}}dispose(){this.disposeDialog(),super.dispose()}}function FV(e,t,i,n){e.layoutBounds&&(e.center=e.layoutBounds.center)}function UV(e,t){return e>2*t?e-2*t:e}_defineProperty(GV,"DialogIO",new yt("DialogIO",{valueType:GV,supertype:IV})),Zv.register("Dialog",GV);class zV extends GV{constructor(e){const t=$e()({reload:()=>window.location.reload(),xSpacing:30,topMargin:30,bottomMargin:30,leftMargin:30},e),i=new Cc(tV,{fill:"#E87600",scale:.048}),n=new qc(OS.webglWarning.contextLossFailureStringProperty,{font:new Jv(12)}),r=new iV(OS.webglWarning.contextLossReloadStringProperty,{font:new Jv(12),baseColor:"#E87600",listener:()=>this.hide(),tandem:Oi.OPT_OUT});super(new hf({children:[i,n,r],spacing:10}),t),this.reload=t.reload,this.disposeContextLossFailureDialog=()=>{n.dispose(),r.dispose()}}dispose(){this.disposeContextLossFailureDialog(),super.dispose()}hide(){this.reload(),super.hide()}hideWithoutReload(){super.hide()}}ME.register("ContextLossFailureDialog",zV);let WV=null;const jV=new Float32Array(128),XV={vectorToThree:e=>new THREE.Vector3(e.x,e.y,e.z),threeToVector:e=>new _t(e.x,e.y,e.z),colorToThree:e=>new THREE.Color(e.toNumber()),frontVertices:(e,t)=>jV.slice(0,XV.writeFrontVertices(jV,0,e,t)),topVertices:(e,t)=>jV.slice(0,XV.writeTopVertices(jV,0,e,t)),rightVertices:(e,t)=>jV.slice(0,XV.writeRightVertices(jV,0,e,t)),leftVertices:(e,t)=>jV.slice(0,XV.writeLeftVertices(jV,0,e,t)),writeTriangle:(e,t,i,n,r,s,o,a,l,h,c)=>(e[t+0]=i,e[t+1]=n,e[t+2]=r,e[t+3]=s,e[t+4]=o,e[t+5]=a,e[t+6]=l,e[t+7]=h,e[t+8]=c,t+9),writeQuad:(e,t,i,n,r,s,o,a,l,h,c,u,d,p)=>(t=XV.writeTriangle(e,t,i,n,r,s,o,a,l,h,c),t=XV.writeTriangle(e,t,i,n,r,l,h,c,u,d,p)),writeFrontVertices:(e,t,i,n)=>XV.writeQuad(e,t,i.minX,i.maxY,n,i.minX,i.minY,n,i.maxX,i.minY,n,i.maxX,i.maxY,n),writeTopVertices:(e,t,i,n)=>XV.writeQuad(e,t,i.minX,n,i.maxY,i.maxX,n,i.maxY,i.maxX,n,i.minY,i.minX,n,i.minY),writeRightVertices:(e,t,i,n)=>XV.writeQuad(e,t,n,i.minY,i.maxX,n,i.minY,i.minX,n,i.maxY,i.minX,n,i.maxY,i.maxX),writeLeftVertices:(e,t,i,n)=>XV.writeQuad(e,t,n,i.minY,i.maxX,n,i.maxY,i.maxX,n,i.maxY,i.minX,n,i.minY,i.minX),get textureLoader(){return WV||(WV=new THREE.TextureLoader),WV},imageToTexture:(e,t)=>t?XV.textureLoader.load(e.src,IS.createLock()):XV.textureLoader.load(e.src),isWebGLEnabled:()=>phet.chipper.queryParameters.webgl&&ea.isWebGLSupported,showWebGLWarning(e){const t=new hf({children:[new Cc(tV,{fill:"#E87600",scale:.06}),new qc(OS.webglWarning.bodyStringProperty,{font:new Jv(16),fill:"#000",maxWidth:600})],spacing:12,align:"center",cursor:"pointer",center:e.layoutBounds.center});e.addChild(t),t.mouseArea=t.touchArea=t.localBounds,t.addInputListener({up:function(){const e=_.get(window,"phet.joist",null),t=e?e.sim.locale:"en";Qa("https://phet.colorado.edu/webgl-disabled-page?simLocale="+t)}})}};Ww.register("ThreeUtils",XV);const QV=XV;class KV{constructor(e){_defineProperty(this,"threeRenderer",null);const t=$e()({backgroundProperty:new Rn(Eo.BLACK),cameraPosition:new _t(0,0,10)},e);if(this.activeScale=1,this.canvasWidth=0,this.canvasHeight=0,this.threeScene=new THREE.Scene,this.threeCamera=new THREE.PerspectiveCamera,this.threeCamera.near=1,this.threeCamera.far=100,QV.isWebGLEnabled())try{this.threeRenderer=new THREE.WebGLRenderer({antialias:!0,alpha:!0,preserveDrawingBuffer:phet.chipper.queryParameters.preserveDrawingBuffer})}catch(i){console.log(i)}this.threeRenderer&&this.threeRenderer.setPixelRatio(window.devicePixelRatio||1),this.contextLossDialog=null,this.threeRenderer&&this.threeRenderer.context.canvas.addEventListener("webglcontextlost",e=>{this.showContextLossDialog()}),this.threeRenderer&&this.threeRenderer.context.canvas.addEventListener("webglcontextrestored",e=>{this.contextLossDialog&&this.contextLossDialog.hideWithoutReload()}),this.backgroundProperty=t.backgroundProperty,this.colorListener=e=>{this.threeRenderer&&this.threeRenderer.setClearColor(e.toNumber(),e.alpha)},this.backgroundProperty.link(this.colorListener),this.threeCamera.position.copy(QV.vectorToThree(t.cameraPosition)),this.dimensionsChangedEmitter=new hi}renderToCanvas(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;const i=Math.ceil(this.canvasWidth*t),n=Math.ceil(this.canvasHeight*t),r=i*e,s=n*e,o=document.createElement("canvas");if(o.width=i,o.height=n,this.threeRenderer){const t=new THREE.WebGLRenderTarget(r,s,{minFilter:THREE.LinearFilter,magFilter:THREE.NearestFilter,format:THREE.RGBAFormat});this.render(t);const a=new window.ArrayBuffer(r*s*4),l=new window.Uint8Array(a),h=this.threeRenderer.getContext();let c;if(h.readPixels(0,0,r,s,h.RGBA,h.UNSIGNED_BYTE,l),1===e)c=new window.Uint8ClampedArray(a);else{c=new window.Uint8ClampedArray(i*n*4);const t=1/(e*e);if(Xw.mobiusCanvasSkipGamma)for(let s=0;so?e:360*Math.atan(Math.tan(e*Math.PI/360)*o/s)/Math.PI}}Ww.register("ThreeStage",KV);Ww.register("ThreeIsometricNode",class extends Lh{constructor(e,t){const i=$e()({parentMatrixProperty:new Rn(jr.IDENTITY),fov:50,getPhetioMouseHit:null},t);super(),this.layoutBounds=e,this._getPhetioMouseHit=i.getPhetioMouseHit,this.stage=new KV(i),this.stage.threeCamera.fov=i.fov,this.stage.threeCamera.aspect=this.layoutBounds.width/this.layoutBounds.height,this.parentMatrixProperty=i.parentMatrixProperty,this.backgroundEventTarget=new Wc({}),this.addChild(this.backgroundEventTarget),this.stage.threeRenderer&&(this.domNode=new Fc(this.stage.threeRenderer.domElement,{preventTransform:!0,pickable:!1}),this.domNode.invalidateDOM=()=>this.domNode.invalidateSelf(new ti(0,0,0,0)),this.domNode.invalidateDOM(),this.domNode.renderToCanvasSelf=(e,t)=>{const i=e.context,n=t.timesMatrix(this.getUniqueTrail().getMatrix().inverted()).m00(),r=this.stage.renderToCanvas(Xw.mobiusCanvasSupersampling,n);i.save(),i.setTransform(1,0,0,-1,0,r.height),i.drawImage(r,0,0),i.restore()},this.addChild(this.domNode)),this.viewOffsetListener=()=>{const e=this.stage.width,t=this.stage.height;e&&t&&this.stage.adjustViewOffset(this.parentToGlobalBounds(new ti(0,0,this.layoutBounds.width,this.layoutBounds.height)))},this.parentMatrixProperty.lazyLink(this.viewOffsetListener),this.mutate(i)}getPhetioMouseHit(e){return this._getPhetioMouseHit&&this.isPhetioMouseHittable(e)?this._getPhetioMouseHit(e):super.getPhetioMouseHit(e)}projectPoint(e){return this.stage.projectPoint(e)}getRayFromScreenPoint(e){return this.stage.getRayFromScreenPoint(e)}layout(e,t){if(_.hasIn(window,"phet.joist.sim")){const i=phet.joist.sim.dimensionProperty.value;e=i.width,t=i.height}this.stage.setDimensions(e,t),this.backgroundEventTarget.setRectBounds(this.globalToLocalBounds(new ti(0,0,e,t)));const i=e/this.layoutBounds.width,n=t/this.layoutBounds.height;0!==i&&0!==n&&(this.stage.activeScale=n>i?i:n,this.viewOffsetListener(),this.stage.threeRenderer&&this.domNode.invalidateDOM())}render(e){this.stage.render(e)}dispose(){this.parentMatrixProperty.unlink(this.viewOffsetListener),super.dispose(),this.stage.dispose()}});Ww.register("ThreeNode",class extends Lh{constructor(e,t,i){const n=$e()({fov:50},i);if(super(),this.stage=new KV(n),this.layoutWidth=e,this.layoutHeight=t,this.stage.threeCamera.fov=n.fov,this.stage.threeCamera.aspect=e/t,this.offsetProperty=new xg(Ht.ZERO),this.backgroundEventTarget=new Wc(0,0,e,t),this.addChild(this.backgroundEventTarget),this.stage.threeRenderer){this.domNode=new Fc(this.stage.threeRenderer.domElement,{preventTransform:!0,pickable:!1}),this.domNode.invalidateDOM=()=>this.domNode.invalidateSelf(new ti(0,0,0,0)),this.domNode.invalidateDOM();const e=new jr;ea.prepareForTransform(this.stage.threeRenderer.domElement),this.offsetProperty.link(t=>{e.setToTranslation(t.x,t.y),ea.applyPreparedTransform(e,this.stage.threeRenderer.domElement)}),this.domNode.renderToCanvasSelf=e=>{const t=this.stage.renderToCanvas(Xw.mobiusCanvasSupersampling),i=e.context;i.save(),i.setTransform(1,0,this.offsetProperty.value.x,-1,0,this.stage.canvasHeight+this.offsetProperty.value.y),i.drawImage(t,0,0),i.restore()},this.addChild(this.domNode)}this.mutate(n)}projectPoint(e){return this.stage.projectPoint(e)}getRayFromScreenPoint(e){return this.stage.getRayFromScreenPoint(e)}layout(){const e=this.localToGlobalBounds(this.backgroundEventTarget.bounds).roundedOut();this.stage.setDimensions(e.width,e.height),this.offsetProperty.value=e.leftTop,this.stage.threeCamera.updateProjectionMatrix(),this.stage.threeRenderer&&this.domNode.invalidateDOM()}render(e){this.stage.render(e)}dispose(){super.dispose(),this.stage.dispose()}});const JV=new yt("ThreeQuaternionIO",{valueType:THREE.Quaternion,documentation:"A numerical object representing a quaternion",toStateObject:e=>({x:e.x,y:e.y,z:e.z,w:e.w}),stateSchema:{x:bt,y:bt,z:bt,w:bt},fromStateObject:e=>new THREE.Quaternion(e.x,e.y,e.z,e.w),applyState:(e,t)=>{e.set(t.x,t.y,t.z,t.w)},stateObjectToCreateElementArguments:e=>[e.x,e.y,e.z,e.w]});Ww.register("ThreeQuaternionIO",JV);const ZV=new Ye("nitroglycerin");class $V extends Gc{constructor(e,t){const i=$e()({mainColor:"gray",highlightColor:"white",shadowColor:"black",highlightDiameterRatio:.5,highlightXOffset:-.4,highlightYOffset:-.4},t);super(e/2,i),this.updateShadedSphereFill=()=>{const e=this.radius,t=e*i.highlightXOffset,n=e*i.highlightYOffset;this.fill=new Yl(t,n,0,t,n,2*e).addColorStop(0,i.highlightColor).addColorStop(i.highlightDiameterRatio,i.mainColor).addColorStop(1,i.shadowColor)},this.updateShadedSphereFill()}invalidatePath(){super.invalidatePath(),this.updateShadedSphereFill&&this.updateShadedSphereFill()}}ME.register("ShadedSphereNode",$V);class eP{constructor(e,t,i,n,r,s){this.symbol=e,this.covalentRadius=t,this.vanDerWaalsRadius=i,this.electronegativity=n,this.atomicWeight=r,this.color=s}static getElementBySymbol(e){const t=eP.elementMap.get(e);return t}isSameElement(e){return e.symbol===this.symbol}isHydrogen(){return this.isSameElement(eP.H)}isCarbon(){return this.isSameElement(eP.C)}isOxygen(){return this.isSameElement(eP.O)}toString(){return this.symbol}}_defineProperty(eP,"Ar",new(xe=eP)("Ar",97,188,null,39.948,"#FFAFAF")),_defineProperty(eP,"B",new xe("B",85,192,2.04,10.811,"rgb(255,170,119)")),_defineProperty(eP,"Be",new xe("Be",105,153,1.57,9.012182,"rgb(194,255,95)")),_defineProperty(eP,"Br",new xe("Br",114,185,2.96,79.904,"rgb(190,30,20)")),_defineProperty(eP,"C",new xe("C",77,170,2.55,12.0107,"rgb(178,178,178)")),_defineProperty(eP,"Cl",new xe("Cl",100,175,3.16,35.4527,"rgb(136,242,21)")),_defineProperty(eP,"F",new xe("F",72,147,3.98,18.9984032,"rgb(245,255,36)")),_defineProperty(eP,"H",new xe("H",37,120,2.2,1.00794,"#ffffff")),_defineProperty(eP,"I",new xe("I",133,198,2.66,126.90447,"#940094")),_defineProperty(eP,"N",new xe("N",75,155,3.04,14.00674,"#0000ff")),_defineProperty(eP,"Ne",new xe("Ne",69,154,null,20.1797,"#1AFFFB")),_defineProperty(eP,"O",new xe("O",73,152,3.44,15.9994,uV.RED_COLORBLIND)),_defineProperty(eP,"P",new xe("P",110,180,2.19,30.973762,"rgb(255,154,0)")),_defineProperty(eP,"S",new xe("S",103,180,2.58,32.066,"rgb(212,181,59)")),_defineProperty(eP,"Si",new xe("Si",118,210,1.9,28.0855,"rgb(240,200,160)")),_defineProperty(eP,"Sn",new xe("Sn",145,217,1.96,118.71,"#668080")),_defineProperty(eP,"Xe",new xe("Xe",108,216,2.6,131.293,"#429eb0")),_defineProperty(eP,"elements",[xe.Ar,xe.B,xe.Be,xe.Br,xe.C,xe.Cl,xe.F,xe.H,xe.I,xe.N,xe.Ne,xe.O,xe.P,xe.S,xe.Si,xe.Sn,xe.Xe]),_defineProperty(eP,"elementMap",function(e){const t=new Map;return e.forEach(e=>t.set(e.symbol,e)),t}(xe.elements)),ZV.register("Element",eP);const tP=eP.P.covalentRadius;class iP extends $V{constructor(e,t){const i=$e()({mainColor:e.color},t);var n;super(2*(n=e.covalentRadius,.11*(tP-.75*(tP-n))),i)}}ZV.register("AtomNode",iP);class nP extends Lh{constructor(e,t){super($e()({children:[new Lh({children:e,center:Ht.ZERO})]},t))}}ZV.register("MoleculeNode",nP);class rP extends nP{constructor(e,t){const i=$e()({direction:"leftToRight",overlapPercent:.25},t),n=[];let r=null;e.forEach(e=>{const t=new iP(e,i.atomNodeOptions);if(n.push(t),null!==r){const e=i.overlapPercent*t.width;"leftToRight"===i.direction?t.left=r.right-e:t.right=r.left+e}r=t}),super(n,i)}}ZV.register("HorizontalMoleculeNode",rP);ZV.register("C2H2Node",class extends rP{constructor(e){super([eP.H,eP.C,eP.C,eP.H],$e()({overlapPercent:.35},e))}});ZV.register("C2H4Node",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.C,t),n=.165*i.width,r=new iP(eP.C,tt({left:i.centerX+.25*i.width,centerY:i.centerY},t)),s=new iP(eP.H,tt({centerX:i.left+n,centerY:i.top+n},t));super([new iP(eP.H,tt({centerX:r.right-n,centerY:r.top+n},t)),s,i,r,new iP(eP.H,tt({centerX:i.left+n,centerY:i.bottom-n},t)),new iP(eP.H,tt({centerX:r.right-n,centerY:r.bottom-n},t))],e)}});ZV.register("C2H5ClNode",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.C,t),n=new iP(eP.C,tt({centerX:i.right+.25*i.width,centerY:i.centerY},t)),r=new iP(eP.H,tt({centerX:i.centerX,centerY:i.top},t)),s=new iP(eP.H,tt({centerX:r.centerX,centerY:i.bottom},t)),o=new iP(eP.H,tt({centerX:i.left,centerY:i.centerY},t)),a=new iP(eP.H,tt({centerX:n.centerX,centerY:n.top},t));super([new iP(eP.H,tt({centerX:n.centerX,centerY:n.bottom},t)),a,n,new iP(eP.Cl,tt({left:n.centerX+.11*i.width,centerY:n.centerY},t)),o,i,s,r],e)}});ZV.register("C2H5OHNode",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.C,t),n=new iP(eP.C,tt({centerX:i.right+.25*i.width,centerY:i.centerY},t)),r=new iP(eP.H,tt({centerX:i.centerX,centerY:i.top},t)),s=new iP(eP.H,tt({centerX:r.centerX,centerY:i.bottom},t)),o=new iP(eP.H,tt({centerX:i.left,centerY:i.centerY},t)),a=new iP(eP.H,tt({centerX:n.centerX,centerY:n.top},t)),l=new iP(eP.H,tt({centerX:n.centerX,centerY:n.bottom},t)),h=new iP(eP.O,tt({centerX:n.right,centerY:n.centerY},t));super([l,a,n,new iP(eP.H,tt({centerX:h.right,centerY:h.centerY},t)),h,o,i,s,r],e)}});ZV.register("C2H6Node",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.C,t),n=new iP(eP.C,We({centerX:i.right+.25*i.width,centerY:i.centerY},t)),r=new iP(eP.H,We({centerX:i.centerX,centerY:i.top},t)),s=new iP(eP.H,We({centerX:r.centerX,centerY:i.bottom},t)),o=new iP(eP.H,We({centerX:i.left,centerY:i.centerY},t)),a=new iP(eP.H,We({centerX:n.centerX,centerY:n.top},t));super([new iP(eP.H,We({centerX:n.centerX,centerY:n.bottom},t)),a,n,new iP(eP.H,We({centerX:n.right,centerY:n.centerY},t)),o,i,s,r],e)}});ZV.register("CH2ONode",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.C,t),n=.165*i.width,r=new iP(eP.O,We({centerX:i.right+.25*i.width,centerY:i.centerY},t)),s=new iP(eP.H,We({centerX:i.left+n,centerY:i.top+n},t));super([s,i,r,new iP(eP.H,We({centerX:s.centerX,centerY:i.bottom-n},t))],e)}});ZV.register("CH3OHNode",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.C,t),n=new iP(eP.H,We({centerX:i.centerX,centerY:i.top},t)),r=new iP(eP.H,We({centerX:n.centerX,centerY:i.bottom},t)),s=new iP(eP.H,We({centerX:i.left,centerY:i.centerY},t)),o=new iP(eP.O,We({centerX:i.right+.25*i.width,centerY:i.centerY},t));super([r,n,i,s,new iP(eP.H,We({centerX:o.right,centerY:o.centerY},t)),o],e)}});ZV.register("CH4Node",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.C,t),n=.165*i.width,r=new iP(eP.H,We({centerX:i.left+n,centerY:i.top+n},t)),s=new iP(eP.H,We({centerX:i.right-n,centerY:r.centerY},t)),o=new iP(eP.H,We({centerX:r.centerX,centerY:i.bottom-n},t));super([s,o,i,r,new iP(eP.H,We({centerX:s.centerX,centerY:o.centerY},t))],e)}});ZV.register("CNode",class extends rP{constructor(e){super([eP.C],e)}});class sP extends rP{constructor(e){super([eP.O,eP.C,eP.O],e)}}ZV.register("CO2Node",sP);class oP extends rP{constructor(e){super([eP.C,eP.O],e)}}ZV.register("CONode",oP);ZV.register("CS2Node",class extends rP{constructor(e){super([eP.S,eP.C,eP.S],e)}});ZV.register("Cl2Node",class extends rP{constructor(e){super([eP.Cl,eP.Cl],e)}});ZV.register("F2Node",class extends rP{constructor(e){super([eP.F,eP.F],e)}});ZV.register("H2Node",class extends rP{constructor(e){super([eP.H,eP.H],e)}});class aP extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.O,t),n=new iP(eP.H,We({centerX:i.left,centerY:i.bottom-.25*i.height},t));super([i,n,new iP(eP.H,We({centerX:i.right,centerY:n.centerY},t))],e)}}ZV.register("H2ONode",aP);ZV.register("H2SNode",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.S,t),n=new iP(eP.H,We({centerX:i.left,centerY:i.bottom-.25*i.height},t));super([i,n,new iP(eP.H,We({centerX:i.right,centerY:n.centerY},t))],e)}});class lP extends rP{constructor(e){const t=$e()({direction:"rightToLeft",overlapPercent:.5},e);super([eP.Cl,eP.H],t)}}ZV.register("HClNode",lP);ZV.register("HFNode",class extends rP{constructor(e){const t=$e()({direction:"rightToLeft",overlapPercent:.5},e);super([eP.F,eP.H],t)}});ZV.register("N2Node",class extends rP{constructor(e){super([eP.N,eP.N],e)}});ZV.register("N2ONode",class extends rP{constructor(e){super([eP.N,eP.N,eP.O],e)}});ZV.register("NH3Node",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.N,t),n=new iP(eP.H,tt({centerX:i.left,centerY:i.bottom-.25*i.height},t));super([n,new iP(eP.H,tt({centerX:i.right,centerY:n.centerY},t)),i,new iP(eP.H,tt({centerX:i.centerX,centerY:i.bottom},t))],e)}});ZV.register("NO2Node",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.N,t),n=new iP(eP.O,tt({centerX:i.left,centerY:i.centerY+.25*i.height},t));super([n,i,new iP(eP.O,tt({centerX:i.right,centerY:n.centerY},t))],e)}});ZV.register("NONode",class extends rP{constructor(e){super([eP.N,eP.O],e)}});ZV.register("O2Node",class extends rP{constructor(e){super([eP.O,eP.O],e)}});ZV.register("OF2Node",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.O,t);super([new iP(eP.F,tt({centerX:i.left,centerY:i.centerY+.25*i.height},t)),i,new iP(eP.F,tt({centerX:i.right,centerY:i.centerY+.25*i.height},t))],e)}});ZV.register("P4Node",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.P,t),n=new iP(eP.P,tt({centerX:i.left+.3*i.width,centerY:i.bottom+.2*i.width},t)),r=new iP(eP.P,tt({centerX:i.right,centerY:i.bottom},t));super([new iP(eP.P,tt({centerX:i.left,centerY:i.centerY+.2*i.height},t)),r,n,i],e)}});ZV.register("PCl3Node",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.P,t),n=new iP(eP.Cl,tt({centerX:i.left,centerY:i.bottom-.25*i.height},t));super([n,new iP(eP.Cl,tt({centerX:i.right,centerY:n.centerY},t)),i,new iP(eP.Cl,tt({centerX:i.centerX,centerY:i.bottom},t))],e)}});ZV.register("PCl5Node",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.P,t),n=new iP(eP.Cl,tt({centerX:i.centerX,centerY:i.top},t)),r=new iP(eP.Cl,tt({centerX:i.centerX,centerY:i.bottom},t));super([new iP(eP.Cl,tt({centerX:i.right,centerY:i.centerY},t)),r,new iP(eP.Cl,tt({centerX:i.left+.25*i.width,centerY:i.top+.25*i.height},t)),i,n,new iP(eP.Cl,tt({centerX:i.left+.1*i.width,centerY:i.bottom-.1*i.height},t))],e)}});ZV.register("PF3Node",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.P,t),n=new iP(eP.F,tt({centerX:i.left,centerY:i.bottom-.25*i.height},t));super([n,new iP(eP.F,tt({centerX:i.right,centerY:n.centerY},t)),i,new iP(eP.F,tt({centerX:i.centerX,centerY:i.bottom},t))],e)}});ZV.register("PH3Node",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.P,t),n=new iP(eP.H,tt({centerX:i.left,centerY:i.bottom-.25*i.height},t));super([n,new iP(eP.H,tt({centerX:i.right,centerY:n.centerY},t)),i,new iP(eP.H,tt({centerX:i.centerX,centerY:i.bottom},t))],e)}});ZV.register("SNode",class extends rP{constructor(e){super([eP.S],e)}});ZV.register("SO2Node",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.S,t);super([new iP(eP.O,tt({centerX:i.left,centerY:i.centerY+.2*i.height},t)),i,new iP(eP.O,tt({centerX:i.right,centerY:i.centerY+.2*i.height},t))],e)}});ZV.register("SO3Node",class extends nP{constructor(e){const t=null==e?void 0:e.atomNodeOptions,i=new iP(eP.S,t),n=new iP(eP.O,tt({centerX:i.left,centerY:i.centerY+.2*i.height},t)),r=new iP(eP.O,tt({centerX:i.right,centerY:i.centerY+.2*i.height},t));super([new iP(eP.O,tt({centerX:i.centerX+.08*i.width,centerY:i.left+.08*i.height},t)),n,i,r],e)}});let hP=1;class cP{constructor(e){this.element=e,this.symbol=e.symbol,this.covalentRadius=e.covalentRadius,this.covalentDiameter=2*e.covalentRadius,this.electronegativity=e.electronegativity,this.atomicWeight=e.atomicWeight,this.color=e.color,this.reference=(hP++).toString(16),this.id=`${this.symbol}_${this.reference}`}static createAtomFromSymbol(e){return new cP(eP.getElementBySymbol(e))}hasSameElement(e){return this.element.isSameElement(e.element)}isHydrogen(){return this.element.isHydrogen()}isCarbon(){return this.element.isCarbon()}isOxygen(){return this.element.isOxygen()}toString(){return this.symbol}}ZV.register("Atom",cP);const uP={createSymbol:function(e){return uP.toSubscript(uP.createSymbolWithoutSubscripts(e))},createSymbolWithoutSubscripts:function(e){let t="",i=1;const n=e.length;for(let r=0;r1&&(t+=i),i=1,t+=e[r].symbol);return i>1&&(t+=i),t},nonCarbonHillSortValue:function(e){let t=1e3*e.symbol.charCodeAt(0);return e.symbol.length>1&&(t+=e.symbol.charCodeAt(1)),t},carbonHillSortValue:function(e){return e.isCarbon()?0:e.isHydrogen()?1:uP.nonCarbonHillSortValue(e)},toSubscript:function(e){let t="",i=!1;const n=e=>e>="0"&&e<="9";for(let r=0;r",i=!0):i&&!n(s)&&(t+="",i=!1),t+=s}return i&&(t+="",i=!1),t},hillOrderedSymbol:function(e){const t=_.some(e,e=>e.isCarbon())?uP.carbonHillSortValue:uP.nonCarbonHillSortValue,i=_.sortBy(e,t);return uP.createSymbol(i)}};ZV.register("ChemUtils",uP);function dP(e){const t=[];return e(e=>{t.push(e)}),t}Ue.register("collect",dP);function pP(e,t,i){const n=[];return function e(t,r){return r.forEach((r,s)=>{n.push(s),1===t?i(...[r].concat(n)):e(t-1,r),n.pop()})}(e,t)}Ue.register("dimensionForEach",pP);function mP(e,t,i){const n=[];return function e(t,r){return r.map((r,s)=>{n.push(s);const o=1===t?i(...[r].concat(n)):e(t-1,r);return n.pop(),o})}(e,t)}Ue.register("dimensionMap",mP);class gP{constructor(e,t){this.eventModel=e,this.eventCallback=t,this.period=this.eventModel.getPeriodBeforeNextEvent(),this.timeBeforeNextEvent=this.period}step(e){for(;e>=this.timeBeforeNextEvent;)e-=this.timeBeforeNextEvent,this.period=this.eventModel.getPeriodBeforeNextEvent(),this.timeBeforeNextEvent=this.period,this.eventCallback(e);this.timeBeforeNextEvent-=e}getRatio(){return(this.period-this.timeBeforeNextEvent)/this.period}}function fP(e,t){const i=[],n=2*e.length-1;for(let r=0;r1)for(let n=0;ne.toStateObject(),fromStateObject:e=>Ce.fromStateObject(e)}));const TP=new bP(1,1);Fu.register("Fraction",bP);const wP=nn($l(yt.ObjectIO));class VP extends SP{constructor(e){const t=$e()({sphereRadius:10,usableWidthProportion:1,tandem:Oi.OPTIONAL,phetioType:VP.SphereBucketIO,verticalParticleOffset:null},e);super(t),_defineProperty(this,"_particles",[]),this.sphereBucketTandem=t.tandem,this._sphereRadius=t.sphereRadius,this._usableWidthProportion=t.usableWidthProportion,this._verticalParticleOffset=null===t.verticalParticleOffset?.4*-this._sphereRadius:t.verticalParticleOffset,this._particles=[]}addParticleFirstOpen(e,t){e.destinationProperty.set(this.getFirstOpenPosition()),this.addParticle(e,t)}addParticleNearestOpen(e,t){e.destinationProperty.set(this.getNearestOpenPosition(e.destinationProperty.get())),this.addParticle(e,t)}addParticle(e,t){t||e.positionProperty.set(e.destinationProperty.get()),this._particles.push(e);const i=t=>{t&&this.removeParticle(e)};e.userControlledProperty.lazyLink(i),e.bucketRemovalListener=i}removeParticle(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this._particles=_.without(this._particles,e),e.bucketRemovalListener&&(e.userControlledProperty.unlink(e.bucketRemovalListener),delete e.bucketRemovalListener),t||this.relayoutBucketParticles()}containsParticle(e){return this._particles.includes(e)}extractClosestParticle(e){let t=null;this._particles.forEach(i=>{(null===t||t.positionProperty.get().distance(e)>i.positionProperty.get().distance(e))&&(t=i)});return null!==t&&t.userControlledProperty.set(!0),t}getParticleList(){return this._particles}reset(){this._particles.forEach(e=>{"function"==typeof e.bucketRemovalListener&&(e.userControlledProperty.unlink(e.bucketRemovalListener),delete e.bucketRemovalListener)}),xs(this._particles)}isPositionOpen(e){let t=!0;for(let i=0;i=n&&(r++,s=0,n--,i+=this._sphereRadius,0===n&&(n=1,i-=this._sphereRadius)))}return e}getLayerForYPosition(e){return Math.abs(Bt.roundSymmetric((e-(this.position.y+this._verticalParticleOffset))/(2*this._sphereRadius*.866)))}getNearestOpenPosition(e){let t=0;_.each(this._particles,e=>{const i=this.getLayerForYPosition(e.destinationProperty.get().y);i>t&&(t=i)});const i=[],n=this.size.width*this._usableWidthProportion-2*this._sphereRadius;let r=(this.size.width-n)/2+this._sphereRadius,s=Math.floor(n/(2*this._sphereRadius));for(let a=0;a<=t+1;a++){for(let e=0;e{t.distance(e)({particles:wP.toStateObject(e._particles)}),applyState:(e,t)=>{e.reset(),wP.fromStateObject(t.particles).forEach(t=>{e.addParticle(t)})}})),Fu.register("SphereBucket",VP);class PP extends Lh{constructor(e,t){const i=$e()({headFill:Eo.YELLOW,headStroke:null,eyeFill:"black",mouthStroke:"black",headLineWidth:1},t);super();const n=new su(i.headFill);i.headStroke=i.headStroke||new ir([n],e=>e.darkerColor()),this.addChild(new Gc(e/2,{fill:i.headFill,stroke:i.headStroke,lineWidth:i.headLineWidth}));const r=.075*e;this.addChild(new Gc(r,{fill:i.eyeFill,centerX:.2*-e,centerY:.1*-e})),this.addChild(new Gc(r,{fill:i.eyeFill,centerX:.2*e,centerY:.1*-e}));const s=.05*e;this.smileMouth=new Cc((new bs).arc(0,.05*e,.25*e,.2*Math.PI,.8*Math.PI),{stroke:i.mouthStroke,lineWidth:s,lineCap:"round"}),this.addChild(this.smileMouth),this.frownMouth=new Cc((new bs).arc(0,.4*e,.2*e,.75*-Math.PI,.25*-Math.PI),{stroke:i.mouthStroke,lineWidth:s,lineCap:"round"}),this.addChild(this.frownMouth),this.smile(),this.mutate(i)}smile(){return this.smileMouth.visible=!0,this.frownMouth.visible=!1,this}frown(){return this.smileMouth.visible=!1,this.frownMouth.visible=!0,this}}ME.register("FaceNode",PP);class xP extends Wc{constructor(e){super({}),this._leftMargin=0,this._rightMargin=0,this._topMargin=0,this._bottomMargin=0,this._extension=0,this._roundMargins=!0,this._fillProperty=new su(this.fill),this._borderOverrideProperty=new su(null),this._borderProperty=new ir([this._fillProperty,this._borderOverrideProperty],(e,t)=>null===this._borderOverrideProperty.paint?e.withAlpha(0):t),this.roundedShape=(new bs).moveTo(0,0).arc(0,0,1,0,Math.PI/2,!1).close().makeImmutable(),this.rectangularShape=bs.rectangle(0,0,1,1).makeImmutable(),this.leftSide=new Wc(0,0,1,1),this.rightSide=new Wc(0,0,1,1),this.topSide=new Wc(0,0,1,1),this.bottomSide=new Wc(0,0,1,1),this.topLeftCorner=new Cc(null),this.topRightCorner=new Cc(null),this.bottomLeftCorner=new Cc(null),this.bottomRightCorner=new Cc(null),this.invalidateGradients(),this.invalidateRoundMargins(),this.invalidateMargin(),this.mutate(e)}invalidateRoundMargins(){this._roundMargins?(this.topLeftCorner.shape=this.roundedShape,this.topRightCorner.shape=this.roundedShape,this.bottomLeftCorner.shape=this.roundedShape,this.bottomRightCorner.shape=this.roundedShape):(this.topLeftCorner.shape=this.rectangularShape,this.topRightCorner.shape=this.rectangularShape,this.bottomLeftCorner.shape=this.rectangularShape,this.bottomRightCorner.shape=this.rectangularShape)}invalidateGradients(){const e=new Hl(0,0,1,0).addColorStop(this._extension,this._fillProperty).addColorStop(1,this._borderProperty),t=new Yl(0,0,0,0,0,1).addColorStop(this._extension,this._fillProperty).addColorStop(1,this._borderProperty);this.leftSide.fill=e,this.rightSide.fill=e,this.topSide.fill=e,this.bottomSide.fill=e,this.topLeftCorner.fill=t,this.topRightCorner.fill=t,this.bottomLeftCorner.fill=t,this.bottomRightCorner.fill=t}invalidateRectangle(){super.invalidateRectangle(),this.invalidateMargin()}invalidateMargin(){this.children=[...this._leftMargin>0&&this.rectHeight>0?[this.leftSide]:[],...this._rightMargin>0&&this.rectHeight>0?[this.rightSide]:[],...this._topMargin>0&&this.rectWidth>0?[this.topSide]:[],...this._bottomMargin>0&&this.rectWidth>0?[this.bottomSide]:[],...this._topMargin>0&&this._leftMargin>0?[this.topLeftCorner]:[],...this._topMargin>0&&this._rightMargin>0?[this.topRightCorner]:[],...this._bottomMargin>0&&this._leftMargin>0?[this.bottomLeftCorner]:[],...this._bottomMargin>0&&this._rightMargin>0?[this.bottomRightCorner]:[]];const e=this.rectWidth,t=this.rectHeight,i=this.rectX,n=this.rectY,r=this.rectX+e,s=this._rectY+t;this.leftSide.hasParent()&&(this.leftSide.matrix=(new jr).rowMajor(-this._leftMargin,0,i,0,t,n,0,0,1)),this.rightSide.hasParent()&&(this.rightSide.matrix=(new jr).rowMajor(this._rightMargin,0,r,0,t,n,0,0,1)),this.topSide.hasParent()&&(this.topSide.matrix=(new jr).rowMajor(0,e,i,-this._topMargin,0,n,0,0,1)),this.bottomSide.hasParent()&&(this.bottomSide.matrix=(new jr).rowMajor(0,e,i,this._bottomMargin,0,s,0,0,1)),this.topLeftCorner.hasParent()&&(this.topLeftCorner.matrix=(new jr).rowMajor(-this._leftMargin,0,i,0,-this._topMargin,n,0,0,1)),this.topRightCorner.hasParent()&&(this.topRightCorner.matrix=(new jr).rowMajor(this._rightMargin,0,r,0,-this._topMargin,n,0,0,1)),this.bottomLeftCorner.hasParent()&&(this.bottomLeftCorner.matrix=(new jr).rowMajor(-this._leftMargin,0,i,0,this._bottomMargin,s,0,0,1)),this.bottomRightCorner.hasParent()&&(this.bottomRightCorner.matrix=(new jr).rowMajor(this._rightMargin,0,r,0,this._bottomMargin,s,0,0,1))}dispose(){this._fillProperty.dispose(),this._borderOverrideProperty.dispose(),super.dispose()}setFill(e){return super.setFill(e),this._fillProperty.paint=e,this}setStroke(e){return super.setStroke(e),this}set leftMargin(e){this._leftMargin!==e&&(this._leftMargin=e,this.invalidateMargin())}get leftMargin(){return this._leftMargin}set rightMargin(e){this._rightMargin!==e&&(this._rightMargin=e,this.invalidateMargin())}get rightMargin(){return this._rightMargin}set topMargin(e){this._topMargin!==e&&(this._topMargin=e,this.invalidateMargin())}get topMargin(){return this._topMargin}set bottomMargin(e){this._bottomMargin!==e&&(this._bottomMargin=e,this.invalidateMargin())}get bottomMargin(){return this._bottomMargin}set xMargin(e){this._leftMargin===e&&this._rightMargin===e||(this._leftMargin=e,this._rightMargin=e,this.invalidateMargin())}get xMargin(){return this._leftMargin}set yMargin(e){this._topMargin===e&&this._bottomMargin===e||(this._topMargin=e,this._bottomMargin=e,this.invalidateMargin())}get yMargin(){return this._topMargin}set margin(e){this._leftMargin===e&&this._rightMargin===e&&this._topMargin===e&&this._bottomMargin===e||(this._leftMargin=e,this._rightMargin=e,this._topMargin=e,this._bottomMargin=e,this.invalidateMargin())}get margin(){return this._leftMargin}set roundMargins(e){this._roundMargins!==e&&(this._roundMargins=e,this.invalidateRoundMargins())}get roundMargins(){return this._roundMargins}set border(e){this._borderOverrideProperty.paint!==e&&(this._borderOverrideProperty.paint=e)}get border(){return this._borderOverrideProperty.paint}set extension(e){this._extension!==e&&(this._extension=e,this.invalidateGradients())}get extension(){return this._extension}mutate(e){return super.mutate(e)}}xP.prototype._mutatorKeys=["roundMargins","border","extension","margin","xMargin","yMargin","leftMargin","rightMargin","topMargin","bottomMargin",...Wc.prototype._mutatorKeys],ME.register("GradientRectangle",xP);ME.register("GridNode",class extends Cc{constructor(e,t,i,n,r){super(null,$e()({stroke:"gray"},r)),e.link(e=>{const r=new bs,s=-n*t+i.x,o=n*t+i.x,a=-n*t+i.y,l=n*t+i.y;for(let h=-n;h<=n;h++){const e=h*t+i.x,n=h*t+i.y;r.moveTo(s,n).lineTo(o,n),r.moveTo(e,a).lineTo(e,l)}this.shape=e.modelToViewShape(r)})}});class CP{constructor(e){const t=$e()({alertToVoicing:!0,descriptionAlertNode:null},e);this.alertToVoicing=t.alertToVoicing,this.descriptionAlertNode=t.descriptionAlertNode}alert(e){this.alertToVoicing&&Md.alertUtterance(e),this.alertDescriptionUtterance(e)}alertDescriptionUtterance(e){this.descriptionAlertNode&&this.descriptionAlertNode.alertDescriptionUtterance(e)}forEachUtteranceQueue(e){this.descriptionAlertNode&&this.descriptionAlertNode.forEachUtteranceQueue(e)}}ME.register("Alerter",CP);const _P=CP,RP=Je.byKeys(["LEFT","RIGHT","UP","DOWN","UP_LEFT","UP_RIGHT","DOWN_LEFT","DOWN_RIGHT"],{beforeFreeze:e=>{e.isRelativeDirection=function(t){return t===e.LEFT||t===e.RIGHT||t===e.UP||t===e.DOWN},e.directionToRelativeDirections=function(t){return t===e.UP_LEFT?[e.UP,e.LEFT]:t===e.UP_RIGHT?[e.UP,e.RIGHT]:t===e.DOWN_LEFT?[e.DOWN,e.LEFT]:t===e.DOWN_RIGHT?[e.DOWN,e.RIGHT]:[e[t]]},e.isHorizontalDirection=function(t){return t===e.LEFT||t===e.RIGHT},e.keyToDirection=function(t){return t===ga.KEY_UP_ARROW||t===ga.KEY_W?e.UP:t===ga.KEY_LEFT_ARROW||t===ga.KEY_A?e.LEFT:t===ga.KEY_DOWN_ARROW||t===ga.KEY_S?e.DOWN:t===ga.KEY_RIGHT_ARROW||t===ga.KEY_D?e.RIGHT:null}}});ME.register("DirectionEnum",RP);const NP=RP,MP=OS.a11y.movementAlerter.leftBorderAlert,LP=OS.a11y.movementAlerter.rightBorderAlert,IP=OS.a11y.movementAlerter.topBorderAlert,DP=OS.a11y.movementAlerter.bottomBorderAlert,kP=IP;class qP{constructor(e){e=We({boundsProperty:new Rn(new ti(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)),leftAlert:MP,rightAlert:LP,topAlert:kP,bottomAlert:DP,utteranceOptions:{}},e),this[NP.LEFT]=null,this[NP.RIGHT]=null,this[NP.UP]=null,this[NP.DOWN]=null,this.setDirectionUtterance(e.leftAlert,NP.LEFT,e.utteranceOptions),this.setDirectionUtterance(e.rightAlert,NP.RIGHT,e.utteranceOptions),this.setDirectionUtterance(e.topAlert,NP.UP,e.utteranceOptions),this.setDirectionUtterance(e.bottomAlert,NP.DOWN,e.utteranceOptions),this.boundsProperty=e.boundsProperty}setDirectionUtterance(e,t,i){null!==e&&(this[t]=e instanceof rd?e:new rd(We({alert:new Zu({objectResponse:e})},i)))}getAlertAtBorder(e,t){let i;const n=[];if(e.x===this.boundsProperty.value.left&&n.push(NP.LEFT),e.x===this.boundsProperty.value.right&&n.push(NP.RIGHT),e.y===this.boundsProperty.value.top&&n.push(NP.UP),e.y===this.boundsProperty.value.bottom&&n.push(NP.DOWN),n.length>1){t=t||"";const e=NP.keyToDirection(t);e&&n.indexOf(e)>=0&&(i=e)}else 1===n.length&&(i=n[0]);if(i){const e=this[i];if(e)return e}return null}getAlertOnEndDrag(e,t){let i;return t&&(i=ga.getEventCode(t)),this.getAlertAtBorder(e,i)}reset(){this[NP.LEFT]&&this[NP.LEFT].reset(),this[NP.RIGHT]&&this[NP.RIGHT].reset(),this[NP.UP]&&this[NP.UP].reset(),this[NP.DOWN]&&this[NP.DOWN].reset()}static getDefaultTopAlert(){return kP}}ME.register("BorderAlertsDescriber",qP);const BP=qP,OP=OS.a11y.movementAlerter.down,HP=OS.a11y.movementAlerter.left,YP=OS.a11y.movementAlerter.right,GP=OS.a11y.movementAlerter.up,FP=OS.a11y.movementAlerter.upAndToTheLeft,UP=OS.a11y.movementAlerter.upAndToTheRight,zP=OS.a11y.movementAlerter.downAndToTheLeft,WP=OS.a11y.movementAlerter.downAndToTheRight,jP=15*Math.PI/180,XP={UP:new zt(-3*Math.PI/4+jP,-Math.PI/4-jP),DOWN:new zt(Math.PI/4+jP,3*Math.PI/4-jP),RIGHT:new zt(-Math.PI/4+jP,Math.PI/4-jP),LEFT:new zt(3*Math.PI/4+jP,Math.PI),UP_LEFT:new zt(-3*Math.PI-jP,-3*Math.PI/4+jP),DOWN_LEFT:new zt(3*Math.PI/4-jP,3*Math.PI/4+jP),UP_RIGHT:new zt(-Math.PI/4-jP,-Math.PI/4+jP),DOWN_RIGHT:new zt(Math.PI/4-jP,Math.PI/4+jP)},QP=Object.keys(XP);const KP={LEFT:HP,RIGHT:YP,UP:GP,DOWN:OP,UP_LEFT:FP,UP_RIGHT:UP,DOWN_LEFT:zP,DOWN_RIGHT:WP};class JP extends _P{constructor(e,t){super(t=We({borderAlertsOptions:null,movementAlerts:KP,modelViewTransform:Lm.createIdentity(),alertDiagonal:!1},t)),this.movementAlertKeys=Object.keys(t.movementAlerts),this.movementAlerts=t.movementAlerts,this.alertDiagonal=t.alertDiagonal,this.modelViewTransform=t.modelViewTransform,this.borderAlertsDescriber=new BP(t.borderAlertsOptions),this.directionChangeUtterance=new rd({alert:new Zu}),this.initialFirstPosition=e.get(),this.positionProperty=e,this.lastAlertedPosition=this.initialFirstPosition}alert(e){super.alert(e),this.lastAlertedPosition=this.positionProperty.get()}alertDirections(e){NP.includes(e)&&(e=[e]),e.forEach(e=>{this.directionChangeUtterance.alert.objectResponse=this.movementAlerts[e],this.alert(this.directionChangeUtterance)})}alertDirectionalMovement(){const e=this.positionProperty.get();if(!e.equals(this.lastAlertedPosition)){const t=this.getDirections(e,this.lastAlertedPosition);0,this.alertDirections(t)}}getDirections(e,t){const i=JP.getDirectionEnumerable(e,t,this.modelViewTransform);return this.alertDiagonal?[i]:NP.directionToRelativeDirections(i)}static getDirectionEnumerable(e,t,i){let n;const r=i.modelToViewPosition(e),s=i.modelToViewPosition(t),o=r.x-s.x,a=r.y-s.y,l=Math.atan2(a,o);XP.LEFT.contains(Math.abs(l))&&(n=NP.LEFT);for(let h=0;h{const t=this.movementAlerts[e];t&&t.reset&&t.reset()}),this.borderAlertsDescriber.reset()}static getDefaultMovementDescriptions(){return We({},KP)}}ME.register("MovementAlerter",JP);class ZP extends kT{constructor(e,t,i){const n=$e()({cursor:"pointer",baseColor:"white",stroke:"black",lineWidth:1,cornerRadius:4,xMargin:7,yMargin:5,touchAreaXDilation:7,touchAreaYDilation:7,arrowHeight:20,arrowWidth:20*Math.sqrt(3)/2,arrowFill:"black",arrowStroke:null,arrowLineWidth:1,numberOfArrows:1,arrowSpacing:-10,fireOnHold:!0,fireOnHoldDelay:400,fireOnHoldInterval:100,startCallback:_.noop,endCallback:_.noop},i);n.listener=t;const r=new bs;for(let s=0;s{let n=$P,r=$P;return e.hasOwnProperty(t)&&(n=e[t]),e.hasOwnProperty(i)&&(r=e[i]),n!==$P?e[i]=n:delete e[i],r!==$P?e[t]=r:delete e[t],e};Ue.register("swapObjectKeys",ex);const tx=ex,ix="data:audio/mpeg;base64,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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+xDE1gPAAAGkAAAAIAAANIAAAASqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7EMTWA8AAAaQAAAAgAAA0gAAABKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sQxNYDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+xDE1gPAAAGkAAAAIAAANIAAAASqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==",nx=GS(jS,ix),rx=IS.createLock(ix),sx=new zS;let ox=!1;const ax=()=>{ox||(rx(),ox=!0)},lx=jS.decodeAudioData(nx.buffer,e=>{null===sx.audioBufferProperty.value&&(sx.audioBufferProperty.set(e),ax())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),sx.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),ax()});lx&&lx.then(e=>{null===sx.audioBufferProperty.value&&(sx.audioBufferProperty.set(e),ax())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),ax()});const hx=sx,cx="data:audio/mpeg;base64,//uQxAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAAEAAAE/QCbm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5vBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHB4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4P////////////////////////////////8AAAAUTEFNRTMuMTAwBJgAAAAAAAAAABUgJAXmQQABpAAABP2CPnqIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//ugxAAAAZABXJQAACjSBy/7MvJBlbA24AeHxx+Z+DJ48Acl/O7e/c+wAAAAAAAEggodS1KhDIMHY9Flj8OAaLhIDnqje9htgSxoj0q3Fksjnr007hUgBFiJkAAAAJRul9HpGarkErUNUSqvEO5RRnr0CYblhVBIAACITTDJN3xrY6pMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpcJoKAAAAAArSgBAzM3OFUFV0GH4AAagOAQ5P8ZoVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sgxNoAw8QpV9zxgCg6A+w4kAkEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7EMTlgMI4H1/EgQggMYHqUBQYBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sQxNYDwAAB/gAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=",ux=GS(jS,cx),dx=IS.createLock(cx),px=new zS;let mx=!1;const gx=()=>{mx||(dx(),mx=!0)},fx=jS.decodeAudioData(ux.buffer,e=>{null===px.audioBufferProperty.value&&(px.audioBufferProperty.set(e),gx())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),px.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),gx()});fx&&fx.then(e=>{null===px.audioBufferProperty.value&&(px.audioBufferProperty.set(e),gx())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),gx()});const yx=px,Ax=new Jb(hx,{soundClipOptions:{initialOutputLevel:.2},soundManagerOptions:{categoryName:"user-interface"}});FS.register("generalBoundaryBoopSoundPlayer",Ax);const Ex=Ax,vx=new Jb(yx,{soundClipOptions:{initialOutputLevel:.2},soundManagerOptions:{categoryName:"user-interface"}});FS.register("generalSoftClickSoundPlayer",vx);const Sx=vx,bx=new Jb(hx,{soundClipOptions:{initialOutputLevel:.2,initialPlaybackRate:1/Math.pow(2,1/6)},soundManagerOptions:{categoryName:"user-interface"}}),Tx=new Jb(yx,{soundClipOptions:{initialOutputLevel:.2,initialPlaybackRate:1/Math.pow(2,1/6)},soundManagerOptions:{categoryName:"user-interface"}}),wx=e=>Bt.roundToInterval(e,1e-9),Vx=()=>1,Px=()=>{};class xx{constructor(e,t){const i=$e()({middleMovingUpSoundPlayer:Sx,middleMovingDownSoundPlayer:Tx,middleMovingUpPlaybackRateMapper:Vx,middleMovingDownPlaybackRateMapper:Vx,numberOfMiddleThresholds:null,interThresholdDelta:null,constrainValue:wx,minSoundPlayer:bx,maxSoundPlayer:Ex,minimumInterMiddleSoundTime:.035},t);null===i.numberOfMiddleThresholds&&null===i.interThresholdDelta&&(i.numberOfMiddleThresholds=5),null!==i.numberOfMiddleThresholds?this.interThresholdDistance=e.getLength()/(i.numberOfMiddleThresholds+1):null!==i.interThresholdDelta?this.interThresholdDistance=i.interThresholdDelta:this.interThresholdDistance=e.getLength()/2,this.valueRange=e,this.middleMovingUpSoundPlayer=i.middleMovingUpSoundPlayer,this.middleMovingDownSoundPlayer=i.middleMovingDownSoundPlayer,this.middleMovingUpPlaybackRateMapper=i.middleMovingUpPlaybackRateMapper,this.middleMovingDownPlaybackRateMapper=i.middleMovingDownPlaybackRateMapper,this.minSoundPlayer=i.minSoundPlayer,this.maxSoundPlayer=i.maxSoundPlayer,this.minimumInterMiddleSoundTime=i.minimumInterMiddleSoundTime,this.timeOfMostRecentMiddleSound=0,this.constrainValue=i.constrainValue}playSoundIfThresholdReached(e,t){if(e!==t){const i=this.constrainValue(e),n=this.constrainValue(t),r=this.getSurroundingThresholds(n),s=this.getSurroundingThresholds(i),o=1===r.length&&1===s.length&&Math.abs(r[0]-s[0])>this.interThresholdDistance||1===r.length&&2===s.length&&r[0]!==s[0]&&r[0]!==s[1]||2===r.length&&1===s.length&&s[0]!==r[0]&&s[0]!==r[1]||2===r.length&&2===s.length&&s[0]!==r[0],a=1===s.length&&(2===r.length||r[0]!==s[0]);(o||a||i===this.valueRange.min||i===this.valueRange.max)&&this.playSoundForValueChange(e,t)}}playSoundForValueChange(e,t){const i=this.constrainValue(e),n=this.constrainValue(t);if(i!==n||t!==e&&(e===this.valueRange.min||e===this.valueRange.max))if(e===this.valueRange.min&&this.minSoundPlayer!==xx.USE_MIDDLE_SOUND)this.minSoundPlayer.play();else if(e===this.valueRange.max&&this.maxSoundPlayer!==xx.USE_MIDDLE_SOUND)this.maxSoundPlayer.play();else{const t=jS.currentTime;if(t-this.timeOfMostRecentMiddleSound>this.minimumInterMiddleSoundTime){let r,s;i>n?(r=this.middleMovingUpPlaybackRateMapper,s=this.middleMovingUpSoundPlayer):(r=this.middleMovingUpPlaybackRateMapper,s=this.middleMovingDownSoundPlayer),r!==Vx&&s.setPlaybackRate(r(e)),s.play(),this.timeOfMostRecentMiddleSound=t}}}getSurroundingThresholds(e){const t=Math.floor(Bt.roundToInterval((e-this.valueRange.min)/this.interThresholdDistance,1e-7)),i=Bt.roundToInterval(t*this.interThresholdDistance+this.valueRange.min,1e-7),n=[i];if(i!==e){const e=Math.min(Bt.roundToInterval(i+this.interThresholdDistance,1e-7),this.valueRange.max);e>i&&n.push(e)}return n}}_defineProperty(xx,"NO_SOUND",new xx(new zt(0,1),{middleMovingUpSoundPlayer:MV,minSoundPlayer:MV,maxSoundPlayer:MV})),_defineProperty(xx,"USE_MIDDLE_SOUND",{play:Px,stop:Px}),FS.register("ValueChangeSoundPlayer",xx);const Cx=xx,_x=e=>""+e,Rx={withNameResponse:!1,withObjectResponse:!0,onlyOnValueChange:!0},Nx=(e,t)=>class extends(Md(e)){constructor(){for(var e=arguments.length,i=new Array(e),n=0;n{const t=this._getMappedValue(e.min),i=this._getMappedValue(e.max);this.setPDOMAttribute("min",t),this.setPDOMAttribute("max",i),this._updateSiblingStepAttribute()};this._enabledRangeProperty.link(l);const h=()=>{const e=this._getMappedValue();this.setPDOMAttribute("aria-valuenow",e),this.inputValue=e};this._valueProperty.link(h),this._disposeAccessibleValueHandler=()=>{this._enabledRangeProperty.unlink(l),this._valueProperty.unlink(h),this._dependenciesMultilink&&this._dependenciesMultilink.dispose(),this._panTargetNode=null}}setA11yDependencies(e){this._dependenciesMultilink&&this._dependenciesMultilink.dispose(),this._dependenciesMultilink=pr.multilinkAny(e.concat([this._valueProperty]),()=>{this._updateAriaValueText(this._oldValue),this._oldValue=this._valueProperty.value})}_updateAriaValueText(e){const t=this._getMappedValue(),i=this._a11yCreateAriaValueText(t,this._valueProperty.value,e);let n=Rl.unwrapStringProperty(i);this._a11yRepeatEqualValueText&&this.ariaValueText&&n===this.ariaValueText.replace(new RegExp(" ","g"),"")&&(n=this.ariaValueText+" "),this.ariaValueText=n}alertContextResponse(){let e=!1;if(this._a11yCreateContextResponseAlert){const t=this._getMappedValue(),i=this._a11yCreateContextResponseAlert(t,this._valueProperty.value,this._valueOnStart);i&&(this._contextResponseUtterance.alert=i,this.forEachUtteranceQueue(t=>{e||(t.hasUtterance(this._contextResponseUtterance)?(e=!0,this._timesChangedBeforeAlerting++):this._timesChangedBeforeAlerting=1),this._contextResponseUtterance.alertStableDelay=Math.min(this._contextResponseMaxDelay,this._timesChangedBeforeAlerting*this._contextResponsePerValueChangeDelay),t.addToBack(this._contextResponseUtterance)}))}}reset(){this._a11yCreateAriaValueText.reset&&this._a11yCreateAriaValueText.reset(),this._a11yCreateContextResponseAlert&&this._a11yCreateContextResponseAlert.reset&&this._a11yCreateContextResponseAlert.reset(),this._timesChangedBeforeAlerting=0,this._updateAriaValueText(null)}_getMappedValue(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._valueProperty.value;return this._a11yMapPDOMValue(e)}getAccessibleValueHandlerInputListener(){return{keydown:this.handleKeyDown.bind(this),keyup:this.handleKeyUp.bind(this),input:this.handleInput.bind(this),change:this.handleChange.bind(this),blur:this.handleBlur.bind(this)}}handleKeyDown(e){const t=e.domEvent,i=ga.getEventCode(t);if(i&&(this._shiftKey=t.shiftKey,ga.isKeyEvent(t,ga.KEY_TAB)&&(this._blockInput=!0),this.enabledProperty.get()&&ga.isRangeKey(t)&&(t.preventDefault(),!t.metaKey))){e.pointer.reserveForKeyboardDrag();let n=!0;this._anyKeysDown()||this._onInteractionStart(e),this._rangeKeysDown[i]=!0;let r=this._valueProperty.get();if(ga.isAnyKeyEvent(t,[ga.KEY_END,ga.KEY_HOME]))i===ga.KEY_END?r=this._enabledRangeProperty.get().max:i===ga.KEY_HOME&&(r=this._enabledRangeProperty.get().min);else{let e;i===ga.KEY_PAGE_UP||i===ga.KEY_PAGE_DOWN?(e=this.pageKeyboardStep,i===ga.KEY_PAGE_UP?r=this._valueProperty.get()+e:i===ga.KEY_PAGE_DOWN&&(r=this._valueProperty.get()-e)):ga.isArrowKey(t)&&(e=t.shiftKey?this.shiftKeyboardStep:this.keyboardStep,n=!t.shiftKey,i===ga.KEY_RIGHT_ARROW||i===ga.KEY_UP_ARROW?r=this._valueProperty.get()+e:i!==ga.KEY_LEFT_ARROW&&i!==ga.KEY_DOWN_ARROW||(r=this._valueProperty.get()-e),this._roundToStepSize&&(r=Mx(r,this._valueProperty.get(),e)))}const s=this._a11yMapValue(r,this._valueProperty.get());let o=s;n&&(o=this._constrainValue(s)),this._valueProperty.set(Bt.clamp(o,this._enabledRangeProperty.get().min,this._enabledRangeProperty.get().max)),this._onInput(e)}}handleKeyUp(e){const t=ga.getEventCode(e.domEvent);this._allKeysUp()||(ga.SHIFT_KEYS.includes(t)&&(this._shiftKey=!1),this.enabledProperty.get()&&ga.isRangeKey(e.domEvent)&&(this._rangeKeysDown[t]=!1,this._allKeysUp()&&this._onInteractionEnd(e)))}handleChange(e){this._a11yInputHandled||this.handleInput(e),this._a11yInputHandled=!1}handleInput(e){if(this.enabledProperty.get()&&!this._blockInput){this._a11yInputHandled=!0;let t=this._valueProperty.get();const i=parseFloat(e.domEvent.target.value),n=this._shiftKey?this.shiftKeyboardStep:this.keyboardStep,r=this._getMappedValue();this._onInteractionStart(e),i>r?t=this._valueProperty.get()+n:i!e)}_anyKeysDown(){return!!_.find(this._rangeKeysDown,e=>e)}_updateSiblingStepAttribute(){const e=Math.min(this.keyboardStep,this.shiftKeyboardStep,this.pageKeyboardStep);let t=Math.pow(10,-Bt.numberOfDecimalPlaces(e));const i=this._getMappedValue(this._enabledRangeProperty.get().min),n=this._getMappedValue(this._enabledRangeProperty.get().max);t/(n-i)<1e-5&&(t=n/100),this.setPDOMAttribute("step",t)}voicingOnEndResponse(e,t){const i=tt({},this._voicingOnEndResponseOptions,t),n=e!==this._valueProperty.value,r=this._valueProperty.value===this._enabledRangeProperty.value.min||this._valueProperty.value===this._enabledRangeProperty.value.max,s=!(!i.withNameResponse||!this.voicingNameResponse)||!(!i.withObjectResponse||!this.voicingObjectResponse);(!i.onlyOnValueChange||r||n)&&s&&this.voicingSpeakFullResponse({nameResponse:i.withNameResponse?this.voicingNameResponse:null,objectResponse:i.withObjectResponse?this.voicingObjectResponse:null,hintResponse:null})}dispose(){this._disposeAccessibleValueHandler(),super.dispose()}};Zv.register("AccessibleValueHandler",Nx);const Mx=function(e,t,i){let n=e;return 0!==i&&(n=Bt.roundSymmetric(n/i)*i,n=Lx(n,t,i)),n},Lx=function(e,t,i){let n=e;const r=Math.abs(e-t),s=r>i,o=Bt.equalsEpsilon(r,i,1e-14);return s&&!o&&(n+=e>t?-i:i),n};Nx.DEFAULT_TAG_NAME="input";const Ix=Nx,Dx=(e,t)=>class extends(Ix(e,t)){constructor(){for(var e=arguments.length,i=new Array(e),n=0;n{this.removeInputListener(o)}}dispose(){this._disposeAccessibleSlider(),super.dispose()}};Zv.register("AccessibleSlider",Dx);const kx=Dx;class qx extends(Xh(Lh)){constructor(e,t,i,n){super(),this.rangeProperty=i instanceof zt?new vn(i):i;const r=$e()({size:new sl(100,5),startDrag:_.noop,drag:_.noop,endDrag:_.noop,constrainValue:_.identity,enabledRangeProperty:this.rangeProperty,soundGenerator:zx.DEFAULT_SOUND,valueChangeSoundGeneratorOptions:{},voicingOnEndResponse:_.noop,leftVisualOverflow:0,rightVisualOverflow:0,tandem:Oi.REQUIRED,tandemNameSuffix:"TrackNode"},n);r.soundGenerator===zx.DEFAULT_SOUND?r.soundGenerator=new Cx(this.rangeProperty.value,r.valueChangeSoundGeneratorOptions||{}):null===r.soundGenerator&&(r.soundGenerator=Cx.NO_SOUND),this.leftVisualOverflow=r.leftVisualOverflow,this.rightVisualOverflow=r.rightVisualOverflow,this.minimumSize=r.size,this.minimumWidth=this.minimumSize.width,this.internalWidthProperty=new ir([this.localPreferredWidthProperty],e=>(null===e?this.minimumSize.width:Math.max(this.minimumSize.width,e))-r.leftVisualOverflow-r.rightVisualOverflow),this.sizeProperty=new ir([this.internalWidthProperty],e=>new sl(e,this.minimumSize.height)),this.valueToPositionProperty=new ir([this.rangeProperty,this.internalWidthProperty],(e,t)=>new qv(e.min,e.max,0,t,!0));const s=(t,i)=>{const n=e.value,s=i.subtrailTo(this).getTransform().inversePosition2(t.pointer.point).x,o=this.valueToPositionProperty.value.inverse(s),a=r.enabledRangeProperty.value.constrainValue(o),l=r.constrainValue(a);e.set(l),"down"===t.type&&r.soundGenerator.playSoundIfThresholdReached(l,n)};this.addChild(t);let o=e.value;this.dragListener=new dm({tandem:r.tandem.createTandem("dragListener"),start:(t,i)=>{r.startDrag(t),o=e.value,s(t,i.pressedTrail)},drag:(e,t)=>{r.drag(e),s(e,t.pressedTrail)},end:e=>{r.endDrag(e),r.voicingOnEndResponse(o)}}),t.addInputListener(this.dragListener),this.mutate(r),this.disposeSliderTrack=()=>{t.removeInputListener(this.dragListener),this.dragListener.dispose()}}dispose(){this.disposeSliderTrack(),super.dispose()}}Zv.register("SliderTrack",qx);class Bx extends qx{constructor(e,t,i){const n=$e()({fillEnabled:"white",fillDisabled:"gray",stroke:"black",lineWidth:1,cornerRadius:0},i),r=new Wc({fill:n.fillDisabled,stroke:n.stroke,lineWidth:n.lineWidth,cornerRadius:n.cornerRadius,cursor:"default",pickable:!1}),s=new Wc({fill:n.fillEnabled,stroke:n.stroke,lineWidth:n.lineWidth,cornerRadius:n.cornerRadius});super(e,new Lh({children:[r,s]}),t,tt({leftVisualOverflow:null!==n.stroke?n.lineWidth/2:0,rightVisualOverflow:null!==n.stroke?n.lineWidth/2:0},n));const o=pr.multilink([n.enabledRangeProperty,this.valueToPositionProperty,this.sizeProperty],(e,t,i)=>{const n=t.evaluate(e.min),o=t.evaluate(e.max);r.setRect(0,0,i.width,i.height),s.setRect(n,0,o-n,i.height)});this.disposeDefaultSliderTrack=()=>{o.dispose()}}dispose(){this.disposeDefaultSliderTrack(),super.dispose()}}Zv.register("DefaultSliderTrack",Bx);class Ox extends Wc{constructor(e){const t=$e()({size:new sl(22,45),fillHighlighted:"rgb( 71, 207, 255 )",centerLineStroke:"white",fill:"rgb( 50, 145, 184 )",stroke:"black",lineWidth:1,tandem:Oi.REQUIRED,tandemNameSuffix:"ThumbNode"},e);void 0===t.cornerRadius&&(t.cornerRadius=.25*t.size.width),t.cachedPaints=[t.fill,t.fillHighlighted],super(0,0,t.size.width,t.size.height,t);const i=Wc.bounds(this.bounds.dilated(5),{fill:"transparent",localBounds:this.bounds,pickable:!1});this.addChild(i);this.addChild(new Cc(bs.lineSegment(t.size.width/2,3,t.size.width/2,t.size.height-3),{stroke:t.centerLineStroke}));const n=new hm({attach:!1,tandem:Oi.OPT_OUT});n.isHighlightedProperty.link(e=>{this.fill=e?t.fillHighlighted:t.fill}),this.addInputListener(n)}}Zv.register("SliderThumb",Ox);const Hx={VALUE_NAMED_PLACEHOLDER:"{{value}}",VALUE_NUMBERED_PLACEHOLDER:"{0}",SLIDER_VERTICAL_ROTATION:-Math.PI/2};Zv.register("SunConstants",Hx);const Yx=Hx;class Gx{constructor(e,t,i,n,r,s,o,a,l){this.parent=e,this.value=t,this.label=i,this.labelXProperty=new ir([l.valueToPositionProperty],e=>e.evaluate(t)),this.tickNode=new Lh,e.addChild(this.tickNode);const h=new Cc((new bs).moveTo(0,l.top).lineTo(0,l.top-n),{stroke:r,lineWidth:s});this.labelXProperty.link(e=>{h.x=e}),this.tickNode.addChild(h),i&&(this.labelContainer=new Lh({pickable:!1}),this.tickNode.addChild(this.labelContainer),this.labelContainer.addChild(i),a===$t.VERTICAL&&(this.labelContainer.rotation=-Yx.SLIDER_VERTICAL_ROTATION),this.labelManualConstraint=ef.create(this.tickNode,[h,this.labelContainer],(e,t)=>{t.centerX=e.centerX,t.bottom=e.top-o.tickLabelSpacing}))}dispose(){this.parent.removeChild(this.tickNode),this.labelContainer&&this.labelContainer.dispose(),this.labelXProperty.dispose(),this.labelManualConstraint&&this.labelManualConstraint.dispose()}}Zv.register("SliderTick",Gx);const Fx=new sl(100,5),Ux=new sl(17,34);class zx extends(nc(kx(Lh,0))){constructor(e,t,i){const n=$e()({orientation:$t.HORIZONTAL,trackNode:null,trackSize:null,trackFillEnabled:"white",trackFillDisabled:"gray",trackStroke:"black",trackLineWidth:1,trackCornerRadius:0,trackPickable:!0,thumbNode:null,thumbSize:null,thumbFill:"rgb(50,145,184)",thumbFillHighlighted:"rgb(71,207,255)",thumbStroke:"black",thumbLineWidth:1,thumbCenterLineStroke:"white",thumbTouchAreaXDilation:11,thumbTouchAreaYDilation:11,thumbMouseAreaXDilation:0,thumbMouseAreaYDilation:0,thumbYOffset:0,tickLabelSpacing:6,majorTickLength:25,majorTickStroke:"black",majorTickLineWidth:1,minorTickLength:10,minorTickStroke:"black",minorTickLineWidth:1,cursor:"pointer",startDrag:_.noop,drag:_.noop,endDrag:_.noop,constrainValue:_.identity,disabledOpacity:mo.DISABLED_OPACITY,soundGenerator:zx.DEFAULT_SOUND,valueChangeSoundGeneratorOptions:{},phetioLinkedProperty:null,tandem:Oi.REQUIRED,tandemNameSuffix:"Slider",phetioType:zx.SliderIO,phetioFeatured:!0,visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0},i),r=t instanceof zt?new vn(t):t;if(n.soundGenerator===zx.DEFAULT_SOUND?n.soundGenerator=new Cx(r.value,n.valueChangeSoundGeneratorOptions||{}):null===n.soundGenerator&&(n.soundGenerator=Cx.NO_SOUND),n.soundGenerator!==Cx.NO_SOUND){let t=e.value;const i=n.drag;n.drag=r=>{r.isFromPDOM()?n.soundGenerator.playSoundForValueChange(e.value,t):n.soundGenerator.playSoundIfThresholdReached(e.value,t),i(r),t=e.value}}n.orientation===$t.VERTICAL&&(n.trackSize&&(n.trackSize=n.trackSize.swapped()),n.thumbSize&&(n.thumbSize=n.thumbSize.swapped()),tx(n,"thumbTouchAreaXDilation","thumbTouchAreaYDilation"),tx(n,"thumbMouseAreaXDilation","thumbMouseAreaYDilation")),n.trackSize=n.trackSize||Fx,n.thumbSize=n.thumbSize||Ux;const s=n.tandem.createTandem(zx.THUMB_NODE_TANDEM_NAME);Oi.VALIDATION&&n.thumbNode;const o=n.thumbNode||new Ox({size:n.thumbSize,fill:n.thumbFill,fillHighlighted:n.thumbFillHighlighted,stroke:n.thumbStroke,lineWidth:n.thumbLineWidth,centerLineStroke:n.thumbCenterLineStroke,tandem:s}),a=!n.enabledRangeProperty,l=_.pick(n,Lh.REQUIRES_BOUNDS_OPTION_KEYS),h=tt({ariaOrientation:n.orientation,valueProperty:e,panTargetNode:o,enabledRangeProperty:n.enabledRangeProperty||(t instanceof zt?new Rn(t,{valueType:zt,isValidValue:e=>e.min>=t.min&&e.max<=t.max,tandem:n.tandem.createTandem("enabledRangeProperty"),phetioValueType:zt.RangeIO,phetioDocumentation:"Sliders support two ranges: the outer range which specifies the min and max of the track and the enabledRangeProperty, which determines how low and high the thumb can be dragged within the track."}):t)},n);super(h),_defineProperty(this,"ticks",er()),_defineProperty(this,"proposedValue",null),this.orientation=h.orientation,this.enabledRangeProperty=h.enabledRangeProperty,this.tickOptions=_.pick(n,"tickLabelSpacing","majorTickLength","majorTickStroke","majorTickLineWidth","minorTickLength","minorTickStroke","minorTickLineWidth");const c=[];this.majorTicksParent=new Lh,this.minorTicksParent=new Lh,c.push(this.majorTicksParent),c.push(this.minorTicksParent);const u=n.tandem.createTandem(zx.TRACK_NODE_TANDEM_NAME);Oi.VALIDATION&&n.trackNode;const d=new Lh;c.push(d),this.track=n.trackNode||new Bx(e,t,{size:h.trackSize,fillEnabled:h.trackFillEnabled,fillDisabled:h.trackFillDisabled,stroke:h.trackStroke,lineWidth:h.trackLineWidth,cornerRadius:h.trackCornerRadius,startDrag:h.startDrag,drag:h.drag,endDrag:h.endDrag,constrainValue:h.constrainValue,enabledRangeProperty:this.enabledRangeProperty,soundGenerator:n.soundGenerator,pickable:h.trackPickable,voicingOnEndResponse:this.voicingOnEndResponse.bind(this),tandem:u}),c.push(this.track),o.setCenterY(this.track.centerY+n.thumbYOffset),c.push(o);const p=new Lh({children:c});n.orientation===$t.VERTICAL&&(p.rotation=Yx.SLIDER_VERTICAL_ROTATION),this.addChild(p),n.thumbNode||!n.thumbTouchAreaXDilation&&!n.thumbTouchAreaYDilation||(o.touchArea=o.localBounds.dilatedXY(n.thumbTouchAreaXDilation,n.thumbTouchAreaYDilation)),n.thumbNode||!n.thumbMouseAreaXDilation&&!n.thumbMouseAreaYDilation||(o.mouseArea=o.localBounds.dilatedXY(n.thumbMouseAreaXDilation,n.thumbMouseAreaYDilation));let m=0,g=e.value;const f=new dm({tandem:o.tandem.createTandem("dragListener"),start:(t,i)=>{if(this.enabledProperty.get()){g=e.value,n.startDrag(t);const r=i.pressedTrail.subtrailTo(p).getTransform();m=r.inversePosition2(t.pointer.point).x-o.centerX}},drag:(t,i)=>{if(this.enabledProperty.get()){const r=i.pressedTrail.subtrailTo(p).getTransform().inversePosition2(t.pointer.point).x-m;this.proposedValue=this.track.valueToPositionProperty.value.inverse(r);const s=this.enabledRangeProperty.get().constrainValue(this.proposedValue);e.set(n.constrainValue(s)),n.drag(t)}},end:e=>{this.enabledProperty.get()&&(n.endDrag(e),this.voicingOnEndResponse(g)),this.proposedValue=null}});o.addInputListener(f),this.thumbDragListener=f,this.trackDragListener=this.track.dragListener;const y=pr.multilink([e,this.track.valueToPositionProperty],(e,t)=>{o.centerX=t.evaluate(e)}),A=t=>{if(!e.isPhetioInstrumented()||!Tn.value)if(null===this.proposedValue)e.set(Bt.clamp(e.value,t.min,t.max));else{const i=Bt.clamp(this.proposedValue,t.min,t.max),r=n.constrainValue(i);e.set(r)}};this.enabledRangeProperty.link(A);const E=new Wx(this,this.track,o,p,n.orientation,d,this.ticks);this.disposeSlider=()=>{E.dispose(),o.dispose&&o.dispose(),this.track.dispose&&this.track.dispose(),a?this.enabledRangeProperty.dispose():this.enabledRangeProperty.unlink(A),y.dispose(),f.dispose()},this.focusHighlight=new jd(o);const v=n.phetioLinkedProperty||(e instanceof _n?e:null);v&&this.addLinkedElement(v,{tandemName:"valueProperty"}),!a&&this.enabledRangeProperty instanceof _n&&this.addLinkedElement(this.enabledRangeProperty,{tandemName:"enabledRangeProperty"}),this.mutate(l)}get majorTicksVisible(){return this.getMajorTicksVisible()}set majorTicksVisible(e){this.setMajorTicksVisible(e)}get minorTicksVisible(){return this.getMinorTicksVisible()}set minorTicksVisible(e){this.setMinorTicksVisible(e)}dispose(){this.disposeSlider(),this.ticks.forEach(e=>{e.dispose()}),super.dispose()}addMajorTick(e,t){this.addTick(this.majorTicksParent,e,t,this.tickOptions.majorTickLength,this.tickOptions.majorTickStroke,this.tickOptions.majorTickLineWidth)}addMinorTick(e,t){this.addTick(this.minorTicksParent,e,t,this.tickOptions.minorTickLength,this.tickOptions.minorTickStroke,this.tickOptions.minorTickLineWidth)}addTick(e,t,i,n,r,s){this.ticks.push(new Gx(e,t,i,n,r,s,this.tickOptions,this.orientation,this.track))}setMajorTicksVisible(e){this.majorTicksParent.visible=e}getMajorTicksVisible(){return this.majorTicksParent.visible}setMinorTicksVisible(e){this.minorTicksParent.visible=e}getMinorTicksVisible(){return this.minorTicksParent.visible}}Ne=zx,_defineProperty(zx,"DEFAULT_SOUND",new Cx(new zt(0,1))),_defineProperty(zx,"THUMB_NODE_TANDEM_NAME","thumbNode"),_defineProperty(zx,"TRACK_NODE_TANDEM_NAME","trackNode"),_defineProperty(zx,"SliderIO",new yt("SliderIO",{valueType:Ne,documentation:"A traditional slider component, with a knob and possibly tick marks",supertype:Lh.NodeIO}));class Wx extends Ag{constructor(e,t,i,n,r,s,o){super(e),this.slider=e,this.track=t,this.thumb=i,this.sliderPartsNode=n,this.orientation=r,this.trackSpacer=s,this.ticks=o,r===$t.HORIZONTAL?(e.heightSizable=!1,this.preferredProperty=this.slider.localPreferredWidthProperty):(e.widthSizable=!1,this.preferredProperty=this.slider.localPreferredHeightProperty),this.preferredProperty.lazyLink(this._updateLayoutListener),this.track.rangeProperty.lazyLink(this._updateLayoutListener),this.thumb.localBoundsProperty.lazyLink(this._updateLayoutListener);const a=e=>{e.tickNode.localBoundsProperty.lazyLink(this._updateLayoutListener),o.addItemRemovedListener(t=>{t===e&&t.tickNode.localBoundsProperty.hasListener(this._updateLayoutListener)&&e.tickNode.localBoundsProperty.unlink(this._updateLayoutListener)})};o.addItemAddedListener(a),this.addNode(t),this.layout(),this.disposeSliderConstraint=()=>{o.removeItemAddedListener(a),this.preferredProperty.unlink(this._updateLayoutListener),this.track.rangeProperty.unlink(this._updateLayoutListener),this.thumb.localBoundsProperty.unlink(this._updateLayoutListener)}}layout(){super.layout();const e=this.slider,t=this.track,i=this.thumb;this.trackSpacer.localBounds=t.localBounds.dilatedX(i.width/2);const n=t.leftVisualOverflow+t.rightVisualOverflow,r=t.minimumWidth,s=r-n,o=e=>Bt.linear(t.rangeProperty.value.min,t.rangeProperty.value.max,0,1,e),a=-i.width/2-t.leftVisualOverflow,l=i.width/2-t.leftVisualOverflow,h=new zt(a,r+l);if(this.ticks.forEach(e=>{const t=s*o(e.value),i=e.tickNode.width/2;h.includeRange(new zt(-i,i).shifted(t))}),e.widthSizable&&null!==this.preferredProperty.value){const e=xv.max(xv.linear(1,l),...this.ticks.map(e=>{const t=o(e.value);return xv.linear(t,e.tickNode.width/2-n*t)})).minus(xv.min(xv.constant(a),...this.ticks.map(e=>{const t=o(e.value);return xv.linear(t,-e.tickNode.width/2-n*t)}))),i=e.withXValues([r-1,r,...e.points.map(e=>e.x).filter(e=>e>r+1e-10)]).inverted();t.preferredWidth=Math.max(r,i.evaluate(this.preferredProperty.value))}else t.preferredWidth=t.minimumWidth;const c=h.getLength();this.orientation===$t.HORIZONTAL?e.localMinimumWidth=c:e.localMinimumHeight=c}dispose(){this.disposeSliderConstraint(),super.dispose()}}Zv.register("Slider",zx);class jx extends zx{constructor(e,t,i){super(e,t,$e()({orientation:$t.HORIZONTAL},i))}}Zv.register("HSlider",jx);const Xx={PLUS:"+",MINUS:"−",TIMES:"×",DIVIDE:"÷",DOT:"⋅",UNARY_PLUS:"+",UNARY_MINUS:"-",EQUAL_TO:"=",NOT_EQUAL_TO:"≠",GREATER_THAN:">",LESS_THAN:"<",LESS_THAN_OR_EQUAL:"≤",GREATER_THAN_OR_EQUAL:"≥",PERCENT:"%",INFINITY:"∞",PI:"π",PLUS_MINUS:"±",THETA:"θ",NO_VALUE:"—",DEGREES:"°"};ME.register("MathSymbols",Xx);const Qx=Xx,Kx=new Jv(20);class Jx extends Lh{constructor(e,t,i){var n;const r=$e()({align:"right",valuePattern:Yx.VALUE_NAMED_PLACEHOLDER,decimalPlaces:0,numberFormatter:null,useRichText:!1,useFullHeight:!1,textOptions:{font:Kx,fill:"black",maxWidth:null,phetioReadOnly:!0},xMargin:8,yMargin:2,cornerRadius:0,backgroundFill:"white",backgroundStroke:"lightGray",backgroundLineWidth:1,backgroundLineDash:[],minBackgroundWidth:0,noValueString:Qx.NO_VALUE,noValueAlign:null,noValuePattern:null,phetioType:Jx.NumberDisplayIO},i);const s=new vn(r.numberFormatter?r.numberFormatter:e=>null===r.decimalPlaces?""+e:Bt.toFixed(e,r.decimalPlaces));r.noValueAlign||(r.noValueAlign=r.align);const o=e=>e.includes(Yx.VALUE_NUMBERED_PLACEHOLDER)?zu.format(e,Yx.VALUE_NAMED_PLACEHOLDER):e,a="string"==typeof r.valuePattern?new vn(o(r.valuePattern)):new ir([r.valuePattern],o);r.noValuePattern||(r.noValuePattern=new ir([a],e=>e));const l="string"==typeof r.noValuePattern?new vn(r.noValuePattern):r.noValuePattern,h=new ir([s],e=>Zx(t.min,r.noValueString,e)),c=new ir([s],e=>Zx(t.max,r.noValueString,e)),u=new ir([a,h,c],(e,t,i)=>zu.fillIn(e,{value:t.length>i.length?t:i})),d=r.useRichText?Nf:qc,p=null===(n=r.tandem)||void 0===n?void 0:n.createTandem("valueText"),m=new mr([e,l,a,s],(e,t,i,n)=>{const s=null===e&&t?t:i,o=Zx(e,r.noValueString,n);return zu.fillIn(s,{value:o})},{tandem:null==p?void 0:p.createTandem(qc.STRING_PROPERTY_TANDEM_NAME)}),g=tt({},r.textOptions,{maxWidth:null}),f=new d(m,tt({tandem:p},g)),y=f.height,A=new Wc({cornerRadius:r.cornerRadius,fill:r.backgroundFill,stroke:r.backgroundStroke,lineWidth:r.backgroundLineWidth,lineDash:r.backgroundLineDash});u.link(e=>{const t=new d(e,_.omit(g,"tandem"));f.maxWidth=null!==r.textOptions.maxWidth?r.textOptions.maxWidth:0!==t.width?t.width:null,t.maxWidth=f.maxWidth,A.rectWidth=Math.max(r.minBackgroundWidth,t.width+2*r.xMargin),A.rectHeight=(r.useFullHeight?y:t.height)+2*r.yMargin}),r.children=[A,f],super(),this.numberFormatterProperty=s,this.valueText=f,this.backgroundNode=A,ef.create(this,[f,A],(t,i)=>{const n=null===e.value?r.noValueAlign:r.align;"center"===n?t.centerX=i.centerX:"left"===n?t.left=i.left+r.xMargin:t.right=i.right-r.xMargin,t.centerY=i.centerY}),this.mutate(r),this.disposeNumberDisplay=()=>{m.dispose(),a.dispose()}}setNumberFormatter(e){this.numberFormatterProperty.value=e}recomputeText(){}dispose(){this.disposeNumberDisplay(),super.dispose()}setNumberFont(e){this.valueText.font=e}set numberFont(e){this.setNumberFont(e)}setNumberFill(e){this.valueText.fill=e}set numberFill(e){this.setNumberFill(e)}setBackgroundFill(e){this.backgroundNode.fill=e}set backgroundFill(e){this.setBackgroundFill(e)}get backgroundFill(){return this.getBackgroundFill()}getBackgroundFill(){return this.backgroundNode.fill}setBackgroundStroke(e){this.backgroundNode.stroke=e}set backgroundStroke(e){this.setBackgroundStroke(e)}getBackgroundWidth(){return this.backgroundNode.getRectWidth()}setBackgroundWidth(e){this.backgroundNode.setRectWidth(e)}get backgroundWidth(){return this.getBackgroundWidth()}set backgroundWidth(e){this.setBackgroundWidth(e)}}_defineProperty(Jx,"NumberDisplayIO",new yt("NumberDisplayIO",{valueType:Jx,supertype:Lh.NodeIO,documentation:"A numeric readout with a background"})),ME.register("NumberDisplay",Jx);const Zx=(e,t,i)=>{let n=t;return null!==e&&(n=i(e)),n},$x=["startDrag","endDrag","leftStart","leftEnd","rightStart","rightEnd"],eC=["touchAreaXDilation","touchAreaYDilation","mouseAreaXDilation","mouseAreaYDilation"],tC=new Cx(new zt(0,1));class iC extends(Xh(Lh)){constructor(e,t,i,n){!function(e){!e.startCallback&&e.endCallback;let t=!1,i=!1;e.arrowButtonOptions&&(t=nC(e.arrowButtonOptions));e.sliderOptions&&(i=nC(e.sliderOptions))}(n||{});const r=$e()({numberDisplayOptions:{},sliderOptions:{},arrowButtonOptions:{},titleNodeOptions:{},startCallback:_.noop,endCallback:_.noop,delta:1,disabledOpacity:.5,layoutFunction:iC.createLayoutFunction1(),includeArrowButtons:!0,soundGenerator:tC,valueChangeSoundGeneratorOptions:{},tandem:Oi.REQUIRED,tandemNameSuffix:"Control",phetioType:iC.NumberControlIO,phetioEnabledPropertyInstrumented:!0,visiblePropertyOptions:{phetioFeatured:!0}},n);super();const s=r.arrowButtonOptions&&r.arrowButtonOptions.hasOwnProperty("scale"),o=()=>l.enabledRangeProperty?l.enabledRangeProperty.value:i,a=e=>{const t=Bt.roundToInterval(e,l.delta);return o().constrainValue(t)};if(r.soundGenerator===tC){let e=r.valueChangeSoundGeneratorOptions;_.isEmpty(r.valueChangeSoundGeneratorOptions)&&(e={interThresholdDelta:r.delta,constrainValue:a}),r.soundGenerator=new Cx(i,e)}else null===r.soundGenerator&&(r.soundGenerator=Cx.NO_SOUND);const l=tt({arrowButtonOptions:{touchAreaXDilation:3.5,touchAreaYDilation:7,mouseAreaXDilation:0,mouseAreaYDilation:0,enabledEpsilon:0,leftStart:r.startCallback,leftEnd:r.endCallback,rightStart:r.startCallback,rightEnd:r.endCallback,enabledPropertyOptions:{phetioReadOnly:!0,phetioFeatured:!1}},sliderOptions:{startDrag:r.startCallback,endDrag:r.endCallback,majorTickLength:20,minorTickStroke:"rgba( 0, 0, 0, 0.3 )",majorTicks:[],minorTickSpacing:0,constrainValue:a,soundGenerator:r.soundGenerator,tandem:r.tandem.createTandem(iC.SLIDER_TANDEM_NAME)},numberDisplayOptions:{textOptions:{font:new Jv(12),stringPropertyOptions:{phetioFeatured:!0}},tandem:r.tandem.createTandem("numberDisplay"),visiblePropertyOptions:{phetioFeatured:!0}},titleNodeOptions:{font:new Jv(12),maxWidth:null,fill:"black",tandem:r.tandem.createTandem("titleText")}},r);l.enabledRangeProperty&&(l.sliderOptions.enabledRangeProperty=l.enabledRangeProperty);const h=_.pick(l.arrowButtonOptions,eC);l.arrowButtonOptions=_.omit(l.arrowButtonOptions,eC),l.arrowButtonOptions.tagName=null,this.groupFocusHighlight=l.includeArrowButtons,l.sliderOptions.trackNode||(l.sliderOptions=tt({trackSize:new sl(180,3)},l.sliderOptions)),l.sliderOptions.thumbNode||(l.sliderOptions=tt({thumbSize:new sl(17,34),thumbTouchAreaXDilation:6},l.sliderOptions)),l.sliderOptions=tt({shiftKeyboardStep:l.delta,phetioType:zx.SliderIO},l.sliderOptions),l.sliderOptions.thumbFill&&!l.sliderOptions.thumbFillHighlighted&&(this.thumbFillProperty=new su(l.sliderOptions.thumbFill),l.sliderOptions.thumbFillHighlighted=new ir([this.thumbFillProperty],e=>e.brighterColor()));const c=new qc(e,l.titleNodeOptions),u=new Jx(t,i,l.numberDisplayOptions);this.slider=new jx(t,i,l.sliderOptions);let d=null,p=null,m=null;if(l.includeArrowButtons){if(d=new ZP("left",()=>{const e=t.get();let i=t.get()-l.delta;i=Bt.roundToInterval(i,l.delta),i=Math.max(i,o().min),t.set(i),l.soundGenerator.playSoundForValueChange(i,e),this.slider.voicingOnEndResponse(e)},tt({soundPlayer:MV,startCallback:l.arrowButtonOptions.leftStart,endCallback:l.arrowButtonOptions.leftEnd,tandem:l.tandem.createTandem("decrementButton")},l.arrowButtonOptions)),p=new ZP("right",()=>{const e=t.get();let i=t.get()+l.delta;i=Bt.roundToInterval(i,l.delta),i=Math.min(i,o().max),t.set(i),l.soundGenerator.playSoundForValueChange(i,e),this.slider.voicingOnEndResponse(e)},tt({soundPlayer:MV,startCallback:l.arrowButtonOptions.rightStart,endCallback:l.arrowButtonOptions.rightEnd,tandem:l.tandem.createTandem("incrementButton")},l.arrowButtonOptions)),!s){d.setScaleMagnitude(1);const e=u.localBounds.height/d.height;d.setScaleMagnitude(e),p.setScaleMagnitude(e)}d.touchArea=d.localBounds.dilatedXY(h.touchAreaXDilation,h.touchAreaYDilation).shiftedX(-h.touchAreaXDilation),p.touchArea=p.localBounds.dilatedXY(h.touchAreaXDilation,h.touchAreaYDilation).shiftedX(h.touchAreaXDilation),d.mouseArea=d.localBounds.dilatedXY(h.mouseAreaXDilation,h.mouseAreaYDilation).shiftedX(-h.mouseAreaXDilation),p.mouseArea=p.localBounds.dilatedXY(h.mouseAreaXDilation,h.mouseAreaYDilation).shiftedX(h.mouseAreaXDilation),m=()=>{const e=t.value;d.enabled=e-l.arrowButtonOptions.enabledEpsilon>o().min&&!this.slider.isFocused(),p.enabled=e+l.arrowButtonOptions.enabledEpsilon{d.enabled=!1,p.enabled=!1},blur:()=>m()})}const g=l.sliderOptions.majorTicks;for(let y=0;y0)for(let y=i.min;y<=i.max;)_.find(g,e=>e.value===y)||this.slider.addMinorTick(y),y+=l.sliderOptions.minorTickSpacing;const f=l.layoutFunction(c,u,this.slider,d,p);if(this.widthSizable=Wh(f),jh(f)){const e=e=>{this.localMinimumWidth=e};f.minimumWidthProperty.link(e);const t=e=>{f.preferredWidth=e};this.localPreferredWidthProperty.link(t),this.disposeEmitter.addListener(()=>{f.minimumWidthProperty.unlink(e),this.localPreferredWidthProperty.unlink(t)})}l.children=[f],this.mutate(l),this.numberDisplay=u,this.disposeNumberControl=()=>{c.dispose(),u.dispose(),this.slider.dispose(),this.thumbFillProperty&&this.thumbFillProperty.dispose(),d&&d.dispose(),p&&p.dispose(),m&&t.unlink(m),m&&l.enabledRangeProperty&&l.enabledRangeProperty.unlink(m)}}redrawNumberDisplay(){this.numberDisplay.recomputeText()}dispose(){this.disposeNumberControl(),super.dispose()}setNumberFormatter(e){this.numberDisplay.setNumberFormatter(e)}static withMinMaxTicks(e,t,i,n){const r=$e()({tickLabelFont:new Jv(12)},n);return r.sliderOptions=tt({majorTicks:[{value:i.min,label:new qc(i.min,{font:r.tickLabelFont})},{value:i.max,label:new qc(i.max,{font:r.tickLabelFont})}]},r.sliderOptions),new iC(e,t,i,r)}static createLayoutFunction1(e){const t=$e()({align:"center",titleXSpacing:5,arrowButtonsXSpacing:15,ySpacing:5},e);return(e,i,n,r,s)=>(n.mutateLayoutOptions({grow:1}),new cf({align:t.align,spacing:t.ySpacing,children:[new hf({spacing:t.titleXSpacing,children:[e,i]}),new hf({layoutOptions:{stretch:!0},spacing:t.arrowButtonsXSpacing,children:[r,n,s]})]}))}static createLayoutFunction2(e){const t=$e()({align:"center",xSpacing:5,ySpacing:5},e);return(e,i,n,r,s)=>(n.mutateLayoutOptions({stretch:!0}),new cf({align:t.align,spacing:t.ySpacing,children:[new hf({spacing:t.xSpacing,children:[e,r,i,s]}),n]}))}static createLayoutFunction3(e){const t=$e()({alignTitle:"center",alignNumber:"center",titleLeftIndent:0,xSpacing:5,ySpacing:5},e);return(e,i,n,r,s)=>{n.mutateLayoutOptions({stretch:!0});const o=new cf({spacing:t.ySpacing,align:t.alignTitle,children:[new rf(e,{leftMargin:t.titleLeftIndent}),new cf({layoutOptions:{stretch:!0},spacing:t.ySpacing,align:t.alignNumber,children:[new hf({spacing:t.xSpacing,children:[r,i,s]}),n]})]});return e.boundsProperty.lazyLink(()=>{o.updateLayout()}),o}}static createLayoutFunction4(e){const t=$e()({sliderPadding:0,verticalSpacing:5,arrowButtonSpacing:5,hasReadoutProperty:null,layoutInvisibleButtons:!1,createBottomContent:null},e);return(e,i,n,r,s)=>{n.mutateLayoutOptions({grow:1});const o=!!r,a=new hf({spacing:t.arrowButtonSpacing,children:o?[r,n,s]:[n],excludeInvisibleChildrenFromBounds:!t.layoutInvisibleButtons}),l=t.createBottomContent?t.createBottomContent(a):a;return l.mutateLayoutOptions({stretch:!0,xMargin:t.sliderPadding}),new cf({spacing:t.verticalSpacing,children:[new hf({spacing:t.sliderPadding,children:[e,new Lh({children:[i],visibleProperty:t.hasReadoutProperty||null,excludeInvisibleChildrenFromBounds:!0})],layoutOptions:{stretch:!0}}),l]})}}}function nC(e){const t=Object.keys(e);return $x.filter(e=>_.includes(t,e)).length>0}_defineProperty(iC,"NumberControlIO",new yt("NumberControlIO",{valueType:iC,documentation:"A number control with a title, slider and +/- buttons",supertype:Lh.NodeIO})),_defineProperty(iC,"SLIDER_TANDEM_NAME","slider"),ME.register("NumberControl",iC);const rC={DEFAULT_BUTTON_RADIUS:20.8,PLAY_CONTROL_BUTTON_RADIUS:28};ME.register("SceneryPhetConstants",rC);const sC=rC;class oC extends bs{constructor(e){super(),this.rect(0,0,e,e)}}ME.register("StopIconShape",oC);class aC extends MT{constructor(e,t,i){const n=$e()({radius:i&&i.content?null:30,lineWidth:.5,stroke:null,touchAreaDilation:0,mouseAreaDilation:0,touchAreaXShift:0,touchAreaYShift:0,mouseAreaXShift:0,mouseAreaYShift:0,cursor:"pointer",xMargin:5,yMargin:5,buttonAppearanceStrategy:aC.ThreeDAppearanceStrategy},i);n.content,n.radius&&(n.minUnstrokedWidth=2*n.radius,n.minUnstrokedHeight=2*n.radius),n.buttonAppearanceStrategyOptions||(n.buttonAppearanceStrategyOptions={stroke:n.stroke,lineWidth:n.lineWidth});const r=n.radius||Math.max(n.content.width+2*n.xMargin,n.content.height+2*n.yMargin)/2;if(n.content&&n.radius){const e=n.content,t=Math.min(2*(n.radius-n.xMargin)/e.width,2*(n.radius-n.yMargin)/e.height);n.content=new Lh({children:[e],scale:t})}const s=new Gc(r);super(e,s,t,n);const o=s.localBounds.width/2;this.touchArea=bs.circle(n.touchAreaXShift,n.touchAreaYShift,o+n.touchAreaDilation),this.mouseArea=bs.circle(n.mouseAreaXShift,n.mouseAreaYShift,o+n.mouseAreaDilation),this.focusHighlight=bs.circle(0,0,o+5)}}aC.ThreeDAppearanceStrategy=class{constructor(e,t,i,n){const r=n&&n.stroke?n.stroke:new su(i,{luminanceFactor:-.4}),s=n&&void 0!==n.lineWidth?n.lineWidth:.3,o=$e()({stroke:r,lineWidth:s,overStroke:r,overLineWidth:s,overButtonOpacity:1,selectedStroke:r,selectedLineWidth:s,selectedButtonOpacity:1,deselectedStroke:r,deselectedLineWidth:s,deselectedButtonOpacity:1,overFill:i},n),a=new su(i,{luminanceFactor:.8}),l=new su(i,{luminanceFactor:.7}),h=new su(i,{luminanceFactor:.3}),c=new su(i,{luminanceFactor:-.1}),u=new su(i,{luminanceFactor:-.2}),d=new su(i,{luminanceFactor:-.4}),p=new su(i,{luminanceFactor:-.5}),m=new ir([i],e=>e.withAlpha(0)),g=e.width/2,f=g-2.5,y=g+2.5,A=new Yl(2.5,2.5,f,2.5,2.5,y).addColorStop(0,i).addColorStop(1,l),E=new Yl(-2.5,-2.5,f,-2.5,-2.5,y).addColorStop(0,m).addColorStop(1,p),v=new Yl(2.5,2.5,f,2.5,2.5,y).addColorStop(0,h).addColorStop(1,a),S=new Yl(-2.5,-2.5,f,-2.5,-2.5,y).addColorStop(0,m).addColorStop(1,p),b=new Yl(-2.5,-2.5,0,0,0,y).addColorStop(0,c).addColorStop(.6,u).addColorStop(.8,i).addColorStop(1,a),T=new Gc(g,{stroke:o.stroke?o.stroke:d,lineWidth:o.lineWidth,pickable:!1});function w(t){switch(t){case VT.IDLE:e.fill=A,e.stroke=o.deselectedStroke,e.lineWidth=o.deselectedLineWidth,e.opacity=o.deselectedButtonOpacity,T.fill=E,T.opacity=o.deselectedButtonOpacity;break;case VT.OVER:e.fill=v,e.stroke=o.overStroke,e.lineWidth=o.overLineWidth,e.opacity=o.overButtonOpacity,T.fill=S,T.opacity=o.overButtonOpacity;break;case VT.PRESSED:e.fill=b,e.stroke=o.selectedStroke,e.lineWidth=o.selectedLineWidth,e.opacity=o.selectedButtonOpacity,T.fill=S,T.opacity=o.selectedButtonOpacity;break;default:throw new Error("unsupported interactionState: "+t)}}e.addChild(T),this.maxLineWidth=T.hasStroke()&&o&&"number"==typeof o.lineWidth?o.lineWidth:0,e.cachedPaints=[A,v,b],T.cachedPaints=[E,S],t.link(w),this.disposeThreeDAppearanceStrategy=()=>{t.hasListener(w)&&t.unlink(w),a.dispose(),l.dispose(),h.dispose(),c.dispose(),u.dispose(),d.dispose(),p.dispose(),m.dispose()}}dispose(){this.disposeThreeDAppearanceStrategy()}},Zv.register("RoundButton",aC);class lC extends aC{constructor(e,t,i,n){const r=$e()({valueOffSoundPlayer:XT,valueOnSoundPlayer:rw,tandem:Oi.REQUIRED,phetioFeatured:!0,tandemNameSuffix:"Button"},n),s=new ow(t,i,e,r),o=new sw(s);super(s,o,r),this.addLinkedElement(e,{tandemName:"property"});const a=()=>{e.value===t?r.valueOffSoundPlayer.play():e.value===i&&r.valueOnSoundPlayer.play()};this.buttonModel.produceSoundEmitter.addListener(a),this.disposeRoundToggleButton=()=>{this.buttonModel.produceSoundEmitter.removeListener(a),s.dispose()}}dispose(){this.disposeRoundToggleButton(),super.dispose()}}Zv.register("RoundToggleButton",lC);class hC extends lC{constructor(e,t,i,n){const r=$e()({content:null,tandem:Oi.REQUIRED,tandemNameSuffix:"Button"},n),s=new BT(e,t,i,{tandem:r.tandem.createTandem("toggleNode")});r.content=s,super(e,!1,!0,r),this.disposeBooleanRoundToggleButton=function(){s.dispose()}}dispose(){this.disposeBooleanRoundToggleButton(),super.dispose()}}Zv.register("BooleanRoundToggleButton",hC);const cC=hC,uC="data:audio/mpeg;base64,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",dC=GS(jS,uC),pC=IS.createLock(uC),mC=new zS;let gC=!1;const fC=()=>{gC||(pC(),gC=!0)},yC=jS.decodeAudioData(dC.buffer,e=>{null===mC.audioBufferProperty.value&&(mC.audioBufferProperty.set(e),fC())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),mC.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),fC()});yC&&yC.then(e=>{null===mC.audioBufferProperty.value&&(mC.audioBufferProperty.set(e),fC())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),fC()});const AC=new Jb(mC,{soundClipOptions:{initialOutputLevel:.7},soundManagerOptions:{categoryName:"user-interface"}});FS.register("pauseSoundPlayer",AC);const EC=AC,vC="data:audio/mpeg;base64,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",SC=GS(jS,vC),bC=IS.createLock(vC),TC=new zS;let wC=!1;const VC=()=>{wC||(bC(),wC=!0)},PC=jS.decodeAudioData(SC.buffer,e=>{null===TC.audioBufferProperty.value&&(TC.audioBufferProperty.set(e),VC())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),TC.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),VC()});PC&&PC.then(e=>{null===TC.audioBufferProperty.value&&(TC.audioBufferProperty.set(e),VC())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),VC()});const xC=new Jb(TC,{soundClipOptions:{initialOutputLevel:.7},soundManagerOptions:{categoryName:"user-interface"}});FS.register("playSoundPlayer",xC);const CC=xC;class _C extends bs{constructor(e,t){super(),this.moveTo(0,0),this.lineTo(e,t/2),this.lineTo(0,t),this.close()}}ME.register("PlayIconShape",_C);class RC extends cC{constructor(e,t,i){const n=$e()({radius:sC.PLAY_CONTROL_BUTTON_RADIUS,scaleFactorWhenNotPlaying:1,includeGlobalHotkey:!1,startPlayingLabel:OS.a11y.playControlButton.playStringProperty,endPlayingLabel:null,valueOffSoundPlayer:EC,valueOnSoundPlayer:CC,xMargin:0,yMargin:0},i),r=.8*n.radius,s=n.radius,o=new Cc(new _C(r,s),{fill:"black",centerX:.05*n.radius,centerY:0}),a=new Gc(n.radius,{children:[o]});t.centerX=0,t.centerY=0;const l=new Gc(n.radius,{children:[t]});super(e,l,a,n);const h=(e,t)=>{this.innerContent=e?n.endPlayingLabel:n.startPlayingLabel;const i=null===t?1:1/n.scaleFactorWhenNotPlaying;this.scale(e?i:n.scaleFactorWhenNotPlaying)};e.link(h);const c=["alt+k"];let u=null;n.includeGlobalHotkey&&phet.chipper.queryParameters.supportsInteractiveDescription&&(u=new $m({keys:c,global:!0,listenerFireTrigger:"up",callback:()=>{e.set(!e.get());const t=e.get()?n.valueOnSoundPlayer:n.valueOffSoundPlayer;t&&t.play()}}),this.addInputListener(u)),this.disposePlayStopButton=()=>{e.hasListener(h)&&e.unlink(h),u&&(this.removeInputListener(u),u.dispose())}}dispose(){this.disposePlayStopButton(),super.dispose()}}ME.register("PlayControlButton",RC);ME.register("PlayStopButton",class extends RC{constructor(e,t){const i=$e()({radius:sC.PLAY_CONTROL_BUTTON_RADIUS,endPlayingLabel:OS.a11y.playControlButton.stopStringProperty},t),n=.75*i.radius;super(e,new Cc(new oC(n),{fill:"black"}),i)}});ME.register("ShadedRectangle",class extends Lh{constructor(e,t){super();const i=$e()({baseColor:new Eo(80,130,230),lightFactor:.5,lighterFactor:.1,darkFactor:.5,darkerFactor:.1,cornerRadius:10,lightSource:"leftTop",lightOffset:.525,darkOffset:.375},t),n=i.lightSource.includes("left"),r=i.lightSource.includes("Top"),s=i.cornerRadius;this.lighterPaintProperty=new su(i.baseColor,{luminanceFactor:i.lightFactor+i.lighterFactor}),this.lightPaintProperty=new su(i.baseColor,{luminanceFactor:i.lightFactor}),this.darkPaintProperty=new su(i.baseColor,{luminanceFactor:-i.darkFactor}),this.darkerPaintProperty=new su(i.baseColor,{luminanceFactor:-i.darkFactor-i.darkerFactor});const o=r?this.lighterPaintProperty:this.darkerPaintProperty,a=n?this.lightPaintProperty:this.darkPaintProperty,l=n?this.darkPaintProperty:this.lightPaintProperty,h=r?this.darkerPaintProperty:this.lighterPaintProperty,c=i.lightOffset*s,u=i.darkOffset*s,d=r?c:u,p=n?c:u,m=n?u:c,g=r?u:c,f=Wc.roundedBounds(e,s,s,{pickable:!1}),y=Wc.roundedBounds(e,s,s,{pickable:!1});f.fill=new Hl(f.left,0,f.right,0).addColorStop(0,a).addColorStop(p/y.width,i.baseColor).addColorStop(1-m/y.width,i.baseColor).addColorStop(1,l),y.fill=new Hl(0,y.top,0,y.bottom).addColorStop(0,o).addColorStop(d/y.height,new ir([o],e=>e.withAlpha(0))).addColorStop(1-g/y.height,new ir([h],e=>e.withAlpha(0))).addColorStop(1,h);const A=(new bs).moveTo(0,0).arc(0,0,s,-Math.PI/2,0,!1).close(),E={leftTop:-Math.PI/2,rightTop:0,rightBottom:Math.PI/2,leftBottom:Math.PI}[i.lightSource],v=e.eroded(s),S=new Cc(A,{x:n?v.minX:v.maxX,y:r?v.minY:v.maxY,rotation:E,fill:new Yl(0,0,0,0,0,s).addColorStop(0,i.baseColor).addColorStop(1-c/s,i.baseColor).addColorStop(1,this.lighterPaintProperty),pickable:!1}),b=new Cc(A,{x:n?v.maxX:v.minX,y:r?v.maxY:v.minY,rotation:E+Math.PI,fill:new Yl(0,0,0,0,0,s).addColorStop(0,i.baseColor).addColorStop(1-u/s,i.baseColor).addColorStop(1,this.darkerPaintProperty),pickable:!1}),T=Wc.roundedBounds(e,s,s,{stroke:new ir([l],e=>e.withAlpha(.4))});this.addChild(f),this.addChild(y),this.addChild(S),this.addChild(b),this.addChild(T),this.mutate(i)}dispose(){this.lighterPaintProperty.dispose(),this.lightPaintProperty.dispose(),this.darkPaintProperty.dispose(),this.darkerPaintProperty.dispose(),super.dispose()}});class NC extends hr{constructor(e){super([e.focusedProperty,e.overProperty,e.looksOverProperty,e.looksPressedProperty,e.valueProperty],(t,i,n,r,s)=>{const o=s===e.valueDown;return!n||r||o?(i||t)&&(r||o)||o?VT.PRESSED:VT.IDLE:VT.OVER},{valueType:VT})}}Zv.register("StickyToggleButtonInteractionStateProperty",NC);class MC extends xT{constructor(e,t,i,n){const r=$e()({tandem:Oi.REQUIRED},n);super(r),this.valueUp=e,this.valueDown=t,this.valueProperty=i,this.toggledEmitter=new Yn({tandem:r.tandem.createTandem("toggledEmitter"),phetioDocumentation:"Emits when the button is toggled",phetioEventType:wi.USER}),this.toggledEmitter.addListener(()=>{this.valueProperty.value=this.valueProperty.value===this.valueUp?this.valueDown:this.valueUp}),this.pressedWhileDownProperty=new Nn(!1);const s=n=>{const r=this.overProperty.get()||this.focusedProperty.get();this.enabledProperty.get()&&r&&!this.interrupted&&(n&&i.value===e&&(this.toggle(),this.pressedWhileDownProperty.set(!1)),n||i.value!==t||(this.pressedWhileDownProperty.get()?this.toggle():this.pressedWhileDownProperty.set(!0))),n||r||this.pressedWhileDownProperty.set(!0)};this.downProperty.link(s);const o=e=>{this.downProperty.set(e===t)};i.link(o);const a=e=>{e&&this.pressedWhileDownProperty.set(!0)};this.enabledProperty.link(a),this.disposeToggleButtonModel=()=>{this.downProperty.unlink(s),this.enabledProperty.unlink(a),i.unlink(o),this.toggledEmitter.dispose()}}dispose(){this.disposeToggleButtonModel(),super.dispose()}toggle(){this.toggledEmitter.emit(),this.produceSoundEmitter.emit()}}Zv.register("StickyToggleButtonModel",MC);class LC extends IT{constructor(e,t,i,n){const r=new MC(t,i,e,n),s=new NC(r);super(r,s,n),this.disposeRectangularStickyToggleButton=()=>{r.dispose()}}dispose(){this.disposeRectangularStickyToggleButton(),super.dispose()}}Zv.register("RectangularStickyToggleButton",LC);Zv.register("BooleanRectangularStickyToggleButton",class extends LC{constructor(e,t){super(e,!1,!0,t)}});class IC extends aC{constructor(e,t,i,n){const r=$e()({soundPlayer:wT,tandem:Oi.REQUIRED,tandemNameSuffix:"Button"},n),s=new MC(t,i,e,r),o=new NC(s);super(s,o,r);const a=()=>r.soundPlayer.play();s.produceSoundEmitter.addListener(a);const l=t=>this.setPDOMAttribute("aria-pressed",e.value===i);e.link(l),this.disposeRoundStickyToggleButton=()=>{e.unlink(l),s.produceSoundEmitter.removeListener(a),s.dispose()}}dispose(){this.disposeRoundStickyToggleButton(),super.dispose()}}Zv.register("RoundStickyToggleButton",IC);Zv.register("BooleanRoundStickyToggleButton",class extends IC{constructor(e,t){super(e,!1,!0,t)}});const DC={up:0,down:Math.PI,left:-Math.PI/2,right:Math.PI/2};class kC extends kT{constructor(e){const t=$e()({arrowDirection:"up",arrowSize:new sl(20,7),arrowPathOptions:{stroke:"black",lineWidth:3,lineCap:"round"},baseColor:"rgba( 200, 200, 200, 0.5 )",buttonAppearanceStrategy:MT.FlatAppearanceStrategy,cornerRadius:4},e);let i=null;void 0===t.stroke&&(i=new su(t.baseColor,{luminanceFactor:-.8}),t.stroke=i);let n=(new bs).moveTo(0,0).lineTo(t.arrowSize.width/2,-t.arrowSize.height).lineTo(t.arrowSize.width,0);n=n.transformed(jr.rotation2(DC[t.arrowDirection])),t.content=new Cc(n,t.arrowPathOptions);const r=t.arrowDirection,s=t.cornerRadius;if(t.leftTopCornerRadius="up"===r||"left"===r?s:0,t.rightTopCornerRadius="up"===r||"right"===r?s:0,t.leftBottomCornerRadius="down"===r||"left"===r?s:0,t.rightBottomCornerRadius="down"===r||"right"===r?s:0,"up"===r||"down"===r){const e=t.mouseAreaYDilation/2||0,i=t.touchAreaYDilation/2||0;t.mouseAreaYDilation=e,t.touchAreaYDilation=i,t.mouseAreaYShift="up"===r?-e:e,t.touchAreaYShift="up"===r?-i:i}else{const e=t.mouseAreaXDilation/2||0,i=t.touchAreaXDilation/2||0;t.mouseAreaXDilation=e,t.touchAreaXDilation=i,t.mouseAreaXShift="left"===r?-e:e,t.touchAreaXShift="left"===r?-i:i}super(t),this.customStrokeProperty=i}dispose(){this.customStrokeProperty&&this.customStrokeProperty.dispose(),super.dispose()}}Zv.register("CarouselButton",kC);class qC extends ar{constructor(e){super([e.looksOverProperty,e.looksPressedProperty],(e,t)=>e&&!t?VT.OVER:t?VT.PRESSED:VT.IDLE,{valueType:VT})}}Zv.register("MomentaryButtonInteractionStateProperty",qC);class BC extends xT{constructor(e,t,i,n){super($e()({tandem:Oi.REQUIRED,phetioReadOnly:Zi.DEFAULT_OPTIONS.phetioReadOnly},n));const r=n=>{n?this.enabledProperty.get()&&i.set(t):i.set(e)};this.downProperty.lazyLink(r);const s=e=>{this.downProperty.set(e===t)};i.link(s),this.disposeMomentaryButtonModel=()=>{this.downProperty.unlink(r),i.unlink(s)}}dispose(){this.disposeMomentaryButtonModel(),super.dispose()}}Zv.register("MomentaryButtonModel",BC);class OC extends jt{}_defineProperty(OC,"SELECTED",new(Ie=OC)),_defineProperty(OC,"DESELECTED",new Ie),_defineProperty(OC,"OVER",new Ie),_defineProperty(OC,"PRESSED",new Ie),_defineProperty(OC,"enumeration",new Jt(Ie)),Zv.register("RadioButtonInteractionState",OC);class HC extends hr{constructor(e,t,i){super([e.focusedProperty,e.overProperty,e.looksOverProperty,e.looksPressedProperty,t],(e,t,n,r,s)=>{const o=s===i;return!n||r||o?(t||e)&&r?OC.PRESSED:o?OC.SELECTED:OC.DESELECTED:OC.OVER},{valueType:OC})}}Zv.register("RadioButtonInteractionStateProperty",HC);Zv.register("RectangularMomentaryButton",class extends IT{constructor(e,t,i,n){const r=$e()({tandem:Oi.REQUIRED,tandemNameSuffix:"Button"},n),s=new BC(t,i,e,r);super(s,new qC(s),r),this.disposeRectangularMomentaryButton=()=>{s.dispose()}}dispose(){this.disposeRectangularMomentaryButton(),super.dispose()}});class YC extends IT{constructor(e,t,i){const n=$e()({soundPlayer:null,baseColor:_T.LIGHT_BLUE,buttonAppearanceStrategy:YC.FlatAppearanceStrategy,buttonAppearanceStrategyOptions:{overButtonOpacity:.8,overStroke:null,selectedStroke:Eo.BLACK,selectedLineWidth:1.5,selectedButtonOpacity:1,deselectedStroke:new Eo(50,50,50),deselectedLineWidth:1,deselectedButtonOpacity:.6},contentAppearanceStrategy:YC.ContentAppearanceStrategy,contentAppearanceStrategyOptions:{overContentOpacity:.8,selectedContentOpacity:1,deselectedContentOpacity:.6},tagName:"input",inputType:"radio",labelTagName:"label",containerTagName:"li",appendDescription:!0,appendLabel:!0,tandem:Oi.REQUIRED,tandemNameSuffix:"Button",phetioReadOnly:Zi.DEFAULT_OPTIONS.phetioReadOnly},i),r=new xT({enabledPropertyOptions:n.enabledPropertyOptions,tandem:n.tandem,phetioEnabledPropertyInstrumented:n.phetioEnabledPropertyInstrumented}),s=new HC(r,e,t);super(r,s,n),this.interactionStateProperty=s,e.value===t&&this.setPDOMAttribute("checked","checked");const o=e=>{this.pdomChecked=e===t};e.link(o),this.property=e,this.value=t,this.firedEmitter=new Yn({tandem:n.tandem.createTandem("firedEmitter"),phetioDocumentation:"Emits when the radio button is pressed",phetioReadOnly:n.phetioReadOnly,phetioEventType:wi.USER}),this.firedEmitter.addListener(()=>e.set(t)),r.downProperty.link(e=>{e||!r.overProperty.get()&&!r.focusedProperty.get()||r.interrupted||(this.fire(),this.voicingSpeakFullResponse({hintResponse:null}))});const a=n.soundPlayer||wT,l=()=>{a.play()};r.produceSoundEmitter.addListener(l),this.disposeRectangularRadioButton=()=>{e.unlink(o),this.firedEmitter.dispose(),r.produceSoundEmitter.removeListener(l),r.dispose(),this.interactionStateProperty.dispose()}}dispose(){this.disposeRectangularRadioButton(),super.dispose()}fire(){this.buttonModel.enabledProperty.get()&&(this.firedEmitter.emit(),this.buttonModel.produceSoundEmitter.emit())}}_defineProperty(YC,"TANDEM_NAME_SUFFIX","RadioButton"),_defineProperty(YC,"FlatAppearanceStrategy",class{constructor(e,t,i,n){const r=$e()({stroke:i,lineWidth:1,deselectedButtonOpacity:1,deselectedLineWidth:1,deselectedStroke:"gray",overButtonOpacity:.8,overFill:null,overLineWidth:0,overStroke:null,selectedButtonOpacity:1,selectedLineWidth:1,selectedStroke:"black"},n),s=new su(i,{luminanceFactor:-.4}),o=new su(r.overFill||i,{luminanceFactor:n&&n.overFill?0:.4}),a=new su(r.overStroke||r.deselectedStroke,{luminanceFactor:n&&n.overStroke?0:-.4});function l(t){switch(t){case OC.SELECTED:e.fill=i,e.stroke=r.selectedStroke,e.lineWidth=r.selectedLineWidth,e.opacity=r.selectedButtonOpacity;break;case OC.DESELECTED:e.fill=i,e.stroke=r.deselectedStroke,e.lineWidth=r.deselectedLineWidth,e.opacity=r.deselectedButtonOpacity;break;case OC.OVER:e.fill=o,e.stroke=a,e.lineWidth=Math.max(r.overLineWidth,r.deselectedLineWidth),e.opacity=r.overButtonOpacity;break;case OC.PRESSED:e.fill=s,e.stroke=r.deselectedStroke,e.lineWidth=r.deselectedLineWidth,e.opacity=r.selectedButtonOpacity;break;default:throw new Error("unsupported interactionState: "+t)}}this.maxLineWidth=Math.max(r.selectedLineWidth,r.deselectedLineWidth,r.overLineWidth),e.cachedPaints=[i,o,s,a,r.selectedStroke,r.deselectedStroke],t.link(l),this.disposeFlatAppearanceStrategy=()=>{t.hasListener(l)&&t.unlink(l),a.dispose(),o.dispose(),s.dispose()}}dispose(){this.disposeFlatAppearanceStrategy()}}),_defineProperty(YC,"ContentAppearanceStrategy",class{constructor(e,t,i){const n=$e()({deselectedContentOpacity:1,overContentOpacity:1,selectedContentOpacity:1},i);function r(t){if(null!==e)switch(t){case OC.DESELECTED:e.opacity=n.deselectedContentOpacity;break;case OC.OVER:e.opacity=n.overContentOpacity;break;case OC.SELECTED:e.opacity=n.selectedContentOpacity;break;case OC.PRESSED:e.opacity=n.deselectedContentOpacity;break;default:throw new Error("unsupported state: "+t)}}t.link(r),this.disposeContentAppearanceStrategy=()=>{t.hasListener(r)&&t.unlink(r)}}dispose(){this.disposeContentAppearanceStrategy()}}),Zv.register("RectangularRadioButton",YC);let GC=0;Zv.register("RectangularRadioButtonGroup",class extends Ug{constructor(e,t,i){const n=$e()({soundPlayers:null,labelAlign:"bottom",labelSpacing:0,a11yHighlightXDilation:0,a11yHighlightYDilation:0,touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,radioButtonOptions:{baseColor:_T.LIGHT_BLUE,cornerRadius:4,xMargin:5,yMargin:5,xAlign:"center",yAlign:"center",buttonAppearanceStrategyOptions:{selectedStroke:"black",selectedLineWidth:1.5,selectedButtonOpacity:1,deselectedStroke:new Eo(50,50,50),deselectedLineWidth:1,deselectedButtonOpacity:.6,overButtonOpacity:.8},contentAppearanceStrategy:YC.ContentAppearanceStrategy,contentAppearanceStrategyOptions:{overContentOpacity:.8,selectedContentOpacity:1,deselectedContentOpacity:.6}},spacing:10,orientation:"vertical",disabledOpacity:mo.DISABLED_OPACITY,tandem:Oi.REQUIRED,tandemNameSuffix:"ButtonGroup",visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0,phetioFeatured:!0,tagName:"ul",labelTagName:"h3",ariaRole:"radiogroup",groupFocusHighlight:!0},i);GC++;const r=new Map,s=Math.max(n.radioButtonOptions.buttonAppearanceStrategyOptions.selectedLineWidth,n.radioButtonOptions.buttonAppearanceStrategyOptions.deselectedLineWidth),o=qb(t,n.tandem),a=_.maxBy(o,e=>e.width).width,l=_.maxBy(o,e=>e.height).height,h=[],c=[],u=[],d=n.radioButtonOptions.xMargin,p=n.radioButtonOptions.yMargin;for(let y=0;ye.layoutNode.width).layoutNode.width,g=_.maxBy(c,e=>e.layoutNode.height).layoutNode.height;c.forEach(e=>{e.radioButton.touchArea=bs.rectangle(-n.touchAreaXDilation-s/2,-n.touchAreaYDilation-s/2,m+2*n.touchAreaXDilation,g+2*n.touchAreaYDilation),e.radioButton.mouseArea=bs.rectangle(-n.mouseAreaXDilation-s/2,-n.mouseAreaYDilation-s/2,m+2*n.mouseAreaXDilation,g+2*n.mouseAreaYDilation);const t=zd.getDilationCoefficient(e.layoutNode);e.radioButton.focusHighlight=bs.rectangle(-n.a11yHighlightXDilation-s/2-t,-n.a11yHighlightYDilation-s/2-t,m+2*(n.a11yHighlightXDilation+t),g+2*(n.a11yHighlightYDilation+t))}),super(n),this.radioButtonMap=r,this.addAriaLabelledbyAssociation({thisElementName:Tp.PRIMARY_SIBLING,otherNode:this,otherElementName:Tp.LABEL_SIBLING});const f={keydown:e=>e.pointer.reserveForKeyboardDrag()};this.addInputListener(f),this.addLinkedElement(e,{tandemName:"property"}),this.disposeRadioButtonGroup=()=>{this.removeInputListener(f),h.forEach(e=>e.dispose()),u.forEach(e=>e.dispose&&e.dispose()),o.forEach(e=>e.dispose())}}getButtonForValue(e){const t=this.radioButtonMap.get(e);return t}dispose(){this.radioButtonMap.clear(),this.disposeRadioButtonGroup(),super.dispose()}});Zv.register("RoundMomentaryButton",class extends aC{constructor(e,t,i,n){const r=$e()({tandem:Oi.REQUIRED,tandemNameSuffix:"Button"},n),s=new BC(t,i,e,r);super(s,new qC(s),r),this.disposeRoundMomentaryButton=()=>{s.dispose()}}dispose(){this.disposeRoundMomentaryButton(),super.dispose()}});Zv.register("RoundPushButton",class extends aC{constructor(e){const t=$e()({soundPlayer:wT,tandem:Oi.REQUIRED,tandemNameSuffix:"Button"},e),i=t.listener,n=_.omit(t,["listener"]),r=new CT(n);super(r,new PT(r),n),this.pushButtonModel=r,i&&this.addListener(i);const s=()=>{t.soundPlayer.play()};r.produceSoundEmitter.addListener(s),this.disposeRoundPushButton=()=>{r.produceSoundEmitter.removeListener(s),r.dispose()}}dispose(){super.dispose(),this.disposeRoundPushButton()}addListener(e){this.pushButtonModel.addListener(e)}removeListener(e){this.pushButtonModel.removeListener(e)}});const FC="data:audio/mpeg;base64,//swxAAAA8ADNZQRgDGHni23MIAC1bbaiNgdgM+wEHBiogUAbxA4MT+////gh//8Mf4YzNI0kYiNYjDZaLJCYAZZgbhKQTNx5Vp34WpSu/bhLvzLYwWSHokUhx0EBR4FA/Mp8sOz3gcWfL9YqH7kKIkzd9fLvSkB201St7337UyHKf7X9Pf//Ue9/6irjy/l3s5gqCo1lPVlVSBj//syxAOACFB7hZyUgDEUCu008ZpKfZq0pMq3UhCDwXYfD+n5X+IUp5YiEYMB0CgRCwfQF0AmAUjAlZVJuE4ZaTbKK0AIJCxUAwrWLf////l1oFP9Yo2m1QI89G8bsISUXc8TjPs5pDlVUzUq1VJLFYcIlvdQS0P1lohZFx5hFpVDCPaSKlRsdgIslDzfeqxt8iVd+v6aClA3ydRso//7MsQDgAhYV13sGEqhEJFpcZMJqE0gGS8ZU3ekWmMRbO4kqZnMgAHAFiPmBRdQFgRZHZrTNwZcRTYLKU4qxy3ieKohBwSNif5UwYc4W/ywiEYAtIWoggTByJ+YPcFxgdYE5MVlD41ZJSYBdPF8gQIZtZPy/cZWxBR5Bm7WwZdGkolTRTQXLpSOcoUvf3in/dyBZwzRXAF3ieJEAxD/+zLEBAAIkJlXlYaAARIWb3MegACpLHqwdgk0mfJ913UT0LiL5W+nIh+DsKATQJ4F0E4PF8c7FxaaaCZ80SpqZbfX7J/99fN0p/Onf+zSaVmKSAKAgKAgMAAAAAEBCVMt4sfsyRdHO3PTH0SBFi4jhEgNBinEXeeDSKeby9zBMKun3/pKZ6L//H/6T/p/82bkkAyj/5m7WOWuRFpI//swxAOACDgvi7zDADEQkW289AoWMABHxkZCUEwfjodDiYmpiWw9NWjIAhJEFkFSo4GnxwiDsrBoGn/g0DT64Kgq9BUFQWBo3WFDf4B//ljZRUwaFSyREkApYqDmkM8qYgtylZx9ZL7knEF4rFKLgqfa4GHahJbD5q+ZdeybNpd1LOzqJVWdmJgs9uNUoK61I9Pf1runDP5da2kA//syxAQACHita6eYTzEMFSdkzAigHGL2uEMDLL6xtFmUuujunUP9ODzjFKbt2J5yt77uOmiJWXQ6GAbIjvu17WVn/dDEccwhLJLW6dXU/dcsEAvP8BAST22Qg8WJEX2Cxxs84/BnOt15rGZwVs2FEtKWVPRHZitdbuySkumtHlb0M/U5QwcQRYSLI91T/epbUqPPogEGy4Ldq0ABj//7MsQEgAfcrTesFG1owIRiqMyYmD9U8MBcisSsURTFgBykNZkSUjL+oDB8VGCT310AYfb2ZlVRgEvbASNp8ptD8y7lYYlvxtFsCgAAYAQABAzjzrwIrmT2cuLIZOOOhHHQELC2rOtlix709VXnYiej4dx2rz2Vd/xL6QQAAHCikADAVHicCJrfesiRcXCNaoKuuneW+r1dXxFDvZf/+zLEEQBFcCEJoLHi8JuFVvDMGGz/vqeWI50KHuGnJHLWAAQIl4qgkpSn8oGq1rUCoSk3UAhEYtCgKWWwwIDo////4sLVTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",UC=GS(jS,FC),zC=IS.createLock(FC),WC=new zS;let jC=!1;const XC=()=>{jC||(zC(),jC=!0)},QC=jS.decodeAudioData(UC.buffer,e=>{null===WC.audioBufferProperty.value&&(WC.audioBufferProperty.set(e),XC())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),WC.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),XC()});QC&&QC.then(e=>{null===WC.audioBufferProperty.value&&(WC.audioBufferProperty.set(e),XC())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),XC()});const KC=new Jb(WC,{soundClipOptions:{initialOutputLevel:.2},soundManagerOptions:{categoryName:"user-interface"}});FS.register("switchToLeftSoundPlayer",KC);const JC=KC,ZC="data:audio/mpeg;base64,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",$C=GS(jS,ZC),e_=IS.createLock(ZC),t_=new zS;let i_=!1;const n_=()=>{i_||(e_(),i_=!0)},r_=jS.decodeAudioData($C.buffer,e=>{null===t_.audioBufferProperty.value&&(t_.audioBufferProperty.set(e),n_())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),t_.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),n_()});r_&&r_.then(e=>{null===t_.audioBufferProperty.value&&(t_.audioBufferProperty.set(e),n_())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),n_()});const s_=new Jb(t_,{soundClipOptions:{initialOutputLevel:.2},soundManagerOptions:{categoryName:"user-interface"}});FS.register("switchToRightSoundPlayer",s_);const o_=s_,a_=new sl(60,30);class l_ extends(Md(Lh)){constructor(e,t,i,n){const r=$e()({size:a_,toggleWhileDragging:null,dragThreshold:3,toggleThreshold:1,thumbFill:null,thumbStroke:"black",thumbTouchAreaXDilation:8,thumbTouchAreaYDilation:8,thumbMouseAreaXDilation:0,thumbMouseAreaYDilation:0,trackFillLeft:null,trackFillRight:null,trackStroke:"black",cursor:"pointer",disabledOpacity:mo.DISABLED_OPACITY,switchToLeftSoundPlayer:JC,switchToRightSoundPlayer:o_,tandem:Oi.REQUIRED,tandemNameSuffix:"Switch",phetioEventType:wi.USER,phetioReadOnly:Zi.DEFAULT_OPTIONS.phetioReadOnly,visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0,phetioFeatured:!0,tagName:"button",ariaRole:"switch",a11yName:null,leftValueContextResponse:null,rightValueContextResponse:null},n);let s=null;r.trackFillLeft&&r.trackFillRight||(s=new Hl(0,0,0,r.size.height).addColorStop(0,"rgb( 40, 40, 40 )").addColorStop(1,"rgb( 200, 200, 200 )")),r.trackFillLeft=r.trackFillLeft||s,r.trackFillRight=r.trackFillRight||s,r.thumbFill=r.thumbFill||new Hl(0,0,0,r.size.height).addColorStop(0,"white").addColorStop(1,"rgb( 200, 200, 200 )"),r.a11yName&&(r.voicingNameResponse=r.a11yName,r.innerContent=r.a11yName),super(),_defineProperty(this,"onInputEmitter",new Yn);const o=r.size.height/2,a=new Wc(0,0,r.size.width,r.size.height,o,o,{stroke:r.trackStroke,fill:r.trackFillLeft});this.addChild(a);const l=new Wc(0,0,r.size.width,r.size.height,o,o,{stroke:r.trackStroke,fill:r.trackFillRight});this.addChild(l);const h=new Wc(0,0,.5*r.size.width,r.size.height,o,o,{fill:r.thumbFill,stroke:r.thumbStroke});this.addChild(h),(r.thumbTouchAreaXDilation||r.thumbTouchAreaYDilation)&&(h.touchArea=bs.roundRect(-r.thumbTouchAreaXDilation,-r.thumbTouchAreaYDilation,.5*r.size.width+2*r.thumbTouchAreaXDilation,r.size.height+2*r.thumbTouchAreaYDilation,o,o)),(r.thumbMouseAreaXDilation||r.thumbMouseAreaYDilation)&&(h.mouseArea=bs.roundRect(-r.thumbMouseAreaXDilation,-r.thumbMouseAreaYDilation,.5*r.size.width+2*r.thumbMouseAreaXDilation,r.size.height+2*r.thumbMouseAreaYDilation,o,o));const c=e=>{const i=a.lineWidth/2;e===t?h.left=-i:h.right=r.size.width+i,l.rectWidth=h.right-i,this.setPDOMAttribute("aria-pressed",e!==t),this.setPDOMAttribute("aria-checked",e!==t)};e.link(c);const u=r.dragThreshold*r.dragThreshold,d=new Ht(0,0);let p=!1;const m=new Ru(t=>{e.value=t,this.onInputEmitter.emit()},{parameters:[{validValues:[t,i],phetioPrivate:!0}],tandem:r.tandem.createTandem("toggleAction"),phetioDocumentation:"Occurs when the switch is toggled via user interaction",phetioReadOnly:r.phetioReadOnly,phetioEventType:wi.USER});this.onInputEmitter.addListener(()=>{e.value===t?r.switchToLeftSoundPlayer.play():r.switchToRightSoundPlayer.play();const n=e.value===i?r.rightValueContextResponse:r.leftValueContextResponse;n&&(this.alertDescriptionUtterance(n),this.voicingSpeakResponse({contextResponse:rd.alertableToText(n)}))});const g=()=>h.centerX!e||"move"!==e.type&&"enter"!==e.type||_.includes(e.trail.nodes,h),start:()=>{d.setXY(0,0),p=!1},drag:(t,i)=>{d.add(i.modelDelta),p=p||d.magnitudeSquared>u;const n=i.getCurrentTarget().globalToLocalPoint(t.pointer.point),s=h.width/2,o=a.lineWidth/2;h.centerX=Bt.clamp(n.x,s-o,r.size.width-s+o),l.rectWidth=h.right-o;const c=n.x<(1-2*r.toggleThreshold)*s||n.x>(2*r.toggleThreshold-1)*s+r.size.width,f=g();(!0===r.toggleWhileDragging||c&&null===r.toggleWhileDragging)&&e.value!==f&&m.execute(f)},end:()=>{const n=e.value===t?i:t,r=p?g():n;e.value!==r&&m.execute(r),c(r)},canClick:!0});this.addInputListener(f),this.mutate(r),this.addLinkedElement(e,{tandemName:"property"}),this.switchToLeftSoundPlayer=r.switchToLeftSoundPlayer,this.switchToRightSoundPlayer=r.switchToRightSoundPlayer,this.disposeToggleSwitch=()=>{a.dispose(),l.dispose(),e.unlink(c),m.dispose(),f.dispose(),this.onInputEmitter.dispose()}}dispose(){this.disposeToggleSwitch(),super.dispose()}}Zv.register("ToggleSwitch",l_);const h_=(e,t)=>{e.opacity=t?1:mo.DISABLED_OPACITY};Zv.register("ABSwitch",class extends hf{constructor(e,t,i,n,r,s){const o=$e()({toggleSwitchOptions:{enabledPropertyOptions:{phetioFeatured:!1}},setEnabled:h_,centerOnSwitch:!1,cursor:"pointer",disabledOpacity:mo.DISABLED_OPACITY,spacing:8,tandem:Oi.REQUIRED,tandemNameSuffix:"Switch",visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0},s),a=new l_(e,t,n,tt({tandem:o.tandem.createTandem("toggleSwitch")},o.toggleSwitchOptions));let l=i,h=r;if(o.centerOnSwitch){const e=new lf;l=new rf(i,{group:e,xAlign:"right"}),h=new rf(r,{group:e,xAlign:"left"})}o.children=[l,a,h],super(o),_defineProperty(this,"onInputEmitter",new Yn);const c=e=>{o.setEnabled&&(o.setEnabled(i,e===t),o.setEnabled(r,e===n))};e.link(c);const u=new hm({release:()=>{const i=e.value;e.value=t,i!==t&&this.onInputEmitter.emit()},tandem:i.tandem.createTandem("pressListener")});i.addInputListener(u);const d=new hm({release:()=>{const t=e.value;e.value=n,t!==n&&this.onInputEmitter.emit()},tandem:r.tandem.createTandem("pressListener")});r.addInputListener(d),a.onInputEmitter.addListener(()=>this.onInputEmitter.emit()),this.onInputEmitter.addListener(()=>{e.value===n&&a.switchToRightSoundPlayer.play(),e.value===t&&a.switchToLeftSoundPlayer.play()}),this.disposeABSwitch=()=>{e.unlink(c),a.dispose(),this.onInputEmitter.dispose(),i.removeInputListener(u),r.removeInputListener(d),u.dispose(),d.dispose()}}dispose(){this.disposeABSwitch(),super.dispose()}});const c_="data:audio/mpeg;base64,//swxAAABSAbF7TAgDE5nqu/MHICAAAAcDYkDIEtmZ+0OAIDonAEAIOjgnenW/yhz/g+fh+CEocif//+c5RVQlRIdHdXcHffj/DYYCgBdaS6OzOU+xCNTd7EPI6nQ7mODNUkXlljx1AXgvbsgTi8z3+Z7a8aMfHP9uQFmXb1f/cmZM/9//sIhYP//sNqQJAgNJhWTyGAwFAoAATS//syxAeACW0Hgbi1EBESBuvjNGAAfDtZrw0MQaBPJj2MwQyJDLEhJZGoPjAvCMnP3dlJiAtJ8xr/PKk5hYV//3KDxif//6MYVcnt//+VFswo04EQAACAAC9YdezBqNoZHHQDlUSCuyZAkxazLI1qAeiR+JfccaBj1xti9B5JXrESzzBnSIgoXKxEzkQCos+pbPmxfwWXkwAAFm+93//7MsQDgAh4Z1G5gwABEY3y9x5iAuzlQAAAAAB2Wop4QsaAhgpWdRTKJsZcpp1XP57ykSikyYckLZ4Ty1TSs+HageepBZpVjXhgAMSIXXKmU65I0d/7dt7v7sNgMBwALVb09GkvHVk7fqBciIEitH44DchaeFCkbZVn3vi+3iz997uspO3MNCwv4nKHDdB/+gTro/8WA6oYAgMAeW//+zLEAwAIZH9bHaGAAQMgrTTxid9Ko07zWxQmamYZMUXJVhdXnyiL/VNVCqJJVOgImNStCjd9bH2ZjwZ/qQYUyG79QVWCpgKmMChqVd/4VIkkywFXa2uRpIAhLLU5m1VG6LimpHOKzIapjKZdQGJoCUbq7bMoVyt+j5W6t+WZ/r/KqPLMbv1Kxurf//8tBTuFZBUABV3GwiMDZuFj//swxAUCB4SDK0ywaICeAyN0wyROlYmGu6/rSDZ4E2kDhIFxZeHE1XJXBGqqqgLGqsZQ8m6ArsXr1fUvL1lChr+v/7fq//SC5HLZU2AEjwW0VUCig+dQNmTNmsUQ+tQt+EhX+skFfU3+n+u7/hV6TEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",u_=GS(jS,c_),d_=IS.createLock(c_),p_=new zS;let m_=!1;const g_=()=>{m_||(d_(),m_=!0)},f_=jS.decodeAudioData(u_.buffer,e=>{null===p_.audioBufferProperty.value&&(p_.audioBufferProperty.set(e),g_())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),p_.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),g_()});f_&&f_.then(e=>{null===p_.audioBufferProperty.value&&(p_.audioBufferProperty.set(e),g_())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),g_()});const y_=new Jb(p_,{soundClipOptions:{initialOutputLevel:.5},soundManagerOptions:{categoryName:"user-interface"}});FS.register("accordionBoxClosedSoundPlayer",y_);const A_=y_,E_="data:audio/mpeg;base64,//swxAAABsArNnTzABEnmTA3HoACAAIOAYznNNVnYDYAWAjClBSA3BwKB48VkSUAABBynBhYP5QMCc+T4JnwQcoH/6gff/Of/l4gAIJkjluslkskluuAAAkTmCV7K1w6pqz7VkryDnmQVVFCJY0HRFDgrNPT7QRsUHNV+KVNJRPtYt0/426/nj/Tv/sPVjjhtrzPbywAATqIdRsL//syxAOACHStW/2RACEMj6e2smAEqYAYhGmdJfGbQRJM6d5rUVhcXmZTOP9blIoBChWlL5hQoqBgpUdHqJ/1McBGpaGctDO3++hgIUqDV8QgqAAntdpnEwAD6ruLLBhIIEPkpGtP5xWnwVF2czcptv1Fgk0VRRGN9VJRU46pQrSVRX///853QKKZ0dz3cGnwCKBwcHYEIC0hEM5EMv/7MsQEAAiQXW+5hIAREZRslzKwACEMBgAAD9/MyuFW/l8vMAkS99TuX45zufo9JjH/gbUAtafz/MqCaqJP4IIAARGcawPpR8H3iefS7zg45qAIBFAAV1AtJXsx44xwqAZ24lKIsEc5bDMUuS6XnBEXQqAakxM3KX8vlruv28Pc++21X/p71t0ufET/PUOSB+v8FT3Fl3GALLrbdbr/+zLEA4AIWHtvuPWAEROSLXcegALRIIBAAAAIpME09Jpkm6HEpcYWjTFeQLCjn4NAjRM5fbfr4UULuXdO+HtlGqi0a/9EFQ66zxGCz/4GGlyg0HFHJZM7ZIAwEAAAErGUoi0JXI6UF+hiurPpjdxalUIbk1pRYWEUpY39w/BVt/p1i48ySduL+KRKEg8sPo/yoV/yLlIIpJIQSCOJ//swxAODxLAbO7xggDAAADSAAAAEweQCRznEiWHEqW49z3nuJf8Fbqzvw1+e6j3TPf/BakxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",v_=GS(jS,E_),S_=IS.createLock(E_),b_=new zS;let T_=!1;const w_=()=>{T_||(S_(),T_=!0)},V_=jS.decodeAudioData(v_.buffer,e=>{null===b_.audioBufferProperty.value&&(b_.audioBufferProperty.set(e),w_())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),b_.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),w_()});V_&&V_.then(e=>{null===b_.audioBufferProperty.value&&(b_.audioBufferProperty.set(e),w_())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),w_()});const P_=new Jb(b_,{soundClipOptions:{initialOutputLevel:.5},soundManagerOptions:{categoryName:"user-interface"}});FS.register("accordionBoxOpenedSoundPlayer",P_);const x_=P_;class C_ extends(nc(Lh)){constructor(e,t){const i=$e()({titleNode:null,expandedProperty:null,resize:!0,overrideTitleNodePickable:!0,allowContentToOverlapTitle:!1,cursor:"pointer",lineWidth:1,cornerRadius:10,stroke:"black",fill:"rgb( 238, 238, 238 )",minWidth:0,titleAlignX:"center",titleAlignY:"center",titleXMargin:10,titleYMargin:2,titleXSpacing:5,showTitleWhenExpanded:!0,useExpandedBoundsWhenCollapsed:!0,titleBarExpandCollapse:!0,buttonAlign:"left",buttonXMargin:4,buttonYMargin:2,contentAlign:"center",contentVerticalAlign:"center",contentXMargin:15,contentYMargin:8,contentXSpacing:5,contentYSpacing:8,expandedSoundPlayer:x_,collapsedSoundPlayer:A_,tagName:"div",headingTagName:"h3",accessibleNameBehavior:C_.ACCORDION_BOX_ACCESSIBLE_NAME_BEHAVIOR,voicingNameResponse:null,voicingObjectResponse:null,voicingContextResponse:null,voicingHintResponse:null,tandem:Oi.REQUIRED,tandemNameSuffix:"AccordionBox",phetioType:C_.AccordionBoxIO,phetioEventType:wi.USER,visiblePropertyOptions:{phetioFeatured:!0},titleBarOptions:{fill:null,stroke:null}},t);i.expandCollapseButtonOptions=tt({sideLength:16,cursor:i.cursor,valueOnSoundPlayer:i.expandedSoundPlayer,valueOffSoundPlayer:i.collapsedSoundPlayer,voicingNameResponse:i.voicingNameResponse,voicingObjectResponse:i.voicingObjectResponse,voicingContextResponse:i.voicingContextResponse,voicingHintResponse:i.voicingHintResponse,tandem:i.tandem.createTandem("expandCollapseButton")},i.expandCollapseButtonOptions),super(),_defineProperty(this,"expandedBoxOutline",null),_defineProperty(this,"collapsedBoxOutline",null);let n=i.titleNode;n||(n=new qc("",{tandem:i.tandem.createTandem("titleText")}),this.disposeEmitter.addListener(()=>n.dispose())),i.overrideTitleNodePickable&&(n.pickable=!1),this.expandedProperty=i.expandedProperty,this.expandedProperty||(this.expandedProperty=new Nn(!0,{tandem:i.tandem.createTandem("expandedProperty")}),this.disposeEmitter.addListener(()=>this.expandedProperty.dispose())),this.expandCollapseButton=new hw(this.expandedProperty,i.expandCollapseButtonOptions),this.disposeEmitter.addListener(()=>this.expandCollapseButton.dispose());const r={fill:i.fill,cornerRadius:i.cornerRadius};this.expandedBox=new Wc(r),this.collapsedBox=new Wc(r),this.expandedTitleBar=new __(null,tt({lineWidth:i.lineWidth,cursor:i.cursor},i.titleBarOptions)),this.expandedBox.addChild(this.expandedTitleBar),this.collapsedTitleBar=new R_(tt({cornerRadius:i.cornerRadius,cursor:i.cursor},i.titleBarOptions)),this.collapsedBox.addChild(this.collapsedTitleBar),this.disposeEmitter.addListener(()=>{this.collapsedTitleBar.dispose(),this.expandedTitleBar.dispose()}),i.titleBarExpandCollapse?this.collapsedTitleBar.addInputListener({down:()=>{this.expandCollapseButton.isEnabled()&&(this.phetioStartEvent("expanded"),this.expandedProperty.value=!0,i.expandedSoundPlayer.play(),this.phetioEndEvent())}}):(this.expandedTitleBar.interactiveHighlight="invisible",this.collapsedTitleBar.interactiveHighlight="invisible"),i.showTitleWhenExpanded&&i.titleBarExpandCollapse&&this.expandedTitleBar.addInputListener({down:()=>{this.expandCollapseButton.isEnabled()&&(this.phetioStartEvent("collapsed"),i.collapsedSoundPlayer.play(),this.expandedProperty.value=!1,this.phetioEndEvent())}});const s=()=>{const e=this.expandCollapseButton.visible&&this.expandCollapseButton.pickable;this.collapsedTitleBar.pickable=e,this.expandedTitleBar.pickable=e};if(this.expandCollapseButton.visibleProperty.lazyLink(s),this.expandCollapseButton.pickableProperty.lazyLink(s),this.expandCollapseButton.enabledProperty.link(e=>{const t=i.titleBarExpandCollapse&&e;this.collapsedTitleBar.cursor=t&&i.cursor||null,this.expandedTitleBar.cursor=t&&i.cursor||null}),this.expandCollapseButton.setFocusHighlight(new jd(this.expandedTitleBar)),this.expandedBox.addChild(e),i.stroke){const e={stroke:i.stroke,lineWidth:i.lineWidth,cornerRadius:i.cornerRadius,pickable:!1};this.expandedBoxOutline=new Wc(e),this.expandedBox.addChild(this.expandedBoxOutline),this.collapsedBoxOutline=new Wc(e),this.collapsedBox.addChild(this.collapsedBoxOutline)}const o=new Lh({excludeInvisibleChildrenFromBounds:!i.useExpandedBoundsWhenCollapsed});this.addChild(o);const a=new Lh({tagName:"div",ariaRole:"region",pdomOrder:[e],ariaLabelledbyAssociations:[{otherNode:this.expandCollapseButton,otherElementName:Tp.PRIMARY_SIBLING,thisElementName:Tp.PRIMARY_SIBLING}]}),l=new Lh({tagName:i.headingTagName,pdomOrder:[this.expandCollapseButton]}),h=new Lh({children:[l,a]});this.addChild(h),this.constraint=new N_(this,e,o,this.expandedBox,this.collapsedBox,this.expandedTitleBar,this.collapsedTitleBar,this.expandedBoxOutline,this.collapsedBoxOutline,n,this.expandCollapseButton,i),this.constraint.updateLayout(),this.constraint.enabled=i.resize;const c=()=>{const e=this.expandedProperty.value;this.expandedBox.visible=e,this.collapsedBox.visible=!e,n.visible=e&&i.showTitleWhenExpanded||!e,h.setPDOMAttribute("aria-hidden",!e),this.expandCollapseButton.voicingSpeakFullResponse({hintResponse:null})};this.expandedProperty.link(c),this.disposeEmitter.addListener(()=>this.expandedProperty.unlink(c)),this.mutate(_.omit(i,"cursor")),this.resetAccordionBox=()=>{i.expandedProperty||this.expandedProperty.reset()}}getCollapsedBoxHeight(){const e=this.constraint.lastCollapsedBoxHeight;return e}getExpandedBoxHeight(){const e=this.constraint.lastExpandedBoxHeight;return e}reset(){this.resetAccordionBox()}}_defineProperty(C_,"AccordionBoxIO",new yt("AccordionBoxIO",{valueType:C_,supertype:Lh.NodeIO,events:["expanded","collapsed"]})),_defineProperty(C_,"ACCORDION_BOX_ACCESSIBLE_NAME_BEHAVIOR",(e,t,i,n)=>(n.push(()=>{e.expandCollapseButton.accessibleName=i}),t));class __ extends(qu(Cc)){}class R_ extends(qu(Wc)){}class N_ extends Ag{constructor(e,t,i,n,r,s,o,a,l,h,c,u){super(e),_defineProperty(this,"lastCollapsedBoxHeight",null),_defineProperty(this,"lastExpandedBoxHeight",null),this.accordionBox=e,this.contentNode=t,this.containerNode=i,this.expandedBox=n,this.collapsedBox=r,this.expandedTitleBar=s,this.collapsedTitleBar=o,this.expandedBoxOutline=a,this.collapsedBoxOutline=l,this.titleNode=h,this.expandCollapseButton=c,this.options=u,this.accordionBox.localPreferredWidthProperty.lazyLink(this._updateLayoutListener),this.accordionBox.localPreferredHeightProperty.lazyLink(this._updateLayoutListener),this.accordionBox.expandedProperty.lazyLink(this._updateLayoutListener),this.addNode(t),this.addNode(h)}layout(){super.layout();const e=this.options;if(!this.accordionBox.isChildIncludedInLayout(this.contentNode))return void(this.containerNode.children=[]);this.containerNode.children=[this.expandedBox,this.collapsedBox,this.titleNode,this.expandCollapseButton];const t=this.accordionBox.expandedProperty.value||e.useExpandedBoundsWhenCollapsed,i=null===e.stroke?0:e.lineWidth,n=this.createLayoutProxy(this.contentNode),r=this.createLayoutProxy(this.titleNode),s=n.minimumWidth,o=n.minimumHeight,a=r.minimumWidth,l=Math.max(this.expandCollapseButton.height+2*e.buttonYMargin,this.titleNode.height+2*e.titleYMargin),h=e.showTitleWhenExpanded?Math.max((e.allowContentToOverlapTitle?e.contentYMargin:l+e.contentYSpacing)+o+e.contentYMargin,l):Math.max(this.expandCollapseButton.height+2*e.buttonYMargin,o+2*e.contentYMargin);let c=Math.max(e.minWidth,e.buttonXMargin+this.expandCollapseButton.width+e.titleXSpacing+a+e.titleXMargin);"center"===e.titleAlignX&&(c=Math.max(c,2*(e.buttonXMargin+this.expandCollapseButton.width+e.titleXSpacing)+a),c=Math.max(c,2*e.titleXMargin+a)),c=e.showTitleWhenExpanded?Math.max(c,s+2*e.contentXMargin):Math.max(c,this.expandCollapseButton.width+s+e.buttonXMargin+e.contentXMargin+e.contentXSpacing);const u=c+i,d=(t?h:l)+i,p=Math.max(u,this.accordionBox.localPreferredWidth||0)-i,m=Math.max(d,this.accordionBox.localPreferredHeight||0)-i;this.lastCollapsedBoxHeight=l,t&&(this.lastExpandedBoxHeight=m),this.collapsedBox.rectWidth=p,this.collapsedBox.rectHeight=l;const g=this.collapsedBox.selfBounds;if(this.collapsedTitleBar.rectWidth=p,this.collapsedTitleBar.rectHeight=l,this.collapsedBoxOutline&&(this.collapsedBoxOutline.rectWidth=p,this.collapsedBoxOutline.rectHeight=l),t){this.expandedBox.rectWidth=p,this.expandedBox.rectHeight=m;const t=this.expandedBox.selfBounds;this.expandedBoxOutline&&(this.expandedBoxOutline.rectWidth=p,this.expandedBoxOutline.rectHeight=m),this.expandedTitleBar.shape=bs.roundedRectangleWithRadii(0,0,p,l,{topLeft:e.cornerRadius,topRight:e.cornerRadius});let i=t.left+e.contentXMargin,n=t.right-e.contentXMargin;e.showTitleWhenExpanded||("left"===e.buttonAlign?i+=this.expandCollapseButton.width+e.contentXSpacing:n-=this.expandCollapseButton.width+e.contentXSpacing);const r=n-i,s=m-(e.showTitleWhenExpanded&&!e.allowContentToOverlapTitle?l+e.contentYMargin+e.contentYSpacing:2*e.contentYMargin);Wh(this.contentNode)&&null!==this.accordionBox.localPreferredWidth&&(this.contentNode.preferredWidth=r),Jh(this.contentNode)&&null!==this.accordionBox.localPreferredHeight&&(this.contentNode.preferredHeight=s),"top"===e.contentVerticalAlign?this.contentNode.top=t.bottom-e.contentYMargin-s:"bottom"===e.contentVerticalAlign?this.contentNode.bottom=t.bottom-e.contentYMargin:this.contentNode.centerY=t.bottom-e.contentYMargin-s/2,"left"===e.contentAlign?this.contentNode.left=i:"right"===e.contentAlign?this.contentNode.right=n:this.contentNode.centerX=(i+n)/2}let f=g.left+e.titleXMargin,y=g.right-e.titleXMargin;"left"===e.buttonAlign?(this.expandCollapseButton.left=g.left+e.buttonXMargin,f=this.expandCollapseButton.right+e.titleXSpacing):(this.expandCollapseButton.right=g.right-e.buttonXMargin,y=this.expandCollapseButton.left-e.titleXSpacing),Wh(this.titleNode)&&(this.titleNode.preferredWidth=y-f),"left"===e.titleAlignX?this.titleNode.left=f:"right"===e.titleAlignX?this.titleNode.right=y:this.titleNode.centerX=g.centerX,"top"===e.titleAlignY?(this.expandCollapseButton.top=this.collapsedBox.top+Math.max(e.buttonYMargin,e.titleYMargin),this.titleNode.top=this.expandCollapseButton.top):(this.expandCollapseButton.centerY=this.collapsedBox.centerY,this.titleNode.centerY=this.expandCollapseButton.centerY),n.dispose(),r.dispose(),this.accordionBox.localMinimumWidth=u,this.accordionBox.localMinimumHeight=d}dispose(){this.accordionBox.localPreferredWidthProperty.unlink(this._updateLayoutListener),this.accordionBox.localPreferredHeightProperty.unlink(this._updateLayoutListener),this.accordionBox.expandedProperty.unlink(this._updateLayoutListener),super.dispose()}}Zv.register("AccordionBox",C_);const M_=new Ye("twixt");class L_{constructor(e,t,i){this.value=e,this.derivative=t,this.secondDerivative=i}static polynomialEaseInValue(e,t){return Math.pow(t,e)}static polynomialEaseOutValue(e,t){return 1-Math.pow(1-t,e)}static polynomialEaseInOutValue(e,t){return t<=.5?.5*Math.pow(2*t,e):1-L_.polynomialEaseInOutValue(e,1-t)}static polynomialEaseInDerivative(e,t){return e*Math.pow(t,e-1)}static polynomialEaseOutDerivative(e,t){return e*Math.pow(1-t,e-1)}static polynomialEaseInOutDerivative(e,t){return t<=.5?Math.pow(2,e-1)*e*Math.pow(t,e-1):L_.polynomialEaseInOutDerivative(e,1-t)}static polynomialEaseInSecondDerivative(e,t){return(e-1)*e*Math.pow(t,e-2)}static polynomialEaseOutSecondDerivative(e,t){return-(e-1)*e*Math.pow(1-t,e-2)}static polynomialEaseInOutSecondDerivative(e,t){return t<=.5?Math.pow(2,e-1)*(e-1)*e*Math.pow(t,e-2):-L_.polynomialEaseInOutSecondDerivative(e,1-t)}static polynomialEaseIn(e){return new L_(L_.polynomialEaseInValue.bind(null,e),L_.polynomialEaseInDerivative.bind(null,e),L_.polynomialEaseInSecondDerivative.bind(null,e))}static polynomialEaseOut(e){return new L_(L_.polynomialEaseOutValue.bind(null,e),L_.polynomialEaseOutDerivative.bind(null,e),L_.polynomialEaseOutSecondDerivative.bind(null,e))}static polynomialEaseInOut(e){return new L_(L_.polynomialEaseInOutValue.bind(null,e),L_.polynomialEaseInOutDerivative.bind(null,e),L_.polynomialEaseInOutSecondDerivative.bind(null,e))}}_defineProperty(L_,"LINEAR",(ke=L_).polynomialEaseIn(1)),_defineProperty(L_,"QUADRATIC_IN",ke.polynomialEaseIn(2)),_defineProperty(L_,"QUADRATIC_OUT",ke.polynomialEaseOut(2)),_defineProperty(L_,"QUADRATIC_IN_OUT",ke.polynomialEaseInOut(2)),_defineProperty(L_,"CUBIC_IN",ke.polynomialEaseIn(3)),_defineProperty(L_,"CUBIC_OUT",ke.polynomialEaseOut(3)),_defineProperty(L_,"CUBIC_IN_OUT",ke.polynomialEaseInOut(3)),_defineProperty(L_,"QUARTIC_IN",ke.polynomialEaseIn(4)),_defineProperty(L_,"QUARTIC_OUT",ke.polynomialEaseOut(4)),_defineProperty(L_,"QUARTIC_IN_OUT",ke.polynomialEaseInOut(4)),_defineProperty(L_,"QUINTIC_IN",ke.polynomialEaseIn(5)),_defineProperty(L_,"QUINTIC_OUT",ke.polynomialEaseOut(5)),_defineProperty(L_,"QUINTIC_IN_OUT",ke.polynomialEaseInOut(5)),M_.register("Easing",L_);const I_=L_;class D_{constructor(e){_defineProperty(this,"startingValue",null),_defineProperty(this,"endingValue",null);const t=$e()({setValue:null,getValue:null,property:null,object:null,attribute:null,to:null,delta:null,speed:null,from:null,easing:I_.CUBIC_IN_OUT,blend:D_.DEFAULT_BLEND,distance:D_.DEFAULT_DISTANCE,add:D_.DEFAULT_ADD},e);t.object&&(t.setValue=D_.OBJECT_SET(t.object,t.attribute),t.getValue=D_.OBJECT_GET(t.object,t.attribute)),t.property&&(t.setValue=D_.PROPERTY_SET(t.property),t.getValue=D_.PROPERTY_GET(t.property)),this.getValue=t.getValue,this.setValue=t.setValue,this.easing=t.easing,this.from=t.from,this.to=t.to,this.delta=t.delta,this.speed=t.speed,this.blend=t.blend,this.distance=t.distance,this.add=t.add}static DEFAULT_BLEND(e,t,i){if(0===i)return e;if(1===i)return t;if("number"==typeof e&&"number"==typeof t)return e+(t-e)*i;if("object"==typeof e&&"object"==typeof t&&"function"==typeof e.blend)return e.blend(t,i);throw new Error(`Blending not supported for: ${JSON.stringify(e)}, ${JSON.stringify(t)}, pass in a blend option`)}static DEFAULT_DISTANCE(e,t){if("number"==typeof e&&"number"==typeof t)return Math.abs(e-t);if("object"==typeof e&&"object"==typeof t&&"function"==typeof e.distance)return e.distance(t);throw new Error(`Distance (required for speed) by default not supported for: ${JSON.stringify(e)}, ${JSON.stringify(t)}, pass in a distance option`)}static DEFAULT_ADD(e,t){if("number"==typeof e&&"number"==typeof t)return e+t;if("object"==typeof e&&"object"==typeof t&&"function"==typeof e.plus)return e.plus(t);throw new Error(`Addition (required for delta) by default not supported for: ${JSON.stringify(e)}, ${JSON.stringify(t)}, pass in an add option`)}static OBJECT_SET(e,t){return function(i){e[t]=i}}static OBJECT_GET(e,t){return function(){return e[t]}}static PROPERTY_SET(e){return function(t){e.value=t}}static PROPERTY_GET(e){return function(){return e.value}}computeStartEnd(){this.startingValue=null!==this.from?this.from:this.getValue(),this.endingValue=null!==this.to?this.to:this.add(this.startingValue,this.delta)}update(e){this.setValue(this.blend(this.startingValue,this.endingValue,this.easing.value(e)))}hasPreferredDuration(){return null!==this.speed}getPreferredDuration(){return null===this.speed?null:this.speed*this.distance(this.startingValue,this.delta)}}M_.register("AnimationTarget",D_);const k_=D_;class q_{constructor(e){_defineProperty(this,"length",0),_defineProperty(this,"remainingDelay",0),_defineProperty(this,"remainingAnimation",0),_defineProperty(this,"runningProperty",new Nn(!1)),_defineProperty(this,"animatingProperty",new Nn(!1)),_defineProperty(this,"startEmitter",new Yn),_defineProperty(this,"beginEmitter",new Yn),_defineProperty(this,"finishEmitter",new Yn({parameters:[{valueType:"number"}]})),_defineProperty(this,"stopEmitter",new Yn),_defineProperty(this,"endedEmitter",new Yn({hasListenerOrderDependencies:!0})),_defineProperty(this,"updateEmitter",new Yn);const t=$e()({targets:null,duration:null,delay:0,stepEmitter:Ln},e);this.targets=(null===t.targets?[t]:t.targets).map(e=>new k_(e)),this.duration=t.duration,this.delay=t.delay;const i=t.stepEmitter;if(i){const e=this.step.bind(this);this.runningProperty.link(t=>{t&&!i.hasListener(e)?i.addListener(e):!t&&i.hasListener(e)&&i.removeListener(e)})}}start(e){return this.runningProperty.value||(this.remainingDelay=this.delay,this.runningProperty.value=!0,this.startEmitter.emit(),this.step(void 0!==e?e:0)),this}stop(){return this.runningProperty.value?(this.runningProperty.value=!1,this.stopEmitter.emit(),this.endedEmitter.emit(),this):this}step(e){if(!this.runningProperty.value)return this;if(!this.animatingProperty.value){if(this.remainingDelay-=e,e=-this.remainingDelay,this.remainingDelay>0)return this;this.length=this.duration;for(let e=0;e0?Bt.clamp((this.length-this.remainingAnimation)/this.length,0,1):1;for(let i=0;ie.start(t)),e}}M_.register("Animation",q_);const B_=q_,O_=new sl(20,7);class H_ extends Lh{constructor(e,t){let i=!1;const n=$e()({orientation:"horizontal",fill:"white",stroke:"black",lineWidth:1,cornerRadius:4,defaultPageNumber:0,itemsPerPage:4,spacing:12,margin:6,alignBoxOptions:{phetioType:RE,phetioState:!0,visiblePropertyOptions:{phetioFeatured:!0}},buttonOptions:{xMargin:5,yMargin:5,touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,baseColor:"rgba( 200, 200, 200, 0.5 )",disabledColor:_T.LIGHT_GRAY,lineWidth:1,arrowPathOptions:{stroke:"black",lineWidth:3},arrowSize:O_,enabledPropertyOptions:{phetioReadOnly:!0,phetioFeatured:!1},soundPlayer:wT},separatorsVisible:!1,separatorOptions:{stroke:"rgb( 180, 180, 180 )",lineWidth:.5,pickable:!1},animationEnabled:!0,animationOptions:{duration:.4,stepEmitter:Ln,easing:I_.CUBIC_IN_OUT},tandem:Oi.OPTIONAL,visiblePropertyOptions:{phetioFeatured:!0}},t);super(),this.animationEnabled=n.animationEnabled,this.items=e,this.itemsPerPage=n.itemsPerPage,this.defaultPageNumber=n.defaultPageNumber;const r=$t.fromLayoutOrientation(n.orientation),s=new lf,o=n.tandem.createTandem("items");this.carouselItemNodes=qb(e,o),this.alignBoxes=e.map((e,t)=>s.createBox(this.carouselItemNodes[t],tt({tandem:e.tandemName?o.createTandem(e.tandemName):Oi.OPTIONAL},n.alignBoxOptions,e.alignBoxOptions))),this.scrollingNode=new Y_(this,{children:this.alignBoxes,orientation:n.orientation,spacing:n.spacing,[r.opposite.coordinate+"Margin"]:n.margin}),this.visibleAlignBoxesProperty=ir.deriveAny(this.alignBoxes.map(e=>e.visibleProperty),()=>this.getVisibleAlignBoxes()),this.scrollingNode.childrenReorderedEmitter.addListener(()=>this.visibleAlignBoxesProperty.recomputeDerivation());const a=tt({cornerRadius:n.cornerRadius},n.buttonOptions),l=n.separatorsVisible?new Lh({pickable:!1}):null,h=new Lh({children:n.separatorsVisible?[l,this.scrollingNode]:[this.scrollingNode]}),c=e=>Math.max(Math.ceil(e.length/n.itemsPerPage),1);this.numberOfPagesProperty=new ir([this.visibleAlignBoxesProperty],e=>c(e),{isValidValue:e=>e>0});const u=c(this.alignBoxes);this.pageNumberProperty=new Xn(n.defaultPageNumber,{tandem:n.tandem.createTandem("pageNumberProperty"),numberType:"Integer",isValidValue:e=>e=0,range:new zt(0,u-1),phetioFeatured:!0});const d=new ir([this.numberOfPagesProperty],e=>e>1),p=new kC(tt({arrowDirection:r===$t.HORIZONTAL?"right":"down",tandem:n.tandem.createTandem("nextButton"),listener:()=>this.pageNumberProperty.set(this.pageNumberProperty.get()+1),enabledProperty:new ir([this.pageNumberProperty,this.numberOfPagesProperty],(e,t)=>ethis.pageNumberProperty.set(this.pageNumberProperty.get()-1),enabledProperty:new ir([this.pageNumberProperty],e=>e>0),visibleProperty:d},a)),g=new Lh({children:[h]}),f=new Wc({cornerRadius:n.cornerRadius,fill:n.fill}),y=new Wc({cornerRadius:n.cornerRadius,stroke:n.stroke,pickable:!1});this.carouselConstraint=new G_(this,f,y,g,m,p,h,this.alignBoxes,r,this.scrollingNode,this.itemsPerPage,n.margin,s,l,n.separatorOptions);let A=null;const E=new ti(0,0,0,0);pr.multilink([this.pageNumberProperty,h.localBoundsProperty],(e,t)=>{if(e>=this.numberOfPagesProperty.value)return;A&&A.stop();const s=this.visibleAlignBoxesProperty.value[e*n.itemsPerPage],o=s?-s[r.minSide]+n.margin:0,a=null===E||!E.equals(t);E.set(t),!this.animationEnabled||null!=Tn&&Tn.value||!i||a?h[r.coordinate]=o:(A=new B_(tt({},n.animationOptions,{to:o,getValue:()=>h[r.coordinate],setValue:e=>{h[r.coordinate]=e}})),A.start())}),this.visibleAlignBoxesProperty.link(()=>{this.pageNumberProperty.value=Math.min(this.pageNumberProperty.value,this.numberOfPagesProperty.value-1)}),n.children=[f,g,p,m,y],this.disposeCarousel=()=>{this.visibleAlignBoxesProperty.dispose(),this.pageNumberProperty.dispose(),this.alignBoxes.forEach(e=>{e.dispose()}),this.scrollingNode.dispose(),this.carouselConstraint.dispose(),this.carouselItemNodes.forEach(e=>e.dispose())},this.mutate(n),i=!0}dispose(){this.disposeCarousel(),super.dispose()}reset(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=this.animationEnabled;this.animationEnabled=e,this.pageNumberProperty.value=Math.min(this.defaultPageNumber,this.numberOfPagesProperty.value-1),this.animationEnabled=t}scrollToItemVisibleIndex(e){this.pageNumberProperty.set(this.itemVisibleIndexToPageNumber(e))}scrollToItem(e){this.scrollToAlignBox(this.getAlignBoxForItem(e))}scrollToAlignBox(e){const t=this.visibleAlignBoxesProperty.value.indexOf(e);t>=0&&this.scrollToItemVisibleIndex(t)}setItemVisible(e,t){this.getAlignBoxForItem(e).visible=t}getAlignBoxForItem(e){const t=this.alignBoxes[this.items.indexOf(e)];return t}getNodeForItem(e){const t=this.carouselItemNodes[this.items.indexOf(e)];return t}itemVisibleIndexToPageNumber(e){return Math.floor(e/this.itemsPerPage)}getVisibleAlignBoxes(){return _.sortBy(this.alignBoxes.filter(e=>e.visible),e=>this.scrollingNode.children.indexOf(e))}}class Y_ extends Ug{constructor(e,t){super(t),this.carousel=e}onIndexedNodeIOChildMoved(e){this.carousel.scrollToAlignBox(e)}}class G_ extends Ag{constructor(e,t,i,n,r,s,o,a,l,h,c,u,d,p,m){super(e),this.carousel=e,this.backgroundNode=t,this.foregroundNode=i,this.windowNode=n,this.previousButton=r,this.nextButton=s,this.scrollingNodeContainer=o,this.alignBoxes=a,this.orientation=l,this.scrollingNode=h,this.itemsPerPage=c,this.margin=u,this.alignGroup=d,this.separatorLayer=p,this.separatorOptions=m,[this.backgroundNode,this.foregroundNode,this.windowNode,this.previousButton,this.nextButton,this.scrollingNodeContainer,...this.alignBoxes].forEach(e=>this.addNode(e,!1)),this.separatorLayer&&this.scrollingNode.constraint.finishedLayoutEmitter.addListener(()=>{this.updateSeparators()}),this.updateLayout()}updateSeparators(){const e=this.carousel.getVisibleAlignBoxes(),t=e.length>=2?_.range(1,e.length):[];this.separatorLayer.children=t.map(t=>{const i=(e[t-1][this.orientation.maxSide]+e[t][this.orientation.minSide])/2;return new pg(tt({[this.orientation.coordinate+"1"]:i,[this.orientation.coordinate+"2"]:i,[this.orientation.opposite.coordinate+"2"]:this.scrollingNode[this.orientation.opposite.size]},this.separatorOptions))})}computeClipArea(){const e=this.orientation,t=this.carousel.getVisibleAlignBoxes();if(0===t.length)return new sl(0,0);{const i=t[this.itemsPerPage-1]||t[t.length-1],n=new sl(i[e.maxSide]-t[0][e.minSide]+2*this.margin,this.scrollingNodeContainer.boundsProperty.value[e.opposite.size]);return this.orientation===$t.HORIZONTAL?n:n.swapped()}}getBackgroundDimension(){let e,t;if(this.orientation===$t.HORIZONTAL){const i=this.nextButton.visible?this.nextButton.width:0,n=this.previousButton.visible?this.previousButton.width:0;e=this.windowNode.width+i+n,t=this.windowNode.height}else{const i=this.nextButton.visible?this.nextButton.height:0,n=this.previousButton.visible?this.previousButton.height:0;e=this.windowNode.width,t=this.windowNode.height+i+n}return new sl(e,t)}layout(){super.layout();const e=this.orientation,t=this.alignGroup.getMaxSizeProperty(e.opposite).value+2*this.margin;this.nextButton[e.opposite.preferredSize]=t,this.previousButton[e.opposite.preferredSize]=t,this.nextButton[e.opposite.centerCoordinate]=this.backgroundNode[e.opposite.centerCoordinate],this.previousButton[e.opposite.centerCoordinate]=this.backgroundNode[e.opposite.centerCoordinate],this.windowNode[e.opposite.centerCoordinate]=this.backgroundNode[e.opposite.centerCoordinate],this.previousButton[e.minSide]=this.backgroundNode[e.minSide],this.nextButton[e.maxSide]=this.backgroundNode[e.maxSide],this.windowNode[e.centerCoordinate]=this.backgroundNode[e.centerCoordinate];const i=this.computeClipArea().toBounds();this.windowNode.clipArea=bs.bounds(i),this.windowNode.localBounds=i;const n=this.getBackgroundDimension();this.carousel.backgroundWidth=n.width,this.carousel.backgroundHeight=n.height;const r=n.toBounds();this.backgroundNode.rectBounds=r,this.foregroundNode.rectBounds=r,this.separatorLayer&&this.updateSeparators()}}Zv.register("Carousel",H_);class F_ extends(Md(Lh)){constructor(e,t,i,n,r){const s=$e()({cursor:"pointer",align:"left",xMargin:6,highlightFill:"rgb( 245, 245, 245 )",highlightCornerRadius:4,tagName:"li",focusable:!0,ariaRole:"option",positionInPDOM:!0,voicingFocusListener:()=>this.comboBoxListItemNodeVoicingFocusListener(),comboBoxVoicingNameResponsePattern:Yx.VALUE_NAMED_PLACEHOLDER,tandem:Oi.REQUIRED,tandemNameSuffix:"Item",phetioType:RE,phetioState:!0,visiblePropertyOptions:{phetioFeatured:!0}},r);s.comboBoxVoicingNameResponsePattern=s.comboBoxVoicingNameResponsePattern.get?s.comboBoxVoicingNameResponsePattern.get():s.comboBoxVoicingNameResponsePattern,s.innerContent=e.a11yName||null,s.voicingObjectResponse=e.a11yName||null;const o="string"==typeof s.comboBoxVoicingNameResponsePattern?new Rn(s.comboBoxVoicingNameResponsePattern):s.comboBoxVoicingNameResponsePattern,a=new fr(o,{value:e.a11yName},{tandem:Oi.OPT_OUT});s.voicingNameResponse=a;const l=new Wc({cornerRadius:s.highlightCornerRadius}),h=new Lh({children:[t]}),c=e=>{l.rectWidth=e,h.maxWidth=e};i.link(c);const u=e=>{l.rectHeight=e,h.maxHeight=e};n.link(u);const d=()=>{"left"===s.align?h.left=l.left+s.xMargin:"right"===s.align?h.right=l.right-s.xMargin:h.centerX=l.centerX,h.centerY=l.centerY};h.boundsProperty.lazyLink(d),d(),s.children=[l,h],super(s),this._supplyOpenResponseOnNextFocus=!1,this.item=e,this.localBoundsProperty.link(e=>{this.focusHighlight=bs.bounds(e)}),this.addInputListener({enter(){l.fill=s.highlightFill},exit(){l.fill=null}}),this.disposeComboBoxListItemNode=()=>{a.dispose(),i.unlink(c),n.unlink(u)}}supplyOpenResponseOnNextFocus(){this._supplyOpenResponseOnNextFocus=!0}dispose(){this.disposeComboBoxListItemNode(),super.dispose()}comboBoxListItemNodeVoicingFocusListener(){this.voicingSpeakFullResponse({nameResponse:this._supplyOpenResponseOnNextFocus?this.voicingNameResponse:null,objectResponse:this._supplyOpenResponseOnNextFocus?null:this.voicingObjectResponse,contextResponse:null,hintResponse:this._supplyOpenResponseOnNextFocus?this.voicingHintResponse:null}),this._supplyOpenResponseOnNextFocus=!1}}Zv.register("ComboBoxListItemNode",F_);class U_ extends eS{constructor(e,t,i,n,r,s,o,a){const l=$e()({highlightFill:"rgb( 245, 245, 245 )",comboBoxListItemNodeOptions:{},xMargin:12,yMargin:8,backgroundPickable:!0,tagName:"ul",ariaRole:"listbox",groupFocusHighlight:!0,focusable:!0,openedSoundPlayer:RV,closedNoChangeSoundPlayer:SV,visiblePropertyOptions:{phetioReadOnly:!0}},a),h=new Ru(t=>{const i=e.value,s=t.currentTarget;r(),e.value=s.item.value,n(),this.voiceOnNewSelection(e.value,i,s),t.abort()},{parameters:[{phetioPrivate:!0,valueType:Fp}],tandem:o.createTandem("fireAction"),phetioEventType:wi.USER}),c={up(e){h.execute(e)},keyup:e=>{e.domEvent&&ga.isAnyKeyEvent(e.domEvent,[ga.KEY_ENTER,ga.KEY_SPACE])&&h.execute(e)},click:e=>{h.execute(e)}},u=j_.getMaxItemWidthProperty(i),d=j_.getMaxItemHeightProperty(i),p=new ir([u],e=>e+l.xMargin),m=new ir([d],e=>e+l.yMargin),g=[];let f;t.forEach((e,t)=>{const n=new F_(e,i[t],p,m,tt({align:l.align,highlightFill:l.highlightFill,highlightCornerRadius:l.cornerRadius,xMargin:.5*l.xMargin,tandem:e.tandemName?o.createTandem(e.tandemName):Oi.OPTIONAL},l.comboBoxListItemNodeOptions));g.push(n),n.addInputListener(c)}),super(new cf({spacing:0,excludeInvisibleChildrenFromBounds:!0,children:g}),tt({},l,{xMargin:l.xMargin/2,yMargin:l.yMargin/2})),this.voiceOnSelectionNode=s;const y=t.map(e=>e.soundPlayer?e.soundPlayer:Ib.getSelectionSoundPlayer(t.indexOf(e)));this.visibleProperty.lazyLink(i=>{if(i)l.openedSoundPlayer.play(),f=e.value;else if(f===e.value)l.closedNoChangeSoundPlayer.play();else{const i=t.findIndex(t=>t.value===e.value);y[i].play()}});const A=new $m({keys:["escape","tab","arrowUp","arrowDown","home","end"],callback:(e,t)=>{const i=e;if("escape"===t||"tab"===t)i.abort(),n(),r();else if("arrowUp"===t||"arrowDown"===t){const e=i.domEvent;e.preventDefault();const n="arrowDown"===t?1:-1,r=this.visibleListItemNodes.indexOf(this.getFocusedItemNode()),s=r+n;this.visibleListItemNodes[s]&&this.visibleListItemNodes[s].focus(),i.pointer.reserveForKeyboardDrag()}else"home"===t?this.visibleListItemNodes[0].focus():"end"===t&&this.visibleListItemNodes[this.visibleListItemNodes.length-1].focus()}});this.addInputListener(A),this.listItemNodes=g,this.visibleListItemNodes=g.slice(),this.disposeComboBoxListBox=()=>{for(let e=0;ee.visible)}isItemVisible(e){return this.getListItemNode(e).visible}getListItemNode(e){const t=_.find(this.listItemNodes,t=>t.item.value===e);return t}getFocusedItemNode(){const e=_.find(this.listItemNodes,e=>e.focused);return e}focusListItemNode(e){const t=this.getListItemNode(e);t.supplyOpenResponseOnNextFocus(),t.focus()}voiceOnNewSelection(e,t,i){const n={nameResponse:i.voicingNameResponse,objectResponse:null,contextResponse:i.voicingContextResponse,hintResponse:null};t===e&&(n.contextResponse=null),this.voiceOnSelectionNode.voicingSpeakResponse(n)}}Zv.register("ComboBoxListBox",U_);const z_=(e,t,i,n)=>(n.push(()=>{e.button.accessibleName=i}),t),W_=(e,t,i,n)=>(n.push(()=>{e.button.helpText=i}),t);class j_ extends(Xh(Lh)){constructor(e,t,i,n){const r=$e()({align:"left",listPosition:"below",labelXSpacing:10,disabledOpacity:.5,cornerRadius:4,highlightFill:"rgb( 245, 245, 245 )",xMargin:12,yMargin:8,buttonFill:"white",buttonStroke:"black",buttonLineWidth:1,buttonTouchAreaXDilation:0,buttonTouchAreaYDilation:0,buttonMouseAreaXDilation:0,buttonMouseAreaYDilation:0,listFill:"white",listStroke:"black",listLineWidth:1,openedSoundPlayer:RV,closedNoChangeSoundPlayer:SV,tagName:"div",accessibleNameBehavior:z_,helpTextBehavior:W_,comboBoxVoicingNameResponsePattern:Yx.VALUE_NAMED_PLACEHOLDER,comboBoxVoicingContextResponse:null,comboBoxVoicingHintResponse:null,tandem:Oi.REQUIRED,tandemNameSuffix:"ComboBox",phetioType:j_.ComboBoxIO,phetioFeatured:!0,phetioEventType:wi.USER,visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0},n),s=qb(t,r.tandem.createTandem("items"));super(),this.nodes=s,this.listPosition=r.listPosition,this.button=new Q_(e,t,s,{align:r.align,arrowDirection:"below"===r.listPosition?"down":"up",cornerRadius:r.cornerRadius,xMargin:r.xMargin,yMargin:r.yMargin,baseColor:r.buttonFill,stroke:r.buttonStroke,lineWidth:r.buttonLineWidth,touchAreaXDilation:r.buttonTouchAreaXDilation,touchAreaYDilation:r.buttonTouchAreaYDilation,mouseAreaXDilation:r.buttonMouseAreaXDilation,mouseAreaYDilation:r.buttonMouseAreaYDilation,localPreferredWidthProperty:this.localPreferredWidthProperty,localMinimumWidthProperty:this.localMinimumWidthProperty,comboBoxVoicingNameResponsePattern:r.comboBoxVoicingNameResponsePattern,tandem:r.tandem.createTandem("button")}),this.addChild(this.button),this.listBox=new U_(e,t,s,this.hideListBox.bind(this),()=>{this.button.blockNextVoicingFocusListener(),this.button.focus()},this.button,r.tandem.createTandem("listBox"),{align:r.align,highlightFill:r.highlightFill,xMargin:r.xMargin,yMargin:r.yMargin,cornerRadius:r.cornerRadius,fill:r.listFill,stroke:r.listStroke,lineWidth:r.listLineWidth,visible:!1,comboBoxListItemNodeOptions:{comboBoxVoicingNameResponsePattern:r.comboBoxVoicingNameResponsePattern,voicingContextResponse:r.comboBoxVoicingContextResponse,voicingHintResponse:r.comboBoxVoicingHintResponse},openedSoundPlayer:r.openedSoundPlayer,closedNoChangeSoundPlayer:r.closedNoChangeSoundPlayer,ariaLabelledbyAssociations:[{otherNode:this.button,otherElementName:Tp.LABEL_SIBLING,thisElementName:Tp.PRIMARY_SIBLING}]}),i.addChild(this.listBox),this.listParent=i;const o=new hc(this.button,this.listParent,{fromCoordinateFrame:"parent",toCoordinateFrame:"local"});pr.multilink([o,this.button.localBoundsProperty,this.listBox.localBoundsProperty],e=>{e&&("above"===this.listPosition?this.listBox.leftBottom=e.timesVector2(this.button.leftTop):this.listBox.leftTop=e.timesVector2(this.button.leftBottom))}),this.opacityProperty.link(e=>{this.listBox.opacityProperty.value=e}),this.mutate(r),this.button.addListener(()=>{this.listBox.visibleProperty.value=!this.listBox.visibleProperty.value,this.listBox.focusListItemNode(e.value)}),this.display=null,this.clickToDismissListener={down:e=>{(!phet.chipper.isFuzzEnabled()||oi.nextDouble()<.005)&&(e.trail.containsNode(this.button)||e.trail.containsNode(this.listBox)||this.hideListBox())}},this.dismissWithFocusListener=e=>{e&&!e.trail.containsNode(this.listBox)&&this.hideListBox()},qd.pdomFocusProperty.link(this.dismissWithFocusListener),this.listBox.visibleProperty.link(e=>{e?(this.scaleListBox(),this.listBox.moveToFront(),this.display=this.getUniqueTrail().rootNode().getRootedDisplays()[0],this.display.addInputListener(this.clickToDismissListener)):this.display&&this.display.hasInputListener(this.clickToDismissListener)&&(this.display.removeInputListener(this.clickToDismissListener),this.display=null)}),this.displayOnlyProperty=new Nn(!1,{tandem:r.tandem.createTandem("displayOnlyProperty"),phetioFeatured:!0,phetioDocumentation:"disables interaction with the ComboBox and makes it appear like a display that shows the current selection"}),this.displayOnlyProperty.link(e=>{this.hideListBox(),this.button.setDisplayOnly(e),this.pickable=!e}),this.addLinkedElement(e,{tandemName:"property"}),this.disposeComboBox=()=>{o.dispose(),this.display&&this.display.hasInputListener(this.clickToDismissListener)&&this.display.removeInputListener(this.clickToDismissListener),qd.pdomFocusProperty.unlink(this.dismissWithFocusListener),this.displayOnlyProperty.dispose(),this.listBox.dispose(),this.button.dispose(),s.forEach(e=>e.dispose())}}dispose(){this.disposeComboBox(),super.dispose()}showListBox(){this.listBox.visibleProperty.value=!0}hideListBox(){this.listBox.visibleProperty.value=!1}scaleListBox(){if(!this.listBox.localBounds.isEmpty()){const e=this.button.localToGlobalBounds(this.button.localBounds).width/this.button.localBounds.width,t=this.listBox.localToGlobalBounds(this.listBox.localBounds).width/this.listBox.localBounds.width;this.listBox.scale(e/t)}}setItemVisible(e,t){this.listBox.setItemVisible(e,t)}isItemVisible(e){return this.listBox.isItemVisible(e)}static getMaxItemWidthProperty(e){const t=_.flatten(e.map(e=>{const t=[e.boundsProperty];return jh(e)&&(t.push(e.isWidthResizableProperty),t.push(e.minimumWidthProperty)),t}));return ir.deriveAny(t,()=>Math.max(...e.map(e=>Wh(e)?e.minimumWidth||0:e.width)))}static getMaxItemHeightProperty(e){const t=e.map(e=>e.boundsProperty);return ir.deriveAny(t,()=>Math.max(...e.map(e=>e.height)))}}qe=j_,_defineProperty(j_,"ITEM_TANDEM_NAME_SUFFIX","Item"),_defineProperty(j_,"ComboBoxIO",new yt("ComboBoxIO",{valueType:qe,documentation:"A combo box is composed of a push button and a listbox. The listbox contains items that represent choices. Pressing the button pops up the listbox. Selecting from an item in the listbox sets the value of an associated Property. The button shows the item that is currently selected.",supertype:Lh.NodeIO,events:["listBoxShown","listBoxHidden"]})),Zv.register("ComboBox",j_);const X_=(e,t,i)=>(t.labelTagName="p",t.labelContent=i,t);class Q_ extends kT{constructor(e,t,i,n){const r=$e()({align:"left",arrowDirection:"down",arrowFill:"black",comboBoxVoicingNameResponsePattern:Yx.VALUE_NAMED_PLACEHOLDER,cursor:"pointer",baseColor:"white",buttonAppearanceStrategy:MT.FlatAppearanceStrategy,xMargin:12,yMargin:8,stroke:"black",lineWidth:1,soundPlayer:MV,enabledPropertyOptions:{phetioFeatured:!1},visiblePropertyOptions:{phetioFeatured:!1},localPreferredWidthProperty:new vn(null),localMinimumWidthProperty:new vn(null),containerTagName:"div",accessibleNameBehavior:X_},n),s=r.xMargin,o=r.yMargin,a=j_.getMaxItemWidthProperty(i),l=j_.getMaxItemHeightProperty(i),h=new Cc(null,{fill:r.arrowFill}),c=_.find(t,t=>t.value===e.value),u=t.indexOf(c),d=new Lh({layoutOptions:{yMargin:o,grow:1,xAlign:r.align},children:[i[u]]}),p=new Uc(0,0,0,0,{stroke:"black",lineWidth:r.lineWidth});r.content=new $g({rows:[[d,p,h]]}),pr.multilink([a,l],(e,t)=>{const i=t+2*o,n=i,a=.35*n,l=2*a*Math.sqrt(3)/3,c=s,u=s-r.lineWidth/2,m=-r.lineWidth/2;var g,f,y;h.shape=(g=r.arrowDirection,f=l,y=a,"up"===g?(new bs).moveTo(0,y).lineTo(f/2,0).lineTo(f,y).close():(new bs).moveTo(0,0).lineTo(f,0).lineTo(f/2,y).close()),h.mutateLayoutOptions({minContentWidth:n,minContentHeight:n}),d.mutateLayoutOptions({minContentWidth:e,minContentHeight:t,leftMargin:c,rightMargin:u}),p.y2=i,p.mutateLayoutOptions({rightMargin:m})}),r.xMargin=0,r.yMargin=0,super(r),this.minimumWidthProperty.link(e=>{r.localMinimumWidthProperty.value=e});const m=e=>{this.preferredWidth=e};r.localPreferredWidthProperty.link(m),this._blockNextVoicingFocusListener=!1,this.voicingFocusListener=()=>{!this._blockNextVoicingFocusListener&&this.defaultFocusListener(),this._blockNextVoicingFocusListener=!1};let g=null,f=null;const y=e=>{d.removeAllChildren(),f=_.find(t,t=>t.value===e);const n=t.indexOf(f),s=i[n];d.addChild(s),this.innerContent=f.a11yName||null;const o="string"==typeof r.comboBoxVoicingNameResponsePattern?new Rn(r.comboBoxVoicingNameResponsePattern):r.comboBoxVoicingNameResponsePattern;g&&g.dispose(),this.voicingNameResponse=g=new fr(o,{value:f.a11yName},{tandem:Oi.OPT_OUT})};e.link(y),this.ariaLabelledbyAssociations=[{otherNode:this,otherElementName:Tp.LABEL_SIBLING,thisElementName:Tp.PRIMARY_SIBLING},{otherNode:this,otherElementName:Tp.PRIMARY_SIBLING,thisElementName:Tp.PRIMARY_SIBLING}],Su.mutateNode(this,"listbox"),this.disposeComboBoxButton=()=>{a.dispose(),l.dispose(),e.unlink(y),r.localPreferredWidthProperty.unlink(m),g&&g.dispose()},this.arrow=h,this.separatorLine=p}setDisplayOnly(e){this.arrow.visible=!e,this.separatorLine.visible=!e}blockNextVoicingFocusListener(){this._blockNextVoicingFocusListener=!0}dispose(){this.disposeComboBoxButton(),super.dispose()}}Zv.register("ComboBoxButton",Q_);class K_ extends Lh{constructor(e,t,i){const n=$e()({interactive:!1,orientation:"horizontal",dotRadius:3,lineWidth:1,dotSpacing:10,dotTouchAreaDilation:4,dotMouseAreaDilation:4,currentPageFill:"black",currentPageStroke:null,pageFill:"rgb( 200, 200, 200 )",pageStroke:null,tandem:Oi.REQUIRED,tandemNameSuffix:"PageControl",visiblePropertyOptions:{phetioFeatured:!0}},i),r=new hm({press:t=>{t.currentTarget instanceof J_&&(e.value=t.currentTarget.pageNumber)},tandem:n.tandem.createTandem("pressListener")}),s={lineWidth:n.lineWidth,mouseArea:0===n.dotMouseAreaDilation?null:bs.circle(0,0,n.dotRadius+n.dotMouseAreaDilation),touchArea:0===n.dotTouchAreaDilation?null:bs.circle(0,0,n.dotRadius+n.dotTouchAreaDilation),boundsMethod:"unstroked",cursor:n.interactive?"pointer":null,inputListeners:n.interactive?[r]:[]},o=new Ug({orientation:n.orientation,spacing:n.dotSpacing});let a=[];o.boundsProperty.link(()=>{o.center=Ht.ZERO});const l=e=>{a.forEach(t=>{t.fill=e===t.pageNumber?n.currentPageFill:n.pageFill,t.stroke=e===t.pageNumber?n.currentPageStroke:n.pageStroke})};e.link(l);const h=t=>{a=_.range(0,t).map(e=>new J_(e,n.dotRadius,s)),o.children=a,l(e.value)};t.link(h),n.children=[o],super(n),this.disposePageControl=()=>{r.dispose(),t.unlink(h),e.unlink(l)}}dispose(){this.disposePageControl(),super.dispose()}}class J_ extends Gc{constructor(e,t,i){super(t,i),this.pageNumber=e}}Zv.register("PageControl",K_);class Z_ extends(Xh(Lh)){constructor(e,t,i){const n=$e()({itemNodeOptions:{align:"left",overColor:Eo.grayColor(245),selectedColor:"yellow",xMargin:6,yMargin:2},carouselOptions:{buttonOptions:{arrowSize:new sl(20,4)},orientation:"vertical",spacing:0,margin:0,itemsPerPage:15},pageControlOptions:{interactive:!0},buttonOptions:{arrowDirection:"down",baseColor:"rgb( 218, 236, 255 )",xMargin:6,yMargin:4},tandem:Oi.OPTIONAL},i);n.carouselOptions.itemsPerPage=Math.min(n.carouselOptions.itemsPerPage,t.length),n.carouselOptions.tandem=n.carouselOptions.tandem||n.tandem.createTandem("carousel"),n.buttonOptions.tandem=n.buttonOptions.tandem||n.tandem.createTandem("button"),super();const r=new lf,s=qb(t,n.tandem.createTandem("items")),o=_.map(t,(t,i)=>({createNode:()=>new $_(e,t,s[i],r,n.itemNodeOptions)})),a=[],l=new H_(o,n.carouselOptions);a.push(l);let h=null;l.numberOfPagesProperty.value>1&&(h=new K_(l.pageNumberProperty,l.numberOfPagesProperty,tt({orientation:n.carouselOptions.orientation},n.pageControlOptions)),a.push(h));const c=new hf({spacing:4,children:a}),u=new Q_(e,t,s,tt({listener:()=>{c.visible=!c.visible},widthSizable:n.widthSizable,localPreferredWidthProperty:this.localPreferredWidthProperty,localMinimumWidthProperty:this.localMinimumWidthProperty},n.buttonOptions)),d=new cf({spacing:0,align:"left",children:[u,c]});n.children=[d],this.mutate(n);const p=()=>{c.visible=!1};e.link(p);const m={down:e=>{if(!phet.chipper.isFuzzEnabled()||oi.nextDouble()<.25){const t=e.trail;t.containsNode(u)||t.containsNode(l)||h&&t.containsNode(h)||(c.visible=!1)}}};let g=null;c.visibleProperty.link(e=>{e?(g=this.getUniqueTrail().rootNode().getRootedDisplays()[0],g.addInputListener(m)):g&&g.hasInputListener(m)&&(g.removeInputListener(m),g=null)}),this.disposeCarouselComboBox=()=>{e.unlink(p),u.dispose(),h&&h.dispose(),l.dispose(),s.forEach(e=>e.dispose())}}dispose(){this.disposeCarouselComboBox(),super.dispose()}}class $_ extends Lh{constructor(e,t,i,n,r){const s=$e()({align:"left",xMargin:6,yMargin:2,overColor:Eo.grayColor(245),selectedColor:"yellow",tandem:Oi.OPTIONAL},r),o=new rf(i,{xAlign:s.align,group:n}),a=new Wc(0,0,1,1);o.boundsProperty.link(e=>{a.setRectBounds(e.dilatedXY(s.xMargin,s.yMargin))}),s.children=[a,o],super(s);const l=new hm({press:()=>{e.value=t.value},tandem:s.tandem.createTandem("pressListener")});this.addInputListener(l);const h=new pr([e,l.isOverProperty],(e,i)=>{e===t.value?a.fill=s.selectedColor:a.fill=i?s.overColor:"transparent"});this.disposeCarouselItemNode=()=>{h.dispose()}}dispose(){this.disposeCarouselItemNode(),super.dispose()}}Zv.register("CarouselComboBox",Z_);Zv.register("ClosestDragForwardingListener",class{constructor(e,t){this.touchThreshold=e,this.mouseThreshold=t,this.items=[]}addDraggableItem(e){this.items.push(e)}removeDraggableItem(e){const t=_.indexOf(this.items,e);this.items.splice(t,1)}down(e){if(e.target===e.currentTarget){let t=0;if(e.pointer.isTouchLike()&&(t=this.touchThreshold),e.pointer instanceof qp&&(t=this.mouseThreshold),t){let i=null,n=Number.POSITIVE_INFINITY;const r=e.pointer.point,s=this.items.length;for(let e=0;e{this.innerContent=e,this.voicingNameResponse=e};t.link(l),this.present=n;const h=new qc(t,{font:new Jv(18),fill:a.textFill,maxWidth:400}),c=new Wc({cornerRadius:5});h.boundsProperty.link(e=>{this.localMinimumWidth=e.width+2+5+iR,c.rectHeight=e.height+3+3}),this.localPreferredWidthProperty.link(e=>{(e=null===e?this.localMinimumWidth:Math.max(this.localMinimumWidth||0,e))&&(c.rectWidth=e)}),this.addChild(c),this.addChild(h),ef.create(this,[c,h],(e,t)=>{t.left=e.left+2+iR,t.centerY=e.centerY}),this.addInputListener({enter:()=>{c.fill="#a6d2f4"},exit:()=>{c.fill=null}}),this.addInputListener(new cm({tandem:null===(o=a.tandem)||void 0===o?void 0:o.createTandem("fireListener"),fire:t=>{e(t),i(t)}})),this.separatorBefore=a.separatorBefore;let u=null;if(a.checkedProperty){const e=new Lh({children:[tR],right:h.left-2,centerY:h.centerY});u=t=>{e.visible=t},a.checkedProperty.link(u),this.addChild(e)}this.mutate(a),this.disposeMenuItem=()=>{a.checkedProperty&&u&&a.checkedProperty.hasListener(u)&&a.checkedProperty.unlink(u),t.hasListener(l)&&t.unlink(l),h.dispose()}}dispose(){this.disposeMenuItem(),super.dispose()}}Zv.register("MenuItem",nR);class rR extends Lh{constructor(e,t,i,n,r){super(),this.nodeProperty=new Rn(null),this._constructInstance=()=>Reflect.construct(e,[...t,We(_.mapValues(n,e=>e.value),i)]),this.multilink=pr.multilink(_.values(n),this.replaceCopy.bind(this)),this.mutate(r)}replaceCopy(){const e=this._constructInstance(),t=this.nodeProperty.value;this.nodeProperty.value=e,this.addChild(e),t&&(this.removeChild(t),this.disposeCopy(t))}disposeCopy(e){e.dispose&&e.dispose()}dispose(){this.multilink.dispose(),this.disposeCopy(this.nodeProperty.value),this.nodeProperty.dispose(),super.dispose()}}Zv.register("MutableOptionsNode",rR);const sR=new Map,oR=e=>{if(!sR.has(e)){const t=e.join(",");sR.set(e,new yt(`StringUnionIO<${t}>`,{documentation:"An IOType validating on specific string values.",isValidValue:t=>e.includes(t),toStateObject:_.identity,fromStateObject:_.identity,stateSchema:mt.asValue(`StringUnionIO<${t}>`,{isValidValue:t=>e.includes(t)})}))}return sR.get(e)};at.register("StringUnionIO",oR);const aR=oR;class lR extends Rn{constructor(e,t){super(e,$e()({phetioValueType:aR(t.validValues)},t))}}Ge.register("StringUnionProperty",lR);const hR=(e,t)=>class extends(Ix(e,t)){constructor(){for(var e=arguments.length,i=new Array(e),n=0;n{if(this.enabledProperty.get()&&ga.isRangeKey(e.domEvent)){const t=e.domEvent;t.preventDefault(),t.metaKey||this._callbackTimer.isRunning()||(this._accessibleNumberSpinnerHandleKeyDown(e),o=this._accessibleNumberSpinnerHandleKeyDown.bind(this,e),a=t,this._callbackTimer.addCallback(o),this._callbackTimer.start())}},keyup:e=>{const t=ga.getEventCode(e.domEvent);ga.isRangeKey(e.domEvent)&&(a&&t===ga.getEventCode(a)&&(this._emitKeyState(e.domEvent,!1),this._callbackTimer.stop(!1),this._callbackTimer.removeCallback(o),o=null,a=null),this.handleKeyUp(e))},blur:e=>{o&&(this._emitKeyState(a,!1),this._callbackTimer.stop(!1),this._callbackTimer.removeCallback(o)),this.handleBlur(e)},input:this.handleInput.bind(this),change:this.handleChange.bind(this)};this.addInputListener(l),this._disposeAccessibleNumberSpinner=()=>{this._callbackTimer.dispose(),this.incrementDownEmitter.dispose(),this.decrementDownEmitter.dispose(),this.removeInputListener(l)}}_accessibleNumberSpinnerHandleKeyDown(e){this.handleKeyDown(e),this._emitKeyState(e.domEvent,!0)}_emitKeyState(e,t){ot(e,{valueType:Event}),ga.isAnyKeyEvent(e,[ga.KEY_UP_ARROW,ga.KEY_RIGHT_ARROW])?this.incrementDownEmitter.emit(t):ga.isAnyKeyEvent(e,[ga.KEY_DOWN_ARROW,ga.KEY_LEFT_ARROW])&&this.decrementDownEmitter.emit(t)}dispose(){this._disposeAccessibleNumberSpinner(),super.dispose()}};Zv.register("AccessibleNumberSpinner",hR);const cR=hR,uR=["up","down","over","out"];class dR extends(cR(Lh,0)){constructor(e,t,i){const n=$e()({color:new Eo(0,0,255),backgroundColor:"white",cornerRadius:6,xMargin:3,yMargin:3,decimalPlaces:0,font:new Jv(24),incrementFunction:e=>e+1,decrementFunction:e=>e-1,timerDelay:400,timerInterval:100,noValueString:Qx.NO_VALUE,align:"center",touchAreaXDilation:10,touchAreaYDilation:10,mouseAreaXDilation:0,mouseAreaYDilation:5,backgroundStroke:"gray",backgroundLineWidth:.5,arrowHeight:6,arrowYSpacing:3,arrowStroke:"black",arrowLineWidth:.25,valueMaxWidth:null,onInput:_.noop,incrementEnabledFunction:(e,t)=>null!=e&&enull!=e&&e>t.min,disabledOpacity:mo.DISABLED_OPACITY,valueChangedSoundPlayer:Sx,boundarySoundPlayer:Ex,cursor:"pointer",valueProperty:e,enabledRangeProperty:t,pageKeyboardStep:2,voicingObjectResponse:()=>e.value,tandem:Oi.REQUIRED,tandemNameSuffix:"Picker",phetioReadOnly:Zi.DEFAULT_OPTIONS.phetioReadOnly,visiblePropertyOptions:{phetioFeatured:!0},phetioEnabledPropertyInstrumented:!0,phetioFeatured:!0},i);n.formatValue||(n.formatValue=e=>Bt.toFixed(e,n.decimalPlaces));let r=null;void 0===n.pressedColor&&(r=new su(n.color),n.pressedColor=new ir([r],e=>e.darkerColor()));let s=e.value;const o=n.onInput;n.onInput=()=>{o(),e.value!==s&&(e.value===t.get().max||e.value===t.get().min?n.boundarySoundPlayer.play():n.valueChangedSoundPlayer.play()),s=e.value};const a=n.incrementFunction(e.get())-e.get();n.keyboardStep=a,n.shiftKeyboardStep=a;const l=_.pick(n,Lh.REQUIRES_BOUNDS_OPTION_KEYS);super(_.omit(n,Lh.REQUIRES_BOUNDS_OPTION_KEYS));const h=new lR("up",{validValues:uR}),c=new lR("down",{validValues:uR}),u=new ir([e,t],n.incrementEnabledFunction),d=new ir([e,t],n.decrementEnabledFunction),p=new qc("",{font:n.font,pickable:!1});let m=t.get().min;const g=[];for(;m<=t.get().max;)g.push(m),m=n.incrementFunction(m);let f=Math.max.apply(null,g.map(e=>(p.string=n.formatValue(e),p.width)));null!==n.valueMaxWidth&&(f=Math.min(f,n.valueMaxWidth));const y=f+2*n.xMargin,A=p.height+2*n.yMargin,E=n.cornerRadius;p.maxWidth=f;const v=new Cc((new bs).arc(E,E,E,Math.PI,3*Math.PI/2,!1).arc(y-E,E,E,-Math.PI/2,0,!1).lineTo(y,A/2+1).lineTo(0,A/2+1).close(),{pickable:!1}),S=new Cc((new bs).arc(y-E,A-E,E,0,Math.PI/2,!1).arc(E,A-E,E,Math.PI/2,Math.PI,!1).lineTo(0,A/2).lineTo(y,A/2).close(),{pickable:!1}),b=new Wc(0,0,y,A,E,E,{pickable:!1,stroke:n.backgroundStroke,lineWidth:n.backgroundLineWidth}),T=new sl(.5*y,n.arrowHeight),w={stroke:n.arrowStroke,lineWidth:n.arrowLineWidth,pickable:!1};this.incrementArrow=new Cc((new bs).moveTo(T.width/2,0).lineTo(T.width,T.height).lineTo(0,T.height).close(),w),this.incrementArrow.centerX=v.centerX,this.incrementArrow.bottom=v.top-n.arrowYSpacing,this.decrementArrow=new Cc((new bs).moveTo(T.width/2,T.height).lineTo(0,0).lineTo(T.width,0).close(),w),this.decrementArrow.centerX=S.centerX,this.decrementArrow.top=S.bottom+n.arrowYSpacing;const V=new Lh({children:[v,this.incrementArrow]});V.addChild(new Wc(V.localBounds));const P=new Lh({children:[S,this.decrementArrow]});P.addChild(new Wc(P.localBounds)),this.addChild(V),this.addChild(P),this.addChild(b),this.addChild(p),V.touchArea=bs.rectangle(V.left-n.touchAreaXDilation/2,V.top-n.touchAreaYDilation,V.width+n.touchAreaXDilation,V.height+n.touchAreaYDilation),P.touchArea=bs.rectangle(P.left-n.touchAreaXDilation/2,P.top,P.width+n.touchAreaXDilation,P.height+n.touchAreaYDilation),V.mouseArea=bs.rectangle(V.left-n.mouseAreaXDilation/2,V.top-n.mouseAreaYDilation,V.width+n.mouseAreaXDilation,V.height+n.mouseAreaYDilation),P.mouseArea=bs.rectangle(P.left-n.mouseAreaXDilation/2,P.top,P.width+n.mouseAreaXDilation,P.height+n.mouseAreaYDilation);const x={up:n.color,over:n.color,down:n.pressedColor,out:n.color,disabled:"rgb(176,176,176)"},C=mR(n.color,n.backgroundColor,n.color,A),R=mR(n.pressedColor,n.backgroundColor,n.pressedColor,A),N={up:n.backgroundColor,over:C,down:R,out:R,disabled:n.backgroundColor},M={fireOnHold:!0,fireOnHoldDelay:n.timerDelay,fireOnHoldInterval:n.timerInterval};this.incrementInputListener=new pR(h,tt({tandem:n.tandem.createTandem("incrementInputListener"),fire:i=>{e.set(Math.min(n.incrementFunction(e.get()),t.get().max)),n.onInput(i),this.voicingSpeakFullResponse({nameResponse:null,hintResponse:null})}},M)),V.addInputListener(this.incrementInputListener),this.decrementInputListener=new pR(c,tt({tandem:n.tandem.createTandem("decrementInputListener"),fire:i=>{e.set(Math.max(n.decrementFunction(e.get()),t.get().min)),n.onInput(i),this.voicingSpeakFullResponse({nameResponse:null,hintResponse:null})}},M)),P.addInputListener(this.decrementInputListener),u.link(e=>{!e&&this.incrementInputListener.interrupt(),V.pickable=e}),d.link(e=>{!e&&this.decrementInputListener.interrupt(),P.pickable=e});const L=e=>{if(null==e)p.string=n.noValueString,p.x=(y-p.width)/2;else if(p.string=n.formatValue(e),"center"===n.align)p.centerX=v.centerX;else if("right"===n.align)p.right=v.right-n.xMargin;else{if("left"!==n.align)throw new Error("unsupported value for options.align: "+n.align);p.left=v.left+n.xMargin}p.centerY=A/2};e.link(L),pr.multilink([h,u],(e,t)=>{gR(e,t,v,this.incrementArrow,N,x)}),pr.multilink([c,d],(e,t)=>{gR(e,t,S,this.decrementArrow,N,x)});const I=this.localBounds.dilated(zd.getDilationCoefficient(this));this.focusHighlight=new zd(bs.roundedRectangleWithRadii(I.minX,I.minY,I.width,I.height,{topLeft:n.cornerRadius,topRight:n.cornerRadius,bottomLeft:n.cornerRadius,bottomRight:n.cornerRadius})),this.incrementDownEmitter.addListener(e=>{h.value=e?"down":"up"}),this.decrementDownEmitter.addListener(e=>{c.value=e?"down":"up"}),this.addLinkedElement(e,{tandemName:"valueProperty"}),this.mutate(l),this.disposeNumberPicker=()=>{r&&r.dispose(),u.dispose(),d.dispose(),e.hasListener(L)&&e.unlink(L)}}static createIcon(e,t){const i=$e()({highlightIncrement:!1,highlightDecrement:!1,range:new zt(e-1,e+1),numberPickerOptions:{pickable:!1,tandem:Oi.OPT_OUT}},t),n=new dR(new Xn(e),new Rn(i.range),i.numberPickerOptions);return n.removeFromPDOM(),i.highlightDecrement&&(n.decrementInputListener.isOverProperty.value=!0),i.highlightIncrement&&(n.incrementInputListener.isOverProperty.value=!0),n}dispose(){this.disposeNumberPicker(),super.dispose()}setArrowsVisible(e){e||(this.incrementInputListener.interrupt(),this.decrementInputListener.interrupt()),this.incrementArrow.visible=e,this.decrementArrow.visible=e}}class pR extends cm{constructor(e,t){super(t),pr.multilink([this.isOverProperty,this.isPressedProperty],(t,i)=>{e.set(t&&!i?"over":t&&i?"down":t||i?"out":"up")})}}function mR(e,t,i,n){return new Hl(0,0,0,n).addColorStop(0,e).addColorStop(.5,t).addColorStop(1,i)}function gR(e,t,i,n,r,s){if(t)if(n.stroke="black","up"===e)i.fill=r.up,n.fill=s.up;else if("over"===e)i.fill=r.over,n.fill=s.over;else if("down"===e)i.fill=r.down,n.fill=s.down;else{if("out"!==e)throw new Error("unsupported buttonState: "+e);i.fill=r.out,n.fill=s.out}else i.fill=r.disabled,n.fill=s.disabled,n.stroke=s.disabled}Zv.register("NumberPicker",dR);class fR extends(cR(Lh,0)){constructor(e,t,i){const n=$e()({arrowsSoundPlayer:wT,arrowsPosition:"bothRight",arrowsScale:null,arrowButtonFill:"white",arrowButtonStroke:"black",arrowButtonLineWidth:1,deltaValue:1,xSpacing:5,ySpacing:3,numberDisplayOptions:{cornerRadius:5,backgroundStroke:"black"},touchAreaXDilation:0,touchAreaYDilation:0,mouseAreaXDilation:0,mouseAreaYDilation:0,valueProperty:e,enabledRangeProperty:t,disabledOpacity:mo.DISABLED_OPACITY,interactiveHighlight:"invisible",tandem:Oi.REQUIRED,tandemNameSuffix:"Spinner",phetioFeatured:!0,phetioEnabledPropertyInstrumented:!0},i),r=n.incrementFunction||(e=>e+n.deltaValue),s=n.decrementFunction||(e=>e-n.deltaValue),o=new Jx(e,t.value,tt({tandem:n.tandem.createTandem("numberDisplay")},n.numberDisplayOptions)),a={baseColor:n.arrowButtonFill,stroke:n.arrowButtonStroke,lineWidth:n.arrowButtonLineWidth,focusable:!1,soundPlayer:n.arrowsSoundPlayer,enabledPropertyOptions:{phetioReadOnly:!0,phetioFeatured:!1}},l=new ZP("topBottom"===n.arrowsPosition||"bothRight"===n.arrowsPosition?"up":"right",()=>e.set(r(e.get())),tt({tandem:n.tandem.createTandem("incrementButton")},a)),h=new ZP("topBottom"===n.arrowsPosition||"bothRight"===n.arrowsPosition?"down":"left",()=>e.set(s(e.get())),tt({tandem:n.tandem.createTandem("decrementButton")},a));let c;c||(c="leftRight"===n.arrowsPosition?o.height/l.height:"topBottom"===n.arrowsPosition?o.width/l.width:"bothRight"===n.arrowsPosition?(o.height/2-n.ySpacing/2)/l.height:(o.width/2-n.xSpacing/2)/l.width),n.arrowsScale&&(c*=n.arrowsScale),l.setScaleMagnitude(c),h.setScaleMagnitude(c);o.boundsProperty.link(()=>{"leftRight"===n.arrowsPosition?(l.left=o.right+n.xSpacing,h.right=o.left-n.xSpacing,l.centerY=h.centerY=o.centerY):"topBottom"===n.arrowsPosition?(l.centerX=h.centerX=o.centerX,l.bottom=o.top-n.ySpacing,h.top=o.bottom+n.ySpacing):"bothRight"===n.arrowsPosition?(l.left=h.left=o.right+n.xSpacing,l.bottom=o.centerY-n.ySpacing/2,h.top=o.centerY+n.ySpacing/2):(l.left=o.centerX+n.xSpacing/2,h.right=o.centerX-n.xSpacing/2,l.top=h.top=o.bottom+n.ySpacing)}),(n.touchAreaXDilation||n.touchAreaYDilation)&&(l.touchArea=l.localBounds.dilatedXY(n.touchAreaXDilation,n.touchAreaYDilation),h.touchArea=h.localBounds.dilatedXY(n.touchAreaXDilation,n.touchAreaYDilation),"bothRight"===n.arrowsPosition?(l.touchArea=l.touchArea.shiftedY(-n.touchAreaYDilation),h.touchArea=h.touchArea.shiftedY(n.touchAreaYDilation)):"bothBottom"===n.arrowsPosition&&(l.touchArea=l.touchArea.shiftedX(n.touchAreaXDilation),h.touchArea=h.touchArea.shiftedX(-n.touchAreaXDilation))),(n.mouseAreaXDilation||n.mouseAreaYDilation)&&(l.mouseArea=l.localBounds.dilatedXY(n.mouseAreaXDilation,n.mouseAreaYDilation),h.mouseArea=h.localBounds.dilatedXY(n.mouseAreaXDilation,n.mouseAreaYDilation),"bothRight"===n.arrowsPosition?(l.mouseArea=l.mouseArea.shiftedY(-n.mouseAreaYDilation),h.mouseArea=h.mouseArea.shiftedY(n.mouseAreaYDilation)):"bothBottom"===n.arrowsPosition&&(l.mouseArea=l.mouseArea.shiftedX(n.mouseAreaXDilation),h.mouseArea=h.mouseArea.shiftedX(-n.mouseAreaXDilation))),n.children=[o,l,h],n.keyboardStep=0,n.shiftKeyboardStep=0,n.pageKeyboardStep=0;const u=_.pick(n,Lh.REQUIRES_BOUNDS_OPTION_KEYS);super(_.omit(n,Lh.REQUIRES_BOUNDS_OPTION_KEYS));const d=()=>{l.enabled=r(e.value)<=t.value.max,h.enabled=s(e.value)>=t.value.min},p=e=>{d()};e.link(p);const m=t=>{e.value=t.constrainValue(e.value),d()};t.link(m);const g=e=>e&&l.pdomClick(),f=e=>e&&h.pdomClick();this.incrementDownEmitter.addListener(g),this.decrementDownEmitter.addListener(f),this.disposeNumberSpinner=()=>{o.dispose(),l.dispose(),h.dispose(),this.incrementDownEmitter.removeListener(g),this.decrementDownEmitter.removeListener(f),e.unlink(p),t.unlink(m)},this.mutate(u),this.numberDisplay=o,this.addLinkedElement(e,{tandemName:"property"})}dispose(){this.disposeNumberSpinner(),super.dispose()}setNumberFormatter(e){this.numberDisplay.setNumberFormatter(e)}}Zv.register("NumberSpinner",fR);Zv.register("OnOffSwitch",class extends l_{constructor(e,t){super(e,!1,!0,$e()({trackFillLeft:"white",trackFillRight:"rgb( 0, 200, 0 )"},t))}});Zv.register("VSlider",class extends zx{constructor(e,t,i){super(e,t,i=$e()({orientation:$t.VERTICAL},i))}});Zv.register("VerticalAquaRadioButtonGroup",class extends Ob{constructor(e,t,i){super(e,t,$e()({orientation:"vertical",align:"left"},i))}});Zv.register("VerticalCheckboxGroup",class extends cf{constructor(e,t){const i=$e()({touchAreaXDilation:5,mouseAreaXDilation:5,spacing:10,align:"left",stretch:!0,tandem:Oi.REQUIRED},t),n=qb(e,i.tandem),r=[];i.children=[];for(let s=0;s{r.forEach(e=>e.dispose()),n.forEach(e=>e.dispose())}}dispose(){this.disposeVerticalCheckboxGroup(),super.dispose()}});const yR="data:audio/mpeg;base64,//swxAAAB5g/PnT2AAEODWz3MPACATcwAQxWRG8v4t4m5Y0gGrH+vEEIQ0J864QJgfEs//KUlhYscDHWH/BDD+7p8EAQBB3pBAEAQBABg+fwQAAABLbkkl+wAAAAAAApUEcylxWEbBYbjKTtTlM3eamWe5RAcBxA6VypWY/T+Lr1S1waL6rSucRXH9ORv3pvMuaX8aPVHAAHBUpB//syxAMCSChfPF28ABkDiqWd3bC1gSAHIAIB+Eua0PmBBI8GxoUDjBQgFHgkCKwrcSkWU6j9Sd+KaBUriJjhajVnvzMt1d7qnsZ///XxGarCW8ICUBSEMlofMKEEMUxHBpw1wME1UzDAIKgQMlzDhMDDKBify5qB0oNf2gp6peEUEQRlcTW9MN8XxQTaJeim2apgHXh0BA42HdjNLf/7MsQFggh4Wyguaea5EwulXc0k5sOdsU8HATEgJBsocOAYml+fvgPRkTAMqGk6FmJpDTjOn1MGkcUStpHsmIbInFwJGEsLanJYVDH8wCQSw4BWcJUpo5emDQ4bvFJ8R8GGQ8Y04EKYPAAk7BdNV8H2mJ54aS6xWdoQwIjE7LBlCLKCIUyihd/5O1Pr/Z//r//+ugAkgUDASheRbs7/+zLEBQIIMF0i7mknUQqKI43cjOo+4jDKZN4nQ+nnzAIQAIFAOgYZUEPnmTwex2HYpllk6m47QrXB/jCOonH1PVe/P+7f/yX////+oAJ/YCSrrMBgnNhCHMIDzMAgfM3JgRnS+W8QBgr0D4Pqy1k7lMfZVff9q1aA+omBkMhA4OM8FGFw99bPp+T/fX//9dUAKAcCZaSBQNNowTBB//swxAaDB/xNGm7hhtEICaLN3DDSlmkhAGok1mBAQFtknQ4AT4+pYJAiw0w4BwzUW4PaQgrVEGL6z0z0QVwH+d6Zr///6v8oAG7eA3pboQCSbFGAYeB2anAuc/ywAh/BhEZkqxPg7Bp8kJci1ITUM1YE9UZUPaWOT+Ks/zzcz8VejwR+j/T+z9HSADd3AQ+ZeKCgZHp2Fh8NAB5O//syxAkDR9RNFG7hJpD2jqINzpSynmlDBxw8IELTAVYo5IBlgwaHhk9qYTAyl58Dpjtf6q3Dv1vTRnvlv8S/6P9ABicJuxgUDmP6IKqoMDx1iggKEpYCCGUl4HnjMrXBkpxbk2rPIg7z9PwGIK9Ap1blL/0jaJjb9f+W/PU/5aoApe4BRQuWYMAobdPOYFIYaMk6fJDqYhBGg0Dsu//7MsQOgwiUUQZu4MdRBQogTdwY6oFDoaFxGnF+6NKF+px/5Pgxp7nlue5Ehb/4DjJz2n9+z8633/7v/KgFMbgIZImmDYHG86VGIYtGiJdHPZNmA4QJDruegBSAp2mvCtqonzjRyjPTPpc6RzbxeJPndFfzH/Zkv/9X75b/LSHIAAIqqsBDGcsQI0YnBj5+kYCQsu4vQoAi2rOVhXH/+zLED4JGvEEAbm0jUKoO4KmTCVZRFoN0WXzjW0zW6Q28yWOZvKPjXpnMNBsVda1ccCOMpS9GgcVUAh+JxR+hMHbWqv3wolHgh/gLfq3QCfwYlZ2+kmoAAAqSPYAAAZXQtxfw5RFhnCEoyBHegrALYEK6pBnXpBhS/4ci6AoaNlhus1y3kjUghRNDGRIyxJtzBboYMpeic0Op0DSX//swxCMCxQBO96eMy3C2A0AB73hMkPMgl18xMmNDDAXHMEdYykxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",AR=GS(jS,yR),ER=IS.createLock(yR),vR=new zS;let SR=!1;const bR=()=>{SR||(ER(),SR=!0)},TR=jS.decodeAudioData(AR.buffer,e=>{null===vR.audioBufferProperty.value&&(vR.audioBufferProperty.set(e),bR())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),vR.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),bR()});TR&&TR.then(e=>{null===vR.audioBufferProperty.value&&(vR.audioBufferProperty.set(e),bR())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),bR()});const wR=new Jb(vR,{soundClipOptions:{initialOutputLevel:.8},soundManagerOptions:{categoryName:"user-interface"}});FS.register("boundaryReachedSoundPlayer",wR);const VR="data:audio/mpeg;base64,//swxAAABognHnWRADEriei3OrACCEgYAPOkFXghY6uD++Piw3kA4B4y7hchMBxIxLKSksCwfB8Hw+7wfB8H3/E4P+GP/++D58AABoNsRiAAegAAAcAAwfGEzHKEwATU0FYIw6Dg+OLEOCqwYUAazcxYAwgAWZl5g4CTyjQM3o0EQLO/PjeedH/0g7/quk7v////9CoAAgKS3agA//syxAOACFhpYb2WADkFBWUpz2ROAUr4AUY00DNWPwkiueFpjWamdXncJm4WSUvPYHtdLyIybUkqNbEdOAeIJqJS89odMGRdRGULsKEKKu9sAAFgQA2oDCIoIgGYfBxqSpmFgSkaq7FxnJizGCsESGsoBS/52SlqFCkhXIYlBMPwLKiSRYVd1f///7f/lUfvy2gAAL45ZHAEVS5wEP/7MsQFgkd0HRVM9wJwooOhqMw8TrAOxggWZrdB4KswIKoWwjoMDKpkDpawRH8EDMvQbb5c2fQ5IXBwEGakBD9/3/5ub1lQm4/cLYHDTARtPRS+xTotNKqDqFAVBUFeVBUFU4lBYO8sDQNB3iIGqkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+zLEFwPAAAGkAAAAIAAANIAAAASqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//swxFsDwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//syxJ6DwAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==",PR=GS(jS,VR),xR=IS.createLock(VR),CR=new zS;let _R=!1;const RR=()=>{_R||(xR(),_R=!0)},NR=jS.decodeAudioData(PR.buffer,e=>{null===CR.audioBufferProperty.value&&(CR.audioBufferProperty.set(e),RR())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),CR.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),RR()});NR&&NR.then(e=>{null===CR.audioBufferProperty.value&&(CR.audioBufferProperty.set(e),RR())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),RR()});const MR=new Jb(CR,{soundClipOptions:{initialOutputLevel:.7},soundManagerOptions:{categoryName:"user-interface"}});FS.register("grabSoundPlayer",MR);const LR="data:audio/mpeg;base64,//swxAAABpAhE1WQgDEChGf3OiJCAAAJRgWMA3lCIUyXzv3PfM52Qw9nimjE2HsTh+X09sHwQBB10u/y4e//+gEAQ5cP/u//4nAABASEQsFsvw9GFpIAMRiGNLEgMlRmNb+1MIjHNu4KFilyMxQYzAAc3e/P+566F6J7olttvvTZ9lv1/6++U+z1qgAJHLdLYAABaRtXAaLgn8Bq//syxAiAiaBvUb22ADjOA6MNz+wKcSQr2BxEgs/qJ0XkEPODBEPhEBEOh7HwdhJLwTjcKQmIaxUepm3yySi6sRnp0hr1J8lYfUroW0RJYrMlFAAMN5mqFGCchxplBCFCZuwLfmAFg8RsPKaZAGhqJlpCZMCBA+iTjFW///////Xb//1B2gACzEgggAM2IOQFMKEH4x1EgzS0KJMJgP/7MsQMAkZUGwtNe0BwqQNgNawkjoI6rU0xQyo8AgUADX4Q45so+ubX4c/Qr//w0AVA5axJGw1awwFk8Bk0bAWushk77jjeDg6Vcjgr38sDQNfUJZ3KgqCoK0xBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+zLEIYPAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//swxGWDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//syxKkDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7MsS7g8AAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+zLEu4PAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//swxLwDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",IR=GS(jS,LR),DR=IS.createLock(LR),kR=new zS;let qR=!1;const BR=()=>{qR||(DR(),qR=!0)},OR=jS.decodeAudioData(IR.buffer,e=>{null===kR.audioBufferProperty.value&&(kR.audioBufferProperty.set(e),BR())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),kR.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),BR()});OR&&OR.then(e=>{null===kR.audioBufferProperty.value&&(kR.audioBufferProperty.set(e),BR())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),BR()});const HR=new Jb(kR,{soundClipOptions:{initialOutputLevel:.7},soundManagerOptions:{categoryName:"user-interface"}});FS.register("releaseSoundPlayer",HR);const YR="data:audio/mpeg;base64,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7e9diUP/+zDEqoMHICsabPMmEM4Eow2e5MIIZrVcxtoYKA8xbIDmUnGddoh0rLaVhaELboGA3I///+32tj0qUhAXA4lABA0VFRzYs5Bxwo8cRAZqIgBjC0wyrCVrVBy0Sl3U0lLcrNkmJX3vXQ9xHrF1kft9KnLd0/5XIPY0tSK0DTykPgmqBACpusgAjZhT0YwByozh1IJWKp2KmeLt9Ov/+zLEt4MG7C8QLXcGENuFYg2eZMLR2pQ6RirmqAoCYKg0PHnDwUA5I6x8afWSCCjoaGWkABNLoLs3MMFnGvzaGfMY2VvKaYxjfVvVP6f/9DGVtSlb//VsrzTGDCnJFXIg08GgaduIVUxBTUUzLjk5LjNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//syxMQDx4gzCgzwxsDphiFBzJkQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7MsTMggc4KQgN5YhA0YShqJwkmlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+zDE2QBG9BsHQYXiANIdX3A0iMBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=",GR=GS(jS,YR),FR=IS.createLock(YR),UR=new zS;let zR=!1;const WR=()=>{zR||(FR(),zR=!0)},jR=jS.decodeAudioData(GR.buffer,e=>{null===UR.audioBufferProperty.value&&(UR.audioBufferProperty.set(e),WR())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),UR.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),WR()});jR&&jR.then(e=>{null===UR.audioBufferProperty.value&&(UR.audioBufferProperty.set(e),WR())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),WR()});const XR=new Jb(UR,{soundClipOptions:{initialOutputLevel:.39,enabledDuringPhetioStateSetting:!0},soundManagerOptions:{categoryName:"user-interface"}});FS.register("resetAllSoundPlayer",XR);const QR="data:audio/mpeg;base64,//swxAAABriDQRQRgAEmkW2XHpAAAJQAAHgAAGAAAABIDu4cDd3/r/1wAAAAAARC/9EREd3d3PQDFg/D/lAfflAx/BMH9QP/ghBDaMSKQDL9Jl8zrxkLJ1driXbAMCtXKORoVLbBiwvIKx8m21HBZEfMq/0x/+KVG0Sv/////Uc0dO+i8Kkj3feKlhICwuZ+X8KkA4p+8BQpQAET//syxAOAB+BfSzzDADDmiiFBjAzgIQWVhDQDISg5HQzTHx2LQbHxpFGUeaRR9PJpFGqnPX9VQTICeoDA0eWdqBpYb9GV2lga/wVf/Boz4EawwCWbQYHfhmyxUqUCkE48QHSMRwuglOIhIgJrr1hocKgoLSa/2MFBBwSJBQkaQDIkNVC6Xfi9TEFNRTMuOTkuM1VVVVVVVVVVVVVVVQ==",KR=GS(jS,QR),JR=IS.createLock(QR),ZR=new zS;let $R=!1;const eN=()=>{$R||(JR(),$R=!0)},tN=jS.decodeAudioData(KR.buffer,e=>{null===ZR.audioBufferProperty.value&&(ZR.audioBufferProperty.set(e),eN())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),ZR.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),eN()});tN&&tN.then(e=>{null===ZR.audioBufferProperty.value&&(ZR.audioBufferProperty.set(e),eN())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),eN()});const iN=new Jb(ZR,{soundClipOptions:{initialOutputLevel:.7},soundManagerOptions:{categoryName:"user-interface"}});FS.register("softClickSoundPlayer",iN);const nN=new Jb(WT,{soundClipOptions:{initialOutputLevel:.7},soundManagerOptions:{categoryName:"user-interface"}});FS.register("stepBackwardSoundPlayer",nN);const rN=new Jb(iw,{soundClipOptions:{initialOutputLevel:.7},soundManagerOptions:{categoryName:"user-interface"}});FS.register("stepForwardSoundPlayer",rN);class sN extends gb{constructor(e,t){super(t),this.soundClips=[];for(let i=0;ie.play())}stop(){this.soundClips.forEach(e=>e.stop())}connect(e){this.soundClips.forEach(t=>t.connect(e))}dispose(){this.soundClips.forEach(e=>e.dispose()),super.dispose()}get isPlaying(){return _.some(this.soundClips,e=>e.isPlaying)}setOutputLevel(e,t){this.soundClips.forEach(i=>i.setOutputLevel(e,t))}}FS.register("CompositeSoundClip",sN);class oN extends Ab{constructor(e,t,i,n){const r=$e()({initialOutputLevel:.7,loop:!0,trimSilence:!0,fadeStartDelay:.2,fadeTime:.15,delayBeforeStop:.1,playbackRateSpanOctaves:2,playbackRateCenterOffset:0,resetInProgressProperty:null},n);super(t,r),this.fadeTime=r.fadeTime,this.delayBeforeStop=r.delayBeforeStop,this.nonFadedOutputLevel=void 0===r.initialOutputLevel?1:r.initialOutputLevel,this.remainingFadeTime=0,this.setOutputLevel(0,0);const s=e=>{if(!r.resetInProgressProperty||!r.resetInProgressProperty.value){const t=Math.log(e/i.min)/Math.log(i.max/i.min),n=Math.pow(2,(t-.5)*r.playbackRateSpanOctaves)+r.playbackRateCenterOffset;this.setPlaybackRate(n),this.setOutputLevel(this.nonFadedOutputLevel),this.isPlaying||Tn.value||this.play(),this.remainingFadeTime=r.fadeStartDelay+r.fadeTime+this.delayBeforeStop}};e.lazyLink(s),this.disposeContinuousPropertySoundGenerator=()=>e.unlink(s)}dispose(){this.disposeContinuousPropertySoundGenerator(),super.dispose()}step(e){if(this.remainingFadeTime>0){if(this.remainingFadeTime=Math.max(this.remainingFadeTime-e,0),this.remainingFadeTime0){const e=Math.max((this.remainingFadeTime-this.delayBeforeStop)/this.fadeTime,0);this.setOutputLevel(e*this.nonFadedOutputLevel)}0===this.remainingFadeTime&&this.isPlaying&&this.stop(0)}}reset(){this.stop(0),this.remainingFadeTime=0}}FS.register("ContinuousPropertySoundGenerator",oN);const aN="data:audio/mpeg;base64,//vgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAbAABySAASEhIbGxsbJCQkJC0tLTY2NjY/Pz8/SUlJUlJSUltbW1tkZGRkbW1tdnZ2dn9/f3+JiYmSkpKSm5ubm6SkpK2tra22tra2wMDAwMnJydLS0tLb29vb5OTk7e3t7fb29vb///8AAAAATGF2YzU3LjI0AAAAAAAAAAAAAAAAJAAAAAAAAAAAcki0UD1PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//vgRAAABp9OzoVrAALW6mmgrWAAYAmtP5nrAAuYNadPPVABOnPOO7NWXLlGYZHEpHatHWlG6RGhImPImTKmTImPGmLEmFAl223j8P36kohhrCwigiAcu+BQmM5recYm9ZnCXHTUYWY2nfp/+fbnFZlCXHLiIOIqJiKkYg1yHLHf/DDC6+7O0xEJBdwvAkQyyclb/u47j+P5GIxGIxGIfjcbjcbp6e3nhhhz//eeGGGGGGH/////////////////////+88887GGGGGGGGFPT09OHh4YAADugAAAAAGHh4eHgAAAAAGHh4ePAAAA////Dw8PDwwAABB68p3ZpuUIFBGmiHc2H28HyxHMXGpKmVPmpZm5fnDinHhm/ampLjwcKhAR0U1TpDlswCMzrNqztI6UOlDtg9cP3j5g6ONhDWFSZfQ0QOlDk40CLiJgJFqnWOu9ibO3Lct33IchyHIchyIclnKkojD+OQ5DkOQ7jvv+/8Pxunp8+///+eeeeGGGGGHP///////PPPv//////////////9wwwwww//////1hhnnnnnnnnnYpLGAAAAYeHn///mGABgAAB4eHh4YAAAAAB4eHn///HAAAAAAMPAAAADEAAAAAArSwMCoUk0Ow3TAlKFMycQgwYC1THyEWMCoHcwJwRDA1ArvGAIAnIjAmA2MEECowXwNHEMEYFOJAYAAFg3xbiiCygCQDAIAmBgeAqcNg+piOgBICwMCwqgNLgKQCQCAYDwKAYYR+gYqRkgYKQFCcQMJg5wM7YWgWA+J8AMAGAEAEAAAIjoZJJ6ziKVZwBYA4C4VAMLAFwBgCivCUiKhCFICwJSJKUToIQhAsAAtrlZIyIETJFTWtlV798xIaTRFi8iyKb267IV9qjImiZIqRUyNjpkXv//V8R0LNEFQy6McKCGaMTVDMUjL////8yWiXTIvF5E1byQ0AAAAOVAMAwMhYTSHDpMDUrkzNRCjBsMPMdoQgwNgfTA9BcMD0DlCQYCQEIwAKYmgSBhohUGLSHMBgHDEqE5HgBwMREcDJBDFsFvGCSAGNBmACHAMUhwqGgn44P4DgIBhdIgf7FAX9BtUDJzOA0EpgMQAMUYDHrCA8wSQWBgxRCYXEITDpFanXQoG7u6QBgDAXBggMQ8coXMdFMGRd2RGeJjULmJkiprov//Mi8kpIvIsjQdvZbU17dJEukBJoixAjEiv///mrGI5I5QuYVsQ0c0ipkRYmjEu/////trSSLxiXS7CqCgAEYwCYClMFkCLzB4gsQ03Io3MB+BYTBlAU0wTYBvMA4ATTAPQGAwCwAdCgAEYAeAPCQAUYH6DzGAegMxgEoBYYA+ACpJhAByqiy1spTyBTzE2ZNbg5rylSlwgABMBA//viRC+AR7Y5yRd/wAEEMDjg79gAHylNJ0/tNsPLKiPp/ZrhCswRAFTDRFqNkgQgzBRfDCfAYMAYC8wQgLRIBlqgQAM70kgSB3avTdfGgs2ZnKPP8hOLvKiCoBBgOgiGGSF4YRAIJgFAHroZU334w7FbM/Ur9xtf+tc53DmG9fvnca1qzrnN56yyy73lYOiW1A4GhGRTaGkjQEWNqF1LaKlmhSYFTwog6PgIWvpQayF+hCNJrV8VYaKICqTASgQMweoMdMJ+DxjbejakwRIHhMHcB4zA/gCUwFgAyMBLAwDAcAA8ZAdjArQMQwIkCOMSvJhjAcgVQwQ8C6MA1AQAwBCAUAqAEDUDAgBsDAIBEMgiqAsAkT6T4igsoQhDiQupASAADA2DwDCuBwDG4ZED3OSMDZQcEDFMEEDAiEwDCSEQAYEwoMOJJsdwyZPDOFw6SQ9JFMipsXh+IETxWGkYCFgGAVBZeF+x4JYqlkwOFsvl44XlmyFNakr2Wm2irSdXt6l3fZ7WVqvVU21Glo3u7v1PdlIr+r1/tr11q39nXqSbSWjepVCyNlJKM6brMlPTPLTZjjPZBJ0kTkpoOkbn1IBiGAht/4YBmAKGAwAF5gnoEAaf6H7GEogJBgRgBeYByAIGAWACRgGoACAQAswCQAqRLJQBMwIAINHABUwAMAuFAAMveVgAK3XHa07Dc34bu3SFOazdiEXcRBcwBQAAAoFOYjSFLHHnBVA1kNzVWicenX5sxqlg+WTdSvh38cpqSyaXPgh1MWqwMwGMhwhF0TFsuRVcB5mtNziE5K8CIlHiUmIDaZA6xE99NdCiERMz2iJEfD4oUWNWkRT8cWQlYUlmEJijSU8Q0yIZhaWEt2RGiyjyz7VJWFZ0q0ki1oJgE8yNB08FjQQFzJsoPBoHSQaCHkP/p9ht9AEAIDukRgHIA0YEwAfmC5gD5tn4bMYVSAgGBUAGZgEwDQYAWAOiwAuLAFifpKAPDgF+YNsRbmArAJYYAqNcMAOAGBgAVAQA1KkXkJMdW2nUruOR63L4oxNAwwBEATJQLwxPIJxMsgzCQ4wYVLdK8R0XquSah+ISmURu3G7Oqe9duVoxOQw0RwxgVHkQoO2Czjys6j0YcqO3pa+la43aX0kblFqXRei1P6pta1oixRwUHXBSYOkqmSXV+XbJ9O+eMf67s74d43vlVvmoNzLPl2R+2pvNb/9UN17yx9r+55MuH/X3dPvvwLAJdwGGfrBYvXdhNAQBI0DAmAKEwMcEaMLAFATskD34xQIBhMFtAPzAigB8eAXzAHwC4wAgBCMAQAD1sGAKgJBgWAlUYEuAVmAQAFjEEqjAEwAgRACYcALJuy5HVFJfdVrTWZJXa4xYiAGAgA7MBnBaDH3hBP/74kQ0gIgWgkYb+0Ww9q/pB3+ojl5l9xrv9Q/L70AjTf6Kec5KVM3UDDBURixggKHBSAVRZlE3D0fsSWVSGNVqe3julZDHmlvqKgRmjMBidFRV8hi9SKT1JWw3Y7hAMhCH4diqB3kDRMdEsOIea5uBhwch6QUMZ5he5ipiZmIE89TcDCBoO9z+Htt1z6EX/x9d3X//P3/zx89TzV8T9TPPMFV/bnpMSPosii6Nbsgo1aLTUURiJs27mQ/liDQEBEHfVmAeAGpgG4DQYHEEcmrUD+xhFwBqAgcMHAQiHQwAkBGAgBOYBIAHAoAdMAlAXDBUhjwWBfhIDFRzX4OACzJAEARp6BwCtbhtx28daryQw/DKxxIDDAQjTv2EDJkQBISTBcAiUDkKQqAqsHwLHH0jcRbHDEhfvc/X3KK1aMw29M2jgXfKwBbtKpVE8YXKLPcc727MCO61+URXPG5n2/lSZ5ZqPeKHtQeBYFqniENEJbIpTxxI+KooacMPtMUKRxQVBrXNxY6buphuSnvm06vjv/55rvWZn/6h+ac/Ujt1qr4j/+vv/q/ruae96qXj3j/HKYrgoAAEjZMBvAqjAgAL0wVsa4NjFWNTAIQUgwQwDFMAjAgCQB9AQFgIwBlCswC0AACACAwPsGhMDQAcDATwDkwCsAhMAZADTCQCy1aP621wM5jDs2Wr2IGeqFvwmGAhRMFFbP7a2M3QYMPAJFgmEQEpUtchharF2oPo3KO9h6esUs5cxm7VHu/yTmBILmEgJojyCv2vuX26tzCx98HHEE00Qw9FheBdZKHEaxd2lj/MHp3SjmuL++53bFolZ/fDqav5DcXHfxj01qlmubifj/+eXn//9J++ZlHXISKxuq8TV8Ts1yOibmlrUbIxEErUVj92O2VwAJa2TAXwLAwH4A/MEhE7DVD0r0wb0HCMCPA6TAZwDIwCwAQMCEABgwAjMAAAOCyRgIQAsYWuLZjQWYIAD8GgBZgEIA2DgEFCtOsOAMQcADsCWkmpHneVgicPS2faaVQkMCTkOUEtM7AHCwHBcDUK0vGSvy3uMZhtlD+wHL5VI69TC7D9NlYgl+3dAIEmAYTmMoKqxOQ+FCx+q/7DKOWwHOW3EkF9o8gtxy7TXc/pMuY3+VL1mthvOV5OhLse9w5n9bCpnR0PmHo3nQTozRd2r91ZzM6vf9NK6qnSrTfdXKwciObU9iyFq9KGcrupkZjKl4J3BBnDLqFVcaSqDAFkZMAsAazAEQXoAiupiyy/kYFIEYmAQgQxgaQAKYAMAxGAdgJJgBQBSBgER1xCAGmAEAWhgQYBuYBMABGABgCg6ANhgAwRACCUaMwBAqwQwC09E4JUpbLNyx90rA4JkBgOzOEyYYQguGKQWIwArtP/++JEOIwHwHZGm/xEcwiwWNN/Y55hSgkWb/ERy8OxI7X9LfnstTFmHw8s25SSqfldPlL5mPXX6oojDL9QkKBMiIwkBn9lkN5U9e1WvX5zucExTc82SNV52O9iNvGtSb5UbE8QMFRdvWZv5moH0w5buhF4vTkyhDqeYw1ezz1NE/0s/z3PN/8/6VfLw/F/0k8O19dvXHjZti5pnaFi2bljJhaQI1VpohlipFgAP6RkwCoBHMBHBVjAbxF8xdZVgMDmCfzAEgLowAYBvMAHAJBYBKAgAYYBoAFhcAMDgG8wmwJoMFpAbTAGADowDkADMAOAHUoC+RgAAAaYAQAKBwAmkAiC5LsNYbjMUdLDr5pSGDiJ+NWd0olQSJgtw1yytmUXXbAEuahJ8sJfUmGnt5J5BtgrlIihYJMIAAojmFshj6csxcAoBGIgIsFJEs5Q1ZshszxymkrniEtp7c3MOzGKWhsX7v6uZ61hlreUzZeqF/l+s6t/9Q0GhVBSzwcYUjAIw8JC6EMu8LOF//p6X/7t3/88zcouVN0L/PY9Z9NkpNLUREshEyZX+HDotEnCchQocMUgAVsSAAAKjAmwMkwUwSaNMcbhzDugtwwJMFhMEcAhTAeQNQwBYAAMAuAKDAKQE8wAsAaCoAAFQZkwPkAxMA9AXTAEAHAkABTAOACRXxf5qJZUgBFGBgjFlKYrepLb+Kxq4BI5MRvQ4GHQEN1zF0HXRxgaGG6ODGc5C7UPSmrK56ci72WX3ehw3lSuEAjMoAoyQKjCYLVtLXkQUkrawpAaoRImwQ0yOXyuIWWVwDhLIXR51q9qk54+kczKOCQoDyIKGsNdb+lb644mPp31yO9vD9pju4+LTq/mP2//5v/vTuu/q9XmuvQgv4sQXGyOiCJ6R0WKLJapMaxYcINs4sSo8sOCjibgpBOxLh4AAYgBAK2siJACAwF8C5MCYDQjLDkCUwbQCsMChAhzAWABwwFcAJMBQANjAGgAwwCEARKwAAwAwAuMFfACAEAhmAwgI7CAMAAEQNHxcTZljsodtYjd5K3CzTWM4chtnJ6Io1uByBXbDFzx53Yg3all8JkVFPSy7uNUtqTO3Ul7kUHXDN8nPEXDiSJKm5QAZo0JoKu3we1lDxyslEYfiSGdvUHemo/q6XZtSbFapwlEx+n0hTJptVKbLY5kMl9vaxezt3e/VuPt3setPUdzXuf//98/f8M+30qynySOGW8/bXmQZ/9x1KfsFFgDDrKto8QaAAQAJgCO/kQkBsBg4TDnE5P/2fgxWwHTCeABMFcDAhBLMBgBEWAwMAAChfYjACMEoVImELCoEzviQBC7BICRY7I1yTSdLopnu2la/EQ7qOv4sOYCYQR1ZKFz79MtZRLXZWXLGTT1//viRDMAhwWBx+vZLdMFUFiqf2h+XaoFFm/tD8wFQaJN/SH4yAbkkk92phesSSV/flVGXBNQQ9Ci5LKFjNCbacohIOQM7hm5TtagS/TwLbjEul+PLFe3Z3fxvy2lpMt4WpFEX3vztXUs3v+K222Q1qkkxN3bcAEuq1PdlZvNz3/9N+r3TfKz7kOzVRZ37Lf7EQhWcm0rVkIRaOjMxR9YABAAAeMoDwDkYF4ADmC+gh5tUKfgYVCAIGBSAQBgD4BWYDaAEmAigPJgBgCAYBgAMCAAFMALABzBVgTowBkBRMA0AHEhjABQDwMOGhssTCe5XybqtqtzzurDUzWgB4FAAIDmXzgO3Bo4MIDnxR90vJnDbwNXbtKKGAZy1V1jems6eGYs/VdNQGFRnAOZEUmHESRQsBFoFdqYl607i/iuaVXYFCKWIIQBYyqFaGDRDvFvin3FXeqiLTHkrEW//1xP9J9bc9skDohYWexDjjj2aY3/6+e6/q0uliaipuYHptPeypzcDrpCBtDT0JEsnUMPMNkWLiXG32jQLckKguIBYkHyHp4cGQrEgYCgAtmBAgbBgvANmbM8KJmEiAh5gp4C8YE4AZmA9AExgMAAQOgFIjAJwEAIAQARMEfA2yIDEMAiAGi4KgIKFywAOSwpeLdZKxlH1xtUU7ng9CRRhoMY+1HEBY9GEQ8WwCAFevFY4HppPMxaJSrkhsX8LEamZLalsthpsRiQyKAbTobkUA53oZczlWk++JhqhOPGWDbCQwPQ9bzFLPWZRRgjkgyILKRTxUTrc+kXNbayjNSXUXbB3P//K/t/P1x//9af8afVNXe/7R7xD042ISjlXHRG3UllbuQaOFhaDaGMiyrNIxEJspLtgByMkGApAJpgZIBUYLgDim8KGA5iJwIKYJGCWGA9AVAcAWGAfgEwcBWkgAiRAFIIAFDBNwRwwRYDSbUOAkzAFADUmpBgww5IUFDopBuDqBdKunXaBh8qcIHAjBljfuT+YwMbRVLIQOtFe0sSviNSfd6pKqSapIu4sARxI9oyaVIEFGBGKYHCMm8Fu0rI4SnavGauS7MOSC/I4UIAWCQPJBUeDYweQIEiceIF0g5h5SINE8BsZ+aJIZ3nu4iPkTzLzUM2b/U0S9x3cV1w113x//0//p/NTW/1xHnPCd9Jo4656Ua7CcwkTsNHmQVTDmWh6MgsL2zC4hUIhdI2QHTDtx81AIAOFC6NkwDkBIMBoACTBBQuI0YkiRML9BdDAWgAMwBEA4MAfANDAIwCQwAUATJABxDqYACACGCOANRgDoB+AgChNcwBAAfAgAeFwAJE5VVIpK1FVka9F2MVa7D02zqTmNhRr40PBBzIMXGexgr6rTZ2oY27D2+WRJ4ZgWP/DNvC/v/74kRBAAf2gsZT+0RzFTB4c39ofiC6CxTv7RHLoMEi3e0h+VWpfwiTKSEAMGDy8lRq8ii8vgakSLiUjmvcGV2qdrr+xKtfqRCkp6Wz9+UrAy5iiB1KI3PExPE7czNtfbRVT80Nm5m8JLTe75qG557p+a/+eI/ub4lOOJ2l+UWZh7h7pka6Kq3uhkNr2u1UztR0l1ZJMw4sOQXpmMYYPJhUADIgAwGUCEMDoA/TBzQ1g4m8W9MSHBdDAMQMcFAIRgOQDYYGyADmACAAwJAfBUAQGQBswJQF1MC8BATAcABsmAZzAMgDMzUQARKFQswAaCxMYUEkwDADAn/gOB41+mZpViIEOG+T0ywIH29BoYHBzNYIZwr+67DTm+icG009EHvzj0vhiGKJ/HKUIEI4LL5mw0FT0ZFQ4vTrTBL9pnjISu8u0/KViqoQGB8KwJw9U8pBiIrU8atUXVHm1MJaUq/c/F9rGkVxMS09/tMR1VVo23DdvN98dT1KWOuf+ru5Imkv1ZJWRkbwUZ2co1RUXc0QjDlEML4dwWggirCjDBguaOD4eICigOjREDwOA9IFhCDoJA5OHAIAK9SQMA+AezAYQLAwFcPZMrGQsDAgAfswPIBrMCBAZTAAQEQwJUAAMAJALDAOACIIAKx0A4MEHBujAWgB8wAgARMAtABDADwB4oALVHl+rOTtb5OxCSryWOK2tvLcODoSSBIUdjhyEw0IcJ3W8dGURd+oBcpxYpuDofltPYswA/+MahMPs6eZq5kYyYkMkwqmszwkBk0mZIGmBCSJUCMXeBujdM9Ru5TSmkprNmtS16b6bmIeqmx1nxTT9rtxU9Tz3abdR4y04qglqL++LX/+G/de//9Pjf673a+YioqLe7tLfWd77PtR9x2OHaEhx1THEmjhQWMEVyCmYkecLOISh4eNOFghAKtiQMCQCcwaQDjFoIfPrSV4xWBQTBzASMBAAgwQQaDBlAgXsWkDgHhQAQwagAhILYRgaGAIAYk6WRjIWGqCF4WHMKfAiCNAUhlE+fpaJfUxVo7SYvOXwQLdFJWTTL3z0DaoJmExuxWnpbchqJQYxK+/jrJInBImNErDLzgB+pTBERX9A1mkfqRCwjhwIQJ30DrjS4GHUX2KMKrJIg91KoPFKZE9PftNDUm9LWLN59om//6p/qPmOLuuJ/5/i/5rn/WaRXGcfN9W7sytEvLyMG9O46FGu5QoQMii5oczMLDP5QakiKgxADAIBP1JAwAEA2AAFyYC8HRGRUJApg3wM0IQGEwD8C6AIDmYB8ABjQEqVACRAGOAGJgK4LCYCcANDwCgDgJsQgEAhCA4XR0GAlQtNJUyTi/YCSFazTd49aPYkJEModyGBhkyyLqAO5Gn2abL0kGttJj/++JEOIiH7INFU/sz8PiwWJp7SH5hghEOT+0vw/DBYh39IfkmN0s5Upo1EIpSvq+8Cz7liwQYM0GElalgQXLCFxQEAIoMhEY2rtylXRF+Bg0JAwENB1AaOLFIk4mMf/1ysdL5neGm67t+37bcZnbMhO87VDCsn/94Z9eO97m9/f/+f9vn7vn7vubj5zZZ6f/GO23dBot8nL3JP1DXOZPN3XPYsyZ+s7pEEIPo9Ogdk7ABAcBOxEgwHwLjAsCNChth2r/fmBSMwDAujBGCqMAQJkwGgaTANATJgZoYAgCxhPgfGACFYYJQBQsA+BABiJ0EBS+UVTidZu6eKVi22Auu7Xc5YgKDgZp8RomoKZOeu9p7yQTEWAxp2H1e+PS2DXtmpmWw41yuw1nKwwyLZ0KEwRqAzpDdCpsjGW4No3reOtHKDOHRGIEVA6FLEQeQaLEIKiOWkcVto+J2t/ir5utOaxsXEw+2Y539cxLd9X434v56/r//eOJ7roc/8o/w60pTuxaNdjiCFi6WVUzaJPF13mWoPCxCFD7oSDBcWFREFxMKOE41RCUhxwI6AYBOAemBdADJgoYVqbHKkJGHag3JgMoCKYGCAZGAbgVBgDACYYCMAtGAVADgyAbBcAHMDQBMzAWQIgwAIAWMBFAIDACQBttDGglqQMAw4OKAAdBJawBiSsVJeqYNECwOocanGHBjgOOHQpy3KpW0TfvVXMeGC4DcWUU0zL70vp5LXmIiyluixTKg0hA0s2syCD5bhLXqp5bWp6x8qTC7BLTSBYmMG4rSRV98q+pfZ6rt+33/sf93/3XrxqVbvv//ofn+fI36j/73/c9f/5fl4QjO8v3lRlsoZOM7M7lQZVxv2jSUkr+3ZBKRaZdsKE7BpPshcVhdATTEgbYYKomGTaISoKxxnBsKfsaEAmtEACAKJgHgEEYGaF3mDkJQhgNABEYF0ASmAIAC5gJIAiYBqAjgYBEMACALzACwA0wA0ArAINqHATRgPAAcYA6ABGAMgAgMXA4ajwFxLrrcL0MdXhLloWn4sZVVkgIcFr4duLalym6pI1I3ANhu7/zNuOTkYvWbeWMD4QHSSGA1XoQGGOsQBgJCt9k+oDZUzl4pdF39uxIQxeDR7iJCUiOX3199Utnla9qn3dw8yk1eY03K9KfAgvz91c//xX/9f8/3/M+bH33FLVRZqomzmD4mpN3cYpmSeh8igtSya0g7QsHNmEHFBKMQ8QsYWdI0EhAEIo6hcWUVNNlVAAAIpvyJAwCIANBwDkYIgDJGjYCU5g+ADAYBuADhAAAYAyA8mAPAHQCASjAIQABxwIAEGALgBi/DAFABhvxYAmS1QMVnL1L0bOvGC3nh1hsHR3KYqKdlxzmdD2sBoaEAB0Cr//viRDGAB3mCxdP6K/L00Hiae0h+ICYNDs/xD8v9QWHp7SX5lgMCw44ExEIpL3Tt3rM/cq17r+yuWRVw3BBxw4Ag+6oaPLHfZ+GONKbmWhstghLi0wdiseepXYaRlHshRQTcSZnEVKOYYU0UpM/sRCleRlVGe1lw9TRUrIj/nzJ/szW7urKxVefRl2mM6sH0KOxxo2rijGE3Yw8+OKHmEg8UTFzKwfEhUh40RQDDRceACAwCmiJAIAAMCIGcwWCJjjutXMjoEcwYQtRADIYFQK5geApGAKAuYDQDIEAEQqMOIbIwmQTwECwBgcRoD4EjWGNgLdmEBOoud/SoFghdkvpcKssd1QUAEDTFmRMUfF0oOgSEw6+0pZ5I4tBszPR1x5yVMqeOItpDsDLxMVMGkxsEIhEuaXpUQl6vW7LklUQjEtdhBCvEpxgiyNRCTx8CPdPFS511HjRqT3bNrGslLuZOkT+ozuojuqf++Ytfn/vv/rjr4vmK7hz4RuknOVoqLLW3Uz32kdRzC9My0pezCkxpRbKcIgmCY0txOcKlssijiAJB1AgBmQDAXwFowHoBTMH5DiDa1SSkwmcFwMBkAmgMDvmAjAaIcBtAoDHMADAOwQAAgkAfMBvBgTAqQKERAKRQAhGABAGJgEIgEABUAiAAiQbTMXE0BcT1Ou/lNnDEikJMDzMseMCBMwyI4Wo+jQlc1egZdYbrKsKfGU3bkMUM3Ru1LJ+eXe7osCioDwwZxqHqernP2Xzs91+r8ZR8qK+1zE1LPSqtxfxtKxdTF/H21888tEdxV8aB7F99cf+3G0fXy/xxdc3D1rCRC88wUNog4tDB1MWKsfDiWyIUskVBti1NAgIMEIKhYOSMYS4lEVigiJgBpoNgUAtDoRhUJAUg1HyNAABNhCokADAfGCICcYs4tJ/yy3AotowuwMBITIwAgNjAcBDDgfjAwAKDgDkLTEXEEMF0AYwZgCDACAnEgCp9HoICrpQGomQVFTBhmZqU016TNwaIYk4VixiENYEMRIewJpjttlgJ4HGcWNQVRt25GqXuHZZhLqt+fgWIGvLGOFggI09hrT3mZ21xt+sqgOhuWzNqpVH5PJ1XhKs91W7aU7uX9ec6qPz1eSye+dxrNkdzc2Xrbzb8M3K+b/v37Xr78nmy8Pnl4QvE62dU30LGbkVGSGovhPcmRsYfZbU1MlQrCfpkKwgeGCocQjYm1swhA4s2Q4XJkCooNnigrFGxFQAQCBYkRIMCAD0wUwnDAhKJPjCuQxwAgjBXEiBIGJgmhjGBYAoYDYFBgagALHAoCRiNEAGAqDsYEADaqpMAtKFPKaoUO8lamtHo5BMfhFTeVp4k9jARBzMDUAMeADQHR9DRwozDMgcZk8gfmRuzKf/74kQ3gBdqgsTTxTfDCfBoWXzM+GDKDw0v6W/D7MGhpe0t+KHK7ey1jldlN2UMDIACjAFAJaK/0chE/eoWoPtKca02KhocDwDO4ULKcYVDqd7XYju4gPZbD2ctJFSZENrvRhstbpFq190pf0TW7NeZNbGoh2UyrMsmw4EGou8NfpPZhxBls5q+akkRLw+k3VqJxO9ZBAJIa6yQKoLJAEWjAkAgAgWgAwDgBFMCfABBUJXNUMAxzEUgUABBiwAACjASwFQwCMArGgAEwC0ADQYBgAIYKcC1GCUANxgCgA+LADQiADBEAOJKBgACpEFAAbEUEaNLaqxwlSizyjgJMpZZgF4C+TAY4jAG0gpC/CGS6ZTGH2oYzXl1/OUw/T17l+zGoCctyF+2Fb0fH7ikmg6SUmpHK6e9WoEhSCiE1sHmvzGh/fy38U0bsRVUlH9fWZu8SnV/7NtQiVf59jajX18z/H7Z6z63ynLfy3svdq2n4RmXkkTr0sNelFuuAySPuHTbDN2WCY4pKJJlopEExfRLUjRnGTYrlVeVzk8JR9RCDii1QTqLF4gHxmvFAACECUgGAWgHBgLQFiYFyGsGc7paYCAVTBMgKMwKcCOMCFAvDAagAMQgIBgEYAG7oKABDCKQSwwRgBPEABuYA8AUAAAQToL4CQAKhFxoSHgUFYwwZk02+tiYcqShAQ10016wZHtnZy5krlGDWnnl8rmYlTS+WZ6xtY1KTb+wS9bG1LB4A40C25VapqVtufPWslLgoe0+hD44hSlZu62OdTko7bNII3Wx9fzFuUu9nbZ4/ryz39+y4qmdX33PV3D/bbL4547YdYccgvoMijstlxabmiZWQedNDpy3EtiI7CScOmw/Fpw2NTQfy9VQ6VA6UOggEUhB2yeJ5cWtKZHcsb2OCcH4taAAAaBGBuBcYPgT5grkIHxvF+ZggThhphamFaGEFQJjBKA7S7MFkBowGgBASA4YsYHxjZAIGBwCWKAUGAQAICoRohdQsoBmbxKgVlaaIwj6t3fmzcjqy1sHOoAEIRRGspDQQ9z8On1xoCnYfqU8/SXr2dS9fxitLLFO+I2GQEt1jLo0EzPYU9uNSrlqLppxz2nV7UtyUL3VU+u2Vc9T/26P+1I4dHSMNt9tfc39t++Pup//t9RP7/vruZWu7nSTY1r05t55x3VSRt5Lc88klSRRRgxFVNZZjTZYnkpBRIwYRB8RNRDdJDqB5D+WEoZB9EGeJmkCQVHzdcaytQARHMrzaIMBICsKhIGDuU2ZGONBjgh7mDiHUYEoJxgHA/mBQCaIQGzBWAMMAkAIKgLmHALCIQRxIDsIAJJQCCoIjqWVbVc7KFlthZbH1K3Gi167gwFQAgpB/BFQi0X8LvsVay/7VWf/++JEM4CHmYJE09kz8u5QWK17SH4iGg0Kz+0vxCTB4SXtMfjrANjhbcopI4rH5zKX535dHpdBbrIdD0JMwot6nrK6VxoCVXRIhMXm47SEdpI2ZZm9TtPlsfsSzsVCMl2a8foZhzMufK48XW/1tif4d+Txvnf7//9+br/u7b/+//7t27M/ycv/m28S89osqnXebGKZ7ltg05OQF4MdKDKHpU56YTIQAB5zSiBpHATJAwAAAIHbe0aQMBAB8wGQdjA0G9MiRmgxlAqTAxAGAQEoOBdMAYDQZALMDYAoMATQeMIwAcxFAGhoLEZAFS2RSXOmawxJJ0mxN1MIRLMuus91MK2DZw4GYVsesWPAV7IdnaZ+0mMOu+0Yn5PSWJ6S1WYvE/U64cvXIzpTYAgzHGjRXxYCHB18Pg+8NQ2pTJpFFodh3e6HEoJ0KU3u1FYGvLvmaVW1pzFmXUGxz11M8cwsTolR11elpNP/HPI+YWZr7+Y74vjqfmvbiVu+rt5ZInGLRhyaXuUdC44UpUhKIhm4QSWa4OlC4xTqOgQ3oqEABK+QCEA0MBNBOTAQws4z/JHlMEnB4DALQEsHBJJgOAAUYByACGAPAAoWAIGFGACgJQNCiDAKgKIwAEAfFgDUCAExAAhgSYWCqbQykO57kUbcVYodkNi7In+dgy66NsARZzEIQpmmo1cmCGlLsZ+78Mv5AVA/1uZnJZAMGxGLOqwh/k3xACJvv2hyb2L3o1GJU1eY5llTpr9GvPqTnsakgtapXTT3dZliO7LGoMtVlbLZNXmb9hks/h68b84oJfPH7UXeVfffh/9r/+0/Dcjt214pa1SOg+xBOM3CmTS4+Y5DpyHesgLJHxwjQGCehsHBUXJw2hBdhsnRBwyK5zHlAYJxQfKrnShCERwDi4g0iZQASYoAFAMB0QcqGoHXJ9KYDIMhi8CLmCWCeYZwDhgTASBAcqJhgRgdJqGO6GqYsQUpgjgshgFYkCgbIOJGB1CGExIk05gyMyc0QAwZkcO4TjvQUTADMgT9shaU1xp7WZDBUcRoYOpfpm8chT/Ucbv593MVJbKo2x1GQDFgU+jszE8OVN7t1bN7mt1eZi++7k33KR9339+PNpbcxierVh/pvmNX+a3+Wa/O9WX8d75vM/0zW203+/Zmcnr3nP7pxzMhr+Vhi2swOL5dPXl2clPT5l199eftxpbLdMdiPTNEcEMsUOHLgZeQjcrvEkwLp6IxKGtVdtbAUkAwNiMOAel1QHQlxHYdDscqVQASfAgjRIMBEAAwPAQzEFK5Pvd0IyTwPzCoBzMCICUwVggjBIANMCsBswFgL1jmAIACYZog4QLwYFwHRQAGj2JFq0KoonExw8W5yOUCM3dmKwN9W68SSRrwFDRh//vgRC4I11uCxFPZQ/MA8GhWeGn2HPIPE68NPwQhQeEJ8bPYiTjIYrlnQu5DsoqwmAotK6bPed3Ws8N512iKYDSCQ9XGW6uzLsWbdyl7yOWho9hhxN8Gjm3y5pLzCpRqIIaGtY5SRm9T/MN6Yum6+XHq3PK/t96Vc3z1fxtMUlPWiI7S3KqhrjduMokqDKFVvOUUHq7qokMD+UUeRYdBkQ4BsKDxyjhuwoEwupIjgeHRxDKABa9ADAXAAMEgO0wZyaz2nf+NDsZ0xFgtTBBCNCwB5g7ABBAUxgVAVmAqAYKAPmLMTmYRACQ6AoBgVzAgAML6F/07E8VUi8T5Njau+solt/K1StnWqFgIzB4ASIgJQYAHDMCxpay8oZaBA8BOY+0rnqS7FH/h59562/D/x1gC/QgJowEwBB4AKv8WjMtjL/VYB7vrmbMhwdUPQvFEpjsRGMKsI+dZIbOZq5blmSZ2KgvPST/I/39aWh94W3Ubzavdl6YhLFEK2JTXjOMmFZkCq9KKpOIFTbSJFJYVoygpZPk6jZlJIl0y9Zk9FEJRWGAkTg4KD6wrwTHmAJDbgfNRT0ESoTZpEGAoAaYLIBxijCRnzQJQYBoA5hRgbGD0BmYJIDZgCATpyGAKBILAMIhmE4FORA+CwJIYBAlyNAAw6iKpiVgKILMAljIFJsEm6azWfGA2lGAQAWHAX8dqJxWc1i2teUOlBVmNTt6x8/ORmllK/3Jd4aAHUzME8BACABF4nXpZb8E12w1KWfq9MnogkDqmxIY+pod5bC9YVgT1yPM1NUViKH7UAcqvz8zuXnf/L/PzP0y+a2FdDlK41ULBFSIKKpe+glBDFxvPFEyqqXyCy1YzIhUeY0hvub0UKtm9cHpHmFx46+wvCADgwCECzMF4AsDSsArAwoMBXMAvA6zAIgIwwLUAdMAkAKDAPwAUwDEAYMA4AAXAMC7A9AcBFiwFKYAqAKp9J5M6AQA6/KL6lUvh5p7E49Fovv5BDZVAAhUAzMAPAIUM4cmV3RqIP7IIi46/JTT0j80MzdpoIylMR7XcOPRUwEsAUJAABq7hxqHYs/tWKRSG5fLKF0ggnj7VlCKidHadHhzaGUPvGIYx+TYydNnObIZGS3PZX+6W2rEmhP05bJ++OQz8xxNHtIubrjh2/MrViTFytswacuoNEAvqiu4jkuK10ERXQmy2TSf50jJKROeac3HQqhOIBiVCS0wbri6vVqhQZPnpw5YAEB6nmiADAPwFgwIgBvMENCvDTQye8wm8CBMFEA5TAdAC4wA4A3MAVANTAaACMRAFY0AChQAOMBPBfDAqACswC4ASMAQAAzACwBAaDo3KAqCqgZYweSr5g5OWBpNLJdBqE0RlzIlz4niZM5incgfi//viRDgICLOCwtP6Y/L6sHh9eGz4HtIND69pD8OkQeJ17SH4xZcSOs/dyzE6k52fZ01inrtIm26w+vsQCAUJNcieFPebmaepQ8mKfPGlnXtpjilbVDgrl2I6RfPbNLP/1te+G9+vW3/DPWmkz/WjysUGZdvp+Zmu5MzOztN3Jy8zPz85l5r/5/7N6PZbJ+mMs1giyyRfXebLOpnoYUdyrfl5g+6ZFuIelTHF4vx2KyotHLa5xGkEJheeHnmIfuPFUeYzkdyoQliHQSAAWEDU7okQDAlAuMEABQwIxuDsvSJMLcHow0ApSQCIQAlFgEgwJQGjA/AlMBkBFVEwbA8TBBAnAQNhgEgBgYFEBABp8rwTxX47r3ypZa022jEEYYRiDVNRACyYP4GgkA+X/e/JgDBYOn6sNxBv59yITHaOzRTcEuk+DV2lOWzctWYEQF48AnIKCzANJlLbVu/apcSSr2lEQD4yM8SIIFCyQMEEh46EWaR3lJlwZlhjdA+alHzPv/9/7dPv+WeXlIcvxiUE1Z5QJ0Rw2QcCcPxzHdNVi0bq4+SKFrsZGN4YlL7FeetQr1VmTSZaPS6GImrU0oOCpfDclM2dBCi91RIBgLAUmCeHAYGBVJtwWWGBqG6YKQJ4EAvGQBjAZA8BACJgOgMorAwAMwaRmQaCiYHQDypAgANGRNVuDLkpXZsOIic5UIdWxlXplU2WGoWBQmFCxmAYUCgwMsUqg0xG9U6p2vSl04Jl8SfWhoZVBzxXGiPoyxEAkKGejioF+IQ9j9ymXUzxwuYf2VZUOiNZryD+K+FXrvvhZf6SpYVrXam2WvaqRmqm/vmE667+a/+q454ip+4e5rG/VzKNbLYl5unOLeFNhCyTRIolgVFw6HoPDsHGSzR5AmoeHYcBwziCIw0qgFg5Fh2HINS5EISEh4eMoABMJO2bVpEGAYAyYFYQxgsjfmbwwgYLwUICAnMBYCkMAbAAEZgXgFg0AcWAyWoYHoRRgiAKGAGAKYDIBgVAGZkpSJDX9fB+WgQKnpDS7Z6pYgl4iAGYYWY6OEOyYGspfa+YHn5xrj0uLNQ9L4jR34ds4dvZtgmHWdFclCFUSlUF1cJVLLeVirT8sVmmJOq46Ra7dJ1lI/7jbpd7m4Z1WDL3iP+LlG3maWuf/vm/5+rj26//+ev33uOklh9OyPY2+27ocxy2bA1UE+pwhDiBtoLOcKQSWZQxFDuDh5pIgi5QwHDhwiyJhQiFABAM/0AIADwwBsBTMDMCkjE9kFswXgE6GQFwKgGQyAPBwC0YCEAEiAA4CoACCQBAwSAC+MBZANTNjVQBE5S1jJctAHPtzcKFxFuDK7Nf5TXoVVxGuHChJioqmogs1x2XEprzkxecn4dkFN81XsZXYf/74kQ4AAgZg8JL+2NxBlBoNnjM9lvqDRGvCT8DfEGh9eKn4JrU+6alAAlKQYgPjLo6JzjRKx1b9snfu7SBtqasffYsvXO7v62OWpO90s0ic5vtu7SkM8xOs1pbPvfoKb31n+mk27N379femc6r+7MxfmdW+QvQc/Stffe7IVeOT0aw5h14x9r0xm0hmCU2idfdjWERxkjl48LK4fBycPjB8S2mJLzZVJiwyOAQBdpkGTKwOx+OVYAe+QACgYGAEC6YaRmhtKcYmG+JUYIgBRgkAdjgQ5g0gelUB0CgBGAYAYAADTA/JtMNYHVEhVMCAGMfXjB6XTKWMOLlKZXUi3aWDZQIAB0BIFA+CAsmRl1Uk1rPdaga/K17wxG7GEKw7DtJPx2Wyp+26vxfL2NwVthiVVJzC1Ndl1/s7ayDactPoFuyae295FF2nzYVVsUXmqA3SMky9N3fpcZ3+kdRPOv5M/SLFY9P8vxuV+zd8vSbRtx7LT81eRWo/PvLJp9X0OBNR8eExUcgP1kRTalakJ7hVgugeufVFOA4BpGeri+W2C0WCMuuTEPgiJQtQCmGJmCI+q2gZjiFATsCAYKgAFCJsnaNEAvWYCQHBgih3m3+zQYfIJpgyArovggDUFANmA6AQEAegIB9DAwfQojAjAdC4ExgCANGA2AMsxNBsb9tFsRimpc5FvDu5uo7SXQkBXfW5S51Le3LijruRA0Ovq41jUuzwgW7ZeKBm2sFtjBNADpHItyC3nU9+bEov17DOQosSVwqlVANAxEZCIWqBjSx61lkS/m2ZslrH3V3+32/6yoipMxy2kUxDTuKdLzhqFECQC4MkhiNScZQneIl6xGhvtWdfjQoSSH9tOCMsaQkzkB60IRaiQA8NabXQACCAXJM2yAEEYQAEYMIk5vEuUGI2A0YYQBBgcAejAASPY8B8JAMP4qYwZAnC1ZIBI56S4QAAoVhRMThzr/ui3Vp9FFquEfdZDgMgJGA6A+CgQUcKRi0DU0/DkB/AlLK550rN/G1ljXmc5HAdM2BFt762GW92O2Mu/SU5SKguHxpzRAQVhI4FRS0Y9VQianRmHdGrIzlWbWq7K1SO+79EZ3pd0+R/ZE8hI0hlF2HOjFHiLBEwgccJtPIIZbfc5pCqyZaT7ybdRuZYa5YVoq1GQBpz90+iSSLlCyMkOMAwQIBd+AAZwJnH2hg9gIOavMTBnnu6YrXJhMNGWhsJCMeNwOHIKJxiIcmEomEWMlBBhAAkojAwoVsLksxLMSxQdYsOr/duMXZHMy6OkwJKorDlsSh1FFZ7qv5GmsTzEWJPy099c84AlcbqwZI3ZsRGfkF8Rg8xMCpXTdy5fxvWq9NT5/zL/p+W+45XdZ5cxwv1t45Webx5P8/CpT/++JETIAJM4PAs3/gARiQiBV/j04bsg8RT20Nw0lBojXhm+C3N1Nas6x3b3Wt5fft/fy7u9Yq3qCt3LOzjYxwv51+Y/rCxcvY9s2cOas4VquHLNWXV8eTFrGpUpq1eY/uFmKW7NNS0T72I7fmZuKxSFRd9as0205HpiMyW3MQTG5VaftmzTJuPS+nbk//IMfiBGsPdBrM3dey+3dTCAoab+MYx503WeahZ6yJ82XyGtTgDIABAIpgKIBiYHYDwGsOE35hdgO6YGQBbGApAKxgCoEUYDqAhoAQMiEcgMJDl51MXk0WBA8RACEVzGAwQoE3j5Spjiqiw7J34jGX3IDVtfsRAEwOHi5K3YPe7KGYFV1lAuHzZJLM+rrw6Rf4NWMO1BMsaFePa0fEH2kzG73W+91q8tMyxnt6uV6vPmLAg53pnzaJCs8tuseJC+t+BqJTWvLWFHrSSG8rSPSl4WtyQdV99Wtvvcbl1W1qRo96R39ctkTOoeWW0NuqsQla2qZrvEU1GSRWruRvQ5g0ujsTbWhqlWmkmDAeR1m+oELLgXMvKSOY50EfymZV8kpzmGojgTaMVayXGKdA8rD8VxxltQk8ycjXQpha9gBNfNs2iQWmAQCJhYhJG3yDCZA4UoAAGBwR6pTAOAsRjMBMApMMcACMEgHUwBQIjOgMoHhUMQlve87uLqpX3kFFWi9X61m4/LTTC5s0sCQbWeluqgvmRyd7HbiNLGqWHY92myhmxFf7FaWS0AoCFqQ5FTHPvoTdL2LUtMMaotEItWlJi+iF55t1fGRKetwl1rNLLUPtOPm/2i4/hlq+5nqv5aI7u756T76ttaqk6Iuh+45C0rF7qyyIgkcgqLiDAyFGnF0SkODYuBFCIQRFvVEKD0FBjU4TEDRFAw1hwAQIicB1bRIMAEAQwMgBTAFCaAYLRkDhTjIH4GAzJAKzAVAQIACRoCLkNGBcEKRBBkwIJgDABBQAkrABTcdNQ+HozAjbvU4VJuNfz8JS9ytbWoNu3qvdyyHqd4MJZIZ2Y7YyscuY23+tz6NqOihd6Z/eeH6w/uGVIYzqQNuIMEIRX5ynaZ5uZXcRCXuZsRfSl6+UNyzIz/hFzPpLDL/L++v5//dakLmkDOWFoYTognouTzQPNVCiytkPBFJQoUgwFYEWmoDoJExUk4eCyiYy0DVpTQAqNkAADQEI8BEYGA7p+XO+GIqI0YU4IJhghPmAWEKIQSwEAmYEYBKdIgAaMIsFYgAhCgHxgBgEp9prImq6btMwG6nNQlndfd6SuQXXLwmCICyYLYG5gGABhgAYgAFLMF/GbrwlrYaXkdnICqUUYygOdi8049NKrTSwaAk3Ne7Z8K8p1f3I6eivVqp97KO5rNGHI89Lm4kV3eoA//viRE2ACNWDwLvGf7EbcGgCf09OW04JEa8NPwtKQWK10Zvh4hGCKXJPrGRbRN+Yw1zoJMImTuQOek7ip2UNjKRxLUt3NwwWh4ucMGaPfqtImYdo8bNXBXTteX930hnKp+qmxpYX7Ono1nFlbjiXGS1fQlUUjexbL4qT+PhdJY4xHk+9NA71WeKiE3frLCXZ2TVtJSrzrSqGEJDOLwY+DTQ5ljtgAAOAUTATQRAwNoOTNPaKFjAowLYwY0EZMAvAMzADQEsMAkggAMMWjaQYlABQR7wpwVAkhLepJEIl/V1PhMTrTXbg3+5400pac3YzNU+rVc7nvO0iLPzBhroQhbY1w1IYiXPPdLUi3j7hZQsACEnmhu4MLFWu9LV1mE8eQ7MlIl6wIU+o2JK4s3udIEGafMeEyTPpG7w6x5O/1iSWarffNpWJm08y54Z7NlvLPCnrbG4vxb2tDzWaNGw+zEn1tXYnzLuuoWn6gc4kBdOTE6hrhC06fyxrZuOLQ/VjYuF5iVSIhLlRFjYyWrKg6p4+mYRg9HpMVke7844o329PjjOQ9EGyQlYHIXsyhsEzcCQC2sbia5vGeLY+Vr4EAILCbkm0aIANAAIAHzAxC8NI05swNQUTBhAbMEMAkwIQPTAoAMRqCABQcBIvMwAQyUIyYDCQOIkmstjKYbU4acaak1PKqfO9vr4rlAoEgGBXR6baLS6kk9t35S8uV+pqlpb87Zhc1hDMYppc7L2BgGzLovnz9ayinJjHmZnkIUGcJEAAmRCK25qSqmbUauKM0wROaF/+U/dHh9zyMlv/3+ZXv/1pmXmT7lYMnTRPHJS2QOKzcku9DsSiSBPMRl0Jd7UqLRxaSipVVdObSahANNQNRQtYUOWmQwHgB2u3Sf6xpBEIFAiAS8Pw+VMLxaMNQkBIFgAAzA0OjBQETA0DDAoDC64JGcwKBcwKBoSAEmAh91XrBMOZaWsW81qtK90nf7g1V5QAHJg+HBKBU7DjNItA8/K4YxgOenZXlMS/CdmaS7ncmbUghhNOYh6rbrbq1a072rhoUUj7AyIIiISExuV6Wrhz5upwlLpY3DP0vtKMSWWmWVIiZS8ul5Zdb/y8+7+V8uF2+1TaIjT7FFWvHTLlTvdlghCD8rFbikbbSR5xpxxu9IYQcYFXJNIWAGWgAGAsAyYAgNhgxB2m6lo8YEIzRhch2DQK5gyBJGNiCBg8TEowsFwUIjhn0NAggzoLDAYnKAyYbCSlDKV8L8U2Wem7DeLY3djmsuzr1jACLkuBeIUbSYVqhJWbhLGlV6SLcxOeJ8QaM0PcdtKFKLTS/tXNpc5ozRNzZnj3hXjRWPMb2vGhXvPiTNJI7jvwbZZ8ej9ke41JM8mfSRZ3d6PYTlDg4ky5V//74kRUgIkWhEAz3HnxHpBoBnmP6lrKCxGuiT8LfUGhqewxuBJCvV5usN7eLiWslKUmjQ4NpZ92xLDiQ4mLbtCcGdlScJlbGiG/etbtdo+LJHjXZl8ljp+j4xiL5f0SwqdZK5In+hZLiXIQhheXFDUJhl5Q8+20vBci7nkcJxMyMI2S0fbmb4Zjs6Gddj7MkvY5RbDuC5JeGqLqjlDcAgUAAIABjAvCqMBML06WvcjBaFfMQMNQw3AHDACBlMC8CoCAMmAKASHAFqAGEYNACQJjBUBEBABYXALMAAAAoAAEgCU+FU3UZZOTs9Ha/3stRFkoUAyGgUx4AmEzL63sLkKmLE92M8pfrSmdo5TjSTNFTQK08VAHELrWfRVoe9F0N9otauwzTeYg6awQt2Q4mNW59XGnj1t9yfefaj1f51EvzmLQZ7zNeb/73aongPejgs8k5zoLtxv389d+a882s2i9zKJX0dcOUUJiiw4SMLy+SoV6EnGI7Cs5MVtU5PNxQIe9Vx1w1tPGMzI0tquXbKQWVoVER4fyeOOGqjhcz4Q8NNDnw3hhmAIHGK4iE2P0TIoRxjGIWfQ32BDmVUBlMRt7axogITgoBxhUahlh8JgkJBj2ARgqEwQF5iICQcBxKBKD7cDDsWjCgHwcBo8FBgAEpeGHJTLl0yiG52gldXX0UogFVRL0wTCEWCRnDatPmZpncnpoxu1PTU7LbuEo1S0kruVZTQ2nsiMslNya5qvv79SnywBOY0j2RwwVBLDNW7sekcjTCkKcmWW7vRz7ucyoSc/W+373sn+bZirPnzqjzFlBKVDuoUDBiDAoub2Xg3c4RLoGGoKWzsDFHkx4rVIiFYtaSVNkqAjqgeJUipxIhQCS/AlbIAHQBAwBswBgUjK3azMRUA8wQwNyQDZZRgGAIEgASCFM9rAGCSUpIoDyTAslEPWXIvBNWjj8TuXn4t3v+tcvqBK6p726u8/nvjdN+eFWjz7RUdHcluo1E8VogUR6aX3qvpTrbsvMRMQ3Yhfrmv0pEigj38r/xX+vUtP/BWfmdyZ2c69rZX+6k/1MnZ+u5nzMz9v/uzf3N3rTM1numabtaX3t2GOfZVz7r3vROwZrNsdeTVZUUZKz7FarObetBEWy8ko6+sN1nrnFyIzVlxWcMJaD0fMmcAkjRB5ungkAAQAFmA6HwY9Ix5zw16GciBgYpYlxhlgjGCECCYOQQoGAQJmwhCAsFmL7Jh4sGDAQGmChyioyAu0ulYWX2aedz/Krex1DUVIEcWLIPwjdjOUTyvbZWV68XMRgb48CDCjwF7U6oCiI2qLWizx30Vyewd438x4uH8ONdrhWi1pZq28tApHVWnyqq55vl/iDNNBkr3jtknhyWfvFPiBFhxnCJvD/++JEUYAI+oQ/k9t6cRnwiAJ4z+gavg8NTw2fA35BofXsLbn57O+itzyW8LwYz7EWFB3Mx2zfEasbVId30aLM2boyxaNjQnZV040hyRXBCMtCWy7hu1exEjTiPU867Z2Y1jpeRjiWz+NJAKYsSpNhzTpeWtKleyMQ9ZPlCeJpk5fk1jDgDGIUmhPRSj3N1IlxLydBLycE/Q8nILUtigT23oAAEAGmAMGcYHJAJjO7OGiSB6YP4khh6gHGB+DIYQAF4oBoYEwEQCBOYKYQgXhEEAYCgAxb0VAEUoBoAk4wiExGalUmq3atm5WiMMyYUAdMB4AcmAYUi0mzYd2Xy2rSSOpXp8frzNLNS69SUON3OeAwCM29nMrS0cR0fhrWWY9ptRGhxCBxtkJdHTEbqEcXpO9FJfTgUUcaAQGkKQ3uQNRIzSadoguQqtpBFyi6g1GPzPJSSBStutxHmqX3AiPWJdqxlbN4Ox0p29dQKLTjRWrT6FHZojL1c0mOn2wuBrlyTR4aRbShCeLepD/LYn6F4SYdKsLCNkcJtkbJ0lFaTpRlxOslY/ielS7RQf53JsWwv5rltPguaHuthEzUTa0SA7DhAoHg1gjDzATChIQZGcGBkAOYCQDpMA+NAdUZIAUYNgIxgCgXMHYs8MNOi2sCSqzEtXLW7+vzuU+2SKoxqlu2s9av2prOG7GWeM1fsS+5RQ1Ow9LKiswQAPOUvbmG+52cq+X5QHo54Jwxg8m3V+LmVKzuyw/LHpgAxoGFkEdg4ceDD52eWR5/2F3+e5+sMzMtoRnmZEQ7+a1zVBgPQKgC4WNijkReguXml1qQJ/Ja5PCwfJHWoVBFQFtPPnB3gXJ1l1hgrcQnyyM4UTipngACVG5Nc0iAsABQDCqHYZziNpQKWYH4DSNBMA+YDwDpgCAJCEAGIKsMGsCEeA4JuDUjWZdLOWCNEuSiSX5dHrmdyz92HGwgTRsIChyuGHnpbWc9IsufWxpKWmi8peB2pfOS/s3C0nGsnJasjF2py5SnuqfY6Xm6mpTHOSSdNbPe7N44l1MbNbWnY0KbEVLpnfsiq646uPqf/+f7Z/3zHTKb3HbV5m2dQeax8GzmqNLWsaVyou1QyOGpq9x45EU+Ej5YYJHSMgTD5LOkyCDHUO1MlUIFWiAMlwOEwPJONmi6sAwBQDDBTB9MNkNo9qUpjGJHwIAjAgPkRBeIbGAwBsRAFGBGASBABTEPAJMEAC0CAAAoBUuSTATYvGik3OgeaP1LcrxyndVJfXBIAxdKkl17nK8tryKlv27O9yjtuxcu5S2W4Q1KpQqbyYlVaid8xpdlyLcXVYdB6UIJk6jzZ5NNEg1HiF2nSE4suepm8G1stYsoigSybtbDZqDiNDw+QkcSBklM//viRFKACMeDv4vJf0EssIfhe29OGyYPDU8NnUNxQaGp7aU4zc3Sj0acb1hNtHJVMqZeTtsN/Am8FSXd7cX7Ayt7eqC6VP5csaVLCrU46bl5tZS9G0YTfZdFcuielsHcyss6nVSEuSPUZ1K9FMejUNEhgVpd06cQfqBBvG+ig3TNVwtRwmUDHF1KEfZdtRTrNY8YBDz2WYfgBUDAsAkmJyUke2+ShlCjOGGMFAYLoJRgUgkmDKAsYE4DQUADEA8IDj/C08QgMqFQqErLUrW+rpnTzRCelUpzjsnpalNC19SwaPzJgJOpvoKoaOzQx8wXFZwsuorlCa4uXJgfTMsE3gA+yP7s0eubp2NhtbI7yA1V05P48unzDedjhw1ddsiPrPHcOPDkVc1G++pIMlmpdMLC8ZYWbNT1ifwojVE3mA52ZmHS63NaLNCh3zeNA7+G3qRhjzWa2GJbLbuer5yZo8dVMKehqJKOB/qaeMqnFGmUhi2qGlKwHJOo1FJdC343U8X4/XxztRqsp2GmaI4xImUV9CTHJIdxKmAlKCO0whbE4LwT0hqrGGKARosIrhZhDhUEqGoQYNFdl/KxTKcgZeT4aIWwJS7lkaIAFABUjTAiAaNF4AcwxgQx0CQwSgMDAFANEAEJgHACsQWcxkwRAawsAYRAAMsS8T2WI6bAYKyvVofq2LVbDc1jZHAACICtnTaTcO9ltmlnv+U40EZsVLVa9nN4TkoxqY1wwNAsisY9HADSEFyFBDUjbGFyg0yUzqBbgl68qyZIj1/6hJsh0v/bSxvzTiHwzPvke35qb0ERoxqSQjcZCI2CBlBiEIDgQ5P2U7UN5cL6/2WLpVpysMz464r84YE9Qckvi+WoF4TkwxWSJFV6hlIZFdHC+ApW61rSACbyQ5gIgpGjgf+YEQF5gTAFGAqAYDgRRoCtCNs7zLQNv2iNsFgRQuHFzNEjLu1bu85dZn9cx7jajhYIzHg0kAGoOVeda7YRvTm5YfaONnUL00hAQkC1AUFkRD5XcZyYgmbTh4ZCNJLromNWVjrOp1BHk2Y71etNR07fHMnlepL3/cvX28qv4Xfuo7/mf/+PjX3M9/P/VSjD1je/fKOxced24xiywk3BVqcknnK1eChTBEQIYjMkEGgSkuii0SKsnidUZGDIBg6FBKJAiONqDB4QIml6Eq1pAAQDGC8CqYEQ6RzeltmNiMIYLgIZgDgQCEFkwCQMjBCACMAkAgHAIjAChgrhvGDkCyh6/LrIwv4/0FyupSxqN1vr40WdqknQSAYv5U+5p3JBLn6O9P1zbytau3ZvCuYiPzxScA6/Eu2rd9veKrdqe88ltO2Wtsydx+hKquMQPH+wLmHmabx4vTUWrTrzBba6w6s24vRtUNV3wP/74kRNgAi3hD+TzH5xE5CH8nmPzhq2DwtOjZ0DcEGhaeQzMbqrj9Y1DSPYm8ZvPNPHqSk/eH29OnX6xe3i83yonwvH7XK64QizUlmY4ICoSimQgaFUfg94klITjBK1hKUZkAaZ6j+JrARByk1QkfyVRx5qdyONJp4sAnYJpleMZ+FtFjG4dwmhXPTuMUXMfAqZhcShWC9i6IonQs5e2XRyAAYBIAxgGATmBiB8eOsURixgFmAkCsUAnmB+DYBQEWYEQBS3wQBSYIJDI8PKYCoCjE1g2CPM/UXVK88StXprv1b9u3EYcQNBwV8QbHDkFNmnHqPPcMMbdOiSDZs4ravtUaOBDBZdM0q+97PQfWGlKuO7tPrWJuBq13MY0yWI4eqqRoCSyuiNbHFGf3ahT2o5FCoi3Xd1nTuTJxJBV2tzteqmD0PvgU0Z6r8J5+39qsqr0jQcOWqqhwxqpWiLhYjPzc5HN4nDyoL5KNiQWAp0EGQ1jdJolWNXlIWLQ+XElBalyRZf2BECTn0ih/yKAJwR4k5dydGQqWoTJJjiOlXoNTQDSTxfVGL8c50ielhJGi3NzsAqu0siQAC2QcExjaLp3VWxk4ERgqERgSAgXBwFBsFgMSpUsdUUH8Cgi/kfdxbLL2YsEnu6zt6z12kk1H8lWIGC6UAc58NSjK/jWtTdL3tSrnMWqtNXvzE9u7qCmnismgZ3Lc0w4ewYwgI3McKPcKSzVXKTIPTgh880pGJmXvRZk/lPzkZKeXD7X1OcI7OTTGofne+uQTPwaxNEnxVXWpQ6XL2G4ml6tXk+97qaAvtnyB520S1Td3o+osLj2+XWh8AkiOGCjVeVSSVAhXPqDoGjkRQEQwwJGpno2iAGChAGZgIAMGpAP6YMwAYjA8MDQCstGYBQA71OMhwXEYRgMIiABEgFGBowQPL7UMSy3+GFJU+mz/tWhJAAgED0sC772vO/M8+484loDwc8racjTn3OEAljBw6rHVEsGBTNRMmJPPmsxxq0jRRhmPMpKxabOc0dExG02NpTrmbd+pZ+5u3h7j4nhuL+9NuPN2f/9ynwT/U6vRNPaxRbAocieoxmSdxHm+1L1DBRMrjFLY4uVGUM4hRDMxE9wtxl861e6U141lsgqTtUmL586JRoPYkj+w4PcBBMYDQRZhICtGfSoWTGuGDcC2j2BQaDAhAgBoHQEAAT2X0YEAbwIAPMBQCdrJd1PRscRaO40el8Jt7/8Mqkbgi0DQA1hVqSvPC3OUJUsqaM5yzQdFSNEdJxUkJ1fS8yRHGie14QUXUUhr7XZUJm2BKsRqpwij2oWQL2ko29dloVJEzBFE5IUNkxjGZqnV2Scqt1KC7V0TKLPFVJtlzLdzhPEmUyJmChjGyJHtIDGvP/++JEWAAI1YQ/C8l+YRgwd+J7bxoZ/g8LTo09A1vB4WnkM3DGqFFgMUFVsLHZDlzCV0cuCy7lVaHLSiVB2JZXoSYgrhGkadJbXZCUikjcV5IR+A2B8CGocdBynoCMJcuAtmo5glOnjBE4LGa5sl8RCuLgaB0DYHqB9j9D8FgD/JeTQfRNBkhLy8p8okDHwSAADQFRgaBDmEOB4exISRmuMaITGPnQ8+GVmIIGWvgYBHAo40QMpJxoaMHAiAJFkP0d7KrKH7a0lIcKG5Wu3hDgmiXJ86Y7EzLqllVAniSvHrjt7WHjESsBthtD3UZk25yQcVjYouaTOV9SQPtzYsODHRxwz4cWeS8LVIUjfiO4yNkzlmPaf7hxpLulUmoVdx2OK3PrpCIxvMv5pmSNSK703Wr6qK0srjCeaw+c4S7lgMazhin1R7Jp+4s9YsxpucydaY5OGBcj9ins8J4iTrjFuLG3HdM1Iek4DOS8lJ7D7OhuMY3R6zxR6ZLoRFUQhIaoGgYIiy5L6EqggPkBaerZgCGBKx3lwFpCDrAehSDpsGieReE+zwAIhWskSAAT/YmBRvMuZCMZBLMWAtMDAQMNxJCAGekQACqFPQLCMgBkEoeNm1+nuSnLtzPDDutxuGZLDAoGbzNZlEbnd03JrKtrCxlvLW5bZ+xQXM5mart+sMKtPEXLBMqqoLCgIhtjBquZG5I/+pz3RSmZnYfmbsAvDjQ4M5mWsTYzqwi4U6jPC+36lc4RjL5s/CS8TFKtryEUylT9Ni0mU+bFKRQhNmjrqPljTSALEJOTIUKIOiobMCiRMGmCIqkWLzJjCiAgw+KmDYZCyCDIFCzS2NEAIBRgCQwRA6TQeGCMKoDdYxgUACiEDcwCQCkASwlLiCgUGhMLgyRuPO00ZubzzwmMuXa16YqUzPUemSyqDs6eZh+XQLXnH1jNu1J6UgYNgYI4ZFEMA8TpyLVDOWjECCbeK2OFiYay5StJ1kze43IcUpaWaye4/t6GzNzJnu9cVXJfTtfE/PX9z1ddXbXMVE/TZ6w7DEUYrQPKLgoUNNKEIQTltqtwONLD5VVeae0c0KaNXVg6Mm4TpKSjBfqhMPZNJguWpR0hWlk5iPxIxKQ4fjUwAADTAIAXMNoLE0zD8wCCMYcQApgegfGBGCeYAoMA8BkIwBVhUKDDBDXCBIQcAkWhEYAqh0NRd6pfB9+OzNqjmpz5mdoYwuheUj67EMbFD72r2WoT9X1Ht1ooyGKoU2iTb1Vu5jNmT/XGHp+ytyJwtW+BK8mbLhMRrmFdIErc8uOTFUnUk84quXD+O6qqo8cXIBqXXobJVipbtZTGia8cJbQ33i/ayOXJQHrJF6GXXHl01Syigi1LNyjksn84chx9ZfSw6+1l//vgRGOBCRSDPoPMxfMc0IfReTjMGnINBs6N+0s0weEp0z847YVH4tJ3opJW+0PY0z+RhtH7lq4mCsitsBbmyidYGtB9FYn5dxpbHVwqrqjUIchoSy3KehTtQ6DGJtwRHVtVsZ9Dq0Kjyign+EaGQq4gFZ/H1XVQu88EtR7YOMIAwCQNjAGACMMEQI2N2FTFFF6MGwJUwBQVAUBSEAFrfLUp0uwYO4Go8FIq4vyXhquk8rtSLOkx1at2aP6efmM25JW53pdQ4WuoS4jQyJAuZmhPpUvN7LqzAMtsU5MtExroqqS+4o5kSjrZuZWzKGiewSbMChkktk4SFlkSipZC2jRhli3B8FVQqeJEL21sIUAm2ZK9pCUFzZxCK3WGmmTFTKroTRzCZzaKMAwL85Q1pTL6C7uM0MppYMnbtx5ojLHcgl3uyn4RLoIdKIN6zqPxprr1qquG4TK6dnbK5AzEmBB8NuHNqwLCu24cO0zP00HgbRCXRLiUCSrUVZy6jCpU9a6rsBJyP/bUxWhLB5L8l30OAwGmYat1NVpU10QP9NeBQAGD40HDZTJDmLAGmAQJDQSGAIFoVo2VnLMOCNKwCQslUzFJzH/1h+P7+/ylmsH+TKkM1nKcrNb8ZfVwxzs0EzkDMMhhpsoQONQUUdQpCoCEgcpJ6/enFqF8MmeKO6vx5nkIRjmurITUGCBk5zSEZ+cKn//F15pDevtCtTEfFH0mIsOFdxiv4bnue91ZeaPOxq+R0uHGd7AbI87iqX7dFYGmO3ucikTc8M2oDikXNPltiRzl0SNrN5kVz44i3o4+ybHrChx3hezGTytIIhgwAQkHI0QAIIIQsMISpMqqYKDiMIwFAwBJcAkE271pqPmAwdjQCmBYAJFRe5lale+fhl/N/zvdXE92JSuKzm61u6kpFOCmLQJiOwNZmpIbhK3jIXtxytlHV03bdZrPutaXz7ut4+MbrUzMzNd7uZEe/GPO/utkf6/8Q+Y3a53u3ft/Dbr2p9yf8uNbSEtp3GIu3YwhqJqnUkE4fRXlW1whRXPaSfRE8klxM6lZnvX3qgP5PoYp4h1sEBNxULVDcpUKUJ4Wa03skzcqnSWbcEgAAgAEwlDoxtQU4YTI4OO8xGIUwaEEwEDUAg2Qg6EBQxIGgUAS6BxvslSRbEr1p0snJRKeyj85+jxhylnOw+i8zypxr9olGY4DyLzniyqHFTyW83fVf+L2Nu/DeJYWrlto8hfZfQqrnni5RcqaltlcvcPbksqtLyknMx+KCR1Yy+rLTqczfRH6x08KzNNhK+JUM+9xchHFIDk6tZLeq5TRdjjb6tiNCLf3dTszNFWr3satuirQbSwXXmpZjnKJDk8L8MHlj+sg9uEHxV/6OkpYIdx0odeW//viRGuJGQmEPhOsxfEc8IfSeTjMF6INBs0N+YsXQaDZxD85GGbqPMjUPfSJUhfRStkqLTD4w1xYRNkiVHGGuszhkCvQcNYVWNYz6OEj17EgsNTeMMIVvCFjL1LnlThTVl4GFGkeV5twDzioZy+SAAIcDAPA1MBoBEwsFYzEWBUMFUA0wLgEwMDEYDIEBWBQkooM0cwHgUwUFuLANPO0iHnOfeK9zuZ/ar42ZRep+WWgpJupEuX5XCXrKDBETqlntMCK9XjjMPq7xWZOoHTW6M8WipiSbmi83Jyon7CNATtKPC+IKScis+kXNiGLJwcFzUCxSCp5UPmEh8xEmPJGnFNGiVNVl8mac0Wet7PETZmKJBCpZR4+mw3W1Xnabsol3Y7ly1FIGtQNPTEqda7Im9fxuL/R+C1F4pZfB6X4fmPu04Mcdpxlg4FXwzdoqc7WEsXBnY06SW0NMWVrbk6sjS5ayy1o1ZrapVC1xMLWM0551bFcEiVzrIDiF4GCo/KPT71L1L7r9eSITVsl0tVSWAQk8eo6wUyZgQjxoKkQ8bOJ6MmFNhhNdM7TOrd/9a5/cv/8t2sMoCbSrN4cv0tU3kUic5YlQuQggFJqZxbVxSZvkxf6usfVuggdR9tarfmWlygIq2UNl+ojoxNzNxtty+53fpHG//NqB4+c5kteN3z/LVRu7i81lxiYV+Z1LHW3cFsWfHYU6uY7xicW+CqnzI40PFVJN9VEuCkcG9OIfCSaXXkKViiVD8V1MJmyMRR2xCx7Ls9UT1YTF821lgIknFckZHIIODYcHCsIq0r3YM6MChYHFAnUWfiVV+Z6qf+td/X/2zyha006rfu2Pw6e1OJRtlE5sJ1jiZVipjeSR3KX9XzcS8RNfoiO50kwzs6G3KLdTEvUXW+w+ni92t42xsS9zS1c7s6ccLU3fMVdpP8kGLcQgduS6sMHKIRxpZZIi4WJURzIivIkjx2tyOD5ZboMdxVy2hrYoW5xfqhG1OQnkJMHZBYjEOprVTY9O8zn50IUpUGhJvneTN84wlYqAURj40WrQ8emQWqJLoweCA4pGBgymUls11p5loImUwKGACPvrQM3fbtLuk+Zs7qX6K/l2glTQYf3Vwzk1lJOoIW92zV8hcuixWGxQQWUbvk5a14zMyLsjChtmSRRI6iFGrubTsPLxKCAEdTFcmSOIXWFQyTg+CYYXFJLRILHxu3yFaNkFS6pYjFx5EZTnohWXLNLITrVpbrJoocUSFJGjKDUWiVSOVaOX01M9soi12WRmVPq4DaUMHtKgKKRtr7jQI2d3WmtfUvTzrr0g5TuGqFiErZem6oKsBDTDH+rFonlXuxYUSjkgETAXuXpDhLQWGTwdBt0lSzqLg1J1mhF21KgVMmQAv/74kSDjdj1hD2DicZhIjCXsHmYvhjqDwJNjffDGEGgScG/MeP+XEEQ1ip6Jpp9AISPpcBfa10WWNSu+0cGgbGAMBsZnCIIgEQMOEDIFA6iwDJgLgJGAUAmglbd5TAdAnAIDiOzuzTswfFs+17OuVLuPaetQ1KCDggQZ1pxpDX3SutsuY9rbKxJH18ac2GKC8JzuzBY8fibxlayp84TM9y2kbMFDI9UoktIKQExMmhOF5CLyZiAv3HBYPowsTBYuKpgt1YdQpDhtQbpTpYtItNLB885rPIoVxrZLRtluhWpfli+kp5Tu9k6kSgqjwjjAHCpodchnlEy1pzzPzIqiwkxKGBJ6t6oK7bBUOj/r0fRaaFq6mGsLWwypx3xm4GRsnkmWfxBM9suasMCl+lXyNKCBEj0MjGZoAOS3JbDwqwpzL8DShz0NRgSUJbsQDXQoOgJDmGZQoNoCYDOKlHxZGepfGWE5utEPFZkYCIAJMhnLFHBzbgF0hRmctRqmys/v/7vHDmPc72vj4AKWYdwyEaGSDyF20k4+RJU08uAmQ8FfMs1XFuXct2Do8eIbi4AojNzcl2HEMrkLFGsBijpiCJUYrkkOd8/hEDXg53JEvmNferRGG3hWxFcGlohsy83sWmGDuCxKjMi9dVvXs5/siJaoDiupWEyUmRZCEOJIpFpgetR3oenCUohCzCZzRU4mD8j0CcY80AWOSAhyKOFHowkwxy/vWgjpVARhsIHq7wGCUMGbhtRdS1L5bLwoEHXh3GPU1bL/5llz+4Wv/PG7aiu+8vZczMwkoYSgMqWcLW/P//e0ljUlIGWykHvJ+RuERcIKFVBYRcc9irHBAMNjGS0ijL2JUItk09jaND6y1cqfzvWp95zG1nyxZG+Er1qC7Yu/boTc5MNNWUnV6lMSZSqSPRn0oWU+y+KNwfq83zeYkvAeqRvSxeyxrQ304X8WlmUBEF8bBCRbTadN7aWIvB0ro6UuZaKeGGl1FSmAwTBBFmgkBmYQWorCwqGBIrmDAIhAANGhM4Yjj2WuUUbyWafixhT9q3t44TP5Z0v2W6llic1/33cpLTcN4UKP7ar2Cq2i1VZIw1WcfeXeoZSRL7qC8tdXLyllEJs8qqgJqqNAWrz0/LJ8qXWb4mmBUUjiLiGQbJBKhPWTc4Kp82T2Kney42qUnilO4bJKsItuexrKr1zVYl9++W1qKcm6sWpYfpXtvyCBHNoqz6N8/C+YcdVvI037D3uayrYz5mSVSOLxwimgxPJTuTltYUOjUcZegBXkyJ9WGhCxEBJEsLX4kOl+XYb2cZQ0hXbeKWkTWUq0oKCwm5ogK8S6QGCqC8hUUkw4ilqs6I41AdcApgURmQHKAqEJBANVz8TrcQCAsCQIjSCOFP/++JElQ3Y+4Q9A6zF8SCQh6B5mL4aUhD+LaH3w1BCH8XRvngOgBYCAQCwCZYASDAW0ymQubSmAeBgp8AgAPa6buzrtW917f1dYfcyzq8qPTGdNrn2VP1u9fqRLVkLsF9i6rjSWYI0fUbfb6jLTyxbVo8zTzlbEbloIyrZmMtCRZdQd3TgcSzx0VFzogQmERSPhJNVplEtKlrsCfYOny2SDIcySUFDza5IPSbHapV65RXLLGFVVsR66fp6I16mVy+TTnY7IKWdp32uUkOSuB25Nmzbd+F2rGaUnO8LPJfAy8m8Wev9cEPyCEryMIYVmy9J1xXMbZYZu7oIdWYJyrHTBUWlqAR23DcbAty/anlVig4YkcIW8BwVqA5Jb8vuSHByAEtLxPAO2LLBJnIAxC2y11nrkLSsvhtxuMrv0YYImWxg1ul9WgqLOxFWdyyjMcCI3AUttVb/MP/8db//7rv/gNuLke3v+3ELULH/12N/mGqNaSrrSvaYOszstx8yIQ/sKi7jogXUg0VJHkiR4VimNH3Tuail7FDCZ2VPfStKri67HNd3bpe4ksaJVuwxWw3zsUGDZNOb1bdNGlZEVzMfDIaXXkJWUjEOYkz9rJSc6ExDyZzdMRQFhQ5iQJdBCUOLA8SaTcCVFKY5GD/JWvMZsgIhLCJJknhd1CL0/kWI6LiJZFOzxFoPon6PkoSHkxCEATi1HjCcHSQKk8i4SlsAPTScd1r0NUuU73mP83tf5p6Bcj75k0JL9eoXy8/LqPJNX4yeaVxKVKCHNQJXECWDTaBQbHA+BlAkeaJ/4ms4zWE2+HJWA8kzjvMazBpSl9UzWuP4l9YxXedfNo0Keu5MwW1gcc2jqOPO/VqicnjevUYlIxvpVcaKtekhkMY7kPL47K1IKNrV5zFvEzZU0qkWgDgYx6i2IUXZSkOJC2FtIgWAkpxj4J/A2xk6GQEGIOR8IvxYCXrsNAzDpCvOpWq/dV4pjCQPnIkLmNBFmHIEmCAKmCIVQ2y2Qwy1gxJDQOCRurkwxS5YV/uY1MqW/dzobNzHGAj6Zp1Xmbd7rF95c7FvwbSqzLXZ68M7/Iru1knXbSXRJKlYsE4T1J8YnpUOHS8YrC6XUSa5LOScSTItrSUSAak4vD26qDgsCU5JMPS21AB4gPC4kuI18l43EYTRDXD3Q/1hKvdVQrPukVxH/KX3WXCY08kFwdLaBiMNxK1F3+f9bEAReBIHh+Tw45C/1GIYYmsGull1hMAQCZ809lCzeM/EAkLoaVISBL9Lza6ksPgUXSKRdFRvdEUNigALqI4RQKILWGIgKYYoNNZy5xehAmsCNHQZLQCy3ofoKpLfKgUUAFTXIACRXZSPCBSgSMS6BNkBk8Ezq3RAL+gUOjAsfz9o//viRJoP2U6EvAOsxfEdEIeRdZi+GkIQ/A2F78M+wh+BUz+gFzEILzBcGlbS7ZQAEnLlRl9mADQFtrJ45FdY1Mv3S/9XLPPna+Niy+s/e+QRdHu16nsxWmelc5u06OB71pUyyHRTLEFnyndY626YIXNQxc+rPUZ8YER9U5eagcJZghj8exExOwZGJ0mXsAbiXnNzQrIikJ0LQjiUvfH5ctKcS1NE4X3jxcwhsLqwxX108OFKY0tW1GrcrmHcwaRK68BPrEJt+4Uy+VZL9SKS5WEfeG1YGONcceB0bYg+T3uwksgPgBBR92kpltxXGiSBjoIYEaOmQFgoJQQBB5EtMgUMnnSoDUUTupeiVLDQxIje1hPoOo9o1sy7VeCCo/FZQrUxDSKRvOfTGhhjJWZFvxfaZzcWZ277kGFgx8dsYCCGDgC3oy2SxR1pkEA7q3u76urn5yae13/0XQLT84hbMq7vFvj11jeZJ9uTjfeoThZ/SM8zSkCDFj+Ndj2sxNwm6DTMd/Do3ag6xi7yfDrNo8C19YpmekssfGfnG6bi3tveNbtEkr9xcRlMytrY0JJXMqhaECsLCFJs+Fe41RaGH4hSXL6SonlzzRpjrKqG6LSjGpp5xEGXR/jNVZMKF7UwYAtwC4pT7QkwigHYbo/gU4jJOX6wSAt8czQ0QWCbcjXHADEHkXhSNtByiJgPGgHHQqCwxDbRkxCo3iSOpOGpFY2QZT/7LXVq/f///Xs9evv3JnXxtjp8ukT5ZRY3CkNZAoqE0n0u3LNR6BAnRowaSBTijjsLPxmSkYgMR+zZu2ky/v31kNnZpnGZarz2bNaveMx1V8FzYlfCnPuGsKaCezI1L6lZ14mZO475vXzQFChD9OhyE7X0grRdjwOst5yk+hBwu4IthciiLEpRcwj4cgtAmgox8m4BLBmltNpBl5TgQYFMTg91IIsSgN8uBJALIfIIyJyVx5TqCQAGWg0CFQ5nSnuEIESCVqSvbW1lHlVonY3VuVNZZXrW/7jln+7OX7ruT89u0pT713YZt/79H/mXKxaxB7s4SYknoz2qKIzjdGY+ipcfnpAEclkQzLI6woa0fVAkwHVCeDJuxgtMyyD5wZOmBXVjYSSUHZfA+oNQlJOjiqxYyWBfokQnJNqbQGxsTTmUUKW2r7pFTqYwR+U8ITMxSRNzbpTyNdae8rza2gGYGsMrf1Y6mytIOCcPFkw4KNCP+mgRBCoqw7QEVgKGkOVRSEMZMX2kkX+SkYGsASAJwsgQQlnCzYMWLTmMSSLC1sMiEVOcwEzLANxczliQtO4iREFJfZSwqABYBKwgmdINIB5RMsYDIokYxKbJmGhZwKKgRkGtjiQNVChaByo5N1lJUDDI3EjxSqCmFhy/2ANPh//74kSeAZlShLuTjM3xJnCXcGzYfhjeDPComf0LJUIecRM/oOUUd5mLQKst2hk0rZXsu+ajFa+s2GZT/M3zv8+63W/bcfXLT0a5QJoUZPqU8a+DZNLJZEJXdldyff2X3rkWiEtpGmtRidRv48/kdlth0Ya1LG/ciUy+KTERg907zor1fRmVh3HXgOEOiy2DH0+7Tu25T/UUniVHJJ2eguzF7dPUnaWYpp3Glo5XGY5CrVRhUMQC5Tuyuw286sZ+Epn5iLBZFDbDl2tYLyusr0tyzFl6yVsIbwK75dthhcZoKQ08yB0RaDLlAEuhvREVRoy9WcKCVsGQmIwEUPHVaIAJzAC6agcZKkHpBgAwByE+4WochqrnLSxScwCWgOElxIzeLMw6W5MqUBphKXOBCDQEXuFSprs/puBMMkHshhUA2ANKXl1JJVJOp+tHqRb+pL/Wiii2pbakvVSqv6mZnu1VM+tzzn7y2y1enmZ9diRKqoGAQVhpEjLVOVRJI1FiVTIKASJGZ9JVRKiRIlP5xKv5quaRRmfiE+VyHKJPIdPmumJRPozCnTmWnumFDVbET0CGrWEvo9Jk1UrNDLajU9HmP4nSGxcokW0QkHKHKdM71dLQ+RDQvQrSRFQPJDUUf4NkWFZLsPSXFwNIzQEkACgBkmvLqWFuXYNkOWKX1VQgRCTBdE8gY4XMADIW4hxPJUkknpaktFGvWj0n/1o9bdJFFGpJJ/vMzNPOefVY8/9q///8oy8yRIyaRIkgYKSrZmTUdNRynmnNIo4cltV5KJEiVGo95nGft/ONTT215mZ/wxM2/BVsbdXuvBVpyqJ9GhQzlULCcqi3CjMSHK5PFuNE0TpZZC/E6IUcw3S8nMqyCn0W40hvHScpoqGl06oWEvxci3CbH2oUSA+QAkBKAxDiWi6hHRivR8ibFyNJpZQ/gAMA5EKOVDXGTEFNRTMuMTAwIChhbHBoYSAyKaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/++JkAA/424CNEYnHsAFAEAAwAAEAAAGkAAAAIAAANIAAAAQEUHtXNzc3M3Nzc90xOjkvFMuHZwfqlrTMELCdCOjkrF0pF84PzQKQbByKhpGgOxwEMzc+ZmariUSR6IImDWHAhjoRScVS8Uy4XyoXzpYqWOlC6A2TCkiKnC5QjQQn///kZXV1dXFZVJNJeD2lVlUk1F1Kurq4ayKQsIQeA8YEYoHwKBEBgVA4HwUC4UJH5/4kQIoSS9xfUZAVAkAEJ6DhEcHKMAwqYUSSoHUiAwVKWoUAa/EI7JI/FFdAoJsiacGDoV8QfEXgLs1OA8wPY4RRuR1SmTfS0SPS0VmWysEslR5ba0F7oWmQJhQDGiNhI8YYF1gQgGOi2jipksCo8ttZCf6CIGmBiQuoUaSsGVhZACGLYAXTSwCREMiSYIpiCmopmXGJgYEBQwtjg0MJAZFNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDAgKGFscGhhIDIpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",lN=GS(jS,aN),hN=IS.createLock(aN),cN=new zS;let uN=!1;const dN=()=>{uN||(hN(),uN=!0)},pN=jS.decodeAudioData(lN.buffer,e=>{null===cN.audioBufferProperty.value&&(cN.audioBufferProperty.set(e),dN())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),cN.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),dN()});pN&&pN.then(e=>{null===cN.audioBufferProperty.value&&(cN.audioBufferProperty.set(e),dN())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),dN()});const mN=cN;class gN{constructor(e,t,i){const n=$e()({tolerateOutOfRangeValues:!1},i);this.minValue=e.min,this.maxValue=e.max,this.span=e.getLength(),this.numBins=t,this.options=n}mapToBin(e){this.options.tolerateOutOfRangeValues;const t=(e-this.minValue)/this.span;return Math.min(Math.floor(t*this.numBins),this.numBins-1)}}FS.register("BinMapper",gN);const fN=gN;class yN extends Ab{constructor(e,t,i){const n=$e()({sound:mN,initialOutputLevel:1,numBins:7,playbackRateRange:new zt(1,1),alwaysPlayOnChangesProperty:null,playSoundAtMin:!0,playSoundAtMax:!0,outOfRangeValuesOK:!1},i);super(n.sound,n);const r=new fN(t,n.numBins,{tolerateOutOfRangeValues:n.outOfRangeValuesOK}),s=(e,i)=>{const s=r.mapToBin(e),o=r.mapToBin(i);if(n.alwaysPlayOnChangesProperty&&n.alwaysPlayOnChangesProperty.value||e===t.min&&n.playSoundAtMin||e===t.max&&n.playSoundAtMax||s!==o){const i=(e-t.min)/t.getLength()*(n.playbackRateRange.max-n.playbackRateRange.min)+n.playbackRateRange.min;this.setPlaybackRate(i),this.play()}};e.lazyLink(s),this.disposeDiscreteSoundGenerator=()=>{e.unlink(s)}}dispose(){this.disposeDiscreteSoundGenerator(),super.dispose()}}FS.register("DiscreteSoundGenerator",yN);class AN extends gb{constructor(e,t){const i=$e()({initialPlaybackRate:1},t);super(i),this.activeBufferSources=[],this.valueToWrappedAudioBufferMap=e,this.localGainNode=this.audioContext.createGain(),this.localGainNode.connect(this.soundSourceDestination),this.fullyEnabledProperty.lazyLink(e=>{e||this.stopAll()}),this.playbackRate=void 0===i.initialPlaybackRate?1:i.initialPlaybackRate,this.audioContextStateChangeListener=null,this.timeOfDeferredPlayRequest=Number.NEGATIVE_INFINITY}playAssociatedSound(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const i=this.valueToWrappedAudioBufferMap.get(e);if("running"===this.audioContext.state){if(this.fullyEnabled&&i.audioBufferProperty.value){const e=this.audioContext.currentTime;this.localGainNode.gain.cancelScheduledValues(e),this.localGainNode.gain.setValueAtTime(1,e);const n=this.audioContext.createBufferSource();n.buffer=i.audioBufferProperty.value,n.playbackRate.setValueAtTime(this.playbackRate,this.audioContext.currentTime),n.connect(this.localGainNode),this.activeBufferSources.push(n),n.onended=()=>{const e=this.activeBufferSources.indexOf(n);e>-1&&this.activeBufferSources.splice(e,1)},n.start(e+t)}}else this.audioContextStateChangeListener&&sb.removeStateChangeListener(this.audioContext,this.audioContextStateChangeListener),this.timeOfDeferredPlayRequest=Date.now(),this.audioContextStateChangeListener=()=>{(Date.now()-this.timeOfDeferredPlayRequest)/1e3<.2&&this.playAssociatedSound(e,.1),sb.removeStateChangeListener(this.audioContext,this.audioContextStateChangeListener),this.audioContextStateChangeListener=null},sb.addStateChangeListener(this.audioContext,this.audioContextStateChangeListener)}setPlaybackRate(e){this.playbackRate=e}stopAll(){const e=this.audioContext.currentTime+.1;this.localGainNode.gain.linearRampToValueAtTime(0,e),this.activeBufferSources.forEach(t=>{t.stop(e)}),this.activeBufferSources.length=0}}FS.register("MultiClip",AN);const EN=AN,vN=ab.DEFAULT_PARAM_CHANGE_TIME_CONSTANT;class SN extends gb{constructor(e){const t=$e()({noiseType:"pink",lowPassCutoffFrequency:null,highPassCutoffFrequency:null,centerFrequency:null,qFactor:1,lfoInitiallyEnabled:!1,lfoInitialFrequency:2,lfoInitialDepth:1,lfoType:"sine"},e);super(t);const i=this.audioContext.currentTime;let n,r;t.lowPassCutoffFrequency&&(n=this.audioContext.createBiquadFilter(),n.type="lowpass",n.frequency.setValueAtTime(t.lowPassCutoffFrequency,i)),t.highPassCutoffFrequency&&(r=this.audioContext.createBiquadFilter(),r.type="highpass",r.frequency.setValueAtTime(t.highPassCutoffFrequency,i)),t.qFactor&&t.centerFrequency?(this.bandPassFilter=this.audioContext.createBiquadFilter(),this.bandPassFilter.type="bandpass",this.bandPassFilter.frequency.setValueAtTime(t.centerFrequency,i),this.bandPassFilter.Q.setValueAtTime(t.qFactor,i)):this.bandPassFilter=null;const s=2*this.audioContext.sampleRate;this.noiseBuffer=this.audioContext.createBuffer(1,s,this.audioContext.sampleRate);const o=this.noiseBuffer.getChannelData(0);let a;if("white"===t.noiseType)for(let h=0;h{"running"===e&&this.isPlaying&&(this.start(),sb.removeStateChangeListener(this.audioContext,this.audioContextStateChangeListener))}}start(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if("running"===this.audioContext.state){const t=this.audioContext.currentTime;this.isPlaying||(this.noiseSource=this.audioContext.createBufferSource(),this.noiseSource.buffer=this.noiseBuffer,this.noiseSource.loop=!0,this.noiseSource.connect(this.noiseSourceConnectionPoint),this.noiseSource.start(t+e))}else this.timeOfDeferredStartRequest=Date.now(),sb.hasListener(this.audioContext,this.audioContextStateChangeListener)||sb.addStateChangeListener(this.audioContext,this.audioContextStateChangeListener);this.isPlaying=!0}stop(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.isPlaying&&this.noiseSource&&(this.noiseSource.stop(e),this.noiseSource=null),this.isPlaying=!1}setLfoFrequency(e){this.lfo.frequency.setTargetAtTime(e,this.audioContext.currentTime,vN)}setLfoDepth(e){this.lfoAttenuatorGainNode.gain.setTargetAtTime(e/2,this.audioContext.currentTime,.05)}setLfoEnabled(e){e?(this.lfoAttenuatorGainNode.gain.setTargetAtTime(.5,this.audioContext.currentTime,vN),this.lfoAttenuatorGainNode.connect(this.lfoControlledGainNode.gain)):(this.lfoAttenuatorGainNode.disconnect(this.lfoControlledGainNode.gain),this.lfoAttenuatorGainNode.gain.setTargetAtTime(1,this.audioContext.currentTime,vN))}setBandpassFilterCenterFrequency(e,t){t=t||vN,null!==this.bandPassFilter&&this.bandPassFilter.frequency.setTargetAtTime(e,this.audioContext.currentTime,t)}}FS.register("NoiseGenerator",SN);class bN extends gb{constructor(e){const t=$e()({initialFrequency:440,initialWaveformType:"sine"},e);super(t),this.oscillatorNode=null,this.frequency=t.initialFrequency,this.waveformType=t.initialWaveformType}play(){this.oscillatorNode||(this.oscillatorNode=jS.createOscillator(),this.oscillatorNode.type=this.waveformType,this.oscillatorNode.frequency.setValueAtTime(this.frequency,jS.currentTime),this.oscillatorNode.connect(this.mainGainNode),this.oscillatorNode.start())}stop(){this.oscillatorNode&&(this.oscillatorNode.stop(),this.oscillatorNode=null)}setWaveformType(e){this.waveformType=e,this.oscillatorNode&&(this.oscillatorNode.type=e)}}FS.register("OscillatorSoundGenerator",bN);class TN extends gb{constructor(e){const t=$e()({pitchRange:new zt(220,660),numPopGenerators:8},e);super(t),this.pitchRange=t.pitchRange;const i=this.audioContext.createDynamicsCompressor(),n=this.audioContext.currentTime;i.threshold.setValueAtTime(-3,n),i.knee.setValueAtTime(0,n),i.ratio.setValueAtTime(12,n),i.attack.setValueAtTime(0,n),i.release.setValueAtTime(.25,n),i.connect(this.soundSourceDestination),this.soundSources=[],_.times(t.numPopGenerators,()=>{const e=this.audioContext.createOscillator(),n=this.audioContext.currentTime;e.type="sine",e.frequency.setValueAtTime(t.pitchRange.min,n),e.start(0);const r=this.audioContext.createGain();r.gain.setValueAtTime(0,n),e.connect(r),r.connect(i),this.soundSources.push({oscillator:e,gainNode:r})}),this.nextSoundSourceIndex=0}playPop(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.02;if(!this.fullyEnabled)return;const i=this.pitchRange.min,n=i+e*(this.pitchRange.max-i),r=this.soundSources[this.nextSoundSourceIndex];this.nextSoundSourceIndex=(this.nextSoundSourceIndex+1)%this.soundSources.length;const s=this.audioContext.currentTime;r.gainNode.gain.cancelScheduledValues(s),r.oscillator.frequency.setValueAtTime(n/2,s),r.gainNode.gain.setValueAtTime(0,s),r.oscillator.frequency.linearRampToValueAtTime(2*n,s+t),r.gainNode.gain.setTargetAtTime(1,s,.005),r.gainNode.gain.setTargetAtTime(0,s+t,.005)}}FS.register("PitchedPopGenerator",TN);class wN extends EN{constructor(e,t,i){const n=$e()({linkLazily:!0},i);super(t,n);const r=e=>{this.playAssociatedSound(e)};n.linkLazily?e.lazyLink(r):e.link(r),this.disposePropertyMultiClip=()=>{e.unlink(r)}}dispose(){this.disposePropertyMultiClip()}}FS.register("PropertyMultiClip",wN);class VN extends gb{constructor(e,t){const i=$e()({initialOutputLevel:.7,soundClipOptions:null,arpeggiate:!1,arpeggiateTime:.1,chordPlaybackRates:[Math.pow(2,1/12),Math.pow(2,4/12),Math.pow(2,7/12)]},t);i.soundClipOptions,super(i),this.arpeggiate=i.arpeggiate,this.arpeggiateTime=i.arpeggiateTime,this.playbackSoundClips=i.chordPlaybackRates.map(t=>{const n=new Ab(e,We({initialPlaybackRate:t},i.soundClipOptions));return n.connect(this.soundSourceDestination),n}),this.isPlayingProperty=ir.or(this.playbackSoundClips.map(e=>e.isPlayingProperty))}play(){this.playbackSoundClips.forEach((e,t)=>{const i=this.arpeggiate?t*this.arpeggiateTime/this.playbackSoundClips.length:0;e.play(i)})}stop(){this.playbackSoundClips.forEach(e=>{e.stop()})}dispose(){this.playbackSoundClips.forEach(e=>e.dispose()),this.playbackSoundClips.length=0,super.dispose()}}FS.register("SoundClipChord",VN);class PN extends Yu{constructor(e){const t=$e()({frequencyProperty:null,depthProperty:null,waveformProperty:null},e);super(t),this.myEnabledProperty=this.enabledProperty,this.frequencyProperty=t.frequencyProperty||new Xn(5),this.depthProperty=t.depthProperty||new Xn(.9),this.waveformProperty=t.waveformProperty||new Rn("sine"),this.modulatedGainNode=jS.createGain(),this.modulatedGainNode.gain.value=.5;const i=jS.createGain();i.connect(this.modulatedGainNode.gain);let n=null;const r=e=>{const t=jS.currentTime;if(e){const e=this.depthProperty.value;i.gain.setValueAtTime(e/2,jS.currentTime),this.modulatedGainNode.gain.setValueAtTime(1-e/2,jS.currentTime),n=jS.createOscillator(),n.frequency.setValueAtTime(this.frequencyProperty.value,t),n.type=this.waveformProperty.value,n.connect(i),n.start()}else n.stop(),n=null,this.modulatedGainNode.gain.setValueAtTime(1,t)};this.enabledProperty.link(r);const s=e=>{n&&(i.gain.setValueAtTime(e/2,jS.currentTime),this.modulatedGainNode.gain.setValueAtTime(1-e/2,jS.currentTime))};this.depthProperty.link(s);const o=e=>{n&&(n.type=e)};this.waveformProperty.link(o);const a=e=>{n&&n.frequency.setValueAtTime(e,jS.currentTime)};this.frequencyProperty.link(a),this.disposeAmplitudeModulator=()=>{this.enabledProperty.unlink(r),this.depthProperty.unlink(s),this.waveformProperty.unlink(o),this.frequencyProperty.unlink(a)}}dispose(){this.disposeAmplitudeModulator(),super.dispose()}getConnectionPoint(){return this.modulatedGainNode}connect(e){this.modulatedGainNode.connect(e)}}FS.register("AmplitudeModulator",PN);class xN extends AudioWorkletNode{constructor(e){const t=$e()({logZeroValues:!1},e);super(jS,"peak-detector"),this.port.onmessage=e=>{if(void 0!==e.data.peak){const i=e.data.peak;(i>0||t.logZeroValues)&&console.log("peak = "+i)}}}}console.log("loading peak-detector module on audio rendering thread..."),jS.audioWorklet.addModule("../../tambo/js/peak-detector.js").then(()=>{console.log("peak detector worklet loaded successfully")}).catch(e=>{console.warn("error while loading peak detector worklet, peak detector probably won't work, error: "+e)}),FS.register("PeakDetectorAudioNode",xN);const CN=ev("TAMBO");FS.register("TamboStrings",CN);const _N=new yt("Float64ArrayIO",{valueType:Float64Array,toStateObject:e=>{const t=[];return e.forEach(e=>t.push(e)),t},fromStateObject:e=>new Float64Array(e),stateSchema:mt.asValue("Float64Array",{isValidValue:e=>Array.isArray(e)&&void 0===e.find(e=>"number"!=typeof e)}),applyState:(e,t)=>e.set(t)});at.register("Float64ArrayIO",_N);const RN=new Map,NN={valueType:Array,isValidValue:e=>Array.isArray(e)&&e.every(e=>Array.isArray(e))};function MN(e,t){const i=e.typeName+","+t.typeName;return RN.has(i)||RN.set(i,new yt(`MapIO<${e.typeName},${t.typeName}>`,{valueType:Map,isValidValue:i=>{for(const[n,r]of i){if(!rt.isValueValid(n,e.validator))return!1;if(!rt.isValueValid(r,t.validator))return!1}return!0},parameterTypes:[e,t],toStateObject:i=>{const n=[];for(const[r,s]of i)n.push([e.toStateObject(r),t.toStateObject(s)]);return n},fromStateObject:i=>{const n=i.map(i=>[e.fromStateObject(i[0]),t.fromStateObject(i[1])]);return new Map(n)},documentation:"IO Type for the built-in JS Map type, with the key and value types specified.",stateSchema:mt.asValue(`Map<${e.typeName},${t.typeName}>`,{isValidValue:e=>{if(!rt.isValueValid(e,NN))return!1;for(let t=0;tOi.getRegexFromTerm(Oi.BASE_DYNAMIC_TANDEM_TERM).test(e)},i))}getArchetypalPhetioID(){return window.phetio.PhetioIDUtils.append(this.parentTandem.getArchetypalPhetioID(),Li)}}_defineProperty(LN,"DYNAMIC_ARCHETYPE_NAME",Li),at.register("DynamicTandem",LN);const IN=LN;class DN extends Zi{constructor(e,t,i){const n=$e()({phetioState:!1,supportsDynamicState:!0,containerSuffix:"Container",phetioDynamicElementName:void 0},i);if(Array.isArray(t),n.tandem&&(n.phetioDynamicElementName=n.tandem.name.slice(0,n.tandem.name.length-n.containerSuffix.length)),super(n),this.supportsDynamicState=n.supportsDynamicState,this.phetioDynamicElementName=n.phetioDynamicElementName,this.createElement=e,this.defaultArguments=t,this._archetype=this.createArchetype(),this.elementCreatedEmitter=new Yn({parameters:[{valueType:Zi,phetioType:n.phetioType.parameterTypes[0],name:"element"},{name:"phetioID",phetioType:Yi}],tandem:n.tandem.createTandem("elementCreatedEmitter"),phetioDocumentation:"Emitter that fires whenever a new dynamic element is added to the container."}),this.elementDisposedEmitter=new Yn({parameters:[{valueType:Zi,phetioType:n.phetioType.parameterTypes[0],name:"element"},{name:"phetioID",phetioType:Yi}],tandem:n.tandem.createTandem("elementDisposedEmitter"),phetioDocumentation:"Emitter that fires whenever a dynamic element is removed from the container."}),Oi.PHET_IO_ENABLED&&(this.elementCreatedEmitter.addListener(e=>this.createdEventListener(e)),this.elementDisposedEmitter.addListener(e=>this.disposedEventListener(e))),this.notificationsDeferred=!1,this.deferredCreations=[],this.deferredDisposals=[],Oi.PHET_IO_ENABLED&&this.supportsDynamicState&&!this.phetioIsArchetype){const e=phet.phetio.phetioEngine.phetioStateEngine;e.clearDynamicElementsEmitter.addListener((e,t)=>{this.tandem.hasAncestor(t)&&(this.clear({phetioState:e}),this.setNotificationsDeferred(!0))}),e.stateSetEmitter.addListener(()=>{this.notificationsDeferred&&this.setNotificationsDeferred(!1)}),e.addSetStateHelper((e,t)=>{let i=!1,n=0;for(;this.deferredCreations.length>0;){if(n>200)throw new Error("Too many iterations in deferred creations, stillToSetIDs = "+t.join(", "));const e=this.deferredCreations[0];this.stateSetOnAllChildrenOfDynamicElement(e.tandem.phetioID,t)&&(this.notifyElementCreatedWhileDeferred(e),i=!0),n++}return i})}}stateSetOnAllChildrenOfDynamicElement(e,t){for(let i=0;i0;)this.notifyElementCreatedWhileDeferred(this.deferredCreations[0]);for(;this.deferredDisposals.length>0;)this.notifyElementDisposedWhileDeferred(this.deferredDisposals[0])}this.notificationsDeferred=e}get archetype(){return function(e){if(null===e)throw new Error("archetype should exist");return e}(this._archetype)}getMetadata(e){const t=super.getMetadata(e);return We({phetioDynamicElementName:this.phetioDynamicElementName},t)}}at.register("PhetioDynamicElementContainer",DN);const kN=DN,qN=new Map;class BN extends kN{constructor(e,t,i){const n=$e()({containerSuffix:"Capsule",disposeOnClear:!0},i);super(e,t,n),this.element=null,this.disposeOnClear=n.disposeOnClear}disposeElement(){super.disposeElement(this.element),this.element=null}hasElement(){return null!==this.element}getElement(){if(!this.element){for(var e=arguments.length,t=new Array(e),i=0;i1&&void 0!==arguments[1]&&arguments[1];return this.element=this.createDynamicElement(this.phetioDynamicElementName,e,Oi.PHET_IO_ENABLED?this.phetioType.parameterTypes[0]:null),this.notifyElementCreated(this.element),this.element}}Be=BN,_defineProperty(BN,"PhetioCapsuleIO",e=>(qN.has(e)||qN.set(e,new yt(`PhetioCapsuleIO<${e.typeName}>`,{valueType:Be,documentation:"An array that sends notifications when its values have changed.",parameterTypes:[e],metadataDefaults:{phetioDynamicElementName:null},addChildElement(t,i,n){const r=e.stateObjectToCreateElementArguments(n);return t.create(r,!0)}})),qN.get(e))),at.register("PhetioCapsule",BN);const ON=new Map;class HN extends kN{constructor(e,t,i){var n;const r=$e()({groupElementStartingIndex:1,containerSuffix:"Group"},i);super(e,t,r),this._array=[],this.groupElementStartingIndex=r.groupElementStartingIndex,this.groupElementIndex=this.groupElementStartingIndex,this.countProperty=new Xn(0,{tandem:null===(n=r.tandem)||void 0===n?void 0:n.createTandem("countProperty"),phetioDocumentation:"the number of elements in the group",phetioReadOnly:!0,phetioFeatured:!0,numberType:"Integer"})}dispose(){}disposeElement(e){Ai(this._array,e),this.countProperty.value=this._array.length,super.disposeElement(e)}getArray(){return this._array}getArrayCopy(){return this._array.slice()}getElement(e){return this._array[e]}getLastElement(){return this.getElement(this.count-1)}get count(){return this.countProperty.value}filter(e){return this._array.filter(e)}includes(e){return this._array.includes(e)}indexOf(e){return this._array.indexOf(e)}forEach(e){this._array.forEach(e)}find(e){return this._array.find(e)}map(e){return this._array.map(e)}clear(e){const t=$e()({phetioState:null,resetIndex:!0},e);for(;this._array.length>0;)this.disposeElement(this._array[0]);t.resetIndex&&(this.groupElementIndex=this.groupElementStartingIndex)}createCorrespondingGroupElement(e){const t=window.phetio.PhetioIDUtils.getGroupElementIndex(e);this.groupElementIndex===t&&this.groupElementIndex++;for(var i=arguments.length,n=new Array(i>1?i-1:0),r=1;r2&&void 0!==arguments[2]&&arguments[2];const i=this.phetioDynamicElementName+window.phetio.PhetioIDUtils.GROUP_SEPARATOR+e,n=Oi.PHET_IO_ENABLED?this.phetioType.parameterTypes[0]:null,r=this.createDynamicElement(i,t,n);return this._array.push(r),this.countProperty.value=this._array.length,this.notifyElementCreated(r),r}}_defineProperty(HN,"PhetioGroupIO",e=>(ON.has(e)||ON.set(e,new yt(`PhetioGroupIO<${e.typeName}>`,{isValidValue:e=>e instanceof(window.phet?phet.tandem.PhetioGroup:at.PhetioGroup),documentation:"An array that sends notifications when its values have changed.",metadataDefaults:{phetioDynamicElementName:null},parameterTypes:[e],addChildElement(t,i,n){const r=e.stateObjectToCreateElementArguments(n),s=window.phetio.PhetioIDUtils.getGroupElementIndex(i),o=t.createIndexedElement(s,r,!0);return t.groupElementIndex=Math.max(s+1,t.groupElementIndex),o}})),ON.get(e))),at.register("PhetioGroup",HN);i(37);const YN=new Ye("tappi");class GN{constructor(e,t,i,n){this.x=e,this.y=t,this.time=i,this.name=n}}YN.register("VibrationTestEvent",GN);const FN=GN;class UN{constructor(e){this.events=[],window.addEventListener("message",t=>{if("string"==typeof t.data&&"requestVibrationData"===t.data){const t=this.dataToString();e.saveTestEvents(t)}})}addTestEvent(e){this.events.push(e)}dataToString(){let e="";return this.events.forEach(t=>{e+=t.x+",",e+=t.y+",",e+=t.time+",",e+=t.name+";"}),e}}YN.register("VibrationTestEventRecorder",UN);class zN{constructor(e){this.eventRecorder=e,this.elapsedTime=0,this._pointerListener={up:e=>{const t=e.pointer.point,i=new FN(t.x,t.y,this.elapsedTime,e.pointer.type+"up");this.eventRecorder.addTestEvent(i),this.handleRelease()},cancel:e=>{this.handleRelease()},move:e=>{const t=e.pointer.point,i=new FN(t.x,t.y,this.elapsedTime,e.pointer.type+"move");this.eventRecorder.addTestEvent(i)}},this.pointer=null}handleRelease(e){this.pointer.removeInputListener(this._pointerListener),this.pointer=null}interrupt(){this.pointer&&(this.pointer.removeInputListener(this._pointerListener),this.pointer=null)}down(e){if(null===this.pointer){this.pointer=e.pointer;const t=e.pointer.point,i=new FN(t.x,t.y,this.elapsedTime,e.pointer.type+"down");this.eventRecorder.addTestEvent(i),e.pointer.addInputListener(this._pointerListener,!1)}}click(e){const t=e.target.globalBounds.center;console.log(t);const i=new FN(t.x,t.y,this.elapsedTime,e.pointer.type);this.eventRecorder.addTestEvent(i)}setElapsedTime(e){this.elapsedTime=e}}YN.register("VibrationTestInputListener",zN);class WN extends Lh{constructor(e,t,i,n){n=We({labelFont:new Jv(24)},n),super(),this.vibratingProperty=e,this.timeProperty=new Xn(0),this.vibrationSeries=new aS({color:"orange"});const r=new qc("Vibration",{rotation:-Math.PI/2,font:n.labelFont}),s=new qc("Time (s)",{font:n.labelFont}),o=new VS(this.timeProperty,[this.vibrationSeries],new qc(""),{width:t,height:i,verticalAxisLabelNode:r,horizontalAxisLabelNode:s,numberVerticalLines:10,numberHorizontalLines:3,verticalRanges:[new zt(-1.5,1.5)]}),a=new Lh;a.addChild(o);const l=new eS(a,{fill:"lightgrey"});this.addChild(l),this.mutate(n)}step(e){this.timeProperty.set(this.timeProperty.get()+e);const t=this.vibratingProperty.get()?1:-1;for(this.vibrationSeries.addXYDataPoint(this.timeProperty.get(),t);this.vibrationSeries.getDataPoint(0).x{i.fill=e?"lightblue":"grey",this.leftVibrationPath.visible=e,this.rightVibrationPath.visible=e,this.leftVibrationPath.center=o,this.rightVibrationPath.center=a})}step(e){if(this.timeProperty.set(this.timeProperty.get()+e),this.vibratingProperty.get()){const e=-Math.sin(70*this.timeProperty.get()),t=.5*Math.sin(10*this.timeProperty.get());this.rightVibrationPath.translate(e,t),this.leftVibrationPath.translate(e,t)}}}YN.register("VibrationIndicator",jN);class XN{constructor(e,t){_defineProperty(this,"patternIndex",0),_defineProperty(this,"patternValue",0),_defineProperty(this,"valueTime",0),_defineProperty(this,"runningPattern",!1);const i=$e()({repeat:!0,sharpness:1,intensity:1,activePattern:[]},t);this.vibrationManageriOS=e,this.activePattern=i.activePattern,this.repeat=i.repeat,this.intensity=i.intensity,this.sharpness=i.sharpness,this.pendingPattern=this.activePattern}step(e){this.runningPattern&&(this.valueTime+=e,this.valueTime>=this.patternValue&&(this.valueTime=0,this.patternIndex++,this.patternIndex{e.vibrateTransient(),Ln.setTimeout(()=>{e.vibrateTransient(),Ln.setTimeout(()=>{e.vibrateTransient()},150)},150)}};YN.register("VibrationPatterns",KN);const JN=[8,8],ZN=[Number.MAX_SAFE_INTEGER,0];class $N extends jt{}_defineProperty($N,"HIGH",new(Oe=$N)),_defineProperty($N,"LOW",new Oe),_defineProperty($N,"enumeration",new Jt(Oe));const eM=_.noop,tM=[Number.MAX_SAFE_INTEGER];const iM=new class{constructor(){_defineProperty(this,"enabledProperty",new Nn(!0)),_defineProperty(this,"vibratingProperty",new Nn(!1)),_defineProperty(this,"intensityProperty",new gT($N.HIGH)),_defineProperty(this,"_runningVibration",!1),_defineProperty(this,"_vibrationPattern",tM),_defineProperty(this,"_intensityDuration",0),_defineProperty(this,"_timeRunningCurrentInterval",0),_defineProperty(this,"_patternTimeLimit",Number.POSITIVE_INFINITY),_defineProperty(this,"_timeRunningCurrentPattern",0),_defineProperty(this,"_currentIntervalIndex",0),_defineProperty(this,"_vibrationIntensityPattern",ZN),_defineProperty(this,"_navigatorVibrationCallback",eM),_defineProperty(this,"expandedPatternInterval",eM)}initialize(e,t){this.setVibrationIntensity(this.intensityProperty.get()),pr.multilink([this.vibratingProperty,this.intensityProperty],(e,t)=>{this.controlNavigator()}),pr.multilink([this.enabledProperty,e,t],(e,t,i)=>{e&&t&&i&&this.stopVibrate()})}controlNavigator(){if(this._navigatorVibrationCallback&&(Ln.clearInterval(this._navigatorVibrationCallback),this._navigatorVibrationCallback=eM,navigator.vibrate(0)),this.vibratingProperty.get()){const e=()=>{navigator.vibrate(this._vibrationIntensityPattern)};this._navigatorVibrationCallback=Ln.setInterval(e,this._intensityDuration),e()}}startVibrate(e){this.resetTimingVariables(),this._runningVibration=!0,this._vibrationPattern=e||tM}stopVibrate(){this._runningVibration=!1,this.vibratingProperty.set(!1)}startTimedVibrate(e,t){this.resetTimingVariables(),this._patternTimeLimit=e,this._runningVibration=!0,this._vibrationPattern=t||tM}startRepeatingVibrationPattern(e){this.stopRepeatingVibrationPattern();const t=e.reduce((e,t)=>e+t,0);phet.log&&phet.log("providedPatternDuration = "+t);const i=Math.floor(5e3/t)+1;phet.log&&phet.log("repeatCount = "+i);const n=[];let r=0;_.times(i,()=>{e.forEach(e=>{n.push(e),r+=e})}),phet.log&&phet.log("expandedPattern = "+n),phet.log&&phet.log("expandedPattern.length = "+n.length),phet.log&&phet.log("totalPatternTime = "+r),navigator.vibrate(n),this.expandedPatternInterval=Ln.setInterval(()=>{navigator.vibrate(n),phet.log&&phet.log("restarting pattern")},r)}stopRepeatingVibrationPattern(){navigator.vibrate(0),this.expandedPatternInterval!==eM&&(Ln.clearInterval(this.expandedPatternInterval),this.expandedPatternInterval=eM)}isVibrating(){return this.vibratingProperty.get()}isRunningPattern(){return this._runningVibration}setVibrationIntensity(e){e===$N.LOW?this._vibrationIntensityPattern=JN:e===$N.HIGH&&(this._vibrationIntensityPattern=ZN);const t=_.reduce(this._vibrationIntensityPattern,(e,t)=>e+t);this._intensityDuration="number"==typeof t?t:0,this.intensityProperty.set(e)}resetTimingVariables(){this._timeRunningCurrentInterval=0,this._timeRunningCurrentPattern=0,this._currentIntervalIndex=0,this._patternTimeLimit=Number.POSITIVE_INFINITY}step(e){if(e*=1e3,this._runningVibration){const t=this._vibrationPattern[this._currentIntervalIndex];if(this._timeRunningCurrentInterval>t){const e=this._currentIntervalIndex+1;this._currentIntervalIndex=e=this._patternTimeLimit&&this.stopVibrate()}}};YN.register("vibrationManager",iM);class nM{constructor(e){_defineProperty(this,"timeElapsed",0);const t=$e()({valueProperty:new vn(0),velocityProperty:new vn(0),damping:1,force:1,targetValue:0},e);this.valueProperty=t.valueProperty,this.velocityProperty=t.velocityProperty,this._damping=t.damping,this._force=t.force,this._targetValue=t.targetValue,this.recompute()}get targetValue(){return this._targetValue}set targetValue(e){this._targetValue=e,this.recompute()}get damping(){return this._damping}set damping(e){this._damping=e,this.recompute()}get force(){return this._force}set force(e){this._force=e,this.recompute()}recompute(){this.timeElapsed=0,this.harmonic=new Mv(1,Math.sqrt(4*this._force)*this._damping,this._force,this.valueProperty.value-this._targetValue,this.velocityProperty.value)}step(e){this.timeElapsed+=e,this.valueProperty.value=this._targetValue+this.harmonic.getValue(this.timeElapsed),this.velocityProperty.value=this.harmonic.getDerivative(this.timeElapsed)}}M_.register("DampedAnimation",nM);function rM(e){return e}Ue.register("required",rM);const sM=rM;class oM extends B_{constructor(e,t,i){const n={fromTargets:sM(i.fromTargets),toTargets:sM(i.toTargets),resetNode:sM(i.resetNode),targetOptions:null};i=We({},n,i);const r=We({},i.targetOptions);let s=[];e&&(s=s.concat(i.fromTargets.map(t=>tt(t,{object:e},r)))),t&&(s=s.concat(i.toTargets.map(e=>tt(e,{object:t},r)))),super(tt({targets:s},_.omit(i,_.keys(n)))),this.endedEmitter.addListener(()=>{e&&i.resetNode(e),t&&i.resetNode(t)})}static slideLeft(e,t,i,n){return oM.createSlide(t,i,"x",e.width,!0,n)}static slideRight(e,t,i,n){return oM.createSlide(t,i,"x",e.width,!1,n)}static slideUp(e,t,i,n){return oM.createSlide(t,i,"y",e.height,!0,n)}static slideDown(e,t,i,n){return oM.createSlide(t,i,"y",e.height,!1,n)}static wipeLeft(e,t,i,n){return oM.createWipe(e,t,i,"maxX","minX",n)}static wipeRight(e,t,i,n){return oM.createWipe(e,t,i,"minX","maxX",n)}static wipeUp(e,t,i,n){return oM.createWipe(e,t,i,"maxY","minY",n)}static wipeDown(e,t,i,n){return oM.createWipe(e,t,i,"minY","maxY",n)}static dissolve(e,t,i){const n=(e,t,i)=>Math.pow((1-i)*e+i*t,r.gamma),r=$e()({gamma:1,fromTargets:[{attribute:"opacity",from:1,to:0,blend:n}],toTargets:[{attribute:"opacity",from:0,to:1,blend:n}],resetNode:e=>{e.opacity=1}},i);return new oM(e,t,r)}static createSlide(e,t,i,n,r,s){const o=r?-1:1;return new oM(e,t,$e()({fromTargets:[{attribute:i,from:0,to:n*o}],toTargets:[{attribute:i,from:-n*o,to:0}],resetNode:e=>{e[i]=0}},s))}static createWipe(e,t,i,n,r,s){const o=e.copy(),a=e.copy();o[n]=e[r],a[r]=e[n];const l=(e,t,i)=>bs.bounds(e.blend(t,i));return new oM(t,i,$e()({fromTargets:[{attribute:"clipArea",from:e,to:o,blend:l}],toTargets:[{attribute:"clipArea",from:a,to:e,blend:l}],resetNode:function(e){e.clipArea=null}},s))}}M_.register("Transition",oM);const aM=oM;class lM extends Lh{constructor(e,t){const i=$e()({content:null,useBoundsClip:!0,cachedNodes:[]},t);super(),_defineProperty(this,"toContent",null),this.transitionBoundsProperty=e,this.useBoundsClip=i.useBoundsClip,this.cachedNodes=i.cachedNodes,this.fromContent=i.content,this.children=this.cachedNodes;for(let n=0;n{this.fromContent&&(this.fromContent.pickable=null),this.toContent&&(this.toContent.pickable=null),this.transition=null,this.fromContent&&(_.includes(this.cachedNodes,this.fromContent)?this.fromContent.visible=!1:this.removeChild(this.fromContent)),this.fromContent=this.toContent,this.toContent=null}),t.start(),t}dispose(){this.interrupt(),this.transitionBoundsProperty.unlink(this.boundsListener),super.dispose()}}M_.register("TransitionNode",lM);Wu.register("ActivationUtterance",class extends rd{constructor(e){const t=$e()({alertStableDelay:500},e);super(t)}});class hM extends rd{constructor(e){Qe("Please use AccessibleValueHander.a11yCreateContextResponseAlert(), see https://github.com/phetsims/sun/issues/685"),super($e()({alertStableDelay:1e3},e))}}Wu.register("ValueChangeUtterance",hM);const cM=new Ye("vegas"),uM=ev("VEGAS");cM.register("VegasStrings",uM);const dM=uM;cM.register("AllLevelsCompletedNode",class extends Lh{constructor(e,t){super();const i=$e()({faceDiameter:160,maxTextWidth:300},t),n=new PP(i.faceDiameter),r=new Nf(dM.youCompletedAllLevelsStringProperty,{font:new Jv(25),lineWrap:300,maxWidth:i.maxTextWidth,maxHeight:300}),s=new kT({content:new qc(dM.doneStringProperty,{font:new Jv(30),maxWidth:i.maxTextWidth}),listener:e,baseColor:"yellow"});this.addChild(new eS(new cf({children:[n,r,s],spacing:20}),{xMargin:50,yMargin:20})),this.mutate(i)}});class pM extends Lh{constructor(e,t){super();const i=$e()({fill:"white",stroke:"black",lineWidth:2},t);this.addChild(new Gc(e,i)),this.addChild(new Gc(.15*e,{fill:i.stroke}));const n={stroke:i.stroke,lineWidth:i.lineWidth,lineCap:"round",lineJoin:"round"};this.addChild(new Uc(0,0,0,.75*-e,n)),this.addChild(new Uc(0,0,.45*e,.3*e,n)),this.centerX=e,this.centerY=e,this.mutate(i)}}ME.register("SimpleClockIcon",pM);class mM{constructor(){this.isRunningProperty=new Nn(!1),this.elapsedTimeProperty=new Xn(0),this.intervalId=null}reset(){this.isRunningProperty.reset(),this.elapsedTimeProperty.reset()}start(){this.isRunningProperty.value||(this.elapsedTimeProperty.value=0,this.intervalId=Ln.setInterval(()=>{this.elapsedTimeProperty.value=this.elapsedTimeProperty.value+1},1e3),this.isRunningProperty.value=!0)}stop(){this.isRunningProperty.value&&(Ln.clearInterval(this.intervalId),this.intervalId=null,this.isRunningProperty.value=!1)}restart(){this.stop(),this.start()}static formatTime(e){const t=Math.floor(e/3600),i=Math.floor((e-3600*t)/60),n=Math.floor(e-3600*t-60*i),r=i>9||0===t?i:"0"+i,s=n>9?n:"0"+n;return t>0?zu.format(dM.pattern["0hours"]["1minutes"]["2secondsStringProperty"].value,t,r,s):zu.format(dM.pattern["0minutes"]["1secondsStringProperty"].value,r,s)}}cM.register("GameTimer",mM);class gM extends Lh{constructor(e,t,i){const n=$e()({barFill:"lightGray",barStroke:null,barHeight:50,xMargin:10,yMargin:8,floatToTop:!1,dynamicAlignment:!0},i),r=new Wc({fill:n.barFill,stroke:n.barStroke}),s=[r];n.children=s.concat(n.children||[]),super(n);const o=new Rn(ti.EVERYTHING,{valueType:ti});this.positioningBoundsProperty=o;const a=t=>{const i=n.floatToTop?t.top:e.top;r.setRect(t.minX,i,t.width,n.barHeight),o.value=new ti((n.dynamicAlignment?r.left:e.minX)+n.xMargin,r.top,(n.dynamicAlignment?r.right:e.maxX)-n.xMargin,r.bottom)};t.link(a),this.disposeStatusBar=()=>{t.hasListener(a)&&t.unlink(a)}}dispose(){this.disposeStatusBar(),super.dispose()}}_defineProperty(gM,"DEFAULT_FONT",new Jv(20)),_defineProperty(gM,"DEFAULT_TEXT_FILL",Eo.BLACK),ME.register("StatusBar",gM);const fM=gM;class yM extends hf{constructor(e,t){const i=$e()({clockIconRadius:15,font:fM.DEFAULT_FONT,textFill:"black",spacing:8},t),n=new pM(i.clockIconRadius),r=new qc("",{font:i.font,fill:i.textFill});i.children=[n,r],super(i);const s=e=>{r.string=mM.formatTime(e)};e.link(s),this.disposeElapsedTimeNode=()=>{e.hasListener(s)&&e.unlink(s)}}dispose(){this.disposeElapsedTimeNode(),super.dispose()}}cM.register("ElapsedTimeNode",yM);class AM extends Lh{constructor(e,t){const i=$e()({font:fM.DEFAULT_FONT,textFill:"black",scoreDecimalPlaces:0},t),n=new ir([dM.pattern.score.numberStringProperty,e],(e,t)=>zu.fillIn(e,{score:Bt.toFixed(t,i.scoreDecimalPlaces)})),r=new qc(n,{font:i.font,fill:i.textFill});i.children=[r],super(i),this.disposeScoreDisplayLabeledNumber=()=>{n.dispose()}}dispose(){this.disposeScoreDisplayLabeledNumber(),super.dispose()}}cM.register("ScoreDisplayLabeledNumber",AM);cM.register("FiniteStatusBar",class extends fM{constructor(e,t,i,n){var r;const s=$e()({challengeIndexProperty:null,numberOfChallengesProperty:null,levelProperty:null,elapsedTimeProperty:null,timerEnabledProperty:null,levelVisible:!0,challengeNumberVisible:!0,font:fM.DEFAULT_FONT,textFill:fM.DEFAULT_TEXT_FILL,createScoreDisplay:e=>new AM(e,{font:n&&n.font?n.font:fM.DEFAULT_FONT,textFill:n&&n.textFill?n.textFill:fM.DEFAULT_TEXT_FILL}),startOverButtonText:dM.startOverStringProperty,clockIconRadius:15,xSpacing:50,xMargin:20,yMargin:10,barFill:null,barStroke:null},n);s.startOverButtonOptions=tt({font:s.font,textFill:s.textFill,baseColor:uV.BUTTON_YELLOW,xMargin:10,yMargin:8,listener:_.noop,tandem:null===(r=s.tandem)||void 0===r?void 0:r.createTandem("startOverButton"),maxWidth:.2*(e.width-2*s.xMargin)},s.startOverButtonOptions),s.levelTextOptions=tt({fill:s.textFill,font:s.font},s.levelTextOptions),s.challengeTextOptions=tt({fill:s.textFill,font:s.font},s.challengeTextOptions);const o=new Wc({fill:s.barFill,stroke:s.barStroke}),a=[];let l,h;if(s.levelProperty&&s.levelVisible){var c;const e=new ir([dM.label.levelStringProperty,s.levelProperty],(e,t)=>zu.format(e,t));l=new qc(e,tt({tandem:null===(c=s.tandem)||void 0===c?void 0:c.createTandem("levelText")},s.levelTextOptions)),a.push(l)}if(s.challengeIndexProperty&&s.numberOfChallengesProperty){var u;const e=new ir([dM.pattern["0challenge"]["1maxStringProperty"],s.challengeIndexProperty,s.numberOfChallengesProperty],(e,t,i)=>zu.format(e,t+1,i));h=new qc(e,tt({tandem:null===(u=s.tandem)||void 0===u?void 0:u.createTandem("challengeNumberText")},s.challengeTextOptions)),a.push(h)}const d=s.createScoreDisplay(i);let p;a.push(d),s.elapsedTimeProperty&&s.timerEnabledProperty&&(p=new yM(s.elapsedTimeProperty,{visibleProperty:s.timerEnabledProperty,clockIconRadius:s.clockIconRadius,font:s.font,textFill:s.textFill}),a.push(p));const m=new iV(s.startOverButtonText,s.startOverButtonOptions),g=new hf({excludeInvisibleChildrenFromBounds:!1,spacing:s.xSpacing,children:a,maxWidth:e.width-2*s.xMargin-m.width-s.xSpacing});s.children=[o,g,m],s.barHeight=Math.max(g.height,d.height)+2*s.yMargin,super(e,t,s),pr.multilink([this.positioningBoundsProperty,g.boundsProperty,m.boundsProperty],(e,t,i)=>{g.left=e.left,g.centerY=e.centerY,m.right=e.right,m.centerY=e.centerY}),this.disposeFiniteStatusBar=()=>{l.dispose(),h.dispose(),d.dispose(),p&&p.dispose(),m.dispose(),p&&p.dispose()}}dispose(){this.disposeFiniteStatusBar(),super.dispose()}});const EM="data:audio/mpeg;base64,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",vM=GS(jS,EM),SM=IS.createLock(EM),bM=new zS;let TM=!1;const wM=()=>{TM||(SM(),TM=!0)},VM=jS.decodeAudioData(vM.buffer,e=>{null===bM.audioBufferProperty.value&&(bM.audioBufferProperty.set(e),wM())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),bM.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),wM()});VM&&VM.then(e=>{null===bM.audioBufferProperty.value&&(bM.audioBufferProperty.set(e),wM())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),wM()});const PM=bM,xM="data:audio/mpeg;base64,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",CM=GS(jS,xM),_M=IS.createLock(xM),RM=new zS;let NM=!1;const MM=()=>{NM||(_M(),NM=!0)},LM=jS.decodeAudioData(CM.buffer,e=>{null===RM.audioBufferProperty.value&&(RM.audioBufferProperty.set(e),MM())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),RM.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),MM()});LM&&LM.then(e=>{null===RM.audioBufferProperty.value&&(RM.audioBufferProperty.set(e),MM())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),MM()});const IM=RM,DM="data:audio/mpeg;base64,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",kM=GS(jS,DM),qM=IS.createLock(DM),BM=new zS;let OM=!1;const HM=()=>{OM||(qM(),OM=!0)},YM=jS.decodeAudioData(kM.buffer,e=>{null===BM.audioBufferProperty.value&&(BM.audioBufferProperty.set(e),HM())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),BM.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),HM()});YM&&YM.then(e=>{null===BM.audioBufferProperty.value&&(BM.audioBufferProperty.set(e),HM())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),HM()});const GM=BM,FM="data:audio/mpeg;base64,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rcqD2R7/qIYKJG/9Azn/82LE9SF8MkAoecWJ3+7ln//p3eVssagYfLLVWpFsBSTS9XGPBlhsglzxxYUqGQUUNti0RsFhRx8L8JiBRrDeuRaKSxIstMLx8EErzlr28r2zSlzQhwLsXjxSOmw+j+T5ViiEuq6zgsSFTpqJvTfXUtUjxGraSKGswqMn+ZK1zIUgVrr97ZP/3G////xX1/dP9Jys1+lO7aMz7lys//NixOwfEipIPHtFiJOxrXZUs7rYzIxbmIyEc6HcYUqCyhFuY0NODixGI01CvRnMLyPi8NsYV0K27mL1NszULTTZPdysOoT4Iz++320JhqmYI9EWCuz22XTdP8J5wyA9PL/MxgWVssmZi+lWyShpEhuj6163+YnnqqCWa3V0v/q6jX6v7f/v//29/pps1J/7z/7/renjtfe4pryNm//zYsT/I+xKOAp8hTWGp2hoNuo92gVXUxxXmNQ9W2LRxPy219LYugk1ohxcqIpMQU1F/xBanxmeWRua0Ozw/o0VeTerG9bvcSrkpt+DvtR1yTRvg+YGt4z8T/otwfB9mrbtJA/dTuPlpfrWk0HP+pjoe7+r6mlRoR/dOenSjLrn06//9eaR/9/Pt7Kltkrnos7bMZmWU33qqGlj1JX/82DE/yPsfjAAe014sUS8R6js2YZZTnQGwuaOKSedMks+31kX/f2dcRhaEJVMQU1FMy45OS4zVVVVIAIFv5GAd6zrKjRF8MjrgPlyauokYTR6CTy4RBUMtr6qwAl8WCTsWtWh0+nu4lytvtQzGpNXqGjnSk03DNrLsnfO2H+UzWrrsX26lOp/+RHz/hRJclJGHI7/Ph5G3XaHsfX/82LE+iKsgjAKec18jt/eRDrF1R/Ilnir0k1MoR7D8ZHRTOiR9yEorMFd2BOqTICEWMZSzIIlmEQKzlVn2QweKnKVjX1Yxqt6lhn6hWMz/opZjGMbXob/Q3/qFayGM/Qz/ylLmfyt0ev/T/NmM/0KUrSgIluv9WrXce1at+s7WZnDlS09b2TkxJRkfPVWuphCUtPMxLnkoSiUqOT3//NixPIgjII1lkFG/KEcQOolruW2uW2xWJ3zY6EZedEoSo2Vq11adXW1rWToykxBTUUzLjk5LjOqqpdsIyaZkZlTRGRbTMjMqYSMi2mZGZU0RkW0zIzKmEjIj/mRk1/kZH/+0IyMy3IyIyp/+ZEZU8zL///yMiMv/zI7q6uvm7GUVlUk0kk0k0l4ThV1ebGSqFEQkQyHhsgIy6Bs8f/zYsT+I7SCCCgomVwwpIhkaEQyNDZARoG2HNKrKpJqLqrKrJpLqLppJ0GLVUxBTUUzLjk5LjNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/82DE9SEMbTGKCFNdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=",UM=GS(jS,FM),zM=IS.createLock(FM),WM=new zS;let jM=!1;const XM=()=>{jM||(zM(),jM=!0)},QM=jS.decodeAudioData(UM.buffer,e=>{null===WM.audioBufferProperty.value&&(WM.audioBufferProperty.set(e),XM())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),WM.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),XM()});QM&&QM.then(e=>{null===WM.audioBufferProperty.value&&(WM.audioBufferProperty.set(e),XM())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),XM()});const KM=WM,JM="data:audio/mpeg;base64,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",ZM=GS(jS,JM),$M=IS.createLock(JM),eL=new zS;let tL=!1;const iL=()=>{tL||($M(),tL=!0)},nL=jS.decodeAudioData(ZM.buffer,e=>{null===eL.audioBufferProperty.value&&(eL.audioBufferProperty.set(e),iL())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),eL.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),iL()});nL&&nL.then(e=>{null===eL.audioBufferProperty.value&&(eL.audioBufferProperty.set(e),iL())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),iL()});const rL=eL,sL=new Ab(GM),oL=new Ab(PM),aL=new Ab(rL),lL=new Ab(IM),hL=new Ab(KM);let cL=!1;cM.register("GameAudioPlayer",class{constructor(){cL||(Nb.addSoundGenerator(sL),Nb.addSoundGenerator(oL),Nb.addSoundGenerator(aL),Nb.addSoundGenerator(lL),Nb.addSoundGenerator(hL),cL=!0)}correctAnswer(){sL.play()}wrongAnswer(){oL.play()}challengeComplete(){hL.play()}gameOverZeroScore(){oL.play()}gameOverImperfectScore(){aL.play()}gameOverPerfectScore(){lL.play()}});const uL=new Jv(24);cM.register("GameInfoDialog",class extends GV{constructor(e,t){const i=$e()({descriptionTextOptions:{font:uL},vBoxOptions:{align:"left",spacing:20},maxContentWidth:.75*zw.DEFAULT_LAYOUT_BOUNDS.width,tandem:Oi.REQUIRED},t);i.title&&(i.title=new Lh({children:[i.title],maxWidth:i.maxContentWidth}));const n=e.map((e,t)=>new Nf(e,$e()({tandem:i.tandem.createTandem(`level${t}DescriptionText`)},i.descriptionTextOptions)));i.gameLevels&&n.forEach((e,t)=>{e.visible=i.gameLevels.includes(t+1)}),super(new cf($e()({children:n,maxWidth:i.maxContentWidth},i.vBoxOptions)),i),this.disposeGameInfoDialog=()=>{n.forEach(e=>e.dispose())}}dispose(){this.disposeGameInfoDialog(),super.dispose()}});const dL="data:audio/mpeg;base64,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VVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7MsSFAMQYRv2jCSqwfoPTuPekJ1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+zDEqIPAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+zLEu4PAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV",pL=GS(jS,dL),mL=IS.createLock(dL),gL=new zS;let fL=!1;const yL=()=>{fL||(mL(),fL=!0)},AL=jS.decodeAudioData(pL.buffer,e=>{null===gL.audioBufferProperty.value&&(gL.audioBufferProperty.set(e),yL())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),gL.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),yL()});AL&&AL.then(e=>{null===gL.audioBufferProperty.value&&(gL.audioBufferProperty.set(e),yL())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),yL()});const EL=gL;class vL extends kT{constructor(e){const t=$e()({xMargin:8,yMargin:10.9,baseColor:uV.BUTTON_YELLOW},e);if(!t.soundPlayer){const e=new Ab(EL,{initialOutputLevel:.35});Nb.addSoundGenerator(e,{categoryName:"user-interface"}),t.soundPlayer=e}const i=new LE(0,0,-28.5,0,{tailWidth:8,headWidth:18,headHeight:15});t.content=new Cc(i,{fill:"black"}),super(t)}}ME.register("BackButton",vL);class SL extends bs{constructor(e){const t=$e()({outerRadius:15,innerRadius:7.5,numberStarPoints:5},e);super();const i=2*t.numberStarPoints;_.times(i,e=>{const n=e/i*Math.PI*2-Math.PI/2,r=e%2==0?t.outerRadius:t.innerRadius;this.lineTo(r*Math.cos(n),r*Math.sin(n))}),this.close(),this.makeImmutable()}}ME.register("StarShape",SL);class bL extends Lh{constructor(e){const t=$e()({value:1,emptyFill:"#e1e1e1",emptyStroke:"#d3d1d1 ",emptyLineWidth:1.5,emptyLineJoin:"round",filledFill:"#fcff03",filledStroke:"black",filledLineWidth:1.5,filledLineJoin:"round",starShapeOptions:{}},e);super();const i=new TL({stroke:t.emptyStroke,fill:t.emptyFill,lineWidth:t.emptyLineWidth,lineJoin:t.emptyLineJoin,starShapeOptions:t.starShapeOptions});if(this.addChild(i),t.value>0){const e=new TL({stroke:t.filledStroke,fill:t.filledFill,lineWidth:t.filledLineWidth,lineJoin:t.filledLineJoin,starShapeOptions:t.starShapeOptions});if(t.value<1){const i=e.starShapeBounds,n=i.dilated(1.5*t.filledLineWidth);e.clipArea=bs.bounds(n.withMaxX(i.left+t.value*i.width))}this.addChild(e)}this.mutate(t)}}class TL extends Cc{constructor(e){const t=$e()({starShapeOptions:{}},e);t.boundsMethod="none";const i=new SL(t.starShapeOptions);super(i,t),this.starShapeBounds=i.getBounds()}computeShapeBounds(){return this.starShapeBounds}}ME.register("StarNode",bL);const wL=bL;class VL extends hf{constructor(e,t){const i=$e()({font:fM.DEFAULT_FONT,textFill:"black",scoreDecimalPlaces:0,starNodeOptions:{starShapeOptions:{outerRadius:10,innerRadius:5},filledLineWidth:1.5,emptyLineWidth:1.5},spacing:5},t);super(i);const n=e=>{const t=[];0===e?t.push(new wL(tt({value:0},i.starNodeOptions))):(t.push(new qc(Bt.toFixed(e,i.scoreDecimalPlaces),{font:i.font,fill:i.textFill})),t.push(new wL(tt({value:1},i.starNodeOptions)))),this.children=t};e.link(n),this.disposeScoreDisplayNumberAndStar=function(){e.unlink(n)}}dispose(){this.disposeScoreDisplayNumberAndStar(),super.dispose()}}cM.register("ScoreDisplayNumberAndStar",VL);cM.register("InfiniteStatusBar",class extends fM{constructor(e,t,i,n,r){var s;const o=$e()({backButtonListener:_.noop,xMargin:20,yMargin:10,spacing:10,createScoreDisplay:e=>new VL(e)},r),a=new vL({listener:o.backButtonListener,xMargin:8,yMargin:10,tandem:null===(s=o.tandem)||void 0===s?void 0:s.createTandem("backButton")}),l=new hf({spacing:o.spacing,align:"center",children:[a,i],maxWidth:.7*e.width}),h=o.createScoreDisplay(n);h.maxWidth=.2*e.width,o.children=[l,h],o.barHeight=Math.max(l.height,h.height)+2*o.yMargin,super(e,t,o),this.positioningBoundsProperty.link(e=>{l.left=e.left,l.centerY=e.centerY,h.right=e.right,h.centerY=e.centerY}),h.localBoundsProperty.link(()=>{h.right=this.positioningBoundsProperty.value.right}),this.disposeInfiniteStatusBar=()=>{h.dispose()}}dispose(){this.disposeInfiniteStatusBar(),super.dispose()}});class PL extends hf{constructor(e,t){const i=$e()({numberOfStars:1,perfectScore:1,starNodeOptions:{starShapeOptions:{outerRadius:10,innerRadius:5},filledLineWidth:1.5,emptyLineWidth:1.5},spacing:3},t),n=i.numberOfStars,r=i.perfectScore;super(i);const s=e=>{const t=[],s=e/r,o=Math.floor(s*n);for(let n=0;n1e-6&&t.push(new wL(tt({value:a},i.starNodeOptions)));const l=n-t.length;for(let n=0;n.95?p=dM.excellentStringProperty:d>.75?p=dM.greatStringProperty:d>=.5&&(p=dM.goodStringProperty);const m=new qc(p,{font:c.titleFont,maxWidth:c.contentMaxWidth});u.push(m);const g=new PL(new Rn(t),{numberOfStars:n,perfectScore:i,starNodeOptions:{starShapeOptions:{innerRadius:c.starDiameter/4,outerRadius:c.starDiameter/2}},maxWidth:c.contentMaxWidth});if(u.push(g),c.levelVisible){const t=new ir([dM.label.levelStringProperty],t=>zu.format(t,e));u.push(new qc(t,{font:c.infoFont,maxWidth:c.contentMaxWidth}))}const f=new ir([dM.label.score.maxStringProperty],e=>zu.format(e,t,i));if(u.push(new qc(f,{font:c.infoFont,maxWidth:c.contentMaxWidth})),r){const e=new ir([dM.label.timeStringProperty],e=>zu.format(e,mM.formatTime(s)));let t;t=a?new ir([e,dM.yourNewBestStringProperty],(e,t)=>`${e}
${t}`):null!==o?new ir([e,dM.pattern["0yourBestStringProperty"]],(e,t)=>`${e}
${zu.format(t,mM.formatTime(o))}`):e,u.push(new Nf(t,{font:c.infoFont,align:"center",maxWidth:c.contentMaxWidth}))}const y=new iV(dM.continueStringProperty,{listener:l,font:c.buttonFont,baseColor:c.buttonFill,tandem:c.tandem.createTandem("continueButton"),maxWidth:c.contentMaxWidth});u.push(y),super(new cf({children:u,spacing:c.ySpacing}),c),this.disposeLevelCompletedNode=()=>{u.forEach(e=>e.dispose())}}dispose(){this.disposeLevelCompletedNode(),super.dispose()}});const RL="data:audio/mpeg;base64,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",NL=GS(jS,RL),ML=IS.createLock(RL),LL=new zS;let IL=!1;const DL=()=>{IL||(ML(),IL=!0)},kL=jS.decodeAudioData(NL.buffer,e=>{null===LL.audioBufferProperty.value&&(LL.audioBufferProperty.set(e),DL())},e=>{console.warn("decode of audio data failed, using stubbed sound, error: "+e),LL.audioBufferProperty.set(jS.createBuffer(1,1,jS.sampleRate)),DL()});kL&&kL.then(e=>{null===LL.audioBufferProperty.value&&(LL.audioBufferProperty.set(e),DL())}).catch(e=>{console.warn("promise rejection caught for audio decode, error = "+e),DL()});const qL=LL,BL=new Jv(24);class OL extends kT{constructor(e,t,i){const n=$e()({buttonWidth:150,buttonHeight:150,createScoreDisplay:()=>new PL(t),scoreDisplayProportion:.2,scoreDisplayMinXMargin:10,scoreDisplayMinYMargin:5,iconToScoreDisplayYSpace:10,bestTimeProperty:null,bestTimeVisibleProperty:null,bestTimeFill:"black",bestTimeFont:BL,bestTimeYSpacing:10,cornerRadius:10,baseColor:"rgb( 242, 255, 204 )",xMargin:10,yMargin:10,soundPlayerIndex:0,tandem:Oi.REQUIRED},i),r=n.buttonWidth-2*n.xMargin,s=n.createScoreDisplay(t),o=n.buttonHeight*n.scoreDisplayProportion,a=new Wc(0,0,r,o,{cornerRadius:n.cornerRadius,fill:"white",stroke:"black",pickable:!1});s.maxWidth=a.width-2*n.scoreDisplayMinXMargin,s.maxHeight=a.height-2*n.scoreDisplayMinYMargin;const l=n.buttonHeight-a.height-2*n.yMargin-n.iconToScoreDisplayYSpace,h=new sl(r,l),c=OL.createSizedImageNode(e,h);c.centerX=a.centerX,c.bottom=a.top-n.iconToScoreDisplayYSpace;const u=()=>{s.center=a.center};if(s.boundsProperty.lazyLink(u),u(),n.content=new Lh({children:[c,a,s]}),void 0===n.soundPlayer){const e=new Ab(qL,{initialOutputLevel:.5,rateChangesAffectPlayingSounds:!1});Nb.addSoundGenerator(e,{categoryName:"user-interface"}),n.soundPlayer={play(){e.setPlaybackRate(Math.pow(ab.TWELFTH_ROOT_OF_TWO,n.soundPlayerIndex),0),e.play()},stop(){e.stop()}}}super(n);let d=null,p=null;if(n.bestTimeProperty){const e=new qc("",{font:n.bestTimeFont,fill:n.bestTimeFill,maxWidth:this.width}),t=this.centerX;e.top=this.bottom+n.bestTimeYSpacing,this.addChild(e),d=i=>{null!==i&&(e.string=i?mM.formatTime(i):"",e.centerX=t)},n.bestTimeProperty.link(d),n.bestTimeVisibleProperty&&(p=t=>{e.visible=t},n.bestTimeVisibleProperty.link(p))}this.disposeLevelSelectionButton=()=>{s.dispose(),n.bestTimeProperty&&d&&n.bestTimeProperty.hasListener(d)&&n.bestTimeProperty.unlink(d),n.bestTimeVisibleProperty&&p&&n.bestTimeVisibleProperty.hasListener(p)&&n.bestTimeVisibleProperty.unlink(p)}}static createSizedImageNode(e,t){if(e.scale(Math.min(t.width/e.bounds.width,t.height/e.bounds.height)),Math.abs(e.bounds.width-t.width)<1e-4&&Math.abs(e.bounds.height-t.height)<1e-4)return e;const i=Wc.dimension(t);return e.center=i.center,i.addChild(e),i}dispose(){this.disposeLevelSelectionButton(),super.dispose()}}cM.register("LevelSelectionButton",OL);cM.register("LevelSelectionButtonGroup",class extends Lh{constructor(e,t){const i=$e()({flowBoxOptions:{orientation:"horizontal",spacing:10},tandem:Oi.REQUIRED},t),n={group:new lf},r=e.map((e,t)=>{let r=Oi.OPT_OUT;if(i.tandem.supplied){const n=e.tandemName||`level${t+1}Button`;r=i.tandem.createTandem(n)}return new OL(new rf(e.icon,n),e.scoreProperty,tt({tandem:r},i.levelSelectionButtonOptions,e.options))});let s;i.gameLevels&&r.forEach((e,t)=>{e.visible=i.gameLevels.includes(t+1)}),s=i.createLayoutNode?i.createLayoutNode(r):new Ug(tt({children:r},i.flowBoxOptions)),i.children=[s],super(i),this.buttons=r}focusLevelSelectionButton(e){this.buttons[e-1].focus()}});const HL=new Image,YL=IS.createLock(HL);HL.onload=YL,HL.src="data:image/png;base64,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";const GL=HL,FL=new Jv(20),UL=new Jv({size:38,weight:"bold"});cM.register("RewardDialog",class extends GV{constructor(e,t){var i,n;const r=$e()({phetGirlScale:.6,buttonsFont:FL,buttonsWidth:145,buttonsYSpacing:20,keepGoingButtonListener:_.noop,newLevelButtonListener:_.noop,scoreDisplayOptions:{font:UL,spacing:8,starNodeOptions:{starShapeOptions:{outerRadius:20,innerRadius:10},filledLineWidth:2}},closeButtonLastInPDOM:!0},t),s=new Pc(GL,{scale:r.phetGirlScale}),o="number"==typeof e?new Xn(e):e,a=new VL(o,r.scoreDisplayOptions),l={font:r.buttonsFont,minWidth:r.buttonsWidth,maxWidth:r.buttonsWidth},h={font:FL,maxWidth:.9*r.buttonsWidth},c=new kT(tt({},l,{content:new qc(dM.newLevelStringProperty,h),listener:r.newLevelButtonListener,baseColor:uV.PHET_LOGO_YELLOW,tandem:null===(i=r.tandem)||void 0===i?void 0:i.createTandem("newLevelButton")})),u=new kT(tt({},l,{content:new qc(dM.keepGoingStringProperty,h),listener:r.keepGoingButtonListener,baseColor:"white",tandem:null===(n=r.tandem)||void 0===n?void 0:n.createTandem("keepGoingButton")})),d=new cf({children:[c,u],spacing:r.buttonsYSpacing}),p=(s.height-a.height-d.height)/2,m=new cf({children:[a,d],align:"center",spacing:p}),g=new hf({align:"bottom",children:[s,m],spacing:52});r.focusOnShowNode=c,super(g,r)}});class zL extends Yc{constructor(e){const t=$e()({nodes:null,scaleForResolution:2,stepEmitter:null},e);super(t),this.scaleForResolution=t.scaleForResolution,this.rewardImages=[],this.canvasDisplayBounds=new ti(0,0,0,0),this.transformTracker=null,this.isInitialized=!1,this.stepEmitterListener=e=>this.step(e),t.stepEmitter&&t.stepEmitter.addListener(this.stepEmitterListener),this.nodes=t.nodes||zL.createRandomNodes([new PP(40,{headStroke:"black",headLineWidth:1.5}),new wL],150),this.cachedImages=_.uniq(this.nodes).map(e=>{const t={image:null,node:e,width:e.width,height:e.height},i=new Lh({children:[e],scale:this.scaleForResolution});return i.toImage(e=>{t.image=e,i.dispose()}),t}),this.initializer=()=>this.initialize(),Oi.PHET_IO_ENABLED&&phet.phetio.phetioEngine.phetioStateEngine.stateSetEmitter.addListener(this.initializer),this.disposeRewardNode=()=>{t.stepEmitter&&t.stepEmitter.removeListener(this.stepEmitterListener),this.transformTracker&&this.transformTracker.dispose(),Oi.PHET_IO_ENABLED&&phet.phetio.phetioEngine.phetioStateEngine.stateSetEmitter.removeListener(this.initializer)}}dispose(){this.disposeRewardNode(),super.dispose()}paintCanvas(e){e.scale(1/this.scaleForResolution,1/this.scaleForResolution),this.rewardImages.forEach(t=>{t.cachedImage.image&&e.drawImage(t.cachedImage.image,t.x,t.y)})}getScreenView(){return this.getUniqueTrail(e=>e instanceof zw).rootNode()}initialize(){const e=rV("phet.joist.display");if(!this.isInitialized&&this.getUniqueTrail().length>0){const t=this.getUniqueTrail(),i=t.nodes.indexOf(this.getScreenView()),n=t.slice(i),r=()=>{this.canvasDisplayBounds=n.globalToLocalBounds(e.bounds);const t=this.globalToLocalBounds(e.bounds);this.setCanvasBounds(t)};this.transformTracker=new yu(t),this.transformTracker.addListener(r),r(),this.rewardImages=this.nodes.map(e=>{const t=_.find(this.cachedImages,t=>t.node===e);return{cachedImage:t,x:this.randomX(t.width),y:this.randomY(t.height),speed:200*(oi.nextDouble()+1)}}),this.isInitialized=!0}}randomX(e){return(oi.nextDouble()*this.canvasDisplayBounds.width+this.canvasDisplayBounds.left)*this.scaleForResolution-e/2}randomY(e){return this.canvasDisplayBounds.top-oi.nextDouble()*this.canvasDisplayBounds.height*2-200-e}step(e){this.initialize();const t=this.canvasDisplayBounds.height*this.scaleForResolution;this.rewardImages.forEach(i=>{i.y+=i.speed*e,i.y>t&&(i.x=this.randomX(i.cachedImage.width),i.y=this.randomY(i.cachedImage.height))}),this.invalidatePaint()}static createRandomNodes(e,t){const i=[];for(let n=0;nNumber.isInteger(t)&&t>0&&t<=e},defaultValue:Array.from({length:e},(e,t)=>t+1),isValidValue:e=>null===e||e.length>0&&e.length===_.uniq(e).length&&_.every(e,(e,t,i)=>0===t||i[t-1]<=e)}}cM.register("ScoreDisplayLabeledStars",class extends hf{constructor(e,t){const i=$e()({font:fM.DEFAULT_FONT,textFill:"black",spacing:5},t),n=new qc(dM.scoreStringProperty,{font:i.font,fill:i.textFill}),r=new PL(e,i);i.children=[n,r],super(i),this.disposeScoreDisplayLabeledStars=()=>{n.dispose(),r.dispose()}}dispose(){this.disposeScoreDisplayLabeledStars(),super.dispose()}}),cM.register("getGameLevelsSchema",WL);const jL=QueryStringMachine.getAll({component:{type:"string",defaultValue:null}});cM.register("vegasQueryParameters",jL);if(!window.hasOwnProperty("_"))throw new Error("Underscore/Lodash not found: _");if(!window.hasOwnProperty("$"))throw new Error("jQuery not found: $");phet.scenery.Utils.polyfillRequestAnimationFrame()})()})()}();