\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"]"));function j(e){for(var r=0,t=0;t')}(t,e.size,e.color);return U[e.name]=n,w(W({},e),{bricks:t,bricksCount:_,icon:n,svg:(r=null!==e.svg&&D[e.svg%D.length],e.color||r||(r=D[j(e.name)%D.length]),r)})}).filter(function(e){return!e.name.startsWith("icon:")}).map(function(e,r){return w(W({},e),{threshold:r<8?0:Math.round(Math.min(10*Math.pow(10,1+(r+e.size)/30),5e3)*r),sortKey:(Math.random()+3)/3.5*e.bricksCount})}),Y=A.map(function(e){return w(W({},e),{icon:U["icon:"+e.id]})}),J={sound:{default:!0,name:T("main_menu.sounds"),help:T("main_menu.sounds_help")},"mobile-mode":{default:window.innerHeight>window.innerWidth,name:T("main_menu.mobile"),help:T("main_menu.mobile_help")},basic:{default:!1,name:T("main_menu.basic"),help:T("main_menu.basic_help")},colorful_coins:{default:!1,name:T("main_menu.colorful_coins"),help:T("main_menu.colorful_coins_help")},show_fps:{default:!1,name:T("main_menu.show_fps"),help:T("main_menu.show_fps_help")},show_stats:{default:!1,name:T("main_menu.show_stats"),help:T("main_menu.show_stats_help")},pointerLock:{default:!1,name:T("main_menu.pointer_lock"),help:T("main_menu.pointer_lock_help")},easy:{default:!1,name:T("main_menu.kid"),help:T("main_menu.kid_help")},record:{default:!1,name:T("main_menu.record"),help:T("main_menu.record_help")}};function K(e){var r;return H("breakout-settings-enable-"+e,null===(r=J[e])||void 0===r?void 0:r.default)}var Q=Date.now(),$={wallBeep:function(e,r,t){K("sound")&&er(800,r,e)},comboIncreaseMaybe:function(e,r,t){if(K("sound")){var _=0;!isNaN(e_)&&(e_t&&(_=-1)),ea(_,r,e),e_=t}},comboDecrease:function(e,r,t){K("sound")&&ea(-1,r,e)},coinBounce:function(e,r,t){K("sound")&&er(1200,r,e,.1,"triangle")},void:function(e,r){K("sound")&&(er(1200,r,e,.5,"sawtooth"),er(600,r,e,.3,"sawtooth"))},freeze:function(e,r){K("sound")&&(er(220,r,e,.5,"square"),er(440,r,e,.5,"square"))},explode:function(e,r,t){K("sound")&&function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:.5,r=ee();if(r){var t=r.createBufferSource();t.buffer=et(r);var _=r.createGain();t.connect(_);var a=r.createBiquadFilter();a.type="lowpass",a.frequency.setValueAtTime(1e3,r.currentTime),_.connect(a);var s=r.createStereoPanner();s.pan.setValueAtTime(2*e-1,r.currentTime),a.connect(s),s.connect(r.destination),s.connect(n),_.gain.setValueAtTime(1,r.currentTime),_.gain.exponentialRampToValueAtTime(.01,r.currentTime+1),a.frequency.exponentialRampToValueAtTime(60,r.currentTime+1),t.start(r.currentTime),t.stop(r.currentTime+1)}}(r)},lifeLost:function(e,r,t){K("sound")&&function(e){var r=ee();if(r){var t=[es(r,3e3,"square"),es(r,4500,"square"),es(r,6e3,"square")],_=r.createGain(),a=r.createBufferSource();a.buffer=et(r),t.forEach(function(e){return e.connect(_)}),a.connect(_),_.gain.setValueAtTime(.2,r.currentTime),t.forEach(function(e){return e.start()}),a.start(),t.forEach(function(e){return e.stop(r.currentTime+.2)}),a.stop(r.currentTime+.2),_.gain.exponentialRampToValueAtTime(.001,r.currentTime+.2);var s=r.createStereoPanner();s.pan.setValueAtTime(2*e-1,r.currentTime),_.connect(s),s.connect(r.destination),s.connect(n),_.connect(s)}}(r)},coinCatch:function(e,r,t){K("sound")&&er(900,r,e,.1,"triangle")},colorChange:function(e,r,t){er(400,r,e,.5,"sine"),er(800,r,.5*e,.2,"square")}};function ee(){if(!_){if(!K("sound"))return null;n=(_=new(window.AudioContext||window.webkitAudioContext)).createMediaStreamDestination()}return _}function er(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:800,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.5,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,_=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.1,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"sine",s=ee();if(s){var l=es(s,e,a),o=s.createGain();l.connect(o);var i=s.createStereoPanner();i.pan.setValueAtTime(2*r-1,s.currentTime),o.connect(i),i.connect(s.destination),i.connect(n),o.gain.setValueAtTime(.8*t,s.currentTime),o.gain.exponentialRampToValueAtTime(.001,s.currentTime+_),l.start(s.currentTime),l.stop(s.currentTime+_)}}function et(e){if(!a)for(var r=2*e.sampleRate,t=(a=e.createBuffer(1,r,e.sampleRate)).getChannelData(0),_=0;_11&&(en=0),en<0&&(en=11);var _=function(e){var _=392*Math.pow(1.05945594920268,e),n=Math.abs(e-5.5),a=Math.max(0,t*(1-n/16.5));return er(_,r,a),_.toFixed(2)+" at "+Math.floor(100*a)+"% diff "+n};_(12+en),_(en),_(-12+en)}function es(e,r,t){var _=e.createOscillator();return _.type=t,_.frequency.setValueAtTime(r,e.currentTime),_}var el=[{id:"deadly_coins",max:20,name:function(e){return T("debuffs.deadly_coins.help",{lvl:e})},help:function(e){return T("debuffs.deadly_coins.help",{lvl:e})}},{id:"frozen_coins",max:20,name:function(e){return T("debuffs.frozen_coins.help",{lvl:e})},help:function(e){return T("debuffs.frozen_coins.help",{lvl:e})}},{id:"more_bombs",max:20,name:function(e){return T("debuffs.more_bombs.help",{lvl:e})},help:function(e){return T("debuffs.more_bombs.help",{lvl:e})}},{id:"banned",max:50,name:function(e,r){return T("debuffs.banned.description",{lvl:e,banned:r})},help:function(e,r){return T("debuffs.banned.help",{lvl:e,perk:r})}},{id:"interference",max:20,name:function(e){return T("debuffs.interference.help",{lvl:e})},help:function(e){return T("debuffs.interference.help",{lvl:e})}},{id:"fragility",max:5,name:function(e){return T("debuffs.fragility.help",{percent:20*e})},help:function(e){return T("debuffs.fragility.help",{percent:20*e})}},{id:"sturdiness",max:5,name:function(e){return T("debuffs.sturdiness.help",{lvl:e})},help:function(e){return T("debuffs.sturdiness.help",{lvl:e})}}];function eo(e){return e[Math.floor(e.length*Math.random())]}function ei(e){var r;return e&&(null===(r=Object.values(e))||void 0===r?void 0:r.reduce(function(e,r){return e+r},0))||0}var eu=function(e){var r={};return e.forEach(function(e){return r[e.id]=0}),r};function ec(e,r){return e.offsetX+(r%e.gridSize+.5)*e.brickWidth}function ep(e,r){return(Math.floor(r/e.gridSize)+.5)*e.brickWidth}function ed(e,r,t){return r<0||t<0||r>=e.gridSize||t>=e.gridSize?-1:r*e.gridSize+t}function em(e){return Y.filter(function(r){return e.totalScoreAtRunStart>=r.threshold}).filter(function(r){return!(null==r?void 0:r.requires)||e.perks[null==r?void 0:r.requires]})}function eh(e){return 7+e.perks.extra_levels}function eg(e){var r="",t=!0,_=!1,n=void 0;try{for(var a,s=Y[Symbol.iterator]();!(t=(a=s.next()).done);t=!0)for(var l=a.value,o=0;o').concat(U["icon:"+l.id],"")}catch(e){_=!0,n=e}finally{try{t||null==s.return||s.return()}finally{if(_)throw n}}return r?" ".concat(T("score_panel.upgrades_picked"),"
").concat(r,"
"):""}function eb(e){if(!e.perks.clairvoyant)return"";for(var r="",t=0;t').concat(U[e.runLevels[t].name],"");return"".concat(T("score_panel.upcoming_levels"),"
").concat(r,"
")}function ev(e){return e.level}function ef(e,r){return e.perks.telekinesis&&r.vy<0}function ey(e,r){return e.perks.yoyo&&r.vy>0}function ek(e,r){return Math.pow(e.x-r.x,2)+Math.pow(e.y-r.y,2)}function eW(e,r){return Math.sqrt(ek(e,r))}function ew(e,r,t){return Math.max(r,Math.min(e,t))}function ex(e,r){for(var t=r%e.gridSize,_=Math.floor(r/e.gridSize),n=0,a=0;a<_;a++)e.bricks[t+a*e.gridSize]&&n++;return n}function eS(e,r){for(var t=r%e.gridSize,_=Math.floor(r/e.gridSize),n=0,a=_+1;a\n \n');var eq=document.createElement("img"),eR=document.createElement("canvas");function eL(e,r,t,_,n,a,s){var l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:1;e.globalAlpha=l,t&&("red"==t?(e.strokeStyle="red",e.lineDashOffset=eX(r),e.lineWidth=2,e.setLineDash(eF)):(e.strokeStyle="white",e.lineWidth=1),e.beginPath(),e.moveTo(_,n),e.lineTo(a,s),e.stroke(),"red"==t&&(e.setLineDash(eV),e.lineWidth=1),e.globalAlpha=1)}var eP=document.createElement("canvas"),eO="",eC={};function eT(e,r,t,_,n){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"",s="ball"+r+"_"+t+"_"+a,l=Math.round(t);if(!eC[s]){var o=document.createElement("canvas");o.width=l,o.height=l;var i=o.getContext("2d");i.beginPath(),i.arc(l/2,l/2,Math.round(l/2)-1,0,2*Math.PI),i.fillStyle=r,i.fill(),a&&(i.lineWidth=2,i.strokeStyle=a,i.stroke()),eC[s]=o}e.drawImage(eC[s],Math.round(_-l/2),Math.round(n-l/2))}function eA(e,r,t,_,n,a,s){var l=(Math.round(s/Math.PI*64)%32+32)%32,o="coin with halo_"+r+"_"+t+"_"+a+"_"+("gold"===r?l:"whatever");if(!eC[o]){var i=document.createElement("canvas");i.width=t,i.height=t;var u=i.getContext("2d");u.beginPath(),u.arc(t/2,t/2,t/2,0,2*Math.PI),u.fillStyle=r,u.fill(),("gold"===r||"red"===a)&&(u.strokeStyle=a,"red"==a&&(u.lineWidth=2,u.setLineDash(eF)),u.stroke()),"gold"===r&&(u.beginPath(),u.arc(t/2,t/2,t/2*.6,0,2*Math.PI),u.fillStyle="rgba(255,255,255,0.5)",u.fill(),u.translate(t/2,t/2),u.rotate(l/16),u.translate(-t/2,-t/2),u.globalCompositeOperation="multiply",ej(u,"$",r,t-2,t/2,t/2+1),ej(u,"$",r,t-2,t/2,t/2+1)),eC[o]=i}e.drawImage(eC[o],Math.round(_-t/2),Math.round(n-t/2))}function eE(e,r,t,_,n){var a="fuzzy-circle"+r+"_"+t,s=Math.round(3*t);if(!eC[a]){var l=document.createElement("canvas");l.width=s,l.height=s;var o=l.getContext("2d"),i=o.createRadialGradient(s/2,s/2,0,s/2,s/2,s/2);i.addColorStop(0,r),i.addColorStop(1,"transparent"),o.fillStyle=i,o.fillRect(0,0,s,s),eC[a]=l}e.drawImage(eC[a],Math.round(_-s/2),Math.round(n-s/2))}function eD(e,r,t,_){var n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,a=Math.ceil(t-rQ.brickWidth/2),s=Math.ceil(_-rQ.brickWidth/2),l=Math.ceil(t+rQ.brickWidth/2)-1,o=Math.ceil(_+rQ.brickWidth/2)-1,i=l-a,u=o-s,c="brick"+r+"__"+i+"_"+u+"_"+n;if(!eC[c]){var p,d,m,h,g,b,v=document.createElement("canvas");v.width=i,v.height=u;var f=v.getContext("2d");f.fillStyle=r,f.setLineDash(-1!==n?eF:eV),f.lineDashOffset=n,f.strokeStyle=-1!==n?"red":r,f.lineJoin="round",f.lineWidth=4,p=f,d=2,m=2,h=i-4,g=u-4,b=2,p.beginPath(),p.moveTo(4,2),p.lineTo(d+h-b,m),p.quadraticCurveTo(d+h,m,d+h,m+b),p.lineTo(d+h,m+g-b),p.quadraticCurveTo(d+h,m+g,d+h-b,m+g),p.lineTo(d+b,m+g),p.quadraticCurveTo(d,m+g,d,m+g-b),p.lineTo(d,m+b),p.quadraticCurveTo(d,m,d+b,m),p.closePath(),f.fill(),f.stroke(),eC[c]=v}e.drawImage(eC[c],a,s,i,u)}function ej(e,r,t,_,n,a){var s=arguments.length>6&&void 0!==arguments[6]&&arguments[6],l="text"+r+"_"+t+"_"+_+"_"+s;if(!eC[l]){var o=document.createElement("canvas");o.width=_*r.length,o.height=_;var i=o.getContext("2d");i.fillStyle=t,i.textAlign=s?"left":"center",i.textBaseline="middle",i.font=_+"px monospace",i.fillText(r,s?0:o.width/2,o.height/2,o.width),eC[l]=o}e.drawImage(eC[l],s?n:Math.round(n-eC[l].width/2),Math.round(a-eC[l].height/2))}var eZ=document.getElementById("score"),eI=document.getElementById("menuLabel"),eV=[],eF=[5,5];function eX(e){return K("basic")?0:Math.floor(e.levelTime%500/500*10)%10}var g=m("5mG9B"),k=m("6QuVk");function eU(){K("record")&&(null==s?void 0:s.state)==="recording"&&(null==s||s.pause())}function eN(){K("record")&&s&&(null==s||s.stop(),s=null)}var g=m("5mG9B"),k=m("6QuVk"),eY=0,eJ=null,eK=document.getElementById("popup"),eQ=document.getElementById("close-modale");eQ.addEventListener("click",function(e){e.preventDefault(),eJ&&eJ()}),eQ.title=T("play.close_modale_window_tooltip");var e$=-1;function e0(e){return e1(w(W({},e),{allowClose:!1}))}function e1(e){return e2.apply(this,arguments)}function e2(){return(e2=(0,g._)(function(e){var r,t,_,n,a,s,l;return(0,k.__generator)(this,function(o){return r=e.title,_=void 0===(t=e.content)?[]:t,a=void 0===(n=e.allowClose)||n,l=void 0!==(s=e.actionsAsGrid)&&s,e4(1),[2,new Promise(function(e){var t,n=function(r){o||(o=!0,Array.prototype.forEach.call(s.querySelectorAll("button:not([disabled])"),function(e){return e.disabled=!0}),document.body.style.minHeight=document.body.scrollHeight+"px",setTimeout(function(){return document.body.style.minHeight=""},0),s.remove(),e(r))};eK.className=l?" actionsAsGrid":"",eQ.style.display=a?"":"none";var s=document.createElement("div"),o=!1;if(eJ=a?function(){n(void 0)}:null,r){var i=document.createElement("h2");i.innerHTML=r,s.appendChild(i)}null==_||_.filter(function(e){return e}).forEach(function(e,r){if("string"==typeof e){var t,_,a=document.createElement("div");a.innerHTML=e,s.appendChild(a);return}(null===(t=s.lastChild)||void 0===t?void 0:t.nodeName)=="SECTION"?_=s.lastChild:((_=document.createElement("section")).className="actions",s.appendChild(_));var l=e.text,o=e.value,i=e.help,u=e.disabled,c=e.className,p=e.icon,d=document.createElement("button");d.innerHTML="\n".concat(void 0===p?"":p,"\n\n ").concat(l,"\n ").concat(i||"","\n
"),u?d.setAttribute("disabled","disabled"):d.addEventListener("click",function(e){e.preventDefault(),e.stopPropagation(),n(o),e$=r}),d.className=(void 0===c?"":c)+(e$===r?" needs-focus":""),_.appendChild(d)}),eK.appendChild(s),null===(t=eK.querySelector("section.actions > button.needs-focus"))||void 0===t||t.focus(),e$=-1}).then(function(e){return e4(-1),eJ=null,e},function(){eJ=null,e4(-1)})]})})).apply(this,arguments)}function e4(e){(eY+=e)>1&&alert("Two alerts where opened at once"),document.body.classList[eY?"add":"remove"]("has-alert-open")}function e5(e,r){if(rQ.running&&!rQ.isGameOver){rQ.isGameOver=!0,rR(!0),eN(),function(e){try{localStorage.setItem("breakout_71_total_play_time",JSON.stringify(JSON.parse(localStorage.getItem("breakout_71_total_play_time")||"0")+e))}catch(e){}}(rQ.runStatistics.runTime),rQ.runStatistics.max_level=rQ.currentLevel+1;var t,_,n=-300,a=function(){return"animation-delay:"+(n+=800)+"ms;"},s="",l=R(),o=l-rQ.score,i=(t=[],Y.forEach(function(e){e.threshold&&t.push({threshold:e.threshold,title:e.name+" "+T("level_up.unlocked_perk")})}),N.forEach(function(e){t.push({threshold:e.threshold,title:e.name+" "+T("level_up.unlocked_level")})}),t.filter(function(e){return e.threshold}).sort(function(e,r){return e.threshold-r.threshold}));i.filter(function(e){return e.threshold>o&&e.threshold\n '.concat(e.title,'\n \n
\n')});var u=(null===(_=function(e,r){for(var t=e.length;--t;)if(r(e[t],t,e))return e[t]}(i,function(e){return e.threshold<=l}))||void 0===_?void 0:_.threshold)||0,c=i.find(function(e){return e.threshold>l});if(c){var p=(null==c?void 0:c.threshold)-u,d=l-u;r+=T("gameOver.next_unlock",{points:c.threshold-l});var m=(d/p).toFixed(2);s+='\n \n '.concat(c.title,'\n \n
\n\n'),i.slice(i.indexOf(c)+1).slice(0,3).forEach(function(e){s+='\n \n '.concat(e.title," \n
\n")})}var h=i.filter(function(e){return e.threshold>o&&e.threshold".concat(T("gameOver.unlocked_count",{count:h.length})," ").concat(h.map(function(e){return e.title}).join(", "),"")),rQ.combo=1,e1({allowClose:!0,title:e,content:["\n ".concat(rQ.isCreativeModeRun?"".concat(T("gameOver.test_run"),"
"):"","\n ").concat(r,"
\n ").concat(T("gameOver.cumulative_total",{startTs:o,endTs:l}),"
\n ").concat(s," \n "),{value:null,text:T("gameOver.restart"),help:""},' \n '.concat(eg(rQ),"\n ").concat(function(){var e="";try{var r=JSON.parse(localStorage.getItem("breakout_71_runs_history")||"[]");r.sort(function(e,r){return e.score-r.score}).reverse(),(r=r.slice(0,100)).push(w(W({},rQ.runStatistics),{perks:rQ.perks,appVersion:X})),rQ.isCreativeModeRun||localStorage.setItem("breakout_71_runs_history",JSON.stringify(r,null,2));var t=function(e,t,_){var n,a,s,l=r.map(function(e){return t(e)||0}),o=(n=Math).min.apply(n,y(l)),i=(a=Math).max.apply(a,y(l));if(o===i)return"";i-o<10&&(o=Math.max(0,i-10),i=Math.max(i,o+10));var u=Math.min(l.length,10);if(u<3)return"";for(var c=[],p=[],d=0;d1?"s":""," between ").concat(Math.floor(o+r*m)," and ").concat(Math.floor(o+(r+1)*m)).concat(_,'"\n >').concat(!e&&" "||r==v&&b+_||Math.round(p[r]/e)+_,"")}).join("");return''.concat(e," : ").concat(b).concat(_,'
\n ').concat(f,"
\n ")};e+=t(T("gameOver.stats.total_score"),function(e){return e.score},""),e+=t(T("gameOver.stats.catch_rate"),function(e){return Math.round(e.score/e.coins_spawned*100)},"%"),e+=t(T("gameOver.stats.bricks_broken"),function(e){return e.bricks_broken},""),e+=t(T("gameOver.stats.bricks_per_minute"),function(e){return Math.round(e.bricks_broken/e.runTime*6e4)},""),e+=t(T("gameOver.stats.hit_rate"),function(e){return Math.round((1-e.misses/e.puck_bounces)*100)},"%"),e+=t(T("gameOver.stats.duration_per_level"),function(e){return Math.round(e.runTime/1e3/e.levelsPlayed)},"s"),e+=t(T("gameOver.stats.level_reached"),function(e){return e.levelsPlayed},""),e+=t(T("gameOver.stats.upgrades_applied"),function(e){return e.upgrades_picked},""),e+=t(T("gameOver.stats.balls_lost"),function(e){return e.balls_lost},""),e+=t(T("gameOver.stats.combo_avg"),function(e){return Math.round(e.coins_spawned/e.bricks_broken)},""),e+=t(T("gameOver.stats.combo_max"),function(e){return e.max_combo},""),(e+=t(T("gameOver.stats.loops"),function(e){return e.loops},""))&&(e="".concat(T("gameOver.stats.intro",{count:r.length-1}),"
")+e)}catch(e){console.warn(e)}return e}()," \n ")]}).then(function(){return r$({levelToAvoid:ev(rQ).name})})}}var g=m("5mG9B"),k=m("6QuVk");function e3(){return(e3=(0,g._)(function(e,r){var t,_,n,a,s,l,o;return(0,k.__generator)(this,function(i){switch(i.label){case 0:var u;return _=(t=function(e){if(Array.isArray(e))return e}(u=e.split(":"))||function(e,r){var t,_,n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a=[],s=!0,l=!1;try{for(n=n.call(e);!(s=(t=n.next()).done)&&(a.push(t.value),a.length!==r);s=!0);}catch(e){l=!0,_=e}finally{try{s||null==n.return||n.return()}finally{if(l)throw _}}return a}}(u,3)||f(u,3)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0],n=t[1],a=t[2],s="".concat(_,":").concat(n),l=function(e){for(var r=atob(e.replace(/-----BEGIN PUBLIC KEY-----/,"").replace(/-----END PUBLIC KEY-----/,"").replace(/\s+/g,"")),t=new Uint8Array(r.length),_=0;_=r.threshold}).filter(function(e){return e.name!==(null==r?void 0:r.level)}).filter(function(e){return e.name!==(null==r?void 0:r.levelToAvoid)}).sort(function(){return Math.random()-.5});return t.concat(_.slice(0,10).sort(function(e,r){return e.sortKey-r.sortKey}))}function r_(e){var r=R(),t=rt(r,e),_=W({},eu(Y),(null==e?void 0:e.perks)||{}),n=w(W({runLevels:t,level:t[0],currentLevel:0,upgradesOfferedFor:-1,perks:_,bannedPerks:eu(Y),debuffs:W({},(u={},el.forEach(function(e){return u[e.id]=0}),u),(null==e?void 0:e.debuffs)||{}),puckWidth:200,baseSpeed:12,combo:1,gridSize:12,running:!1,isGameOver:!1,ballStickToPuck:!0,puckPosition:400,lastPuckPosition:400,desiredPuckPosition:400,lastPuckMove:0,pauseTimeout:null,canvasWidth:0,canvasHeight:0,offsetX:0,offsetXRoundedDown:0,gameZoneWidth:0,gameZoneWidthRoundedUp:0,gameZoneHeight:0,brickWidth:0,score:0,lastScoreIncrease:-1e3,lastExplosion:-1e3,highScore:parseFloat(localStorage.getItem("breakout-3-hs")||"0"),balls:[],ballsColor:"white",bricks:[],brickHP:[],lights:{indexMin:0,total:0,list:[]},particles:{indexMin:0,total:0,list:[]},texts:{indexMin:0,total:0,list:[]},coins:{indexMin:0,total:0,list:[]},levelStartScore:0,levelMisses:0,levelSpawnedCoins:0,puckColor:"#FFF",ballSize:20,coinSize:14,puckHeight:20,totalScoreAtRunStart:r,isCreativeModeRun:ei(_)>1,pauseUsesDuringRun:0,keyboardPuckSpeed:0,lastTick:performance.now(),lastTickDown:0,runStatistics:{started:Date.now(),levelsPlayed:0,runTime:0,coins_spawned:0,score:0,bricks_broken:0,misses:0,balls_lost:0,puck_bounces:0,wall_bounces:0,upgrades_picked:1,max_combo:1,max_level:0},lastOffered:{},levelTime:0,winAt:0,levelWallBounces:0,needsRender:!0,autoCleanUses:0},{aboutToPlaySound:{wallBeep:{vol:0,x:0},comboIncreaseMaybe:{vol:0,x:0},comboDecrease:{vol:0,x:0},coinBounce:{vol:0,x:0},explode:{vol:0,x:0},lifeLost:{vol:0,x:0},coinCatch:{vol:0,x:0},colorChange:{vol:0,x:0},void:{vol:0,x:0},freeze:{vol:0,x:0}}}),{rerolls:0,loop:0,baseCombo:1,puckFrozenUntil:0});if(ra(n),!ei(n.perks)){var a=em(n).filter(function(e){return e.giftable}),s=K("easy")&&"slow_down"||a[Math.floor(Math.random()*a.length)].id;_[s]=1,rd(n,s)}var l=!0,o=!1,i=void 0;try{for(var u,c,p=Y[Symbol.iterator]();!(l=(c=p.next()).done);l=!0){var d=c.value;n.perks[d.id]&&rd(n,d.id)}}catch(e){o=!0,i=e}finally{try{l||null==p.return||p.return()}finally{if(o)throw i}}return n}function rn(e,r){e.desiredPuckPosition=r,e.needsRender=!0}function ra(e){rs(e);var r,t=1+((null===(r=e.perks)||void 0===r?void 0:r.multiball)||0),_=e.puckWidth/(t+1);e.balls=[],e.ballsColor="#FFF",(e.perks.picky_eater||e.perks.pierce_color)&&(e.ballsColor=function(e){var r,t={};e.forEach(function(e){return t[e]=(t[e]||0)+1});var _=(r=Math).max.apply(r,y(Object.keys(t).map(function(e){return t[e]})));return eo(Object.keys(t).filter(function(e){return t[e]==_}))}(e.bricks.filter(function(e){return e}))||"#FFF");for(var n=0;n.5?e.baseSpeed:-e.baseSpeed);e.balls.push({x:a,previousX:a,y:e.gameZoneHeight-1.5*e.ballSize,previousY:e.gameZoneHeight-1.5*e.ballSize,vx:s,previousVX:s,vy:-e.baseSpeed,previousVY:-e.baseSpeed,piercePoints:3*e.perks.pierce,hitSinceBounce:0,brokenSinceBounce:0,hitItem:[],sapperUses:0})}e.ballStickToPuck=!0}function rs(e){e.baseSpeed=Math.max(3,e.gameZoneWidth/12/10+e.currentLevel/3+e.levelTime/3e4-2*e.perks.slow_down),e.puckWidth=e.gameZoneWidth/12*(3-e.perks.smaller_puck+e.perks.bigger_puck);var r=e.perks.corner_shot&&e.levelTime?e.offsetXRoundedDown-e.puckWidth/2:e.offsetXRoundedDown+e.puckWidth/2,t=e.perks.corner_shot&&e.levelTime?e.offsetXRoundedDown+e.gameZoneWidthRoundedUp+e.puckWidth/2:e.offsetXRoundedDown+e.gameZoneWidthRoundedUp-e.puckWidth/2;(e.puckFrozenUntil1&&e.running&&(e.lastPuckMove=e.levelTime),e.lastPuckPosition=e.puckPosition}function rl(e){return e.baseCombo+3*e.perks.base_combo+5*e.perks.smaller_puck}function ro(e,r,t){var _=e.combo;e.combo=rl(e),_>e.combo&&e.perks.soft_reset&&(e.combo+=Math.floor((_-e.combo)*(10*e.perks.soft_reset)/100));var n=Math.max(0,_-e.combo);if(n){for(var a=0;aP()&&(r=1);for(var a=0;aP()&&(r=1);for(var a=0;aL()?1:Math.floor(c-rG(e.coins))/3)));u>0;){var d=Math.min(p,u);(d<0||isNaN(d))&&console.error({points:d}),u-=d;var m=o+(Math.random()-.5)*(e.brickWidth-e.coinSize),h=i+(Math.random()-.5)*(e.brickWidth-e.coinSize);!function(e,r,t,_,n){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"gold",s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1,l=.8+.2*Math.random()+Math.min(2,.01*s);t<2*e.gameZoneWidth/3&&e.debuffs.deadly_coins*s>1e4*Math.random()?(s=0,a="crimson",_=0,n=0,rm(e,"void",r,.5),l=1):e.debuffs.frozen_coins*s>1e4*Math.random()&&(a="LightSkyBlue",rm(e,"freeze",r,.5),l=1),rz(e.coins,function(o){o.x=r,o.y=t,o.collidedLastFrame=!0,o.size=e.coinSize,o.previousX=r,o.previousY=t,o.vx=_,o.vy=n,o.color=a,o.a=Math.random()*Math.PI*2,o.sa=Math.random()-.5,o.points=s,o.weight=l})}(e,m,h,t.previousVX*(.5+Math.random()),t.previousVY*(.5+Math.random()),e.perks.metamorphosis||K("colorful_coins")?a:"gold",d)}e.combo+=e.perks.streak_shots+e.perks.compound_interest+e.perks.left_is_lava+e.perks.right_is_lava+e.perks.top_is_lava+e.perks.picky_eater+e.perks.asceticism+e.perks.zen+e.perks.passive_income+e.perks.nbricks+e.perks.unbounded,e.perks.side_kick&&(Math.abs(t.vx)>Math.abs(t.vy)?e.combo+=e.perks.side_kick:ri(e,e.perks.side_kick,t.x,t.y)),e.perks.reach&&(ex(e,r)&&!eS(e,r)?ro(e,o,i):e.combo+=e.perks.reach),e.lastPuckMove&&e.perks.passive_income&&e.lastPuckMove>e.levelTime-250*e.perks.passive_income&&ro(e,o,i),e.perks.nbricks&&t.brokenSinceBounce>e.perks.nbricks&&ro(e,t.x,t.y),_||((e.perks.picky_eater||e.perks.pierce_color)&&a!==e.ballsColor&&a?(e.perks.picky_eater&&ro(e,t.x,t.y),rm(e,"colorChange",t.x,.8),e.lastExplosion=e.levelTime,e.ballsColor=a,K("basic")||e.balls.forEach(function(r){ru(e,7,r.previousX,r.previousY,a)})):rm(e,"comboIncreaseMaybe",t.x,1)),ru(e,5+Math.min(e.combo,30),o,i,a)}e.bricks[r]||"black"===a||null===(n=t.hitItem)||void 0===n||n.push({index:r,color:a})}}function rd(e,r){e.lastOffered[r]=Math.round(Date.now()/1e3)}function rm(e,r,t,_){if(_){null!=t||(t=e.offsetX+e.gameZoneWidth/2);var n=e.aboutToPlaySound[r];n.x=(t*_+n.x*n.vol)/(_+n.vol),n.vol+=_}}function rh(){return(rh=(0,g._)(function(e){var r,t,_,n,a,s;return(0,k.__generator)(this,function(l){switch(l.label){case 0:return rR(!1),e.loop++,e.runStatistics.loops++,e.runLevels=rt(e.totalScoreAtRunStart,{}),e.upgradesOfferedFor=-1,r="",e.rerolls?(r=T("loop.converted_rerolls",{n:e.rerolls}),e.baseCombo+=e.rerolls,e.rerolls=0):r=T("loop.no_rerolls"),t=Y.filter(function(r){return e.perks[r.id]}),[4,e0({title:T("loop.title",{loop:e.loop}),content:[T("loop.instructions"),r].concat(y(t.map(function(r){var _=eo(el.filter(function(r){return e.debuffs[r.id]=r)return[2,console.warn("Extra upgrade request ignored ")];if(e.upgradesOfferedFor=r,rR(!1),eN(),!(r>0))return[3,2];return[4,function(e){return rP.apply(this,arguments)}(e)];case 1:o.sent(),o.label=2;case 2:for(e.currentLevel=r,e.level=e.runLevels[r],e.levelTime=0,e.winAt=0,e.levelWallBounces=0,e.autoCleanUses=0,e.lastTickDown=e.levelTime,e.levelStartScore=e.score,e.levelSpawnedCoins=0,e.levelMisses=0,e.puckFrozenUntil=0,e.runStatistics.levelsPlayed++,t=e.combo,e.combo=rl(e),e.perks.shunt&&(e.combo+=Math.round(Math.max(0,(t-e.combo)*20*e.perks.shunt/100))),e.combo+=15*e.perks.hot_start,(_=ev(e)).size!==e.gridSize&&(e.gridSize=_.size,rL()),rB(e.coins),rB(e.particles),rB(e.lights),rB(e.texts),e.bricks=[],n=0;n<_.size*_.size;n++)rv(e,n,_.bricks[n]);if(e.debuffs.more_bombs)for(a=0,s=0;a<100&&ss)){var l=(r.x-t.x)/a,o=(r.y-t.y)/a,i=-_*(s-a)/(1.2*s)/3*Math.min(500,e.levelTime)/500;n&&void 0!==t.vx&&void 0!==t.vy&&(t.vx+=l*i,t.vy+=o*i),r.vx-=l*i,r.vy-=o*i,rx(e,r.x,r.y,-(10*l)+r.vx+(Math.random()-.5)*2,-(10*o)+r.vy+(Math.random()-.5)*2,rf(),!0,e.coinSize/2,100),n&&void 0!==t.vx&&void 0!==t.vy&&rx(e,t.x,t.y,10*l+t.vx+(Math.random()-.5)*2,10*o+t.vy+(Math.random()-.5)*2,rf(),!0,e.coinSize/2,100)}}function rk(e,r,t,_){if(!r.destroyed){r.previousX=r.x,r.previousY=r.y,r.x+=r.vx*_,r.y+=r.vy*_,e.perks.wind&&(r.vx+=(e.puckPosition-(e.offsetX+e.gameZoneWidth/2))/e.gameZoneWidth*e.perks.wind*.5);var n=0,a=0;return r.xe.canvasWidth-e.offsetXRoundedDown-t&&!e.perks.unbounded&&(r.x=e.canvasWidth-e.offsetXRoundedDown-t-(r.x-(e.canvasWidth-e.offsetXRoundedDown-t)),r.vx*=-1,a=1),a+2*n}}function rW(e,r,t,_){if(e.perks.extra_life-=1,e.perks.extra_life<0?e.perks.extra_life=0:e.perks.sacrifice&&e.bricks.forEach(function(t,_){return t&&rp(e,_,r,!0)}),rm(e,"lifeLost",r.x,1),!K("basic"))for(var n=0;n<10;n++)rx(e,t,_,Math.random()*e.baseSpeed*3,3*e.baseSpeed,"red",!1,e.coinSize/2,150)}function rw(e){if(!e.debuffs.interference)return 1;var r=(7+e.debuffs.interference)*1e3;return e.levelTime%r>7e3?-1:1}function rx(e,r,t,_,n,a){var s=arguments.length>6&&void 0!==arguments[6]&&arguments[6],l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:8,o=arguments.length>8&&void 0!==arguments[8]?arguments[8]:150;rz(e.particles,function(i){i.time=e.levelTime,i.x=r,i.y=t,i.vx=_,i.vy=n,i.color=a,i.size=l,i.duration=o,i.ethereal=s})}function rS(e,r,t,_,n){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:20,s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:150;rz(e.texts,function(l){l.time=e.levelTime,l.x=r,l.y=t,l.color=_,l.size=a,l.duration=s,l.text=n})}function rz(e,r){for(;e.list[e.indexMin]&&!e.list[e.indexMin].destroyed&&e.indexMin0&&void 0!==arguments[0]?arguments[0]:"webm";return"breakout-71-capture-"+new Date().toISOString().replace(/[^0-9\-]+/gi,"-")+"."+e}("webm"),n.target="_blank",!window.location.href.endsWith("index.html?isInWebView=true"))return[3,5];return[4,(s=r,new Promise(function(e,r){var t=new FileReader;t.onload=function(){e(t.result)},t.onerror=function(e){console.error(e),r(Error("Failed to readAsDataURL of the video "))},t.readAsDataURL(s)}))];case 4:return n.href=a.sent(),[3,6];case 5:n.href=_.src,a.label=6;case 6:return n.textContent=T("main_menu.record_download",{size:(r.size/1e6).toFixed(2)}),e.appendChild(n),[2]}})})}}(rQ),null===(e=ee())||void 0===e||e.resume(),K("record")&&(null==s?void 0:s.state)==="paused"&&s.resume())}function rR(e){if(rQ.running&&!rQ.pauseTimeout){var r=function(){rQ.running=!1,setTimeout(function(){var e;rQ.running||null===(e=ee())||void 0===e||e.suspend()},1e3),eU(),rQ.pauseTimeout=null,eZ.className="",rQ.needsRender=!0};e?(rQ.pauseUsesDuringRun++,rQ.pauseTimeout=setTimeout(r,Math.min(50*Math.max(0,rQ.pauseUsesDuringRun-5),500))):r(),document.exitPointerLock&&document.exitPointerLock()}}var rL=function(){var e,r=function(e){e.x=rQ.offsetXRoundedDown+(e.x-_)/n*rQ.gameZoneWidthRoundedUp,e.y=e.y/a*rQ.gameZoneHeight},t=function(e){e.x=rQ.offsetXRoundedDown+(e.x-_)/n*rQ.gameZoneWidthRoundedUp,e.y=e.y/a*rQ.gameZoneHeight,e.previousX=e.x,e.previousY=e.y},_=rQ.offsetXRoundedDown,n=rQ.gameZoneWidthRoundedUp,a=rQ.gameZoneHeight,s=eG.getBoundingClientRect(),l=s.width,o=s.height;rQ.canvasWidth=l,rQ.canvasHeight=o,eG.width=l,eG.height=o,eB.fillStyle=(null===(e=ev(rQ))||void 0===e?void 0:e.color)||"black",eB.globalAlpha=1,eB.fillRect(0,0,l,o),eR.width=l,eR.height=o,rQ.gameZoneHeight=K("mobile-mode")?80*o/100:o;var i=Math.round(Math.min(rQ.canvasWidth,.73*rQ.gameZoneHeight));rQ.brickWidth=2*Math.floor(i/rQ.gridSize/2),rQ.gameZoneWidth=rQ.brickWidth*rQ.gridSize,rQ.offsetX=Math.floor((rQ.canvasWidth-rQ.gameZoneWidth)/2),rQ.offsetXRoundedDown=rQ.offsetX,rQ.offsetX.9&&(e.rerolls++,n=T("level_up.plus_one_choice")),0===e.levelMisses?(t++,e.rerolls++,s=T("level_up.plus_one_upgrade")):e.levelMisses<=3&&(e.rerolls++,s=T("level_up.plus_one_choice")),c.label=1;case 1:var p,d;if(!t--||(p=3+e.perks.one_more_choice-e.perks.instant_upgrade,(d=em(e).map(function(r){return w(W({},r),{score:Math.random()+(e.lastOffered[r.id]||0)})}).sort(function(e,r){return e.score-r.score}).filter(function(r){return e.perks[r.id]r.id?1:-1})).forEach(function(r){rd(e,r.id)}),!(l=d.map(function(r){return{text:r.name+(e.perks[r.id]?T("level_up.upgrade_perk_to_level",{level:e.perks[r.id]+1}):""),icon:U["icon:"+r.id],value:r.id,help:r.help(e.perks[r.id]+1)}})).length))return[3,3];return e.rerolls&&l.push({text:T("level_up.reroll",{count:e.rerolls}),help:T("level_up.reroll_help"),value:"reroll",icon:U["icon:reroll"]}),o="\n ".concat(T("level_up.after_buttons",{level:e.currentLevel+1,max:eh(e)}),"
\n \n ").concat(eg(e),'\n \n \n '),i=_&&n&&s&&a&&T("level_up.compliment_perfect")||(_||n||s||a)&&T("level_up.compliment_good")||T("level_up.compliment_advice"),[4,e0({title:T("level_up.pick_upgrade_title")+(t?" ("+(t+1)+")":""),content:["".concat(T("level_up.before_buttons",{score:e.score-e.levelStartScore,catchGain:n,levelSpawnedCoins:e.levelSpawnedCoins,time:Math.round(e.levelTime/1e3),timeGain:_,levelMisses:e.levelMisses,missesGain:s,levelWallBounces:e.levelWallBounces,wallHitsGain:a,compliment:i}),"\n
\n\n ").concat(eb(e),"
\n")].concat(y(l),[o])})];case 2:return"reroll"===(u=c.sent())?(t++,e.rerolls--):(e.perks[u]++,"instant_upgrade"===u&&(t+=2),e.runStatistics.upgrades_picked++),[3,1];case 3:return[2]}})})).apply(this,arguments)}function rO(e,r){return ed(rQ,Math.floor(r/rQ.brickWidth),Math.floor((e-rQ.offsetX)/rQ.brickWidth))}function rC(e){if(rQ.bricks[e])return e}function rT(e,r,t){var _,n,a;return null!==(a=null!==(n=null!==(_=rC(rO(e-t,r-t)))&&void 0!==_?_:rC(rO(e+t,r-t)))&&void 0!==n?n:rC(rO(e+t,r+t)))&&void 0!==a?a:rC(rO(e-t,r+t))}window.addEventListener("resize",rL),window.addEventListener("fullscreenchange",rL),setInterval(function(){var e=eG.getBoundingClientRect(),r=e.width,t=e.height;(r!==rQ.canvasWidth||t!==rQ.canvasHeight)&&rL()},1e3),eG.addEventListener("mouseup",function(e){0===e.button&&(rQ.running?rR(!0):(rq(),K("pointerLock")&&eG.requestPointerLock&&eG.requestPointerLock().then()))}),eG.addEventListener("mousemove",function(e){document.pointerLockElement===eG?rn(rQ,rQ.puckPosition+e.movementX):rn(rQ,e.x)}),eG.addEventListener("touchstart",function(e){var r;e.preventDefault(),(null===(r=e.touches)||void 0===r?void 0:r.length)&&(rn(rQ,e.touches[0].pageX),rs(rQ),rq())}),eG.addEventListener("touchend",function(e){e.preventDefault(),rR(!0)}),eG.addEventListener("touchcancel",function(e){e.preventDefault(),rR(!0)}),eG.addEventListener("touchmove",function(e){var r;(null===(r=e.touches)||void 0===r?void 0:r.length)&&rn(rQ,e.touches[0].pageX)});var rA=0,rE=document.getElementById("FPSDisplay");function rD(){return rj.apply(this,arguments)}function rj(){return(rj=(0,g._)(function(){return(0,k.__generator)(this,function(e){switch(e.label){case 0:var r,t;return rR(!0),[4,e1({title:rQ.loop?T("score_panel.title_looped",{loop:rQ.loop,score:rQ.score,level:rQ.currentLevel+1,max:eh(rQ)}):T("score_panel.title",{score:rQ.score,level:rQ.currentLevel+1,max:eh(rQ)}),content:[rQ.isCreativeModeRun?"".concat(T("score_panel.test_run"),"
"):"",eg(rQ),eb(rQ),(r=Y.filter(function(e){return rQ.bannedPerks[e.id]}).map(function(e){return e.name}).join(", "),(t=el.filter(function(e){return rQ.debuffs[e.id]}).map(function(e){return e.name(rQ.debuffs[e.id],r)}).join(" "))?"".concat(T("score_panel.bebuffs_list")," ").concat(t,"
"):"")],allowClose:!0})];case 1:return e.sent(),[2]}})})).apply(this,arguments)}function rZ(){return rI.apply(this,arguments)}function rI(){return(rI=(0,g._)(function(){var e,r,t,_;return(0,k.__generator)(this,function(n){switch(n.label){case 0:return rR(!0),r=(e=Math).max.apply(e,y(Y.map(function(e){return e.threshold}))),t=[{icon:U["icon:7_levels_run"],text:T("main_menu.normal"),help:T("main_menu.normal_help"),value:function(){r$({levelToAvoid:ev(rQ).name})}},{icon:U["icon:unlocks"],text:T("main_menu.unlocks"),help:T("main_menu.unlocks_help"),value:function(){(function(){rX.apply(this,arguments)})()}},{icon:U["icon:sandbox"],text:T("sandbox.title"),help:R()0&&a<.5&&(r=T("premium.per_hours",s),t=T("premium.per_hours_help",s)),console.log({args:s})}}catch(e){console.warn(e)}return{icon:U["icon:premium"],text:r,help:t,value:function(){return re("")}}}(0),{text:T("main_menu.settings_title"),help:T("main_menu.settings_help"),icon:U["icon:settings"],value:function(){rV()}}],[4,e1({title:T("main_menu.title"),content:y(t).concat([T("main_menu.footer_html",{appVersion:X})]),allowClose:!0})];case 1:return(_=n.sent())&&(_(),rQ.needsRender=!0),[2]}})})).apply(this,arguments)}function rV(){return rF.apply(this,arguments)}function rF(){return(rF=(0,g._)(function(){var e,r,t,_,n,a,s,l;return(0,k.__generator)(this,function(o){switch(o.label){case 0:rR(!0),e=[],r=!0,t=!1,_=void 0;try{for(n=function(){var r=s.value;J[r]&&e.push({icon:K(r)?U["icon:checkmark_checked"]:U["icon:checkmark_unchecked"],text:J[r].name,help:J[r].help,value:function(){q("breakout-settings-enable-"+r,!K(r)),"mobile-mode"===r&&rL(),rV()}})},a=Object.keys(J)[Symbol.iterator]();!(r=(s=a.next()).done);r=!0)n()}catch(e){t=!0,_=e}finally{try{r||null==a.return||a.return()}finally{if(t)throw _}}return(document.fullscreenEnabled||document.webkitFullscreenEnabled)&&(null!==document.fullscreenElement?e.push({text:T("main_menu.fullscreen_exit"),help:T("main_menu.fullscreen_exit_help"),icon:U["icon:exit_fullscreen"],value:function(){rY(),rV()}}):e.push({text:T("main_menu.fullscreen"),help:T("main_menu.fullscreen_help"),icon:U["icon:fullscreen"],value:function(){rY(),rV()}})),e.push({text:T("main_menu.reset"),help:T("main_menu.reset_help"),value:function(){return(0,g._)(function(){return(0,k.__generator)(this,function(e){switch(e.label){case 0:return[4,e1({title:T("main_menu.reset"),content:[T("main_menu.reset_instruction"),{text:T("main_menu.reset_confirm"),value:!0},{text:T("main_menu.reset_cancel"),value:!1}],allowClose:!0})];case 1:return e.sent()&&(localStorage.clear(),window.location.reload()),[2]}})})()}}),e.push({text:T("main_menu.download_save_file"),help:T("main_menu.download_save_file_help"),value:function(){return(0,g._)(function(){var e,r,t,_,n,a;return(0,k.__generator)(this,function(s){for(r=0,e={};rX)throw Error("Please update your app first, this file is for version "+s+" or newer.");if(o!==j("Security by obscurity, but really the game is oss so eh"+l))throw Error("Key does not match content.");for(var c in i=JSON.parse(l),localStorage.clear(),i)localStorage.setItem(c,i[c]);return[4,e1({title:T("main_menu.save_file_loaded"),content:[T("main_menu.save_file_loaded_help"),{text:T("main_menu.save_file_loaded_ok")}]})];case 2:e.sent(),window.location.reload(),e.label=3;case 3:return[3,6];case 4:return u=e.sent(),[4,e1({title:T("main_menu.save_file_error"),content:[u.message,{text:T("main_menu.save_file_loaded_ok")}]})];case 5:return e.sent(),[3,6];case 6:return r.value="",[2]}})}),function(e){return _.apply(this,arguments)})),document.body.appendChild(r)}return null===(e=document.getElementById("save_file_picker"))||void 0===e||e.click(),[2]})})()}}),e.push({text:T("main_menu.language"),help:T("main_menu.language_help"),value:function(){return(0,g._)(function(){var e,r;return(0,k.__generator)(this,function(t){switch(t.label){case 0:return[4,e1({title:T("main_menu.language"),content:[T("main_menu.language_help"),{text:"English",value:"en"},{text:"Français",value:"fr"}],allowClose:!0})];case 1:if(!(r=(e=t.sent())&&e!==C()))return[3,3];return[4,rU(rQ)];case 2:r=t.sent(),t.label=3;case 3:return r&&(q("lang",e),window.location.reload()),[2]}})})()}}),e.push({text:T("main_menu.max_coins",{max:L()}),help:T("main_menu.max_coins_help"),value:function(){return(0,g._)(function(){return(0,k.__generator)(this,function(e){switch(e.label){case 0:return q("max_coins",(H("max_coins",1)+1)%6),[4,rV()];case 1:return e.sent(),[2]}})})()}}),e.push({text:T("main_menu.max_particles",{max:P()}),help:T("main_menu.max_particles_help"),value:function(){return(0,g._)(function(){return(0,k.__generator)(this,function(e){switch(e.label){case 0:return q("max_particles",(H("max_particles",1)+1)%6),[4,rV()];case 1:return e.sent(),[2]}})})()}}),[4,e1({title:T("main_menu.settings_title"),content:[T("main_menu.settings_help")].concat(y(e)),allowClose:!0})];case 1:return(l=o.sent())&&(l(),rQ.needsRender=!0),[2]}})})).apply(this,arguments)}function rX(){return(rX=(0,g._)(function(){var e,r,t,_;return(0,k.__generator)(this,function(n){switch(n.label){case 0:return e=R(),[4,e1({title:T("unlocks.title",{percentUnlock:t=Math.round((r=y(Y.sort(function(e,r){return e.threshold-r.threshold}).map(function(r){var t=r.name,_=r.id,n=r.threshold,a=r.icon;return r.help,{text:t,disabled:e=r.threshold;return{text:r.name,disabled:!t,value:{level:r.name},icon:U[r.name]}})))).filter(function(e){return!e.disabled}).length/r.length*100)}),content:["".concat(T("unlocks.intro",{ts:e}),"\n ").concat(t<100?T("unlocks.greyed_out_help"):"","
")].concat(y(r),[" \nYour high score is ".concat(rQ.highScore,". \nClick an item above to start a run with it.\n
")]),allowClose:!0,actionsAsGrid:!0})];case 1:if(!(_=n.sent()))return[3,3];return[4,rU(rQ)];case 2:n.sent()&&r$(_),n.label=3;case 3:return[2]}})})).apply(this,arguments)}function rU(e){return rN.apply(this,arguments)}function rN(){return(rN=(0,g._)(function(e){return(0,k.__generator)(this,function(r){return e.currentLevel?[2,e1({title:T("confirmRestart.title"),content:[T("confirmRestart.text"),{value:!0,text:T("confirmRestart.yes")},{value:!1,text:T("confirmRestart.no")}]})]:[2,!0]})})).apply(this,arguments)}function rY(){try{if(null!==document.fullscreenElement)document.exitFullscreen?document.exitFullscreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen();else{var e=document.documentElement;e.requestFullscreen?e.requestFullscreen():e.webkitRequestFullscreen&&e.webkitRequestFullscreen()}}catch(e){console.warn(e)}}setInterval(function(){K("show_fps")?rE.innerText=rA+" FPS "+rG(rQ.coins)+" COINS "+(rG(rQ.particles)+rG(rQ.texts)+rG(rQ.lights))+" PARTICLES ":rE.innerText="",rA=0},1e3),window.addEventListener("visibilitychange",function(){document.hidden&&rR(!0)}),eZ.addEventListener("click",function(e){e.preventDefault(),eY||rD()}),document.addEventListener("visibilitychange",function(){document.hidden&&rR(!0)}),document.getElementById("menu").addEventListener("click",function(e){e.preventDefault(),eY||rZ()});var rJ={ArrowLeft:0,ArrowRight:0,Shift:0};function rK(e,r){rJ[e]=r,rQ.keyboardPuckSpeed=(rJ.ArrowRight-rJ.ArrowLeft)*(1+2*rJ.Shift)*rQ.gameZoneWidth/50}document.addEventListener("keydown",function(e){"f"!==e.key.toLowerCase()||e.ctrlKey||e.metaKey?e.key in rJ&&rK(e.key,1):rY()," "===e.key&&!eY&&(rQ.running?rR(!0):rq(),e.preventDefault())}),document.addEventListener("keyup",(t=(0,g._)(function(e){var r,t,_,n,a;return(0,k.__generator)(this,function(s){switch(s.label){case 0:if(a=document.querySelector("button:focus"),!(e.key in rJ))return[3,1];return rK(e.key,0),[3,10];case 1:if("ArrowDown"!==e.key||(null==a?void 0:null===(r=a.nextElementSibling)||void 0===r?void 0:r.tagName)!=="BUTTON")return[3,2];return null==a||null===(t=a.nextElementSibling)||void 0===t||t.focus(),[3,10];case 2:if("ArrowUp"!==e.key||(null==a?void 0:null===(_=a.previousElementSibling)||void 0===_?void 0:_.tagName)!=="BUTTON")return[3,3];return null==a||null===(n=a.previousElementSibling)||void 0===n||n.focus(),[3,10];case 3:if(!("Escape"===e.key&&eJ))return[3,4];return eJ(),[3,10];case 4:if(!("Escape"===e.key&&rQ.running))return[3,5];return rR(!0),[3,10];case 5:if(!("m"===e.key.toLowerCase()&&!eY))return[3,6];return rZ().then(),[3,10];case 6:if(!("s"===e.key.toLowerCase()&&!eY))return[3,7];return rD().then(),[3,10];case 7:if(!("r"===e.key.toLowerCase()&&!eY))return[3,9];return[4,rU(rQ)];case 8:return s.sent()&&r$({levelToAvoid:ev(rQ).name}),[3,10];case 9:return[2];case 10:return e.preventDefault(),[2]}})}),function(e){return t.apply(this,arguments)}));var rQ=r_({});function r$(e){rL(),Object.assign(rQ,r_(e)),eU(),rg(rQ,0)}r$(window.location.search.includes("stressTest")&&{level:"Bird",perks:{base_combo:7,telekinesis:2,yoyo:2,pierce:10,coin_magnet:2,extra_life:3},debuffs:{frozen_coins:20}}||{}),function e(){var r=performance.now(),t=r-rQ.lastTick;rQ.lastTick=r;var _=Math.min(4,t/(1e3/60));rQ.keyboardPuckSpeed&&rn(rQ,rQ.puckPosition+rQ.keyboardPuckSpeed),rs(rQ),rQ.running&&(rQ.levelTime+=t,rQ.runStatistics.runTime+=t,function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;e.runStatistics.max_combo=Math.max(e.runStatistics.max_combo,e.combo),e.balls=e.balls.filter(function(e){return!e.destroyed});var t=e.bricks.filter(function(e){return e&&"black"!==e}).length;e.levelTime>e.lastTickDown+1e3&&e.perks.hot_start&&(e.lastTickDown=e.levelTime,ri(e,e.perks.hot_start,e.puckPosition,e.gameZoneHeight-2*e.puckHeight)),t<=e.perks.skip_last&&!e.autoCleanUses&&(e.bricks.forEach(function(r,t){r&&rp(e,t,e.balls[0],!0)}),e.autoCleanUses++);var _=e.perks.respawn&&e.balls.find(function(e){return e.hitItem.length>1});if(!e.running||t||_?e.winAt=0:e.winAt||(e.winAt=e.levelTime+5e3),e.running&&e.winAt&&e.levelTime>e.winAt||e.levelTime&&!t&&!rG(e.coins))e.currentLevel+17*e.baseSpeed&&(t.vx=7*e.baseSpeed),t.vx<-7*e.baseSpeed&&(t.vx=-7*e.baseSpeed),t.vy>7*e.baseSpeed&&(t.vy=7*e.baseSpeed),t.vy<-7*e.baseSpeed&&(t.vy=-7*e.baseSpeed),t.a+=t.sa,!e.perks.etherealcoins){var i=e.perks.helium>0&&2*Math.abs(t.x-e.puckPosition)>e.puckWidth+t.size;t.vy+=r*t.weight*.8*(i?-1:1),i&&!K("basic")&&.1>Math.random()&&rx(e,t.x,t.y,0,e.baseSpeed,t.color,!0,5,250)}if("crimson"===t.color&&!K("basic")){var u=Math.random()*Math.PI*2;rx(e,t.x,t.y,Math.cos(u)*e.baseSpeed*2,Math.sin(u)*e.baseSpeed*2,"red",!0,5,250)}var c=(Math.abs(t.vx)+Math.abs(t.vy))*10,p=rk(e,t,t.size/2,r);t.y>e.gameZoneHeight-n-e.puckHeight&&t.ye.highScore&&!e.isCreativeModeRun&&(e.highScore=e.score,localStorage.setItem("breakout-3-hs",e.score.toString())),K("basic")||rx(e,t.previousX,t.previousY,(e.canvasWidth-t.x)/100,-t.y/100,t.color,!0,e.coinSize/2,100+50*Math.random()),rm(e,"coinCatch",t.x,1),e.runStatistics.score+=t.points,e.perks.asceticism&&ro(e,t.x,t.y),rM(e.coins,_)):t.y>e.canvasHeight+n?(rM(e.coins,_),e.perks.compound_interest&&ro(e,t.x,t.y)):e.perks.unbounded&&(t.x<-e.gameZoneWidth/2||t.x>e.canvasWidth+e.gameZoneWidth/2)&&rM(e.coins,_);var d=function(e,r){var t,_=r.size/2,n=r.x,a=r.y,s=r.previousX,l=r.previousY,o=rT(s,a,_),i=rT(n,l,_),u=void 0===o&&void 0===i&&rT(n,a,_)||void 0;if(!e.perks.ghost_coins){if(void 0!==o||void 0!==u){r.y=r.previousY,r.vy*=-1;var c=e.bricks[rO(n-_,a+_)],p=e.bricks[rO(n+_,a+_)];c&&!p&&(r.vx+=1,r.sa-=1),!c&&p&&(r.vx-=1,r.sa+=1)}(void 0!==i||void 0!==u)&&(r.x=r.previousX,r.vx*=-1)}return null!==(t=null!=o?o:i)&&void 0!==t?t:u}(e,t);e.perks.metamorphosis&&void 0!==d&&e.bricks[d]&&t.color!==e.bricks[d]&&"black"!==e.bricks[d]&&!t.coloredABrick&&(e.bricks[d]=t.color,t.coloredABrick=!0,rm(e,"colorChange",t.x,.3)),!e.perks.ghost_coins&&void 0!==d||p?(t.vx*=.8,t.vy*=.8,t.sa*=.9,c>20&&!t.collidedLastFrame&&rm(e,"coinBounce",t.x,.2),t.collidedLastFrame=!0,3>Math.abs(t.vy)&&(t.vy=0)):t.collidedLastFrame=!1}),e.balls.forEach(function(t){return function(e,r,t){r.previousVX=r.vx,r.previousVY=r.vy;var _,n=1+e.perks.telekinesis+e.perks.ball_repulse_ball+e.perks.puck_repulse_ball+e.perks.ball_attract_ball;ef(e,r)&&(n+=3,r.vx+=(e.puckPosition-r.x)/1e3*t*e.perks.telekinesis*rw(e)),ey(e,r)&&(n+=3,r.vx+=(e.puckPosition-r.x)/1e3*t*e.perks.yoyo*rw(e)),r.vx*r.vx+r.vy*r.vy0?1:-1)*.02/n);var a=!0,s=!1,l=void 0;if(e.perks.ball_repulse_ball)try{for(var o,i,u,c=e.balls[Symbol.iterator]();!(a=(u=c.next()).done);a=!0){var p=u.value;p.x>=r.x||ry(e,r,p,e.perks.ball_repulse_ball,!0)}}catch(e){s=!0,l=e}finally{try{a||null==c.return||c.return()}finally{if(s)throw l}}var d=!0,m=!1,h=void 0;if(e.perks.ball_attract_ball)try{for(var g,b=e.balls[Symbol.iterator]();!(d=(g=b.next()).done);d=!0){var v=g.value;v.x>=r.x||function(e,r,t,_){var n=eW(r,t),a=3*e.gameZoneWidth/4;if(!(n1&&!K("basic"))for(var f=0;f<(null===(i=r.hitItem)||void 0===i?void 0:i.length)-1&&f.5,x=Math.random()>.5?1:-1,S=Math.random()>.5?1:-1;rx(e,ec(e,k)+x*e.brickWidth/2,ep(e,k)+S*e.brickWidth/2,w?0:-x*e.baseSpeed,w?-S*e.baseSpeed:0,W,!0,e.coinSize/2,250)}}var z=rk(e,r,e.ballSize/2,t);z&&(e.perks.left_is_lava&&z%2&&r.xe.offsetX+e.gameZoneWidth/2&&ro(e,r.x,r.y),e.perks.top_is_lava&&z>=2&&ro(e,r.x,r.y+e.ballSize),e.perks.trampoline&&z>=2&&ri(e,e.perks.trampoline,r.x,r.y+e.ballSize),rm(e,"wallBeep",r.x,1),e.levelWallBounces++,e.runStatistics.wall_bounces++);var M=e.gameZoneHeight-e.puckHeight-e.ballSize/2,G=Math.abs(r.x-e.puckPosition)M&&r.vy>0&&(G||e.perks.extra_life&&r.y>M+e.puckHeight/2)){if(G){var B=Math.sqrt(r.vx*r.vx+r.vy*r.vy),H=Math.atan2(-e.puckWidth/2,(r.x-e.puckPosition)*(e.perks.concave_puck?-.5:1));r.vx=B*Math.cos(H),r.vy=B*Math.sin(H),rm(e,"wallBeep",r.x,1)}else r.vy*=-1,rW(e,r,r.x,r.y);if(e.perks.streak_shots&&ro(e,r.x,r.y),e.perks.trampoline&&(e.combo+=e.perks.trampoline),e.perks.nbricks&&r.brokenSinceBouncee.canvasWidth+e.gameZoneWidth/2;e.running&&(r.y>e.gameZoneHeight+e.ballSize/2||R)&&(r.destroyed=!0,e.runStatistics.balls_lost++,e.balls.find(function(e){return!e.destroyed})||e5(T("gameOver.lost.title"),T("gameOver.lost.summary",{score:e.score})));var L=e.ballSize/2,P=r.x,O=r.y,C=r.previousX,A=r.previousY,E=rT(C,O,L),D=rT(P,A,L),j=void 0===E&&void 0===D&&rT(P,O,L)||void 0,Z=null!==(_=null!=E?E:D)&&void 0!==_?_:j;if(void 0!==Z){r.hitSinceBounce++;var I=!1,V=1+(e.perks.pierce_color&&(void 0===E||e.bricks[E]===e.ballsColor)&&(void 0===D||e.bricks[D]===e.ballsColor)&&(void 0===j||e.bricks[j]===e.ballsColor)?e.perks.pierce_color:0);e.brickHP[Z]-=V;var F=Math.min(r.piercePoints,Math.max(1,e.brickHP[Z]));if(e.brickHP[Z]-=F,r.piercePoints-=F,e.brickHP[Z]<0&&(e.brickHP[Z]=0,I=!0),void 0===E&&void 0===j||I||(r.y=r.previousY,r.vy*=-1),void 0===D&&void 0===j||I||(r.x=r.previousX,r.vx*=-1),e.brickHP[Z])rm(e,"wallBeep",P,1),function(e,r,t,_){var n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:8,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:150;rz(e.lights,function(s){s.time=e.levelTime,s.x=r,s.y=t,s.color=_,s.size=n,s.duration=a})}(e,ec(e,Z),ep(e,Z),"white",e.brickWidth+2,50*e.brickHP[Z]);else{var X=e.bricks[Z];r.brokenSinceBounce++,rp(e,Z,r,!1),r.sapperUses.1/(1+Y)||N&&Math.random()>.1/(1+N)||Y&&Math.random()>.1/(1+Y)){var J=N?Math.random()>.5?"orange":"red":e.ballsColor;rx(e,r.x,r.y,e.perks.pierce_color||U?-r.vx+(Math.random()-.5)*e.baseSpeed/3:(Math.random()-.5)*e.baseSpeed,e.perks.pierce_color||U?-r.vy+(Math.random()-.5)*e.baseSpeed/3:(Math.random()-.5)*e.baseSpeed,J,!0,e.coinSize/2,100)}}}(e,t,r)}),e.perks.shocks&&e.balls.forEach(function(r,t){return e.balls.forEach(function(_,n){if(t.5&&rx(e,e.offsetXRoundedDown+Math.random()*e.gameZoneWidthRoundedUp,Math.random()*e.gameZoneHeight,8*a,0,rf(),!0,e.coinSize/2,150);rH(e.particles,function(t,_){t.x+=t.vx*r,t.y+=t.vy*r,!t.ethereal&&(t.vy+=.5,rC(rO(t.x,t.y))&&rM(e.particles,_))})}if(e.combo>rl(e)&&!K("basic")&&(e.combo-rl(e))*Math.random()>5){if(e.perks.top_is_lava&&rx(e,e.offsetXRoundedDown+Math.random()*e.gameZoneWidthRoundedUp,0,(Math.random()-.5)*10,5,"red",!0,e.coinSize/2,100*(Math.random()+1)),e.perks.left_is_lava&&rx(e,e.offsetXRoundedDown,Math.random()*e.gameZoneHeight,5,(Math.random()-.5)*10,"red",!0,e.coinSize/2,100*(Math.random()+1)),e.perks.right_is_lava&&rx(e,e.offsetXRoundedDown+e.gameZoneWidthRoundedUp,Math.random()*e.gameZoneHeight,-5,(Math.random()-.5)*10,"red",!0,e.coinSize/2,100*(Math.random()+1)),e.perks.compound_interest){var l=e.puckPosition,o=0;do l=e.offsetXRoundedDown+e.gameZoneWidthRoundedUp*Math.random(),o++;while(Math.abs(l-e.puckPosition)r.time+r.duration&&rM(e.particles,t)}),rH(e.texts,function(r,t){e.levelTime>r.time+r.duration&&rM(e.texts,t)}),rH(e.lights,function(r,t){e.levelTime>r.time+r.duration&&rM(e.lights,t)})}(rQ,_)),(rQ.running||rQ.needsRender)&&(rQ.needsRender=!1,function(e){var r=ev(e),t=e.combo>rl(e),_=eG.width,n=eG.height;if(_&&n){if(e.currentLevel||e.levelTime?eI.innerText=e.loop?T("play.current_lvl_loop",{level:e.currentLevel+1,max:eh(e),loop:e.loop}):T("play.current_lvl",{level:e.currentLevel+1,max:eh(e)}):eI.innerText=T("play.menu_label"),eZ.innerText="$".concat(e.score),eZ.className=e.lastScoreIncrease>e.levelTime-500?"active":"",K("basic")||r.color||!r.svg)eB.globalAlpha=1,eB.globalCompositeOperation="source-over",eB.fillStyle=r.color||"#000",eB.fillRect(0,0,_,n),rH(e.particles,function(r){var t=r.x,_=r.y,n=r.time,a=r.color,s=r.size,l=r.duration;eB.globalAlpha=Math.min(1,2-(e.levelTime-n)/l*2),eT(eB,a,s,t,_)});else if(eB.globalCompositeOperation="source-over",eB.globalAlpha=1,eB.fillStyle="#000",eB.fillRect(0,0,_,n),eB.globalCompositeOperation="screen",eB.globalAlpha=.6,rH(e.coins,function(r){eE(eB,r.color,2*e.coinSize,r.x,r.y)}),e.balls.forEach(function(r){eE(eB,e.ballsColor,2*e.ballSize,r.x,r.y)}),eB.globalAlpha=.5,e.bricks.forEach(function(r,t){if(r){var _=ec(e,t),n=ep(e,t);eE(eB,"black"==r?"#666":r,e.brickWidth,_,n)}}),eB.globalAlpha=1,rH(e.particles,function(r){var t=r.x,_=r.y,n=r.time,a=r.color,s=r.size,l=r.duration;eB.globalAlpha=Math.min(1,2-(e.levelTime-n)/l*2),eE(eB,a,3*s,t,_)}),eB.globalAlpha=.2,eB.globalCompositeOperation="multiply",eB.fillStyle="black",eB.fillRect(0,0,_,n),eB.globalAlpha=.8,eB.globalCompositeOperation="multiply",r.svg&&eq.width&&eq.complete){if(eR.title!==r.name){eR.title=r.name,eR.width=e.canvasWidth,eR.height=e.canvasHeight;var a=eR.getContext("2d");a.fillStyle=r.color||"#000",a.fillRect(0,0,e.canvasWidth,e.canvasHeight);var s=eB.createPattern(eq,"repeat");s&&(a.fillStyle=s,a.fillRect(0,0,_,n))}eB.drawImage(eR,0,0)}else eB.fillStyle="#000",eB.fillRect(0,0,_,n);eB.globalAlpha=1,eB.globalCompositeOperation="source-over";var l=Date.now()-e.lastExplosion+5,o=l<200&&!K("basic");if(o){var i=(e.perks.bigger_explosions+1)*50/l;eB.translate(Math.sin(Date.now())*i,Math.sin(Date.now()+36)*i)}if(e.perks.bigger_explosions&&!K("basic")&&o?eG.style.filter="brightness("+(1+100/(1+l))+")":eG.style.filter="",eB.globalAlpha=1,rH(e.coins,function(_){eB.globalCompositeOperation="source-over",eA(eB,_.color,_.size,_.x,_.y,t&&e.perks.asceticism&&"red"||!_.points&&"red"||r.color||"black",_.a)}),!K("basic")&&(eB.globalCompositeOperation="source-over",eB.globalAlpha=Math.min(.8,rG(e.coins)/20),e.balls.forEach(function(t){eT(eB,r.color||"#000",6*e.ballSize,t.x,t.y)}),e.debuffs.deadly_coins||e.debuffs.frozen_coins)){eB.globalCompositeOperation="source-over",eB.globalAlpha=.8;var u=Math.floor(e.levelTime/100)%2>0;rH(e.coins,function(e){"crimson"==e.color&&eT(eB,u?"red":"black",3*e.size,e.x,e.y),"LightSkyBlue"==e.color&&eT(eB,u?"LightSkyBlue":"black",3*e.size,e.x,e.y)}),eB.globalAlpha=1,rH(e.coins,function(e){"crimson"==e.color&&eA(eB,u?"black":"red",e.size,e.x,e.y,"red",e.a),"LightSkyBlue"==e.color&&eA(eB,u?"black":"LightSkyBlue",e.size,e.x,e.y,"LightSkyBlue",e.a)})}if(eB.globalCompositeOperation="source-over",function(){eB.globalAlpha=1;var e=rQ.combo>rl(rQ),r=e&&rQ.perks.picky_eater&&!K("basic"),t=!!(rQ.lastPuckMove&&rQ.perks.passive_income&&e&&rQ.lastPuckMove>rQ.levelTime-250*rQ.perks.passive_income),_=eX(rQ);r||t||rQ.perks.reach||rQ.perks.zen||(_=0);var n=rQ.perks.clairvoyant&&rQ.brickHP.reduce(function(e,r){return e+r},0),a=rQ.gameZoneWidth+"_"+rQ.bricks.join("_")+eH.complete+"_"+r+"_"+t+"_"+rQ.ballsColor+"_"+rQ.perks.pierce_color+"_"+n+"_"+_;if(a!==eO){eO=a,eP.width=rQ.gameZoneWidth,eP.height=rQ.gameZoneWidth+1;var s=eP.getContext("2d");s.clearRect(0,0,rQ.gameZoneWidth,rQ.gameZoneWidth),s.resetTransform(),s.translate(-rQ.offsetX,0),rQ.bricks.forEach(function(n,a){var l=ec(rQ,a),o=ep(rQ,a);if(n){var i=rQ.perks.reach&&ex(rQ,a)&&!eS(rQ,a),u="crimson"===n||rQ.ballsColor!==n&&"black"!==n&&r||e&&rQ.perks.zen&&"black"===n||i||t;s.globalCompositeOperation="source-over",eD(s,n,l,o,u?_:-1),rQ.brickHP[a]>1&&rQ.perks.clairvoyant&&(s.globalCompositeOperation="destination-out",ej(s,rQ.brickHP[a].toString(),"white",rQ.puckHeight,l,o)),"black"===n&&(s.globalCompositeOperation="source-over",function(e,r,t,_,n){var a="svg"+r+"_"+t+"_"+r.complete;if(!eC[a]){var s=document.createElement("canvas");s.width=t,s.height=t;var l=s.getContext("2d"),o=t/Math.max(r.width,r.height),i=r.width*o,u=r.height*o;l.drawImage(r,(t-i)/2,(t-u)/2,i,u),eC[a]=s}e.drawImage(eC[a],Math.round(_-t/2),Math.round(n-t/2))}(s,eH,rQ.brickWidth,l,o))}})}eB.drawImage(eP,rQ.offsetX,0)}(),eB.globalCompositeOperation="screen",rH(e.lights,function(r){var t=r.x,_=r.y,n=r.time,a=r.color,s=(r.size,r.duration);eB.globalAlpha=.5*Math.min(1,2-(e.levelTime-n)/s*2),eD(eB,a,t,_,-1)}),eB.globalCompositeOperation="screen",rH(e.texts,function(r){var t=r.x,_=r.y,n=r.time,a=r.color,s=r.size,l=r.duration,o=e.levelTime-n;eB.globalAlpha=Math.max(0,Math.min(1,2-o/l*2)),eB.globalCompositeOperation="source-over",ej(eB,r.text,a,s,t,_-o/10)}),rH(e.particles,function(r){var t=r.x,_=r.y,n=r.time,a=r.color,s=r.size,l=r.duration;eB.globalAlpha=Math.max(0,Math.min(1,2-(e.levelTime-n)/l*2)),eB.globalCompositeOperation="screen",eT(eB,a,s,t,_),eE(eB,a,s,t,_)}),e.perks.extra_life){eB.globalAlpha=1,eB.globalCompositeOperation="source-over",eB.fillStyle=e.puckColor;for(var c=0;c4&&void 0!==arguments[4]?arguments[4]:0,a=arguments.length>5?arguments[5]:void 0,s=arguments.length>6?arguments[6]:void 0,l="puck"+r+"_"+t+"_"+_+"_"+a+"_"+s;if(!eC[l]){var o=document.createElement("canvas");o.width=t,o.height=2*_;var i=o.getContext("2d");i.fillStyle=r,i.beginPath(),i.moveTo(0,2*_),a?(i.lineTo(0,.75*_),i.bezierCurveTo(t/2,_,t/2,+_,t,.75*_)):(i.lineTo(0,1.25*_),i.bezierCurveTo(0,.75*_,t,.75*_,t,1.25*_)),i.lineTo(t,2*_),i.fill(),-1!==s&&(i.strokeStyle="red",i.lineWidth=4,i.setLineDash(eF),i.lineDashOffset=s,i.stroke()),eC[l]=o}e.drawImage(eC[l],Math.round(rQ.puckPosition-t/2),rQ.gameZoneHeight-2*_+n)}(eB,e.puckFrozenUntil>e.levelTime?"LightSkyBlue":e.puckColor,e.puckWidth,e.puckHeight,0,!!e.perks.concave_puck,e.perks.streak_shots&&t?eX(e):-1),e.combo>1){eB.globalCompositeOperation="source-over";var p="x "+e.combo,d=p.length*e.puckHeight/1.8,m=d+2*e.coinSize,h=e.puckPosition-m/2;me.puckWidth?e.combo.toString():p,"#000",d>e.puckWidth?12:20,e.puckPosition,e.gameZoneHeight-e.puckHeight/2,!1)}eB.globalCompositeOperation="source-over",eB.globalAlpha=e.perks.unbounded?.1:1,e.offsetXRoundedDown?(eB.fillStyle=t&&e.perks.left_is_lava?"red":e.puckColor,eL(eB,e,t&&e.perks.left_is_lava&&!e.perks.unbounded&&"red"||"white",e.offsetX-1,0,e.offsetX-1,n,e.perks.unbounded?.1:1),eL(eB,e,t&&e.perks.right_is_lava&&!e.perks.unbounded&&"red"||"white",_-e.offsetX+1,0,_-e.offsetX+1,n,e.perks.unbounded?.1:1)):(eB.fillStyle="red",eL(eB,e,t&&e.perks.left_is_lava&&!e.perks.unbounded&&"red"||"",0,0,0,n,1),eL(eB,e,t&&e.perks.right_is_lava&&!e.perks.unbounded&&"red"||"",_-1,0,_-1,n,1)),eL(eB,e,t&&e.perks.top_is_lava&&"red"||"",e.offsetXRoundedDown,1,_-e.offsetXRoundedDown,1,1),eL(eB,e,t&&e.perks.compound_interest&&"red"||K("mobile-mode")&&"white"||"",e.offsetXRoundedDown,e.gameZoneHeight,_-e.offsetXRoundedDown,e.gameZoneHeight,1),K("mobile-mode")&&!e.running&&ej(eB,T("play.mobile_press_to_play"),e.puckColor,e.puckHeight,e.canvasWidth/2,e.gameZoneHeight+(e.canvasHeight-e.gameZoneHeight)/2),o&&eB.resetTransform()}}(rQ)),rQ.running&&function(e){if(K("record")){var r;l&&(r=e,u&&(u.drawImage(eG,r.offsetXRoundedDown,0,r.gameZoneWidthRoundedUp,r.gameZoneHeight,0,0,i.width,i.height),u.fillStyle="#FFF",u.textBaseline="top",u.font="12px monospace",u.textAlign="right",u.fillText(r.score.toString(),i.width-12,12),u.textAlign="left",u.fillText("Level "+(r.currentLevel+1)+"/"+eh(r),12,12)),(null==o?void 0:o.requestFrame)?null==o||o.requestFrame():(null==l?void 0:l.requestFrame)&&l.requestFrame())}}(rQ),K("sound")&&function(e){if(!(Q>Date.now()-60))for(var r in Q=Date.now(),e.aboutToPlaySound){var t,_=e.aboutToPlaySound[r];_.vol&&($[r](Math.min(2,_.vol),(t=e,Math.max(0,Math.min(1,(_.x-t.offsetXRoundedDown)/t.gameZoneWidthRoundedUp))),e.combo),_.vol=0)}}(rQ),requestAnimationFrame(e),rA++}()}();