PageSourceSearch

https://www.nitrome.com/blog/

html nitrome.com collected 2026-09-24 09:07:02 UTC 188,480 bytes, 1,451 lines download raw bytes

1<!DOCTYPE html>
2<html>
3    <head>
4	<link rel="dns-prefetch" href="//cdn.nitrome.com/" />
5    <title>Game Development Blog - Nitrome</title>
6<meta name="title" content="Game Development Blog - Nitrome"/>
7<meta charset="utf-8" />
7<script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]},distributed_tracing:{enabled:true}};(window.NREUM||(NREUM={})).loader_config={agentID:"960259577",accountID:"3218166",trustKey:"3218166",xpid:"VwQGWVdVDhAJUlFQAwkGUF0=",licenseKey:"NRJS-0e5092abdabfb2d9bb8",applicationID:"960248169",browserID:"960259577"};;/*! For license information please see nr-loader-spa-1.322.0.min.js.LICENSE.txt */
8(()=>{var e={8122(e,t,r){"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),s=0===Object.keys(r).length?e:r;for(let a in s)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):e[a]instanceof Map||e[a]instanceof Set||e[a]instanceof Date||e[a]instanceof RegExp?r[a]=e[a]:"object"==typeof e[a]&&null!==t[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){r[a]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555(e,t,r){"use strict";r.d(t,{f:()=>a});var n=r(384),i=r(8122);const s={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0};function a(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}r.d(t,["D",0,e=>(0,i.a)(e,s)])},7699(e,t,r){"use strict";var n=r(860);const i={[n.K7.logging]:!0,[n.K7.genericEvents]:!0,[n.K7.jserrors]:!0,[n.K7.ajax]:!0};r.d(t,["It",0,1e6,"KC",0,i,"qh",0,"SESSION_ERROR"])},9324(e,t,r){"use strict";r.d(t,["A",0,"@newrelic/rrweb","x",0,"1.322.0"])},981(e,t,r){"use strict";r.d(t,["R",0,{AJAX:"AjaxRequest",PA:"PageAction",UA:"UserAction",BP:"BrowserPerformance",WS:"WebSocket",SPV:"SecurityPolicyViolation",JSE:"JavaScriptError",LOG:"Log",PVE:"PageView",PVT:"PageViewTiming",SR:"SessionReplay",ST:"SessionTrace",BI:"BrowserInteraction"}])},9752(e,t,r){"use strict";const n="newrelic-iframe-",i=n+"timing-update",s=n+"api",a=n+"api-response",o=n+"vitals-update",c=n+"ajax";r.d(t,["$8",0,o,"Gi",0,a,"KU",0,c,"Pl",0,n,"cS",0,s,"cr",0,i])},6154(e,t,r){"use strict";var n=r(1863);const i="undefined"!=typeof window&&!!window.document,s="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),o=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)();r.d(t,["OF",0,d,"RI",0,i,"WN",0,f,"bv",0,s,"gm",0,a,"lR",0,l,"m",0,c,"mw",0,o,"sb",0,u,"zk",0,()=>{const e=a?.performance?.getEntriesByType?.("navigation")?.[0];if(e&&e.responseStart>0&&e.responseStart<a.performance.now())return e}])},7295(e,t,r){"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>s});var n=[];function i(e){if(!e||s(e))return!1;if(0===n.length)return!0;if("*"===n[0].hostname)return!1;for(var t=0;t<n.length;t++){var r=n[t];if(r.hostname.test(e.hostname)&&r.pathname.test(e.pathname))return!1}return!0}function s(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;if("*"===r)return void(n=[{hostname:"*"}]);0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let s,a;i>0?(s=r.substring(0,i),a=r.substring(i)):(s=r,a="*");let[c]=s.split(":");n.push({hostname:o(c),pathname:o(a,!0)})}}function o(e,t=!1){const r=e.replace(/[.+?^${}()|[\]\\]/g,e=>"\\"+e).replace(/\*/g,".*?");return new RegExp((t?"^":"")+r+"$")}},3241(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(6154);function i(e={}){try{n.gm.dispatchEvent(new CustomEvent("newrelic",{detail:e}))}catch(e){}}},1687(e,t,r){"use strict";r.d(t,{Ak:()=>o,Ze:()=>d,x3:()=>c});var n=r(3241),i=r(3606),s=r(860),a=r(2646);function o(e,t){if(!e)return;const r={staged:!1,priority:s.P3[t]||0};
8e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&u(e))}function d(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,u(e)}}function u(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const s=e.ee,o=i.i.handlers;if(s&&!s.aborted&&s.backlog&&o){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=s.backlog[t],r=o[t];if(r){for(let t=0;e&&t<e.length;++t)f(e[t],r);Object.entries(r).forEach(([e,t])=>{Object.values(t||{}).forEach(t=>{t[0]?.on&&t[0].context()instanceof a.y&&!t[0].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}s.isolatedBacklog||delete o[t],s.backlog[t]=null,s.emit("drain-"+t,[])}}function f(e,t){var r=e[1];Object.values(t[r]||{}).forEach(t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],s=e[2];n.apply(i,s)}})}},7836(e,t,r){"use strict";var n=r(384),i=r(8990),s=r(2646),a=r(5607);const o="nr@context:".concat(a.W),c=function e(t,r){var n={},a={},u={},l=!1;try{l=16===r.length&&d.initializedAgents?.[r]?.runtime.isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,s){!1!==s&&(s=!0);if(c.aborted&&!i)return;t&&s&&t.emit(e,r,n);var o=h(n);g(e).forEach(e=>{e.apply(o,r)});var d=v()[a[e]];d&&d.push([f,e,r,o]);return o},get:m,listeners:g,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach(([e,n])=>{a[n]=t,t in r||(r[t]=[])})},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach(e=>{delete f.backlog[e]})},isBuffering:function(e){return!!v()[a[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof s.y?e:e?(0,i.I)(e,o,()=>new s.y(o)):new s.y(o)}function p(e,t){n[e]=g(e).concat(t)}function g(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=c),r.d(t,["P",0,o,"ee",0,c])},2646(e,t,r){"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908(e,t,r){"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,s){s?(s.buffer([e],i),s.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(9908);s.on=a;var i=s.handlers={};function s(e,t,r,s){a(s||n.d,i,e,t,r)}function a(e,t,r,i,s){s||(s="feature"),e||(e=n.d);var a=t[s]=t[s]||{};(a[r]=a[r]||[]).push([e,i])}},3878(e,t,r){"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function s(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>s,jT:()=>n,sp:()=>i})},5607(e,t,r){"use strict";const n=(0,r(9566).bz)();r.d(t,["W",0,n])},9566(e,t,r){"use strict";r.d(t,{LA:()=>a,ZF:()=>o,bz:()=>s,el:()=>c});var n=r(6154);function i(e,t){return e?15&e[t]:16*Math.random()|0}function s(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").map(e=>"x"===e?i(t,r++).toString(16):"y"===e?(3&i()|8).toString(16):e).join("")}function a(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,s=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var o=0;o<e;o++)a.push(i(r,s++).toString(16));return a.join("")}function o(){return a(16)}function c(){return a(32)}},2614(e,t,r){"use strict";r.d(t,["BB",0,18e5,"Wt",0,"NRBA_SESSION::","g",0,{OFF:0,FULL:1,ERROR:2},"iL",0,{SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},"tS",0,{STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},"wk",0,144e5])},733(e,t,r){"use strict";function n(e,t){return function(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}("".concat(String(e),":").concat(String(t)))}r.d(t,{Y:()=>n})},1863(e,t,r){"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},9119(e,t,r){"use strict";r.d(t,{L:()=>s});var n=/([^?#]*)[^#]*(#[^?]*|$).*/,i=/([^?#]*)().*/;function s(e,t){return e?e.replace(t?n:i,"$1$2"):e}},7485(e,t,r){"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},7866(e,t,r){"use strict";r.d(t,["Nc",0,/^\s*at Function code \(Function code:\d+:\d+\)\s*/i,"cn",0,/^\s*(?:([^@]*)(?:\(.*?\))?@)?((?:file|http|https|chrome|safari-extension).*?):(\d+)(?::(\d+))?\s*$/i,"fL",0,/^\s*at .+ \(eval at \S+ \((?:(?:file|http|https):[^)]+)?\)(?:, [^:]*:\d+:\d+)?\)$/i,"h3",0,/function (.+?)\s*\(/,"hB",0,/^\s*at (?:((?:\[object object\])?(?:[^(]*\([^)]*\))*[^()]*(?: \[as \S+\])?) )?\(?((?:file|http|https|chrome-extension):.*?)?:(\d+)(?::(\d+))?\)?\s*$/i])},944(e,t,r){"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(e,t){"function"==typeof console.debug&&(console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t),(0,n.W)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},8990(e,t,r){"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389(e,t,r){"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout(()=>{i=clearTimeout(i)},t)),n||(clearTimeout(i),i=setTimeout(()=>{e.apply(this,r)},t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},1910(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(944);const i=new Map;function s(...e){return e.every(e=>{if(i.has(e))return i.get(e);const t="function"==typeof e?e.toString():"",r=t.includes("[native code]"),s=t.includes("nrWrapper");return r||s||(0,n.R)(64,e?.name||t),i.set(e,r),r})}},3304(e,t,r){"use strict";r.d(t,{A:()=>i});var n=r(7836);function i(e){try{return JSON.stringify(e,(()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}})())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},9232(e,t,r){"use strict";r.d(t,["f",0,{MFE:"MFE",BA:"BA"}])},7560(e,t,r){"use strict";r.d(t,{N:()=>a,j:()=>c});var n=r(9119),i=r(944);const s=(0,r(6389).J)(e=>(0,i.R)(80,e));function a(e){if(!Array.isArray(e?.assets)||!e.assets.length)return;
8const t=e.assets.map(o).filter(Boolean);return t.length?{assets:t,scripts:t.filter(e=>e.isScript)}:void 0}function o(e){if(!e||"object"!=typeof e)return;const{matcher:t,type:r}=e;let i="string"==typeof t&&t.endsWith(".js");return void 0!==r&&(!function(e){return"script"===e||"asset"===e}(r)?s(r):i=function(e){return"script"===e}(r)),a=t,"[object RegExp]"===Object.prototype.toString.call(a)?{pattern:t,test:e=>(t.lastIndex=0,t.test((0,n.L)(e))),isScript:i}:"string"==typeof t&&t.length>0?{pattern:t,test:e=>(0,n.L)(e).includes(t),isScript:i}:void s(t);var a}function c(e,t,{scriptsOnly:r=!1}={}){if(!e||!t)return!1;return(r?e.scripts:e.assets).some(e=>e.test(t))}},5718(e,t,r){"use strict";r.d(t,{xo:()=>T,AZ:()=>v,cI:()=>g,Qr:()=>A,QL:()=>y});var n=r(6154),i=r(1863),s=r(9119),a=r(7866);class o{dom=new c;performance=new c;constructor(e){this.url=e,this.claimedBy=new Set}get script(){const e=Math.max(this.dom.start,this.performance.end);return{start:e,end:Math.max(this.dom.end,this.performance.end,e)}}}class c{start=0;end=0;value=void 0}function d(e=()=>{},t){return{get:()=>void 0!==t?t:e(),set:e=>{t=e}}}let u;try{u=v(y())[0]}catch(e){u=v(e)[0]}const l=new Map;let f=[];const h=new WeakMap;function p(e){let t=h.get(e);return t||(t={weighedAssetUrls:new Set,recordManifestScriptWindow:(t,r)=>{t&&(e.scriptStart=e.scriptStart>0?Math.min(e.scriptStart,t):t),r&&(e.scriptEnd=e.scriptEnd>0?Math.max(e.scriptEnd,r):r)}},h.set(e,t)),t}function g(e){return l.get(e)}function m(e){const t=g(e);
8if(t)return t;const r=new o(e);if(l.set(e,r),l.size>1e3){const e=l.keys().next().value;l.delete(e)}return r}if(n.gm.MutationObserver&&n.gm.document){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if("SCRIPT"===e.nodeName&&e.src){const t=m((0,s.L)(e.src));t.dom.start=(0,i.t)(),t.dom.value=e;const r=()=>{t.dom.end=(0,i.t)()};["load","error"].forEach(t=>e.addEventListener(t,r,{once:!0}))}})})}).observe(n.gm.document,{childList:!0,subtree:!0})}if(n.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{if((e=>"script"===e.initiatorType||["link","fetch"].includes(e.initiatorType)&&(0,s.L)(e.name).endsWith(".js"))(e)){const t=m((0,s.L)(e.name));t.performance.start=Math.floor(e.startTime),t.performance.end=Math.floor(e.responseEnd),t.performance.value=e}if(!f.length)return;const t=[];f.forEach(({test:r,addedAt:n},s)=>{(r(e)||(0,i.t)()-n>1e4)&&t.push(s)}),f=f.filter((e,r)=>!t.includes(r))})}).observe({type:"resource",buffered:!0})}function v(e){if(!e||"string"!=typeof e)return[];const t=new Set,r=e.split("\n");for(const e of r){const r=e.match(a.cn)||e.match(a.hB)||e.match(a.fL);if(r&&r[2])t.add((0,s.L)(r[2]));else{const r=e.match(/\(([^)]+\.js):\d+:\d+\)/)||e.match(/^\s+at\s+([^\s(]+\.js):\d+:\d+/);r&&r[1]&&t.add((0,s.L)(r[1]))}}return[...t]}function y(){let e;try{const t=Error.stackTraceLimit;Error.stackTraceLimit=50,e=(new Error).stack,Error.stackTraceLimit=t}catch(t){e=(new Error).stack}return e}function b(e,t){return(0,s.L)(e.name)===t}function E(e,t){e.fetchStart=Math.floor(t.startTime),e.fetchEnd=Math.floor(t.responseEnd),e.asset=t.name,e.type=t.initiatorType,w(e,t)}function w(e,t){const r=(0,s.L)(t.name),{weighedAssetUrls:n}=p(e);n.has(r)||(n.add(r),e.totalWeight=(e.totalWeight||0)+(t.transferSize||0),"blocking"===t.renderBlockingStatus?e.renderBlocking=!0:"non-blocking"===t.renderBlockingStatus&&!0!==e.renderBlocking&&(e.renderBlocking=!1))}function R(e,t,r,n,i){if(w(e,t),"scripts"!==i&&"all"!==i)return;if("all"===i||r.isScript){const r=Math.floor(t.startTime),n=Math.floor(t.responseEnd);e.fetchStart=e.fetchStart>0?Math.min(e.fetchStart,r):r,e.fetchEnd=e.fetchEnd>0?Math.max(e.fetchEnd,n):n}if(r.isScript){const r=g((0,s.L)(t.name));if(r){const t=()=>{const{start:t,end:n}=r.script;p(e).recordManifestScriptWindow(t,n)};t(),!r.dom.end&&r.dom.value&&["load","error"].forEach(e=>r.dom.value.addEventListener(e,t,{once:!0}))}n.resolved||(e.asset=t.name,e.type=t.initiatorType,n.resolved=!0)}}function T(e,t){const r=t?.manifest;if(!r||!r.assets.length)return;const s={resolved:!1},a=new Set(r.assets);(n.gm.performance?.getEntriesByType("resource")||[]).forEach(r=>{const n=[...a].find(e=>e.test(r.name));n&&(R(e,r,n,s,t.timingMethod),a.delete(n))}),a.size&&function(e,t,r,s){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:n=>{const i=[...t].find(e=>e.test(n.name));return i&&(R(e,n,i,r,s),t.delete(i)),0===t.size}})}(e,a,s,t.timingMethod)}function A(e){const t=e?.id,r={registeredAt:(0,i.t)(),reportedAt:void 0,fetchStart:0,fetchEnd:0,scriptStart:0,scriptEnd:0,asset:void 0,type:"unknown",totalWeight:0,renderBlocking:void 0},a=y();if(!a)return r;const o=n.gm.performance?.getEntriesByType("navigation")?.[0]?.name||"";try{const e=v(a),c=(e.length>1?e.filter(e=>u!==e):e)[0];if(!c)return r;if(o.includes(c))return r.asset=(0,s.L)(o),r.type="inline",r;r.correlation=g(c);const l=r.correlation?.performance.value||n.gm.performance?.getEntriesByType("resource")?.find(e=>b(e,c));if(l)E(r,l);else{(function(e){if(!e||!n.gm.document)return!1;try{const t=n.gm.document.querySelectorAll('link[rel="preload"][as="script"]');for(const r of t)if((0,s.L)(r.href)===e)return!0}catch(e){}return!1})(c)&&(r.asset=c,r.type="preload"),function(e,t){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:r=>!!b(r,t)&&(E(e,r),!0)})}(r,c)}const h=r.correlation,m=!!t&&!!h?.claimedBy.has(t);h&&t&&h.claimedBy.add(t);const y=()=>{const e=h?.script.start;if(!m||!e)return!1;return r.registeredAt-e>1e4};let w=0,R=0;p(r).recordManifestScriptWindow=(e,t)=>{e&&(w=w>0?Math.min(w,e):e),t&&(R=R>0?Math.max(R,t):t)},Object.defineProperty(r,"scriptStart",d(()=>{const e=y()?r.registeredAt:h?.script.start??r.fetchEnd;return w>0?Math.min(e,w):e})),Object.defineProperty(r,"scriptEnd",d(()=>{const e=y()?r.registeredAt:h?.script.end??r.registeredAt;return R>0?Math.max(e,R):e}))}catch(e){}return r}},5732(e,t,r){"use strict";r.d(t,{$5:()=>m,B5:()=>g,K6:()=>u,M$:()=>
8o,Ms:()=>d,NG:()=>c,Ux:()=>h,YA:()=>p,yx:()=>l});var n=r(5718),i=r(7560),s=r(9119),a=r(9232);function o(e){return e?.type===a.f.MFE}function c(e,t){if(!y(e,t))return;const r=t.runtime.registeredEntities;return r?.find(t=>t.metadata.target.iframeInterfaceId===e)}function d(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities;return r?.filter(t=>String(t.metadata.target.id)===String(e)).map(e=>e.metadata.target)||[]}function u(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=(0,s.L)(e),a=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!1}):!!t.metadata.timings?.asset&&(0,s.L)(t.metadata.timings.asset)===n});return f(a).map(e=>e.metadata.target)}function l(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!0}):!!t.metadata.timings?.asset?.endsWith(e)});return f(n).map(e=>e.metadata.target)}function f(e){if(!e?.length)return e||[];const t=new Map,r=[];for(const n of e){const e=n.metadata?.timings?.asset;if(!e){r.push(n);continue}const i="".concat(e,"::").concat(n.metadata?.target?.id),s=t.get(i);if(s){if(s.metadata.target?.blocked&&!n.metadata.target?.blocked){const e=r.indexOf(s);-1!==e&&(r[e]=n),t.set(i,n)}}else t.set(i,n),r.push(n)}return r}function h(e,t){return v(t)?o(e)?e.attributes:t.agentRef.runtime.v2Target.attributes:{}}function p(e,t){return g(e,t)?{"child.id":e.id,"child.type":e.type,...h(void 0,t)}:{}}function g(e,t){return o(e)&&!!v(t)&&t.agentRef.init.api.register.duplicate_data_to_container}function m(e){if(!e?.runtime)return[];if(!y(!0,e)||!e.runtime.registeredEntities?.length)return[e.runtime.v2Target];const t=[];try{var r=(0,n.AZ)((0,n.QL)());let i=r.length-1;for(;r[i];)t.push(...l(r[i--],e))}catch(e){}const i=function(e){const t=new Set,r=[];for(const n of e){const e=n?.instance;t.has(e)||(t.add(e),r.push(n))}return r}(t);return i.length||i.push(e.runtime.v2Target),i}function v(e){return 2===e?.harvestEndpointVersion}function y(e,t){return!!e&&!!t?.init.api.register.enabled}},5289(e,t,r){"use strict";r.d(t,{GG:()=>a,Qr:()=>c,sB:()=>o});var n=r(3878),i=r(6389);function s(){return"undefined"==typeof document||"complete"===document.readyState}function a(e,t){if(s())return e();const r=(0,i.J)(e),a=setInterval(()=>{s()&&(clearInterval(a),r())},500);(0,n.sp)("load",r,t)}function o(e){if(s())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(s())return e();(0,n.sp)("popstate",e)}},384(e,t,r){"use strict";r.d(t,{Zm:()=>c,bQ:()=>u,dV:()=>d,pV:()=>l});var n=r(6154),i=r(1863),s=r(944),a=r(1910);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function d(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket},(0,a.i)(...Object.values(e.o))),e}function u(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,s.R)(69)}function l(){return function(){let e=c();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),d(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}r.d(t,["NT",0,o])},2843(e,t,r){"use strict";r.d(t,{G:()=>s,u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)},r,i)}function s(e,t,r){(0,n.sp)("pagehide",e,t,r)}},8139(e,t,r){"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),s=r(8990),a=r(6154);const o={},c=a.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e,t){var r=function(e){return(e||n.ee).get("events")}(e);if(o[r.debugId]++)return r;o[r.debugId]=1;var f=(0,i.YM)(r,!0,t);function p(e){f.inPlace(e,[d,u],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,p),c&&h(c.prototype,p),h(a.gm,p)),r.on(d+"-start",function(e,t){var r=e[1];if(null!==r&&("function"==typeof r||"object"==typeof r)&&"newrelic"!==e[0]){var n=(0,s.I)(r,l,function(){var e={object:function(){if("function"!=typeof r.handleEvent)return;return r.handleEvent.apply(r,arguments)},function:r}[typeof r];return e?f(e,"fn-",null,e.name||"anonymous"):r});this.wrapped=e[1]=n}}),r.on(u+"-start",function(e){e[1]=this.wrapped||e[1]}),r}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434(e,t,r){"use strict";r.d(t,{YM:()=>d});var n=r(7836),i=r(5607),s=r(5732);const a="nr@original:".concat(i.W);var o=Object.prototype.hasOwnProperty,c=!1;function d(e,t,r){return e||(e=n.ee),i.inPlace=function(e,t,r,n,s,a){r||(r="");const o="-"===r.charAt(0);for(let c=0;c<t.length;c++){const d=t[c],u=e[d];l(u)||(e[d]=i(u,o?d+r:r,n,d,s,a))}},i.flag=a,i;function i(t,n,i,c,f,h){return l(t)?t:(n||(n=""),nrWrapper[a]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach(function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})}),t}catch(e){u([e],r)}for(var n in e)o.call(e,n)&&(t[n]=e[n])}
8(t,nrWrapper,e),nrWrapper);function nrWrapper(){var a,o,l,p;let g,m;try{o=this,a=[...arguments],m=h?(0,s.$5)(r):[r?.runtime?.v2Target],l="function"==typeof i?i(a,o):i||{}}catch(t){u([t,"",[a,o,c],l],e)}d(n+"start",[a,o,c,m],l,f);const v=performance.now();let y;try{return p=t.apply(o,a),y=performance.now(),p}catch(e){throw y=performance.now(),d(n+"err",[a,o,e,m],l,f),g=e,g}finally{const e=y-v,t={start:v,end:y,duration:e,isLongTask:e>=50,methodName:c,thrownError:g};t.isLongTask&&d("long-task",[t,o,m],l,f),d(n+"end",[a,o,p,m],l,f)}}}function d(r,n,i,s){if(!c||t){var a=c;c=!0;try{e.emit(r,n,i,t,s)}catch(t){u([t,r,n,i],e)}c=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function l(e){return!(e&&"function"==typeof e&&e.apply&&!e[a])}r.d(t,["Jt",0,a])},9300(e,t,r){"use strict";const n=r(860).K7.ajax;r.d(t,["TZ",0,n,"f5",0,"ajaxRequest.id","mo",0,{NONE:"none",FAILURES:"failures",ALL:"all"}])},3333(e,t,r){"use strict";var n=r(981);const i=r(860).K7.genericEvents,s=[n.R.PA,n.R.UA,n.R.BP];r.d(t,["$v",0,{RESOURCES:"experimental.resources",REGISTER:"register"},"TZ",0,i,"Zp",0,["auxclick","click","copy","keydown","paste","scrollend"],"kd",0,s,"qN",0,["focus","blur"]])},6774(e,t,r){"use strict";const n=r(860).K7.jserrors;r.d(t,["T",0,n])},993(e,t,r){"use strict";const n=r(860).K7.logging;r.d(t,["A$",0,{OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},"TZ",0,n,"p_",0,{ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"}])},3785(e,t,r){"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),s=r(860),a=r(3969),o=r(993);function c(e,t,r={},c=o.p_.INFO,d=!0,u,l=(0,i.t)()){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,s.K7.metrics,e),(0,n.p)("log",[l,t,r,c,d,u],void 0,s.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(o.p_).some(t=>t===e.toUpperCase().trim())}},3969(e,t,r){"use strict";const n=r(860).K7.metrics;r.d(t,["TZ",0,n,"XG",0,"storeEventMetrics","xV",0,"storeSupportabilityMetrics"])},6630(e,t,r){"use strict";const n=r(860).K7.pageViewEvent;r.d(t,["T",0,n])},782(e,t,r){"use strict";const n=r(860).K7.pageViewTiming;r.d(t,["T",0,n])},6344(e,t,r){"use strict";var n=r(2614);const i=r(860).K7.sessionReplay,s={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0}
8;r.d(t,["Qb",0,{API:"api",RESUME:"resume",SWITCH_TO_FULL:"switchToFull",INITIALIZE:"initialize",PRELOAD:"preload"},"TZ",0,i,"Vh",0,"errorDuringReplay","_s",0,{DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},"bc",0,{RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},"yP",0,s])},5270(e,t,r){"use strict";r.d(t,{Aw:()=>a,SR:()=>s,rF:()=>o});var n=r(384),i=r(7767);function s(e){return!!(0,n.dV)().o.MO&&(0,i.V)(e)&&!0===e?.session_trace.enabled}function a(e){return!0===e?.session_replay.preload&&s(e)}function o(e,t){try{if("string"==typeof t?.type&&"password"===t.type.toLowerCase())return"*".repeat(e?.length||0);if(void 0!==t?.dataset?.nrUnmask||t?.classList?.contains("nr-unmask"))return e}catch(e){}return"string"==typeof e?e.replace(/[\S]/g,"*"):"*".repeat(e?.length||0)}},3738(e,t,r){"use strict";const n=r(860).K7.sessionTrace,i="-start",s="-end",a="fn"+i,o="fn"+s;r.d(t,["He",0,"bstResource","Kp",0,s,"Lc",0,o,"Rz",0,"pushState","TZ",0,n,"bD",0,"resource","bc",0,{CROSS_TAB:{message:"Session Entity was set to OFF on another tab"},ENTITLEMENTS:{message:"Session Trace is not allowed and will not be started"},RESET:{message:"Session was reset"},SESSION_CHANGED:{message:"Session identifier changed unexpectedly"}},"d3",0,i,"uP",0,a])},3962(e,t,r){"use strict";const n=r(860).K7.softNav;r.d(t,["O2",0,{INITIAL_PAGE_LOAD:"",ROUTE_CHANGE:1,UNSPECIFIED:2},"OV",0,"popstate","Qu",0,{INTERACTION:1,AJAX:2,CUSTOM_END:3,CUSTOM_TRACER:4},"TZ",0,n,"ih",0,{IP:"in progress",PF:"pending finish",FIN:"finished",CAN:"cancelled"},"pP",0,"initialPageLoad","tC",0,["click","keydown","submit"]])},4234(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(1687);class i{constructor(e,t){this.agentRef=e,this.ee=e?.ee,this.featureName=t,this.blocked=!1}deregisterDrain(){(0,n.x3)(this.agentRef,this.featureName)}}},7767(e,t,r){"use strict";var n=r(6154);r.d(t,["V",0,e=>n.RI&&!0===e?.privacy.cookies_enabled])},8362(e,t,r){"use strict";r.d(t,{d:()=>s});var n=r(9566),i=r(1741);class s extends i.W{agentIdentifier=(0,n.LA)(16)}},1741(e,t,r){"use strict";r.d(t,{W:()=>s});var n=r(944),i=r(4261);class s{#e(e,...t){if(this[e]!==s.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,t,r)}noticeError(e,t){return this.#e(i.o5,e,t)}setUserId(e,t=!1){return this.#e(i.Dl,e,t)}setApplicationVersion(e){return this.#e(i.nb,e)}setErrorHandler(e){return this.#e(i.bt,e)}addRelease(e,t){return this.#e(i.k6,e,t)}log(e,t){return this.#e("log",e,t)}start(){return this.#e("start")}finished(e){return this.#e(i.BL,e)}recordReplay(){return this.#e(i.CH)}pauseReplay(){return this.#e(i.Tb)}addToTrace(e){return this.#e(i.U2,e)}setCurrentRouteName(e){return this.#e(i.PA,e)}interaction(e){return this.#e(i.dT,e)}wrapLogger(e,t,r){return this.#e(i.Wb,e,t,r)}measure(e,t){return this.#e(i.V1,e,t)}consent(e){return this.#e(i.Pv,e)}}},4261(e,t,r){"use strict";r.d(t,["BL",0,"finished","CH",0,"recordReplay","Dl",0,"setUserId","Fw",0,"setPageViewName","PA",0,"setCurrentRouteName","Pv",0,"consent","Tb",0,"pauseReplay","U2",0,"addToTrace","V1",0,"measure","Wb",0,"wrapLogger","bt",0,"setErrorHandler","cD",0,"setCustomAttribute","dT",0,"interaction","eY",0,"register","fF",0,"recordCustomEvent","hG",0,"addPageAction","hw",0,"api-ixn-","k6",0,"addRelease","nb",0,"setApplicationVersion","o5",0,"noticeError"])},1738(e,t,r){"use strict";r.d(t,{U:()=>l,Y:()=>u});var n=r(3241),i=r(9908),s=r(1863),a=r(944),o=r(3969),c=r(8362),d=r(860);function u(e,t,r,s){const u=s||r;!u||u[e]&&u[e]!==c.d.prototype[e]||(u[e]=function(){(0,i.p)(o.xV,["API/"+e+"/called"],void 0,d.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:"api-"+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,a.R)(23,e)}})}function l(e,t,r,n,a){const o=e.info;null===r?delete o.jsAttributes[t]:o.jsAttributes[t]=r,(a||null===r)&&(0,i.p)("api-"+n,[(0,s.t)(),t,r],void 0,"session",e.ee)}},8374(e,t,r){r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860(e,t,r){"use strict";const n="events",i="jserrors",s="browser/blobs",a="browser/logs",o={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},c={[o.pageViewEvent]:1,[o.pageViewTiming]:2,[o.metrics]:3,[o.jserrors]:4,[o.softNav]:5,[o.ajax]:6,[o.sessionTrace]:7,[o.sessionReplay]:8,[o.logging]:9,[o.genericEvents]:10},d={[o.pageViewEvent]:"rum",[o.pageViewTiming]:n,[o.ajax]:n,[o.softNav]:n,[o.metrics]:i,[o.jserrors]:i,[o.sessionTrace]:s,[o.sessionReplay]:s,[o.logging]:a,[o.genericEvents]:"ins"};r.d(t,["$J",0,d,"K7",0,o,"P3",0,c,"XX",0,i,"Yy",0,a,"df",0,s,"hg",0,"connect"])}};const t={};function r(n){const i=t[n];if(void 0!==i)return i.exports;const s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.m=e,r.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var i=t[n++],s=t[n++];r.o(e,i)?0===s&&n++:0===s?Object.defineProperty(e,i,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,i,{enumerable:!0,get:s})}else for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,n)=>(r.f[n](e,t),t),[])),r.u=e=>({212:"nr-spa-compressor",238:"nr-spa-iframe-message-handler",249:"nr-spa-recorder",478:"nr-spa"}[e]+"-1.322.0.min.js"),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="NRBA-1.322.0.PROD:";r.l=(n,i,s,a)=>
8{if(e[n])return void e[n].push(i);let o,c;if(void 0!==s){const e=document.getElementsByTagName("script");for(var d=0;d<e.length;d++){const r=e[d];if(r.getAttribute("src")==n||r.getAttribute("data-webpack")==t+s){o=r;break}}}if(!o){c=!0;var u={478:"sha512-SARROoir04gFygxlr/+mTI+PyMeFL+epi1vnUA2G5mTQ7s3G44ItQBJKbOaIMdIE5OBzuaKhb4k5JYta0NICxg==",249:"sha512-6DKQo5WP7YlpzX6l9UfYkgGLGK2oITdoaYTcZtgl5Foa22NY63lED/0z1hBBLeD7qZCz/YdlY19/r8drlol1tg==",212:"sha512-CYxuvSpDx6ErqWJwAvpoHn54eY37YdMcFao/axOumlw3BsSL7yioOeB2LWViY/Njs818sQG10dSglUhYCMfLPw==",238:"sha512-mvbMILWa3ohYst+u6TLfNrmtY2swUIB3rbJFN/uzt3W62KhgvUVwB81UEZ1R0/it5bfrQ5EVz864pi/CAmucNQ=="};o=document.createElement("script"),o.charset="utf-8",r.nc&&o.setAttribute("nonce",r.nc),o.setAttribute("data-webpack",t+s),o.src=n,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous"),u[a]&&(o.integrity=u[a])}e[n]=[i];const l=(t,r)=>{o.onerror=o.onload=null,clearTimeout(f);const i=e[n];if(delete e[n],o.parentNode?.removeChild(o),i?.forEach(e=>e(r)),t)return t(r)},f=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),c&&document.head.appendChild(o)}})(),r.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="https://js-agent.newrelic.com/",(()=>{const e={38:0,788:0};r.f.j=(t,n)=>{let i=r.o(e,t)?e[t]:void 0;if(0!==i)if(i)n.push(i[2]);else{const s=new Promise((r,n)=>i=e[t]=[r,n]);n.push(i[2]=s);const a=r.p+r.u(t),o=new Error,c=n=>{if(r.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed: ("+e+": "+r+")",o.name="ChunkLoadError",o.type=e,o.request=r,i[1](o)}};r.l(a,c,"chunk-"+t,t)}};const t=(t,n)=>{let[i,s,a]=n;var o,c,d=0;if(i.some(t=>0!==e[t])){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);if(a)a(r)}for(t&&t(n);d<i.length;d++)c=i[d],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0},n=self["webpackChunk:NRBA-1.322.0.PROD"]=self["webpackChunk:NRBA-1.322.0.PROD"]||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";r(8374);var e=r(8362),t=r(860);const n=Object.values(t.K7);var i=r(384),s=r(1741);var a=r(2555),o=r(3333),c=r(9300);const d=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var u=r(2614),l=r(944),f=r(8122);const h="[data-nr-mask]",p=e=>(0,f.a)(e,(()=>{const e={feature_flags:[],experimental:{register:!1,resources:!1,iframe_bridge:!1,iframe_domains:[]},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0,capture_payloads:c.mo.NONE},api:{register:{get enabled(){return e.feature_flags.includes(o.$v.REGISTER)||e.experimental.register},set enabled(t){e.experimental.register=t},duplicate_data_to_container:!1,get allow_iframe_bridge(){return e.feature_flags.includes(o.$v.IFRAME_BRIDGE)||e.experimental.iframe_bridge},set allow_iframe_bridge(t){e.experimental.iframe_bridge=t},get iframe_domains(){return e.experimental.iframe_domains},set iframe_domains(t){Array.isArray(t)?e.experimental.iframe_domains=t:(0,l.R)(1,t)}}},browser_consent_mode:{enabled:!1},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1,capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(o.$v.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:u.wk,inactiveMs:u.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inl
8ine_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){d(t)?e.mask_selector="".concat(t,",").concat(h):""===t||null===t?e.mask_selector=h:(0,l.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){d(t)?e.block_selector+=",".concat(t):""!==t&&(0,l.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,l.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]},web_sockets:{enabled:!1}}})());var g=r(6154),m=r(9324);let v=0;const y={buildEnv:"PROD",distMethod:"CDN",version:m.x,originTime:g.WN},b={consented:!1},E={activatedFeatures:void 0,appMetadata:{},configured:!1,get consented(){return this.session?.state?.consent||b.consented},set consented(e){b.consented=e},customTransaction:void 0,denyList:[],disabled:!1,drainRegistry:new Map,connector:void 0,harvester:void 0,v2Target:void 0,isolatedBacklog:!1,isRecording:!1,loaderType:void 0,maxBytes:3e4,obfuscator:void 0,onerror:void 0,ptid:void 0,releaseIds:{},session:void 0,timeKeeper:void 0,registeredEntities:[],jsAttributesMetadata:{bytes:0},get harvestCount(){return++v},listeningForIframeMessages:!1};var w=r(9232);var R=r(7836),T=r(3241);const A={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0};var S=r(9908),x=r(9752);function O(e,t={},n,o){let{init:c,info:d,loader_config:u,runtime:l={},exposed:h=!0}=t;if(!d){const e=(0,i.pV)();c=e.init,d=e.info,u=e.loader_config}var m;e.init=p(c||{}),e.loader_config=(m=u||{},(0,f.a)(m,A)),d.jsAttributes??={},g.bv&&(d.jsAttributes.isWorker=!0),e.info=(0,a.D)(d);const v=e.init;e.runtime??=(e=>{const t=(0,f.a)(e,E),r=Object.keys(y).reduce((e,t)=>(e[t]={value:y[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)})(l),e.runtime.v2Target??={type:w.f.BA,instance:e.agentIdentifier,get id(){return e.runtime.appMetadata?.agents?.[0]?.entityGuid},get attributes(){return{"entity.guid":this.id,appId:e.info.applicationID}}},v.proxy.assets&&(e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e})(v.proxy.assets),e.runtime.configured||(Object.defineProperty(e,"beacons",{get:()=>[e.info.beacon,e.info.errorBeacon,e.init.proxy.assets,e.init.proxy.beacon].filter(Boolean)}),Object.defineProperty(e.runtime,"denyList",{get:()=>[...e.init.ajax.deny_list||[],...e.init.ajax.block_internal?e.beacons:[]]}),e.runtime.ptid=e.agentIdentifier,function(e){const t=(0,i.pV)();Object.getOwnPropertyNames(s.W.prototype).forEach(r=>{const n=s.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let i=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return i?i(...t):n})})}(e),e.runtime.loaderType=n,e.ee=R.ee.get(e.agentIdentifier),e.exposed=h,(0,T.W)({drained:!!e.runtime.activatedFeatures,type:"lifecycle",name:"initialize",feature:void 0,data:e.config}),e.init.api.register.allow_iframe_bridge&&g.gm.addEventListener("message",t=>{"string"==typeof t.data?.type&&t.data.type.startsWith(x.Pl)&&(0,S.p)("iframe-message",[t],void 0,"IFRAME",e.ee)}),e.runtime.configured=!0)}var _=r(1863),k=r(4261),N=r(1738);var L=r(1687),M=r(4234),P=r(5289),I=r(5270),j=r(7767),C=r(6389),D=r(7699);const B=new WeakSet,H=new WeakMap;class W extends M.W{constructor(e,t){super(e,t),this.abortHandler=void 0,this.featAggregate=void 0,this.loadedSuccessfully=void 0,this.onAggregateImported=new Promise(e=>{this.loadedSuccessfully=e}),this.deferred=Promise.resolve(),!1===e.init[this.featureName].autoStart?this.deferred=new Promise((t,r)=>{this.ee.on("manual-start-all",(0,C.J)(()=>{(0,L.Ak)(e,this.featureName),t()}))}):(0,L.Ak)(e,t)}importAggregator(e,t,n={}){if(this.featAggregate)return;const i=async()=>{if(await this.deferred,this.#t(e),!(0,a.f)(e.info))return(0,l.R)(43),e.ee.abort(),void this.loadedSuccessfully(!1);try{await async function(e,t,n){if(H.has(e))return H.get(e);const i=(async()=>
8{if((0,j.V)(e.init))try{const{setupAgentSession:t}=await r.e(478).then(r.bind(r,8766));t(e)}catch(e){(0,l.R)(20,e),t.emit("internal-error",[e]),(0,S.p)(D.qh,[e],void 0,n,t)}if(e.init.api.register.allow_iframe_bridge)try{const{setupIframeMFEMessageListener:t}=await r.e(238).then(r.bind(r,6417));t(e)}catch(e){(0,l.R)(23,e)}const[{Connector:i},{Harvester:s}]=await Promise.all([r.e(478).then(r.bind(r,6589)),r.e(478).then(r.bind(r,5237))]);e.runtime.connector=new i(e),e.runtime.harvester=new s(e);const a=Object.values(e.features).filter(t=>e.runtime.drainRegistry.has(t.featureName));Promise.all(a.map(e=>e.onAggregateImported)).then(()=>e.runtime.harvester.startTimer())})();H.set(e,i),await i}(e,this.ee,this.featureName)}catch(e){return(0,l.R)(79,e),this.ee.abort(),void this.loadedSuccessfully(!1)}try{if(!this.#r(this.featureName,e.runtime.session,e.init))return this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:r}=await t();this.featAggregate=new r(e,n),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,l.R)(34,e),this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName,!0),this.loadedSuccessfully(!1)}};g.RI?(0,P.GG)(()=>i(),!0):i()}#r(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return(0,I.SR)(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}#t(e){if(!B.has(e)&&(B.add(e),!(0,a.f)(e.info))){const t=(0,i.pV)();let r={...t.info?.jsAttributes};try{r={...r,...e.info?.jsAttributes}}catch(e){}O(e,{...t,info:{...t.info,jsAttributes:r},runtime:e.runtime},e.runtime.loaderType)}}}var U=r(6630);class K extends W{static featureName=U.T;constructor(e){var t;super(e,U.T),this.setupInspectionEvents(),t=e,(0,N.Y)(k.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,S.p)("api-"+k.Fw,[(0,_.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>e.init.feature_flags.includes("rum_v2")?r.e(478).then(r.bind(r,908)):r.e(478).then(r.bind(r,7927)))}setupInspectionEvents(){const e=(e,t)=>{e&&(0,T.W)({timeStamp:e.timeStamp,loaded:"complete"===e.target.readyState,type:"window",name:t,data:e.target.location+""})};(0,P.sB)(t=>{e(t,"DOMContentLoaded")}),(0,P.GG)(t=>{e(t,"load")}),(0,P.Qr)(t=>{e(t,"navigate")}),this.ee.on(u.tS.UPDATE,(e,t)=>{(0,T.W)({type:"lifecycle",name:"session",data:t})})}}class F extends e.d{constructor(e){var t;(super(),g.gm)?(this.features={},(0,i.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(K),O(this,e,e.loaderType||"agent"),t=this,(0,N.Y)(k.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,N.U)(t,e,r,k.cD,n);(0,l.R)(40,typeof r)}else(0,l.R)(39,typeof e)},t),function(e){(0,N.Y)(k.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,l.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,S.p)("api-setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,N.U)(e,"enduser.id",t,k.Dl,!0)},e)}(this),function(e){(0,N.Y)(k.nb,function(t){if("string"==typeof t||null===t)return(0,N.U)(e,"application.version",t,k.nb,!1);(0,l.R)(42,typeof t)},e)}(this),function(e){(0,N.Y)("start",function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,N.Y)(k.Pv,function(t=!0){if("boolean"==typeof t){if((0,S.p)("api-"+k.Pv,[t],void 0,"session",e.ee),e.runtime.consented=t,t){const t=e.features.page_view_event;t.onAggregateImported.then(e=>{const r=t.featAggregate;e&&!r.sentRum&&r.sendRum?.()})}}else(0,l.R)(65,typeof t)},e)}(this),this.run()):(0,l.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const e=function(e){const t={};return n.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),r=[...this.desiredFeatures],i=this.init.feature_flags.includes("rum_v2");r.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),r.forEach(r=>{if(!e[r.featureName]&&(i||r.featureName!==t.K7.pageViewEvent))return;const n=function(e){switch(e){case t.K7.ajax:return[t.K7.jserrors];case t.K7.sessionTrace:return[t.K7.ajax,t.K7.pageViewEvent];case t.K7.sessionReplay:return[t.K7.sessionTrace];case t.K7.pageViewTiming:return[t.K7.pageViewEvent];default:return[]}}(r.featureName).filter(e=>!(e in this.features));n.length>0&&(0,l.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,l.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,i.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var V=r(2843),z=r(782);class G extends W{static featureName=z.T;constructor(e){super(e,z.T),g.RI&&((0,V.u)(()=>(0,S.p)("docHidden",[(0,_.t)()],void 0,z.T,this.ee),!0),(0,V.G)(()=>(0,S.p)("winPagehide",[(0,_.t)()],void 0,z.T,this.ee)),this.importAggregator(e,()=>r.e(478).then(r.bind(r,9917))))}}var q=r(3969);class Y extends W{static featureName=q.TZ;constructor(e){super(e,q.TZ),this.importAggregator(e,()=>r.e(478).then(r.bind(r,6555)))}}var Z=r(6774),J=r(3878),X=r(3304);class Q{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,X.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function ee(e){return ne(e)?e:new Q(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic,e?.cause)}function te(e){const t="Unhandled Promise Rejection: ";if(!e?.reason)return;if(ne(e.reason)){try{e.reason.message.startsWith(t)||(e.reason.message=t+e.reason.message)}catch(e){}return ee(e.reason)}const r=ee(e.reason);return(r.message||"").startsWith(t)||(r.message=t+r.message),r}function re(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new Q(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic,e.cause);return t.name=SyntaxError.name,t}return ne(e.error)?e.error:ee(e)}function ne(e){return e instanceof Error&&!!e.stack}function ie(e,r,n,i,s=(0,_.t)()){"string"==typeof e&&(e=new Error(e)),(0,S.p)("err",[e,s,!1,r,n.runtime.isRecording,void 0,i],void 0,t.K7.jserrors,n.ee),(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,n.ee)}var se=r(993),ae=r(3785);function oe(e,{customAttributes:t={},level:r=se.p_.INFO}={},n,i,s=(0,_.t)()){(0,ae.R)(n.ee,e,t,r,!1,i,s)}function ce(e,r,n,i,s=(0,_.t)()){(0,S.p)("api-"+k.hG,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}function de(e,r,n,i,s=(0,_.t)()){const{start:a,end:o,customAttributes:c}=r||{},d={customAttributes:c||{}};if("object"!=typeof d.customAttributes||"string"!=typeof e||0===e.length)return void(0,l.R)(57);const u=(e,t)=>
8null==e?t:"number"==typeof e?e:e instanceof PerformanceMark?e.startTime:Number.NaN;if(d.start=u(a,0),d.end=u(o,s),Number.isNaN(d.start)||Number.isNaN(d.end))(0,l.R)(57);else{if(d.duration=d.end-d.start,!(d.duration<0))return(0,S.p)("api-"+k.V1,[d,e,i],void 0,t.K7.genericEvents,n.ee),d;(0,l.R)(58)}}function ue(e,r={},n,i,s=(0,_.t)()){(0,S.p)("api-"+k.fF,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}var le=r(5718);const fe=(e,t)=>e?.nrMfeId===t.id&&(!e?.nrMfeObserved||e?.nrMfeObserved===t.instance),he=e=>{try{return g.gm.CSS.escape(e)}catch(t){return e}},pe=(e,t={})=>{const r=t.id,n=t.instance;if(!e||!r||!n)return!1;try{let r=1===e.nodeType?e:e.parentElement;for(;r?.tagName;){if(fe(r.dataset,t))return r.dataset.nrMfeObserved=n,!0;r=r.parentNode}}catch(e){}return!1},ge=(e,t)=>{const r=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]')),n=(Array.from(r)||[]).find(t=>fe(t.dataset,e));let i=!!n;i&&(n.dataset.nrMfeObserved??=e.instance);const s=new g.gm.MutationObserver(r=>{r.forEach(r=>{r.addedNodes.forEach(r=>{const n=1===r.nodeType?r:null;!i&&fe(n?.dataset,e)&&(s.disconnect(),s.observe(n,{childList:!0,subtree:!0}),i=!0,n.dataset.nrMfeObserved=e.instance),(e=>{try{return e?.textContent?.trim()||["img","video","canvas","svg"].includes(e?.nodeName?.toLowerCase())}catch(e){return!1}})(r)&&(i||pe(r,e))&&t(r,s)})})});return s.observe(n||g.gm.document,{childList:!0,subtree:!0}),s},me=(e,t,r)=>{try{const n=new g.gm.PerformanceObserver(e=>{e.getEntries().forEach(r)});return n.observe(t),e.push(n),n}catch(e){return null}};function ve(e,t){let r,n,i=!1;const s=e=>null==e?e:e-(t?.scriptStart||t?.registeredAt||0),a={fcp:{get value(){const e=s(r);return e>1e4?void 0:e},set value(e){i||(r=e)}},lcp:{get value(){if(void 0!==a.fcp.value)return s(n)},set value(e){i||(n=e)}},cls:{value:void 0},inp:{value:void 0},disconnect:()=>{}};if(!(e&&g.RI&&g.gm.MutationObserver&&g.gm.PerformanceObserver))return a;const o=[];setTimeout(()=>{r||a.disconnect()},1e4);const c=()=>{if(!i){if(null==r){const e=(0,_.t)();if(s(e)>1e4)return void a.disconnect();r=e}n??=(0,_.t)(),a.cls.value??=0}},d=ge(e,(e,t)=>{c(),t.disconnect()});o.push(d);let u=0,l=null;const f=new Set;try{l=new g.gm.ResizeObserver(e=>{i||e.forEach(e=>{try{const t=e.contentRect.width*e.contentRect.height;t>u&&(u=t,a.lcp.value=(0,_.t)()),l.unobserve(e.target)}catch(e){}})})}catch(e){}const h=ge(e,e=>{if(c(),l)try{const t=1===e.nodeType?e:e.parentElement;t&&!f.has(t)&&(f.add(t),"IMG"===t.tagName?t.complete?l.observe(t):t.addEventListener("load",()=>{l.observe(t)},{once:!0}):"VIDEO"===t.tagName?t.readyState>=2?l.observe(t):t.addEventListener("loadeddata",()=>{l.observe(t)},{once:!0}):l.observe(t))}catch(e){}});l&&o.push(l),o.push(h),me(o,{type:"layout-shift",buffered:!0},t=>{i||t.hadRecentInput||(t.sources||[]).some(r=>!!pe(r.node,e)&&(c(),a.cls.value+=t.value,!0))}),me(o,{type:"event",buffered:!0,durationThreshold:40},t=>{!i&&t.interactionId&&pe(t.target,e)&&(void 0===a.inp.value||t.duration>a.inp.value)&&(c(),a.inp.value=t.duration)});const p=["pointerdown","keydown"],m=()=>{p.forEach(e=>{g.gm.removeEventListener(e,v,{passive:!0})})};a.disconnect=()=>{i=!0,o.forEach(e=>{try{e?.disconnect()}catch(e){}}),m(),["visibilitychange","pagehide"].forEach(e=>{g.gm.removeEventListener(e,a.disconnect,{once:!0,passive:!0})})};const v=t=>{pe(t?.target,e)&&((()=>{try{h?.disconnect(),l?.disconnect()}catch(e){}})(),m())};p.forEach(e=>{g.gm.addEventListener(e,v,{passive:!0})}),["visibilitychange","pagehide"].forEach(e=>{g.gm.addEventListener(e,a.disconnect,{once:!0,passive:!0})});const y=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]'));return Array.from(y||[]).some(t=>fe(t.dataset,e))&&c(),a}var ye=r(9566),be=r(7560),Ee=r(9119);const we=["entry","scripts","all"],Re=["name","id","type"],Te=new Map([[ce,"addPageAction"],[oe,"log"],[de,"measure"],[ie,"noticeError"],[ue,"recordCustomEvent"]]),Ae={experimental:(0,C.J)(()=>(0,l.R)(54,"newrelic.register")),disabled:(0,C.J)(()=>(0,l.R)(55)),invalidTarget:(0,C.J)(e=>(0,l.R)(48,e)),deregistered:(0,C.J)(()=>(0,l.R)(68)),invalidTimingMethod:(0,C.J)(e=>(0,l.R)(80,e)),duplicateName:(0,C.J)(e=>(0,l.R)(81,e)),duplicateId:(0,C.J)(e=>(0,l.R)(82,e))};function Se(e){(0,N.Y)(k.eY,function(t){return xe(e,t)},e)}function xe(e,r){Ae.experimental(),r||={},r.instance=(0,ye.LA)(8),r.type=w.f.MFE,r.licenseKey||=e.info.licenseKey,r.blocked=!1,("object"!=typeof r.tags||null===r.tags||Array.isArray(r.tags))&&(r.tags={}),r.parent??={get id(){return e.runtime.appMetadata.agents?.[0].entityGuid},type:w.f.BA},r.manifest=(0,be.N)(r.manifest),void 0===r.timingMethod||we.includes(r.timingMethod)||(Ae.invali
8dTimingMethod(r.timingMethod),r.timingMethod=void 0);const n=(0,le.Qr)(r);r.manifest&&(0,le.xo)(n,r);const i=ve(r,n),s=(0,Ee.L)(""+location),a={};Object.prototype.hasOwnProperty.call(r,"attributes")||Object.defineProperty(r,"attributes",{get:()=>({...a,"source.id":r.id,"source.name":r.name,"source.type":r.type,"parent.type":r.parent?.type||w.f.BA,"parent.id":r.parent?.id})}),Object.entries(r.tags).forEach(([e,t])=>{Re.includes(e)||(a["source.".concat(e)]=t)});let o=()=>{};const c=e.runtime.registeredEntities,d=e=>{r.blocked=!0,o=e};function u(e){return"string"==typeof e&&!!e.trim()&&e.trim().length<501}e.init.api.register.enabled||d(Ae.disabled),u(r.id)&&u(r.name)||d(()=>Ae.invalidTarget(r)),c.forEach(e=>{try{const{name:t,id:n}=e.metadata.target;t===r.name&&n!==r.id&&Ae.duplicateName(r),n===r.id&&t!==r.name&&Ae.duplicateId(r)}catch(e){}});const f={addPageAction:(t,n={})=>m(ce,[t,{...a,...n},e],r),deregister:()=>{p(),d(Ae.deregistered)},log:(t,n={})=>m(oe,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),measure:(t,n={})=>m(de,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),noticeError:(t,n={})=>m(ie,[t,{...a,...n},e],r),recordCustomEvent:(t,n={})=>m(ue,[t,{...a,...n},e],r),setApplicationVersion:e=>g("application.version",e),setCustomAttribute:(e,t)=>g(e,t),setUserId:e=>g("enduser.id",e),metadata:{get customAttributes(){return a},target:r,timings:n,vitals:i,events:{latestTimestamp:void 0}}},h=()=>(r.blocked&&o(),r.blocked);function p(){if(n.reportedAt)return;n.reportedAt=(0,_.t)(),i.disconnect(),n.fcp=i.fcp,n.lcp=i.lcp,n.cls=i.cls,n.inp=i.inp;const e=n.fetchEnd-n.fetchStart,t=n.scriptEnd-n.scriptStart,r={assetUrl:n.asset,assetType:n.type,registerUrl:s,deregisterUrl:(0,Ee.L)(""+location),pageUrl:void 0,currentUrl:void 0,timeAlive:n.reportedAt-n.registeredAt,timeToBeRequested:n.fetchStart,timeToExecute:t,timeToFetch:e,timeToLoad:e+t,t
8imeToRegister:n.registeredAt,totalWeight:n.totalWeight,...void 0!==n.renderBlocking&&{renderBlocking:n.renderBlocking},...i.fcp.value>=0&&{"vitals.fcp.value":i.fcp.value},...i.lcp.value>=0&&{"vitals.lcp.value":i.lcp.value},...i.cls.value>=0&&{"vitals.cls.value":i.cls.value},...i.inp.value>=0&&{"vitals.inp.value":i.inp.value}};f.recordCustomEvent("MicroFrontEndTiming",r)}h()||(c.push(f),(0,V.G)(p));const g=(e,t)=>{h()||(a[e]=t)},m=(r,n,i)=>{if(h()&&r!==xe)return;const s=f.metadata.events.latestTimestamp??(0,_.t)();f.metadata.events.latestTimestamp=void 0;const a=Te.get(r)||"unknown";(0,S.p)(q.xV,["API/register/".concat(a,"/called")],void 0,t.K7.metrics,e.ee);try{return r(...n,i,s)}catch(e){(0,l.R)(50,e)}};return f}class Oe extends W{static featureName=Z.T;constructor(e){var t;super(e,Z.T),t=e,(0,N.Y)(k.o5,(e,r)=>ie(e,r,t),t),function(e){(0,N.Y)(k.bt,function(t){e.runtime.onerror=t},e)}(e),function(e){let t=0;(0,N.Y)(k.k6,function(e,r){++t>10||(this.runtime.releaseIds[e.slice(-200)]=(""+r).slice(-200))},e)}(e),Se(e);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(t,r)=>{this.abortHandler&&(0,S.p)("ierr",[ee(t),(0,_.t)(),!0,{},e.runtime.isRecording,r],void 0,this.featureName,this.ee)}),g.gm.addEventListener("unhandledrejection",t=>{this.abortHandler&&(0,S.p)("err",[te(t),(0,_.t)(),!1,{unhandledPromiseRejection:1},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",t=>{this.abortHandler&&(0,S.p)("err",[re(t),(0,_.t)(),!1,{},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e,()=>r.e(478).then(r.bind(r,9377)))}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var _e=r(8990);let ke=1;function Ne(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,_e.I)(e,"nr@id",function(){return ke++})}function Le(e){if("string"==typeof e)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,X.A)(e).length}catch(e){return}}}var Me=r(8139),Pe=r(3434),Ie=r(5732);const je={},Ce=["open","send","setRequestHeader"];function De(e,t){var r=e||R.ee;const n=function(e){return(e||R.ee).get("xhr")}(r);if(void 0===g.gm.XMLHttpRequest)return n;if(je[n.debugId]++)return n;je[n.debugId]=1,(0,Me.u)(r,t);var i=(0,Pe.YM)(n,void 0,t),s=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,o=g.gm.Promise,c=g.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],f=[],h=g.gm.XMLHttpRequest=function(e){const r=new s(e),a=n.context(r);a.targets=(0,Ie.$5)(t);try{n.emit("new-xhr",[r],a),r.addEventListener(d,(o=a,function(){var e=this;e.readyState>3&&!o.resolved&&(o.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",E)}),(0,J.jT)(!1))}catch(e){(0,l.R)(15,e);try{n.emit("internal-error",[e])}catch(e){}}var o;return r};function p(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(s,h),h.prototype=s.prototype,i.inPlace(h.prototype,Ce,"-xhr-",E),n.on("send-xhr-start",function(e,t){p(e,t),function(e){f.push(e),a&&(m?m.then(b):c?c(b):(v=-v,y.data=v))}(t)}),n.on("open-xhr-start",p),a){var m=o&&o.resolve();if(!c&&!o){var v=1,y=document.createTextNode(v);new a(b).observe(y,{characterData:!0})}}else r.on("fn-end",function(e){e[0]&&e[0].type===d||b()});function b(){for(var e=0;e<f.length;e++)p(0,f[e]);f.length&&(f=[])}function E(e,t){return t}return n}var Be="fetch-",He=Be+"body-",We=["arrayBuffer","blob","json","text","formData"],Ue=g.gm.Request,Ke=g.gm.Response,Fe="prototype";const Ve={};function ze(e,t){const r=function(e){return(e||R.ee).get("fetch")}(e);if(!(Ue&&Ke&&g.gm.fetch))return r;if(Ve[r.debugId]++)return r;function n(e,n,i){var s=e[n];"function"==typeof s&&(e[n]=function(){var e=[...arguments];const n={},a=(0,Ie.$5)(t);var o;r.emit(i+"before-start",[e],n),n[R.P]&&n[R.P].dt&&(o=n[R.P].dt);var c=s.apply(this,e);return r.emit(i+"start",[e,o],c),c.then(function(e){return r.emit(i+"end",[null,e,a],c),e},function(e){throw r.emit(i+"end",[e,void 0,a],c),e})})}
8return Ve[r.debugId]=1,We.forEach(e=>{n(Ue[Fe],e,He),n(Ke[Fe],e,He)}),n(g.gm,"fetch",Be),r.on(Be+"end",function(e,n,i){var s=this;if(s.targets=i||[t.runtime.v2Target],n){var a=n.headers.get("content-length");null!==a&&(s.rxSize=a),r.emit(Be+"done",[null,n],s)}else r.emit(Be+"done",[e],s)}),r}var Ge=r(7485);class qe{constructor(e){this.agentRef=e}generateTracePayload(e){const t=this.agentRef.loader_config;if(!this.shouldGenerateTrace(e)||!t)return null;var r=(t.accountID||"").toString()||null,n=(t.agentID||"").toString()||null,i=(t.trustKey||"").toString()||null;if(!r||!n)return null;var s=(0,ye.ZF)(),a=(0,ye.el)(),o=Date.now(),c={spanId:s,traceId:a,timestamp:o};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(c.traceContextParentHeader=this.generateTraceContextParentHeader(s,a),c.traceContextStateHeader=this.generateTraceContextStateHeader(s,o,r,n,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(c.newrelicHeader=this.generateTraceHeader(s,a,o,r,n,i)),c}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,s){if(!("function"==typeof g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return s&&n!==s&&(a.d.tk=s),btoa((0,X.A)(a))}shouldGenerateTrace(e){return this.agentRef.init?.distributed_tracing?.enabled&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1;const r=this.agentRef.init?.distributed_tracing;if(e.sameOrigin)t=!0;else if(r?.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,Ge.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}excludeNewrelicHeader(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.cors_use_tracecontext_headers}}var Ye=r(7295);function Ze(e){return"string"==typeof e?e:e instanceof(0,i.dV)().o.REQ?e.url:g.gm?.URL&&e instanceof URL?e.href:void 0}function $e(e,t){var r=(0,Ge.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}var Je=["load","error","abort","timeout"],Xe=Je.length,Qe=(0,i.dV)().o.REQ,et=(0,i.dV)().o.XHR;const tt="X-NewRelic-App-Data",rt="internal-error";class nt extends W{static featureName=c.TZ;constructor(e){super(e,c.TZ),this.dt=new qe(e),this.handler=(e,t,r,n)=>(0,S.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach(r=>{if(r.initiatorType in e&&0!==r.responseStatus){const n={status:r.responseStatus},i={rxSize:r.transferSize,duration:Math.floor(r.duration),cbTime:0};$e(n,r.name),this.handler("xhr",[n,i,r.startTime,r.responseEnd,e[r.initiatorType]],void 0,t.K7.ajax)}})}catch(e){}ze(this.ee,e),De(this.ee,e),function(e,r,n,i){const s=[c.mo.ALL,c.mo.FAILURES].includes(e.init.ajax?.capture_payloads);function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=A,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},t.latestLongtaskEnd=0,e.addEventListener("load",function(r){O(t,e)},(0,J.jT)(!1)),g.lR||e.addEventListener("progress",function(e){t.lastSize=e.loaded},(0,J.jT)(!1))}function o(e){this.params={method:e[0]},$e(this,e[1]),this.metrics={}}function d(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var n=i.generateTracePayload(this.parsedOrigin);if(n){var s=!1;n.newrelicHeader&&(r.setRequestHeader("newrelic",n.newrelicHeader),s=!0),n.traceContextParentHeader&&(r.setRequestHeader("traceparent",n.traceContextParentHeader),n.traceContextStateHeader&&r.setRequestHeader("tracestate",n.traceContextStateHeader),s=!0),s&&(this.dt=n)}}function u(e,t){s&&e.length>=2&&(this.requestHeaders??={},this.requestHeaders[e[0].toLowerCase()]=e[1])}function l(e,t){var n=this.metrics,i=e[0],s=this;if(n&&i){var a=Le(i);a&&(n.txSize=a)}this.startTime=(0,_.t)(),this.requestBody=i,this.listener=function(e){try{"abort"!==e.type||s.loadCaptureCalled||(s.params.aborted=!0),("load"
8!==e.type||s.called===s.totalCbs&&(s.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof s.end)&&s.end(t)}catch(e){try{r.emit(rt,[e])}catch(e){}}};for(var o=0;o<Xe;o++)t.addEventListener(Je[o],this.listener,(0,J.jT)(!1))}function f(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function h(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function p(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function m(){this.endTime=(0,_.t)()}function v(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-added",[e[1],e[2]],t)}function y(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-removed",[e[1],e[2]],t)}function b(e,t,r){t instanceof et&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,_.t)()))}function E(e,t){this.xhrCbStart&&r.emit("xhr-cb-time",[(0,_.t)()-this.xhrCbStart,this.onload,t],t)}function w(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,Ge.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var n=i.generateTracePayload(this.parsedOrigin);if(n&&(n.newrelicHeader||n.traceContextParentHeader))if(e[0]&&e[0].headers)o(e[0].headers,n)&&(this.dt=n);else{var s={};for(var a in r)s[a]=r[a];s.headers=new Headers(r.headers||{}),o(s.headers,n)&&(this.dt=n),e.length>1?e[1]=s:e.push(s)}}function o(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function R(e,t){this.params={},this.metrics={},this.startTime=(0,_.t)(),this.dt=t;let[r,n={}]=e;$e(this,Ze(r));const i=(""+(r&&r instanceof Qe&&r.method||n.method||"GET")).toUpperCase();this.params.method=i,this.txSize=Le(n.body||r?.body)||0;try{var a=n.headers||r?.headers;if(s&&a)if(this.requestHeaders??={},a instanceof Headers)a.forEach(function(e,t){this.requestHeaders[t.toLowerCase()]=e}.bind(this));else if("object"==typeof a)for(var o in a)this.requestHeaders[o.toLowerCase()]=a[o]}catch(e){}this.requestBody=n.body||r?.body}function T(e,t){if(this.endTime=(0,_.t)(),this.params||(this.params={}),(0,Ye.iW)(this.params))return;this.params.status=t?t.status:0;const n=()=>{const e=+this.rxSize,t=null==this.rxSize||isNaN(e)?void 0:e,r={txSize:this.txSize,rxSize:t,duration:this.endTime-this.startTime},n=[this.params,r,this.startTime,this.endTime,"fetch"];this.targets.forEach(e=>x(n,this,e))};t&&s?t.clone().text().then(e=>{this.responseBody=e,this.rxSize&&"0"!==this.rxSize&&0!==this.rxSize||void 0===e||0===this.params.status||(this.rxSize=Le(e)),t?.headers&&(this.responseHeaders={},t.headers.forEach(function(e,t){this.responseHeaders[t.toLowerCase()]=e}.bind(this)))}).catch(e=>{r.emit(rt,[e])}).finally(()=>{n()}):n()}function A(e){const t=this.params,n=this.metrics;if(this.ended)return;this.ended=!0;for(let t=0;t<Xe;t++)e.removeEventListener(Je[t],this.listener,!1);if(t.aborted)return;if((0,Ye.iW)(t))return;if(n.duration=this.endTime-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):O(this,e),n.cbTime=this.cbTime,s){try{this.responseBody=e.responseText}catch(t){this.responseBody=e.response}if((!n.rxSize||0===n.rxSize)&&void 0!==this.responseBody&&0!==t.status){const e=Le(this.responseBody);void 0!==e&&(n.rxSize=e)}try{this.responseHeaders=function(e){const t={};return e?(e.split("\r\n").forEach(function(e){const r=e.indexOf(": ");if(r>0){const n=e.substring(0,r),i=e.substring(r+2);t[n.toLowerCase()]=i}}),t):t}(e.getAllResponseHeaders())}catch(e){r.emit(rt,[e])}}const i=[t,n,this.startTime,this.endTime,"xhr"];this.targets.forEach(e=>x(i,this,e))}function x(e,r,i){n("xhr",[...e,i],r,t.K7.ajax)}function O(e,n){e.params.status=n.status;var i=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?Le(e.response):"text"===r||""===r||void 0===r?Le(e.responseText):void 0}(n,e.lastSize);if(void 0!==i&&0!==n.status&&(e.metrics.rxSize=i),e.sameOrigin&&n.getAllResponseHeaders().indexOf(tt)>=0){var s=n.getResponseHeader(tt);s&&((0,S.p)("sm",["Ajax/CrossApplicationTracing/Header/Seen"],void 0,t.K7.metrics,r),e.params.cat=s.split(", ").pop())}e.loadCaptureCalled=!0}r.on("new-xhr",a),r.on("open-xhr-start",o),r.on("open-xhr-end",d),r.on("send-xhr-start",l),r.on("setRequestHeader-xhr-start",u),r.on("xhr-cb-time",f),r.on("xhr-load-added",h),r.on("xhr-load-removed",p),r.on("xhr-resolved",m),r.on("addEventListener-end",v),r.on("removeEventListener-end",y),r.on("fn-end",E),r.on("fetch-before-start",w),r.on("fetch-start",R),r.on("fn-start",b),r.on("fetch-done",T)}(e,this.ee,this.handler,this.dt),this.importAggregator(e,()=>r.e(478).then(r.bind(r,3845)))}}const it={},st=["pushState","replaceState"];function at(e,t){const r=function(e){return(e||R.ee).get("history")}(e);return!g.RI||it[r.debugId]++||(it[r.debugId]=1,(0,Pe.YM)(r,void 0,t).inPlace(window.history,st,"-")),r}var ot=r(3738);function ct(e){(0,N.Y)(k.BL,function(r=Date.now()){const n=r-g.WN;n<0&&(0,l.R)(62,r),(0,S.p)(q.XG,[k.BL,{time:n}],void 0,t.K7.metrics,e.ee),e.addToTrace({name:k.BL,start:r,origin:"nr"}),(0,S.p)("api-"+k.hG,[n,k.BL],void 0,t.K7.genericEvents,e.ee)},e)}const{He:dt,bD:ut,d3:lt,Kp:ft,TZ:ht,Lc:pt,uP:gt,Rz:mt}=ot;class vt extends W{static featureName=ht;constructor(e){var n;super(e,ht),n=e,(0,N.Y)(k.U2,function(e){if(!(e&&"object"==typeof e&&e.name&&e.start))return;const r={n:e.name,s:e.start-g.WN,e:(e.end||e.start)-g.WN,o:e.origin||"",t:"api"};r.s<0||r.e<0||r.e<r.s?(0,l.R)(61,{start:r.s,end:r.e}):(0,S.p)("bstApi",[r],void 0,t.K7.sessionTrace,n.ee)},n),ct(e);
8if(!(0,j.V)(e.init))return void this.deregisterDrain();const i=this.ee;let s;at(i,e),this.eventsEE=(0,Me.u)(i,e),this.eventsEE.on(gt,function(e,t){this.bstStart=(0,_.t)()}),this.eventsEE.on(pt,function(e,r){(0,S.p)("bst",[e[0],r,this.bstStart,(0,_.t)()],void 0,t.K7.sessionTrace,i)}),i.on(mt+lt,function(e){this.time=(0,_.t)(),this.startPath=location.pathname+location.hash}),i.on(mt+ft,function(e){(0,S.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,t.K7.sessionTrace,i)});try{s=new PerformanceObserver(e=>{const r=e.getEntries();(0,S.p)(dt,[r],void 0,t.K7.sessionTrace,i)}),s.observe({type:ut,buffered:!0})}catch(e){}this.importAggregator(e,()=>r.e(478).then(r.bind(r,6974)),{resourceObserver:s})}}var yt=r(733),bt=r(6344);class Et extends W{static featureName=bt.TZ;#i;recorder;constructor(e){var n;let i;super(e,bt.TZ),n=e,(0,N.Y)(k.CH,function(){(0,S.p)(k.CH,[],void 0,t.K7.sessionReplay,n.ee)},n),function(e){(0,N.Y)(k.Tb,function(){(0,S.p)(k.Tb,[],void 0,t.K7.sessionReplay,e.ee)},e)}(e);const s="".concat(u.Wt).concat((0,yt.Y)(e.info.licenseKey,e.info.applicationID));try{i=JSON.parse(localStorage.getItem(s))}catch(e){}(0,I.SR)(e.init)&&this.ee.on(k.CH,()=>this.#s()),this.#a(i)&&this.importRecorder().then(e=>{e.startRecording(bt.Qb.PRELOAD,i?.sessionReplayMode)}),this.abortHandler=this.#n,this.importAggregator(this.agentRef,()=>r.e(478).then(r.bind(r,6167)),this),this.ee.on("err",e=>{this.blocked||this.agentRef.runtime.isRecording&&(this.errorNoticed=!0,(0,S.p)(bt.Vh,[e],void 0,this.featureName,this.ee))})}#a(e){return e&&(e.sessionReplayMode===u.g.FULL||e.sessionReplayMode===u.g.ERROR)||(0,I.Aw)(this.agentRef.init)}importRecorder(){return this.recorder?Promise.resolve(this.recorder):(this.#i??=Promise.all([r.e(478),r.e(249)]).then(r.bind(r,4866)).then(({Recorder:e})=>(this.recorder=new e(this),this.recorder)).catch(e=>{throw this.ee.emit("internal-error",[e]),this.blocked=!0,e}),this.#i)}#s(){this.blocked||(this.featAggregate?this.featAggregate.mode!==u.g.FULL&&this.featAggregate.initializeRecording(u.g.FULL,!0,bt.Qb.API):this.importRecorder().then(()=>{this.recorder.startRecording(bt.Qb.API,u.g.FULL)}))}#n(){this.recorder?.stopRecording()}}var wt=r(3962);class Rt extends W{static featureName=wt.TZ;constructor(e){if(super(e,wt.TZ),function(e){const r=e.ee.get("tracer");function n(){}(0,N.Y)(k.dT,function(e){return(new n).get("object"==typeof e?e:{})},e);const i=n.prototype={createTracer:function(n,i){var s={},a=this,o="function"==typeof i;return(0,S.p)(q.xV,["API/createTracer/called"],void 0,t.K7.metrics,e.ee),function(){if(r.emit((o?"":"no-")+"fn-start",[(0,_.t)(),a,o],s),o)try{return i.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw r.emit("fn-err",[arguments,this,t],s),t}finally{r.emit("fn-end",[(0,_.t)()],s)}}}};["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach(r=>{N.Y.apply(this,[r,function(){return(0,S.p)(k.hw+r,[performance.now(),...arguments],this,t.K7.softNav,e.ee),this},e,i])}),(0,N.Y)(k.PA,function(){(0,S.p)(k.hw+"routeName",[performance.now(),...arguments],void 0,t.K7.softNav,e.ee)},e)}(e),!g.RI||!(0,i.dV)().o.MO)return;const n=at(this.ee,e);try{this.removeOnAbort=new AbortController}catch(e){}wt.tC.forEach(e=>{(0,J.sp)(e,e=>{c(e)},!0,this.removeOnAbort?.signal)}
8);const s=()=>(0,S.p)("newURL",[(0,_.t)(),""+window.location],void 0,this.featureName,this.ee);n.on("pushState-end",s),n.on("replaceState-end",s),(0,J.sp)(wt.OV,e=>{c(e),(0,S.p)("newURL",[e.timeStamp,""+window.location],void 0,this.featureName,this.ee)},!0,this.removeOnAbort?.signal);let a=!1;const o=new((0,i.dV)().o.MO)((e,t)=>{a||(a=!0,requestAnimationFrame(()=>{(0,S.p)("newDom",[(0,_.t)()],void 0,this.featureName,this.ee),a=!1}))}),c=(0,C.s)(e=>{"loading"!==document.readyState&&((0,S.p)("newUIEvent",[e],void 0,this.featureName,this.ee),o.observe(document.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0}))},100,{leading:!0});this.abortHandler=function(){this.removeOnAbort?.abort(),o.disconnect(),this.abortHandler=void 0},this.importAggregator(e,()=>r.e(478).then(r.bind(r,4393)),{domObserver:o})}}var Tt=r(981);const At={},St=new Set;function xt(e){return"string"==typeof e?{type:"string",size:(new TextEncoder).encode(e).length}:e instanceof ArrayBuffer?{type:"ArrayBuffer",size:e.byteLength}:e instanceof Blob?{type:"Blob",size:e.size}:e instanceof DataView?{type:"DataView",size:e.byteLength}:ArrayBuffer.isView(e)?{type:"TypedArray",size:e.byteLength}:{type:"unknown",size:0}}class Ot{constructor(e,t){this.timestamp=(0,_.t)(),this.currentUrl=(0,Ee.L)(window.location.href),this.socketId=(0,ye.LA)(8),this.requestedUrl=(0,Ee.L)(e),this.requestedProtocols=Array.isArray(t)?t.join(","):t||"",this.openedAt=void 0,this.protocol=void 0,this.extensions=void 0,this.binaryType=void 0,this.messageOrigin=void 0,this.messageCount=0,this.messageBytes=0,this.messageBytesMin=0,this.messageBytesMax=0,this.messageTypes=void 0,this.sendCount=0,this.sendBytes=0,this.sendBytesMin=0,this.sendBytesMax=0,this.sendTypes=void 0,this.closedAt=void 0,this.closeCode=void 0,this.closeReason="unknown",this.closeWasClean=void 0,this.connectedDuration=0,this.hasErrors=void 0}}class _t extends W{static featureName=o.TZ;constructor(e){super(e,o.TZ);const n=e.init.feature_flags.includes("websockets")||e.init.web_sockets?.enabled,s=!e.init.feature_flags.includes("no_spv"),a=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.performance.resources.enabled,e.init.user_actions.enabled,n,s];var c;let d;if(c=e,(0,N.Y)(k.hG,(e,t)=>ce(e,t,c),c),function(e){(0,N.Y)(k.fF,(t,r)=>ue(t,r,e),e)}(e),ct(e),Se(e),function(e){(0,N.Y)(k.V1,(t,r)=>de(t,r,e),e)}(e),this.removeOnAbort=new AbortController,this.abortHandler=()=>{this.removeOnAbort.abort(),this.abortHandler=void 0},n){const u=function(e,t){if(!(0,i.dV)().o.WS)return e;const r=e.get("websockets");if(At[r.debugId]++)return r;At[r.debugId]=1,(0,V.G)(()=>{const e=(0,_.t)();St.forEach(t=>{t.nrData.closedAt=e,t.nrData.closeCode=1001,t.nrData.closeReason="Page navigating away",t.nrData.closeWasClean=!1,t.nrData.openedAt&&(t.nrData.connectedDuration=e-t.nrData.openedAt),r.emit("ws",[t.nrData,t.targets],t)})});
8class n extends WebSocket{static name=Tt.R.WS;static toString(){return"function WebSocket() { [native code] }"}toString(){return"[object WebSocket]"}get[Symbol.toStringTag](){return n.name}#o(e){(e.__newrelic??={}).socketId=this.nrData.socketId,this.nrData.hasErrors??=!0}constructor(...e){super(...e),this.nrData=new Ot(e[0],e[1]),this.targets=(0,Ie.$5)(t),this.addEventListener("open",()=>{this.nrData.openedAt=(0,_.t)(),["protocol","extensions","binaryType"].forEach(e=>{this.nrData[e]=this[e]}),St.add(this)}),this.addEventListener("message",e=>{const{type:t,size:r}=xt(e.data);this.nrData.messageOrigin??=(0,Ee.L)(e.origin),this.nrData.messageCount++,this.nrData.messageBytes+=r,this.nrData.messageBytesMin=Math.min(this.nrData.messageBytesMin||1/0,r),this.nrData.messageBytesMax=Math.max(this.nrData.messageBytesMax,r),(this.nrData.messageTypes??"").includes(t)||(this.nrData.messageTypes=this.nrData.messageTypes?"".concat(this.nrData.messageTypes,",").concat(t):t)}),this.addEventListener("close",e=>{this.nrData.closedAt=(0,_.t)(),this.nrData.closeCode=e.code,e.reason&&(this.nrData.closeReason=e.reason),this.nrData.closeWasClean=e.wasClean,this.nrData.connectedDuration=this.nrData.closedAt-this.nrData.openedAt,St.delete(this),r.emit("ws",[this.nrData,this.targets],this)})}addEventListener(e,t,...r){const n=this,i="function"==typeof t?function(...e){try{return t.apply(this,e)}catch(e){throw n.#o(e),e}}:t?.handleEvent?{handleEvent:function(...e){try{return t.handleEvent.apply(t,e)}catch(e){throw n.#o(e),e}}}:t;return super.addEventListener(e,i,...r)}send(e){if(this.readyState===WebSocket.OPEN){const{type:t,size:r}=xt(e);this.nrData.sendCount++,this.nrData.sendBytes+=r,this.nrData.sendBytesMin=Math.min(this.nrData.sendBytesMin||1/0,r),this.nrData.sendBytesMax=Math.max(this.nrData.sendBytesMax,r),(this.nrData.sendTypes??"").includes(t)||(this.nrData.sendTypes=this.nrData.sendTypes?"".concat(this.nrData.sendTypes,",").concat(t):t)}try{return super.send(e)}catch(e){throw this.#o(e),e}}close(...e){try{super.close(...e)}catch(e){throw this.#o(e),e}}}return g.gm.WebSocket=n,r}(this.ee,e);u.on("ws",(e,t)=>{(0,S.p)("ws-complete",[e,t],void 0,this.featureName,this.ee)})}if(s){if("function"==typeof g.gm.ReportingObserver){const l=new g.gm.ReportingObserver(e=>{e.forEach(e=>{(0,S.p)("spv",[kt(e),(0,_.t)()],void 0,t.K7.genericEvents,this.ee)}),l.disconnect()},{types:["csp-violation"],buffered:!0});l.observe()}g.gm.addEventListener("securitypolicyviolation",e=>{(0,S.p)("spv",[kt(e),e.timeStamp],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal))}if(g.RI){if(ze(this.ee,e),De(this.ee,e),d=at(this.ee,e),e.init.user_actions.enabled){function f(t){const r=(0,Ge.D)(t);return e.beacons.includes(r.hostname+":"+r.port)}function h(){d.emit("navChange")}o.Zp.forEach(e=>(0,J.sp)(e,e=>(0,S.p)("ua",[e],void 0,this.featureName,this.ee),!0)),o.qN.forEac
8h(e=>{const t=(0,C.s)(e=>{(0,S.p)("ua",[e],void 0,this.featureName,this.ee)},500,{leading:!0});(0,J.sp)(e,t)}),g.gm.addEventListener("error",()=>{(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal)),this.ee.on("open-xhr-start",(e,r)=>{f(e[1])||r.addEventListener("readystatechange",()=>{2===r.readyState&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(void 0,this.removeOnAbort.signal))}),this.ee.on("fetch-start",e=>{e.length>=1&&!f(Ze(e[0]))&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)}),d.on("pushState-end",h),d.on("replaceState-end",h),window.addEventListener("hashchange",h,(0,J.jT)(!0,this.removeOnAbort.signal)),window.addEventListener("popstate",h,(0,J.jT)(!0,this.removeOnAbort.signal))}if(e.init.performance.resources.enabled&&g.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{(0,S.p)("browserPerformance.resource",[e],void 0,this.featureName,this.ee)})}).observe({type:"resource",buffered:!0})}}a.some(e=>e)?this.importAggregator(e,()=>r.e(478).then(r.bind(r,8019))):this.deregisterDrain()}}function kt(e){const t=e.body??e;return{blockedUrl:t.blockedURL??e.blockedURI,documentUrl:t.documentURL??e.documentURI,effectiveDirective:t.effectiveDirective,originalPolicy:t.originalPolicy,sourceFile:t.sourceFile,statusCode:t.statusCode,lineNumber:t.lineNumber,columnNumber:t.columnNumber,disposition:"reporting"===t.disposition?"report":t.disposition,sample:t.sample,referrer:t.referrer}}var Nt=r(2646);const Lt=new Map;function Mt(e,t,r,n,i=!0,s){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const a=function(e){return(e||R.ee).get("logger")}(e),o=(0,Pe.YM)(a,void 0,s),c=new Nt.y(R.P);c.level=n.level,c.customAttributes=n.customAttributes,c.autoCaptured=i;const d=t[r]?.[Pe.Jt]||t[r];return Lt.set(d,c),o.inPlace(t,[r],"wrap-logger-",()=>Lt.get(d),void 0,!0),a}var Pt=r(1910);class It extends W{static featureName=se.TZ;constructor(e){var t;super(e,se.TZ),t=e,(0,N.Y)("log",(e,r)=>oe(e,r,t),t),function(e){(0,N.Y)(k.Wb,(t,r,{customAttributes:n={},level:i=se.p_.INFO}={})=>{Mt(e.ee,t,r,{customAttributes:n,level:i},!1,e)},e)}(e),Se(e);const n=this.ee;["log","error","warn","info","debug","trace"].forEach(t=>{(0,Pt.i)(g.gm.console[t]),Mt(n,g.gm.console,t,{level:"log"===t?"info":t},void 0,e)}),this.ee.on("wrap-logger-end",function([t],r,i,s=[e.runtime.v2Target]){const{level:a,customAttributes:o,autoCaptured:c}=this;s.forEach(e=>{(0,ae.R)(n,t,o,a,c,e)})}),this.importAggregator(e,()=>r.e(478).then(r.bind(r,5288)))}}new F({features:[nt,K,G,vt,Et,Y,Oe,_t,It,Rt],loaderType:"spa"})})()})();</script>
8
9<meta name="description" content="Play free online Flash games, retro games, arcade games, puzzles games, action games, skill games and more fun games."/>
10<link rel="canonical" href="http://www.nitrome.com/" />
11<link rel="alternate" type="application/rss+xml" title="Game Releases RSS" href="http://www.nitrome.com/interchange/gamedata/rss/game-releases.php" />
12<meta name="keywords" content="games, play, online, free, free games, bad ice cream, retro games, free online games, latest games, new games, flash games, final ninja, mutiny, dirk valentine, jack frost, off the rails, skywire, hot air, nitrome games, gaming, multiplayer games"/>
13<meta name="twitter:site" content="@Nitrome">
14<!--FB meta -->
15<meta property="og:title" content="Nitrome"/>
16<meta property="og:type" content="website"/>
17<meta property="og:url" content="http://www.nitrome.com" />
18<meta property="og:image" content="http://www.nitrome.com/images/jpegs/nitrome.jpg" />
19<meta property="fb:app_id" content="181007568598115" />
20<meta property="og:locale" content="en_US"/>
21<meta property="og:site_name" content="Nitrome"/>
22<meta property="og:description"
23
24          content="Play free online Flash games, retro games, arcade games, puzzles games, action games, skill games and more fun games."/>
25        <!-- cookie script GDPR banner -->
26        
26<script type="text/javascript" charset="UTF-8" src="//cdn.cookie-script.com/s/901dd0a09e7a09704484093fd5162fab.js"></script>
26
27        <!-- end cookie script GDPR banner -->
28
29<!-- 25122b9db5e97118ed7baf7d0b91f4ccmochiads.com -->
30<link rel="shortcut icon" href="//cdn.nitrome.com/favicon.ico" />
31<script type="text/javascript">
32nitromeTooltip = 0;
33AC_FL_RunContent = 0;</script>
33
34<script type="text/javascript">
35var nitromeAssets = {};
36 </script>
36
37        <link rel="stylesheet" type="text/css" href="//cdn.nitrome.com/styles/nitrome_3.0.0.6.css"/>
38        <link rel="stylesheet" type="text/css" href="//cdn.nitrome.com/styles/gdpr-bar.css"/>
39
40    <link type="text/css" media="screen" rel="stylesheet" href="//cdn.nitrome.com/styles/blog_2.5.4.2.css"/>
41                        
41<script type="text/javascript" src="//cdn.nitrome.com/config.js"></script>
41
42                    
42<script>
43            var generated_image_path = '/generated-content' + images_folder;
44            var cdn_path = '//cdn.nitrome.com/';
45        </script>
45
46<script type="text/javascript" src="//cdn.nitrome.com/interchange/dailyhearted/js/"></script>
46
47<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
47
48<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
48
49<script>
50	$j = $.noConflict();
51</script>
51
52<script type="text/javascript" src="//cdn.nitrome.com/scripts/skins_2.5.3.12.js"></script>
52
53<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
53
54<script type="text/javascript" src="//cdn.nitrome.com/scripts/small-video-init_2.5.35.js"></script>
54
55<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
55
56
57<script type="text/javascript" src="//cdn.nitrome.com/jam/js/controllers/nitromeJamHome.1.0.2.js"></script>
57
58<!--[if lte IE 6]>
59<![endif]-->
60<link rel="image_src" href="//cdn.nitrome.com/images/jpegs/nitrome.jpg"/>
61<!-- PUT THIS TAG IN THE head SECTION -->
62    
62<script async="async" src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
62
63    
63<script type='text/javascript'>
64        var googletag = googletag || {};
65        googletag.cmd = googletag.cmd || [];
66    </script>
66
67    
67<script type='text/javascript'>
68        googletag.cmd.push(function() {
69            googletag.defineSlot('/1012827/nitrome_ros-new_160x600_left', [160, 600], 'left_skyscraper_ad').addService(googletag.pubads());
70            googletag.defineSlot('/1012827/nitrome_ros-new_300x250', [300, 250], 'skyscraper_ad').addService(googletag.pubads());
71            googletag.defineSlot('/1012827/nitrome_ros-new_300x250_mid', [300, 250], 'mu_2_ad').addService(googletag.pubads());
72            googletag.defineSlot('/1012827/nitrome_ros-new_728x90', [728, 90], 'banner_ad').addService(googletag.pubads());
73            googletag.pubads().enableSingleRequest();
74                            googletag.pubads().setTargeting('pageType', 'blog');
75                        googletag.enableServices();
76        });
77    </script>
77
78<!--<meta name="apple-itunes-app" content="app-id=994210330, app-argument=http://www.nitrome.com/mobile/?app=greenninja" />-->
79<script src="//cdn.nitrome.com/scripts/unlockables-tooltip_2.5.1.js"></script>
79
80<script src="//cdn.nitrome.com/scripts/modal_2.5.3.js"></script>
80
81<!-- END OF TAG FOR head SECTION -->
82</head>
83<body>
84<div id="fb-root"></div>
85<script>
86function checkPerms(){
87    var $access = FB.getAccessToken()
88    FB.api('/me/permissions?'+$access,function(response){
89        checkConsole(response);
90    });
91}
92function checkConsole(string){
93    if(typeof(console) != 'undefined'){
94	console.log(string);
95    }
96}
97window.fbAsyncInit = function() {
98    FB.init({
99        appId      : '<? echo FB_APP_ID; ?>',
100        status     : true, 
101        cookie     : true,
102        xfbml      : true
103    });
104};
105(function(d){
106    var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
107    js = d.createElement('script'); js.id = id; js.async = true;
108    js.src = "//connect.facebook.net/en_US/all.js";
109    d.getElementsByTagName('head')[0].appendChild(js);
110}(document));
111</script>
111
112<div id="dense_space"></div>
113<div id="container" style="display:block;">
114<style>
115    .cuboy-login {
116        background-image: url("//cdn.nitrome.com/images/cuboy-login.png");
117        width: 56px;
118        height: 56px;
119        position: absolute;
120        top: 18px;
121        left: 12px;
122    }
123
124    .learn-more-button {
125        background-image: url(//cdn.nitrome.com/images/learn-more-pressed.png);
126        width: 69px;
127        height: 56px;
128        z-index: 999;
129        position: absolute;
130        right: 16px;
131        top: 17px;
132        display: block;
133    }
134
135    .learn-more-button:hover {
136        background-position: 0 -56px;
137        cursor: pointer;
138    }
139
140    .mailing-list__link {
141        display: block;
142        position: absolute;
143        background: url('/images/mailing-list/mailing-list-link.png');
144        width: 302px;
145        height: 92px;
146        transition: .2s;
147    }
148    .mailing-list__link:hover {
149        filter: brightness(1.1);
150    }
151</style>
152<!--menu bar -->
153<div id="nitrome_logo">
154    <h1>
155	<a href="/">Play Games at Nitrome.com</a>
156    </h1>
157</div>
158<div id="menu_shadow">
159</div>
160<!-- login box -->
161<div id="login_shadow">
162</div>
163<div id="login_bg">
164    <a class="mailing-list__link" href="/mailing-list/"></a>
165</div>
166<!-- login box end -->
167<script type="text/javascript" src="/ajax/autocomplete.php"></script>
167
168    
168<script>var sid = "5h5n35pkml68ebg5qhl3o1j9ah";</script>
168
169    
169<script type="text/javascript" src="//cdn.nitrome.com/scripts/ajax_login_2.5.2.js"></script>
169
170    <div id="menu_box">
171    </div>
172
173<a id="games_link_top" class="menu_link" title="Free Online Flash Games" href="/all-games/"  onmouseover="menuRollover('games')" onmouseout="menuRollout('games');">Free Online Games</a>
174<div id="games_png" class="menu_link"></div>
175<div id="games_link" class="menu_link"></div>
176
177<a id="html5_link_top" class="menu_link" title="HTML5 Games" href="/html5-games/"  onmouseover="menuRollover('html5')" onmouseout="menuRollout('html5');">HTML5 Games</a>
178<div id="html5_png" class="menu_link"></div>
179<div id="html5_link" class="menu_link"></div>
180
181<a id="iphone_link_top" class="menu_link" title="Latest Mobile Games" href="/mobile/"  onmouseover="menuRollover('iphone')" onmouseout="menuRollout('iphone');">Latest Mobile Games</a>
182<div id="iphone_png" class="menu_link"></div>
183<div id="iphone_link" class="menu_link"></div>
184
185<a id="console_link_top" class="menu_link" title="Latest Console Games" href="/console-games/"  onmouseover="menuRollover('console')" onmouseout="menuRollout('console');">Latest Console Games</a>
186<div id="console_png" class="menu_link"></div>
187<div id="console_link" class="menu_link"></div>
188
189<a id="pcmac_link_top" class="menu_link" title="Latest PC/Mac Games" href="/pc-mac/"  onmouseover="menuRollover('pcmac')" onmouseout="menuRollout('pcmac');">Latest PC/Mac Games</a>
190<div id="pcmac_png" class="menu_link"></div>
191<div id="pcmac_link" class="menu_link"></div>
192
193<a id="tv_link_top" class="menu_link" title="Latest TV Games" href="/tv/"  onmouseover="menuRollover('tv')" onmouseout="menuRollout('tv');">Latest TV Games</a>
194<div id="tv_png" class="menu_link"></div>
195<div id="tv_link" class="menu_link"></div>
196
197<a id="blog_link_top" class="menu_link" title="Game Development Blog" href="/blog/" onmouseover="menuRollover('blog')" onmouseout="menuRollout('blog');">Game Development Blog</a>
198<div id="blog_png" class="menu_link"></div>
199<div id="blog_link" class="menu_link"></div>
200
201<a id="skins_link_top" class="menu_link" title="Website Skins" href="/skins/" onmouseover="menuRollover('skins')" onmouseout="menuRollout('skins');">Website Skins</a>
202<div id="skins_png" class="menu_link"></div>
203<div id="skins_link" class="menu_link"></div>
204
205    <div id="search_container">
206	<form name="search" method="get" action="/search.php">
207	    <div id="search_bar">
208		<div class="loading"></div>
209		<input id="main_search_field" type="text" name="id" class="login_input ui-autocomplete-input" value="Search!" onclick="if(this.value == 'Search!'){ this.value = '';} return false;" onblur="javascript: if(this.value==''){ this.value='Search!'}"></input>
210		<input name="search_type" type="hidden" name="type" value="default"></input>
211	    </div>
212	    <div id="search_filter_link" onmouseover="javascript: if(!filter_toggle){cssFillDiv('search_filter',generated_images_path+'skin-sprite_2.5.3.png','-1188px', '-206px');}" onmouseout="javascript: if(!filter_toggle){cssFillDiv('search_filter',generated_images_path+'skin-sprite_2.5.3.png','-1188px', '-154px');} " onclick="javascript: filter_toggle = toggleFilter(filter_toggle);"><img src="//cdn.nitrome.com/styles/images/trans.gif" height="100%" width="100%"/></div>
213	    <div id="search_type_game" onmouseover="javascript: explainIcon('game');" onmouseout="javascript: searchRoll('game');" onclick="javascript: filter_toggle = setSearchType('games');" style="display:none;"></div>
214	    <div id="search_type_blog" onmouseover="javascript: explainIcon('blog');" onmouseout="javascript: searchRoll('blog');" onclick="javascript: filter_toggle = setSearchType('blog');" style="display:none;"></div>
215	    <input type="submit" id="search_submit" value=""></input>
216	</form>
217    </div>
218    <div id="menu_fill">
219    </div>
220    <div id="menu_end">
221    </div>
222    <div id="search_filter">
223	<div id="filter_icons">
224	    <div id="game_filter_search"></div>
225	    <div id="post_filter_search"></div>
226	    <div id="user_filter_search"></div>
227	</div>
228	<div id="filter_icon_games"></div>
229	<div id="filter_icon_blog"></div>
230	<div id="filter_icon_users"></div>
231    </div>
232    <div id="search_bar_bg" class="border_color"></div>
233    <!--menu end-->
234    
234<script>
235	$j(document).ready(function(){
236	    $j('#main_search_field').autocomplete({
237		source:autoCompleteArray,
238		minLength: 3,
239		search:function(event,ui){
240		    $j('#search_bar .loading').show();
241		},
242		response:function(event,ui){
243		    $j('#search_bar .loading').hide();
244		}
245	    });
246	});
247    </script>
247
248    
248<script src="//cdn.nitrome.com/scripts/konCode.js"></script>
248<!-- Banner start-->
249<div id="banner_shadow">
250</div>
251<div id="banner_box">
252</div>
253<div id="banner_description">
254</div>
255<!--banner end-->
256<div id="large_shadow">
257</div>
258<div id="top_bar_box">
259    </div>
260<div id="top_bar_head">
261</div>
262<div id="large_box">
263</div>
264<div id="large_box_content"><div id="posts_container" style="height: 1114px;width: 554px;position: absolute;top:5px;left: 5px;">
265    <style>
266    .the-excerpt,.the-content{
267        margin-top: 0px;
268        font-family: arial,sans-serif;
269        font-size: 12px;
270        padding-right: 15px;
271        text-align: left;
272        margin-bottom: 15px;
273    }
274    .post a.read_more_btn {
275	
276	height: 17px;
277	padding: 5px;
278	width: 436px;
279	display: block;
280	margin-left: auto;
281	margin-right: auto;
282	position: relative;
283	margin-top: 18px;
284	left: 0;
285	text-align: center;
286	border-radius: 3px;
287	text-indent: -9999px;
288    }
289    .post a.read_more_btn {
290	background: url('//cdn.nitrome.com/styles/images/layout/read_more_2.5.1.png');
291	height: 17px;
292	padding: 0;
293	width: 504px;
294	display: block;
295	margin-left: auto;
296	margin-right: auto;
297	position: relative;
298	margin-top: 18px;
299	left: 0;
300	text-align: center;
301	border-radius: 3px;
302	text-indent: -9999px;
303	height: 27px;
304    }
305    a.current {
306	color: #999;
307    }
308    .post a.read_more_btn:hover{
309	opacity:.7;
310    }
311    </style>
312    
312<script>
313        var openArticle = function(post_id){
314            $j('#post_'+post_id+' .the-excerpt').hide();
315            $j('#post_'+post_id+' .the-content').show();
316        }
317    </script>
317
318        <div id="post_1436" class="panel_color post corners mn_object">
319            <div class="head_image new_banner"></div>
320            <div class="heading_text background_dark">
321                <h2>
322                    <div class="post_icon new">
323                        
324                    </div>
325                    <span class="post_title">
326                        <a href="/blog/articles/1436/" title="Twin Shot Deluxe coming to Steam, Switch & Mobile">
327                        Twin Shot Deluxe coming to Steam, Switch & Mobile                        </a>
328                    </span>
329                    <span class="post_date">
330                    Mon, 22 Dec 2025                    </span>
331                </h2>
332            </div>
333            <div class="post_content">
334                					<div class="the-excerpt" style="display:block;"><p><iframe src="https://www.youtube.com/embed/vL_cPF495-w?si=FLcrXrRsnW5OrSxM" title="YouTube video player" width="500" height="300" frameborder="0"></iframe></p>
335<p>The Angel Cats are BACK! Twin Shot Deluxe is a platform arcade  shooter where players defend their homeland using bow and arrows. Take  aim at 200+ brand new levels set across four worlds. Play solo or with a  friends in local co-op (1-4 players) or competitively to see who will  be crowned champion.</p>
336<p>WHATS NEW?</p>
337<ul>
338<li> 20FPS The game now runs at an angelic 60FPS. </li>
339<li> Massively  improved controls that still feel like you remember, Improved air  control (?), Stop on a dime(?), Coyote time (?), Variable jump (?). </li>
340<li> Modern 16:9 ratios, that's 78% more Twin Shot. </li>
341<li> Join friends and family in multiplayer (1-4 players) with Controller and keyboard support </li>
342<li> A Complete graphical overhaul: All backgrounds, characters, animation and menu&hellip;</li></ul><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1436);">READ MORE</a></div>
343					<div class="the-content" style="display:none;"><p><iframe src="https://www.youtube.com/embed/vL_cPF495-w?si=FLcrXrRsnW5OrSxM" title="YouTube video player" width="500" height="300" frameborder="0"></iframe></p>
344<p>The Angel Cats are BACK! Twin Shot Deluxe is a platform arcade  shooter where players defend their homeland using bow and arrows. Take  aim at 200+ brand new levels set across four worlds. Play solo or with a  friends in local co-op (1-4 players) or competitively to see who will  be crowned champion.</p>
345<p>WHATS NEW?</p>
346<ul>
347<li> 20FPS The game now runs at an angelic 60FPS. </li>
348<li> Massively  improved controls that still feel like you remember, Improved air  control (?), Stop on a dime(?), Coyote time (?), Variable jump (?). </li>
349<li> Modern 16:9 ratios, that's 78% more Twin Shot. </li>
350<li> Join friends and family in multiplayer (1-4 players) with Controller and keyboard support </li>
351<li> A Complete graphical overhaul: All backgrounds, characters, animation and menus have been remastered! </li>
352<li> 200+ all new levels built from the ground up. </li>
353<li> Take aim at 2 brand new formidable bosses. </li>
354<li> New music tracks by the games original composer Dave Cowen </li>
355<li> Prepare to hum along to the iconic earworm tracks with music now uncompressed and crystal clear. </li>
356<li> Brand new cinematic intro and ending illustrations. </li>
357<li> Unlock the new Atlantis theme with exciting new enemies and mechanics to enjoy across its 50 stages. </li>
358<li> Cheats and Treats are BACK! Unlock a plethora of new character skins, abilities and modes for enhanced replay. </li>
359<li> Introducing  HATS! Battle amongst your friends or alone to see who will be crowned  champion. Hats aren't just hilariously cosmetic but also come with  additional buffs. </li>
360<li> Tag  mode: Dial up the competitiveness to 11 in tag mode. Tag other players  with and arrow and claim the prized hat for yourself. A real game of  Angel Cat and Mouse. </li>
361</ul>
362<p>The good ol' days of carefree gaming are back. Twin Shot Deluxe is our first release in  the Nitrome Classics series. We are bringing back beloved games of old  re-equipped for modern gamers.</p>
363<p>Look out for more Nitrome Classics games in the near future.&nbsp;</p>
364<p>Re-live your childhood and complete your collection!</p>
365<p>Coming to the Nintendo Switch/ Steam/ mobile. Wishlist on Steam:&nbsp;<a href="https://store.steampowered.com/app/3618520/Twin_Shot_Deluxe/" target="_blank">https://store.steampowered.com/app/3618520/Twin_Shot_Deluxe/</a></p><p class="the-author">by <b>Nitrome</b></p></div>
366				            </div>
367            <div class="social_block">
368                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1436" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
369                <div class="tweet_social_button social_btn">
370                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1436" data-text="Twin Shot Deluxe coming to Steam, Switch & Mobile #Nitrome"></a>
371                    
371<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
372                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
372
373                </div>
374                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_new.xml"></a>
375                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
376            </div>
377            <div class="clear_out"></div>
378        </div>
379                    <div id="post_1435" class="panel_color post corners mn_object">
380            <div class="head_image news_banner"></div>
381            <div class="heading_text background_dark">
382                <h2>
383                    <div class="post_icon news">
384                        
385                    </div>
386                    <span class="post_title">
387                        <a href="/blog/articles/1435/" title="Introducing the Nitrome Classics range!">
388                        Introducing the Nitrome Classics range!                        </a>
389                    </span>
390                    <span class="post_date">
391                    Mon, 22 Dec 2025                    </span>
392                </h2>
393            </div>
394            <div class="post_content">
395                					<div class="the-excerpt" style="display:block;"><p><iframe src="https://www.youtube.com/embed/QTJxaW1eT-U?si=-_uKIIIb7ATKEKBo" title="YouTube video player" width="500" height="300" frameborder="0"></iframe></p>
396<p>The good ol' days of carefree gaming are back! We are bringing back  beloved games of old re-equipped for modern gamers. The Nitrome  Classics range features select titles from our past lovingly ported from  the ground up to modern formats like the Switch, Steam and Mobile with  potentially more platforms to follow.</p>
397<p>All of  the games are not just meticulously restored but improved with higher  frame rates, full screen aspect ratios and with higher quality music.  Many of the games will be packaged as mini collections within a  franchise and include additional content not found in the original  release.</p>
398<p><strong>Twin Shot Deluxe</strong>&nbsp;</p>
399<p>Inspired  by classic single screen arcade games like Bubble Bobble and Snow Bros  players must fight thro&hellip;</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1435);">READ MORE</a></div>
400					<div class="the-content" style="display:none;"><p><iframe src="https://www.youtube.com/embed/QTJxaW1eT-U?si=-_uKIIIb7ATKEKBo" title="YouTube video player" width="500" height="300" frameborder="0"></iframe></p>
401<p>The good ol' days of carefree gaming are back! We are bringing back  beloved games of old re-equipped for modern gamers. The Nitrome  Classics range features select titles from our past lovingly ported from  the ground up to modern formats like the Switch, Steam and Mobile with  potentially more platforms to follow.</p>
402<p>All of  the games are not just meticulously restored but improved with higher  frame rates, full screen aspect ratios and with higher quality music.  Many of the games will be packaged as mini collections within a  franchise and include additional content not found in the original  release.</p>
403<p><strong>Twin Shot Deluxe</strong>&nbsp;</p>
404<p>Inspired  by classic single screen arcade games like Bubble Bobble and Snow Bros  players must fight through a series of arenas using their bows and  arrows which double as a way to help scale walls.</p>
405<p><strong>Silly Sausage</strong></p>
406<p>Meet  our adorable pooch Silly Sausage, the gaming world's most stretchy dog!  Navigate this surreal platformer using unique elastic controls to  traverse the environment. Stretch and weave your way through this doggy  dream trilogy of edible delights and deadly meat grinding hazards.</p>
407<p><strong>Skywire</strong></p>
408<p>One  of Nitrome&rsquo;s earliest hit games! Control a cable car as it makes its  way along the track to get the passengers safely through the levels of  an out of control theme park.</p>
409<p>The first release will be Twin Shot Deluxe coming early next year to Steam, Switch and mobile.</p>
410<p>Look out for more Nitrome Classics games in the near future. Re-live your childhood and complete your collection.</p>
411<p>Wishlist on Steam:&nbsp;<a href="https://store.steampowered.com/app/3618520/Twin_Shot_Deluxe/" target="_blank">https://store.steampowered.com/app/3618520/Twin_Shot_Deluxe/</a></p><p class="the-author">by <b>Nitrome</b></p></div>
412				            </div>
413            <div class="social_block">
414                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1435" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
415                <div class="tweet_social_button social_btn">
416                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1435" data-text="Introducing the Nitrome Classics range! #Nitrome"></a>
417                    
417<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
418                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
418
419                </div>
420                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_news.xml"></a>
421                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
422            </div>
423            <div class="clear_out"></div>
424        </div>
425                    <div id="post_1434" class="panel_color post corners mn_object">
426            <div class="head_image new_banner"></div>
427            <div class="heading_text background_dark">
428                <h2>
429                    <div class="post_icon new">
430                        
431                    </div>
432                    <span class="post_title">
433                        <a href="/blog/articles/1434/" title="Mouse Work coming to Switch 2!">
434                        Mouse Work coming to Switch 2!                        </a>
435                    </span>
436                    <span class="post_date">
437                    Mon, 22 Dec 2025                    </span>
438                </h2>
439            </div>
440            <div class="post_content">
441                					<div class="the-excerpt" style="display:block;"><p><iframe src="https://www.youtube.com/embed/RdhvAqS4bjA?si=gaVBEJJSNZcS1f1p" width="500" height="300" frameborder="0"></iframe></p>
442<p>An Upcoming Party Game for 1- 4 Players Using Switch 2 Mouse Controls!<br /><br />Quit  mousin' around and get yourselves down to the job centre! Team up with  friends or go it alone, facing a range of mini game challenges using the  Switch 2 mouse controls. Each job features a&nbsp;unique and inventive  mechanic making full use of the Joy-Con 2&rsquo;s brand new cursor  functionality.<br /><br />In Mouse Work players take on the role of adorable  mice that are just trying to earn some Cheddar. Fortunately for them,  the local job centre has a wealth of offerings available, each testing  our mice&nbsp;with new and innovative cursor-based gameplay.&nbsp;<br /><br />As a  Climbing Instructor, you'll be dragging the hands of your incompetent  students to the next safe hold, or as an Ar&hellip;</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1434);">READ MORE</a></div>
443					<div class="the-content" style="display:none;"><p><iframe src="https://www.youtube.com/embed/RdhvAqS4bjA?si=gaVBEJJSNZcS1f1p" width="500" height="300" frameborder="0"></iframe></p>
444<p>An Upcoming Party Game for 1- 4 Players Using Switch 2 Mouse Controls!<br /><br />Quit  mousin' around and get yourselves down to the job centre! Team up with  friends or go it alone, facing a range of mini game challenges using the  Switch 2 mouse controls. Each job features a&nbsp;unique and inventive  mechanic making full use of the Joy-Con 2&rsquo;s brand new cursor  functionality.<br /><br />In Mouse Work players take on the role of adorable  mice that are just trying to earn some Cheddar. Fortunately for them,  the local job centre has a wealth of offerings available, each testing  our mice&nbsp;with new and innovative cursor-based gameplay.&nbsp;<br /><br />As a  Climbing Instructor, you'll be dragging the hands of your incompetent  students to the next safe hold, or as an Artist, you'll paint pictures  correctly before the time runs out. Use the cursor to play&nbsp;keepy-uppy  with all manner of spherical objects in 'Gym Teacher', or keep it old  school in 'Spy', a retro style mouse-avoider. These are just a few of  the jobs you'll be taking on in Mouse Work.&nbsp;</p>
445<p><iframe src="https://www.youtube.com/embed/LXKVZlsJDAQ?si=fnBGa5xzV0o5rxIL" width="500" height="300" frameborder="0"></iframe></p>
446<p>As you play through the jobs available, new ones will unlock, and old jobs will resurface with surprising twists.<br /><br />Whilst  the whole game can be played solo, all the jobs are dialled up a notch  when playing in local 2-4 player couch co-op mode. Multiplayer brings  the party with a range of new challenges added to&nbsp;every job.&nbsp;<br /><br />You  may be getting in each other's way whilst tied together, or forced to  have your climbers hold hands to bridge a large gap. Perhaps you'll be  required to work together to lift and drag objects that&nbsp;would be too  heavy for a single mouse. Asymmetric abilities take this further in some  games too, with each player working with entirely different mechanics!<br /><br />All  your hard work won't go unrewarded however. Successfully completing  jobs earns you Cheddar, and you can blow it all customising your mice  with cute cosmetics: hats, bow ties, trainers&hellip; the lot!&nbsp;Mouse Work will  release hot on the tail of the Nintendo Switch 2.<br /><br />Footage shown was captured on PC and is only an approximation of what we expect on final hardware.</p><p class="the-author">by <b>Nitrome</b></p></div>
447				            </div>
448            <div class="social_block">
449                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1434" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
450                <div class="tweet_social_button social_btn">
451                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1434" data-text="Mouse Work coming to Switch 2! #Nitrome"></a>
452                    
452<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
453                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
453
454                </div>
455                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_new.xml"></a>
456                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
457            </div>
458            <div class="clear_out"></div>
459        </div>
460                    <div id="post_1433" class="panel_color post corners mn_object">
461            <div class="head_image update_banner"></div>
462            <div class="heading_text background_dark">
463                <h2>
464                    <div class="post_icon update">
465                        
466                    </div>
467                    <span class="post_title">
468                        <a href="/blog/articles/1433/" title="Over 30 More HTML5 Games!">
469                        Over 30 More HTML5 Games!                        </a>
470                    </span>
471                    <span class="post_date">
472                    Sun, 13 Nov 2022                    </span>
473                </h2>
474            </div>
475            <div class="post_content">
476                                <a class="the-image" href="https://www.nitrome.com/html5-games/" title="Over 30 More HTML5 Games!">
477                    <img src="//cdn.nitrome.com/images/uploads/1433-1668368493-Screenshot 2022-11-11 at 14.27.35.png" class="post_image"/>
478                </a>
479                					<div class="the-content" style="display:block;"><p>Great news!</p>
480<p>Through our partnership with Poki and Away3d we have over 30 more of our legacy Flash games converted to run in HTML5! You can check them out on our website here: <a href="https://www.nitrome.com/html5-games/" target="_self">https://www.nitrome.com/html5-games/</a></p><p class="the-author">by <b>Nitrome</b></p></div>
481				            </div>
482            <div class="social_block">
483                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1433" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
484                <div class="tweet_social_button social_btn">
485                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1433" data-text="Over 30 More HTML5 Games! #Nitrome"></a>
486                    
486<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
487                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
487
488                </div>
489                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_update.xml"></a>
490                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
491            </div>
492            <div class="clear_out"></div>
493        </div>
494                    <div id="post_1432" class="panel_color post corners mn_object">
495            <div class="head_image new_banner"></div>
496            <div class="heading_text background_dark">
497                <h2>
498                    <div class="post_icon new">
499                        
500                    </div>
501                    <span class="post_title">
502                        <a href="/blog/articles/1432/" title="Shovel Knight Dig">
503                        Shovel Knight Dig                        </a>
504                    </span>
505                    <span class="post_date">
506                    Fri, 23 Sep 2022                    </span>
507                </h2>
508            </div>
509            <div class="post_content">
510                					<div class="the-content" style="display:block;"><p><iframe src="https://www.youtube-nocookie.com/embed/caW8vtdrb4w" width="500" height="300" frameborder="0"></iframe></p>
511<p>Hi Nitromians,</p>
512<p>After an epic 4 year development the wait is finally over!</p>
513<p>We are thrilled to announce that Shovel Knight Dig releases today (September 23rd) on <a href="http://bit.ly/3TuO7BZ">Nintendo Switch</a>, <a href="http://bit.ly/3R6dLM0">Steam</a> and <a href="http://apple.co/3AXpffa">Apple Arcade</a>.</p>
514<p><br />Get the game at the following:<br />Nintendo Switch: <a href="http://bit.ly/3TuO7BZ">http://bit.ly/3TuO7BZ</a><br />Steam: <a href="http://bit.ly/3R6dLM0">http://bit.ly/3R6dLM0</a><br />Apple Arcade: <a href="http://apple.co/3AXpffa">http://apple.co/3AXpffa</a></p>
515<p><a href="http://apple.co/3AXpffa"></a><br />Get your shovels and Dig in to our most ambitious release yet!</p><p class="the-author">by <b>Nitrome</b></p></div>
516				            </div>
517            <div class="social_block">
518                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1432" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
519                <div class="tweet_social_button social_btn">
520                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1432" data-text="Shovel Knight Dig #Nitrome"></a>
521                    
521<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
522                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
522
523                </div>
524                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_new.xml"></a>
525                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
526            </div>
527            <div class="clear_out"></div>
528        </div>
529                    <div id="post_1431" class="panel_color post corners mn_object">
530            <div class="head_image works_banner"></div>
531            <div class="heading_text background_dark">
532                <h2>
533                    <div class="post_icon works">
534                        
535                    </div>
536                    <span class="post_title">
537                        <a href="/blog/articles/1431/" title="Super Leap Day track in Beat Star!">
538                        Super Leap Day track in Beat Star!                        </a>
539                    </span>
540                    <span class="post_date">
541                    Sun, 10 Apr 2022                    </span>
542                </h2>
543            </div>
544            <div class="post_content">
545                                <a class="the-image" href="https://www.google.co.uk/aclk?sa=L&ai=DChcSEwjOtLbfoYX3AhWNtO0KHVZHDoMYABAAGgJkZw&ae=2&sig=AOD64_2lcbmqw7cKnBY88LRHsydtFPXZ5w&q&adurl&ved=2ahUKEwiIra_foYX3AhUKAcAKHVPXDB4Q0Qx6BAgDEAE" title="Super Leap Day track in Beat Star!">
546                    <img src="//cdn.nitrome.com/images/uploads/1431-1649600746-leapday-track-beatstar-blog.png" class="post_image"/>
547                </a>
548                					<div class="the-content" style="display:block;"><p>A track from our Super Leap Day game is being featured in one of the most popular music games Beat Star!</p>
549<p>It is one of three games tracks being highlighted as part of London Games Week! (Joining tracks from Surgeon Simulator and Reigns) The track in question is the Capital Highway tune composed by the very talented <a href="https://robkta.carrd.co/" target="_blank">https://robkta.carrd.co/</a> who composed most of the tracks in <a href="http://apple.co/-SuperLeapDay" target="_blank">Super Leap Day</a></p>
550<p><a href="http://apple.co/-SuperLeapDay" target="_blank"></a>You can't check out the track in the game&nbsp;<a href="https://www.google.co.uk/aclk?sa=L&amp;ai=DChcSEwjOtLbfoYX3AhWNtO0KHVZHDoMYABAAGgJkZw&amp;ae=2&amp;sig=AOD64_2lcbmqw7cKnBY88LRHsydtFPXZ5w&amp;q&amp;adurl&amp;ved=2ahUKEwiIra_foYX3AhUKAcAKHVPXDB4Q0Qx6BAgDEAE" target="_blank">here</a>!<br /><br /></p><p class="the-author">by <b>Nitrome</b></p></div>
551				            </div>
552            <div class="social_block">
553                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1431" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
554                <div class="tweet_social_button social_btn">
555                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1431" data-text="Super Leap Day track in Beat Star! #Nitrome"></a>
556                    
556<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
557                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
557
558                </div>
559                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_works.xml"></a>
560                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
561            </div>
562            <div class="clear_out"></div>
563        </div>
564                    <div id="post_1430" class="panel_color post corners mn_object">
565            <div class="head_image news_banner"></div>
566            <div class="heading_text background_dark">
567                <h2>
568                    <div class="post_icon news">
569                        
570                    </div>
571                    <span class="post_title">
572                        <a href="/blog/articles/1430/" title="Yolk Plush Toys!">
573                        Yolk Plush Toys!                        </a>
574                    </span>
575                    <span class="post_date">
576                    Fri, 11 Feb 2022                    </span>
577                </h2>
578            </div>
579            <div class="post_content">
580                                <a class="the-image" href="https://shop.makeship.com/32CWtCf" title="Yolk Plush Toys!">
581                    <img src="//cdn.nitrome.com/images/uploads/1430-1644570253-Yolk_Plush_Promo.png" class="post_image"/>
582                </a>
583                					<div class="the-content" style="display:block;"><p>Yolk Plush Toys (from our Leap Day games) are now available to order for a limited time! Don't miss out because when the campaign ends they will be gone forever!</p>
584<p>You can order them at the following link: <a href="https://shop.makeship.com/32CWtCf" target="_blank">https://shop.makeship.com/32CWtCf</a></p>
585<p>A huge thank you to all that buy one and we hope you love it!</p><p class="the-author">by <b>Nitrome</b></p></div>
586				            </div>
587            <div class="social_block">
588                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1430" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
589                <div class="tweet_social_button social_btn">
590                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1430" data-text="Yolk Plush Toys! #Nitrome"></a>
591                    
591<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
592                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
592
593                </div>
594                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_news.xml"></a>
595                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
596            </div>
597            <div class="clear_out"></div>
598        </div>
599                    <div id="post_1429" class="panel_color post corners mn_object">
600            <div class="head_image news_banner"></div>
601            <div class="heading_text background_dark">
602                <h2>
603                    <div class="post_icon news">
604                        
605                    </div>
606                    <span class="post_title">
607                        <a href="/blog/articles/1429/" title="Playing Nitrome flash games!">
608                        Playing Nitrome flash games!                        </a>
609                    </span>
610                    <span class="post_date">
611                    Thu, 04 Nov 2021                    </span>
612                </h2>
613            </div>
614            <div class="post_content">
615                                <a class="the-image" href="https://www.nitrome.com/all-games/" title="Playing Nitrome flash games!">
616                    <img src="//cdn.nitrome.com/images/uploads/1429-1636056852-flash-is-dead-blog-image.png" class="post_image"/>
617                </a>
618                					<div class="the-excerpt" style="display:block;"><p>Hi Nitromians,</p>
619<p>We have now launched a solution to let our users play all 130+ Nitrome Flash games on the site. The games are still technically running in Flash so they will run exactly as they did in the past. Hurray.</p>
620<p>We are doing this with the aid of a downloadable player called Supernova. Once downloaded clicking on the games will run them as before with one small difference in that they will now appear in a new window. Roughly speaking Supernova contains it's own browser that has a Flash Player built into it and it is this that allows the games to run.</p>
621<p>You can download it by clicking on any of the Flash games and following the download buttons.</p>
622<p>Currently the player is Windows only (Their site says a Mac version will come &hellip;</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1429);">READ MORE</a></div>
623					<div class="the-content" style="display:none;"><p>Hi Nitromians,</p>
624<p>We have now launched a solution to let our users play all 130+ Nitrome Flash games on the site. The games are still technically running in Flash so they will run exactly as they did in the past. Hurray.</p>
625<p>We are doing this with the aid of a downloadable player called Supernova. Once downloaded clicking on the games will run them as before with one small difference in that they will now appear in a new window. Roughly speaking Supernova contains it's own browser that has a Flash Player built into it and it is this that allows the games to run.</p>
626<p>You can download it by clicking on any of the Flash games and following the download buttons.</p>
627<p>Currently the player is Windows only (Their site says a Mac version will come and if it does we will support it) and works on Edge and Chrome browsers.</p>
628<p>Nitrome are still committed to converting our back catalogue to run in HTML5. We believe the Supernova player offers an important extra way to immediately preserve our Flash games for players who want them. However HTML5 is the future, offering the only true way to keep them embedded in browsers and playable across more devices.</p>
629<p>We hope you are as excited as we were to dig into some of the games that have been out of action for the last few months!</p>
630<p>Team Nitrome :)</p><p class="the-author">by <b>Nitrome</b></p></div>
631				            </div>
632            <div class="social_block">
633                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1429" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
634                <div class="tweet_social_button social_btn">
635                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1429" data-text="Playing Nitrome flash games! #Nitrome"></a>
636                    
636<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
637                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
637
638                </div>
639                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_news.xml"></a>
640                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
641            </div>
642            <div class="clear_out"></div>
643        </div>
644                    <div id="post_1428" class="panel_color post corners mn_object">
645            <div class="head_image itrome_banner"></div>
646            <div class="heading_text background_dark">
647                <h2>
648                    <div class="post_icon itrome">
649                        
650                    </div>
651                    <span class="post_title">
652                        <a href="/blog/articles/1428/" title="Super Leap Day launched!">
653                        Super Leap Day launched!                        </a>
654                    </span>
655                    <span class="post_date">
656                    Fri, 06 Aug 2021                    </span>
657                </h2>
658            </div>
659            <div class="post_content">
660                					<div class="the-excerpt" style="display:block;"><p>Hi Nitromians,</p>
661<p>We are thrilled to announce that we have a brand new game that has just launched...<a href="https://apple.co/-SuperLeapDay">Super Leap Day!</a></p>
662<p><iframe src="https://www.youtube-nocookie.com/embed/SwkdfDNOycQ" width="500" height="300" frameborder="0"></iframe></p>
663<p>It is available NOW on Apple Arcade for iPhone, iPad, Apple TV and Mac!</p>
664<p><a href="https://apple.co/-SuperLeapDay">http://apple.co/-SuperLeapDay</a></p>
665<p>Super Leap Day is the sequel to Leap Day and much like in that game the key hook is that there is a new level every day for you to play and it can all be played with a single tap.</p>
666<p>You may have noticed by this point that we have not made the game in pixels this time out! We are known for making games with pixels so that may seem a little unusual. We still love pixels but we also have been looking for the right time to break the trend and try something new. It seemed a risk to apply this to a sequel but it also &hellip;</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1428);">READ MORE</a></div>
667					<div class="the-content" style="display:none;"><p>Hi Nitromians,</p>
668<p>We are thrilled to announce that we have a brand new game that has just launched...<a href="https://apple.co/-SuperLeapDay">Super Leap Day!</a></p>
669<p><iframe src="https://www.youtube-nocookie.com/embed/SwkdfDNOycQ" width="500" height="300" frameborder="0"></iframe></p>
670<p>It is available NOW on Apple Arcade for iPhone, iPad, Apple TV and Mac!</p>
671<p><a href="https://apple.co/-SuperLeapDay">http://apple.co/-SuperLeapDay</a></p>
672<p>Super Leap Day is the sequel to Leap Day and much like in that game the key hook is that there is a new level every day for you to play and it can all be played with a single tap.</p>
673<p>You may have noticed by this point that we have not made the game in pixels this time out! We are known for making games with pixels so that may seem a little unusual. We still love pixels but we also have been looking for the right time to break the trend and try something new. It seemed a risk to apply this to a sequel but it also gave us opportunity to give the game it's own identify and help highlight that this is not more of the same. We are thrilled with how it came out and we hope you approve.</p>
674<p>Gameplay has also been completely overhauled from the ground up to allow for many features we were not possible to include in the first game. Yolk and friends can now handle slopes and even run up walls...or ceilings if you get enough speed. You can grab things now too which really expands how you interact with the world around you. You don't even travel only upwards any more...see a sideways opening and it will take you in a whole new direction!</p>
675<p>We also took the opportunity to shake up the rewards from the first game. No longer will you be unlocking new characters with the same abilities as Yolk. Now all the characters you unlock have their own abilities and they can be upgraded to do more things too! In addition we have added bonus games into the unlock pool...fancy a round of golf? How about pinball or jump in a kart and test your driving skills!</p>
676<p>We have added a lot of new things for Super Leap Day but like the first game this is just the start and we plan to add much more content to keep you all coming back for more! We hope you all enjoy it!</p>
677<p>This post is primarily to announce our new game but given the lack of updates on the site we want to assure those curious that we are still in full development mode on Shovel Knight Dig. It has been in continuous development along side Super Leap Day and we expand the team to handle both projects so that one did not impact on the other.</p><p class="the-author">by <b>Nitrome</b></p></div>
678				            </div>
679            <div class="social_block">
680                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1428" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
681                <div class="tweet_social_button social_btn">
682                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1428" data-text="Super Leap Day launched! #Nitrome"></a>
683                    
683<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
684                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
684
685                </div>
686                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_itrome.xml"></a>
687                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
688            </div>
689            <div class="clear_out"></div>
690        </div>
691                    <div id="post_1427" class="panel_color post corners mn_object">
692            <div class="head_image works_banner"></div>
693            <div class="heading_text background_dark">
694                <h2>
695                    <div class="post_icon works">
696                        
697                    </div>
698                    <span class="post_title">
699                        <a href="/blog/articles/1427/" title="HTML5 Games and more!">
700                        HTML5 Games and more!                        </a>
701                    </span>
702                    <span class="post_date">
703                    Sat, 23 May 2020                    </span>
704                </h2>
705            </div>
706            <div class="post_content">
707                                <a class="the-image" href="http://www.nitrome.com/html5-games/" title="HTML5 Games and more!">
708                    <img src="http://cdn.nitrome.com/images/uploads/1427-1590225068-html5-blog.png" class="post_image"/>
709                </a>
710                					<div class="the-excerpt" style="display:block;"><p>Hi Nitromians,</p>
711<p>It has been a long time since we last posted on the blog so there is a lot to get through so settle in!</p>
712<p>Today&rsquo;s big news is that we can finally tell you what we are doing to keep our flash games alive past the end of this year when flash will be removed from popular browsers.</p>
713<p>We have behind the scenes been working with the super talented guys at Poki (<a rel="noopener noreferrer" href="https://poki.com/" target="_blank">https://poki.com/</a>) to make our games playable in HTML5! This means they will remain playable in browsers the way they were designed to be played!</p>
714<p>The first game is Bad Ice Cream which you can play TODAY by navigating to our brand new HTML5 section:&nbsp;<a rel="noopener noreferrer" href="/html5-games/" target="_blank">www.nitrome.com/html5-games</a>. More games will be following starting with the Bad Ice Cream sequels over the next two &hellip;</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1427);">READ MORE</a></div>
715					<div class="the-content" style="display:none;"><p>Hi Nitromians,</p>
716<p>It has been a long time since we last posted on the blog so there is a lot to get through so settle in!</p>
717<p>Today&rsquo;s big news is that we can finally tell you what we are doing to keep our flash games alive past the end of this year when flash will be removed from popular browsers.</p>
718<p>We have behind the scenes been working with the super talented guys at Poki (<a rel="noopener noreferrer" href="https://poki.com/" target="_blank">https://poki.com/</a>) to make our games playable in HTML5! This means they will remain playable in browsers the way they were designed to be played!</p>
719<p>The first game is Bad Ice Cream which you can play TODAY by navigating to our brand new HTML5 section:&nbsp;<a rel="noopener noreferrer" href="/html5-games/" target="_blank">www.nitrome.com/html5-games</a>. More games will be following starting with the Bad Ice Cream sequels over the next two weeks and when we're done, we hope to have the entire flash catalogue of 130+ games playable in HTML5!</p>
720<p>Time to talk a little more about the HTML5 versions. They are not ports! The games are running off the exact code of the original games pulled directly from the original flash files. What the wizards making this happen have made is more comparable to an emulator&hellip;a Nitrome emulator&hellip;eek! Being an emulator of sorts some people may see performance differences to these versions but the code is highly optimised and will improve even further as the team continue to work on it.</p>
721<p>Nitrome now have a Discord channel:&nbsp;
721<a rel="noopener noreferrer" href="https://t.co/d7JkJj0G2f" target="_blank">https://t.co/d7JkJj0G2f</a>&nbsp;. As well as being a great place to discuss all things Nitrome this the place we will be posting early betas of the new games that get converted. Please do sign up here if you are interested in trying them and there will be instructions on how to report any issues you may find with them.</p>
722<p>The games being in HTML5 brings some additional benefits. More ideas may be added over time but added today is the ability to play these games on mobile browsers! Please note: You may require a newish phone for the games to run full speed and there are some limitations from the games not being designed with mobile in mind. That said we think the results were well beyond our expectations. We worked closely with Poki to design virtual control overlays that can be configured on a per game basis. Need more than one button check, d-pad or analogue stick check. Landscape or Portrait&hellip;both! Please give it a go and let us know what you think! There is even a hidden Easter Egg in there that some of you may find if you look hard&nbsp;:)</p>
723<p>You may notice that we have updated the site. We did this to house the new HTML5 games but this also gave us an excuse to do a little house cleaning elsewhere to bring things a little more up to date. We have updated the Mobile section to have all our mobile game, Our Steam section now has our launched Steam games and we finally now have a Console tab to house the games we have launched there. We are very happy to say that we have managed to get the original Nitrome website developer Tom McQuillan back in order to make these website changes! Thanks for that Tom!</p>
724<p>You may remember in our previous post that we said we were making a new website. This is not that site. Our intent at the time was to make a new website that focused on games outside of the browser. It was going to be heavily stripped back and more business focused. We progressed some way with this direction but ultimately changed our minds that this was the way we wanted the site to go. A large part of that decision was due to the HTML5 versions of the games becoming a possibility. We still intend to make a new site that will be more responsive (scale and adjust for various mobile, tablet and desktop set ups). We do not have a clear idea yet on when that might happen and as such are not going to make any estimate on when that might arrive. We will give more news when we have more concrete plans.</p>
725<p>Finally, as we have not posted an update in so long, we wanted to highlight our move into the Console space and update you on our missed mobile offerings. If you follow us on Twitter where Nitrome are much more active you would hopefully know this but we are aware that not everyone does so here is a recap.</p>
726<p>We launched our first console game Bomb Chicken to the Nintendo Switch in July 2018&nbsp;<a rel="noopener noreferrer" href="http://bombchickengame.com/" target="_blank">http://bombchickengame.com/</a>. It was featured in one of Nintendo&rsquo;s prestigious Nindie Directs and went on to get a Physical release by our friends at Limited Run. Limited Run also helped us port the game to Playstation 4 and produce a physical release for that too. We also launched a Steam version of the game and more recently the game has landed on mobile devices so it is pretty much everywhere at this point!</p>
727<p>In April we launched our second console release Gunbrick: Reloaded on Switch and Steam&nbsp;<a rel="noopener noreferrer" href="http://gunbrick.com/" target="_blank">http://gunbrick.com/</a>. The game is a heavily expanded version of our previous mobile release &lsquo;Gunbrick&rsquo; which was awarded Editors choice by Apple at the time. The game now includes brand new isometric levels taking the gameplay in a whole new dimension! The games origins can be traced all the way back to Nitrome&rsquo;s very first icon game (a game that can be played in the 50 x50 pixel icon) back in 2012! Were happy to say this version made its way 
727into this release too&nbsp;:)</p>
728<p>Last year we announced a big new console project that is Shovel Knight Dig&nbsp;<a rel="noopener noreferrer" href="https://www.yachtclubgames.com/games/shovel-knight-dig/" target="_blank">https://yachtclubgames.com/games/shovel-knight-dig/</a>. It is a spin off title based in Yacht Clubs Shovel Knight Universe. This is by far Nitrome&rsquo;s biggest and most polished game to date. Please follow our progress on the title on Twitter&nbsp;<a rel="noopener noreferrer" href="https://twitter.com/Nitrome" target="_blank">https://twitter.com/Nitrome</a>&nbsp;and if you haven&rsquo;t seen it watch the reveal trailer here:&nbsp;<a rel="noopener noreferrer" href="https://www.youtube.com/watch?v=oPfiBU4ifjs" target="_blank">https://www.youtube.com/watch?v=oPfiBU4ifjs</a>.</p>
729<p>On mobile there have been 14 games release since we last updated! We brought our flash games In the Dog House, Colour Blind and Turn Undead to mobile all sympathetically adjusted for the touch screen and widescreen format and with various extras. We also made a full on sequel to Turn Undead too!</p>
730<p>Nitrome&rsquo;s internal studio also produced Flat Pack and Bomb Chicken on mobile and in collaboration with some external studios we also published Spicy Piggy, Sprint RPG, Tower Fortress, Slime Pizza, Nano Golf: Puzzle Putting, Nano Golf: Hole in One, Drop Wizard Tower, Spike City!</p>
731<p>Really there are too many to link to here so for more news and links on these please head to our vastly updated mobile section here:&nbsp;<a rel="noopener noreferrer" href="/mobile/" target="_blank">nitrome.com/mobile</a>.</p>
732<p>We really can&rsquo;t leave the mobile conversation without mentioning Nitrome&rsquo;s most successful game to date! Leap Day has just on Monday had it&rsquo;s fourth anniversary and as we have every year, we launched a big content update for the game. For those not in the know Leap Day is a single touch platformer that has a new level every day&hellip;yes that&rsquo;s over 1460 levels at this point! (OS:&nbsp;<a rel="noopener noreferrer" href="http://tinyurl.com/y7arwadt" target="_blank">http://tinyurl.com/y7arwadt</a>&nbsp;GooglePlay:&nbsp;<a rel="noopener noreferrer" href="http://tinyurl.com/y9yzbuah" target="_blank">http://tinyurl.com/y9yzbuah</a>)</p>
733<p>Whew that was a lot to get through but I hope anyone who read it all will agree it was all good stuff. Nitrome as always have even more good things going on behind the scenes so you can look forward to even more news in the future.</p>
734<p>Stay safe everyone!</p>
735<p>From the Nitrome Team</p><p class="the-author">by <b>Nitrome</b></p></div>
736				            </div>
737            <div class="social_block">
738                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1427" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
739                <div class="tweet_social_button social_btn">
740                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1427" data-text="HTML5 Games and more! #Nitrome"></a>
741                    
741<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
742                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
742
743                </div>
744                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_works.xml"></a>
745                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
746            </div>
747            <div class="clear_out"></div>
748        </div>
749                    <div id="post_1426" class="panel_color post corners mn_object">
750            <div class="head_image news_banner"></div>
751            <div class="heading_text background_dark">
752                <h2>
753                    <div class="post_icon news">
754                        
755                    </div>
756                    <span class="post_title">
757                        <a href="/blog/articles/1426/" title="Important Information">
758                        Important Information                        </a>
759                    </span>
760                    <span class="post_date">
761                    Wed, 13 Jun 2018                    </span>
762                </h2>
763            </div>
764            <div class="post_content">
765                                <a class="the-image" href="" title="Important Information">
766                    <img src="http://cdn.nitrome.com/images/uploads/1426-1528236527-newwebsite_blog_image.png" class="post_image"/>
767                </a>
768                					<div class="the-excerpt" style="display:block;"><p>Hello Nitromians,</p>
769<p>It has been a long time since we made a post here and this probably will serve as the final post on the current website.</p>
770<p>This post is to tell you about some important changes we are making largely in reaction to a new European law called GDPR that has came into effect (we will get to that). More importantly Nitrome has changed a lot in the last few years as we have shifted our focus from browser games to mobile and now also PC and console (I hope you guys saw that Bomb Chicken was coming to Nintendo Switch). It was about time we changed the website to reflect that and so the upshot is that there is a new more modern site in development (we will get to that too).</p>
771<p>So what is GDPR?</p>
772<p>Well in a nutshell it&rsquo;s a la&hellip;</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1426);">READ MORE</a></div>
773					<div class="the-content" style="display:none;"><p>Hello Nitromians,</p>
774<p>It has been a long time since we made a post here and this probably will serve as the final post on the current website.</p>
775<p>This post is to tell you about some important changes we are making largely in reaction to a new European law called GDPR that has came into effect (we will get to that). More importantly Nitrome has changed a lot in the last few years as we have shifted our focus from browser games to mobile and now also PC and console (I hope you guys saw that Bomb Chicken was coming to Nintendo Switch). It was about time we changed the website to reflect that and so the upshot is that there is a new more modern site in development (we will get to that too).</p>
776<p>So what is GDPR?</p>
777<p>Well in a nutshell it&rsquo;s a law to help protect European citizens from companies keeping and using data collected about a user without their consent. Though it&rsquo;s aimed at Europeans it is not a requirement that they live in Europe, so in effect any site that has a global audience (like Nitrome.com) needs to react to this change.</p>
778<p>It is a well intentioned law which is hard to argue is bad for people but it does have a lot of impact on existing infrastructure that could not have foreseen needing these permissions. You can read all about GDPR and get more information here <a href="https://www.eugdpr.org" target="_blank">https://www.eugdpr.org</a></p>
779<p>How does it affect Nitrome.com?</p>
780<p>The big and regretful change you probably already noticed is that accounts are no longer a thing. This includes all of your collected avatars, your friend&rsquo;s lists and comments.</p>
781<p>The accounts sadly used information that we could not realistically and retrospectively get permissions for and to keep them active or even keep storing them would mean leaving Nitrome open to a law suit. It may seem drastic, but the effects of such a suit if it were ever brought would likely collapse Nitrome overnight so this was clearly the lesser evil. To be clear we had to do this and there is no way back. We will never be able to bring peoples accounts back because they have been intentionally deleted so please don&rsquo;t ask.</p>
782<p>In addition to the accounts we have completely overhauled our <a title="Privacy Policy" href="/privacy/" target="_self">privacy policy</a>. This explains everything we collect and use your data for. We encourage you to read it and have tried to make it as easy to read as possible but apologies in advance that it&rsquo;s not really a page turner.</p>
783<p>
783So with the bad news out of the way we can move towards the more positive news of a brand new site! We started making it a few weeks back when the extent of GDPR became apparent and it is now well underway. It is modern and should finally work as great on your mobile device as it does your desktop.</p>
784<p>Speaking of mobile, the site is more aimed towards the games we make now so it is less of a browser games portal than it was in the past. As part of this it is mostly ad free with the exception of pages you can play games in the browser on. There will not be an accounts system on the new site, although we may consider making one later.</p>
785<p>With regards to the browser games, they will still be there! We are fully aware of the increasingly diminished support for Flash games in browsers and its impending shutdown in a couple of year&rsquo;s time. We also however don&rsquo;t like the idea of killing games we poured countless hours into making and wiping them from existence. So there is still going to be a dedicated area of the site to access them for as long as Flash games are viable. In addition we have brought a couple of the games to mobile now and we have more on the way. We intend to keep looking at ways we can keep as much of our back catalogue alive as is financially viable to do so going forward.</p>
786<p>Anyone who is interested in seeing all the latest news on our upcoming games or new site should <a title="@Nitrome" href="https://twitter.com/nitrome" target="_blank">follow us on our twitter account</a> (this is where we are our most active). We are very excited about what is in store for Nitrome in the future and we hope as many of you as possible will continue to support our team on our crazy game making adventure.</p>
787<p>The Nitrome team. =)</p><p class="the-author">by <b>Nitrome</b></p></div>
788				            </div>
789            <div class="social_block">
790                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1426" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
791                <div class="tweet_social_button social_btn">
792                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1426" data-text="Important Information #Nitrome"></a>
793                    
793<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
794                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
794
795                </div>
796                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_news.xml"></a>
797                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
798            </div>
799            <div class="clear_out"></div>
800        </div>
801                    <div id="post_1425" class="panel_color post corners mn_object">
802            <div class="head_image preview_banner"></div>
803            <div class="heading_text background_dark">
804                <h2>
805                    <div class="post_icon preview">
806                        
807                    </div>
808                    <span class="post_title">
809                        <a href="/blog/articles/1425/" title="Bomb Chicken - Steam!">
810                        Bomb Chicken - Steam!                        </a>
811                    </span>
812                    <span class="post_date">
813                    Tue, 21 Mar 2017                    </span>
814                </h2>
815            </div>
816            <div class="post_content">
817                					<div class="the-excerpt" style="display:block;"><p>Hi Nitromians,</p>
818<p>we have a new game in development for Steam/PC...yes you read that right for Steam! It's called Bomb Chicken and you play as a Chicken who lays bombs rather than eggs!</p>
819<p>You can't fly so but you can stack the bombs as high as you like to reach places as long as you do it before they all blow up!</p>
820<p>The bombs can be kicked by walking into them which is handy if you want to tackle some of the enemies and they have a multitude of other uses too....a swiss army knife of tricks!</p>
821<p><iframe src="https://www.youtube-nocookie.com/embed/sQtRP2VIcF0" width="500" height="300" frameborder="0"></iframe></p>
822<p>The game is currently on Steam Greenlight which is what we need to go through to get it onto Steam. If anyone has a steam account we would really appreaciate if you could head over to the page and vote for us<a title="greenlight bomb chicken" href="http://steamcommunity.com/sharedfiles/filedetails/?id=884620027" target="_blank"> here</a>&nbsp;</p>
823<p>Finally a lot of people may&hellip;</p><a href="javascript: void(0);" class="read_more_btn" onclick="javascript: openArticle(1425);">READ MORE</a></div>
824					<div class="the-content" style="display:none;"><p>Hi Nitromians,</p>
825<p>we have a new game in development for Steam/PC...yes you read that right for Steam! It's called Bomb Chicken and you play as a Chicken who lays bombs rather than eggs!</p>
826<p>You can't fly so but you can stack the bombs as high as you like to reach places as long as you do it before they all blow up!</p>
827<p>The bombs can be kicked by walking into them which is handy if you want to tackle some of the enemies and they have a multitude of other uses too....a swiss army knife of tricks!</p>
828<p><iframe src="https://www.youtube-nocookie.com/embed/sQtRP2VIcF0" width="500" height="300" frameborder="0"></iframe></p>
829<p>The game is currently on Steam Greenlight which is what we need to go through to get it onto Steam. If anyone has a steam account we would really appreaciate if you could head over to the page and vote for us<a title="greenlight bomb chicken" href="http://steamcommunity.com/sharedfiles/filedetails/?id=884620027" target="_blank"> here</a>&nbsp;</p>
830<p>Finally a lot of people may see a lot of similaritys with our previously announced Steam project Flightless and they do have a lot in common. Flightless has sadly not been worked on for a long time and at this point should be considered cancelled. We may return to the project at some point as we did with Flat Pack/Project Surface but for the moment our sole Steam efforts are going towards Bomb Chicken.</p>
831<p>It may seem strange to some that we have made a similar game to Flightless rather than just pick up Flightless. In truth it is mostly coincidence...we had a new idea and the art went in that direction and ended up similar. We decided it was a good fit for Steam after starting development and the time felt right to give the format another go.&nbsp;</p><p class="the-author">by <b>Mat</b></p></div>
832				            </div>
833            <div class="social_block">
834                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1425" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
835                <div class="tweet_social_button social_btn">
836                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1425" data-text="Bomb Chicken - Steam! #Nitrome"></a>
837                    
837<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
838                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
838
839                </div>
840                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_preview.xml"></a>
841                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
842            </div>
843            <div class="clear_out"></div>
844        </div>
845                    <div id="post_1424" class="panel_color post corners mn_object">
846            <div class="head_image preview_banner"></div>
847            <div class="heading_text background_dark">
848                <h2>
849                    <div class="post_icon preview">
850                        
851                    </div>
852                    <span class="post_title">
853                        <a href="/blog/articles/1424/" title="Flat Pack">
854                        Flat Pack                        </a>
855                    </span>
856                    <span class="post_date">
857                    Tue, 21 Mar 2017                    </span>
858                </h2>
859            </div>
860            <div class="post_content">
861                					<div class="the-content" style="display:block;"><p>Hi Nitromians,</p>
862<p>we have been working hard behind the scenes on some new games and its time to show you some of what were upto. Check out Flat Pack which some of you might recall is following on from an idea we had many years back which we referred to as project surface.</p>
863<p>Essentially it is a 2d game played out on the surface of a 3d object.</p>
864<p>Well this just goes to show that given time we do go back to some things and now in Unity rather than flash this idea seemed much more possible.&nbsp;</p>
865<p>For now this is just a small teaser but there are many more cool things to show on this game at a later date.<iframe src="https://www.youtube-nocookie.com/embed/uDmIZH_vuMY" width="500" height="300" frameborder="0"></iframe></p>
866<p>&nbsp;</p><p class="the-author">by <b>Mat</b></p></div>
867				            </div>
868            <div class="social_block">
869                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1424" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
870                <div class="tweet_social_button social_btn">
871                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1424" data-text="Flat Pack #Nitrome"></a>
872                    
872<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
873                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
873
874                </div>
875                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_preview.xml"></a>
876                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
877            </div>
878            <div class="clear_out"></div>
879        </div>
880                    <div id="post_1422" class="panel_color post corners mn_object">
881            <div class="head_image new_banner"></div>
882            <div class="heading_text background_dark">
883                <h2>
884                    <div class="post_icon new">
885                        
886                    </div>
887                    <span class="post_title">
888                        <a href="/blog/articles/1422/" title="Silly Sausage: Doggy Dessert">
889                        Silly Sausage: Doggy Dessert                        </a>
890                    </span>
891                    <span class="post_date">
892                    Thu, 22 Dec 2016                    </span>
893                </h2>
894            </div>
895            <div class="post_content">
896                					<div class="the-content" style="display:block;"><p>Hi Nitromians,</p>
897<p class="MsoNormal"><span style="font-size: 7.5pt; font-family: Verdana, sans-serif; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">what better way to end the year than with a brand new game? Today we have launched sequel to our stretchy adventure Silly Sausage: Doggy Dessert. Set within a Dessert themed dreamland there are many new obstacles and enemies to deal with from Cherry (on the cake) bombs to Enemy Cream that you literally have to eat through. New to this version are special side challenge rooms with Dog Treat prizes to collect and we even round off the game with an epic boss fight against a wedding cake at the end.&nbsp;</span></p>
898<p><iframe src="https://www.youtube-nocookie.com/embed/hknnmfQlXCY" width="503" height="315" frameborder="0"></iframe></p>
899<p>What are you waiting for? Go Download it now!</p>
900<p><a title="Apple App Store" href="https://itunes.apple.com/app/id1161656633" target="_blank">Apple App Store</a></p>
901<p><a title="Google Play Store" href="https://play.google.com/store/apps/details?id=com.nitrome.sillysausagedoggydessert&amp;hl=en" target="_blank">Google Play Store</a></p><p class="the-author">by <b>Mat</b></p></div>
902				            </div>
903            <div class="social_block">
904                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1422" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
905                <div class="tweet_social_button social_btn">
906                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1422" data-text="Silly Sausage: Doggy Dessert #Nitrome"></a>
907                    
907<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
908                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
908
909                </div>
910                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_new.xml"></a>
911                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
912            </div>
913            <div class="clear_out"></div>
914        </div>
915                    <div id="post_1421" class="panel_color post corners mn_object">
916            <div class="head_image update_banner"></div>
917            <div class="heading_text background_dark">
918                <h2>
919                    <div class="post_icon update">
920                        
921                    </div>
922                    <span class="post_title">
923                        <a href="/blog/articles/1421/" title="Leap Day Winter Update!">
924                        Leap Day Winter Update!                        </a>
925                    </span>
926                    <span class="post_date">
927                    Thu, 22 Dec 2016                    </span>
928                </h2>
929            </div>
930            <div class="post_content">
931                					<div class="the-content" style="display:block;"><p>Hi Nitromians,</p>
932<p><span style="font-size: 7.5pt; font-family: Verdana, sans-serif; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">Christmas is nearly upon us and that means we have some juicy new content to entertain you through the holidays. First up we have just launched a big new winter update for our Leap Day game. Every day this week we have a special winter day to play through and each one will introduce a special new mechanic. There are also two new themes to enjoy and some new winter themed music too!</span><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;"></span></p>
933<p><iframe src="https://www.youtube-nocookie.com/embed/ofv7Rcl9Kro" width="503" height="315" frameborder="0"></iframe></p>
934<p><span style="font-size: 7.5pt; font-family: Verdana, sans-serif;">There is also a special little surprise waiting for you on another special day sometime in the future so keep your eyes peeled for that :)</span></p>
935<p>Download now:</p>
936<p><a title="Apple App Store" href="https://itunes.apple.com/gb/app/leap-day/id1083451870?mt=8" target="_blank">Apple App Store</a></p>
937<p><a title="Google Play Store" href="https://play.google.com/store/apps/details?id=com.nitrome.leapday&amp;hl=en_GB" target="_blank">Google Play store</a></p>
938<p>Have fun!</p><p class="the-author">by <b>Mat</b></p></div>
939				            </div>
940            <div class="social_block">
941                <a class="like_social_button social_btn"><div class="fb-like" data-href="http://www.nitrome.com/blog/articles/?id=1421" data-send="false" data-layout="button_count" data-width="75" data-show-faces="false"></div></a>
942                <div class="tweet_social_button social_btn">
943                    <a href="https://twitter.com/share" class="twitter-share-button tweet_button social_btn" data-lang="en" data-url="http://www.nitrome.com/blog/articles/?id=1421" data-text="Leap Day Winter Update! #Nitrome"></a>
944                    
944<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];
945                    if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="https://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
945
946                </div>
947                <a class="rss_button blog_btn" href="http://www.nitrome.com/blog/rss/rss_update.xml"></a>
948                <a class="keep_button blog_btn" onclick="document.keepMessage(); return false;"></a>
949            </div>
950            <div class="clear_out"></div>
951        </div>
952            </div>
953<script src="//cdn.nitrome.com/scripts/scrollbox.js"></script>
953
954<script>
955    $j('#posts_container').scrollbox();
956</script>
956
957<div id="buttons_new_old_container" class="panel_color corners">
958        <div id="newer_posts_button">
959    </div>   
960    	<div id="page-pos">
961		<a title="Go to page 1 of 76" class="current" href="#">1</a> <a class="paginate" title="Go to page 2 of 76" href="/blog/index.php?page=2&ipp=15">2</a> <a class="paginate" title="Go to page 3 of 76" href="/blog/index.php?page=3&ipp=15">3</a> <a class="paginate" title="Go to page 4 of 76" href="/blog/index.php?page=4&ipp=15">4</a> <a class="paginate" title="Go to page 5 of 76" href="/blog/index.php?page=5&ipp=15">5</a> <a class="paginate" title="Go to page 6 of 76" href="/blog/index.php?page=6&ipp=15">6</a> <a class="paginate" title="Go to page 7 of 76" href="/blog/index.php?page=7&ipp=15">7</a> <a class="paginate" title="Go to page 8 of 76" href="/blog/index.php?page=8&ipp=15">8</a> <a class="paginate" title="Go to page 9 of 76" href="/blog/index.php?page=9&ipp=15">9</a> <a class="paginate" title="Go to page 10 of 76" href="/blog/index.php?page=10&ipp=15">10</a> <a class="paginate" title="Go to page 11 of 76" href="/blog/index.php?page=11&ipp=15">11</a>  ... <a class="paginate" title="Go to page 76 of 76" href="/blog/index.php?page=76&ipp=15">76</a> 	</div>
962        <a id="older_posts_button" href="/blog/?page=2">
963    </a>
964    </div>
965<script>
966    $j('#container').modal();
967</script>
967
968<script>
969    $j(document).ready(function(){
970        $j('#older_posts_button').css({
971                                     "background-image":"url('"+generated_images_path+"older_posts_button.png')",
972                                     "background-repeat":"no-repeat"
973                                     });
974        $j('#newer_posts_button').css({
975                                     "background-image":"url('"+generated_images_path+"newer_posts_button.png')",
976                                     "background-repeat":"no-repeat"
977                                     });
978    });
979    function showModal(message,modal_id,message_id){
980        $j('#container').modal('update',message);
981        $j('#container').modal('show');
982    }
983    function hideModal(modal_id){
984        $j(modal_id).css({display:'none'});
985    }
986    showUserMessage = function(string,item_id,single,type,comment_id){
987        $j('#container').modal('update',string);
988        $j('#container').modal('show');
989    }
990    respan = function(ex){
991		return false;
992    }
993</script>
993
994<script>
995var comment_type = 'blog';
996var can_unlock = 0;
997document.keepMessage = function(){
998  var messageNum= 0;
999   message = new Array();
1000   message[0]='Did your parents not teach you to share?';
1001   message[1]='This has nothing at all to do with Castles!';
1002   message[2]='This isn\'t exactly the Facebook alternative it eludes to!';
1003   message[3]='Thats\'s not very social of you!';
1004   message[4]='What?! Oh... you must of missed the share button. It\'s just over to the left!';
1005   message[5]='Keep it where exactly? In the attic gathering dust?';
1006   message[6]='Don\'t be so selfish!';
1007   message[7]='WHY? ...Why would you keep this all for yourself?';
1008   message[8]='What did you actually expect to happen?';
1009   message[9]='This is a useless link built entirely to entertain ourselves!';
1010   message[10]='Keep? it\'s not yours to keep, it\'s Nitrome\'s, not yours!';
1011   message[11]='Mine all mine! My... precious!';
1012   message[12]='Finders Keepers... ...Losers Weepers!';
1013   message[13]='Meaning - To retain the possession of';
1014   message[14]='You have now just accessed a secret Nitrome game... Nah just kidding!';
1015   message[15]='How many times have you clicked this link now?';
1016   if(can_unlock){message[16]='This is my avatar... err... I mean blog post!';}
1017   var messagesMax = message.length;   
1018   messageNum = Math.floor((messagesMax)*Math.random());
1019   var avatarChance = .05;
1020   var thePivot = Math.random();
1021   if(thePivot >= avatarChance||!can_unlock){
1022        alert(message[messageNum]);
1023   }else{
1024        if(confirm('So... you really want this avatar, huh?')){
1025            blogAvt.attemptUnlock();
1026            can_unlock = 0;
1027        }
1028   }
1029}
1030var loading_more_content = false;
1031var post_pages = {};
1032var blogAvatarLoaded = function(obj){
1033    if(typeof(obj) != 'undefined' && typeof(obj.unlocked) != 'undefined' && !obj.unlocked){
1034        can_unlock = 1;
1035        $j('.blg_avt, .blg_avt img').hide();
1036    }else{
1037        $j('.blg_avt, .blg_avt img').hide();
1038    }
1039}
1040function loadMoreContent(post_id){
1041    if(typeof(post_pages[''+post_id])=="undefined"){
1042        post_pages[''+post_id] = 1;
1043    }else{
1044        post_pages[''+post_id]++;
1045    }
1046    extraComments(post_id,post_pages[''+post_id],2,1);
1047}
1048function castJamVote(item){
1049    var url = "/jam/interchange/json/theme-vote/";
1050    var data = {"chosen_theme":item};
1051    var success = function(retData){
1052	if(retData.error){
1053	    showUserMessage(retData.error);
1054	}
1055	else if(retData.message){
1056	    showUserMessage(retData.message);
1057	}
1058    }
1059    var dataType = 'json';
1060    $j.ajax({
1061	url: url,
1062	data: data,
1063	success: success,
1064	dataType: dataType
1065    });
1066}
1067</script>
1067
1068<style>
1069    .blg_avt {
1070        background:url('//cdn.nitrome.com/styles/images/avt/ig_avatargift_16x16-bg.png') transparent;
1071        z-index: 999;
1072        width:14px;
1073        height:16px;
1074        top: 170px;
1075        left: 715px;
1076    }
1077    #page-pos {
1078	width: 309px;
1079	display: inline-block;
1080	text-align: center;
1081	position: absolute;
1082	top: 0;
1083	background: #fff;
1084	font-weight: bold;
1085	font-size: 12px;
1086	margin: 0 auto;
1087	padding: 8px;
1088	border-radius: 4px;
1089	left: 114px;
1090	color: #999;
1091	top: 5px;
1092	height: 14px;
1093    }
1094    #older_posts_button {
1095	background: transparent;
1096	height: 30px;
1097	left: 445px;
1098	position: absolute;
1099	top: 5px;
1100	width: 104px;
1101	z-index: 200;
1102	float: right;
1103    }
1104    .post p.the-author{
1105	color:#222;
1106	font-size:12px;
1107	font-family:arial, helvetica, san-serif;
1108    }
1109</style>	</div>
1110	<div id="skyscraper_shadow">
1111	</div>
1112	<div id="skyscraper_box">
1113	</div>
1114	<div id="skyscraper_description">
1115	</div>
1116	<!--new box-->
1117	
1118	<div id="left_top_container">
1119	    <div id="left_top_bar">
1120	    </div>
1121	    <div id="top_game" class="icon"></div>
1122	    <div id="left_top_box" class="border_color">
1123	    </div>
1124	    <div id="top_five_bg" class="panel_color">
1125	    </div>
1126	    <div id='top_five_link_1' class="top_five_link_ol">
1127	    </div>
1128	    <div id='top_five_link_2' class="top_five_link_ol">
1129	    </div>
1130	    <div id='top_five_link_3' class="top_five_link_ol">
1131	    </div>
1132	    <div id='top_five_link_4' class="top_five_link_ol">
1133	    </div>
1134	    <div id='top_five_link_5' class="top_five_link_ol">
1135	    </div>
1136	    <div id='top_five_text_1' class="top_five_link_ol2">
1137	    </div>
1138	    <div id='top_five_text_2' class="top_five_link_ol2">
1139	    </div>
1140	    <div id='top_five_text_3' class="top_five_link_ol2">
1141	    </div>
1142	    <div id='top_five_text_4' class="top_five_link_ol2">
1143	    </div>
1144	    <div id='top_five_text_5' class="top_five_link_ol2">
1145	    </div>
1146	    <div id="top_five_overlay_1"></div>
1147	    <div id="top_five_overlay_2"></div>
1148	    <div id="top_five_overlay_3"></div>
1149	    <div id="top_five_overlay_4"></div>
1150	    <div id="top_five_overlay_5"></div>
1151	    <div id="top_five_1" class="top_five_large corners">
1152	    </div>
1153	    <div id="top_five_2" class="top_five_small corners">
1154	    <div id="tf_inner_bg_2" class="top_five_inner_bg panel_color corners_left"></div>
1155	    </div>
1156	    <div id="top_five_3" class="top_five_small corners">
1157	    <div id="tf_inner_bg_3" class="top_five_inner_bg panel_color corners_left"></div>
1158	    </div>
1159	    <div id="top_five_4" class="top_five_small corners">
1160	    <div id="tf_inner_bg_4" class="top_five_inner_bg panel_color corners_left"></div>
1161	    </div>
1162	    <div id="top_five_5" class="top_five_small corners">
1163	    <div id="tf_inner_bg_5" class="top_five_inner_bg panel_color corners_left"></div>
1164	    </div>
1165	</div>
1166	<div id="left_top_shadow">
1167	</div>
1168	<div id="left_bottom_shadow">
1169	</div>
1170	<div id="left_bottom_container">
1171	    <div id="left_bottom_bar">
1172	    </div>
1173	    <div id="left_bottom_bg" class="border_color">
1174	</div>
1175	</div>
1176	<div id="corporate_shadow">
1177	</div>
1178	<div id="corporate">
1179            <div id="corporate_copyright">
1180                <div id="corporate_img"><img src="//cdn.nitrome.com/styles/images/corporate_img.png" alt="cuboy image"/></div>
1181            </div>
1182	    <div id="corporate_spacer" ></div>
1183            <div id="home_corp" class="corp_link"  onmouseover="corpRollover('home')" onmouseout="corpRollout('home')">
1184            </div>
1185            <div id="links_corp" class="corp_link">
1186            </div>
1187            <div id="faqs_corp" class="corp_link">
1188            </div>
1189            <div id="licensing_corp" class="corp_link">
1190            </div>
1191            <div id="distribution_corp" class="corp_link">
1192            </div>
1193            <div id="contact_corp" class="corp_link">
1194            </div>
1195            <div id="credits_corp" class="corp_link">
1196            </div>
1197            <div id="jobs_corp" class="corp_link">
1198            </div>
1199            <a id="corporate_facebook" href="http://www.facebook.com/nitrome/"></a>
1200            <a id="corporate_twitter" href="http://www.twitter.com/nitrome/"></a>
1201            <a id="corporate_youtube" href="http://www.youtube.com/nitrome/"></a>
1202        </div>
1203        <!-- new box -->
1204        <div id="new_elem_top_bar">
1205        </div>
1206        <div id="new_elem_top_bar"></div>
1207        <div id="new_elem_box"></div>
1208        <div id="new_elem_box_inner">
1209            <div id="fb-frame" class="corners">
1210                <div id="fb-inset" class="corners"><div id="fb-root"></div>
1211				<div class="twitter-logo"></div>
1212				<div class="twitter-holster">
1213					<a href="https://twitter.com/Nitrome" class="twitter-follow-button" data-show-count="false" data-size="large">Follow @Nitrome</a>
1214					
1214<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
1214
1215				</div>
1216                </div>
1217                <div id="fb-icon" class="corners"></div>
1218            </div>
1219        </div>
1220		<style>
1221			div#fb-inset {
1222				background-color: #FFF !important;
1223				border-radius: 0 0 0 0 !important;
1224				float: left !important;
1225				height: 63px !important;
1226				left: 0 !important;
1227				margin-left: 3px !important;
1228				margin-top: 3px !important;
1229				position: relative !important;
1230				text-align: left !important;
1231				top: 0 !important;
1232				width: 227px !important;
1233				z-index: 127 !important;
1234				border-radius: 1px !important;
1235			}
1236			div#fb-frame {
1237				background-color: #00aced !important;
1238				border: 1px solid #008cbd !important;
1239				border-radius: 0 0 0 0 !important;
1240				float: left !important;
1241				height: 69px !important;
1242				left: 0 !important;
1243				margin-left: 0 !important;
1244				margin-top: 0 !important;
1245				position: relative !important;
1246				top: 0 !important;
1247				width: 298px !important;
1248				z-index: 126 !important;
1249			}
1250			div#fb-icon {
1251				background-image: url(//cdn.nitrome.com/styles/images/twitterimg.png) !important;
1252				background-position: -1px -1px !important;
1253				float: left !important;
1254				height: 61px !important;
1255				left: -2px !important;
1256				margin-left: 4px !important;
1257				margin-top: 4px !important;
1258				position: relative !important;
1259				top: 0 !important;
1260				width: 64px !important;
1261				background-size: 203% !important;
1262			}
1263			.twitter-holster {
1264				top: 17px;
1265				position: absolute;
1266				left: 68px;
1267			}
1268			.twitter-logo {
1269				top: 4px;
1270				position: absolute;
1271				left: 4px;
1272				background-image: url(//cdn.nitrome.com/styles/images/nitrome-twitter.png) !important;
1273				width: 55px;
1274				height: 55px;
1275				background-size: 55px;
1276			}
1277		</style>
1278        <!-- end of new box -->
1279        <!-- new box 2 -->
1280	<div id="new_elem_container_2">
1281	    <div id="new_elem_top_bar_2"><div id="new_elem_title_2"></div>
1282
1283	    </div>
1284	    <div id="new_elem_box_2" class="border_color"></div>
1285	    <div id="new_elem_box_inner_2">
1286		<div id="small-video">
1287		    <div id="smallplayer">An error occured, please check that you have Flash Player 10 or higher.</div>
1288		</div>
1289	    </div>
1290	</div>
1291	<div id="new_elem_shadow_2"></div>
1292	<div id="left_skyscraper_shadow"></div>
1293	<div id="mu_3_shadow_ng"></div>
1294	
1294<script type="text/javascript" src="//cdn.nitrome.com/scripts/vars.js"></script>
1294
1295	
1295<script type="text/javascript" src="//cdn.nitrome.com/scripts/globalconfig_3.0.11.js"></script>
1295
1296		
1296<script>
1297		$j('#login_bg').change(function(){
1298			$j('#profile_link_top').attr('href','/profile/');
1299		});
1300		if(typeof showUserMessage != 'function'){
1301		    showUserMessage = function(string){
1302				$j('#container').modal('update',string);
1303				$j('#container').modal('show');
1304		    }
1305		}
1306		$j('#container').modal();
1307	</script>
1307
1308		
1308<script type="text/javascript" src="//cdn.nitrome.com/scripts/sideads_2.5.51.js"></script>
1308
1309	
1309<script type="text/javascript" src="//cdn.nitrome.com/scripts/newgames.js"></script>
1309
1310	
1310<script type="text/javascript" src="//cdn.nitrome.com/scripts/common-1_2.5.2.js"></script>
1310
1311	
1311<script type="text/javascript" src="//cdn.nitrome.com/scripts/small-videos_2.5.2.js"></script>
1311
1312		
1312<script type="text/javascript" src="//cdn.nitrome.com/scripts/blog_2.5.1.js"></script>
1312		<div id="left_skyscraper_container" class="border_color">
1313	    <div id="left_skyscraper_box">
1314		<div id="left_skyscraper_ad">
1315		    
1315<script type='text/javascript'>
1316			googletag.cmd.push(function() { googletag.display('left_skyscraper_ad'); });
1317		    </script>
1317
1318		</div>
1319		<div id="left_skyscraper_description">
1320		    
1321		</div>
1322	    </div>
1323	</div>
1324	<!-- end of new box 2 -->
1325	<div id="mu_2_container" class="border_color">
1326	    <div id="mu_2_ad">
1327		    
1327<script type='text/javascript'>
1328			    googletag.cmd.push(function() { googletag.display('mu_2_ad'); });
1329		    </script>
1329
1330	    </div>
1331	    <div id="mu_2_description"></div>
1332	</div>
1333	<div id="banner_ad">
1334	    
1334<script type='text/javascript'>
1335            googletag.cmd.push(function() { googletag.display('banner_ad'); });
1336        </script>
1336
1337	</div>
1338	<div id="skyscraper_ad">
1339        
1339<script type='text/javascript'>
1340		    googletag.cmd.push(function() { googletag.display('skyscraper_ad'); });
1341	    </script>
1341
1342	</div>
1343	
1343<script type="text/javascript">
1344			//GA_googleFillSlot("cpmstar_1_1");
1345	</script>
1345
1346		<div id="colophon_mid" class="colophon">
1347	    <center><a id="terms_footer" href="/eula/" title="Terms of Service">Terms of Service & EULA</a><span class="seperator_pipe info_color">|</span><a id="privacy_footer" href="/privacy/" title="Privacy Policy">Privacy Policy</a><span class="seperator_pipe info_color">|</span><a id="cookies_footer" href="/privacy/#cookies" title="Learn about our Cookie useage">Cookie Policy</a><span class="seperator_pipe info_color">|</span><a href="/dmca/" title="DMCA Policy">DMCA Policy</a></center>
1348	    <div style="clear:both"></div>
1349	</div>
1350	<div id="colophon_left" class="colophon">
1351	    <center><a id="terms_footer" href="/eula/" title="Terms of Service">Terms of Service & EULA</a><span class="seperator_pipe info_color">|</span><a id="privacy_footer" href="/privacy/" title="Privacy Policy">Privacy Policy</a><span class="seperator_pipe info_color">|</span><a id="cookies_footer" href="/privacy/#cookies" title="Learn about our Cookie useage">Cookie Policy</a><span class="seperator_pipe info_color">|</span><a href="/dmca/" title="DMCA Policy">DMCA Policy</a></center>
1352	    <div style="clear:both"></div>
1353	</div>
1354	<div id="colophon_right" class="colophon">
1355	    <center><a id="terms_footer" href="/eula/" title="Terms of Service">Terms of Service & EULA</a><span class="seperator_pipe info_color">|</span><a id="privacy_footer" href="/privacy/" title="Privacy Policy">Privacy Policy</a><span class="seperator_pipe info_color">|</span><a id="cookies_footer" href="/privacy/#cookies" title="Learn about our Cookie useage">Cookie Policy</a><span class="seperator_pipe info_color">|</span><a href="/dmca/" title="DMCA Policy">DMCA Policy</a></center>
1356	    <div style="clear:both"></div>
1357	</div>
1358	<div id="colophon_top" class="colophon">
1359	    <center><a id="terms_footer" href="/eula/" title="Terms of Service">Terms of Service & EULA</a><span class="seperator_pipe info_color">|</span><a id="privacy_footer" href="/privacy/" title="Privacy Policy">Privacy Policy</a><span class="seperator_pipe info_color">|</span><a id="cookies_footer" href="/privacy/#cookies" title="Learn about our Cookie useage">Cookie Policy</a><span class="seperator_pipe info_color">|</span><a href="/dmca/" title="DMCA Policy">DMCA Policy</a></center>
1360	    <div style="clear:both"></div>
1361	</div>
1362	<div id="colophon_bottom" class="colophon">
1363	    <center><a id="terms_footer" href="/eula/" title="Terms of Service">Terms of Service & EULA</a><span class="seperator_pipe info_color">|</span><a id="privacy_footer" href="/privacy/" title="Privacy Policy">Privacy Policy</a><span class="seperator_pipe info_color">|</span><a id="cookies_footer" href="/privacy/#cookies" title="Learn about our Cookie useage">Cookie Policy</a><span class="seperator_pipe info_color">|</span><a href="/dmca/" title="DMCA Policy">DMCA Policy</a></center>
1364	    <div style="clear:both"></div>
1365	</div>
1366</div><!-- Google tag GA4 (gtag.js) -->
vendor: 65 bytes, lines 1366-1367
1366
1367<script async src="https://www.googletagmanager.com/gtag/js?id=
1367G-FSRY7FRZ5L
vendor: 13 bytes, line 1367
1367"></script>
1368<script>
1369    
vendor: 144 bytes, lines 1369-1373
1369window.dataLayer = window.dataLayer || [];
1370    function gtag(){dataLayer.push(arguments);}
1371    gtag('js', new Date());
1372
1373    gtag('config', '
1373G-FSRY7FRZ5L
vendor: 5 bytes, line 1373
1373');
1374</script>
1374
1375<!-- end ga4 -->
1376<script type="text/javascript">
1377    window.setTimeout('checkPlayerDefined();',1000);
1378    function checkPlayerDefined(){
1379	if(typeof(smallplayer) == 'undefined'){
1380	    smallplayer = document.getElementById('smallplayer');
1381	}
1382    }
1383</script>
1383
1384<script src="//cdn.nitrome.com/scripts/avatar_2.5.3.js"></script>
1384
1385<style>
1386.ftr_avt {
1387    background: url("//cdn.nitrome.com/styles/images/avt/ig_avatargift_32x32-bg.png") transparent;
1388    top: 1358px;
1389    left: 6px;
1390    z-index: 999;
1391}
1392</style>
1393<script src="//cdn.nitrome.com/scripts/tickerUpdates.js"></script>
1393
1394<audio id="ticker_alert_sfx">
1395    <source src="//cdn.nitrome.com/styles/sfx/ticker_alert.ogg" type="audio/ogg">
1396    <source src="//cdn.nitrome.com/styles/sfx/ticker_alert.mp3" type="audio/mpeg">
1397    <source src="//cdn.nitrome.com/styles/sfx/ticker_alert.wav" type="audio/wav">
1398</audio>
1399
1400<script>
1401    var tickMgr = new TickerUpdates();
1402    
1403    (function(){
1404	///////////////////////////////////////////
1405	// CHECK FOR MAINTENANCE MODE ACTIVATION //
1406	///////////////////////////////////////////
1407	var req = new XMLHttpRequest();
1408	req.open('GET', document.location, false);
1409	req.send(null);
1410	var headers = req.getAllResponseHeaders().toLowerCase();
1411	var maintenance_status = headers.search('x-maintenance-mode-active');
1412	if(maintenance_status != -1){
1413	    document.getElementsByTagName('body')[0].innerHTML += '<div id="maintenance-mode-active" onclick="javascript: closeMaintenanceWindow();"><h1>Maintenance mode active!</h1><p>People will not be able to view this site whilst maintenance mode is active!</p></div>';
1414	    $j('#maintenance-mode-active h1').css(
1415	    {
1416            "font-size": "24px",
1417            "font-weight": "bold",
1418            "color": "#ca0000",
1419            "text-transform":"uppercase",
1420            "text-decoration":"underline"
1421	    });
1422
1423	    $j('#maintenance-mode-active').css(
1424	    {
1425            "background": "rgba(255,255,255,.8)",
1426            "position": "fixed",
1427            "bottom": 0,
1428            "z-index": 9999,
1429            "padding": "20px",
1430            "font-size": "14px",
1431            "border": "2px solid #ca0000",
1432            "box-shadow": "0 0 15px rgba(0,0,0,.5)",
1433            "width": "auto",
1434            "font-weight": "bold",
1435            "color": "#ca0000",
1436            "margin-left": "50%",
1437            "width":"368px",
1438            "left":"-184px",
1439            "cursor":"pointer",
1440            "margin-bottom":"20px"
1441	    });
1442	    window.closeMaintenanceWindow = function(){
1443		$j('#maintenance-mode-active').hide();
1444	    }
1445	}
1446    })();
1447</script>
1447
1448<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-0e5092abdabfb2d9bb8","applicationID":"960248169","transactionName":"YwAHY0pQChVZABdbDVpKMEVRHgYKVwRMWwxQAB0ZSFkU","queueTime":0,"applicationTime":110,"atts":"T0cEFQJKGRs=","errorBeacon":"bam.nr-data.net","agent":""}</script>
1448</body>
1449</html>
1450<!-- load: 0.091003179550171-->
1451<!-- date/time: 24, Sep 2026 / 09:07:01-->

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.