1
0
mirror of https://github.com/s00500/ESPUI.git synced 2024-06-09 06:23:31 +00:00
ESPUI/src/dataControlsJS.h

5 lines
23 KiB
C

const char JS_CONTROLS[] PROGMEM = R"=====(
const UI_INITIAL_GUI=200,UI_RELOAD=201,UPDATE_OFFSET=100,UI_TITEL=0,UI_PAD=1,UPDATE_PAD=101,UI_CPAD=2,UPDATE_CPAD=102,UI_BUTTON=3,UPDATE_BUTTON=103,UI_LABEL=4,UPDATE_LABEL=104,UI_SWITCHER=5,UPDATE_SWITCHER=105,UI_SLIDER=6,UPDATE_SLIDER=106,UI_NUMBER=7,UPDATE_NUMBER=107,UI_TEXT_INPUT=8,UPDATE_TEXT_INPUT=108,UI_GRAPH=9,ADD_GRAPH_POINT=10,CLEAR_GRAPH=109,UI_TAB=11,UPDATE_TAB=111,UI_SELECT=12,UPDATE_SELECT=112,UI_OPTION=13,UPDATE_OPTION=113,UI_MIN=14,UPDATE_MIN=114,UI_MAX=15,UPDATE_MAX=115,UI_STEP=16,UPDATE_STEP=116,UI_GAUGE=17,UPDATE_GAUGE=117,UI_ACCEL=18,UPTDATE_ACCEL=117,UP=0,DOWN=1,LEFT=2,RIGHT=3,CENTER=4,C_TURQUOISE=0,C_EMERALD=1,C_PETERRIVER=2,C_WETASPHALT=3,C_SUNFLOWER=4,C_CARROT=5,C_ALIZARIN=6,C_DARK=7,C_NONE=255;var websock,graphData=new Array,hasAccel=!1,sliderContinuous=!1;function colorClass(e){switch(e=Number(e)){case C_TURQUOISE:return"turquoise";case C_EMERALD:return"emerald";case C_PETERRIVER:return"peterriver";case C_WETASPHALT:return"wetasphalt";case C_SUNFLOWER:return"sunflower";case C_CARROT:return"carrot";case C_ALIZARIN:return"alizarin";case C_NONE:return"dark";default:return""}}var websockConnected=!1;function requestOrientationPermission(){}function saveGraphData(){localStorage.setItem("espuigraphs",JSON.stringify(graphData))}function restoreGraphData(e){var a=localStorage.getItem("espuigraphs",graphData);return null!=a?(a=JSON.parse(a))[e]:[]}function restart(){$(document).add("*").off(),$("#row").html(""),websock.close(),start()}function conStatusError(){websockConnected=!1,$("#conStatus").removeClass("color-green"),$("#conStatus").addClass("color-red"),$("#conStatus").html("Error / No Connection &#8635;"),$("#conStatus").off(),$("#conStatus").on({click:restart})}function handleVisibilityChange(){websockConnected||document.hidden||restart()}function start(){document.addEventListener("visibilitychange",handleVisibilityChange,!1),(websock=""!=window.location.port||80!=window.location.port||443!=window.location.port?new WebSocket("ws://"+window.location.hostname+":"+window.location.port+"/ws"):new WebSocket("ws://"+window.location.hostname+"/ws")).onopen=function(e){console.log("websock open"),$("#conStatus").addClass("color-green"),$("#conStatus").text("Connected"),websockConnected=!0},websock.onclose=function(e){console.log("websock close"),conStatusError()},websock.onerror=function(e){console.log(e),conStatusError()};var e=function(a){console.log(a);var t=JSON.parse(a.data);document.body;switch(t.type){case UI_INITIAL_GUI:$("#row").html(""),$("#tabsnav").html(""),$("#tabscontent").html(""),t.sliderContinuous&&(sliderContinuous=t.sliderContinuous),t.controls.forEach(a=>{var t={data:JSON.stringify(a)};e(t)});break;case UI_RELOAD:window.location.reload();break;case UI_TITEL:document.title=t.label,$("#mainHeader").html(t.label);break;case UI_LABEL:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><span id='l"+t.id+"' class='label label-wrap'>"+t.value+"</span></div>");break;case UI_BUTTON:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='one columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><button id='btn"+t.id+"' onmousedown='buttonclick("+t.id+", true)' onmouseup='buttonclick("+t.id+", false)'>"+t.value+"</button></div>"),$("#btn"+t.id).on({touchstart:function(e){e.preventDefault(),buttonclick(t.id,!0)},touchend:function(e){e.preventDefault(),buttonclick(t.id,!1)}});break;case UI_SWITCHER:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='one columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><label id='sl"+t.id+"' class='switch "+("1"==t.value?"checked":"")+"'><div class='in'><input type='checkbox' id='s"+t.id+"' onClick='switcher("+t.id+",null)' "+("1"==t.value?"checked":"")+"/></div></label></div>"),switcher(t.id,t.value);break;case UI_CPAD:case UI_PAD:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><nav class='control'><ul><li><a onmousedown='padclick(UP, "+t.id+", true)' onmouseup='padclick(UP, "+t.id+", false)' id='pf"+t.id+"'>&#9650;</a></li><li><a onmousedown='padclick(RIGHT, "+t.id+", true)' onmouseup='padclick(RIGHT, "+t.id+", false)' id='pr"+t.id+"'>&#9650;</a></li><li><a onmousedown='padclick(LEFT, "+t.id+", true)' onmouseup='padclick(LEFT, "+t.id+", false)' id='pl"+t.id+"'>&#9650;</a></li><li><a onmousedown='padclick(DOWN, "+t.id+", true)' onmouseup='padclick(DOWN, "+t.id+", false)' id='pb"+t.id+"'>&#9650;</a></li></ul>"+(t.type==UI_CPAD?"<a class='confirm' onmousedown='padclick(CENTER,"+t.id+", true)' onmouseup='padclick(CENTER, "+t.id+", false)' id='pc"+t.id+"'>OK</a>":"")+"</nav></div>"),$("#pf"+t.id).on({touchstart:function(e){e.preventDefault(),padclick(UP,t.id,!0)},touchend:function(e){e.preventDefault(),padclick(UP,t.id,!1)}}),$("#pl"+t.id).on({touchstart:function(e){e.preventDefault(),padclick(LEFT,t.id,!0)},touchend:function(e){e.preventDefault(),padclick(LEFT,t.id,!1)}}),$("#pr"+t.id).on({touchstart:function(e){e.preventDefault(),padclick(RIGHT,t.id,!0)},touchend:function(e){e.preventDefault(),padclick(RIGHT,t.id,!1)}}),$("#pb"+t.id).on({touchstart:function(e){e.preventDefault(),padclick(DOWN,t.id,!0)},touchend:function(e){e.preventDefault(),padclick(DOWN,t.id,!1)}}),$("#pc"+t.id).on({touchstart:function(e){e.preventDefault(),padclick(CENTER,t.id,!0)},touchend:function(e){e.preventDefault(),padclick(CENTER,t.id,!1)}});break;case UI_SLIDER:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter card-slider "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><div class='range-slider'><input id='sl"+t.id+"' type='range' min='0' max='100' value='"+t.value+"' class='range-slider__range'><span class='range-slider__value'>"+t.value+"</span></div></div>"),rangeSlider(!sliderContinuous);break;case UI_NUMBER:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><input style='color:black;' id='num"+t.id+"' type='number' value='"+t.value+"' onchange='numberchange("+t.id+")' /></div>");break;case UI_TEXT_INPUT:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><input style='color:black;' id='text"+t.id+"' value='"+t.value+"' onchange='textchange("+t.id+")' /></div>");break;case UI_TAB:$("#tabsnav").append("<li><a onmouseup='tabclick("+t.id+")' href='#tab"+t.id+"'>"+t.value+"</a></li>"),$("#tabscontent").append("<div id='tab"+t.id+"'></div>"),tabs=$(".tabscontent").tabbedContent({loop:!0}).data("api"),$("a").filter(function(){return"#click-to-switch"===$(this).attr("href")}).on("click",function(e){var a=prompt("Tab to switch to (number or id)?");tabs.switchTab(a)||alert("That tab does not exist :\\"),e.preventDefault()});break;case UI_SELECT:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><select style='color:black;' id='select"+t.id+"' onchange='selectchange("+t.id+")' /></div>");break;case UI_OPTION:if(t.parentControl)(n=$("#select"+t.parentControl)).append("<option id='option"+t.id+"' value='"+t.value+"' "+t.selected+">"+t.label+"</option>");break;case UI_MIN:if(t.parentControl)(n=$("#id"+t.parentControl+" input")).size()&&n.attr("min",t.value);break;case UI_MAX:if(t.parentControl)(n=$("#id"+t.parentControl+" input")).size()&&n.attr("max",t.value);break;case UI_STEP:if(t.parentControl)(n=$("#id"+t.parentControl+" input")).size()&&n.attr("step",t.value);break;case UI_GRAPH:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/><figure id='graph"+t.id+"'><figcaption>"+t.label+"</figcaption></figure></div>"),graphData[t.id]=restoreGraphData(t.id),renderGraphSvg(graphData[t.id],"graph"+t.id);break;case ADD_GRAPH_POINT:var o=Math.round((new Date).getTime()/1e3);graphData[t.id].push({x:o,y:t.value}),saveGraphData(),renderGraphSvg(graphData[t.id],"graph"+t.id);break;case CLEAR_GRAPH:graphData[t.id]=[],saveGraphData(),renderGraphSvg(graphData[t.id],"graph"+t.id);break;case UI_GAUGE:(n=t.parentControl?$("#tab"+t.parentControl):$("#row")).append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/>WILL BE A GAUGE <input style='color:black;' id='gauge"+t.id+"' type='number' value='"+t.value+"' onchange='numberchange("+t.id+")' /></div>");break;case UI_ACCEL:if(hasAccel)break;var n;n=t.parentControl?$("#tab"+t.parentControl):$("#row"),hasAccel=!0,n.append("<div id='id"+t.id+"' class='two columns card tcenter "+colorClass(t.color)+"'><h5>"+t.label+"</h5><hr/>ACCEL // Not implemented fully!<div class='accelerometer' id='accel"+t.id+"' ><div class='ball"+t.id+"'></div><pre class='accelerometeroutput"+t.id+"'></pre></div>"),requestOrientationPermission();break;case UPDATE_LABEL:$("#l"+t.id).html(t.value);break;case UPDATE_SWITCHER:switcher(t.id,"0"==t.value?0:1);break;case UPDATE_SLIDER:slider_move($("#id"+t.id),t.value,"100",!1);break;case UPDATE_NUMBER:$("#num"+t.id).val(t.value);break;case UPDATE_TEXT_INPUT:$("#text"+t.id).val(t.value);break;case UPDATE_SELECT:$("#select"+t.id).val(t.value);break;case UPDATE_BUTTON:case UPDATE_PAD:case UPDATE_CPAD:break;case UPDATE_GAUGE:$("#gauge"+t.id).val(t.value);break;case UPDATE_ACCEL:break;default:console.error("Unknown type or event")}if(t.type>=UPDATE_OFFSET&&t.type<UI_INITIAL_GUI){var r=$("#id"+t.id);t.type==UPDATE_SLIDER?(r.removeClass("slider-turquoise slider-emerald slider-peterriver slider-wetasphalt slider-sunflower slider-carrot slider-alizarin"),r.addClass("slider-"+colorClass(t.color))):(r.removeClass("turquoise emerald peterriver wetasphalt sunflower carrot alizarin"),r.addClass(colorClass(t.color)))}};websock.onmessage=e}function sliderchange(e){var a=$("#sl"+e).val();websock.send("slvalue:"+a+":"+e)}function numberchange(e){var a=$("#num"+e).val();websock.send("nvalue:"+a+":"+e)}function textchange(e){var a=$("#text"+e).val();websock.send("tvalue:"+a+":"+e)}function tabclick(e){var a=$("#tab"+e).val();websock.send("tabvalue:"+a+":"+e)}function selectchange(e){var a=$("#select"+e).val();websock.send("svalue:"+a+":"+e)}function buttonclick(e,a){a?websock.send("bdown:"+e):websock.send("bup:"+e)}function padclick(e,a,t){switch(e){case CENTER:t?websock.send("pcdown:"+a):websock.send("pcup:"+a);break;case UP:t?websock.send("pfdown:"+a):websock.send("pfup:"+a);break;case DOWN:t?websock.send("pbdown:"+a):websock.send("pbup:"+a);break;case LEFT:t?websock.send("pldown:"+a):websock.send("plup:"+a);break;case RIGHT:t?websock.send("prdown:"+a):websock.send("prup:"+a)}}function switcher(e,a){null==a?$("#s"+e).is(":checked")?(websock.send("sactive:"+e),$("#sl"+e).addClass("checked")):(websock.send("sinactive:"+e),$("#sl"+e).removeClass("checked")):1==a?($("#sl"+e).addClass("checked"),$("#sl"+e).prop("checked",!0)):0==a&&($("#sl"+e).removeClass("checked"),$("#sl"+e).prop("checked",!1))}var rangeSlider=function(e){var a=$(".range-slider"),t=$(".range-slider__range"),o=$(".range-slider__value");a.each(function(){o.each(function(){var e=$(this).prev().attr("value");$(this).html(e)}),e?t.on({input:function(){$(this).next().html(this.value)},change:function(){sliderchange($(this).attr("id").replace(/^\D+/g,""))}}):t.on({input:function(){sliderchange($(this).attr("id").replace(/^\D+/g,""))}})})};
)=====";
const uint8_t JS_CONTROLS_GZIP[3163] PROGMEM = { 31,139,8,0,0,0,0,0,0,3,221,90,11,83,219,72,18,254,43,66,217,2,233,80,108,43,9,217,68,70,80,142,113,18,239,26,204,129,217,108,93,54,71,141,173,49,86,69,150,180,163,17,14,11,254,239,215,243,146,70,178,77,30,228,246,42,87,84,25,205,76,247,215,61,61,61,61,61,143,73,18,103,212,184,232,95,246,79,250,163,126,103,112,249,230,162,239,63,105,181,28,168,58,235,13,134,157,35,40,185,206,197,233,81,103,212,187,28,190,126,125,222,27,249,174,104,31,245,71,189,129,207,63,79,129,174,160,226,5,198,212,191,236,178,239,39,170,161,43,90,158,176,150,87,23,163,209,240,196,127,170,218,100,217,109,61,101,173,131,206,43,128,126,166,26,69,209,109,61,99,109,231,239,250,163,238,219,222,153,191,167,154,139,26,183,181,199,41,6,253,35,40,61,47,218,69,217,109,61,103,173,39,23,199,175,160,244,179,106,149,101,183,245,51,239,84,239,247,17,24,227,244,98,228,191,80,20,90,157,219,122,193,168,222,156,117,78,223,250,47,157,206,209,145,248,190,60,29,246,79,88,179,211,29,244,58,103,146,192,109,189,228,152,157,87,190,91,152,71,148,184,121,206,123,131,94,23,184,10,11,169,10,151,219,104,120,58,234,51,155,20,70,82,21,46,55,210,113,31,62,11,27,241,146,203,45,116,220,249,221,119,11,235,240,146,43,12,51,234,157,250,110,105,23,94,116,185,85,222,116,46,222,244,124,183,176,138,44,187,220,40,157,110,151,217,159,25,100,196,91,101,5,39,7,15,56,26,190,3,225,206,160,247,122,4,163,125,214,127,243,118,4,35,219,237,157,140,192,176,207,156,238,229,232,226,236,159,23,195,254,121,15,136,187,151,189,227,222,89,103,192,60,166,123,121,218,3,154,179,254,111,64,248,4,138,239,122,163,206,249,233,219,206,128,3,92,158,95,156,188,30,12,223,73,148,110,231,236,108,56,130,113,239,94,118,6,253,127,117,206,160,203,207,161,112,212,57,251,21,198,179,123,121,50,60,233,249,79,246,246,218,215,136,24,11,60,206,146,201,71,231,138,160,116,118,132,40,242,99,188,48,58,132,160,27,103,134,178,206,100,130,35,127,203,117,178,40,12,48,233,38,49,13,227,60,201,51,168,107,79,243,120,66,195,36,54,38,73,148,144,110,132,178,204,194,246,109,182,8,233,100,102,97,255,36,159,143,49,129,42,251,118,130,50,108,104,61,244,8,166,57,137,77,248,249,51,79,194,12,155,109,73,34,187,173,8,240,28,19,20,5,69,115,105,9,69,145,98,138,9,9,175,49,41,136,74,251,40,162,5,166,40,75,103,40,162,5,81,97,53,69,147,229,241,52,74,22,26,142,48,165,106,159,32,66,146,146,95,25,87,53,163,40,252,11,145,48,46,8,152,157,85,99,128,200,71,179,29,224,41,202,35,170,42,205,229,82,27,2,176,109,140,39,20,7,21,211,18,252,103,142,51,58,36,33,142,41,98,85,167,152,204,195,44,131,47,203,190,93,22,132,25,186,198,111,212,32,66,75,148,76,80,116,78,19,130,174,112,35,195,180,79,241,220,50,113,150,230,33,31,235,204,116,126,57,31,158,52,50,10,58,95,133,211,27,171,112,1,219,94,106,242,51,192,208,144,97,128,153,210,200,175,8,184,90,43,160,68,108,139,46,27,113,30,69,91,62,58,180,144,207,165,167,136,100,216,2,137,239,241,7,239,253,135,170,92,68,40,116,228,39,43,72,38,249,28,186,111,55,80,16,88,230,63,76,187,145,76,167,150,237,252,100,153,143,72,178,128,242,140,206,35,203,52,109,71,26,179,49,137,18,0,182,29,137,178,212,124,53,62,7,67,230,89,15,70,147,0,254,26,243,115,224,130,16,224,9,158,39,215,88,120,184,201,189,253,241,21,193,56,54,237,21,82,80,177,66,71,112,176,134,74,232,203,85,48,154,198,73,98,72,241,76,195,237,71,47,158,63,221,107,175,225,42,123,93,169,141,173,219,73,20,78,62,122,210,104,75,173,187,51,20,7,17,254,45,204,194,113,24,133,244,166,11,21,87,120,77,183,239,238,148,153,27,179,48,8,112,124,119,87,140,129,230,101,114,80,10,90,232,110,239,26,62,6,97,70,113,12,179,221,188,46,100,77,184,44,211,89,175,131,179,229,218,142,37,213,240,77,115,203,95,132,113,144,44,26,204,177,152,176,70,154,16,122,119,247,162,181,169,229,217,179,167,235,155,14,89,12,123,135,199,231,128,140,169,101,46,50,175,217,52,119,235,164,179,36,163,49,154,227,93,211,91,109,100,56,187,102,115,1,22,246,190,22,142,115,177,129,73,82,28,251,202,120,108,234,192,184,101,73,132,129,233,10,112,68,223,13,70,245,5,158,180,201,227,40,254,4,74,21,3,89,78,2,205,165,91,203,98,102,36,49,159,27,159,87,139,147,1,90,125,198,232,80,152,85,109,132,194,107,152,249,170,163,73,71,85,22,8,21,140,128,86,194,67,35,224,49,164,112,186,113,18,220,180,229,50,67,27,244,38,197,114,133,169,166,104,222,154,248,192,170,40,26,103,49,186,94,87,13,170,128,27,83,189,137,54,234,107,223,246,182,181,178,28,174,82,49,78,6,71,146,40,107,76,19,210,67,160,45,242,15,110,69,255,110,89,159,188,90,8,70,96,31,108,81,123,105,183,199,4,163,143,109,213,43,145,101,122,117,151,35,56,74,80,96,213,169,121,206,233,21,230,162,33,141,48,104,24,161,49,142,120,87,231,40,140,223,98,4,250,170,158,202,214,58,18,207,41,61,43,6,110,24,11,0,235,138,30,29,74,131,153,187,181,6,187,52,58,120,112,10,158,13,17,123,63,8,175,141,48,240,119,194,128,49,132,193,174,185,3,238,5,190,237,239,208,69,194,242,135,124,30,103,6,172,176,129,65,39,128,134,137,97,238,106,105,5,51,37,20,108,96,60,216,159,237,29,48,24,174,240,174,185,223,132,242,254,140,52,15,246,179,20,197,92,78,180,34,134,19,27,252,247,241,2,150,165,29,14,113,141,162,28,51,8,198,121,176,223,4,61,15,204,186,13,68,210,253,95,53,2,76,164,239,102,132,113,78,105,34,204,48,166,113,41,42,137,231,224,149,24,252,39,134,22,78,196,87,13,75,145,56,6,37,57,182,11,202,60,221,68,55,69,81,6,132,85,19,10,210,194,136,220,207,10,5,196,42,69,147,124,50,227,75,136,167,135,12,220,72,9,102,139,200,145,200,143,96,141,211,229,50,126,103,171,5,113,135,243,131,49,191,158,219,181,151,43,115,74,109,136,126,152,145,21,62,204,4,101,171,14,46,194,33,192,90,166,107,250,190,28,152,67,19,12,6,171,86,0,75,156,41,224,153,178,146,39,140,161,28,198,105,78,13,22,68,253,29,78,60,78,62,237,8,41,186,243,116,153,53,149,24,182,206,43,111,96,41,29,56,205,103,4,55,165,99,236,55,121,47,74,55,41,0,249,64,73,238,250,80,177,61,177,167,10,236,251,71,137,72,176,204,40,88,185,22,0,117,14,221,143,194,131,125,84,157,147,41,10,132,203,94,156,58,198,125,147,114,3,161,156,149,188,91,233,180,232,214,193,246,163,151,207,247,90,237,253,38,98,214,15,239,151,205,183,165,95,40,126,133,182,162,1,249,70,13,216,254,248,11,21,168,147,86,228,71,223,40,159,109,211,191,80,126,157,180,34,127,124,143,252,38,184,0,76,24,145,187,248,190,244,240,67,19,148,42,189,101,26,146,249,206,6,37,197,169,129,243,69,90,74,218,77,122,78,74,61,135,191,50,21,229,140,221,111,130,243,86,195,185,242,170,175,141,230,186,195,126,125,52,95,229,230,209,92,104,20,61,80,35,238,66,15,208,73,227,215,180,34,15,212,74,204,172,7,168,165,3,104,122,141,31,168,23,119,248,7,168,165,241,107,90,77,30,168,149,116,240,7,232,85,65,88,155,43,240,195,209,255,205,178,195,10,143,197,238,226,91,150,32,109,189,39,108,223,45,161,138,149,191,158,79,136,76,128,147,238,24,243,16,162,78,11,254,163,79,254,142,219,130,47,190,62,251,59,90,234,183,179,14,254,242,82,32,200,164,124,45,5,231,223,156,136,23,161,135,115,157,115,38,107,107,101,155,85,27,41,113,80,253,195,36,8,98,12,50,122,19,177,244,139,49,120,227,8,77,62,182,69,116,142,243,121,125,100,98,126,170,186,126,32,32,233,229,103,43,138,74,148,138,92,13,66,126,115,211,46,167,60,190,255,127,177,29,59,23,41,229,223,111,46,70,251,53,198,234,188,242,170,39,9,69,223,43,169,5,91,135,129,166,186,127,2,224,25,193,83,127,71,89,84,44,190,149,105,32,19,133,181,39,19,43,102,174,192,20,179,134,49,249,192,221,168,114,67,105,140,131,174,40,91,183,81,146,164,222,86,107,105,243,51,22,203,68,105,40,132,34,160,157,134,17,12,141,85,68,81,251,86,158,92,63,226,61,122,76,147,199,34,125,135,188,31,68,209,89,152,129,122,148,194,238,128,245,208,180,151,60,166,155,156,218,116,244,104,44,206,144,83,146,204,83,106,153,35,52,54,104,98,200,61,12,124,89,194,127,141,132,64,15,237,67,24,0,214,139,134,32,0,106,11,217,119,119,40,194,132,49,207,16,236,95,0,33,72,112,102,196,9,53,240,167,48,163,134,247,199,31,208,149,213,176,191,26,220,249,125,210,15,227,246,25,142,240,228,30,191,23,237,250,222,77,121,185,104,249,10,63,23,87,105,94,56,181,234,6,0,99,49,19,148,178,170,205,154,85,146,148,159,28,51,205,196,231,253,115,146,21,4,42,6,154,170,9,4,255,170,154,199,253,251,116,20,195,81,105,218,53,13,30,60,216,240,101,225,95,216,178,183,183,99,233,185,176,228,153,155,246,161,199,157,223,191,163,32,244,105,163,32,118,233,248,253,36,101,20,167,27,69,241,75,216,31,198,249,167,225,85,78,48,151,196,111,151,180,192,7,77,19,36,61,68,231,213,234,121,1,248,203,40,89,92,81,189,103,56,31,252,149,251,46,158,153,58,208,125,200,58,120,237,249,245,149,85,227,114,76,77,151,138,125,107,87,223,30,11,123,137,127,140,232,172,65,146,28,12,103,177,187,5,64,194,54,187,67,27,133,115,24,184,166,139,159,218,237,154,140,70,154,103,51,235,246,147,151,56,55,158,28,74,72,160,107,215,126,223,172,168,118,33,239,213,109,242,254,195,119,19,163,238,208,127,20,127,123,215,31,12,140,87,61,163,99,112,181,141,207,229,28,87,40,191,194,127,83,198,198,159,23,176,32,161,238,233,109,209,206,124,44,110,127,147,125,181,43,255,150,19,255,221,198,230,29,50,154,236,62,20,182,37,243,52,194,236,250,2,7,198,52,143,162,155,45,125,39,131,152,146,24,178,7,118,249,47,76,207,171,74,245,42,27,159,49,138,162,122,138,180,15,121,193,90,184,36,167,44,142,106,228,169,30,49,238,191,145,175,140,145,246,46,135,219,184,56,172,144,87,46,107,226,113,245,173,142,87,61,29,53,91,218,1,107,203,115,215,178,138,157,170,220,99,177,107,107,171,92,49,88,40,147,252,142,9,219,57,147,237,118,215,128,200,77,20,99,44,118,32,54,227,187,79,105,109,7,193,93,173,72,191,63,203,41,19,176,106,66,241,5,124,242,102,70,175,42,15,138,203,215,84,222,42,167,8,66,76,160,54,99,63,43,79,204,56,81,175,222,114,168,203,75,126,19,106,153,23,241,199,56,89,196,124,230,179,236,149,167,158,144,8,243,181,156,85,30,248,149,103,98,219,219,162,122,191,122,117,41,18,100,226,87,134,174,93,156,23,234,67,125,104,145,234,251,4,49,244,143,139,167,53,134,172,144,79,105,84,177,124,55,163,106,202,71,50,170,166,120,18,163,42,196,27,24,85,42,158,188,192,172,208,174,171,101,235,218,0,96,219,94,93,223,82,81,165,161,166,154,174,83,161,140,212,98,189,248,181,66,151,203,118,121,105,61,199,89,134,32,228,98,237,93,3,87,89,6,223,98,123,194,29,18,38,45,22,158,97,23,24,25,15,139,89,196,61,197,51,119,17,127,66,128,181,135,18,149,104,94,1,228,19,106,3,98,188,25,80,219,161,86,224,196,52,219,128,71,239,193,83,219,210,42,26,91,31,54,129,161,241,102,184,202,214,162,106,64,57,163,55,25,113,51,166,126,141,135,29,100,223,162,195,42,239,152,157,138,115,38,175,214,144,167,53,172,226,168,15,128,28,90,62,82,83,79,211,248,1,160,71,107,2,210,137,148,128,234,18,210,9,23,129,106,97,98,21,97,186,17,97,186,6,129,29,144,174,98,140,55,98,140,215,96,176,35,233,85,140,104,35,70,180,6,131,159,31,175,130,144,141,32,68,130,44,53,151,80,107,23,31,59,118,77,232,251,136,103,33,25,247,134,16,230,190,167,110,9,237,67,171,230,23,8,80,174,49,31,70,71,155,136,218,171,24,197,10,33,165,198,27,198,27,184,171,15,185,74,0,151,169,102,221,47,70,199,73,73,146,150,77,236,212,217,246,90,128,177,189,109,125,86,218,125,56,46,132,42,30,249,203,35,79,127,245,216,132,157,234,232,71,169,236,180,103,165,82,158,192,66,91,178,166,141,207,58,72,41,81,3,179,119,41,218,17,79,178,82,35,94,236,168,243,29,118,156,98,169,99,30,5,163,26,121,98,3,243,206,118,240,33,229,231,249,60,97,246,52,52,69,26,179,103,75,42,21,130,26,185,236,46,29,17,68,116,150,74,116,174,158,51,193,226,200,236,156,66,14,142,173,230,191,255,56,218,109,94,57,166,201,34,190,237,109,208,224,27,225,224,175,253,31,154,163,207,125,10,46,0,0 };