diff --git a/Elm.cabal b/Elm.cabal
--- a/Elm.cabal
+++ b/Elm.cabal
@@ -1,6 +1,6 @@
 
 Name:                Elm
-Version:             0.4.0.3
+Version:             0.4.0.4
 Synopsis:            The Elm language module.
 Description:         Elm aims to make client-side web-development more pleasant.
                      It is a statically/strongly typed, functional reactive
@@ -22,7 +22,7 @@
 Build-type:          Simple
 
 Extra-source-files:  changelog.txt
-Data-files:          elm-runtime-0.4.0.3.js
+Data-files:          elm-runtime-0.4.0.4.js
 Cabal-version:       >=1.8
 
 source-repository head
diff --git a/elm-runtime-0.4.0.3.js b/elm-runtime-0.4.0.3.js
deleted file mode 100644
--- a/elm-runtime-0.4.0.3.js
+++ /dev/null
@@ -1,90 +0,0 @@
-var Guid=function(){var g=0;return{guid:function(){return g+=1}}}(),Foreign=function(){var g=function(a){for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],b];return b},c=function(a){for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return b},b=function(a){return a.slice(1)},a=function(a){return["Tuple"+a.length].concat(a)};return{JavaScript:{castJSBoolToBool:function(a){return a},castBoolToJSBool:function(a){return a},castJSNumberToFloat:function(a){return a},castFloatToJSNumber:function(a){return a},
-castJSNumberToInt:function(a){return~~a},castIntToJSNumber:function(a){return a},Experimental:{castJSElementToElement:function(a){return function(b){return function(c){return["Element",Guid.guid(),["EExternalHtml",c],a,b,1,Nothing,Nothing]}}},castElementToJSElement:function(a){return Render.render(a)}},castJSArrayToList:g,castListToJSArray:c,castJSStringToString:g,castStringToJSString:function(a){return"string"===typeof a?a:c(a).join("")},castTupleToJSTuple2:b,castTupleToJSTuple3:b,castTupleToJSTuple4:b,
-castTupleToJSTuple5:b,castJSTupleToTuple2:a,castJSTupleToTuple3:a,castJSTupleToTuple4:a,castJSTupleToTuple5:a}}}(),ElmJSON=function(){function g(a){return function(h){function f(a){switch(a[0]){case "JsonNull":return null;case "JsonString":return b.castStringToJSString(a[1]);case "JsonObject":var j={},a=a[1][1],l;for(l in a)j[l]=f(a[l]);return j;case "JsonArray":j=b.castListToJSArray(a[1]);for(l=j.length;l--;)j[l]=f(j[l]);return j;default:return a[1]}}return JSON.stringify(f(["JsonObject",h]),null,
-b.castStringToJSString(a))}}function c(a){function h(a){switch(typeof a){case "string":return["JsonString",b.castJSStringToString(a)];case "number":return["JsonNumber",b.castJSNumberToFloat(a)];case "boolean":return["JsonBool",b.castJSBoolToBool(a)];case "object":if(null===a)return["JsonNull"];for(var j in a)a[j]=h(a[j]);return a instanceof Array?["JsonArray",b.castJSArrayToList(a)]:["JsonObject",["JSON",a]]}}var a=JSON.parse(a),f;for(f in a)a[f]=h(a[f]);return["JSON",a]}var b=Foreign.JavaScript;
-return{empty:["JSON",{}],singleton:function(a){return function(h){var f={};f[b.castStringToJSString(a)]=h;return["JSON",f]}},insert:function(a){return function(h){return function(f){var f=f[1],c={},j;for(j in f)c[j]=f[j];c[b.castStringToJSString(a)]=h;return["JSON",c]}}},lookup:function(a){return function(c){var f=b.castStringToJSString(a);return c[1].hasOwnProperty(f)?Just(c[1][f]):Nothing}},findWithDefault:function(a){return function(c){return function(f){var g=b.castStringToJSString(c);return f[1].hasOwnProperty(g)?
-f[1][g]:a}}},remove:function(a){return function(c){var c=c[1],f={},g;for(g in c)f[g]=c[g];delete f[b.castStringToJSString(a)];return["JSON",f]}},toPrettyJSString:g,toJSString:g(""),fromJSString:c,toPrettyString:function(a){return function(c){return b.castJSStringToString(g(a)(c))}},toString:function(a){return b.castJSStringToString(g("")(a))},fromString:function(a){return c(b.castStringToJSString(a))},toList:function(a){var a=a[1],c=[],f;for(f in a)c.push(Value.Tuple(b.castJSStringToString(f),a[f]));
-return b.castJSArrayToList(c)},fromList:function(a){for(var a=b.castListToJSArray(a),c={},f=a.length;f--;)c[b.castStringToJSString(a[f][1])]=a[f][2];return["JSON",c]},JsonString:function(a){return["JsonString",a]},JsonNumber:function(a){return["JsonNumber",a]},JsonBool:function(a){return["JsonBool",a]},JsonNull:["JsonNull"],JsonArray:function(a){return["JsonArray",a]},JsonObject:function(a){return["JsonObject",a]}}}();Foreign.JavaScript.JSON=ElmJSON;
-var Value=function(){function g(a){if(0==a.length)return a;for(var a=a.replace(/"/g,"&#34;").replace(/'/g,"&#39;").replace(/</g,"&#60;").replace(/>/g,"&#62;").replace(/\n/g,"<br/>"),a=a.split("<br/>"),b=a.length;b--;){var c=a,g=b,j;j=a[b];if(0!=j.length){j=j.split("");" "==j[0]&&(j[0]="&nbsp;");for(var l=j.length;--l;)" "==j[l][0]&&" "==j[l-1]&&(j[l-1]+=j[l],j[l]="");for(l=j.length;l--;)if(1<j[l].length&&" "==j[l][0]){for(var d=j[l].split(""),e=d.length-2;0<=e;e-=2)d[e]="&nbsp;";j[l]=d.join("")}j=
-j.join("")}c[g]=j}return a.join("<br/>")}var c=function(a,b){if("object"===typeof a){if(a===b)return!0;if(a.length!==b.length)return!1;for(var f=a.length;f--;)if(!c(a[f],b[f]))return!1;return!0}return a===b},b=function(a){if("boolean"===typeof a)return a?"True":"False";if("number"!==typeof a){if("string"===typeof a&&2>a.length)return"'"+a+"'";if(a[0]){if("Tuple"===a[0].substring(0,5)){for(var c="",f=a.length;--f;)c=","+b(a[f])+c;","===c[0]&&(c=c.substring(1));return"("+c+")"}if("Cons"===a[0])for(var f=
-"string"===typeof a[1]?'"':"]",g="string"===typeof a[1]?"":",",j="string"===typeof a[1]?function(a){return a}:b,c=("string"===typeof a[1]?'"':"[")+j(a[1]),a=a[2];;)if("Cons"===a[0])c+=g+j(a[1]),a=a[2];else return c+f;else{if("Nil"===a[0])return"[]";if("JSON"===a[0])return"(JSON.fromList "+b(ElmJSON.toList(a))+")";c="";for(f=a.length;--f;)c=" "+b(a[f])+c;c=a[0]+c;return 1<a.length?"("+c+")":c}}}return a+""};return{eq:c,str:function(a){for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],b];return b},show:function(a){return Text.monospace(g(b(a)))},
-Tuple:function(){var a=arguments.length,b=Array(a+1);for(b[0]="Tuple"+arguments.length;a--;)b[a+1]=arguments[a];return b},append:function(a,b){if("string"===typeof a&&"string"===typeof b)return a.concat(b);if("Nil"===a[0])return b;for(var c=["Cons",a[1],["Nil"]],g=c,a=a[2];"Cons"===a[0];)g[2]=["Cons",a[1],["Nil"]],a=a[2],g=g[2];g[2]=b;return c},listToArray:function(a){for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return b},toText:function(a){if("string"===typeof a)return g(a);for(var b=[];"Cons"===
-a[0];)b.push(a[1]),a=a[2];return g(b.join(""))},properEscape:g,getTextSize:function(a,b,c){var g=document.createElement("div");g.innerHTML=c;g.style.textAlign="left";0<a&&(g.style.width=a+"px");g.style.visibility="hidden";g.style.styleFloat="left";g.style.cssFloat="left";document.body.appendChild(g);c=window.getComputedStyle(g);a=c.getPropertyValue("width").slice(0,-2)-0;c=c.getPropertyValue("height").slice(0,-2)-0;document.body.removeChild(g);delete g;return[Math.ceil(a),Math.ceil(Math.max(b,c))]},
-getSize:function(a){a=a.cloneNode(!0);a.style.visibility="hidden";a.style.styleFloat="left";a.style.cssFloat="left";document.body.appendChild(a);var b=a.offsetWidth,c=a.offsetHeight;document.body.removeChild(a);delete a;return[b,c]},getExcess:function(a){a=a.cloneNode(!0);a.style.visibility="hidden";a.style.styleFloat="left";a.style.cssFloat="left";document.body.appendChild(a);var b=a.offsetWidth,c=a.offsetHeight,g=window.getComputedStyle(a),j=g.getPropertyValue("width").slice(0,-2)-0,g=g.getPropertyValue("height").slice(0,
--2)-0;document.body.removeChild(a);delete a;return[b-j,c-g]},groupForms:function(a){for(var a=Foreign.JavaScript.castListToJSArray(a),b=[],c=[],g=a.length;g--;){var j=a[g];switch(j[4][0]){case "FElement":0<c.length&&(b.push(c),c=[]);b.push(j);break;default:c.push(j)}}0<c.length&&b.push(c);return b}}}(),List=function(){function g(a){return function(b){if("Nil"===b[0])return b;"Cons"!==b[0]&&d("map");for(var i=["Cons",a(b[1]),["Nil"]],e=i,b=b[2];"Cons"===b[0];)e[2]=["Cons",a(b[1]),["Nil"]],b=b[2],e=
-e[2];return i}}function c(a){return function(b){return function(i){var e=b;if("Nil"===i[0])return e;for("Cons"!==i[0]&&d("foldl");"Cons"===i[0];)e=a(i[1])(e),i=i[2];return e}}}function b(a){return function(b){return function(i){var e=b;if("Nil"===i[0])return e;"Cons"!==i[0]&&d("foldr");for(var c=[];"Cons"===i[0];)c.push(i[1]),i=i[2];for(i=c.length;i--;)e=a(c[i])(e);return e}}}function a(a){return function(d){var i;"Cons"!==d[0]?i=void 0:(i=d[1],d=d[2],i=c(a)(i)(d));return i}}function h(a){return function(b){return function(i){if("Nil"===
-i[0])return["Cons",b,["Nil"]];"Cons"!==i[0]&&d("scanl");for(var e=[b];"Cons"===i[0];)b=a(i[1])(b),e.push(b),i=i[2];for(var i=["Nil"],c=e.length;c--;)i=["Cons",e[c],i];return i}}}function f(a){return function(d){a:{for(var i=[function(a){return"Nil"!==a[0]?void 0:["Tuple2",["Nil"],["Nil"]]},function(d){if("Cons"===d[0]){var b=d[1],d=d[2];var i=f(a)(d);"Tuple2"!==i[0]?b=void 0:(d=i[1],i=i[2],b=a(b)?["Tuple2",["Cons",b,d],i]:["Tuple2",d,["Cons",b,i]]);return b}}],b=i.length;b--;){var e=i[b](d);if(void 0!==
-e){d=e;break a}}d=void 0}return d}}function n(a){a:{for(var d=[function(a){return"Nil"!==a[0]?void 0:["Tuple2",["Nil"],["Nil"]]},function(a){if("Cons"!==a[0])a=void 0;else if(a=["Tuple2",a[1],n(a[2])],"Tuple2"!==a[0]||"Tuple2"!==a[1][0])a=void 0;else var d=a[1][1],b=a[1][2],a="Tuple2"!==a[2][0]?void 0:["Tuple2",["Cons",d,a[2][1]],["Cons",b,a[2][2]]];return a}],b=d.length;b--;){var e=d[b](a);if(void 0!==e){a=e;break a}}a=void 0}return a}function j(a){return function(d){a:{for(var b=[function(a){return"Nil"!==
-a[0]?void 0:["Nil"]},function(a){if("Cons"===a[0]){var d=a[1];return"Nil"!==a[2][0]?void 0:["Cons",d,["Nil"]]}},function(d){if("Cons"===d[0]){var b=d[1];if("Cons"===d[2][0]){var i=d[2][1],d=d[2][2];return["Cons",b,["Cons",a,j(a)(["Cons",i,d])]]}}}],e=b.length;e--;){var c=b[e](d);if(void 0!==c){d=c;break a}}d=void 0}return d}}function l(a){return function(d){a:{for(var b=[function(a){return"Nil"!==a[0]?void 0:["Nil"]},function(a){if("Cons"===a[0]){var d=a[1];return"Nil"!==a[2][0]?void 0:d}},function(d){if("Cons"===
-d[0]){var b=d[1];if("Cons"===d[2][0]){var e=d[2][1],d=d[2][2];return Value.append(b,Value.append(a,l(a)(["Cons",e,d])))}}}],e=b.length;e--;){var c=b[e](d);if(void 0!==c){d=c;break a}}d=void 0}return d}}var d=function(a){throw"Function '"+a+"' expecting a list!";},e=c(function(a){return function(d){return["Cons",a,d]}})(["Nil"]),u=b(function(a){return function(d){return Value.append(a,d)}})(["Nil"]),q=c(function(a){return function(d){return a&&d}})(!0),s=c(function(a){return function(d){return a||
-d}})(!1),k=c(function(a){return function(d){return a+d}})(0),m=c(function(a){return function(d){return a*d}})(1),r=a(function(a){return function(d){return Math.max(a,d)}}),v=a(function(a){return function(d){return Math.min(a,d)}});return{head:function(a){if("Cons"!==a[0])throw"Error: 'head' only accepts lists of length greater than one.";return a[1]},tail:function(a){if("Cons"!==a[0])throw"Error: 'tail' only accepts lists of length greater than one.";return a[2]},last:function(a){if("Cons"!==a[0])throw"Error: 'last' only accepts lists of length greater than one.";
-for(var d=a[1];"Cons"===a[0];)d=a[1],a=a[2];return d},map:g,foldl:c,foldr:b,foldl1:a,foldr1:function(a){return function(b){if("Nil"===b[0])throw"'foldr1' requires an non-empty list.";"Cons"!==b[0]&&d("foldr1");for(var e=[];"Cons"===b[0];)e.push(b[1]),b=b[2];for(var b=e.pop(),c=e.length;c--;)b=a(e[c])(b);return b}},scanl:h,scanl1:function(a){return function(d){if("Cons"!==d[0])throw"Error: 'scanl1' requires a list of at least length 1.";return h(a)(d[1])(d[2])}},filter:function(a){return function(b){if("Nil"===
-b[0])return b;"Cons"!==b[0]&&d("filter");for(var e=[];"Cons"===b[0];)a(b[1])&&e.push(b[1]),b=b[2];for(var b=["Nil"],c=e.length;c--;)b=["Cons",e[c],b];return b}},length:function(a){for(var d=0;"Cons"===a[0];)d+=1,a=a[2];return d},reverse:e,concat:u,concatMap:function(a){return function(d){return u(g(a)(d))}},and:q,or:s,forall:function(a){return c(function(d){return function(b){return b&&a(d)}})(!0)},exists:function(a){return c(function(d){return function(b){return b||a(d)}})(!1)},sum:k,product:m,maximum:r,
-minimum:v,partition:f,zipWith:function(a){return function(b){return function(e){if("Nil"===b[0]||"Nil"===e[0])return["Nil"];("Cons"!==b[0]||"Cons"!==e[0])&&d("zipWith");for(var c=[];"Cons"===b[0]&&"Cons"===e[0];)c.push(a(b[1])(e[1])),b=b[2],e=e[2];for(var e=["Nil"],l=c.length;l--;)e=["Cons",c[l],e];return e}}},zip:function(a){return function(b){if("Nil"===a[0]||"Nil"===b[0])return["Nil"];("Cons"!==a[0]||"Cons"!==b[0])&&d("zip");for(var e=[];"Cons"===a[0]&&"Cons"===b[0];)e.push(["Tuple2",a[1],b[1]]),
-a=a[2],b=b[2];for(var b=["Nil"],c=e.length;c--;)b=["Cons",e[c],b];return b}},unzip:n,intersperse:j,intercalate:l,sort:function(a){if("Nil"===a[0])return a;"Cons"!==a[0]&&d("sort");for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];b.sort(function(a,d){return a-d});for(var a=["Nil"],e=b.length;e--;)a=["Cons",b[e],a];return a},take:function(a){return function(b){if(0>=a)return["Nil"];if("Nil"===b[0])return b;"Cons"!==b[0]&&d("take");var e=["Cons",b[1],["Nil"]],c=e,b=b[2];for(--a;"Cons"===b[0]&&0<a;)c[2]=
-["Cons",b[1],["Nil"]],c=c[2],b=b[2],--a;return e}},drop:function(a){return function(b){if("Nil"===b[0])return b;for("Cons"!==b[0]&&d("drop");"Cons"===b[0]&&0<a;)b=b[2],--a;return b}}}}(),Data=function(){var g;g=function(b){return function(a){return"Just"===b[0]?["Cons",b[1],a]:a}};var c=function(b){return function(a){return function(c){var g=b(a);return"Just"===g[0]?["Cons",g[1],c]:c}}};g={Just:function(b){return["Just",b]},Nothing:["Nothing"],catMaybes:List.foldr(g)(["Nil"]),isJust:function(b){return"Just"===
-b[0]},isNothing:function(b){return"Nothing"===b[0]},fromMaybe:function(b){return function(a){return"Just"===a[0]?a[1]:b}},consMaybe:g,mapMaybe:function(b){return List.foldr(c(b))(["Nil"])},maybe:function(b){return function(a){return function(c){return"Just"===c[0]?a(c[1]):b}}}};return{String:{toText:Value.toText,properEscape:Value.properEscape},Char:{fromCode:function(b){return String.fromCharCode(b)},toCode:function(b){return b.charCodeAt(0)},toUpper:function(b){return b.toUpperCase()},toLower:function(b){return b.toLowerCase()},
-toLocaleUpper:function(b){return b.toLocaleUpperCase()},toLocaleLower:function(b){return b.toLocaleLowerCase()}},Maybe:g,List:List}}(),ElmCode=ElmCode||{};ElmCode.Graphics=ElmCode.Graphics||{};
-ElmCode.Graphics.Color=function(){return{rgba:function(g){return function(c){return function(b){return function(a){return["Color",g,c,b,a]}}}},rgb:function(g){return function(c){return function(b){return["Color",g,c,b,1]}}},red:["Color",255,0,0,1],green:["Color",0,255,0,1],blue:["Color",0,0,255,1],yellow:["Color",255,255,0,1],cyan:["Color",0,255,255,1],magenta:["Color",255,0,255,1],black:["Color",0,0,0,1],white:["Color",255,255,255,1],gray:["Color",128,128,128,1],grey:["Color",128,128,128,1],extract:function(g){return 1===
-g[4]?"rgb("+g[1]+","+g[2]+","+g[3]+")":"rgba("+g[1]+","+g[2]+","+g[3]+","+g[4]+")"}}}();
-var Collage=function(){function g(a,b){var d=b.length-1;if(!(0>=d))for(a.moveTo(b[d][1],b[d][2]);d--;)a.lineTo(b[d][1],b[d][2])}function c(a,b,d,e){0===a.length&&(a=[8,4]);var c=e.length-1;if(!(0>=c)){var g=e[c][1],s=e[c][2],f=0,m=0,r=0,h=0,p=0,n=0,i=a.length,x=!0,w=a[0];for(b.moveTo(g,s);c--;){f=e[c][1];m=e[c][2];r=f-g;h=m-s;for(p=Math.sqrt(r*r+h*h);w<=p;)g+=r*w/p,s+=h*w/p,b[x?"lineTo":"moveTo"](g,s),r=f-g,h=m-s,p=Math.sqrt(r*r+h*h),x=!x,n=(n+1)%i,w=a[n];0<p&&(b[x?"lineTo":"moveTo"](f,m),w-=p);g=
-f;s=m}}b.strokeStyle=ElmCode.Graphics.Color.extract(d);b.stroke()}function b(a,b,d,e,u){b.clearRect(0,0,d,e);for(d=u.length;d--;){var q=u[d],f=a,e=b,k=q[1],m=q[2],h=q[3][1],n=q[3][2],q=q[4];e.save();(0!==h||0!==n)&&e.translate(h,n);k!==~~k&&e.rotate(2*Math.PI*k);1!==m&&e.scale(m,m);e.beginPath();switch(q[0]){case "FLine":a:switch(f=e,k=q,q=k[3][1],k[1][0]){case "Solid":k=k[2];g(f,q);f.strokeStyle=ElmCode.Graphics.Color.extract(k);f.stroke();break;case "Dotted":c([3,3],f,k[2],q);break a;case "Dashed":c([8,
-4],f,k[2],q);break a;case "Custom":c(k[1][1],f,k[2],q)}break;case "FShape":a:switch(h=f,m=e,f=q[1],k=q[2],q=q[3][1],f[0]){case "Filled":f=m;g(f,q);f.fillStyle=ElmCode.Graphics.Color.extract(k);f.fill();break a;case "Outlined":f=m;g(f,q);f.strokeStyle=ElmCode.Graphics.Color.extract(k);f.stroke();break a;case "Textured":k=h;f=f[1];h=new Image;h.src=Foreign.JavaScript.castStringToJSString(f);h.onload=k;g(m,q);m.fillStyle=m.createPattern(h,"repeat");m.fill();break a;case "CustomOutline":c(f[1],m,k,q)}break;
-case "FImage":k=e,m=q[1],h=q[2],q=q[3],n=new Image,n.onload=f,n.src=Foreign.JavaScript.castStringToJSString(q),k.drawImage(n,-m/2,-h/2,m,h)}e.restore()}}function a(a,c,d){var e=Render.newElement("canvas");e.style.width=~~a+"px";e.style.height=~~c+"px";e.style.display="block";e.width=~~a;e.height=~~c;if(e.getContext){var g=e.getContext("2d"),a=e.width,c=e.height;b(function(){b(this,g,a,c,d)},g,a,c,d);return e}e.innerHTML="Your browser does not support the canvas element.";return e}function h(a,b,d,
-e,c,g,f){var k=Render.render(f),d="translate("+(c-f[3]/2)+"px,"+(g-f[4]/2)+"px) "+(1===e?"":"scale("+e+","+e+")")+" "+(d===~~d?"":"rotate("+360*d+"deg)");k.style.transform=d;k.style.msTransform=d;k.style.MozTransform=d;k.style.webkitTransform=d;k.style.OTransform=d;d=Render.newElement("div");Render.addTo(d,k);d.style.width=~~a+"px";d.style.height=~~b+"px";d.style.overflow="hidden";return d}function f(c,g,d){if(!Value.eq(d,g)){var e=c.style.width.slice(0,-2)-0,u=c.style.height.slice(0,-2)-0;if("object"===
-typeof d[0]){if("object"===typeof g[0]&&c.getContext){var f=c.getContext("2d");return b(function(){b(this,f,e,u,d)},f,e,u,d)}g=a(e,u,d);g.style.position="absolute";return c.parentNode.replaceChild(g,c)}g=h(e,u,d[1],d[2],d[3][1],d[3][2],d[4][1]);g.style.position="absolute";return c.parentNode.replaceChild(g,c)}}function n(a,b,d,e,c){var g=0,f,k=(a[1]-e[1])/d,a=(a[2]-e[2])/d;0!==b&&(b*=2*Math.PI,b=0===k?(0<a?Math.PI/2:-Math.PI/2)-b:Math.atan(a/k)+(0<k?0:Math.PI)-b,a=Math.sqrt(k*k+a*a),k=a*Math.cos(b),
-a*=Math.sin(b));if(0===c.length)return!1;f=c[0];for(d=c.length-1;d--;){b=c[d];e=f[1];f=f[2];var h=b[1],n=b[2];if(f<n)var v=f,p=n;else v=n,p=f;if(e<h)var t=e,i=h;else t=h,i=e;v<a&&a<=p&&k<=i&&(k<=t||k<=(a-f)*(h-e)/(n-f)+e)&&++g;f=b}return 1===g%2}return{collage:function(b,c,d){if(0===d.length)return a(b,c,[]);for(var e=Array(d.length),g=d.length;g--;){var f=d[g];e[g]="string"===typeof f[0]?h(b,c,f[1],f[2],f[3][1],f[3][2],f[4][1]):a(b,c,f)}return 1===d.length?e[0]:Render.flowWith(Render.goIn,function(a){return a},
-e)},updateCollage:function(a,b,d){if(1===d.length)return f(a,b[0],d[0]);for(var a=a.childNodes,e=a.length,c=e;c--;)f(a[e-c-1],b[c],d[c])},insideForm:function(a){return function(b){var d=a[1],c=a[2];if(6>b.length){var g=b[3][1],f=b[3][2],h=0,k=b[2];switch(b[4][0]){case "FShape":for(var m=b[4][3][1],r=m.length;--r;)var v=m[r],h=Math.max(h,v[1]*v[1]+v[2]*v[2]);h*=k*k;break;case "FImage":m=k*b[4][1]/2;k=k*b[4][2]/2;h=m*m+k*k;break;case "FElement":m=k*b[4][1][3]/2,k=k*b[4][1][4]/2,h=m*m+k*k}b.push(function(a,
-b){var d=a-g,c=b-f;return d*d+c*c<h+1})}if(!b[5](d,c))return!1;var p,t;switch(b[4][0]){case "FShape":return n(a,b[1],b[2],b[3],b[4][3][1]);case "FLine":return!1;case "FImage":p=b[4][1]/2;t=b[4][2]/2;break;case "FElement":p=b[4][1][3]/2,t=b[4][1][4]/2}return n(a,b[1],b[2],b[3],[[null,p,t],[null,-p,t],[null,-p,-t],[null,p,-t],[null,p,t]])}}}}(),ElmCode=ElmCode||{};ElmCode.Graphics=ElmCode.Graphics||{};
-ElmCode.Graphics.Element=function(){function g(a){return function(b){return["Position",a,b]}}function c(a){return function(b){return["EText",a,b]}}function b(a){return function(b){return["EFlow",a,Foreign.JavaScript.castListToJSArray(b)]}}function a(a){return["Line",Foreign.JavaScript.castListToJSArray(a)]}function h(a){return function(b){var d=Foreign.JavaScript.castListToJSArray(a);0<d.length&&d.push(d[0]);return["Shape",d,b]}}function f(a){return function(b){return function(d){return function(c){return["Form",
-a,b,d,c]}}}}function n(a){return function(b){return function(d){return["FLine",a,b,d]}}}function j(a){return function(b){return function(d){return["FShape",a,b,d]}}}function l(a,b,d,c,e,i){return["Element",Guid.guid(),a,b,d,c,e,i]}function d(a,b,d){return["Element",Guid.guid(),a,b,d,1,Nothing,Nothing]}function e(a){return~~a[3]}function u(a){return~~a[4]}function q(a){return function(b){return function(c){return d(["EImage",Foreign.JavaScript.castStringToJSString(c)],a,b)}}}function s(a){return function(b){return d(x,
-a,b)}}function k(a){return function(b){return function(d){var c=map(function(d){return["Tuple2",a/2*cos(2*(pi/50)*d),b/2*sin(2*(pi/50)*d)]}),e=49,i=["Nil"];if(0<=e){do i=["Cons",e,i];while(0<e--)}return h(c(i))(d)}}}var m=["DRight"],r=["DDown"],v=["DOut"],p=["Near"],t=["Mid"],i=["Far"],x=["EEmpty"],w=["Solid"],y=["Dotted"],z=["Dashed"],A=["Filled"],B=["Outlined"],C=g(p)(p),D=g(i)(p),E=g(p)(i),F=g(i)(i),G=g(p)(t),H=g(i)(t),p=g(t)(p),i=g(t)(i),t=g(t)(t);return{left:["DLeft"],right:m,down:r,up:["DUp"],
-inward:["DIn"],outward:v,topLeft:C,topRight:D,bottomLeft:E,bottomRight:F,midLeft:G,midRight:H,midTop:p,midBottom:i,middle:t,middleAt:function(a){return function(b){return["PositionAt",a,b]}},topLeftAt:function(a){return function(b){return["PositionTL",a,b]}},topRightAt:function(a){return function(b){return["PositionTR",a,b]}},bottomLeftAt:function(a){return function(b){return["PositionBL",a,b]}},bottomRightAt:function(a){return function(b){return["PositionBR",a,b]}},absolute:function(a){return["Absolute",
-a]},relative:function(a){return["Relative",a]},width:function(a){return function(b){var d=b[2];switch(d[0]){case "EImage":case "EVideo":return l(b[2],a,b[4]*a/b[3],b[5],b[6],b[7]);case "EText":return d=Value.getTextSize(a,b[4],d[2]),l(b[2],a,d[1],b[5],b[6],b[7])}return l(b[2],a,b[4],b[5],b[6],b[7])}},height:function(a){return function(b){switch(b[2][0]){case "EImage":case "EVideo":return l(b[2],b[3]*a/b[4],a,b[5],b[6],b[7])}return l(b[2],b[3],a,b[5],b[6],b[7])}},size:function(a){return function(b){return function(d){return l(d[2],
-a,b,d[5],d[6],d[7])}}},opacity:function(a){return function(b){return l(b[2],b[3],b[4],a,b[6],b[7])}},color:function(a){return function(b){return l(b[2],b[3],b[4],b[5],Just(a),b[7])}},link:function(a){return function(b){return l(b[2],b[3],b[4],b[5],b[6],Just(Foreign.JavaScript.castStringToJSString(a)))}},widthOf:e,heightOf:u,sizeOf:function(a){return["Tuple2",~~a[3],~~a[4]]},text:function(a){var b=Value.getTextSize(0,0,a);return d(c("left")(a),b[0],b[1])},asText:function(a){var a=Value.show(a),b=Value.getTextSize(0,
-0,a);return d(c("left")(a),b[0],b[1])},plainText:function(a){var a=Value.toText(a),b=Value.getTextSize(0,0,a);return d(c("left")(a),b[0],b[1])},centeredText:function(a){var b=Value.getTextSize(0,0,a);return d(c("center")(a),b[0],b[1])},justifiedText:function(a){var b=Value.getTextSize(0,0,a);return d(c("justify")(a),b[0],b[1])},rightedText:function(a){var b=Value.getTextSize(0,0,a);return d(c("right")(a),b[0],b[1])},image:q,images:function(a){var b=Elm.Input(s(0)(0)),a=Elm.Lift(function(a){var a=
-Foreign.JavaScript.castStringToJSString(a),d=new Image;d.onload=function(){console.log("loaded");Dispatcher.notify(b.id,q(this.width)(this.height)(a))};d.src=a},[a]);return Elm.Lift(function(a){return function(){return a}},[b,a])},video:function(a){return function(b){return function(c){return d(["EVideo",Foreign.JavaScript.castStringToJSString(c)],a,b)}}},fittedImage:function(a){return function(b){return function(c){return d(["EFittedImage",Foreign.JavaScript.castStringToJSString(c)],a,b)}}},flow:function(a){return function(c){var i;
-i=map(e)(c);a:{switch(a[0]){case "DLeft":i=sum(i);break a;case "DRight":i=sum(i);break a}i=maximum(i)}var g;g=map(u)(c);a:{switch(a[0]){case "DDown":g=sum(g);break a;case "DUp":g=sum(g);break a}g=maximum(g)}return d(b(a)(c),i,g)}},above:function(a){return function(c){return d(b(r)(["Cons",a,["Cons",c,["Nil"]]]),max(~~a[3])(~~c[3]),~~a[4]+~~c[4])}},below:function(a){return function(c){return d(b(r)(["Cons",c,["Cons",a,["Nil"]]]),max(~~a[3])(~~c[3]),~~a[4]+~~c[4])}},beside:function(a){return function(c){return d(b(m)(["Cons",
-a,["Cons",c,["Nil"]]]),~~a[3]+~~c[3],max(~~a[4])(~~c[4]))}},layers:function(a){return d(b(v)(a),maximum(map(e)(a)),maximum(map(u)(a)))},collage:function(a){return function(b){return function(c){return d(["ECollage",a,b,Value.groupForms(c)],a,b)}}},spacer:s,container:function(a){return function(b){return function(c){return function(e){return d(["EContainer",c,e],a,b)}}}},line:a,segment:function(b){return function(d){return a(["Cons",b,["Cons",d,["Nil"]]])}},polygon:h,rect:function(a){return function(b){return function(d){return h(["Cons",
-["Tuple2",0-a/2,0-b/2],["Cons",["Tuple2",0-a/2,b/2],["Cons",["Tuple2",a/2,b/2],["Cons",["Tuple2",a/2,0-b/2],["Nil"]]]]])(d)}}},oval:k,circle:function(a){return k(2*a)(2*a)},ngon:function(a){return function(b){return function(d){var c=toFloat(a),e=map(function(a){return["Tuple2",b*cos(2*(pi/c)*a),b*sin(2*(pi/c)*a)]}),i=a-1,g=["Nil"];if(0<=i){do g=["Cons",i,g];while(0<i--)}return h(e(g))(d)}}},solid:function(a){return function(b){return f(0)(1)(["Tuple2",0,0])(n(w)(a)(b))}},dotted:function(a){return function(b){return f(0)(1)(["Tuple2",
-0,0])(n(y)(a)(b))}},dashed:function(a){return function(b){return f(0)(1)(["Tuple2",0,0])(n(z)(a)(b))}},customLine:function(a){return function(b){return function(d){return f(0)(1)(["Tuple2",0,0])(n(["Custom",Foreign.JavaScript.castListToJSArray(a)])(b)(d))}}},filled:function(a){return function(b){return f(0)(1)(b[2])(j(A)(a)(b))}},outlined:function(a){return function(b){return f(0)(1)(b[2])(j(B)(a)(b))}},customOutline:function(a){return function(b){return function(d){return f(0)(1)(d[2])(j(["CustomOutline",
-Foreign.JavaScript.castListToJSArray(a)])(b)(d))}}},textured:function(a){return function(b){return f(0)(1)(b[2])(j(["Textured",a])(null)(b))}},sprite:function(a){return function(b){return function(d){return function(c){return f(0)(1)(c)(["FImage",b,d,Foreign.JavaScript.castStringToJSString(a)])}}}},toForm:function(a){return function(b){return f(0)(1)(a)(["FElement",b])}},rotate:function(a){return function(b){a:{switch(b[0]){case "Form":var d=b[2],c=b[3],e=b[4],b=f(a+b[1])(d)(c)(e);break a}throw"Non-exhaustive pattern match in case";
-}return b}},scale:function(a){return function(b){return f(b[1])(a*b[2])(b[3])(b[4])}},move:function(a){return function(b){return function(d){var c;a:{switch(d[0]){case "Form":c=d[1];var e=d[2],i=d[3],d=d[4];switch(i[0]){case "Tuple2":var g=i[1],i=i[2];c=f(c)(e)(["Tuple2",a+g,b+i])(d);break a}}throw"Non-exhaustive pattern match in case";}return c}}},isWithin:Collage.insideForm}}();
-var Text=function(){function g(a){return Value.toText(a)}var c=function(a){return function(b){return"<"+a+' style="padding:0;margin:0">'+b+"</"+a+">"}},b=function(a,b){return function(c){return"<span style='"+a+":"+b+"'>"+c+"</span>"}},a=function(a){a=Foreign.JavaScript.castStringToJSString(a);return b("font-family",a)},h=c("h1"),f=b("font-style","italic"),c=c("b"),n=b("text-decoration","underline"),j=b("text-decoration","overline"),l=b("text-decoration","line-through");return{fromString:g,toText:g,
-header:h,height:function(a){return b("font-size",a+"em")},italic:f,bold:c,underline:n,overline:j,strikeThrough:l,monospace:a("monospace"),typeface:a,color:function(a){return b("color",ElmCode.Graphics.Color.extract(a))},link:function(a){return function(b){return"<a href='"+g(a)+"'>"+b+"</a>"}}}}(),Render=function(){function g(a){a=document.createElement(a);a.style.padding="0";a.style.margin="0";return a}function c(a){return a}function b(a){a.style.styleFloat="left";a.style.cssFloat="left";return a}
-function a(a){a.style.position="absolute";return a}function h(a,b,c){for(var f=g("div"),l=c.length;l--;){var j=a(b(c[l]));f.appendChild(j)}return f}function f(a){switch(a[0]){case "Absolute":return a[1]+"px";case "Relative":return 100*a[1]+"%"}}function n(a,b){b.style.position="absolute";b.style.margin="auto";switch(a[0]){case "Position":"Far"!==a[1][0]&&(b.style.left=0);"Near"!==a[1][0]&&(b.style.right=0);"Far"!==a[2][0]&&(b.style.top=0);"Near"!==a[2][0]&&(b.style.bottom=0);break;case "PositionAt":b.style.top=
-f(a[2]);b.style.left=f(a[1]);var c="translate("+-elem[3]/2+"px,"+-elem[4]/2+"px)";b.style.transform=c;b.style.msTransform=c;b.style.MozTransform=c;b.style.webkitTransform=c;b.style.OTransform=c;break;default:c=a[0].slice(-2),b.style["T"===c[0]?"top":"bottom"]=f(a[2]),b.style["L"===c[1]?"left":"right"]=f(a[1])}}function j(d){var e={};switch(d[2][0]){case "EText":var e=d[2][1],f=d[2][2],l=g("div");l.innerHTML=f;l.style.textAlign=e;e=l;break;case "EImage":e=d[2][1];f=g("img");f.src=e;f.name=e;f.style.display=
-"block";e=f;break;case "EVideo":l=d[2][1];e=g("video");e.controls="controls";f=g("source");f.src=l;l=l.split(".");f.type="video/"+l[l.length-1];e.appendChild(f);e.style.display="block";break;case "EFittedImage":var s=d[3],k=d[4],e=d[2][1],m=g("canvas");m.style.display="block";m.style.width=s+"px";m.style.height=k+"px";m.width=s;m.height=k;m.innerHTML="Your browser does not support the canvas element.";var r=g("img");r.onload=function(){if(m.getContext){var a=m.getContext("2d"),b=0,d=0,c=this.width,
-e=this.height;s/k>this.width/this.height?(e=this.width*k/s,d=(this.height-e)/2):(c=this.height*s/k,b=(this.width-c)/2);a.drawImage(r,b,d,c,e,0,0,m.width,m.height)}};r.src=e;e=m;break;case "EFlow":a:{e=d[2][2];switch(d[2][1][0]){case "DDown":e=e.slice(0).reverse();case "DUp":e=h(c,j,e);break a;case "DRight":e=e.slice(0).reverse();case "DLeft":e=h(b,j,e);break a;case "DOut":e=e.slice(0).reverse();case "DIn":e=h(a,j,e);break a}e=void 0}break;case "ECollage":e=Collage.collage(d[2][1],d[2][2],d[2][3]);
-break;case "EEmpty":e=g("div");break;case "EContainer":f=d[2][1];e=j(d[2][2]);n(f,e);f=g("div");f.style.position="relative";f.style.overflow="hidden";f.appendChild(e);e=f;break;case "EHtml":e=d[2][1];"button"!==e.type&&(f=Value.getExcess(e),d[3]-=f[0],d[4]-=f[1]);break;case "EExternalHtml":e=g("div"),e.appendChild(d[2][1])}e.id=d[1];e.style.width=~~d[3]+"px";e.style.height=~~d[4]+"px";1!==d[5]&&(e.style.opacity=d[5]);"Just"===d[6][0]&&(e.style.backgroundColor=ElmCode.Graphics.Color.extract(d[6][1]));
-return"Just"===d[7][0]?(f=g("a"),f.href=d[7][1],f.appendChild(e),f):e}function l(d,e,g){"A"===d.tagName&&(d=d.firstChild);if(e[1]!==g[1]){if(e[2][0]!==g[2][0])return d.parentNode.replaceChild(j(g),d);var f=g[2],h=e[2];switch(f[0]){case "EText":f[1]!==h[1]&&(d.style.textAlign=f[1]);f[2]!==h[2]&&(d.innerHTML=f[2]);break;case "EImage":f[1]!==h[1]&&(d.src=f[1]);break;case "EVideo":case "EFittedImage":if(!Value.eq(f,h)||g[3]!==e[3]||g[4]!==e[4])return d.parentNode.replaceChild(j(g),d);break;case "ECollage":if(f[1]!==
-h[1]||f[2]!==h[2]||f[3].length!==h[3].length)return d.parentNode.replaceChild(j(g),d);Collage.updateCollage(d,h[3],f[3]);break;case "EFlow":if(f[1]!==h[1])return d.parentNode.replaceChild(j(g),d);var k=f[2],m=d.childNodes;if(k.length!==m.length)return d.parentNode.replaceChild(j(g),d);var h=h[2],r={};switch(f[1][0]){case "DDown":case "DUp":r=c;break;case "DRight":case "DLeft":r=b;break;case "DOut":case "DIn":r=a}for(f=m.length;f--;)l(m[f],h[f],k[f]),r(m[f]);break;case "EContainer":l(d.childNodes[0],
-h[2],f[2]);n(f[1],d.childNodes[0]);break;case "EHtml":g[1]!==e[1]&&(k=j(g),d.parentNode.replaceChild(k,d),d=k);"button"!==k.type&&(f=Value.getExcess(d),g[3]-=f[0],g[4]-=f[1]);break;case "EExternalHtml":g[1]!==e[1]&&d.parentNode.replaceChild(j(g),d)}g[3]!==e[3]&&(d.style.width=~~g[3]+"px");g[4]!==e[4]&&(d.style.height=~~g[4]+"px");g[5]!==e[5]&&(d.style.opacity=g[5]);2===g[6].length&&(f=ElmCode.Graphics.Color.extract(g[6][1]),f!==d.style.backgroundColor&&(d.style.backgroundColor=f));if(2===g[7].length&&
-(1===e[7].length||g[7][1]!==e[7][1]))d.parentNode.href=g[7][1];g[1]=e[1]}}return{render:j,update:l,addTo:function(a,b){a.appendChild(b)},newElement:g,flowWith:h,goIn:a}}(),Elm=function(){var g=function(a,b,c){for(var g=a.kids,f=g.length;f--;)g[f].recv(b,c,a.id)},c=function(a){this.id=Guid.guid();this.value=a;this.kids=[];this.defaultNumberOfKids=0;this.recv=function(a,b,c){if(b=b===this.id)this.value=c;g(this,a,b);return b};Dispatcher.inputs.push(this)},b=function(a,b){this.id=Guid.guid();this.value=
-null;this.kids=[];this.count=0;this.changed=!1;b.reverse();this.recalc=function(){for(var c=a,e=b.length;e--;)c=c(b[e].value);this.value=c};this.recalc();this.recv=function(a,c){this.count+=1;c&&(this.changed=!0);this.count==b.length&&(this.changed&&this.recalc(),g(this,a,this.changed),this.changed=!1,this.count=0)};for(var c=b.length;c--;)b[c].kids.push(this)},a=function(a,b,c,f){this.id=Guid.guid();this.value=c?b(f.value):b;this.kids=[];this.recv=function(b,c){c&&(this.value=a(f.value)(this.value));
-g(this,b,c)};f.kids.push(this)},h=function(a,b,c){this.id=Guid.guid();this.value=a(c.value)?b:c.value;this.kids=[];this.recv=function(b,d){var f=d&&!a(c.value);f&&(this.value=c.value);g(this,b,f)};c.kids.push(this)},f=function(a){this.id=Guid.guid();this.value=a.value;this.kids=[];this.recv=function(b,c){var f=c&&!eq(this.value,a.value);f&&(this.value=a.value);g(this,b,f)};a.kids.push(this)},n=function(a){return function(c){return function(e){e=new b(function(a){return function(b){return[a,b]}},[a,
-e]);e=new h(function(a){return a[0]},[!0,c],e);return new b(function(a){return a[1]},[e])}}},j=function(a,b){this.id=Guid.guid();this.value=b.value;this.kids=[];this.count=0;this.changed=!1;this.recv=function(c,f,h){h===a.id&&(this.changed=f);this.count+=1;2==this.count&&(this.changed&&(this.value=b.value),g(this,c,this.changed),this.count=0,this.changed=!1)};a.kids.push(this);b.kids.push(this)};return{Input:function(a){return new c(a)},Lift:function(a,c){return new b(a,c)},Fold:function(b,c,e){return new a(b,
-c,!1,e)},Fold1:function(b,c,e){return new a(b,c,!0,e)},keepIf:function(a){return function(b){return function(c){return new h(function(b){return!a(b)},b,c)}}},dropIf:function(a){return function(b){return function(c){return new h(a,b,c)}}},keepWhen:function(a){return n(new b(function(a){return!a},[a]))},dropWhen:n,dropRepeats:function(a){return new f(a)},sampleOn:function(a){return function(b){return new j(a,b)}}}}(),Dispatcher=function(){function g(a){if(!a.hasOwnProperty("defaultNumberOfKids"))return!0;
-var b=a.kids.length;if(0==b)return!1;if(b>a.defaultNumberOfKids)return!0;for(var c=!1;b--;)c=c||g(a.kids[b]);return c}var c=null,b=0,a=[],h=null;return{initialize:function(){c=ElmCode.main();c.hasOwnProperty("recv")||(c=Elm.Input(c));h=c.value;for(var b=[],n=a.length;n--;)g(a[n])&&b.push(a[n]);a=b;document.getElementById("content").appendChild(Render.render(h));b=document.getElementById("widthChecker").offsetWidth;b!==window.innerWidth&&Dispatcher.notify(Window.dimensions.id,Value.Tuple(b,window.innerHeight));
-c=Elm.Lift(function(a){var b=document.getElementById("content");Render.update(b.firstChild,h,a);return h=a},[c])},notify:function(c,g){b+=1;for(var h=!1,l=a.length;l--;)h=a[l].recv(b,c,g)||h;return h},inputs:a}}(),Signal=function(){function g(a){var b=Value.getSize(a);return["Element",Guid.guid(),["EHtml",a],b[0],b[1],1,Nothing,Nothing]}function c(a){for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],b];return b}var b;b=document.addEventListener?function(a,b,c){a.addEventListener(b,c,!1)}:function(a,
-b,c){a.attachEvent("on"+b,c)};var a,h=function(a){var b=0,c=0;a||(a=window.event);if(a.pageX||a.pageY)b=a.pageX,c=a.pageY;else if(a.clientX||a.clientY)b=a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,c=a.clientY+document.body.scrollTop+document.documentElement.scrollTop;return Value.Tuple(b,c)},f=Elm.Input(Value.Tuple(0,0));f.defaultNumberOfKids=2;a=Elm.Lift(function(a){return a[1]},[f]);a.defaultNumberOfKids=0;var n=Elm.Lift(function(a){return a[2]},[f]);n.defaultNumberOfKids=
-0;var j=Elm.Input(!1),l=Elm.Input(!1),d=Elm.Input(Value.Tuple());b(document,"click",function(a){var b=Dispatcher.notify(l.id,!0),c=Dispatcher.notify(d.id,Value.Tuple());Dispatcher.notify(l.id,!1);!b&&!c&&this.removeEventListener("click",arguments.callee,!1)});b(document,"mousedown",function(a){Dispatcher.notify(j.id,!0)||this.removeEventListener("mousedown",arguments.callee,!1)});b(document,"mouseup",function(a){Dispatcher.notify(j.id,!1)||this.removeEventListener("mouseup",arguments.callee,!1)});
-b(document,"mousemove",function(a){Dispatcher.notify(f.id,h(a))||this.removeEventListener("mousemove",arguments.callee,!1)});a={position:f,x:a,y:n,isClicked:l,isDown:j,clicks:d,isClickedOn:function(a){var a=Render.render(a),c=Elm.Input(!1);b(a,"click",function(){Dispatcher.notify(c.id,!0);Dispatcher.notify(c.id,!1)});return Value.Tuple(g(a),c)}};var e=Elm.Input(Value.Tuple(window.innerWidth,window.innerHeight));e.defaultNumberOfKids=2;n=Elm.Lift(function(a){return a[1]},[e]);n.defaultNumberOfKids=
-0;var u=Elm.Lift(function(a){return a[2]},[e]);u.defaultNumberOfKids=0;b(window,"resize",function(a){var b=document.getElementById("widthChecker").offsetWidth;Dispatcher.notify(e.id,Value.Tuple(b,window.innerHeight))||this.removeEventListener("resize",arguments.callee,!1)});var n={dimensions:e,width:n,height:u},q=function(a,b){return"Nil"===b[0]?b:b[1]===a?b[2]:["Cons",b[1],q(a,b[2])]},s=Elm.Input(["Nil"]),k=Elm.Input(["Nothing"]);b(document,"keydown",function(a){var b;a:{for(b=s.value;"Nil"!==b[0];){if(b[1]===
-a.keyCode){b=!0;break a}b=b[2]}b=!1}b||Dispatcher.notify(s.id,["Cons",a.keyCode,s.value])||this.removeEventListener("keydown",arguments.callee,!1)});b(document,"keyup",function(a){var b=q(a.keyCode,s.value);Dispatcher.notify(s.id,b)||this.removeEventListener("keyup",arguments.callee,!1)});b(window,"blur",function(a){Dispatcher.notify(s.id,["Nil"])||this.removeEventListener("blur",arguments.callee,!1)});b(document,"keypress",function(a){var b=Dispatcher.notify(k.id,["Just",a.charCode||a.keyCode]);
-Dispatcher.notify(k.id,["Nothing"]);b||this.removeEventListener("keypress",arguments.callee,!1)});var u={Raw:{keysDown:s,charPressed:k}},m;m=function(a){return function(b){var d=Elm.Input(["Waiting"]),e={};window.XMLHttpRequest?e=new XMLHttpRequest:window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLHTTP"));e.onreadystatechange=function(){4===e.readyState&&Dispatcher.notify(d.id,200===e.status?["Success",c(e.responseText)]:["Failure",e.status,c(e.statusText)])};e.open(a,Value.toText(b),!0);e.send(null);
-return d}};var r=function(a){return function(b){var d=Elm.Input(["Nothing"]),b=Elm.Lift(function(b){if("Just"!==b[0]){try{Dispatcher.notify(d.id,["Nothing"])}catch(e){}return[]}try{Dispatcher.notify(d.id,["Just",["Waiting"]])}catch(g){d.value=["Just",["Waiting"]]}var f={};window.XMLHttpRequest?f=new XMLHttpRequest:window.ActiveXObject&&(f=new ActiveXObject("Microsoft.XMLHTTP"));f.onreadystatechange=function(){4===f.readyState&&Dispatcher.notify(d.id,["Just",200===f.status?["Success",c(f.responseText)]:
-["Failure",f.status,c(f.statusText)]])};f.open(a,Value.toText(b[1]),!0);f.send(null);return[]},[b]);return Elm.Lift(function(a){return function(){return a}},[d,b])}};m={get:m("GET"),post:m("POST"),gets:r("GET"),posts:r("POST")};var v=function(a,d){a.placeholder=Foreign.JavaScript.castStringToJSString(d);var e=Elm.Input(["Nil"]);b(a,"keyup",function(){Dispatcher.notify(e.id,c(a.value));a.focus()});a.style.padding="1px";return Value.Tuple(g(a),e)},p=function(a){a=document.createElement(a);a.style.padding=
-"0";a.style.margin="0";return a},t=function(a){for(var c=p("select"),d=[];"Cons"===a[0];){var e=p("option"),f=Text.toText(a[1][1]);e.value=f;e.innerHTML=f;c.appendChild(e);d.push(a[1][2]);a=a[2]}var h=Elm.Input(d[0]);b(c,"change",function(){Dispatcher.notify(h.id,d[c.selectedIndex])});return Value.Tuple(g(c),h)};return{addListener:b,Mouse:a,Keyboard:u,Time:{every:function(a){var a=1E3*a,b=Elm.Input(0),c=0;setInterval(function(){c+=a;Dispatcher.notify(b.id,c/1E3)},a);return b},after:function(a){var a=
-1E3*a,b=Elm.Input(!1);setTimeout(function(){Dispatcher.notify(b.id,!0)},a);return b},before:function(a){var a=1E3*a,b=Elm.Input(!0);setTimeout(function(){Dispatcher.notify(b.id,!1)},a);return b}},Window:n,HTTP:m,Random:{inRange:function(a){return function(b){return Elm.Input(Math.floor(Math.random()*(b-a+1))+a)}},randomize:function(a){return function(b){return function(c){return Elm.Lift(function(){return Math.floor(Math.random()*(b-a+1))+a},[c])}}}},Input:{textArea:function(a){return function(b){var c=
-p("textarea");c.rows=b;c.cols=a;return v(c,"")}},textField:function(a){var b=p("input");b.type="text";return v(b,a)},password:function(a){var b=p("input");b.type="password";return v(b,a)},checkbox:function(a){var c=p("input");c.type="checkbox";c.checked=a;var d=Elm.Input(a);b(c,"change",function(){Dispatcher.notify(d.id,c.checked)});return Value.Tuple(g(c),d)},dropDown:t,stringDropDown:function(a){return t(List.map(function(a){return Value.Tuple(a,a)})(a))},button:function(a){var c=p("input");c.type=
-"button";c.value=Foreign.JavaScript.castStringToJSString(a);var d=Elm.Input(!1);b(c,"click",function(){Dispatcher.notify(d.id,!0);Dispatcher.notify(d.id,!1)});return Value.Tuple(g(c),d)}},constant:function(a){return Elm.Input(a)},lift:function(a){return function(b){return Elm.Lift(a,[b])}},lift2:function(a){return function(b){return function(c){return Elm.Lift(a,[b,c])}}},lift3:function(a){return function(b){return function(c){return function(d){return Elm.Lift(a,[b,c,d])}}}},lift4:function(a){return function(b){return function(c){return function(d){return function(e){return Elm.Lift(a,
-[b,c,d,e])}}}}},foldp:function(a){return function(b){return function(c){return Elm.Fold(a,b,c)}}},foldp_:function(a){return function(b){return function(c){return Elm.Fold1(a,b,c)}}},foldp1:function(a){return function(b){return Elm.Fold1(a,function(a){return a},b)}},count:function(a){return Elm.Fold(function(){return function(a){return a+1}},0,a)},keepIf:Elm.keepIf,dropIf:Elm.dropIf,keepWhen:Elm.keepWhen,dropWhen:Elm.dropWhen,dropRepeats:Elm.dropRepeats,sampleOn:Elm.sampleOn}}(),Prelude=function(){var g=
-function(c){return function(b){var a=c%b,a=0==c?0:0<b?0<=c?a:a+b:-g(-c)(-b);return a==b?0:a}};return{id:function(c){return c},not:function(c){return!c},fst:function(c){return c[1]},snd:function(c){return c[2]},rem:function(c){return function(b){return c%b}},div:function(c){return function(b){return~~(c/b)}},compare:function(c){return function(b){c="object"===typeof c?toText(c):c;b="object"===typeof b?toText(b):b;return[c===b?"EQ":c<b?"LT":"GT"]}},toFloat:function(c){return c},round:function(c){return Math.round(c)},
-floor:function(c){return Math.floor(c)},ceiling:function(c){return Math.ceil(c)},truncate:function(c){return~~c},sqrt:Math.sqrt,abs:Math.abs,pi:Math.PI,e:Math.E,sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,mod:g,min:function(c){return function(b){return Math.min(c,b)}},max:function(c){return function(b){return Math.max(c,b)}},flip:function(c){return function(b){return function(a){return c(a)(b)}}},clamp:function(c){return function(b){return function(a){return Math.min(b,
-Math.max(c,a))}}},curry:function(c){return function(b){return function(a){return c(["Tuple2",b,a])}}},uncurry:function(c){return function(b){if("Tuple2"!==b[0])throw"Function was uncurry'd but was not given a pair.";return c(b[1])(b[2])}},logBase:function(c){return function(b){return Math.log(b)/Math.log(c)}},Just:Data.Maybe.Just,Nothing:Data.Maybe.Nothing,maybe:Data.Maybe.maybe,map:Data.List.map,filter:Data.List.filter,head:Data.List.head,tail:Data.List.tail,last:Data.List.last,length:Data.List.length,
-reverse:Data.List.reverse,foldr:Data.List.foldr,foldr1:Data.List.foldr1,foldl:Data.List.foldl,foldl1:Data.List.foldl1,and:Data.List.and,or:Data.List.or,forall:Data.List.forall,exists:Data.List.exists,sum:Data.List.sum,product:Data.List.product,concat:Data.List.concat,concatMap:Data.List.concatMap,maximum:Data.List.maximum,minimum:Data.List.minimum,scanl:Data.List.scanl,scanl1:Data.List.scanl1,take:Data.List.take,drop:Data.List.drop,lift:Signal.lift,lift2:Signal.lift2,lift3:Signal.lift3,lift4:Signal.lift4,
-foldp:Signal.foldp,foldp1:Signal.foldp1,foldp_:Signal.foldp_,constant:Signal.constant,count:Signal.count,keepIf:Signal.keepIf,dropIf:Signal.dropIf,keepWhen:Signal.keepWhen,dropWhen:Signal.dropWhen,dropRepeats:Signal.dropRepeats,sampleOn:Signal.sampleOn}}(),eq=Value.eq;Signal.addListener(document,"elm_log",function(g){console.log(g.value)});Signal.addListener(document,"elm_title",function(g){document.title=g.value});
-Signal.addListener(document,"elm_redirect",function(g){0<g.value.length&&(window.location=g.value)});var includeGlobal=this;
-(function(){var g=function(b){for(var a in b)if("Internal"!==a)try{includeGlobal[a]=b[a]}catch(c){"length"===a&&(includeGlobal.execScript("var length;"),length=b[a])}},c=function(b){return function(a){includeGlobal[b]=includeGlobal[b]||{};for(var c in a)"Internal"!==c&&(includeGlobal[b][c]=a[c])}};g(Element);g(Text);color=Element.color;height=Element.height;show=Value.show;g(ElmCode.Graphics.Color);g(ElmCode.Graphics.Element);c("Time")(Signal.Time);c("Mouse")(Signal.Mouse);c("Keyboard")(Signal.Keyboard);
-c("Window")(Signal.Window);c("HTTP")(Signal.HTTP);c("Input")(Signal.Input);c("Random")(Signal.Random)})();ElmCode=ElmCode||{};ElmCode.Data=Data;ElmCode.Signal=Signal;ElmCode.Data.List=List;ElmCode.Foreign=Foreign;ElmCode.Prelude=Prelude;ElmCode.Graphics.Text=Text;
diff --git a/elm-runtime-0.4.0.4.js b/elm-runtime-0.4.0.4.js
new file mode 100644
--- /dev/null
+++ b/elm-runtime-0.4.0.4.js
@@ -0,0 +1,90 @@
+var Guid=function(){var g=0;return{guid:function(){return g+=1}}}(),Foreign=function(){var g=function(a){for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],b];return b},c=function(a){for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return b},b=function(a){return a.slice(1)},a=function(a){return["Tuple"+a.length].concat(a)};return{JavaScript:{castJSBoolToBool:function(a){return a},castBoolToJSBool:function(a){return a},castJSNumberToFloat:function(a){return a},castFloatToJSNumber:function(a){return a},
+castJSNumberToInt:function(a){return~~a},castIntToJSNumber:function(a){return a},Experimental:{castJSElementToElement:function(a){return function(b){return function(c){return["Element",Guid.guid(),["EExternalHtml",c],a,b,1,Nothing,Nothing]}}},castElementToJSElement:function(a){return Render.render(a)}},castJSArrayToList:g,castListToJSArray:c,castJSStringToString:g,castStringToJSString:function(a){return"string"===typeof a?a:c(a).join("")},castTupleToJSTuple2:b,castTupleToJSTuple3:b,castTupleToJSTuple4:b,
+castTupleToJSTuple5:b,castJSTupleToTuple2:a,castJSTupleToTuple3:a,castJSTupleToTuple4:a,castJSTupleToTuple5:a}}}(),ElmJSON=function(){function g(a){return function(h){function f(a){switch(a[0]){case "JsonNull":return null;case "JsonString":return b.castStringToJSString(a[1]);case "JsonObject":var j={},a=a[1][1],l;for(l in a)j[l]=f(a[l]);return j;case "JsonArray":j=b.castListToJSArray(a[1]);for(l=j.length;l--;)j[l]=f(j[l]);return j;default:return a[1]}}return JSON.stringify(f(["JsonObject",h]),null,
+b.castStringToJSString(a))}}function c(a){function h(a){switch(typeof a){case "string":return["JsonString",b.castJSStringToString(a)];case "number":return["JsonNumber",b.castJSNumberToFloat(a)];case "boolean":return["JsonBool",b.castJSBoolToBool(a)];case "object":if(null===a)return["JsonNull"];for(var j in a)a[j]=h(a[j]);return a instanceof Array?["JsonArray",b.castJSArrayToList(a)]:["JsonObject",["JSON",a]]}}var a=JSON.parse(a),f;for(f in a)a[f]=h(a[f]);return["JSON",a]}var b=Foreign.JavaScript;
+return{empty:["JSON",{}],singleton:function(a){return function(h){var f={};f[b.castStringToJSString(a)]=h;return["JSON",f]}},insert:function(a){return function(h){return function(f){var f=f[1],c={},j;for(j in f)c[j]=f[j];c[b.castStringToJSString(a)]=h;return["JSON",c]}}},lookup:function(a){return function(c){var f=b.castStringToJSString(a);return c[1].hasOwnProperty(f)?Just(c[1][f]):Nothing}},findWithDefault:function(a){return function(c){return function(f){var g=b.castStringToJSString(c);return f[1].hasOwnProperty(g)?
+f[1][g]:a}}},remove:function(a){return function(c){var c=c[1],f={},g;for(g in c)f[g]=c[g];delete f[b.castStringToJSString(a)];return["JSON",f]}},toPrettyJSString:g,toJSString:g(""),fromJSString:c,toPrettyString:function(a){return function(c){return b.castJSStringToString(g(a)(c))}},toString:function(a){return b.castJSStringToString(g("")(a))},fromString:function(a){return c(b.castStringToJSString(a))},toList:function(a){var a=a[1],c=[],f;for(f in a)c.push(Value.Tuple(b.castJSStringToString(f),a[f]));
+return b.castJSArrayToList(c)},fromList:function(a){for(var a=b.castListToJSArray(a),c={},f=a.length;f--;)c[b.castStringToJSString(a[f][1])]=a[f][2];return["JSON",c]},JsonString:function(a){return["JsonString",a]},JsonNumber:function(a){return["JsonNumber",a]},JsonBool:function(a){return["JsonBool",a]},JsonNull:["JsonNull"],JsonArray:function(a){return["JsonArray",a]},JsonObject:function(a){return["JsonObject",a]}}}();Foreign.JavaScript.JSON=ElmJSON;
+var Value=function(){function g(a){if(0==a.length)return a;for(var a=a.replace(/"/g,"&#34;").replace(/'/g,"&#39;").replace(/</g,"&#60;").replace(/>/g,"&#62;").replace(/\n/g,"<br/>"),a=a.split("<br/>"),b=a.length;b--;){var c=a,g=b,j;j=a[b];if(0!=j.length){j=j.split("");" "==j[0]&&(j[0]="&nbsp;");for(var l=j.length;--l;)" "==j[l][0]&&" "==j[l-1]&&(j[l-1]+=j[l],j[l]="");for(l=j.length;l--;)if(1<j[l].length&&" "==j[l][0]){for(var d=j[l].split(""),e=d.length-2;0<=e;e-=2)d[e]="&nbsp;";j[l]=d.join("")}j=
+j.join("")}c[g]=j}return a.join("<br/>")}var c=function(a,b){if("object"===typeof a){if(a===b)return!0;if(a.length!==b.length)return!1;for(var f=a.length;f--;)if(!c(a[f],b[f]))return!1;return!0}return a===b},b=function(a){if("boolean"===typeof a)return a?"True":"False";if("number"!==typeof a){if("string"===typeof a&&2>a.length)return"'"+a+"'";if(a[0]){if("Tuple"===a[0].substring(0,5)){for(var c="",f=a.length;--f;)c=","+b(a[f])+c;","===c[0]&&(c=c.substring(1));return"("+c+")"}if("Cons"===a[0])for(var f=
+"string"===typeof a[1]?'"':"]",g="string"===typeof a[1]?"":",",j="string"===typeof a[1]?function(a){return a}:b,c=("string"===typeof a[1]?'"':"[")+j(a[1]),a=a[2];;)if("Cons"===a[0])c+=g+j(a[1]),a=a[2];else return c+f;else{if("Nil"===a[0])return"[]";if("JSON"===a[0])return"(JSON.fromList "+b(ElmJSON.toList(a))+")";c="";for(f=a.length;--f;)c=" "+b(a[f])+c;c=a[0]+c;return 1<a.length?"("+c+")":c}}}return a+""};return{eq:c,str:function(a){for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],b];return b},show:function(a){return Text.monospace(g(b(a)))},
+Tuple:function(){var a=arguments.length,b=Array(a+1);for(b[0]="Tuple"+arguments.length;a--;)b[a+1]=arguments[a];return b},append:function(a,b){if("string"===typeof a&&"string"===typeof b)return a.concat(b);if("Nil"===a[0])return b;for(var c=["Cons",a[1],["Nil"]],g=c,a=a[2];"Cons"===a[0];)g[2]=["Cons",a[1],["Nil"]],a=a[2],g=g[2];g[2]=b;return c},listToArray:function(a){for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];return b},toText:function(a){if("string"===typeof a)return g(a);for(var b=[];"Cons"===
+a[0];)b.push(a[1]),a=a[2];return g(b.join(""))},properEscape:g,getTextSize:function(a,b,c){var g=document.createElement("div");g.innerHTML=c;g.style.textAlign="left";0<a&&(g.style.width=a+"px");g.style.visibility="hidden";g.style.styleFloat="left";g.style.cssFloat="left";document.body.appendChild(g);c=window.getComputedStyle(g);a=c.getPropertyValue("width").slice(0,-2)-0;c=c.getPropertyValue("height").slice(0,-2)-0;document.body.removeChild(g);delete g;return[Math.ceil(a),Math.ceil(Math.max(b,c))]},
+getSize:function(a){a=a.cloneNode(!0);a.style.visibility="hidden";a.style.styleFloat="left";a.style.cssFloat="left";document.body.appendChild(a);var b=a.offsetWidth,c=a.offsetHeight;document.body.removeChild(a);delete a;return[b,c]},getExcess:function(a){a=a.cloneNode(!0);a.style.visibility="hidden";a.style.styleFloat="left";a.style.cssFloat="left";document.body.appendChild(a);var b=a.offsetWidth,c=a.offsetHeight,g=window.getComputedStyle(a),j=g.getPropertyValue("width").slice(0,-2)-0,g=g.getPropertyValue("height").slice(0,
+-2)-0;document.body.removeChild(a);delete a;return[b-j,c-g]},groupForms:function(a){for(var a=Foreign.JavaScript.castListToJSArray(a),b=[],c=[],g=a.length;g--;){var j=a[g];switch(j[4][0]){case "FElement":0<c.length&&(b.push(c),c=[]);b.push(j);break;default:c.push(j)}}0<c.length&&b.push(c);return b}}}(),List=function(){function g(a){return function(b){if("Nil"===b[0])return b;"Cons"!==b[0]&&d("map");for(var i=["Cons",a(b[1]),["Nil"]],e=i,b=b[2];"Cons"===b[0];)e[2]=["Cons",a(b[1]),["Nil"]],b=b[2],e=
+e[2];return i}}function c(a){return function(b){return function(i){var e=b;if("Nil"===i[0])return e;for("Cons"!==i[0]&&d("foldl");"Cons"===i[0];)e=a(i[1])(e),i=i[2];return e}}}function b(a){return function(b){return function(i){var e=b;if("Nil"===i[0])return e;"Cons"!==i[0]&&d("foldr");for(var c=[];"Cons"===i[0];)c.push(i[1]),i=i[2];for(i=c.length;i--;)e=a(c[i])(e);return e}}}function a(a){return function(d){var i;"Cons"!==d[0]?i=void 0:(i=d[1],d=d[2],i=c(a)(i)(d));return i}}function h(a){return function(b){return function(i){if("Nil"===
+i[0])return["Cons",b,["Nil"]];"Cons"!==i[0]&&d("scanl");for(var e=[b];"Cons"===i[0];)b=a(i[1])(b),e.push(b),i=i[2];for(var i=["Nil"],c=e.length;c--;)i=["Cons",e[c],i];return i}}}function f(a){return function(d){a:{for(var i=[function(a){return"Nil"!==a[0]?void 0:["Tuple2",["Nil"],["Nil"]]},function(d){if("Cons"===d[0]){var b=d[1],d=d[2];var i=f(a)(d);"Tuple2"!==i[0]?b=void 0:(d=i[1],i=i[2],b=a(b)?["Tuple2",["Cons",b,d],i]:["Tuple2",d,["Cons",b,i]]);return b}}],b=i.length;b--;){var e=i[b](d);if(void 0!==
+e){d=e;break a}}d=void 0}return d}}function n(a){a:{for(var d=[function(a){return"Nil"!==a[0]?void 0:["Tuple2",["Nil"],["Nil"]]},function(a){if("Cons"!==a[0])a=void 0;else if(a=["Tuple2",a[1],n(a[2])],"Tuple2"!==a[0]||"Tuple2"!==a[1][0])a=void 0;else var d=a[1][1],b=a[1][2],a="Tuple2"!==a[2][0]?void 0:["Tuple2",["Cons",d,a[2][1]],["Cons",b,a[2][2]]];return a}],b=d.length;b--;){var e=d[b](a);if(void 0!==e){a=e;break a}}a=void 0}return a}function j(a){return function(d){a:{for(var b=[function(a){return"Nil"!==
+a[0]?void 0:["Nil"]},function(a){if("Cons"===a[0]){var d=a[1];return"Nil"!==a[2][0]?void 0:["Cons",d,["Nil"]]}},function(d){if("Cons"===d[0]){var b=d[1];if("Cons"===d[2][0]){var i=d[2][1],d=d[2][2];return["Cons",b,["Cons",a,j(a)(["Cons",i,d])]]}}}],e=b.length;e--;){var c=b[e](d);if(void 0!==c){d=c;break a}}d=void 0}return d}}function l(a){return function(d){a:{for(var b=[function(a){return"Nil"!==a[0]?void 0:["Nil"]},function(a){if("Cons"===a[0]){var d=a[1];return"Nil"!==a[2][0]?void 0:d}},function(d){if("Cons"===
+d[0]){var b=d[1];if("Cons"===d[2][0]){var e=d[2][1],d=d[2][2];return Value.append(b,Value.append(a,l(a)(["Cons",e,d])))}}}],e=b.length;e--;){var c=b[e](d);if(void 0!==c){d=c;break a}}d=void 0}return d}}var d=function(a){throw"Function '"+a+"' expecting a list!";},e=c(function(a){return function(d){return["Cons",a,d]}})(["Nil"]),u=b(function(a){return function(d){return Value.append(a,d)}})(["Nil"]),q=c(function(a){return function(d){return a&&d}})(!0),s=c(function(a){return function(d){return a||
+d}})(!1),k=c(function(a){return function(d){return a+d}})(0),m=c(function(a){return function(d){return a*d}})(1),r=a(function(a){return function(d){return Math.max(a,d)}}),v=a(function(a){return function(d){return Math.min(a,d)}});return{head:function(a){if("Cons"!==a[0])throw"Error: 'head' only accepts lists of length greater than one.";return a[1]},tail:function(a){if("Cons"!==a[0])throw"Error: 'tail' only accepts lists of length greater than one.";return a[2]},last:function(a){if("Cons"!==a[0])throw"Error: 'last' only accepts lists of length greater than one.";
+for(var d=a[1];"Cons"===a[0];)d=a[1],a=a[2];return d},map:g,foldl:c,foldr:b,foldl1:a,foldr1:function(a){return function(b){if("Nil"===b[0])throw"'foldr1' requires an non-empty list.";"Cons"!==b[0]&&d("foldr1");for(var e=[];"Cons"===b[0];)e.push(b[1]),b=b[2];for(var b=e.pop(),c=e.length;c--;)b=a(e[c])(b);return b}},scanl:h,scanl1:function(a){return function(d){if("Cons"!==d[0])throw"Error: 'scanl1' requires a list of at least length 1.";return h(a)(d[1])(d[2])}},filter:function(a){return function(b){if("Nil"===
+b[0])return b;"Cons"!==b[0]&&d("filter");for(var e=[];"Cons"===b[0];)a(b[1])&&e.push(b[1]),b=b[2];for(var b=["Nil"],c=e.length;c--;)b=["Cons",e[c],b];return b}},length:function(a){for(var d=0;"Cons"===a[0];)d+=1,a=a[2];return d},reverse:e,concat:u,concatMap:function(a){return function(d){return u(g(a)(d))}},and:q,or:s,forall:function(a){return c(function(d){return function(b){return b&&a(d)}})(!0)},exists:function(a){return c(function(d){return function(b){return b||a(d)}})(!1)},sum:k,product:m,maximum:r,
+minimum:v,partition:f,zipWith:function(a){return function(b){return function(e){if("Nil"===b[0]||"Nil"===e[0])return["Nil"];("Cons"!==b[0]||"Cons"!==e[0])&&d("zipWith");for(var c=[];"Cons"===b[0]&&"Cons"===e[0];)c.push(a(b[1])(e[1])),b=b[2],e=e[2];for(var e=["Nil"],l=c.length;l--;)e=["Cons",c[l],e];return e}}},zip:function(a){return function(b){if("Nil"===a[0]||"Nil"===b[0])return["Nil"];("Cons"!==a[0]||"Cons"!==b[0])&&d("zip");for(var e=[];"Cons"===a[0]&&"Cons"===b[0];)e.push(["Tuple2",a[1],b[1]]),
+a=a[2],b=b[2];for(var b=["Nil"],c=e.length;c--;)b=["Cons",e[c],b];return b}},unzip:n,intersperse:j,intercalate:l,sort:function(a){if("Nil"===a[0])return a;"Cons"!==a[0]&&d("sort");for(var b=[];"Cons"===a[0];)b.push(a[1]),a=a[2];b.sort(function(a,d){return a-d});for(var a=["Nil"],e=b.length;e--;)a=["Cons",b[e],a];return a},take:function(a){return function(b){if(0>=a)return["Nil"];if("Nil"===b[0])return b;"Cons"!==b[0]&&d("take");var e=["Cons",b[1],["Nil"]],c=e,b=b[2];for(--a;"Cons"===b[0]&&0<a;)c[2]=
+["Cons",b[1],["Nil"]],c=c[2],b=b[2],--a;return e}},drop:function(a){return function(b){if("Nil"===b[0])return b;for("Cons"!==b[0]&&d("drop");"Cons"===b[0]&&0<a;)b=b[2],--a;return b}}}}(),Data=function(){var g;g=function(b){return function(a){return"Just"===b[0]?["Cons",b[1],a]:a}};var c=function(b){return function(a){return function(c){var g=b(a);return"Just"===g[0]?["Cons",g[1],c]:c}}};g={Just:function(b){return["Just",b]},Nothing:["Nothing"],catMaybes:List.foldr(g)(["Nil"]),isJust:function(b){return"Just"===
+b[0]},isNothing:function(b){return"Nothing"===b[0]},fromMaybe:function(b){return function(a){return"Just"===a[0]?a[1]:b}},consMaybe:g,mapMaybe:function(b){return List.foldr(c(b))(["Nil"])},maybe:function(b){return function(a){return function(c){return"Just"===c[0]?a(c[1]):b}}}};return{String:{toText:Value.toText,properEscape:Value.properEscape},Char:{fromCode:function(b){return String.fromCharCode(b)},toCode:function(b){return b.charCodeAt(0)},toUpper:function(b){return b.toUpperCase()},toLower:function(b){return b.toLowerCase()},
+toLocaleUpper:function(b){return b.toLocaleUpperCase()},toLocaleLower:function(b){return b.toLocaleLowerCase()}},Maybe:g,List:List}}(),ElmCode=ElmCode||{};ElmCode.Graphics=ElmCode.Graphics||{};
+ElmCode.Graphics.Color=function(){return{rgba:function(g){return function(c){return function(b){return function(a){return["Color",g,c,b,a]}}}},rgb:function(g){return function(c){return function(b){return["Color",g,c,b,1]}}},red:["Color",255,0,0,1],green:["Color",0,255,0,1],blue:["Color",0,0,255,1],yellow:["Color",255,255,0,1],cyan:["Color",0,255,255,1],magenta:["Color",255,0,255,1],black:["Color",0,0,0,1],white:["Color",255,255,255,1],gray:["Color",128,128,128,1],grey:["Color",128,128,128,1],extract:function(g){return 1===
+g[4]?"rgb("+g[1]+","+g[2]+","+g[3]+")":"rgba("+g[1]+","+g[2]+","+g[3]+","+g[4]+")"}}}();
+var Collage=function(){function g(a,b){var d=b.length-1;if(!(0>=d))for(a.moveTo(b[d][1],b[d][2]);d--;)a.lineTo(b[d][1],b[d][2])}function c(a,b,d,e){0===a.length&&(a=[8,4]);var c=e.length-1;if(!(0>=c)){var g=e[c][1],s=e[c][2],f=0,m=0,r=0,h=0,p=0,n=0,i=a.length,x=!0,w=a[0];for(b.moveTo(g,s);c--;){f=e[c][1];m=e[c][2];r=f-g;h=m-s;for(p=Math.sqrt(r*r+h*h);w<=p;)g+=r*w/p,s+=h*w/p,b[x?"lineTo":"moveTo"](g,s),r=f-g,h=m-s,p=Math.sqrt(r*r+h*h),x=!x,n=(n+1)%i,w=a[n];0<p&&(b[x?"lineTo":"moveTo"](f,m),w-=p);g=
+f;s=m}}b.strokeStyle=ElmCode.Graphics.Color.extract(d);b.stroke()}function b(a,b,d,e,u){b.clearRect(0,0,d,e);for(d=u.length;d--;){var q=u[d],f=a,e=b,k=q[1],m=q[2],h=q[3][1],n=q[3][2],q=q[4];e.save();(0!==h||0!==n)&&e.translate(h,n);k!==~~k&&e.rotate(2*Math.PI*k);1!==m&&e.scale(m,m);e.beginPath();switch(q[0]){case "FLine":a:switch(f=e,k=q,q=k[3][1],k[1][0]){case "Solid":k=k[2];g(f,q);f.strokeStyle=ElmCode.Graphics.Color.extract(k);f.stroke();break;case "Dotted":c([3,3],f,k[2],q);break a;case "Dashed":c([8,
+4],f,k[2],q);break a;case "Custom":c(k[1][1],f,k[2],q)}break;case "FShape":a:switch(h=f,m=e,f=q[1],k=q[2],q=q[3][1],f[0]){case "Filled":f=m;g(f,q);f.fillStyle=ElmCode.Graphics.Color.extract(k);f.fill();break a;case "Outlined":f=m;g(f,q);f.strokeStyle=ElmCode.Graphics.Color.extract(k);f.stroke();break a;case "Textured":k=h;f=f[1];h=new Image;h.src=Foreign.JavaScript.castStringToJSString(f);h.onload=k;g(m,q);m.fillStyle=m.createPattern(h,"repeat");m.fill();break a;case "CustomOutline":c(f[1],m,k,q)}break;
+case "FImage":k=e,m=q[1],h=q[2],q=q[3],n=new Image,n.onload=f,n.src=Foreign.JavaScript.castStringToJSString(q),k.drawImage(n,-m/2,-h/2,m,h)}e.restore()}}function a(a,c,d){var e=Render.newElement("canvas");e.style.width=~~a+"px";e.style.height=~~c+"px";e.style.display="block";e.width=~~a;e.height=~~c;if(e.getContext){var g=e.getContext("2d"),a=e.width,c=e.height;b(function(){b(this,g,a,c,d)},g,a,c,d);return e}e.innerHTML="Your browser does not support the canvas element.";return e}function h(a,b,d,
+e,c,g,f){var k=Render.render(f),d="translate("+(c-f[3]/2)+"px,"+(g-f[4]/2)+"px) "+(1===e?"":"scale("+e+","+e+")")+" "+(d===~~d?"":"rotate("+360*d+"deg)");k.style.transform=d;k.style.msTransform=d;k.style.MozTransform=d;k.style.webkitTransform=d;k.style.OTransform=d;d=Render.newElement("div");Render.addTo(d,k);d.style.width=~~a+"px";d.style.height=~~b+"px";d.style.overflow="hidden";return d}function f(c,g,d){if(!Value.eq(d,g)){var e=c.style.width.slice(0,-2)-0,u=c.style.height.slice(0,-2)-0;if("object"===
+typeof d[0]){if("object"===typeof g[0]&&c.getContext){var f=c.getContext("2d");return b(function(){b(this,f,e,u,d)},f,e,u,d)}g=a(e,u,d);g.style.position="absolute";return c.parentNode.replaceChild(g,c)}g=h(e,u,d[1],d[2],d[3][1],d[3][2],d[4][1]);g.style.position="absolute";return c.parentNode.replaceChild(g,c)}}function n(a,b,d,e,c){var g=0,f,k=(a[1]-e[1])/d,a=(a[2]-e[2])/d;0!==b&&(b*=2*Math.PI,b=0===k?(0<a?Math.PI/2:-Math.PI/2)-b:Math.atan(a/k)+(0<k?0:Math.PI)-b,a=Math.sqrt(k*k+a*a),k=a*Math.cos(b),
+a*=Math.sin(b));if(0===c.length)return!1;f=c[0];for(d=c.length-1;d--;){b=c[d];e=f[1];f=f[2];var h=b[1],n=b[2];if(f<n)var v=f,p=n;else v=n,p=f;if(e<h)var t=e,i=h;else t=h,i=e;v<a&&a<=p&&k<=i&&(k<=t||k<=(a-f)*(h-e)/(n-f)+e)&&++g;f=b}return 1===g%2}return{collage:function(b,c,d){if(0===d.length)return a(b,c,[]);for(var e=Array(d.length),g=d.length;g--;){var f=d[g];e[g]="string"===typeof f[0]?h(b,c,f[1],f[2],f[3][1],f[3][2],f[4][1]):a(b,c,f)}return 1===d.length?e[0]:Render.flowWith(Render.goIn,function(a){return a},
+e)},updateCollage:function(a,b,d){if(1===d.length)return f(a,b[0],d[0]);for(var a=a.childNodes,e=a.length,c=e;c--;)f(a[e-c-1],b[c],d[c])},insideForm:function(a){return function(b){var d=a[1],c=a[2];if(6>b.length){var g=b[3][1],f=b[3][2],h=0,k=b[2];switch(b[4][0]){case "FShape":for(var m=b[4][3][1],r=m.length;--r;)var v=m[r],h=Math.max(h,v[1]*v[1]+v[2]*v[2]);h*=k*k;break;case "FImage":m=k*b[4][1]/2;k=k*b[4][2]/2;h=m*m+k*k;break;case "FElement":m=k*b[4][1][3]/2,k=k*b[4][1][4]/2,h=m*m+k*k}b.push(function(a,
+b){var d=a-g,c=b-f;return d*d+c*c<h+1})}if(!b[5](d,c))return!1;var p,t;switch(b[4][0]){case "FShape":return n(a,b[1],b[2],b[3],b[4][3][1]);case "FLine":return!1;case "FImage":p=b[4][1]/2;t=b[4][2]/2;break;case "FElement":p=b[4][1][3]/2,t=b[4][1][4]/2}return n(a,b[1],b[2],b[3],[[null,p,t],[null,-p,t],[null,-p,-t],[null,p,-t],[null,p,t]])}}}}(),ElmCode=ElmCode||{};ElmCode.Graphics=ElmCode.Graphics||{};
+ElmCode.Graphics.Element=function(){function g(a){return function(b){return["Position",a,b]}}function c(a){return function(b){return["EText",a,b]}}function b(a){return function(b){return["EFlow",a,Foreign.JavaScript.castListToJSArray(b)]}}function a(a){return["Line",Foreign.JavaScript.castListToJSArray(a)]}function h(a){return function(b){var d=Foreign.JavaScript.castListToJSArray(a);0<d.length&&d.push(d[0]);return["Shape",d,b]}}function f(a){return function(b){return function(d){return function(c){return["Form",
+a,b,d,c]}}}}function n(a){return function(b){return function(d){return["FLine",a,b,d]}}}function j(a){return function(b){return function(d){return["FShape",a,b,d]}}}function l(a,b,d,c,e,i){return["Element",Guid.guid(),a,b,d,c,e,i]}function d(a,b,d){return["Element",Guid.guid(),a,b,d,1,Nothing,Nothing]}function e(a){return~~a[3]}function u(a){return~~a[4]}function q(a){return function(b){return function(c){return d(["EImage",Foreign.JavaScript.castStringToJSString(c)],a,b)}}}function s(a){return function(b){return d(x,
+a,b)}}function k(a){return function(b){return function(d){var c=map(function(d){return["Tuple2",a/2*cos(2*(pi/50)*d),b/2*sin(2*(pi/50)*d)]}),e=49,i=["Nil"];if(0<=e){do i=["Cons",e,i];while(0<e--)}return h(c(i))(d)}}}var m=["DRight"],r=["DDown"],v=["DOut"],p=["Near"],t=["Mid"],i=["Far"],x=["EEmpty"],w=["Solid"],y=["Dotted"],z=["Dashed"],A=["Filled"],B=["Outlined"],C=g(p)(p),D=g(i)(p),E=g(p)(i),F=g(i)(i),G=g(p)(t),H=g(i)(t),p=g(t)(p),i=g(t)(i),t=g(t)(t);return{left:["DLeft"],right:m,down:r,up:["DUp"],
+inward:["DIn"],outward:v,topLeft:C,topRight:D,bottomLeft:E,bottomRight:F,midLeft:G,midRight:H,midTop:p,midBottom:i,middle:t,middleAt:function(a){return function(b){return["PositionAt",a,b]}},topLeftAt:function(a){return function(b){return["PositionTL",a,b]}},topRightAt:function(a){return function(b){return["PositionTR",a,b]}},bottomLeftAt:function(a){return function(b){return["PositionBL",a,b]}},bottomRightAt:function(a){return function(b){return["PositionBR",a,b]}},absolute:function(a){return["Absolute",
+a]},relative:function(a){return["Relative",a]},width:function(a){return function(b){var d=b[2];switch(d[0]){case "EImage":case "EVideo":return l(b[2],a,b[4]*a/b[3],b[5],b[6],b[7]);case "EText":return d=Value.getTextSize(a,b[4],d[2]),l(b[2],a,d[1],b[5],b[6],b[7])}return l(b[2],a,b[4],b[5],b[6],b[7])}},height:function(a){return function(b){switch(b[2][0]){case "EImage":case "EVideo":return l(b[2],b[3]*a/b[4],a,b[5],b[6],b[7])}return l(b[2],b[3],a,b[5],b[6],b[7])}},size:function(a){return function(b){return function(d){return l(d[2],
+a,b,d[5],d[6],d[7])}}},opacity:function(a){return function(b){return l(b[2],b[3],b[4],a,b[6],b[7])}},color:function(a){return function(b){return l(b[2],b[3],b[4],b[5],Just(a),b[7])}},link:function(a){return function(b){return l(b[2],b[3],b[4],b[5],b[6],Just(Foreign.JavaScript.castStringToJSString(a)))}},widthOf:e,heightOf:u,sizeOf:function(a){return["Tuple2",~~a[3],~~a[4]]},text:function(a){var b=Value.getTextSize(0,0,a);return d(c("left")(a),b[0],b[1])},asText:function(a){var a=Value.show(a),b=Value.getTextSize(0,
+0,a);return d(c("left")(a),b[0],b[1])},plainText:function(a){var a=Value.toText(a),b=Value.getTextSize(0,0,a);return d(c("left")(a),b[0],b[1])},centeredText:function(a){var b=Value.getTextSize(0,0,a);return d(c("center")(a),b[0],b[1])},justifiedText:function(a){var b=Value.getTextSize(0,0,a);return d(c("justify")(a),b[0],b[1])},rightedText:function(a){var b=Value.getTextSize(0,0,a);return d(c("right")(a),b[0],b[1])},image:q,images:function(a){var b=Elm.Input(s(0)(0)),a=Elm.Lift(function(a){var a=
+Foreign.JavaScript.castStringToJSString(a),d=new Image;d.onload=function(){console.log("loaded");Dispatcher.notify(b.id,q(this.width)(this.height)(a))};d.src=a},[a]);return Elm.Lift(function(a){return function(){return a}},[b,a])},video:function(a){return function(b){return function(c){return d(["EVideo",Foreign.JavaScript.castStringToJSString(c)],a,b)}}},fittedImage:function(a){return function(b){return function(c){return d(["EFittedImage",Foreign.JavaScript.castStringToJSString(c)],a,b)}}},flow:function(a){return function(c){var i;
+i=map(e)(c);a:{switch(a[0]){case "DLeft":i=sum(i);break a;case "DRight":i=sum(i);break a}i=maximum(i)}var g;g=map(u)(c);a:{switch(a[0]){case "DDown":g=sum(g);break a;case "DUp":g=sum(g);break a}g=maximum(g)}return d(b(a)(c),i,g)}},above:function(a){return function(c){return d(b(r)(["Cons",a,["Cons",c,["Nil"]]]),max(~~a[3])(~~c[3]),~~a[4]+~~c[4])}},below:function(a){return function(c){return d(b(r)(["Cons",c,["Cons",a,["Nil"]]]),max(~~a[3])(~~c[3]),~~a[4]+~~c[4])}},beside:function(a){return function(c){return d(b(m)(["Cons",
+a,["Cons",c,["Nil"]]]),~~a[3]+~~c[3],max(~~a[4])(~~c[4]))}},layers:function(a){return d(b(v)(a),maximum(map(e)(a)),maximum(map(u)(a)))},collage:function(a){return function(b){return function(c){return d(["ECollage",a,b,Value.groupForms(c)],a,b)}}},spacer:s,container:function(a){return function(b){return function(c){return function(e){return d(["EContainer",c,e],a,b)}}}},line:a,segment:function(b){return function(d){return a(["Cons",b,["Cons",d,["Nil"]]])}},polygon:h,rect:function(a){return function(b){return function(d){return h(["Cons",
+["Tuple2",0-a/2,0-b/2],["Cons",["Tuple2",0-a/2,b/2],["Cons",["Tuple2",a/2,b/2],["Cons",["Tuple2",a/2,0-b/2],["Nil"]]]]])(d)}}},oval:k,circle:function(a){return k(2*a)(2*a)},ngon:function(a){return function(b){return function(d){var c=toFloat(a),e=map(function(a){return["Tuple2",b*cos(2*(pi/c)*a),b*sin(2*(pi/c)*a)]}),i=a-1,g=["Nil"];if(0<=i){do g=["Cons",i,g];while(0<i--)}return h(e(g))(d)}}},solid:function(a){return function(b){return f(0)(1)(["Tuple2",0,0])(n(w)(a)(b))}},dotted:function(a){return function(b){return f(0)(1)(["Tuple2",
+0,0])(n(y)(a)(b))}},dashed:function(a){return function(b){return f(0)(1)(["Tuple2",0,0])(n(z)(a)(b))}},customLine:function(a){return function(b){return function(d){return f(0)(1)(["Tuple2",0,0])(n(["Custom",Foreign.JavaScript.castListToJSArray(a)])(b)(d))}}},filled:function(a){return function(b){return f(0)(1)(b[2])(j(A)(a)(b))}},outlined:function(a){return function(b){return f(0)(1)(b[2])(j(B)(a)(b))}},customOutline:function(a){return function(b){return function(d){return f(0)(1)(d[2])(j(["CustomOutline",
+Foreign.JavaScript.castListToJSArray(a)])(b)(d))}}},textured:function(a){return function(b){return f(0)(1)(b[2])(j(["Textured",a])(null)(b))}},sprite:function(a){return function(b){return function(d){return function(c){return f(0)(1)(c)(["FImage",b,d,Foreign.JavaScript.castStringToJSString(a)])}}}},toForm:function(a){return function(b){return f(0)(1)(a)(["FElement",b])}},rotate:function(a){return function(b){a:{switch(b[0]){case "Form":var d=b[2],c=b[3],e=b[4],b=f(a+b[1])(d)(c)(e);break a}throw"Non-exhaustive pattern match in case";
+}return b}},scale:function(a){return function(b){return f(b[1])(a*b[2])(b[3])(b[4])}},move:function(a){return function(b){return function(d){var c;a:{switch(d[0]){case "Form":c=d[1];var e=d[2],i=d[3],d=d[4];switch(i[0]){case "Tuple2":var g=i[1],i=i[2];c=f(c)(e)(["Tuple2",a+g,b+i])(d);break a}}throw"Non-exhaustive pattern match in case";}return c}}},isWithin:Collage.insideForm}}();
+var Text=function(){function g(a){return Value.toText(a)}var c=function(a){return function(b){return"<"+a+' style="padding:0;margin:0">'+b+"</"+a+">"}},b=function(a,b){return function(c){return"<span style='"+a+":"+b+"'>"+c+"</span>"}},a=function(a){a=Foreign.JavaScript.castStringToJSString(a);return b("font-family",a)},h=c("h1"),f=b("font-style","italic"),c=c("b"),n=b("text-decoration","underline"),j=b("text-decoration","overline"),l=b("text-decoration","line-through");return{fromString:g,toText:g,
+header:h,height:function(a){return b("font-size",a+"em")},italic:f,bold:c,underline:n,overline:j,strikeThrough:l,monospace:a("monospace"),typeface:a,color:function(a){return b("color",ElmCode.Graphics.Color.extract(a))},link:function(a){return function(b){return"<a href='"+g(a)+"'>"+b+"</a>"}}}}(),Render=function(){function g(a){a=document.createElement(a);a.style.padding="0";a.style.margin="0";return a}function c(a){return a}function b(a){a.style.styleFloat="left";a.style.cssFloat="left";return a}
+function a(a){a.style.position="absolute";return a}function h(a,b,c){for(var f=g("div"),l=c.length;l--;){var j=a(b(c[l]));f.appendChild(j)}return f}function f(a){switch(a[0]){case "Absolute":return a[1]+"px";case "Relative":return 100*a[1]+"%"}}function n(a,b){b.style.position="absolute";b.style.margin="auto";switch(a[0]){case "Position":"Far"!==a[1][0]&&(b.style.left=0);"Near"!==a[1][0]&&(b.style.right=0);"Far"!==a[2][0]&&(b.style.top=0);"Near"!==a[2][0]&&(b.style.bottom=0);break;case "PositionAt":b.style.top=
+f(a[2]);b.style.left=f(a[1]);var c="translate("+-elem[3]/2+"px,"+-elem[4]/2+"px)";b.style.transform=c;b.style.msTransform=c;b.style.MozTransform=c;b.style.webkitTransform=c;b.style.OTransform=c;break;default:c=a[0].slice(-2),b.style["T"===c[0]?"top":"bottom"]=f(a[2]),b.style["L"===c[1]?"left":"right"]=f(a[1])}}function j(d){var e={};switch(d[2][0]){case "EText":var e=d[2][1],f=d[2][2],l=g("div");l.innerHTML=f;l.style.textAlign=e;e=l;break;case "EImage":e=d[2][1];f=g("img");f.src=e;f.name=e;f.style.display=
+"block";e=f;break;case "EVideo":l=d[2][1];e=g("video");e.controls="controls";f=g("source");f.src=l;l=l.split(".");f.type="video/"+l[l.length-1];e.appendChild(f);e.style.display="block";break;case "EFittedImage":var s=d[3],k=d[4],e=d[2][1],m=g("canvas");m.style.display="block";m.style.width=s+"px";m.style.height=k+"px";m.width=s;m.height=k;m.innerHTML="Your browser does not support the canvas element.";var r=g("img");r.onload=function(){if(m.getContext){var a=m.getContext("2d"),b=0,d=0,c=this.width,
+e=this.height;s/k>this.width/this.height?(e=this.width*k/s,d=(this.height-e)/2):(c=this.height*s/k,b=(this.width-c)/2);a.drawImage(r,b,d,c,e,0,0,m.width,m.height)}};r.src=e;e=m;break;case "EFlow":a:{e=d[2][2];switch(d[2][1][0]){case "DDown":e=e.slice(0).reverse();case "DUp":e=h(c,j,e);break a;case "DRight":e=e.slice(0).reverse();case "DLeft":e=h(b,j,e);break a;case "DOut":e=e.slice(0).reverse();case "DIn":e=h(a,j,e);break a}e=void 0}break;case "ECollage":e=Collage.collage(d[2][1],d[2][2],d[2][3]);
+break;case "EEmpty":e=g("div");break;case "EContainer":f=d[2][1];e=j(d[2][2]);n(f,e);f=g("div");f.style.position="relative";f.style.overflow="hidden";f.appendChild(e);e=f;break;case "EHtml":e=d[2][1];"button"!==e.type&&(f=Value.getExcess(e),d[3]-=f[0],d[4]-=f[1]);break;case "EExternalHtml":e=g("div"),e.appendChild(d[2][1])}e.id=d[1];e.style.width=~~d[3]+"px";e.style.height=~~d[4]+"px";1!==d[5]&&(e.style.opacity=d[5]);"Just"===d[6][0]&&(e.style.backgroundColor=ElmCode.Graphics.Color.extract(d[6][1]));
+return"Just"===d[7][0]?(f=g("a"),f.href=d[7][1],f.appendChild(e),f):e}function l(d,e,g){"A"===d.tagName&&(d=d.firstChild);if(e[1]!==g[1]){if(e[2][0]!==g[2][0])return d.parentNode.replaceChild(j(g),d);var f=g[2],h=e[2];switch(f[0]){case "EText":f[1]!==h[1]&&(d.style.textAlign=f[1]);f[2]!==h[2]&&(d.innerHTML=f[2]);break;case "EImage":f[1]!==h[1]&&(d.src=f[1]);break;case "EVideo":case "EFittedImage":if(!Value.eq(f,h)||g[3]!==e[3]||g[4]!==e[4])return d.parentNode.replaceChild(j(g),d);break;case "ECollage":if(f[1]!==
+h[1]||f[2]!==h[2]||f[3].length!==h[3].length)return d.parentNode.replaceChild(j(g),d);Collage.updateCollage(d,h[3],f[3]);break;case "EFlow":if(f[1]!==h[1])return d.parentNode.replaceChild(j(g),d);var k=f[2],m=d.childNodes;if(k.length!==m.length)return d.parentNode.replaceChild(j(g),d);var h=h[2],r={};switch(f[1][0]){case "DDown":case "DUp":r=c;break;case "DRight":case "DLeft":r=b;break;case "DOut":case "DIn":r=a}for(f=m.length;f--;)l(m[f],h[f],k[f]),r(m[f]);break;case "EContainer":l(d.childNodes[0],
+h[2],f[2]);n(f[1],d.childNodes[0]);break;case "EHtml":g[1]!==e[1]&&(k=j(g),d.parentNode.replaceChild(k,d),d=k);"button"!==k.type&&(f=Value.getExcess(d),g[3]-=f[0],g[4]-=f[1]);break;case "EExternalHtml":g[1]!==e[1]&&d.parentNode.replaceChild(j(g),d)}g[3]!==e[3]&&(d.style.width=~~g[3]+"px");g[4]!==e[4]&&(d.style.height=~~g[4]+"px");g[5]!==e[5]&&(d.style.opacity=g[5]);2===g[6].length&&(f=ElmCode.Graphics.Color.extract(g[6][1]),f!==d.style.backgroundColor&&(d.style.backgroundColor=f));if(2===g[7].length&&
+(1===e[7].length||g[7][1]!==e[7][1]))d.parentNode.href=g[7][1];g[1]=e[1]}}return{render:j,update:l,addTo:function(a,b){a.appendChild(b)},newElement:g,flowWith:h,goIn:a}}(),Elm=function(){var g=function(a,b,c){for(var g=a.kids,f=g.length;f--;)g[f].recv(b,c,a.id)},c=function(a){this.id=Guid.guid();this.value=a;this.kids=[];this.defaultNumberOfKids=0;this.recv=function(a,b,c){if(b=b===this.id)this.value=c;g(this,a,b);return b};Dispatcher.inputs.push(this)},b=function(a,b){this.id=Guid.guid();this.value=
+null;this.kids=[];this.count=0;this.changed=!1;b.reverse();this.recalc=function(){for(var c=a,e=b.length;e--;)c=c(b[e].value);this.value=c};this.recalc();this.recv=function(a,c){this.count+=1;c&&(this.changed=!0);this.count==b.length&&(this.changed&&this.recalc(),g(this,a,this.changed),this.changed=!1,this.count=0)};for(var c=b.length;c--;)b[c].kids.push(this)},a=function(a,b,c,f){this.id=Guid.guid();this.value=c?b(f.value):b;this.kids=[];this.recv=function(b,c){c&&(this.value=a(f.value)(this.value));
+g(this,b,c)};f.kids.push(this)},h=function(a,b,c){this.id=Guid.guid();this.value=a(c.value)?b:c.value;this.kids=[];this.recv=function(b,d){var f=d&&!a(c.value);f&&(this.value=c.value);g(this,b,f)};c.kids.push(this)},f=function(a){this.id=Guid.guid();this.value=a.value;this.kids=[];this.recv=function(b,c){var f=c&&!eq(this.value,a.value);f&&(this.value=a.value);g(this,b,f)};a.kids.push(this)},n=function(a){return function(c){return function(e){e=new b(function(a){return function(b){return[a,b]}},[a,
+e]);e=new h(function(a){return a[0]},[!0,c],e);return new b(function(a){return a[1]},[e])}}},j=function(a,b){this.id=Guid.guid();this.value=b.value;this.kids=[];this.count=0;this.changed=!1;this.recv=function(c,f,h){h===a.id&&(this.changed=f);this.count+=1;2==this.count&&(this.changed&&(this.value=b.value),g(this,c,this.changed),this.count=0,this.changed=!1)};a.kids.push(this);b.kids.push(this)};return{Input:function(a){return new c(a)},Lift:function(a,c){return new b(a,c)},Fold:function(b,c,e){return new a(b,
+c,!1,e)},Fold1:function(b,c,e){return new a(b,c,!0,e)},keepIf:function(a){return function(b){return function(c){return new h(function(b){return!a(b)},b,c)}}},dropIf:function(a){return function(b){return function(c){return new h(a,b,c)}}},keepWhen:function(a){return n(new b(function(a){return!a},[a]))},dropWhen:n,dropRepeats:function(a){return new f(a)},sampleOn:function(a){return function(b){return new j(a,b)}}}}(),Dispatcher=function(){function g(a){if(!a.hasOwnProperty("defaultNumberOfKids"))return!0;
+var b=a.kids.length;if(0==b)return!1;if(b>a.defaultNumberOfKids)return!0;for(var c=!1;b--;)c=c||g(a.kids[b]);return c}var c=null,b=0,a=[],h=null;return{initialize:function(){c=ElmCode.main();c.hasOwnProperty("recv")||(c=Elm.Input(c));h=c.value;for(var b=[],n=a.length;n--;)g(a[n])&&b.push(a[n]);a=b;document.getElementById("content").appendChild(Render.render(h));b=document.getElementById("widthChecker").offsetWidth;b!==window.innerWidth&&Dispatcher.notify(Window.dimensions.id,Value.Tuple(b,window.innerHeight));
+c=Elm.Lift(function(a){var b=document.getElementById("content");Render.update(b.firstChild,h,a);return h=a},[c])},notify:function(c,g){b+=1;for(var h=!1,l=a.length;l--;)h=a[l].recv(b,c,g)||h;return h},inputs:a}}(),Signal=function(){function g(a){var b=Value.getSize(a);return["Element",Guid.guid(),["EHtml",a],b[0],b[1],1,Nothing,Nothing]}function c(a){for(var b=["Nil"],c=a.length;c--;)b=["Cons",a[c],b];return b}var b;b=document.addEventListener?function(a,b,c){a.addEventListener(b,c,!1)}:function(a,
+b,c){a.attachEvent("on"+b,c)};var a,h=function(a){var b=0,c=0;a||(a=window.event);if(a.pageX||a.pageY)b=a.pageX,c=a.pageY;else if(a.clientX||a.clientY)b=a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,c=a.clientY+document.body.scrollTop+document.documentElement.scrollTop;return Value.Tuple(b,c)},f=Elm.Input(Value.Tuple(0,0));f.defaultNumberOfKids=2;a=Elm.Lift(function(a){return a[1]},[f]);a.defaultNumberOfKids=0;var n=Elm.Lift(function(a){return a[2]},[f]);n.defaultNumberOfKids=
+0;var j=Elm.Input(!1),l=Elm.Input(!1),d=Elm.Input(Value.Tuple());b(document,"click",function(a){var b=Dispatcher.notify(l.id,!0),c=Dispatcher.notify(d.id,Value.Tuple());Dispatcher.notify(l.id,!1);!b&&!c&&this.removeEventListener("click",arguments.callee,!1)});b(document,"mousedown",function(a){Dispatcher.notify(j.id,!0)||this.removeEventListener("mousedown",arguments.callee,!1)});b(document,"mouseup",function(a){Dispatcher.notify(j.id,!1)||this.removeEventListener("mouseup",arguments.callee,!1)});
+b(document,"mousemove",function(a){Dispatcher.notify(f.id,h(a))||this.removeEventListener("mousemove",arguments.callee,!1)});a={position:f,x:a,y:n,isClicked:l,isDown:j,clicks:d,isClickedOn:function(a){var a=Render.render(a),c=Elm.Input(!1);b(a,"click",function(){Dispatcher.notify(c.id,!0);Dispatcher.notify(c.id,!1)});return Value.Tuple(g(a),c)}};var e=Elm.Input(Value.Tuple(window.innerWidth,window.innerHeight));e.defaultNumberOfKids=2;n=Elm.Lift(function(a){return a[1]},[e]);n.defaultNumberOfKids=
+0;var u=Elm.Lift(function(a){return a[2]},[e]);u.defaultNumberOfKids=0;b(window,"resize",function(a){var b=document.getElementById("widthChecker").offsetWidth;Dispatcher.notify(e.id,Value.Tuple(b,window.innerHeight))||this.removeEventListener("resize",arguments.callee,!1)});var n={dimensions:e,width:n,height:u},q=function(a,b){return"Nil"===b[0]?b:b[1]===a?b[2]:["Cons",b[1],q(a,b[2])]},s=Elm.Input(["Nil"]),k=Elm.Input(["Nothing"]);b(document,"keydown",function(a){var b;a:{for(b=s.value;"Nil"!==b[0];){if(b[1]===
+a.keyCode){b=!0;break a}b=b[2]}b=!1}b||Dispatcher.notify(s.id,["Cons",a.keyCode,s.value])||this.removeEventListener("keydown",arguments.callee,!1)});b(document,"keyup",function(a){var b=q(a.keyCode,s.value);Dispatcher.notify(s.id,b)||this.removeEventListener("keyup",arguments.callee,!1)});b(window,"blur",function(a){Dispatcher.notify(s.id,["Nil"])||this.removeEventListener("blur",arguments.callee,!1)});b(document,"keypress",function(a){var b=Dispatcher.notify(k.id,["Just",a.charCode||a.keyCode]);
+Dispatcher.notify(k.id,["Nothing"]);b||this.removeEventListener("keypress",arguments.callee,!1)});var u={Raw:{keysDown:s,charPressed:k}},m;m=function(a){return function(b){var d=Elm.Input(["Waiting"]),e={};window.XMLHttpRequest?e=new XMLHttpRequest:window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLHTTP"));e.onreadystatechange=function(){4===e.readyState&&Dispatcher.notify(d.id,200===e.status?["Success",c(e.responseText)]:["Failure",e.status,c(e.statusText)])};e.open(a,Value.toText(b),!0);e.send(null);
+return d}};var r=function(a){return function(b){var d=Elm.Input(["Nothing"]),b=Elm.Lift(function(b){if("Just"!==b[0]){try{Dispatcher.notify(d.id,["Nothing"])}catch(e){}return[]}try{Dispatcher.notify(d.id,["Just",["Waiting"]])}catch(g){d.value=["Just",["Waiting"]]}var f={};window.XMLHttpRequest?f=new XMLHttpRequest:window.ActiveXObject&&(f=new ActiveXObject("Microsoft.XMLHTTP"));f.onreadystatechange=function(){4===f.readyState&&Dispatcher.notify(d.id,["Just",200===f.status?["Success",c(f.responseText)]:
+["Failure",f.status,c(f.statusText)]])};f.open(a,Value.toText(b[1]),!0);f.send(null);return[]},[b]);return Elm.Lift(function(a){return function(){return a}},[d,b])}};m={get:m("GET"),post:m("POST"),gets:r("GET"),posts:r("POST")};var v=function(a,d){a.placeholder=Foreign.JavaScript.castStringToJSString(d);var e=Elm.Input(["Nil"]);b(a,"keyup",function(){Dispatcher.notify(e.id,c(a.value));a.focus()});a.style.padding="1px";return Value.Tuple(g(a),e)},p=function(a){a=document.createElement(a);a.style.padding=
+"0";a.style.margin="0";return a},t=function(a){for(var c=p("select"),d=[];"Cons"===a[0];){var e=p("option"),f=Text.toText(a[1][1]);e.value=f;e.innerHTML=f;c.appendChild(e);d.push(a[1][2]);a=a[2]}var h=Elm.Input(d[0]);b(c,"change",function(){Dispatcher.notify(h.id,d[c.selectedIndex])});return Value.Tuple(g(c),h)};return{addListener:b,Mouse:a,Keyboard:u,Time:{every:function(a){var a=1E3*a,b=Elm.Input(0),c=0;setInterval(function(){c+=a;Dispatcher.notify(b.id,c/1E3)},a);return b},after:function(a){var a=
+1E3*a,b=Elm.Input(!1);setTimeout(function(){Dispatcher.notify(b.id,!0)},a);return b},before:function(a){var a=1E3*a,b=Elm.Input(!0);setTimeout(function(){Dispatcher.notify(b.id,!1)},a);return b}},Window:n,HTTP:m,Random:{inRange:function(a){return function(b){return Elm.Input(Math.floor(Math.random()*(b-a+1))+a)}},randomize:function(a){return function(b){return function(c){return Elm.Lift(function(){return Math.floor(Math.random()*(b-a+1))+a},[c])}}}},Input:{textArea:function(a){return function(b){var c=
+p("textarea");c.rows=b;c.cols=a;return v(c,"")}},textField:function(a){var b=p("input");b.type="text";return v(b,a)},password:function(a){var b=p("input");b.type="password";return v(b,a)},checkbox:function(a){var c=p("input");c.type="checkbox";c.checked=a;var d=Elm.Input(a);b(c,"change",function(){Dispatcher.notify(d.id,c.checked)});return Value.Tuple(g(c),d)},dropDown:t,stringDropDown:function(a){return t(List.map(function(a){return Value.Tuple(a,a)})(a))},button:function(a){var c=p("input");c.type=
+"button";c.value=Foreign.JavaScript.castStringToJSString(a);var d=Elm.Input(!1);b(c,"click",function(){Dispatcher.notify(d.id,!0);Dispatcher.notify(d.id,!1)});return Value.Tuple(g(c),d)}},constant:function(a){return Elm.Input(a)},lift:function(a){return function(b){return Elm.Lift(a,[b])}},lift2:function(a){return function(b){return function(c){return Elm.Lift(a,[b,c])}}},lift3:function(a){return function(b){return function(c){return function(d){return Elm.Lift(a,[b,c,d])}}}},lift4:function(a){return function(b){return function(c){return function(d){return function(e){return Elm.Lift(a,
+[b,c,d,e])}}}}},foldp:function(a){return function(b){return function(c){return Elm.Fold(a,b,c)}}},foldp_:function(a){return function(b){return function(c){return Elm.Fold1(a,b,c)}}},foldp1:function(a){return function(b){return Elm.Fold1(a,function(a){return a},b)}},count:function(a){return Elm.Fold(function(){return function(a){return a+1}},0,a)},keepIf:Elm.keepIf,dropIf:Elm.dropIf,keepWhen:Elm.keepWhen,dropWhen:Elm.dropWhen,dropRepeats:Elm.dropRepeats,sampleOn:Elm.sampleOn}}(),Prelude=function(){var g=
+function(c){return function(b){var a=c%b,a=0==c?0:0<b?0<=c?a:a+b:-g(-c)(-b);return a==b?0:a}};return{id:function(c){return c},not:function(c){return!c},fst:function(c){return c[1]},snd:function(c){return c[2]},rem:function(c){return function(b){return c%b}},div:function(c){return function(b){return~~(c/b)}},compare:function(c){return function(b){c="object"===typeof c?toText(c):c;b="object"===typeof b?toText(b):b;return[c===b?"EQ":c<b?"LT":"GT"]}},toFloat:function(c){return c},round:function(c){return Math.round(c)},
+floor:function(c){return Math.floor(c)},ceiling:function(c){return Math.ceil(c)},truncate:function(c){return~~c},sqrt:Math.sqrt,abs:Math.abs,pi:Math.PI,e:Math.E,sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,mod:g,min:function(c){return function(b){return Math.min(c,b)}},max:function(c){return function(b){return Math.max(c,b)}},flip:function(c){return function(b){return function(a){return c(a)(b)}}},clamp:function(c){return function(b){return function(a){return Math.min(b,
+Math.max(c,a))}}},curry:function(c){return function(b){return function(a){return c(["Tuple2",b,a])}}},uncurry:function(c){return function(b){if("Tuple2"!==b[0])throw"Function was uncurry'd but was not given a pair.";return c(b[1])(b[2])}},logBase:function(c){return function(b){return Math.log(b)/Math.log(c)}},Just:Data.Maybe.Just,Nothing:Data.Maybe.Nothing,maybe:Data.Maybe.maybe,map:Data.List.map,filter:Data.List.filter,head:Data.List.head,tail:Data.List.tail,last:Data.List.last,length:Data.List.length,
+reverse:Data.List.reverse,foldr:Data.List.foldr,foldr1:Data.List.foldr1,foldl:Data.List.foldl,foldl1:Data.List.foldl1,and:Data.List.and,or:Data.List.or,forall:Data.List.forall,exists:Data.List.exists,sum:Data.List.sum,product:Data.List.product,concat:Data.List.concat,concatMap:Data.List.concatMap,maximum:Data.List.maximum,minimum:Data.List.minimum,scanl:Data.List.scanl,scanl1:Data.List.scanl1,take:Data.List.take,drop:Data.List.drop,lift:Signal.lift,lift2:Signal.lift2,lift3:Signal.lift3,lift4:Signal.lift4,
+foldp:Signal.foldp,foldp1:Signal.foldp1,foldp_:Signal.foldp_,constant:Signal.constant,count:Signal.count,keepIf:Signal.keepIf,dropIf:Signal.dropIf,keepWhen:Signal.keepWhen,dropWhen:Signal.dropWhen,dropRepeats:Signal.dropRepeats,sampleOn:Signal.sampleOn}}(),eq=Value.eq;Signal.addListener(document,"elm_log",function(g){console.log(g.value)});Signal.addListener(document,"elm_title",function(g){document.title=g.value});
+Signal.addListener(document,"elm_redirect",function(g){0<g.value.length&&(window.location=g.value)});var includeGlobal=this;
+(function(){var g=function(b){for(var a in b)if("Internal"!==a)try{includeGlobal[a]=b[a]}catch(c){"length"===a&&(includeGlobal.execScript("var length;"),length=b[a])}},c=function(b){return function(a){includeGlobal[b]=includeGlobal[b]||{};for(var c in a)"Internal"!==c&&(includeGlobal[b][c]=a[c])}};g(Element);g(Text);color=Element.color;height=Element.height;show=Value.show;g(ElmCode.Graphics.Color);g(ElmCode.Graphics.Element);c("Time")(Signal.Time);c("Mouse")(Signal.Mouse);c("Keyboard")(Signal.Keyboard);
+c("Window")(Signal.Window);c("HTTP")(Signal.HTTP);c("Input")(Signal.Input);c("Random")(Signal.Random)})();ElmCode=ElmCode||{};ElmCode.Data=Data;ElmCode.Signal=Signal;ElmCode.Data.List=List;ElmCode.Foreign=Foreign;ElmCode.Prelude=Prelude;ElmCode.Graphics.Text=Text;
diff --git a/src/Compiler.hs b/src/Compiler.hs
--- a/src/Compiler.hs
+++ b/src/Compiler.hs
@@ -4,6 +4,7 @@
 import Data.Either (lefts, rights)
 import Data.List (intersect, intercalate)
 import Data.Maybe (fromMaybe)
+import Data.Version (showVersion)
 import System.Console.CmdArgs
 import Text.Blaze.Html.Renderer.String (renderHtml)
 
@@ -40,11 +41,11 @@
           , minify = False &= help "Minify generated JavaScript"
           } &=
     help "Compile Elm programs to HTML, CSS, and JavaScript." &=
-    summary ("The Elm Compiler " ++ show version ++ ", (c) Evan Czaplicki")
+    summary ("The Elm Compiler " ++ showVersion version ++ ", (c) Evan Czaplicki")
 
 main = do
   args <- cmdArgs elm
-  mini <- getDataFileName ("elm-runtime-" ++ show version ++ ".js")
+  mini <- getDataFileName ("elm-runtime-" ++ showVersion version ++ ".js")
   compileArgs mini args
 
 compileArgs mini (ELM _ [] _ _ _ _ _ _) =
diff --git a/src/Language/Elm.hs b/src/Language/Elm.hs
--- a/src/Language/Elm.hs
+++ b/src/Language/Elm.hs
@@ -16,6 +16,7 @@
     runtimeLocation
     ) where
 
+import Data.Version (showVersion)
 import CompileToJS
 import ExtractNoscript
 import GenerateHtml
@@ -27,7 +28,7 @@
 import qualified Data.Text as TS
 import qualified Data.Text.Lazy as TL
 
-runtimeLocation = getDataFileName ("elm-runtime-" ++ show version ++ ".js")
+runtimeLocation = getDataFileName ("elm-runtime-" ++ showVersion version ++ ".js")
 
 class ElmSource a where
   -- |This function compiles Elm code to three separate parts: HTML, CSS,
