<snapdata remixID="8892335"><project name="Convolutional NN" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><stage name="Stage" width="800" height="800" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,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AgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqIABpFBuG1NAAQUUUEABBRRQoNoCBpBq19/RK6CAAgoooIACCihQqMBEA0j9tYSwl8g10NwLHCx07DamgAIKKKCAAgoooIACBQvkH0Bq0PgdAruAE4Gt7RHF2otg/76e0W2m1riOyNnAg8T6dnjsJ8WMfutRhNY9wEsX24vxMmjtybH9rA45NumpFFBAAQUUUEABBRSYdoHcA0j9lYRw12LwWBj/ygACLK6A7IHmLcWtgBQRQIZxGMckqb+OGieTNHYXF+zGMQ7PqYACCiiggAIKKDBbAvkGkK3U6jcS+b+JGy6E/X8NJNMN1g0jMe7LcQVkChzqlxLCicWuLE13pe2dAgoooIACCiigwDQI5BpAxnIxP2alcfR5HOcclsEAMqyYxyuggAIKKKCAAgoUIVB4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4mAwCCCAAAIIIIAAAgjYFqCA2M6X2SGAAAIIIIAAAgggEJUABSSqOBgMAggggAACCCCAAAK2BSggtvNldggggAACCCCAAAIIRCVAAYkqDgaDAAIIIIAAAggggIBtAQqI7XyZHQIIIIAAAggggAACUQlQQKKKg8EggAACCCCAAAIIIGBbgAJiO19mhwACCCCAAAIIIIBAVAIUkKjiYDAIIIAAAggggAACCNgWoIDYzpfZIYAAAggggAACCCAQlQAFJKo4GAwCCCCAAAIIIIAAArYFKCC282V2CCCAAAIIIIAAAghEJUABiSoOBoMAAggggAACCCCAgG0BCojtfJkdAggggAACCCCAAAJRCVBAooqDwSCAAAIIIIAAAgggYFuAAmI7X2aHAAIIIIAAAggggEBUAhSQqOJgMAgggAACCCCAAAII2BaggNjOl9khgAACCCCAAAIIIBCVAAUkqjgYDAIIIIAAAggggAACtgUoILbzZXYIIIAAAggggAACCEQlQAGJKg4GgwACCCCAAAIIIICAbQEKiO18mR0CCCCAAAIIIIAAAlEJUECiioPBIIAAAggggAACCCBgW4ACYgmgJRoAAAatSURBVDtfZocAAggggAACCCCAQFQCFJCo4mAwCCCAAAIIIIAAAgjYFqCA2M6X2SGAAAIIIIAAAgggEJUABSSqOBgMAggggAACCCCAAAK2BSggtvNldggggAACCCCAAAIIRCVAAYkqDgaDAAIIIIAAAggggIBtAQqI7XyZHQIIIIAAAggggAACUQlQQKKKg8EggAACCCCAAAIIIGBbgAJiO19mhwACCCCAAAIIIIBAVAIUkKjiYDAIIIAAAggggAACCNgWoIDYzpfZIYAAAggggAACCCAQlQAFJKo4GAwCCCCAAAIIIIAAArYFKCC282V2CCCAAAIIIIAAAghEJUABiSoOBoMAAggggAACCCCAgG0BCojtfJkdAggggAACCCCAAAJRCVBAooqDwSCAAAIIIIAAAgggYFuAAmI7X2aHAAIIIIAAAggggEBUAhSQqOJgMAgggAACCCCAAAII2BaggNjOl9khgAACCCCAAAIIIBCVAAUkqjgYDAIIIIAAAggggAACtgUoILbzZXYIIIAAAggggAACCEQlQAGJKg4GgwACCCCAAAIIIICAbQEKiO18mR0CCCCAAAIIIIAAAlEJUECiioPBIIAAAggggAACCCBgW4ACYjtfZocAAggggAACCCCAQFQCFJCo4mAwCCCAAAIIIIAAAgjYFqCA2M6X2SGAAAIIIIAAAgggEJUABSSqOBgMAggggAACCCCAAAK2BSggtvNldggggAACCCCAAAIIRCVAAYkqDgaDAAIIIIAAAggggIBtAQqI7XyZHQIIIIAAAggggAACUQlQQKKKg8EggAACCCCAAAIIIGBbgAJiO19mhwACCCCAAAIIIIBAVAIUkKjiYDAIIIAAAggggAACCNgWoIDYzpfZIYAAAggggAACCCAQlQAFJKo4GAwCCCCAAAIIIIAAArYFKCC282V2CCCAAAIIIIAAAghEJUABiSoOBoMAAggggAACCCCAgG0BCojtfJkdAggggAACCCCAAAJRCVBAooqDwSCAAAIIIIAAAgggYFuAAmI7X2aHAAIIIIAAAggggEBUAhSQqOJgMAgggAACCCCAAAII2BaggNjOl9khgAACCCCAAAIIIBCVAAUkqjgYDAIIIIAAAggggAACtgUoILbzZXYIIIAAAggggAACCEQlQAGJKg4GgwACCCCAAAIIIICAbQEKiO18mR0CCCCAAAIIIIAAAlEJUECiioPBIIAAAggggAACCCBgW4ACYjtfZocAAggggAACCCCAQFQCFJCo4mAwCCCAAAIIIIAAAgjYFqCA2M6X2SGAAAIIIIAAAgggEJUABSSqOBgMAggggAACCCCAAAK2BSggtvNldggggAACCCCAAAIIRCVAAYkqDgaDAAIIIIAAAggggIBtAQqI7XyZHQIIIIAAAggggAACUQlQQKKKg8EggAACCCCAAAIIIGBbgAJiO19mhwACCCCAAAIIIIBAVAIUkKjiYDAIIIAAAggggAACCNgWoIDYzpfZIYAAAggggAACCCAQlQAFJKo4GAwCCCCAAAIIIIAAArYFKCC282V2CCCAAAIIIIAAAghEJUABiSoOBoMAAggggAACCCCAgG0BCojtfJkdAggggAACCCCAAAJRCVBAooqDwSCAAAIIIIAAAgggYFuAAmI7X2aHAAIIIIAAAggggEBUAhSQqOJgMAgggAACCCCAAAII2BaggNjOl9khgAACCCCAAAIIIBCVAAUkqjgYDAIIIIAAAggggAACtgUoILbzZXYIIIAAAggggAACCEQlQAGJKg4GgwACCCCAAAIIIICAbQEKiO18mR0CCCCAAAIIIIAAAlEJUECiioPBIIAAAggggAACCCBgW4ACYjtfZocAAggggAACCCCAQFQCFJCo4mAwCCCAAAIIIIAAAgjYFqCA2M6X2SGAAAIIIIAAAgggEJUABSSqOBgMAggggAACCCCAAAK2BSggtvNldggggAACCCCAAAIIRCVAAYkqDgaDAAIIIIAAAggggIBtAQqI7XyZHQIIIIAAAggggAACUQlQQKKKg8EggAACCCCAAAIIIGBbgAJiO19mhwACCCCAAAIIIIBAVAIUkKjiYDAIIIAAAggggAACCNgWoIDYzpfZIYAAAggggAACCCAQlQAFJKo4GAwCCCCAAAIIIIAAArYFKCC282V2CCCAAAIIIIAAAghEJUABiSoOBoMAAggggAACCCCAgG0BCojtfJkdAggggAACCCCAAAJRCVBAooqDwSCAAAIIIIAAAgggYFvg/wNBBiEteqdBAgAAAABJRU5ErkJggg==</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="SketchPad" idx="11" x="-14" y="314" heading="90" scale="2" volume="100" pan="0" rotation="1" draggable="false" hidden="true" costume="0" color="0,193.8,135.66000000000003,1" pen="tip" id="8"><wear><costume name="snap" center-x="32" center-y="32" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAADMklEQVR4Xu2Zy0tCQRTGv4iEzEXQIjJLaOmi1yIiDAqqP6BFD8iVhQQ9NrWpFoXkJiEMqkURCPaE/oAoxEAXFmm6cSk9dxVBD4jAmANK0eYm3blwPbO6cxk55/ucOb+ZO0WZTCaDAm5FbADPAF4CXAMKuAaCiyBTgCnAFGAKaEGBWCyGUCgEl8uFh4cH1NbWapGGdhSoqKjA4+MjiR4dHcXa2lphGDA7Owuv14uPj4+c4L6+Puzv7+vfgOfnZ5jNZry9vf0QOzAwgN3dXf0bYLPZkEqlfgnt6urC8fGxvg0YGRnB5uZmTqRY9+vr69RvbGxEPB7XtwElJSX4/PwkkZWVlTg7O4PVaqV+TU0Nrq+v9WtAIBCAw+EggcXFxWTE6+srTCYTvSstLf1VF2S5IeUw1NHRgdPTU9I0NTWFpaUlejYajXh/f6fnl5cXlJWVydKdi6O6ASsrK5icnMwFvL+/R1VVFfXF5ufm5oaer66uNNkMqW5AZ2cn7fhEq6+vRyKRyJnR1NSEy8tL6l9cXKC5uVl/M8BiseDu7o6E+Xw+TExM5ER2d3fj5OSE+kdHR+jp6dGXAR6PB2LnJ1p1dTVub29/CBwcHMTe3h6929nZgejLbqougdbWVkSjUdIkprs4AH1vY2NjWF1dpVeiVoyPj8vWr+5hSKzp7AZncXERMzMzPwTOz89jYWGBaDA9PQ3Rl91UmwGi2otpn21i/y94/72JzY84FWqBv2weqhmwvb2NoaEhiiNIEAwGZf+5iuKpZoDT6cTW1hYl4Xa7MTc3pygh2YNUM6Curg7pdJr0RCIRtLW1ydamKJ4qBpyfn6OlpYUSKC8vx9PTk6JktBikigH9/f04ODggPb29vTg8PNRCm6KYqhjQ0NCAZDJJCWj5uUuJA/9uQDgcRnt7O8UW3wDEh8/ssVdJQrLH/LsBy8vL8Pv9dOgZHh7GxsaGbE1/ivfvBmSjC+4bDAbY7fY/JSR7sGoGyBaSbzw2gK/H+Xqcr8f5ejzfCqqH3zEFmAJMAaYAU0AP1TxfDUwBpgBTgCnAFMi3gurhd0wBpgBTgCnAFNBDNc9XA1OAKVDgFPgCntrXUGU5Th8AAAAASUVORK5CYII=" id="9"/></wear><costumes><list id="10"><item><costume name="white" center-x="32" center-y="32" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAApUlEQVR4Xu3XwQ3AIAwEQei/aPNNGjid5KEBW1HYEXdm5iw+1wfwB7gCGrC4gUcEKUCBKgW+Qb6JNmmABmhAVQMS1/43QwM0QAM0wGswnt6igRSgAAUoQIGiKMdXoQAFKEABCsTTWzSQAhSgAAUoUBTl+CoUoAAFKECBeHqLBlKAAhSgAAWKohxfhQIUoAAFKBBPb9FAClCAAhSgQFGU46tQYLsCD1x2AFDDZlNQAAAAAElFTkSuQmCC" id="11"/></item></list></costumes><sounds><list struct="atomic" id="12"></list></sounds><blocks><block-definition s="$brush set properties" type="command" category="lists"><comment x="0" y="0" w="140.33333433333345" collapsed="false">Sets the default values of the properties of a ImageSprite.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>myProperties</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>myMessages</l><block s="reportNewList"><list></list></block></block><custom-block s="$brush set property %txt to %s" scope="local"><l>typeOfData</l><l>empty</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageWidth</l><block s="reportGetImageAttribute"><l><option>width</option></l><l><option>current</option></l></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageHeight</l><block s="reportGetImageAttribute"><l><option>height</option></l><l><option>current</option></l></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>minValue</l><l>not set</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>maxValue</l><l>not set</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>backColorRed</l><l>225</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>backColorGreen</l><l>225</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>backColorBlue</l><l>255</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineStyle</l><l>continuous</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineWidth</l><l>1</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineColorRed</l><l>0</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineColorGreen</l><l>0</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineColorBlue</l><l>0</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>surfaceColorRed</l><l>180</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>surfaceColorGreen</l><l>180</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>surfaceColorBlue</l><l>180</l></custom-block></script></block></script></block-definition><block-definition s="$brush set property %&apos;name&apos; to %&apos;value&apos;" type="command" category="lists"><comment x="0" y="0" w="148.80952380952377" collapsed="false">Sets the value of an existing property or inserts it anew.</comment><header></header><code></code><translations></translations><inputs><input type="%txt">imageWidth<options>typeOfData&#xD;imageWidth&#xD;imageHeight&#xD;minValue&#xD;maxValue&#xD;backColorRed&#xD;backColorGreen&#xD;backColorBlue&#xD;lineStyle&#xD;lineWidth&#xD;lineColorRed&#xD;lineColorGreen&#xD;lineColorBlue&#xD;lineStyle&#xD;lineWidth&#xD;lineColorRed&#xD;lineColorGreen&#xD;lineColorBlue&#xD;surfaceColorRed&#xD;surfaceColorGreen&#xD;surfaceColorBlue</options></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>done</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>name</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="name"/><l> </l></block></block></block><block s="doSetVar"><l>done</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>h</l><block s="reportAtomicMap"><block s="reifyReporter"><script><block s="doIf"><block s="reportEquals"><block var="name"/><block s="reportListItem"><l>1</l><l/></block></block><script><block s="doReplaceInList"><l>2</l><l/><block var="value"/></block><block s="doSetVar"><l>done</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script><list></list></block><block var="myProperties"/></block></block><block s="doIf"><block s="reportNot"><block var="done"/></block><script><block s="doAddToList"><block s="reportNewList"><list><block var="name"/><block var="value"/></list></block><block var="myProperties"/></block></script></block></script></block></script></block-definition><block-definition s="$brush property %&apos;name&apos;" type="reporter" category="lists"><comment x="0" y="0" w="95" collapsed="false">Reads the value of an existing property.</comment><header></header><code></code><translations></translations><inputs><input type="%txt">imageWidth<options>typeOfData&#xD;imageWidth&#xD;imageHeight&#xD;minValue&#xD;maxValue&#xD;backColorRed&#xD;backColorGreen&#xD;backColorBlue&#xD;lineStyle&#xD;lineWidth&#xD;lineColorRed&#xD;lineColorGreen&#xD;lineColorBlue&#xD;surfaceColorRed&#xD;surfaceColorGreen&#xD;surfaceColorBlue</options></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>result</l><l>not found</l></block><block s="doSetVar"><l>name</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="name"/><l> </l></block></block></block><block s="doSetVar"><l>h</l><block s="reportAtomicMap"><block s="reifyReporter"><script><block s="doIf"><block s="reportEquals"><block var="name"/><block s="reportListItem"><l>1</l><l/></block></block><script><block s="doSetVar"><l>result</l><block s="reportListItem"><l>2</l><l/></block></block></script></block></script><list></list></block><block var="myProperties"/></block></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="$brush add %&apos;color&apos; image of %&apos;data&apos; min/max %&apos;min&apos; %&apos;max&apos; log? %&apos;log&apos;" type="command" category="looks"><comment x="0" y="0" w="99.16666666666669" collapsed="false">Generates an image from the FITS or RGB data of the DataSprite in gray or false colors</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">gray<options>gray&#xD;false-color&#xD;RGB</options></input><input type="%s">myData</input><input type="%n">0</input><input type="%n">32000</input><input type="%b">false</input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>pixels</l><l>source</l><l>gray</l></list></block><block s="doSetVar"><l>color</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="color"/><l> </l></block></block></block><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>FITS</l></block><script><block s="doIfElse"><block s="reportEquals"><block var="color"/><l>gray</l></block><script><block s="doSetVar"><l>gray</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doSetVar"><l>gray</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doSetVar"><l>pixels</l><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>min</l><l>max</l><l>gray</l><l>log</l></list><l>var result=[], i=1, n, value, interval = (max-min)/8;&#xD;while(i&lt;= data.length()) {&#xD;  value = data.at(i);&#xD;  n = value;&#xD;  if(value&lt;=min) n=min+1;&#xD;  if(value&gt;max) n =max;&#xD;  if(log) n = Math.round(Math.log(n-min)/Math.log(max-min)*255);&#xD;  else n = Math.round((n-min)/(max-min)*255);&#xD;  if(gray) result.push(new List([n,n,n,255]));&#xD;  else { // result.push(new List([n,255-n,Math.round(255-n/2),255]));&#xD;    if(value&lt;=min) {result.push(new List([0,0,0,255]));}&#xD;       else if(value&lt;min+interval) result.push(new List([0,0,n,255]));&#xD;            else if(value&lt;min+2*interval) result.push(new List([0,n,n,255]));&#xD;                 else if(value&lt;min+3*interval) result.push(new List([n,0,n,255]));&#xD;                      else if(value&lt;min+4*interval) result.push(new List([0,n,0,255]));&#xD;                           else if(value&lt;min+5*interval) result.push(new List([n,0,0,n]));&#xD;                                else if(value&lt;min+6*interval) result.push(new List([n,n/2,0,255]));&#xD;                                     else if(value&lt;min+7*interval) result.push(new List([n,n,0,255]));&#xD;                                          else if(value&lt;min+8*interval) result.push(new List([n,n,n,255]));&#xD;                                               else result.push(new List([255,255,255,255]));&#xD;     }&#xD;  i = i+1;&#xD;  }&#xD;return new List(result);</l></block><list><block var="source"/><block var="min"/><block var="max"/><block var="gray"/><block var="log"/></list></block></block><custom-block s="$brush new costume width %n height %n %br color %n %n %n" scope="local"><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><l>255</l><l>225</l><l>205</l></custom-block><block s="doSwitchToCostume"><block var="pixels"/></block></script><script><block s="doIfElse"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>RGB</l></block><script><block s="doIfElse"><block s="reportEquals"><block var="color"/><l>RGB</l></block><script><custom-block s="$brush new costume width %n height %n %br color %n %n %n" scope="local"><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><l>225</l><l>225</l><l>255</l></custom-block><block s="doSwitchToCostume"><block var="source"/></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="color"/><l>gray</l></block><script><block s="doSetVar"><l>gray</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doSetVar"><l>gray</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doSetVar"><l>pixels</l><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>min</l><l>max</l><l>gray</l><l>log</l></list><l>var result=[], i=1, n, value, interval = (max-min)/8;&#xD;while(i&lt;= data.length()) {&#xD;  value = (data.at(i).at(1)+data.at(i).at(2)+data.at(i).at(3))/3;&#xD;  n = value;&#xD;  if(value&lt;=min) n=min+1;&#xD;  if(value&gt;max) n =max;&#xD;  if(log) n = Math.round(Math.log(n-min)/Math.log(max-min)*255);&#xD;  else n = Math.round((n-min)/(max-min)*255);&#xD;  if(gray) result.push(new List([n,n,n,255]));&#xD;  else { // result.push(new List([n,255-n,Math.round(255-n/2),255]));&#xD;    if(value&lt;=min) {result.push(new List([0,0,0,255]));}&#xD;       else if(value&lt;min+interval) result.push(new List([0,0,n,255]));&#xD;            else if(value&lt;min+2*interval) result.push(new List([0,n,n,255]));&#xD;                 else if(value&lt;min+3*interval) result.push(new List([n,0,n,255]));&#xD;                      else if(value&lt;min+4*interval) result.push(new List([0,n,0,255]));&#xD;                           else if(value&lt;min+5*interval) result.push(new List([n,0,0,n]));&#xD;                                else if(value&lt;min+6*interval) result.push(new List([n,n/2,0,255]));&#xD;                                     else if(value&lt;min+7*interval) result.push(new List([n,n,0,255]));&#xD;                                          else if(value&lt;min+8*interval) result.push(new List([n,n,n,255]));&#xD;                                               else result.push(new List([255,255,255,255]));&#xD;     }&#xD;  i = i+1;&#xD;  }&#xD;return new List(result);</l></block><list><block var="myData"/><block var="min"/><block var="max"/><block var="gray"/><block var="log"/></list></block></block><custom-block s="$brush new costume width %n height %n %br color %n %n %n" scope="local"><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><l>225</l><l>225</l><l>255</l></custom-block><block s="doSwitchToCostume"><block var="pixels"/></block></script></block></script><script><block s="doAddToList"><l>from "add image": image date required</l><block var="myMessages"/></block></script></block></script></block></script></block></script></block-definition><block-definition s="$brush image value of myData at %&apos;x&apos; %&apos;y&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="132.5" collapsed="false">Reads the data value at the position (x/y) of an image stored in myData.</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input></inputs><script><block s="doWarp"><script><block s="doIfElse"><block s="reportOr"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>RGB</l></block><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>FITS</l></block></block><script><block s="doSetVar"><l>x</l><block s="reportRound"><block var="x"/></block></block><block s="doSetVar"><l>y</l><block s="reportRound"><block var="y"/></block></block><block s="doIfElse"><block s="reportOr"><block s="reportOr"><block s="reportGreaterThan"><block var="x"/><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="reportGreaterThan"><block var="y"/><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block></block><block s="reportOr"><block s="reportLessThan"><block var="x"/><l>1</l></block><block s="reportLessThan"><block var="y"/><l>1</l></block></block></block><script><block s="doReport"><l>-1</l></block></script><script><block s="doReport"><block s="reportListItem"><block s="reportSum"><block var="x"/><block s="reportProduct"><block s="reportDifference"><block var="y"/><l>1</l></block><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block></block><block var="myData"/></block></block></script></block></script><script><block s="doAddToList"><l>from "image value in": operation only defined for image data</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: only defined for image data</l></block></script></block></script></block></script></block-definition><block-definition s="$brush RGB at %&apos;x&apos; %&apos;y&apos; of current costume" type="reporter" category="sensing"><comment x="0" y="0" w="216.74657534246577" collapsed="false">Reads the RGB value at the position (x/y) of the costume. JS-code-snippets copied from Snap!-code.</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;var pixel = ctx.getImageData(x,y,1,1);&#xD;return new List(new Array(pixel.data[0],pixel.data[1],pixel.data[2]));</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x"/><block var="y"/></list></block></block></script></block-definition><block-definition s="$brush set RGB at %&apos;x&apos; %&apos;y&apos; of current costume to %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Sets the RGB value al (x|y) on costume.</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input><input type="%s">255</input><input type="%n">180</input><input type="%n">100</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>r</l><l>g</l><l>b</l><l>x</l><l>y</l><l>costume</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = 1;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.moveTo(x,y);&#xD;ctx.lineTo(x+1,y);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block var="r"/><block var="g"/><block var="b"/><block var="x"/><block var="y"/><block s="reportGet"><l><option>costume</option></l></block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block-definition><block-definition s="$brush %&apos;data&apos; by mouse" type="reporter" category="sensing"><comment x="0" y="0" w="146.66666666666669" collapsed="false">Obtaining data with the mouse.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">image-value<options>image-value&#xD;costume-coordinates&#xD;slice-data&#xD;line-data&#xD;circle-data&#xD;brightness</options></input></inputs><script><block s="doDeclareVariables"><list><l>h</l><l>result</l><l>i</l><l>m</l><l>pixel</l><l>dist</l><l>dx</l><l>dy</l><l>points</l><l>x1</l><l>y1</l><l>x2</l><l>y2</l><l>x</l><l>y</l><l>p1</l><l>p2</l><l>w</l><l>h</l><l>secondCostume</l><l>ok</l><l>xold</l><l>yold</l><l>radius</l><l>sumOfValues</l><l>value</l><l>center</l><l>costume</l></list></block><block s="doSetVar"><l>data</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>costume-coordinates</l><comment w="90" collapsed="false">costume coordinates.</comment></block><script><block s="doWarp"><script><block s="doSetVar"><l>x</l><block s="reportSum"><block s="reportSum"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="reportMouseX"></block><block s="xPosition"></block></block><block s="getScale"></block></block></block><block s="reportQuotient"><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><l>2</l></block></block><l>1</l></block></block><block s="doSetVar"><l>y</l><block s="reportSum"><block s="reportSum"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="yPosition"></block><block s="reportMouseY"></block></block><block s="getScale"></block></block></block><block s="reportQuotient"><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><l>2</l></block></block><l>1</l></block></block><block s="doIfElse"><block s="reportOr"><block s="reportOr"><block s="reportGreaterThan"><block var="x"/><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="reportGreaterThan"><block var="y"/><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block></block><block s="reportOr"><block s="reportLessThan"><block var="x"/><l>1</l></block><block s="reportLessThan"><block var="y"/><l>1</l></block></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><script><block s="doReport"><block s="reportNewList"><list><block var="x"/><block var="y"/></list></block></block></script></block></script></block></script></block><block s="doIf"><block s="reportNot"><block s="reportOr"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>RGB</l></block><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>FITS</l></block></block></block><script><block s="doAddToList"><l>from "&lt;data&gt; by mouse": only defined for image data</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: only defined for image data</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>image-value</l></block><script><block s="doWarp"><script><block s="doSetVar"><l>x</l><block s="reportSum"><block s="reportSum"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="reportMouseX"></block><block s="xPosition"></block></block><block s="getScale"></block></block></block><block s="reportQuotient"><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><l>2</l></block></block><l>1</l></block></block><block s="doSetVar"><l>y</l><block s="reportSum"><block s="reportSum"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="yPosition"></block><block s="reportMouseY"></block></block><block s="getScale"></block></block></block><block s="reportQuotient"><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><l>2</l></block></block><l>1</l></block></block><block s="doIfElse"><block s="reportOr"><block s="reportOr"><block s="reportGreaterThan"><block var="x"/><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="reportGreaterThan"><block var="y"/><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block></block><block s="reportOr"><block s="reportLessThan"><block var="x"/><l>1</l></block><block s="reportLessThan"><block var="y"/><l>1</l></block></block></block><script><block s="doReport"><l>-1</l></block></script><script><block s="doReport"><block s="reportListItem"><block s="reportSum"><block var="x"/><block s="reportProduct"><block s="reportDifference"><block var="y"/><l>1</l></block><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block></block><block var="myData"/></block></block></script></block></script></block></script><comment w="90" collapsed="false">image value</comment></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>line-data</l></block><script><block s="doWarp"><script><block s="doSetVar"><l>w</l><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="doSetVar"><l>h</l><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block><block s="doSetVar"><l>secondCostume</l><custom-block s="$brush copy of costume %obj" scope="local"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><custom-block s="$brush set line attributes style %txt width %n %br color %n %n %n" scope="local"><l>continuous</l><l>1</l><l>255</l><l>255</l><l>0</l></custom-block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doUntil"><block var="ok"/><script><block s="doIf"><block s="reportMouseDown"></block><script><block s="doSetVar"><l>p1</l><custom-block s="$brush %s by mouse" scope="local"><l>costume-coordinates</l></custom-block></block><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="p1"/></block><l>-1</l></block><block s="reportAnd"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportSum"><block var="w"/><l>1</l></block></block><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block var="p1"/></block><l>-1</l></block><block s="reportLessThan"><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportSum"><block var="h"/><l>1</l></block></block></block></block></block><script><block s="doSetVar"><l>xold</l><block s="reportListItem"><l>1</l><block var="p1"/></block></block><block s="doSetVar"><l>yold</l><block s="reportListItem"><l>2</l><block var="p1"/></block></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doUntil"><block var="ok"/><script><block s="doSetVar"><l>p2</l><custom-block s="$brush %s by mouse" scope="local"><l>costume-coordinates</l></custom-block></block><block s="doIf"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="p2"/></block><block var="xold"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>2</l><block var="p2"/></block><block var="yold"/></block></block></block><script><block s="doSwitchToCostume"><block var="secondCostume"/></block><block s="doSetVar"><l>costume</l><custom-block s="$brush copy of costume %obj" scope="local"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><block s="doSwitchToCostume"><block var="costume"/></block><block s="doSetVar"><l>xold</l><block s="reportListItem"><l>1</l><block var="p2"/></block></block><block s="doSetVar"><l>yold</l><block s="reportListItem"><l>2</l><block var="p2"/></block></block><custom-block s="$brush draw line from %n %n to %n %n" scope="local"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportListItem"><l>1</l><block var="p2"/></block><block s="reportListItem"><l>2</l><block var="p2"/></block></custom-block></script></block><block s="doIf"><block s="reportNot"><block s="reportMouseDown"></block></block><script><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="p2"/></block><l>-1</l></block><block s="reportAnd"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="p2"/></block><block s="reportSum"><block var="w"/><l>1</l></block></block><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block var="p2"/></block><l>-1</l></block><block s="reportLessThan"><block s="reportListItem"><l>2</l><block var="p2"/></block><block s="reportSum"><block var="h"/><l>1</l></block></block></block></block></block><script><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doSwitchToCostume"><block var="secondCostume"/></block><block s="doReport"><block s="reportNewList"><list><block var="p1"/><block var="p2"/></list></block></block></script><comment w="90" collapsed="false">line data</comment></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>slice-data</l></block><script><block s="doSetVar"><l>costume</l><custom-block s="$brush copy of costume %obj" scope="local"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doSetVar"><l>points</l><custom-block s="$brush %s by mouse" scope="local"><l>line-data</l></custom-block></block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doWarp"><script><block s="doSetVar"><l>x1</l><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="points"/></block></block></block><block s="doSetVar"><l>y1</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="points"/></block></block></block><block s="doSetVar"><l>x2</l><block s="reportListItem"><l>1</l><block s="reportListItem"><l>2</l><block var="points"/></block></block></block><block s="doSetVar"><l>y2</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="points"/></block></block></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>dist</l><block s="reportRound"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportSum"><block s="reportProduct"><block s="reportDifference"><block var="x1"/><block var="x2"/></block><block s="reportDifference"><block var="x1"/><block var="x2"/></block></block><block s="reportProduct"><block s="reportDifference"><block var="y1"/><block var="y2"/></block><block s="reportDifference"><block var="y1"/><block var="y2"/></block></block></block></block></block></block><block s="doSetVar"><l>dx</l><block s="reportQuotient"><block s="reportDifference"><block var="x2"/><block var="x1"/></block><block var="dist"/></block></block><block s="doSetVar"><l>dy</l><block s="reportQuotient"><block s="reportDifference"><block var="y2"/><block var="y1"/></block><block var="dist"/></block></block><block s="doSetVar"><l>i</l><l>0</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block var="dist"/></block><script><block s="doAddToList"><block s="reportNewList"><list><block var="i"/><custom-block s="$brush image value of myData at %n %n" scope="local"><block s="reportSum"><block var="x1"/><block s="reportProduct"><block var="i"/><block var="dx"/></block></block><block s="reportSum"><block var="y1"/><block s="reportProduct"><block var="i"/><block var="dy"/></block></block></custom-block></list></block><block var="result"/></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doSwitchToCostume"><block var="costume"/></block><block s="doReport"><block var="result"/></block></script></block></script><comment w="90" collapsed="false">slice data</comment></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>circle-data</l><comment w="90" collapsed="false">circle data</comment></block><script><block s="doWarp"><script><block s="doSetVar"><l>w</l><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="doSetVar"><l>h</l><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block><block s="doSetVar"><l>secondCostume</l><custom-block s="$brush copy of costume %obj" scope="local"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><block s="doSetVar"><l>costume</l><custom-block s="$brush copy of costume %obj" scope="local"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doUntil"><block var="ok"/><script><block s="doIf"><block s="reportMouseDown"></block><script><block s="doSetVar"><l>p1</l><custom-block s="$brush %s by mouse" scope="local"><l>costume-coordinates</l></custom-block></block><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="p1"/></block><l>-1</l></block><block s="reportAnd"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportSum"><block var="w"/><l>1</l></block></block><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block var="p1"/></block><l>-1</l></block><block s="reportLessThan"><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportSum"><block var="h"/><l>1</l></block></block></block></block></block><script><block s="doSetVar"><l>xold</l><block s="reportListItem"><l>1</l><block var="p1"/></block></block><block s="doSetVar"><l>yold</l><block s="reportListItem"><l>2</l><block var="p1"/></block></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doUntil"><block var="ok"/><script><block s="doSetVar"><l>p2</l><custom-block s="$brush %s by mouse" scope="local"><l>costume-coordinates</l></custom-block></block><block s="doSetVar"><l>radius</l><block s="reportRound"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportSum"><block s="reportProduct"><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>1</l><block var="p2"/></block></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>1</l><block var="p2"/></block></block></block><block s="reportProduct"><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p2"/></block></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p2"/></block></block></block></block></block></block></block><block s="doSetVar"><l>costume</l><custom-block s="$brush copy of costume %obj" scope="local"><block var="secondCostume"/></custom-block></block><block s="doSwitchToCostume"><block var="costume"/></block><custom-block s="$brush set line attributes style %txt width %n %br color %n %n %n" scope="local"><l>continuous</l><l>3</l><l>255</l><l>255</l><l>0</l></custom-block><custom-block s="$brush draw line from %n %n to %n %n" scope="local"><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="p1"/></block><l>1</l></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="p1"/></block><l>1</l></block><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p1"/></block></custom-block><custom-block s="$brush set line attributes style %txt width %n %br color %n %n %n" scope="local"><l>continuous</l><l>1</l><l>255</l><l>255</l><l>0</l></custom-block><custom-block s="$brush draw circle center %n %n radius %n" scope="local"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p1"/></block><block var="radius"/></custom-block><block s="doIf"><block s="reportNot"><block s="reportMouseDown"></block></block><script><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="p2"/></block><l>-1</l></block><block s="reportAnd"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="p2"/></block><block s="reportSum"><block var="w"/><l>1</l></block></block><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block var="p2"/></block><l>-1</l></block><block s="reportLessThan"><block s="reportListItem"><l>2</l><block var="p2"/></block><block s="reportSum"><block var="h"/><l>1</l></block></block></block></block></block><script><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doSwitchToCostume"><block var="secondCostume"/></block><block s="doReport"><block s="reportNewList"><list><block var="p1"/><block var="radius"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>brightness</l></block><script><block s="doSetVar"><l>h</l><custom-block s="$brush %s by mouse" scope="local"><l>circle-data</l></custom-block></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>xpos</l><l>ypos</l><l>r</l><l>width</l><l>height</l><l>typeOfData</l></list><l>&#xD;function imageValue(x,y){&#xD;  if((x&gt;width)||(x&lt;1)||(y&gt;height)||(y&lt;1)) return 0;&#xD;  else return data.at(x+(y-1)*width);&#xD;  }&#xD;&#xD;var value,sumOfValues=0,points=0,y=ypos-r,x;&#xD;&#xD;if(typeOfData==&apos;FITS&apos;){ &#xD;  sumOfValues=0;&#xD;  while((y&lt;=ypos+r) &amp;&amp; (y&lt;=height)){&#xD;    x=xpos-r;&#xD;    while((x&lt;=xpos+r) &amp;&amp; (x&lt;=width)){&#xD;      if(r&gt;Math.sqrt((xpos-x)*(xpos-x)+(ypos-y)*ypos-y)){&#xD;        sumOfValues=sumOfValues+imageValue(Math.round(x),Math.round(y));&#xD;        points++;&#xD;        }&#xD;      x++;&#xD;      }&#xD;    y++;&#xD;    }&#xD;  return new List([sumOfValues,points]);    &#xD;  }&#xD;else{&#xD;  sumOfValues=[0,0,0];&#xD;  while((y&lt;=ypos+r) &amp;&amp; (y&lt;=height)){&#xD;    x=xpos-r;&#xD;    while((x&lt;=xpos+r) &amp;&amp; (x&lt;=width)){&#xD;      if(r&gt;Math.sqrt((xpos-x)*(xpos-x)+(ypos-y)*ypos-y)){&#xD;        value=imageValue(Math.round(x),Math.round(y));&#xD;        sumOfValues=[sumOfValues[0]+value.at(1),sumOfValues[1]+value.at(2),&#xD;                     sumOfValues[2]+value.at(3)];&#xD;        points++;&#xD;        }&#xD;      x++;&#xD;      }&#xD;    y++;&#xD;    }&#xD;  }&#xD;return new List([new List(sumOfValues),points]);    </l></block><list><block var="myData"/><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="h"/></block></block><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="h"/></block></block><block s="reportListItem"><l>2</l><block var="h"/></block><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block></list></block></block></script><comment w="90" collapsed="false">brightness</comment></block></script></block-definition><block-definition s="$brush copy of costume %&apos;costume&apos;" type="reporter" category="looks"><comment x="0" y="0" w="90" collapsed="false">Returns the copy of the current sprite-costume.</comment><header></header><code></code><translations></translations><inputs><input type="%obj"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>costume</l></list><l>return costume.copy();</l></block><list><block var="costume"/></list></block></block></script></block-definition><block-definition s="$brush set line attributes style %&apos;style&apos; width %&apos;width&apos; $nl color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><comment x="0" y="0" w="90" collapsed="false">Sets line style and color for DataSprite diagrams.</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">continuous<options>continuous&#xD;dashed&#xD;dash-dot&#xD;dot-dot</options></input><input type="%n">1</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>style</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="style"/><l> </l></block></block></block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineStyle</l><block var="style"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineWidth</l><block var="width"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineColorRed</l><block var="r"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineColorGreen</l><block var="g"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineColorBlue</l><block var="b"/></custom-block></script></block></script></block-definition><block-definition s="$brush draw circle center %&apos;x&apos; %&apos;y&apos; radius %&apos;radius&apos;" type="command" category="looks"><comment x="0" y="0" w="90" collapsed="false">Draws a circle on present costume using line properties. Attention: JS coordinates are used.</comment><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">20</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>radius</l><l>w</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = w;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.arc(x,y,radius,0,6.283185307179586476925286766559);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x"/><block var="y"/><block var="radius"/><custom-block s="$brush property %txt" scope="local"><l>lineWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>backColorRed</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorGreen</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block-definition><block-definition s="$brush draw line from %&apos;x1&apos; %&apos;y1&apos; to %&apos;x2&apos; %&apos;y2&apos;" type="command" category="looks"><comment x="0" y="0" w="90" collapsed="false">Draws a line on present costume using line properties. Attention: JS coordinates are used.&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%n">10</input><input type="%n">10</input><input type="%n">100</input><input type="%n">100</input></inputs><script><block s="doWarp"><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x1</l><l>y1</l><l>x2</l><l>y2</l><l>w</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = w;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.moveTo(x1,y1);&#xD;ctx.lineTo(x2,y2);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x1"/><block var="y1"/><block var="x2"/><block var="y2"/><custom-block s="$brush property %txt" scope="local"><l>lineWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorRed</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorGreen</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block></script></block-definition><block-definition s="$brush draw rectangle from %&apos;x1&apos; %&apos;y1&apos; to %&apos;x2&apos; %&apos;y2&apos;" type="command" category="looks"><comment x="0" y="0" w="90" collapsed="false">Draws a rectangle on present costume using line properties. Attention: JS coordinates are used. </comment><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">200</input><input type="%n">200</input></inputs><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>w</l><l>h</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportGreaterThan"><block var="x1"/><block var="x2"/></block><script><block s="doSetVar"><l>x</l><block var="x2"/></block><block s="doSetVar"><l>w</l><block s="reportDifference"><block var="x1"/><block var="x2"/></block></block></script><script><block s="doSetVar"><l>x</l><block var="x1"/></block><block s="doSetVar"><l>w</l><block s="reportDifference"><block var="x2"/><block var="x1"/></block></block></script></block><block s="doIfElse"><block s="reportGreaterThan"><block var="y2"/><block var="y1"/></block><script><block s="doSetVar"><l>y</l><block var="y2"/></block><block s="doSetVar"><l>h</l><block s="reportDifference"><block var="y2"/><block var="y1"/></block></block></script><script><block s="doSetVar"><l>y</l><block var="y1"/></block><block s="doSetVar"><l>h</l><block s="reportDifference"><block var="y1"/><block var="y2"/></block></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x1</l><l>y1</l><l>w</l><l>h</l><l>width</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = width;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.strokeRect(x1,y1,w,h);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x"/><block var="y"/><block var="w"/><block var="h"/><custom-block s="$brush property %txt" scope="local"><l>lineWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorRed</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorGreen</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block></script></block-definition><block-definition s="$brush fill recangle from %&apos;x1&apos; %&apos;y1&apos; to %&apos;x2&apos; %&apos;y2&apos;" type="command" category="looks"><comment x="0" y="0" w="164.6575342465754" collapsed="false">Fills a rectangle on present costume using surface properties. Attention: JS coordinates are used.</comment><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">200</input><input type="%n">150</input></inputs><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>w</l><l>h</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportGreaterThan"><block var="x1"/><block var="x2"/></block><script><block s="doSetVar"><l>x</l><block var="x2"/></block><block s="doSetVar"><l>w</l><block s="reportDifference"><block var="x1"/><block var="x2"/></block></block></script><script><block s="doSetVar"><l>x</l><block var="x1"/></block><block s="doSetVar"><l>w</l><block s="reportDifference"><block var="x2"/><block var="x1"/></block></block></script></block><block s="doIfElse"><block s="reportGreaterThan"><block var="y2"/><block var="y1"/></block><script><block s="doSetVar"><l>y</l><block var="y2"/></block><block s="doSetVar"><l>h</l><block s="reportDifference"><block var="y2"/><block var="y1"/></block></block></script><script><block s="doSetVar"><l>y</l><block var="y1"/></block><block s="doSetVar"><l>h</l><block s="reportDifference"><block var="y1"/><block var="y2"/></block></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x1</l><l>y1</l><l>w</l><l>h</l><l>width</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = width;&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.fillRect(x1,y1,w,h);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x"/><block var="y"/><block var="w"/><block var="h"/><custom-block s="$brush property %txt" scope="local"><l>lineWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>surfaceColorRed</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>surfaceColorGreen</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>surfaceColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block></script></block-definition><block-definition s="$brush fill circle center %&apos;x&apos; %&apos;y&apos; radius %&apos;radius&apos;" type="command" category="looks"><comment x="0" y="0" w="72.19178082191787" collapsed="false">Fills a circle on present costume using surface properties. Attention: JS coordinates are used.</comment><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">20</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>radius</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.arc(x,y,radius,0,6.283185307179586476925286766559);&#xD;ctx.closePath();&#xD;ctx.fill();</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x"/><block var="y"/><block var="radius"/><l></l><custom-block s="$brush property %txt" scope="local"><l>surfaceColorRed</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>surfaceColorGreen</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>surfaceColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block-definition><block-definition s="draw text %&apos;text&apos; at %&apos;x&apos; %&apos;y&apos; height %&apos;height&apos; horizontal %&apos;horizontal&apos;" type="command" category="looks"><comment x="0" y="0" w="90" collapsed="false">Draws a text on present costume using line properties. Attention: JS coordinates are used.</comment><header></header><code></code><translations></translations><inputs><input type="%txt">my text</input><input type="%n">100</input><input type="%n">50</input><input type="%n">12</input><input type="%b">true</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>text</l><l>height</l><l>horizontal</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.font = ""+height+"px sans-serif";&#xD;if(horizontal)ctx.fillText(text,x,y);&#xD;else{&#xD;  ctx.rotate(-Math.PI/2);  &#xD;  ctx.fillText(text,-y,x);&#xD;  ctx.rotate(Math.PI/2);  &#xD;  }&#xD;ctx.closePath();&#xD;ctx.fill();</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x"/><block var="y"/><block var="text"/><block var="height"/><block var="horizontal"/><custom-block s="$brush property %txt" scope="local"><l>lineColorRed</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorGreen</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block-definition><block-definition s="$brush set surface color to %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">220</input><input type="%n">200</input><input type="%n">180</input></inputs><script><block s="doWarp"><script><custom-block s="$brush set property %txt to %s" scope="local"><l>surfaceColorRed</l><block var="r"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>surfaceColorGreen</l><block var="g"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>surfaceColorBlue</l><block var="b"/></custom-block></script></block></script></block-definition><block-definition s="$brush set image value of myData at %&apos;x&apos; %&apos;y&apos; to %&apos;value&apos;" type="command" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Sets the value at (x|y) in myData</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input><input type="%s"></input></inputs><script><block s="doWarp"><script><block s="doIfElse"><block s="reportIsA"><block var="myData"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportOr"><block s="reportAnd"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="myData"/></block><l><option>list</option></l></block><block s="reportIsA"><block var="value"/><l><option>list</option></l></block></block><block s="reportAnd"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="myData"/></block><l><option>number</option></l></block><block s="reportIsA"><block var="value"/><l><option>number</option></l></block></block></block><script><block s="doSetVar"><l>x</l><block s="reportRound"><block var="x"/></block></block><block s="doSetVar"><l>y</l><block s="reportRound"><block var="y"/></block></block><block s="doIf"><block s="reportAnd"><block s="reportAnd"><block s="reportLessThan"><block var="x"/><block s="reportSum"><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><l>1</l></block></block><block s="reportLessThan"><block var="y"/><block s="reportSum"><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><l>1</l></block></block></block><block s="reportAnd"><block s="reportGreaterThan"><block var="x"/><l>0</l></block><block s="reportGreaterThan"><block var="y"/><l>0</l></block></block></block><script><block s="doReplaceInList"><block s="reportSum"><block var="x"/><block s="reportProduct"><block s="reportDifference"><block var="y"/><l>1</l></block><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block></block><block var="myData"/><block var="value"/></block></script></block></script><script><block s="doAddToList"><l>from "set image value": wrong data format</l><block var="myMessages"/></block></script></block></script><script><block s="doAddToList"><l>from "set image value": wrong data format</l><block var="myMessages"/></block></script></block></script></block></script></block-definition><block-definition s="$brush brightness around %&apos;x&apos; %&apos;y&apos; radius %&apos;r&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="94.28571428571428" collapsed="false">Reports the brightness of a FITS or RGB image around x|y in a circle with radius r.</comment><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">10</input></inputs><script><block s="doIfElse"><block s="reportAnd"><block s="reportIsA"><block var="myData"/><l><option>list</option></l></block><block s="reportOr"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>FITS</l></block><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>RGB</l></block></block></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>xpos</l><l>ypos</l><l>r</l><l>width</l><l>height</l><l>typeOfData</l></list><l>&#xD;function imageValue(x,y){&#xD;  if((x&gt;width)||(x&lt;1)||(y&gt;height)||(y&lt;1)) return 0;&#xD;  else if(typeOfData==&apos;FITS&apos;) return data.at(x+(y-1)*width);&#xD;       else{&#xD;         h=data.at(x+(y-1)*width);&#xD;         return(h.at(1)+h.at(2)+h.at(3))/3;&#xD;         } &#xD;  }&#xD;&#xD;var xpos=Number(xpos), ypos=Number(ypos), r=Number(r), width=Number(width), height=Number(height),&#xD;    value,sumOfValues,points,x,y,h;&#xD;&#xD;sumOfValues=0;&#xD;points=0;&#xD;y=ypos-r;&#xD;if(y&lt;1) y=1;&#xD;while((y&lt;=ypos+r) &amp;&amp; (y&lt;=height)){&#xD;  x=xpos-r;&#xD;  if(x&lt;1) x=1;&#xD;  while((x&lt;=xpos+r) &amp;&amp; (x&lt;=width)){&#xD;    if(r&gt;Math.sqrt((xpos-x)*(xpos-x)+(ypos-y)*ypos-y)){&#xD;      sumOfValues=sumOfValues+imageValue(Math.round(x),Math.round(y));&#xD;      points++;&#xD;      }&#xD;    x++;&#xD;    }&#xD;  y++;&#xD;  }&#xD;return new List([sumOfValues,points]);    </l></block><list><block var="myData"/><block var="x"/><block var="y"/><block var="r"/><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block></list></block></block></script><script><block s="doAddToList"><l>from "brightness around": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block-definition><block-definition s="$brush new clone of ImageSprite" type="reporter" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>newSprite</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>newSprite</l><block s="newClone"><l><option>myself</option></l></block></block><block s="doTellTo"><block var="newSprite"/><block s="reifyScript"><script><block s="doSetVar"><l>myData</l><block s="reportNewList"><list></list></block></block><custom-block s="$brush set properties" scope="local"></custom-block><block s="gotoXY"><block s="reportRandom"><l>-100</l><l>-50</l></block><block s="reportRandom"><l>100</l><l>150</l></block></block><custom-block s="$brush new costume width %n height %n %br color %n %n %n" scope="local"><l>350</l><l>300</l><l>225</l><l>225</l><l>255</l></custom-block></script><list></list></block><list></list></block><block s="doReport"><block var="newSprite"/></block></script></block></script></block-definition><block-definition s="$brush affine transformation of %&apos;imagedata&apos; width %&apos;width&apos; height %&apos;height&apos; $nl by %&apos;originalPoints&apos; --&gt; %&apos;targetPoints&apos;" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">Applies an affine transformation to an image.&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%n"></input><input type="%n"></input><input type="%l"></input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>a11</l><l>a12</l><l>a13</l><l>a21</l><l>a22</l><l>a23</l><l>S</l><l>P1</l><l>P2</l><l>P3</l><l>Q1</l><l>Q2</l><l>Q3</l><l>data</l><l>imagetype</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="imagedata"/><l>myData</l></block><script><block s="doIfElse"><block s="reportOr"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>FITS</l></block><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>RGB</l></block></block><script><block s="doSetVar"><l>data</l><block var="myData"/></block><block s="doSetVar"><l>width</l><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="doSetVar"><l>height</l><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block></script><script><block s="doAddToList"><l>from "affine transformation": no image data stored</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: no imagedata stored</l></block></script></block></script><script><block s="doSetVar"><l>data</l><block var="imagedata"/></block></script></block><block s="doIfElse"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="data"/></block><l><option>list</option></l></block><script><block s="doSetVar"><l>imagetype</l><l>RGB</l></block></script><script><block s="doSetVar"><l>imagetype</l><l>FITS</l></block></script></block></script><script><block s="doAddToList"><l>from "affine transformation": no image data stored</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: illegal data format</l></block></script></block><block s="doSetVar"><l>P1</l><block s="reportListItem"><l>1</l><block var="originalPoints"/></block></block><block s="doSetVar"><l>P2</l><block s="reportListItem"><l>2</l><block var="originalPoints"/></block></block><block s="doSetVar"><l>P3</l><block s="reportListItem"><l>3</l><block var="originalPoints"/></block></block><block s="doSetVar"><l>Q1</l><block s="reportListItem"><l>1</l><block var="targetPoints"/></block></block><block s="doSetVar"><l>Q2</l><block s="reportListItem"><l>2</l><block var="targetPoints"/></block></block><block s="doSetVar"><l>Q3</l><block s="reportListItem"><l>3</l><block var="targetPoints"/></block></block><block s="doSetVar"><l>S</l><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>2</l><block var="P2"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>2</l><block var="P3"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>2</l><block var="P1"/></block></block></block></block></block></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="S"/><l>0</l></block></block><script><block s="doSetVar"><l>a11</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q2"/></block><block s="reportListItem"><l>1</l><block var="Q3"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q3"/></block><block s="reportListItem"><l>1</l><block var="Q1"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q1"/></block><block s="reportListItem"><l>1</l><block var="Q2"/></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a12</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q3"/></block><block s="reportListItem"><l>1</l><block var="Q2"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q1"/></block><block s="reportListItem"><l>1</l><block var="Q3"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q2"/></block><block s="reportListItem"><l>1</l><block var="Q1"/></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a21</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q2"/></block><block s="reportListItem"><l>2</l><block var="Q3"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q3"/></block><block s="reportListItem"><l>2</l><block var="Q1"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q1"/></block><block s="reportListItem"><l>2</l><block var="Q2"/></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a22</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q3"/></block><block s="reportListItem"><l>2</l><block var="Q2"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q1"/></block><block s="reportListItem"><l>2</l><block var="Q3"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q2"/></block><block s="reportListItem"><l>2</l><block var="Q1"/></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a13</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>1</l><block var="Q2"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>1</l><block var="Q3"/></block></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>1</l><block var="Q3"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>1</l><block var="Q1"/></block></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>1</l><block var="Q1"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>1</l><block var="Q2"/></block></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a23</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>2</l><block var="Q2"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>2</l><block var="Q3"/></block></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>2</l><block var="Q3"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>2</l><block var="Q1"/></block></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>2</l><block var="Q1"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>2</l><block var="Q2"/></block></block></block></block></block></block><block var="S"/></block></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a11</l><l>a12</l><l>a13</l><l>a21</l><l>a22</l><l>a23</l><l>w</l><l>h</l><l>data</l><l>typeOfData</l></list><l>var x,y,xnew,ynew,value,newdata=[];&#xD;for(var i=1;i&lt;=data.contents.length;i++) &#xD;  if(typeOfData==&apos;FITS&apos;) newdata.push(0); else newdata.push(new List([0,0,0,255]));&#xD;for(var y=1;y&lt;=h;y++)&#xD;  for(var x=1;x&lt;=w;x++){&#xD;    value= data.at(x+(y-1)*w);&#xD;    xnew=Math.round(a11*x+a12*y+a13);&#xD;    ynew=Math.round(a21*x+a22*y+a23);&#xD;    if((xnew&gt;0) &amp;&amp; (xnew&lt;=w) &amp;&amp; (ynew&gt;0) &amp;&amp; (ynew&lt;=h)) newdata[xnew-1+(ynew-1)*w-1] = value; &#xD;}&#xD;return new List(newdata);</l></block><list><block var="a11"/><block var="a12"/><block var="a13"/><block var="a21"/><block var="a22"/><block var="a23"/><block var="width"/><block var="height"/><block var="data"/><block var="imagetype"/></list></block></block></script></block></script></block></script></block-definition><block-definition s="$brush read file with filepicker" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">reads a file from filesystem</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>ready</l></list></block><block s="doSetVar"><l>ready</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var inp = document.createElement(&apos;input&apos;), ide = this.parent.parent, result=0, done=false;&#xD;&#xD;  function userImport() {&#xD;&#xD;        function txtOnlyMsg(ftype, anyway) {&#xD;            ide.confirm(&#xD;                localize(&#xD;                    &apos;Snap! can only import "text" files.\n&apos; +&#xD;                        &apos;You selected a file of type "&apos; +&#xD;                        ftype +&#xD;                        &apos;".&apos;&#xD;                ) + &apos;\n\n&apos; + localize(&apos;Open anyway?&apos;),&#xD;                &apos;Unable to import&apos;,&#xD;                anyway // callback&#xD;            );&#xD;        }&#xD;&#xD;        function readText(aFile) {&#xD;            var frd = new FileReader(),&#xD;                ext = aFile.name.split(&apos;.&apos;).pop().toLowerCase();&#xD;&#xD;            function isTextFile(aFile) {&#xD;                // special cases for Windows&#xD;                // check the file extension for text-like-ness&#xD;                return aFile.type.indexOf(&apos;text&apos;) !== -1 ||&#xD;                    contains([&apos;txt&apos;, &apos;csv&apos;, &apos;xml&apos;, &apos;json&apos;, &apos;tsv&apos;], ext);&#xD;            }&#xD;&#xD;            function isType(aFile, string) {&#xD;                return aFile.type.indexOf(string) !== -1 || (ext === string);&#xD;            }&#xD;&#xD;            frd.onloadend = function (e) {&#xD;                done=true;&#xD;                if (isType(aFile, &apos;csv&apos;)) {result=Process.prototype.parseCSV(e.target.result);}&#xD;                else if (isType(aFile, &apos;json&apos;)) { result=Process.prototype.parseJSON(e.target.result);}&#xD;                     else { result=e.target.result;}&#xD;            };&#xD;&#xD;            if (isTextFile(aFile)) {&#xD;                frd.readAsText(aFile);&#xD;            } else {&#xD;               txtOnlyMsg(&#xD;                    aFile.type,&#xD;                    function () {frd.readAsText(aFile); }&#xD;                );&#xD;            }&#xD;        }&#xD;&#xD;        document.body.removeChild(inp);&#xD;        ide.filePicker = null;&#xD;        if (inp.files.length &gt; 0) {&#xD;            readText(inp.files[inp.files.length - 1]);&#xD;        }&#xD;    }&#xD;&#xD;    if (ide.filePicker) {&#xD;        document.body.removeChild(ide.filePicker);&#xD;        ide.filePicker = null;&#xD;    }&#xD;    inp.type = &apos;file&apos;;&#xD;    inp.style.color = "transparent";&#xD;    inp.style.backgroundColor = "transparent";&#xD;    inp.style.border = "none";&#xD;    inp.style.outline = "none";&#xD;    inp.style.position = "absolute";&#xD;    inp.style.top = "0px";&#xD;    inp.style.left = "0px";&#xD;    inp.style.width = "0px";&#xD;    inp.style.height = "0px";&#xD;    inp.style.display = "none";&#xD;    inp.addEventListener(&#xD;        "change",&#xD;        userImport,&#xD;        false&#xD;    );&#xD;    document.body.appendChild(inp);&#xD;    ide.filePicker = inp;&#xD;    inp.click();&#xD;return function(){return new List([done,result]);};</l></block><list></list></block></block><block s="doWaitUntil"><block s="reportListItem"><l>1</l><block s="evaluate"><block var="ready"/><list></list></block></block></block><block s="doReport"><block s="reportListItem"><l>2</l><block s="evaluate"><block var="ready"/><list></list></block></block></block></script></block-definition><block-definition s="$brush %&apos;selection&apos; of colum %&apos;n&apos; of %&apos;table&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Determines a property of a list.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">min<options>min&#xD;max</options></input><input type="%n">1</input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>typeOfData</l><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="source"/></block><l><option>list</option></l></block><script><block s="doSetVar"><l>typeOfData</l><l>table</l></block></script><script><block s="doSetVar"><l>typeOfData</l><l>list</l></block></script></block><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>n</l><l>typeOfData</l></list><l>var min,max,isNumber,c,i,k,value;&#xD;if(data.length()==0) return new List([0,0]);&#xD;&#xD;i=1;&#xD;if(typeOfData=="list") min=data.at(1); else min=data.at(1).at(n);&#xD;max=min;&#xD;while(i &lt;= data.length()) {&#xD;  if(typeOfData=="list") value = data.at(i); else value=data.at(i).at(n);&#xD;  if(typeof(value)=="number") isNumber=true;&#xD;  else {&#xD;    if(typeof(value)=="string"){&#xD;      isNumber=true;&#xD;      k=0;&#xD;      while((k&lt;value.length) &amp;&amp; isNumber){&#xD;        c=value.charAt(k);&#xD;        if((c&lt;&apos;0&apos;) || (c&gt;&apos;9&apos;))&#xD;          if((c!=&apos;E&apos;) &amp;&amp; (c!=&apos;e&apos;) &amp;&amp; (c!=&apos;+&apos;) &amp;&amp; (c!=&apos;-&apos;)&amp;&amp; (c!=&apos;.&apos;) &amp;&amp; (c!=&apos;,&apos;))&#xD;            isNumber=false;&#xD;        k++;&#xD;        }&#xD;       }&#xD;     else isNumber=false;&#xD;     }&#xD;  if(isNumber){&#xD;    value=Number(value);&#xD;    if(min&gt;value) {min=value;}&#xD;    if(max&lt;value) {max=value;}&#xD;    }&#xD;  i++;&#xD;  }&#xD;return new List([min,max]);     &#xD;</l></block><list><block var="source"/><block var="n"/><block var="typeOfData"/></list></block></block><block s="doSetVar"><l>selection</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="selection"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>min</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>max</l></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="result"/></block></block></script></block></script><script><block s="doAddToList"><l>from "&lt;feature&gt; of column": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$brush new costume width %&apos;width&apos; height %&apos;height&apos; $nl color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">350</input><input type="%n">300</input><input type="%n">225</input><input type="%n">225</input><input type="%n">255</input></inputs><script><block s="doWarp"><script><custom-block s="$brush set property %txt to %s" scope="local"><l>imageWidth</l><block var="width"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageHeight</l><block var="height"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>backColorRed</l><block var="r"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>backColorGreen</l><block var="g"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>backColorBlue</l><block var="b"/></custom-block><block s="doSwitchToCostume"><block s="evaluate"><block s="reportJSFunction"><list><l>w</l><l>h</l><l>r</l><l>g</l><l>b</l></list><l>var newCostume=new Costume();&#xD;newCostume.contents.width = w;&#xD;newCostume.contents.height = h;&#xD;var ctx = newCostume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.strokeStyle = new Color(0,0,0).toString();&#xD;ctx.fillRect(0,0,w,h);&#xD;ctx.strokeRect(0,0,w,h);&#xD;ctx.closePath();&#xD;ctx.fill();&#xD;ctx.stroke();&#xD;newCostume.rotationCenter=new Point(w/2,h/2);&#xD;return newCostume;</l></block><list><block var="width"/><block var="height"/><block var="r"/><block var="g"/><block var="b"/></list></block></block></script></block></script></block-definition><block-definition s="$brush import %&apos;choice&apos; from %&apos;source&apos; to myData" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">costume-(RGB)-data<options>costume-(RGB)-data&#xD;FITS-data</options></input><input type="%s">current-costume</input></inputs><script><block s="doDeclareVariables"><list><l>header</l><l>imagedata</l><l>h</l><l>min</l><l>max</l><l>w</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>FITS-data</l></block><script><block s="doIfElse"><block s="reportIsA"><block var="source"/><l><option>text</option></l></block><script><block s="doSetVar"><l>imagedata</l><block s="evaluate"><block s="reportJSFunction"><list><l>FITSdata</l></list><l>function strToInt(high,low){&#xD;  var left = high.toString(2), right = low.toString(2);&#xD;  while(left.length&lt;8) left="0"+left;&#xD;  while(right.length&lt;8) right="0"+right;&#xD;  var both = left+right, result = 0;&#xD;  var factor = 1;&#xD;  for(var i=15; i&gt;=0;i--) {&#xD;    if(both.charAt(i)==&apos;1&apos;) result = result+factor;&#xD;    factor = factor*2;&#xD;    }&#xD;  return result;&#xD;  }&#xD;&#xD;var width=0, height=0, numberlength=0; minValue=32768, maxValue=-32769,header=[], pixelvalues=[],&#xD;    keyword=&apos;&apos;, kwvalue=&apos;&apos;, indexInLine=0, i=0, insideString=false, finished=false, c=&apos; &apos;, n=0,&#xD;    mask = Math.pow(2,7)-1; &#xD;i=0;&#xD;while((i&lt;2880) &amp;&amp; (i&lt;FITSdata.length)){&#xD;  indexInLine=1; keyword=&apos;&apos;; c = FITSdata.charAt(i); &#xD;  while((c!=&apos; &apos;) &amp;&amp; (c!=&apos;=&apos;) &amp;&amp; (i&lt;2880) &amp;&amp; (i&lt;FITSdata.length) &amp;&amp; (indexInLine&lt;=80)){&#xD;    keyword = keyword+c;i++;indexInLine++; c = FITSdata.charAt(i);&#xD;    } &#xD;  while(((c==&apos; &apos;) || (c==&apos;=&apos;)) &amp;&amp; (i&lt;2880) &amp;&amp; (i&lt;FITSdata.length) &amp;&amp; (indexInLine&lt;=80)){&#xD;    i++; indexInLine++; c = FITSdata.charAt(i);&#xD;    }&#xD;  kwvalue=&apos;&apos;; insideString=false; finished=false;&#xD;  while(!finished){&#xD;    kwvalue=kwvalue+FITSdata.charAt(i);&#xD;    if(c=="&apos;") insideString = !insideString;&#xD;    i++; indexInLine++;&#xD;    c = FITSdata.charAt(i);&#xD;    if(insideString) finished=(i&gt;=2880) || (i&gt;=FITSdata.length) || (indexInLine&gt;80);&#xD;    else finished= (c==&apos; &apos;) || (i&gt;=2880) || (i&gt;=FITSdata.length) || (indexInLine&gt;80);&#xD;    }&#xD;  if(keyword.length&gt;0) header.push(new List([keyword,kwvalue]));&#xD;  if(keyword==&apos;NAXIS1&apos;) width=kwvalue;&#xD;  if(keyword==&apos;NAXIS2&apos;) height=kwvalue;&#xD;  if(keyword==&apos;BITPIX&apos;) numberlength=kwvalue;&#xD;  while((i&lt;2880) &amp;&amp; (i&lt;FITSdata.length) &amp;&amp; (indexInLine&lt;=80)){&#xD;    i++; indexInLine++;&#xD;    }&#xD;  }&#xD;&#xD;if(numberlength==16){&#xD;  i=2880; &#xD;  while(i&lt;FITSdata.length-1){&#xD;    n = strToInt(FITSdata.charAt(i).charCodeAt(0),FITSdata.charAt(i+1).charCodeAt(0));&#xD;    //n = -(n &amp; mask) + (n &amp; &#126;mask);  &#xD;    pixelvalues.push(n);&#xD;    if(n&gt;maxValue) maxValue=n;&#xD;    if(n&lt;minValue) minValue=n;&#xD;    i = i+2;&#xD;    }&#xD; return new List([width,height,minValue,maxValue,new List(header),new List(pixelvalues)]);&#xD;  }&#xD;else return &apos;unsupported number format&apos;;</l></block><list><block var="source"/></list></block></block><block s="doSetVar"><l>myData</l><block s="reportListItem"><l>6</l><block var="imagedata"/></block></block><custom-block s="$brush set properties" scope="local"></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>typeOfData</l><l>FITS</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageWidth</l><block s="reportListItem"><l>1</l><block var="imagedata"/></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageHeight</l><block s="reportListItem"><l>2</l><block var="imagedata"/></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>minValue</l><block s="reportListItem"><l>3</l><block var="imagedata"/></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>maxValue</l><block s="reportListItem"><l>4</l><block var="imagedata"/></block></custom-block><block s="doSetVar"><l>header</l><block s="reportListItem"><l>5</l><block var="imagedata"/></block></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block s="reportListLength"><block var="header"/></block><l>0</l></block><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="header"/></block></block><l></l></block></block><script><custom-block s="$brush set property %txt to %s" scope="local"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="header"/></block></block><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="header"/></block></block></custom-block><block s="doDeleteFromList"><l>1</l><block var="header"/></block></script></block></script><script><block s="doAddToList"><l>from "import from": FITS data have to be text</l><block var="myMessages"/></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>costume-(RGB)-data</l></block><script><block s="doIfElse"><block s="reportEquals"><block var="source"/><l>current-costume</l></block><script><block s="doSetVar"><l>source</l><block s="reportGet"><l><option>costume</option></l></block></block></script><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="source"/><l><option>costume</option></l></block></block><script><block s="doAddToList"><l>from "import from": import only from costumes</l><block var="myMessages"/></block></script></block></script></block><block s="doIf"><block s="reportIsA"><block var="source"/><l><option>costume</option></l></block><script><block s="doSetVar"><l>myData</l><block s="reportGetImageAttribute"><l><option>pixels</option></l><block var="source"/></block></block><custom-block s="$brush set properties" scope="local"></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>typeOfData</l><l>RGB</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageWidth</l><block s="reportGetImageAttribute"><l><option>width</option></l><block var="source"/></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageHeight</l><block s="reportGetImageAttribute"><l><option>height</option></l><block var="source"/></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>minValue</l><l>not set</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>maxValue</l><l>not set</l></custom-block></script></block></script></block></script></block></script></block-definition><block-definition s="$brush apply convolution kernel %&apos;kernel&apos; to myData" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>w</l><l>h</l><l>t</l><l>m</l><l>width</l><l>height</l><l>height</l></list></block><block s="doWarp"><script><block s="doIf"><block s="reportNot"><block s="reportOr"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>FITS</l></block><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>RGB</l></block></block></block><script><block s="doAddToList"><l>from "apply convolution": wrong data type</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data type</l></block></script></block><block s="doIfElse"><custom-block s="$brush is %s a %s ?" scope="local"><block var="kernel"/><l>matrix</l></custom-block><script><block s="doSetVar"><l>h</l><block s="reportListLength"><block var="kernel"/></block></block><block s="doSetVar"><l>w</l><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="kernel"/></block></block></block><block s="doIfElse"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block var="w"/><block var="h"/></block></block><block s="reportOr"><block s="reportEquals"><block s="reportProduct"><l>2</l><block s="reportRound"><block s="reportQuotient"><block var="w"/><l>2</l></block></block></block><block var="w"/></block><block s="reportEquals"><block s="reportProduct"><l>2</l><block s="reportRound"><block s="reportQuotient"><block var="h"/><l>2</l></block></block></block><block var="h"/></block></block></block><script><block s="doAddToList"><l>from "apply convolution": wrong kernel</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong kernel</l></block></script><script><block s="doSetVar"><l>m</l><block s="reportRound"><block s="reportQuotient"><block var="w"/><l>2</l></block></block></block><block s="doSetVar"><l>width</l><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="doSetVar"><l>height</l><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>kernel</l><l>data</l><l>width</l><l>height</l><l>typeOfData</l><l>mIndex</l><l>kWidth</l></list><l>function getValue(x,y){&#xD;  if(typeOfData==&apos;FITS&apos;) return (data.at(x+(y-1)*width));&#xD;  if(typeOfData==&apos;RGB&apos;) return (data.at(x+(y-1)*width));&#xD;  if(typeOfData==&apos;table&apos;) return (data.at(y).at(x));&#xD;  }&#xD;&#xD;function getKernelValue(x,y){&#xD;  return (kernel.at(y).at(x));&#xD;&#xD;}&#xD;&#xD;var result=[],x,y,value,r,g,b,s,row;&#xD;width=Number(width); height=Number(height); mIndex=Number(mIndex);kWidth=Number(kWidth);&#xD;for(var y=1; y&lt;=height;y++){&#xD;  row=new List();&#xD;  for(var x=1;x&lt;=width;x++){&#xD;    if(typeOfData==&apos;FITS&apos;) value = 0; &#xD;    if(typeOfData==&apos;RGB&apos;){r=0;g=0;b=0;s=255};&#xD;    if(typeOfData==&apos;table&apos;) value=0;&#xD;    for(var ky=1;ky&lt;=kWidth;ky++)&#xD;      for(var kx=1;kx&lt;=kWidth;kx++)&#xD;         if((y-mIndex+ky&gt;0) &amp;&amp; (y-mIndex+ky&lt;=height) &amp;&amp; (x-mIndex+kx&gt;0) &amp;&amp; (x-mIndex+kx&lt;=width)){&#xD;           if(typeOfData==&apos;FITS&apos;) value = value+getValue(x-mIndex+kx,y-mIndex+ky)*getKernelValue(kx,ky);&#xD;           if(typeOfData==&apos;table&apos;) value = value+getValue(x-mIndex+kx,y-mIndex+ky)*getKernelValue(kx,ky);&#xD;           if(typeOfData==&apos;RGB&apos;){&#xD;             r = r + getValue(x-mIndex+kx,y-mIndex+ky).at(1)*getKernelValue(kx,ky);&#xD;             g = g + getValue(x-mIndex+kx,y-mIndex+ky).at(2)*getKernelValue(kx,ky);&#xD;             b = b + getValue(x-mIndex+kx,y-mIndex+ky).at(3)*getKernelValue(kx,ky);&#xD;             }&#xD;           }&#xD;    if(typeOfData==&apos;FITS&apos;) result.push(value); &#xD;    if(typeOfData==&apos;table&apos;) row.add(value); &#xD;    if(typeOfData==&apos;RGB&apos;) result.push(new List([r,g,b,s]));&#xD;    }&#xD;  if(typeOfData==&apos;table&apos;) result.push(row); &#xD;  }&#xD;return new List(result);</l></block><list><block var="kernel"/><block var="myData"/><block var="width"/><block var="height"/><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><block var="m"/><block var="w"/></list></block></block></script></block></script><script><block s="doAddToList"><l>from "apply convolution": wrong kernel format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong kernel format</l></block></script></block></script></block></script></block-definition><block-definition s="$brush is %&apos;data&apos; a %&apos;choice&apos; ?" type="predicate" category="operators"><comment x="0" y="0" w="90" collapsed="false">Test on type of data.</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%s" readonly="true">vector<options>vector&#xD;matrix&#xD;RGB-image&#xD;FITS-image</options></input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><block s="reportNot"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doIf"><block s="reportEquals"><block var="choice"/><l>vector</l></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="source"/></block><l><option>list</option></l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var result=true;&#xD;i=1;&#xD;while(result &amp;&amp; (i&lt;=data.length()))&#xD;{&#xD;  row=data.at(i);&#xD;  if(!(row instanceof List)) result=false;&#xD;  else if(row.length()!=1) result=false;&#xD;       else if(Number.isNaN(row.at(1))) result=false;&#xD;  i++;&#xD;}&#xD;return result;&#xD;</l></block><list><block var="source"/></list></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportIsA"><l></l><l><option>number</option></l></block></block></autolambda><list></list></block><block var="source"/></block><block s="reportBoolean"><l><bool>false</bool></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>matrix</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var result=true,row,i,j,width;&#xD;i=1;&#xD;while(result &amp;&amp; (i&lt;=data.length()))&#xD;{&#xD;  row=data.at(i);&#xD;  if(!(row instanceof List)) result=false;&#xD;  else&#xD;  {&#xD;    if(i==1) width = row.length();&#xD;    if(width==1) result=false;&#xD;    if(row.length()!=width) result=false;&#xD;    else&#xD;    {&#xD;      j=1;&#xD;      while(result &amp;&amp; (j&lt;=row.length()))&#xD;      {&#xD;        if(Number.isNaN(row.at(j))) result=false;&#xD;        j++;&#xD;      }&#xD;    }&#xD;  }&#xD;  i++;&#xD;}&#xD;return result;&#xD;</l></block><list><block var="source"/></list></block></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>RGB-image</l></block><script><block s="doIfElse"><custom-block s="$brush is %s a %s ?" scope="local"><block var="source"/><l>matrix</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="source"/></block></block><l>4</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>RGB-image</l></block><script><block s="doIfElse"><custom-block s="$brush is %s a %s ?" scope="local"><block var="source"/><l>vector</l></custom-block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="$arrowLeftOutline draw circle on %&apos;costume&apos; at %&apos;x&apos; %&apos;y&apos; $nl radius %&apos;radius&apos; linewidth %&apos;width&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>radius</l><l>w</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = Number(w);&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.arc(Number(x),Number(y),Number(radius),0,6.283185307179586476925286766559);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block var="costume"/><block var="x"/><block var="y"/><block var="radius"/><block var="width"/><block var="r"/><block var="g"/><block var="b"/></list></block></script></block-definition><block-definition s="$arrowLeftOutline draw rectangle on %&apos;costume&apos; from %&apos;x&apos; %&apos;y&apos; $nl width %&apos;width&apos; height %&apos;height&apos; linewidth %&apos;w&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>width</l><l>height</l><l>w</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = Number(w);&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.strokeRect(x,y,width,height);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block var="costume"/><block var="x"/><block var="y"/><block var="width"/><block var="height"/><block var="w"/><block var="r"/><block var="g"/><block var="b"/></list></block></script></block-definition><block-definition s="$arrowLeftOutline fill circle on %&apos;costume&apos; at %&apos;x&apos; %&apos;y&apos; $nl radius %&apos;radius&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>radius</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.arc(Number(x),Number(y),Number(radius),0,6.283185307179586476925286766559);&#xD;ctx.closePath();&#xD;ctx.fill();</l></block><list><block var="costume"/><block var="x"/><block var="y"/><block var="radius"/><block var="r"/><block var="g"/><block var="b"/></list></block></script></block-definition><block-definition s="$arrowLeftOutline fill rectangle on %&apos;costume&apos; from %&apos;x&apos; %&apos;y&apos; $nl width %&apos;width&apos; height %&apos;height&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>width</l><l>height</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.fillRect(x,y,width,height);&#xD;ctx.closePath();&#xD;ctx.fill();</l></block><list><block var="costume"/><block var="x"/><block var="y"/><block var="width"/><block var="height"/><block var="r"/><block var="g"/><block var="b"/></list></block></script></block-definition><block-definition s="$arrowLeftOutline draw line on %&apos;costume&apos; from %&apos;x&apos; %&apos;y&apos; $nl to %&apos;xe&apos; %&apos;ye&apos; linewidth %&apos;w&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>xe</l><l>ye</l><l>w</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = w;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.moveTo(x,y);&#xD;ctx.lineTo(xe,ye);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block var="costume"/><block var="x"/><block var="y"/><block var="xe"/><block var="ye"/><block var="w"/><block var="r"/><block var="g"/><block var="b"/></list></block></script></block-definition><block-definition s="$arrowLeftOutline draw text %&apos;text&apos; on %&apos;costume&apos; at %&apos;x&apos; %&apos;y&apos; $nl height %&apos;height&apos; horizontal %&apos;horizontal&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%s"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%b"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>height</l><l>horizontal</l><l>r</l><l>g</l><l>b</l><l>text</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.font = ""+height+"px sans-serif";&#xD;if(horizontal)ctx.fillText(text,x,y);&#xD;else{&#xD;  ctx.rotate(-Math.PI/2);  &#xD;  ctx.fillText(text,-y,x);&#xD;  ctx.rotate(Math.PI/2);  &#xD;  }&#xD;ctx.closePath();&#xD;ctx.fill();</l></block><list><block var="costume"/><block var="x"/><block var="y"/><block var="height"/><block var="horizontal"/><block var="r"/><block var="g"/><block var="b"/><block var="text"/></list></block></script></block-definition><block-definition s="convert %&apos;pixels&apos; to FITS" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>pixels</l></list><l>var result=[],pixel;&#xD;for(var i=1;i&lt;=pixels.length();i++){&#xD;  pixel=pixels.at(i);  &#xD;  result.push((pixel.at(1)+pixel.at(2)+pixel.at(3))/3); &#xD;}&#xD;return new List(result);</l></block><list><block var="pixels"/></list></block></block></script></block-definition><block-definition s="draw on sketch pad" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>xOld</l><l>yOld</l><l>x</l><l>y</l><l>mousepos</l></list></block><block s="doWarp"><script><block s="show"></block><block s="goToLayer"><l><option>front</option></l></block><block s="gotoXY"><l>50</l><l>250</l></block><block s="doSwitchToCostume"><l>white</l></block><custom-block s="$brush import %s from %s to myData" scope="local"><l>costume-(RGB)-data</l><l>current-costume</l></custom-block><custom-block s="$brush add %txt image of %s min/max %n %n log? %b" scope="local"><l>gray</l><l>myData</l><l>0</l><l>255</l><l><bool>false</bool></l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineWidth</l><l>3</l></custom-block><block s="bubble"><l>draw 0 or 1</l></block><block s="doWaitUntil"><block s="reportMouseDown"></block></block><block s="bubble"><l></l></block></script></block><block s="doSetVar"><l>mousepos</l><custom-block s="$brush %s by mouse" scope="local"><l>costume-coordinates</l></custom-block></block><block s="doSetVar"><l>xOld</l><block s="reportListItem"><l>1</l><block var="mousepos"/></block></block><block s="doSetVar"><l>yOld</l><block s="reportListItem"><l>2</l><block var="mousepos"/></block></block><block s="doUntil"><block s="reportNot"><block s="reportMouseDown"></block></block><script><block s="doSetVar"><l>mousepos</l><custom-block s="$brush %s by mouse" scope="local"><l>costume-coordinates</l></custom-block></block><block s="doSetVar"><l>x</l><block s="reportListItem"><l>1</l><block var="mousepos"/></block></block><block s="doSetVar"><l>y</l><block s="reportListItem"><l>2</l><block var="mousepos"/></block></block><block s="doIf"><block s="reportAnd"><block s="reportNot"><block s="reportEquals"><block var="xOld"/><block var="x"/></block></block><block s="reportNot"><block s="reportEquals"><block var="yOld"/><block var="y"/></block></block></block><script><custom-block s="$brush draw line from %n %n to %n %n" scope="local"><block var="xOld"/><block var="yOld"/><block var="x"/><block var="y"/></custom-block><block s="doSetVar"><l>xOld</l><block var="x"/></block><block s="doSetVar"><l>yOld</l><block var="y"/></block></script></block></script></block><block s="doWarp"><script><block s="hide"></block><block s="goToLayer"><l><option>back</option></l></block><custom-block s="$brush import %s from %s to myData" scope="local"><l>costume-(RGB)-data</l><l>current-costume</l></custom-block><block s="doSetVar"><l>myData</l><custom-block s="convert %l to FITS" scope="local"><block var="myData"/></custom-block></block><custom-block s="$brush set property %txt to %s" scope="local"><l>typeOfData</l><l>FITS</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>minValue</l><custom-block s="$brush %s of colum %n of %s" scope="local"><l>min</l><l>1</l><l>myData</l></custom-block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>maxValue</l><custom-block s="$brush %s of colum %n of %s" scope="local"><l>max</l><l>1</l><l>myData</l></custom-block></custom-block><block s="doTellTo"><l>ImageSprite</l><block s="reifyScript"><script><block s="doSetVar"><l>myData</l><l></l></block></script><list></list></block><list><block var="myData"/></list></block><block s="doTellTo"><l>ImageSprite</l><block s="reifyScript"><script><block s="doSetVar"><l>myProperties</l><l></l></block></script><list></list></block><list><block var="myProperties"/></list></block><block s="doTellTo"><l>ImageSprite</l><block s="reifyScript"><script><block s="gotoXY"><l>50</l><l>250</l></block><block s="goToLayer"><l><option>front</option></l></block><custom-block s="$brush add %txt image of %s min/max %n %n log? %b" scope="local"><l>gray</l><l>myData</l><l>0</l><l>255</l><l><bool>false</bool></l></custom-block></script><list></list></block><list></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="analyse image" type="command" category="other"></wish></l><l>Control</l></block><list></list></block></script></block></script></block-definition></blocks><variables><variable name="myData"><list struct="atomic" id="4144">255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,205,141,244,225,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,18,0,0,105,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,122,6,0,0,0,86,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,240,10,0,0,0,0,88,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,41,0,0,0,0,0,68,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,100,0,0,0,105,0,0,48,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,4,0,0,23,225,0,0,29,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,163,0,0,3,255,244,0,0,9,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,0,0,116,255,255,9,0,0,244,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145,0,0,0,230,255,255,29,0,0,225,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,64,0,0,46,255,255,255,48,0,0,205,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,27,0,0,145,255,255,255,68,0,0,185,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,133,0,0,27,255,255,255,255,88,0,0,166,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,55,0,0,49,255,255,255,255,107,0,0,146,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,49,0,0,133,255,255,255,255,127,0,10,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,229,0,0,0,246,255,255,255,255,225,244,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,164,0,0,65,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,98,0,0,131,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,33,0,0,197,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,202,0,0,16,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,86,0,0,82,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,46,0,0,86,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,195,0,0,5,243,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,142,47,0,100,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,189,195,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255</list></variable><variable name="myProperties"><list id="4145"><item><list struct="atomic" id="4146">typeOfData,FITS</list></item><item><list struct="atomic" id="4147">imageWidth,64</list></item><item><list struct="atomic" id="4148">imageHeight,64</list></item><item><list struct="atomic" id="4149">minValue,0</list></item><item><list struct="atomic" id="4150">maxValue,255</list></item><item><list struct="atomic" id="4151">backColorRed,255</list></item><item><list struct="atomic" id="4152">backColorGreen,225</list></item><item><list struct="atomic" id="4153">backColorBlue,205</list></item><item><list struct="atomic" id="4154">lineStyle,continuous</list></item><item><list struct="atomic" id="4155">lineWidth,1</list></item><item><list struct="atomic" id="4156">lineColorRed,0</list></item><item><list struct="atomic" id="4157">lineColorGreen,0</list></item><item><list struct="atomic" id="4158">lineColorBlue,0</list></item><item><list struct="atomic" id="4159">surfaceColorRed,180</list></item><item><list struct="atomic" id="4160">surfaceColorGreen,180</list></item><item><list struct="atomic" id="4161">surfaceColorBlue,180</list></item></list></variable><variable name="myMessages"><list struct="atomic" id="4162"></list></variable></variables><scripts><script x="14.285714285714286" y="90.71428571428572"><block s="receiveGo"></block><block s="gotoXY"><l>-14</l><l>314</l></block><block s="setScale"><l>200</l></block><block s="hide"></block><block s="goToLayer"><l><option>back</option></l></block></script></scripts></sprite><sprite name="bInitialize" idx="2" x="-333" y="380" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" costume="1" color="183.6,0,55.080000000000126,1" pen="tip" id="4173"><costumes><list id="4174"><item><costume name="bInitialize" center-x="63" center-y="18.5" image="data:image/png;base64,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" id="4175"/></item></list></costumes><sounds><list struct="atomic" id="4176"></list></sounds><blocks></blocks><variables></variables><scripts><script x="13.333333333333327" y="15.345238095238127"><block s="receiveGo"></block><block s="doSwitchToCostume"><l>bInitialize</l></block><block s="gotoXY"><l>-333</l><l>380</l></block></script><script x="213.125" y="21.42857142857143"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doTellTo"><l>ImageSprite</l><block s="reifyScript"><script><block s="gotoXY"><l>50</l><l>250</l></block></script><list></list></block><list></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="initialize" type="command" category="other"></wish></l><l>NeuralNetSprite</l></block><list></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="switch to costume nr %n" type="command" category="other"></wish></l><l>ImageSprite</l></block><list><block s="reportRandom"><l>1</l><l>20</l></block></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="analyse image" type="command" category="other"></wish></l><l>Control</l></block><list></list></block></script></scripts></sprite><sprite name="bTrain" idx="3" x="-200" y="380" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" costume="1" color="0,143.61599999999993,224.4,1" pen="tip" id="4226"><costumes><list id="4227"><item><costume name="bTrain" center-x="63" center-y="18.5" image="data:image/png;base64,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" id="4228"/></item></list></costumes><sounds><list struct="atomic" id="4229"></list></sounds><blocks></blocks><variables></variables><scripts><script x="18.92857142857143" y="14.166666666666664"><block s="receiveGo"></block><block s="doSwitchToCostume"><l>bTrain</l></block><block s="gotoXY"><l>-200</l><l>380</l></block></script><script x="21.42857142857143" y="120.83333333333331"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doTellTo"><l>ImageSprite</l><block s="reifyScript"><script><block s="gotoXY"><l>50</l><l>250</l></block></script><list></list></block><list></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="learn" type="command" category="other"></wish></l><l>NeuralNetSprite</l></block><list></list></block></script></scripts></sprite><sprite name="bNextCostume" idx="4" x="-66" y="380" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" costume="1" color="0,143.61599999999993,224.4,1" pen="tip" id="4261"><costumes><list id="4262"><item><costume name="bNextCostume" center-x="63" center-y="18.5" image="data:image/png;base64,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" id="4263"/></item></list></costumes><sounds><list struct="atomic" id="4264"></list></sounds><blocks></blocks><variables></variables><scripts><script x="11.875" y="19.791666666666675"><block s="receiveGo"></block><block s="doSwitchToCostume"><l>bNextCostume</l></block><block s="gotoXY"><l>-66</l><l>380</l></block></script><script x="241.25000000000003" y="20.416666666666714"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="switch to costume nr %n" type="command" category="other"></wish></l><l>ImageSprite</l></block><list><block s="reportRandom"><l>1</l><l>20</l></block></list></block><block s="doTellTo"><l>ImageSprite</l><block s="reifyScript"><script><block s="gotoXY"><l>50</l><l>250</l></block></script><list></list></block><list></list></block><block s="doCallCC"><block s="reportAttributeOf"><l><wish s="analyse image" type="command" category="other"></wish></l><l>Control</l></block></block></script></scripts></sprite><sprite name="bStopLearning" idx="5" x="68" y="380" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" costume="1" color="252.45,212.05800000000002,0,1" pen="tip" id="4305"><costumes><list id="4306"><item><costume name="bStopLearning" center-x="63" center-y="18.5" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAlCAYAAACEal28AAAKVklEQVR4Xu2ceVzN2RvHP220KrTdFJVSxlJJoY2ICpHdWLP8shVFtrH2y5pUU+ElL4R+xmRfm2izjFBJjRZKlqLVdNOKlt/rnDv3O91KDN3Rcs8/t77fc873eZ73eZ7znO895wrV1tbWQlDanQWEmgLPZrMRHByMiIgIxMXFITs7u90ZqDUprKqqCn19fVhbW2PWrFmQk5P7pPiNgq+srMT27dvh5eUF8reEuAiUFcVbkw3aray5+ZWoqKyGuLg43NzcsGHDBvp3/dIAfEZGBiZMmIBnGakUtquzFRymd4aMVHm7NWZrUrykTBJBp4rg4x8OMgh6avXG+fPnoaWlxaMGD3gC3dzcHMXsAsybZYB9npqtSWeBrPUssGxNJo4GJ0BWTgG3b9/mgc+AJyHdyMiIevr2LVZwXSQrMGQbsIDPwWJscA+nnh8bG8uEfQb8pk2bsNdrp8DT2wDs+ipwPX+V23p4eHjQ2xQ8yd5ZLBZYiiLIfDSmDaouUElT/ypy8quRk5NDs30KPiAgAM7OzvDbMx7OCzoKrNQGLeB/+D2Wr74If39/ODk5ccDb2dkhIjwUeemzBdl7G4ROVCoukQJL5zisbexolk/Bq6mpQUy4SBDm2yh0rlok3H+s6YysrCwOeCEhIWh0lxKAbwfgn78qA3lLLwDfxmHXVY94fJsBX8T+gC6aF3Dv+ggMGtj1u2GMvpMPJQVx9Nbp9N1k+NyD/zXwr9+UI+JWPuZMV/+cTF99v6WAV9S+CFsrZRw7MOirdeF3w38N/OETmVixPgGl2ZP4plNLAf80owQ91CTRsaMI33T91o6bHfzHjzU4dDwTKWnvYGzYhXr4tPkxKH73AWGRefDepgcRESEsX9SLyv7hQzVCLmThYSIbLCVxjLVW4QmR27xSsNHtB5w6+wq/3y+E6SB5TJ/UvVG9PwWetI2JfQuNHlJYOFsD0tJiTPtfz71CWnoJqqtrYdBfDhPGqjL39vilwcJEAfmF73E9Mhf/masJzR5S8D+UgfWuvREc8gIJSWzo9ZXjiWSkXXdVSUybyJFzp08qrU+edffBW+j1lcX8WbzffRAZE5PZEBMVhoy0KG3nsqQXxMSEv5Vxo+2bHfxAyxvUEIb6nREWkUsVJmB/i8hB6tMSWA9Xgoy0GE4HmSD24Z+Y7HAXfXQ7obKyGlKSorhyPQcRF4ZiuIUS8vIroax7CWNGsSAEQFNdGoeDMzHCQgkXT5o1UKg++JqaWowYH42s1+UwNuyKX86+go6WDFLu2UBYWAgLnGPxOLUYZoPlUVVVC7/AdLiv64PNa/rQvk1tItCxgzCi7hRgnI0KBuh1hp2NCgwtb8B8sDwdwD3UpHDs1At4bu2P1ct1aTsNvSsYZ9sNP+8ywMusMqjrXYXVUEWUlVejb29Z6hjrXHSxc3N/Wn+ZWzyify/A4nk9cfHaa0TfKcD40Srw3WEANVXJlg+ehDgd41C8SbEDS1mCR+C9AU/gtjkRtX9OZa6TSFBWXoUrp8yZa9aTblKDXguxYMC7LNaGzw4DWsdn/xOs3JiIjPjR6KkhzfOM+uBXb07Ew8QiRFwcRutx7/ts16feRKAQcNyyzj0JETfzEBs5kgFPdIq5PgJamjL0GumPgK8LzmHpA/yRwkZ89KhPgndaqAV/zwH0vutPCTh35TVeJo2l/0uwziBonzGNEFVVNZBUOUsdY/zobnyBTjptdo/XNrwGHW0ZLFugBduRLEZwAn7Tjscof/P3HK/S+xJWLdPBKicdph4Bu8M7FQUZ9gz4uEgrGOp3oXXIlCGnfgFnj5lgot3fYbkuWG5WbzE6kg6saRO6o+avXWXe+57Cfkw3BPoOZJ4Z86AQ6ZmlOH0hi36mPbBlwFuaKWLbxn5MXS74/KfjoCDP2dTgH5gOr4AnDMjGPD4lxoaZwk6eeQlHlzia71RX10BU4QxCjgzBFHs12h+xy/EDg2A1TKn1gCfh2dMvDd77n2KoiQLOB5uis1wHapytu5LxNtOeKkPCsIj8aRz0NoSjQ09GQZIELnKNR1XhlEbBk4piCqdx6OeBcJih0aTH6xqH0h0o/X+Qhbi4CA3b5HO4hSJmTO6B38JzsHBFHF7nVNA6ZHB8/FjLA364uSI8NjQNPjDoGTy8UpD12O6THl8X/LnL2ZjpeA8VOZNpfT2zMCSlFDO6GA/ogvvhVnyDzheP50pL5mwSEm1GKGPvNn0Q47h7JuN1yjhGIRJuptirYvdWPeaa++5kOhcTr+PO8dd+NWeiR0paMfqYhCHq0jAMM1NsErztlFtQUZbAYX+jRo1IDG5jpcw8nySSwSEvecCTfOK/P/Vt0uOJblt3J+NNKke3z3k8Af/jwnt4nzcZZCrpZxqGkKND8Cq7nCZ29Qc0P0ZAs4Z6EqaNBnSB2WAFOldZ2d+kWTEx3Pkr2Zg45y5N3LQ1ZWjSsnHbHzQ6BO03ph4YHp2H0VNvYb+XIRbO0WTAk1fIJw8Npkmg89oEJCQVIfGOdQN71J/jj/7vOZa6xePyL+ZM2CQJZycZUQwxlofR8Bs02QsOHIyCwkqMm3EHReyPXwV+887HyH0y/ovBT50XQ6Nacmox+pqG4cdJ3emqRraTGAz6c5JIfpZmBX/1+hssXhkPsqTLK3iPsaNYNPsmGTQZCIOswvEwiU314SZ5i1fG4Ujwc4iKcpYta1foYstaTlbN9XjXJb1oJlxaVgV1NUmcOWbCzPl1jdPYcm6Hdwo8/Z5AvKMwlcmgnxzmzdSAs6M2yFxLphWSTIoIC8Fhhjqdoriykaz+Sz1+0cp4pt2XePykuXdpfWIrE+sIugoiqxqSkxwMIisXRYRf4CSl/CjNCp4r4JucCsjJikFSkrMerVsyX5TSZVn9QiAr1du9ywX/MHok9fZ3JVWQ7/p1ewRIX2StrsLiXW0QOXJyKxqsQvhh7Mb6PHj0GVZtesTzYuv4qReYu/QBsh+PRTeVVrCca25j1QVPwl9bLCTqzHS8D7JknT6xO0pKq2h0yy+oRNRlS76p3MDjybYriQ4lLeJr2fYAnpAlb/oib+cj/VkJFBXEMdRUAWuW69LVEL8KAV/xQYZuv6Jfy9ra2uJm9A3BDhx+WbwF9Ev22ytpn8DQYSMRGhrKAe/r6wtXV1fBnrsWAIhfInD33Pn4+MDFxYUDvrCwEGT7lWCXLb/M/v375e6yJduu5OXlOeCJWKtXr8a+AB8sXzIIuzbxvhb9/mILJPgWC6zzyIbfgftY5uSKPXv20K4Y8KWlpfQkzcsX6fDdbQvH2fxZUnyLAoK2/9wCgSfK4bI2FD3UtelJGmlpzrKa5+xcWloaLC0t6dk5gef/cyO3tBZcTydn56KioqCry/kKuQF4coHAJ6dliedzT8vOnyEHKYmKlqaXQJ5GLFBWIYEjJ9nMaVni6WQffV3ojYInF0nYd3d3BzlhIzgf37rGV93z8eTEzJYtW5jwXleTJn8Rg2T75BcxwsLC8OjRI+Tm5rYuK7QzaZWVlXl+EYNk758qTYJvZ3ZrV+r+Hyc8wd2edVVxAAAAAElFTkSuQmCC" id="4307"/></item></list></costumes><sounds><list struct="atomic" id="4308"></list></sounds><blocks></blocks><variables></variables><scripts><script x="16.666666666666675" y="8.333333333333337"><block s="receiveGo"></block><block s="doSwitchToCostume"><l>bStopLearning</l></block><block s="gotoXY"><l>68</l><l>380</l></block></script><script x="20.625" y="106.25"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doWaitUntil"><block var="ready for next process"/></block><block s="doSetVar"><l>learning</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></scripts></sprite><sprite name="Control" idx="7" x="60.000000000000455" y="250" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" hidden="true" costume="0" color="0,107.71199999999996,168.3,1" pen="tip" id="4327"><costumes><list struct="atomic" id="4328"></list></costumes><sounds><list struct="atomic" id="4329"></list></sounds><blocks><block-definition s="initialize kernel values" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>kernels</l><block s="reportNewList"><list></list></block></block><block s="doAddToList"><block s="reportNewList"><list><block s="reportNewList"><list><l>-1</l><l>0</l><l>1</l></list></block><block s="reportNewList"><list><l>-1</l><l>0</l><l>1</l></list></block><block s="reportNewList"><list><l>-1</l><l>0</l><l>1</l></list></block></list></block><block var="kernels"/><comment w="111.33333333333333" collapsed="false">vertical edge kernel</comment></block><block s="doAddToList"><block s="reportNewList"><list><block s="reportNewList"><list><l>-1</l><l>-1</l><l>-1</l></list></block><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l></list></block><block s="reportNewList"><list><l>1</l><l>1</l><l>1</l></list></block></list></block><block var="kernels"/><comment w="111.33333333333333" collapsed="false">horizontal edge kernel</comment></block><block s="doAddToList"><block s="reportNewList"><list><block s="reportNewList"><list><l>-1</l><l>-2</l><l>-1</l></list></block><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l></list></block><block s="reportNewList"><list><l>1</l><l>2</l><l>1</l></list></block></list></block><block var="kernels"/><comment w="113.33333333333336" collapsed="false">vertical edge kernel 2</comment></block><block s="doAddToList"><block s="reportNewList"><list><block s="reportNewList"><list><l>1</l><l>2</l><l>1</l></list></block><block s="reportNewList"><list><l>2</l><l>4</l><l>2</l></list></block><block s="reportNewList"><list><l>1</l><l>2</l><l>1</l></list></block></list></block><block var="kernels"/><comment w="90" collapsed="false">Gauß  kernel</comment></block><block s="doAddToList"><block s="reportNewList"><list><block s="reportNewList"><list><l>0</l><l>1</l><l>0</l></list></block><block s="reportNewList"><list><l>1</l><l>-4</l><l>0</l></list></block><block s="reportNewList"><list><l>0</l><l>1</l><l>0</l></list></block></list></block><block var="kernels"/><comment w="90" collapsed="false">Laplace kernel</comment></block><block s="doAddToList"><block s="reportNewList"><list><block s="reportNewList"><list><l>1</l><l>2</l><l>1</l></list></block><block s="reportNewList"><list><l>2</l><l>-13</l><l>2</l></list></block><block s="reportNewList"><list><l>1</l><l>2</l><l>1</l></list></block></list></block><block var="kernels"/><comment w="90" collapsed="false">edge kernel</comment></block></script></block></script></block-definition><block-definition s="vertical convolution of %&apos;sprite&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%obj"></input></inputs><script><block s="doDeclareVariables"><list><l>newSprite</l></list></block><block s="doSetVar"><l>newSprite</l><block s="newClone"><block var="sprite"/></block></block><block s="doTellTo"><block var="newSprite"/><block s="reifyScript"><script><block s="doSetVar"><l>myProperties</l><l></l></block><block s="setScale"><l>100</l></block><block s="doSetVar"><l>myData</l><l></l></block><block s="doSetVar"><l>myData</l><l></l></block><block s="doSetVar"><l>myData</l><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportProduct"><l></l><l>255</l></block></autolambda><list></list></block><block s="reportAttributeOf"><l>myData</l><block var="newSprite"/></block></block></block></script><list></list></block><list></list></block><block s="doReport"><block var="newSprite"/></block></script></block-definition><block-definition s="horizontal convolution of %&apos;sprite&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%obj"></input></inputs><script><block s="doDeclareVariables"><list><l>newSprite</l></list></block><block s="doSetVar"><l>newSprite</l><block s="newClone"><block var="sprite"/></block></block><block s="doTellTo"><block var="newSprite"/><block s="reifyScript"><script><block s="doSetVar"><l>myProperties</l><l></l></block><block s="setScale"><l>100</l></block><block s="doSetVar"><l>myData</l><l></l></block><block s="doSetVar"><l>myData</l><l></l></block><block s="doSetVar"><l>myData</l><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportProduct"><l></l><l>255</l></block></autolambda><list></list></block><block s="reportAttributeOf"><l>myData</l><block var="newSprite"/></block></block></block></script><list></list></block><list></list></block><block s="doReport"><block var="newSprite"/></block></script></block-definition><block-definition s="first convolution" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>convolution:</l><l>-390</l><l>210</l><l>20</l></list></block><block s="doSetVar"><l>first layer</l><block s="reportNewList"><list></list></block></block><block s="doAddToList"><block s="reportNewList"><list><custom-block s="copy of ImageSprite %obj" scope="local"><block s="reportObject"><l>ImageSprite</l></block></custom-block><custom-block s="copy of ImageSprite %obj" scope="local"><block s="reportObject"><l>ImageSprite</l></block></custom-block></list></block><block var="first layer"/></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="apply convolution kernel %n to myself" type="command" category="other"></wish></l><custom-block s="element %n %n of %l"><l>1</l><l>1</l><block var="first layer"/></custom-block></block><list><l>1</l></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="apply convolution kernel %n to myself" type="command" category="other"></wish></l><custom-block s="element %n %n of %l"><l>2</l><l>1</l><block var="first layer"/></custom-block></block><list><l>2</l></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>1</l><l>1</l><block var="first layer"/></custom-block><block s="reifyScript"><script><block s="setScale"><l>100</l></block><block s="gotoXY"><l>-125</l><l>220</l></block></script><list></list></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>2</l><l>1</l><block var="first layer"/></custom-block><block s="reifyScript"><script><block s="setScale"><l>100</l></block><block s="gotoXY"><l>225</l><l>220</l></block></script><list></list></block><list></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="draw rect %n %n %n %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>-395</l><l>260</l><l>790</l><l>180</l></list></block></script></block></script></block-definition><block-definition s="init" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doBroadcast"><l>delete all clones</l></block><block s="clear"></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>current digit</l><l>-20</l><l>330</l><l>20</l></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="draw rect %n %n %n %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>-15</l><l>315</l><l>130</l><l>130</l></list></block><block s="doSetVar"><l>ready for next process</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block-definition><block-definition s="first reLU" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>reLU:</l><l>-390</l><l>150</l><l>20</l></list></block><block s="doAddToList"><block s="reportNewList"><list><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>1</l><l>1</l><block var="first layer"/></custom-block></custom-block><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>2</l><l>1</l><block var="first layer"/></custom-block></custom-block></list></block><block var="first layer"/></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="apply reLU to myself" type="command" category="other"></wish></l><custom-block s="element %n %n of %l"><l>1</l><l>2</l><block var="first layer"/></custom-block></block><list></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="apply reLU to myself" type="command" category="other"></wish></l><custom-block s="element %n %n of %l"><l>2</l><l>2</l><block var="first layer"/></custom-block></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>1</l><l>2</l><block var="first layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>-125</l><l>150</l></block></script><list></list></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>2</l><l>2</l><block var="first layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>225</l><l>150</l></block></script><list></list></block><list></list></block></script></block></script></block-definition><block-definition s="first pooling with stride 4" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>pooling (stride:4):</l><l>-390</l><l>97</l><l>20</l></list></block><block s="doAddToList"><block s="reportNewList"><list><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>1</l><l>2</l><block var="first layer"/></custom-block></custom-block><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>2</l><l>2</l><block var="first layer"/></custom-block></custom-block></list></block><block var="first layer"/></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="apply maxpooling to myself" type="command" category="other"></wish></l><custom-block s="element %n %n of %l"><l>1</l><l>3</l><block var="first layer"/></custom-block></block><list></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="apply maxpooling to myself" type="command" category="other"></wish></l><custom-block s="element %n %n of %l"><l>2</l><l>3</l><block var="first layer"/></custom-block></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>1</l><l>3</l><block var="first layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>-125</l><l>100</l></block></script><list></list></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>2</l><l>3</l><block var="first layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>225</l><l>100</l></block></script><list></list></block><list></list></block></script></block></script></block-definition><block-definition s="second convolution" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>convolution:</l><l>-390</l><l>40</l><l>20</l></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="draw rect %n %n %n %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>-395</l><l>65</l><l>790</l><l>180</l></list></block><block s="doSetVar"><l>second layer</l><block s="reportNewList"><list></list></block></block><block s="doAddToList"><block s="reportNewList"><list><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>1</l><l>3</l><block var="first layer"/></custom-block></custom-block><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>1</l><l>3</l><block var="first layer"/></custom-block></custom-block><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>2</l><l>3</l><block var="first layer"/></custom-block></custom-block><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>2</l><l>3</l><block var="first layer"/></custom-block></custom-block></list></block><block var="second layer"/></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="apply convolution kernel %n to myself" type="command" category="other"></wish></l><custom-block s="element %n %n of %l"><l>1</l><l>1</l><block var="second layer"/></custom-block></block><list><l>1</l></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="apply convolution kernel %n to myself" type="command" category="other"></wish></l><custom-block s="element %n %n of %l"><l>2</l><l>1</l><block var="second layer"/></custom-block></block><list><l>2</l></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="apply convolution kernel %n to myself" type="command" category="other"></wish></l><custom-block s="element %n %n of %l"><l>3</l><l>1</l><block var="second layer"/></custom-block></block><list><l>1</l></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="apply convolution kernel %n to myself" type="command" category="other"></wish></l><custom-block s="element %n %n of %l"><l>4</l><l>1</l><block var="second layer"/></custom-block></block><list><l>2</l></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>1</l><l>1</l><block var="second layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>-150</l><l>50</l></block></script><list></list></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>2</l><l>1</l><block var="second layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>-100</l><l>50</l></block></script><list></list></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>3</l><l>1</l><block var="second layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>200</l><l>50</l></block></script><list></list></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>4</l><l>1</l><block var="second layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>250</l><l>50</l></block></script><list></list></block><list></list></block></script></block></script></block-definition><block-definition s="second reLU" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>reLU:</l><l>-390</l><l>15</l><l>20</l></list></block><block s="doAddToList"><block s="reportNewList"><list><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>1</l><l>1</l><block var="second layer"/></custom-block></custom-block><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>2</l><l>1</l><block var="second layer"/></custom-block></custom-block><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>3</l><l>1</l><block var="second layer"/></custom-block></custom-block><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>4</l><l>1</l><block var="second layer"/></custom-block></custom-block></list></block><block var="second layer"/></block><block s="doFor"><l>i</l><l>1</l><l>4</l><script><block s="doRun"><block s="reportAttributeOf"><l><wish s="apply reLU to myself" type="command" category="other"></wish></l><custom-block s="element %n %n of %l"><block var="i"/><l>2</l><block var="second layer"/></custom-block></block><list></list></block></script></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>1</l><l>2</l><block var="second layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>-150</l><l>25</l></block></script><list></list></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>2</l><l>2</l><block var="second layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>-100</l><l>25</l></block></script><list></list></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>3</l><l>2</l><block var="second layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>200</l><l>25</l></block></script><list></list></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>4</l><l>2</l><block var="second layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>250</l><l>25</l></block></script><list></list></block><list></list></block></script></block></script></block-definition><block-definition s="second pooling with stride 4" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>pooling (stride: 4):</l><l>-390</l><l>-10</l><l>20</l></list></block><block s="doAddToList"><block s="reportNewList"><list><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>1</l><l>2</l><block var="second layer"/></custom-block></custom-block><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>2</l><l>2</l><block var="second layer"/></custom-block></custom-block><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>3</l><l>2</l><block var="second layer"/></custom-block></custom-block><custom-block s="copy of ImageSprite %obj" scope="local"><custom-block s="element %n %n of %l"><l>4</l><l>2</l><block var="second layer"/></custom-block></custom-block></list></block><block var="second layer"/></block><block s="doFor"><l>i</l><l>1</l><l>4</l><script><block s="doRun"><block s="reportAttributeOf"><l><wish s="apply maxpooling to myself" type="command" category="other"></wish></l><custom-block s="element %n %n of %l"><block var="i"/><l>3</l><block var="second layer"/></custom-block></block><list></list></block></script></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>1</l><l>3</l><block var="second layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>-150</l><l>0</l></block></script><list></list></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>2</l><l>3</l><block var="second layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>-100</l><l>0</l></block></script><list></list></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>3</l><l>3</l><block var="second layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>200</l><l>0</l></block></script><list></list></block><list></list></block><block s="doTellTo"><custom-block s="element %n %n of %l"><l>4</l><l>3</l><block var="second layer"/></custom-block><block s="reifyScript"><script><block s="gotoXY"><l>250</l><l>0</l></block></script><list></list></block><list></list></block></script></block></script></block-definition><block-definition s="show final feature maps" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>final feature maps:</l><l>-390</l><l>-70</l><l>20</l></list></block><block s="doSetVar"><l>final feature maps</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><l>4</l><script><block s="doAddToList"><block s="newClone"><custom-block s="element %n %n of %l"><block var="i"/><l>3</l><block var="second layer"/></custom-block></block><block var="final feature maps"/></block></script></block><block s="doFor"><l>i</l><l>1</l><l>4</l><script><block s="doTellTo"><block s="reportListItem"><block var="i"/><block var="final feature maps"/></block><block s="reifyScript"><script><block s="setScale"><l>1500</l></block><block s="goToLayer"><l><option>back</option></l></block><block s="gotoXY"><block s="reportSum"><l>-127</l><block s="reportProduct"><block s="reportDifference"><block var="i"/><l>1</l></block><l>117</l></block></block><l>-60</l></block></script><list></list></block><list></list></block></script></block></script></block></script></block-definition><block-definition s="learn" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>nr</l></list></block><block s="doSetVar"><l>learning</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doSetVar"><l>ready for next process</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doUntil"><block s="reportNot"><block var="learning"/></block><script><block s="doSetVar"><l>nr</l><block s="reportRandom"><l>1</l><block s="reportListLength"><block s="reportGet"><l><option>costumes</option></l></block></block></block></block></script></block></script></block-definition><block-definition s="reLU applied to %&apos;sprite&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%obj"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>typeOfData</l></list><l>var result=[],value;&#xD;&#xD;for(var i=1; i&lt;=data.length();i++){&#xD;  if(typeOfData==&apos;FITS&apos;) {&#xD;    if(data.at(i)&lt;0) result.push(0); else result.push(data.at(i));&#xD;  } &#xD;  else if(typeOfData==&apos;RGB&apos;){&#xD;         value = [];&#xD;         for(var j=1;j&lt;=4;j++)&#xD;           if(data.at(i).at(j)&lt;0) value.push(0); else value.push(data.at(i).at(j));&#xD;           result.push(new List(value));&#xD;       }&#xD;  }&#xD;return new List(result);</l></block><list><block s="reportAttributeOf"><l>myData</l><block var="sprite"/></block><l></l></list></block></block></script></block-definition><block-definition s="copy of ImageSprite %&apos;sprite&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%obj"></input></inputs><script><block s="doDeclareVariables"><list><l>theCopy</l><l>copiedData</l></list></block><block s="doSetVar"><l>theCopy</l><block s="newClone"><block var="sprite"/></block></block><block s="doSetVar"><l>copiedData</l><block s="evaluate"><block s="reportAttributeOf"><l><wish s="$storage copy of %s" type="reporter" category="lists"></wish></l><l>DataSprite</l></block><list><block s="reportAttributeOf"><l>myData</l><block var="sprite"/></block></list></block></block><block s="doTellTo"><block var="theCopy"/><block s="reifyScript"><script><block s="doSetVar"><l></l><l></l></block></script><list></list></block><list><l>myData</l><block var="copiedData"/></list></block><block s="doSetVar"><l>copiedData</l><block s="evaluate"><block s="reportAttributeOf"><l><wish s="$storage copy of %s" type="reporter" category="lists"></wish></l><l>DataSprite</l></block><list><block s="reportAttributeOf"><l>myProperties</l><block var="sprite"/></block></list></block></block><block s="doTellTo"><block var="theCopy"/><block s="reifyScript"><script><block s="doSetVar"><l></l><l></l></block></script><list></list></block><list><l>myProperties</l><block var="copiedData"/></list></block><block s="doSetVar"><l>copiedData</l><block s="evaluate"><block s="reportAttributeOf"><l><wish s="$storage copy of %s" type="reporter" category="lists"></wish></l><l>DataSprite</l></block><list><block s="reportAttributeOf"><l>myMessages</l><block var="sprite"/></block></list></block></block><block s="doTellTo"><block var="theCopy"/><block s="reifyScript"><script><block s="doSetVar"><l></l><l></l></block></script><list></list></block><list><l>myMessages</l><block var="copiedData"/></list></block><block s="doReport"><block var="theCopy"/></block></script></block-definition><block-definition s="analyse image" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="init" scope="local"></custom-block><custom-block s="first convolution" scope="local"></custom-block><custom-block s="first reLU" scope="local"></custom-block><custom-block s="first pooling with stride 4" scope="local"></custom-block><custom-block s="second convolution" scope="local"></custom-block><custom-block s="second reLU" scope="local"></custom-block><custom-block s="second pooling with stride 4" scope="local"></custom-block><custom-block s="show final feature maps" scope="local"></custom-block><block s="doIf"><block s="reportNot"><block var="learning"/></block><script><block s="doRun"><block s="reportAttributeOf"><l><wish s="draw all lines" type="command" category="other"></wish></l><l>thePen</l></block><list></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="show result" type="command" category="other"></wish></l><l>NeuralNetSprite</l></block><list></list></block></script></block></script></block-definition></blocks><variables></variables><scripts><script x="21.42857142857143" y="21.42857142857143"><block s="receiveGo"></block><custom-block s="set value %s to %s"><l>Stage size</l><block s="reportNewList"><list><l>800</l><l>800</l></list></block></custom-block><block s="doBroadcast"><l>delete all clones</l></block><block s="hide"></block><block s="doSetVar"><l>learning</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><custom-block s="initialize kernel values" scope="local"></custom-block><block s="doRun"><block s="reportAttributeOf"><l><wish s="switch to costume nr %n" type="command" category="other"></wish></l><l>ImageSprite</l></block><list><block s="reportRandom"><l>1</l><l>20</l></block></list></block><custom-block s="analyse image" scope="local"></custom-block></script></scripts></sprite><sprite name="bDraw" idx="6" x="200" y="380" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" costume="1" color="10.404000000000009,130.05,0,1" pen="tip" id="5675"><costumes><list id="5676"><item><costume name="bDraw" center-x="63" center-y="18.5" image="data:image/png;base64,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" id="5677"/></item></list></costumes><sounds><list struct="atomic" id="5678"></list></sounds><blocks></blocks><variables></variables><scripts><script x="38.33333333333339" y="24.666666666666668"><block s="receiveGo"></block><block s="doSwitchToCostume"><l>bDraw</l></block><block s="gotoXY"><l>200</l><l>380</l></block></script><script x="248.92857142857144" y="35.30952380952382"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="draw on sketch pad" type="command" category="other"></wish></l><l>SketchPad</l></block><list></list></block></script></scripts></sprite><sprite name="DataSprite" idx="9" x="-360.8266248403015" y="-362.9738080990819" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="1" color="0,153,24.48000000000002,1" pen="tip" id="5697"><costumes><list id="5698"><item><costume name="DataSpriteIcon" center-x="25" center-y="25" image="data:image/png;base64,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" id="5699"/></item></list></costumes><sounds><list struct="atomic" id="5700"></list></sounds><blocks><block-definition s="$storage set property %&apos;name&apos; to %&apos;value&apos;" type="command" category="lists"><comment x="0" y="0" w="66.66666666666667" collapsed="false">Sets the value of an existing property or inserts it anew.</comment><header></header><code></code><translations></translations><inputs><input type="%txt">minValue<options>typeOfData&#xD;width&#xD;height&#xD;minValue&#xD;maxValue&#xD;columns&#xD;rows&#xD;backColorRed&#xD;backColorGreen&#xD;backColorBlue</options></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>done</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>name</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="name"/><l> </l></block></block></block><block s="doSetVar"><l>done</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>h</l><block s="reportAtomicMap"><block s="reifyReporter"><script><block s="doIf"><block s="reportEquals"><block var="name"/><block s="reportListItem"><l>1</l><l/></block></block><script><block s="doReplaceInList"><l>2</l><l/><block var="value"/></block><block s="doSetVar"><l>done</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script><list></list></block><block var="myProperties"/></block></block><block s="doIf"><block s="reportNot"><block var="done"/></block><script><block s="doAddToList"><block s="reportNewList"><list><block var="name"/><block var="value"/></list></block><block var="myProperties"/></block></script></block></script></block></script></block-definition><block-definition s="$storage property %&apos;name&apos;" type="reporter" category="lists"><comment x="0" y="0" w="95" collapsed="false">Reads the value of an existing property.</comment><header></header><code></code><translations></translations><inputs><input type="%txt">minValue<options>typeOfData&#xD;width&#xD;height&#xD;minValue&#xD;maxValue&#xD;columns&#xD;rows&#xD;backColorRed&#xD;backColorGreen&#xD;backColorBlue</options></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>result</l><l>not found</l></block><block s="doSetVar"><l>name</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="name"/><l> </l></block></block></block><block s="doSetVar"><l>h</l><block s="reportAtomicMap"><block s="reifyReporter"><script><block s="doIf"><block s="reportEquals"><block var="name"/><block s="reportListItem"><l>1</l><l/></block></block><script><block s="doSetVar"><l>result</l><block s="reportListItem"><l>2</l><l/></block></block></script></block></script><list></list></block><block var="myProperties"/></block></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="$storage set properties" type="command" category="lists"><comment x="0" y="0" w="140.33333433333345" collapsed="false">Sets the default values of the properties of a DataSprite.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>myProperties</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>myMessages</l><block s="reportNewList"><list></list></block></block><custom-block s="$storage set property %txt to %s" scope="local"><l>typeOfData</l><l>empty</l></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>width</l><block s="reportGetImageAttribute"><l><option>width</option></l><l><option>current</option></l></block></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>height</l><block s="reportGetImageAttribute"><l><option>height</option></l><l><option>current</option></l></block></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>minValue</l><l>not set</l></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>maxValue</l><l>not set</l></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>columns</l><l>0</l></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>rows</l><l>0</l></custom-block></script></block></script></block-definition><block-definition s="$storage new clone of DataSprite" type="reporter" category="control"><comment x="0" y="0" w="111.66666666666671" collapsed="false">Creates an empty costume of the specified size and color.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>newSprite</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>newSprite</l><block s="newClone"><l><option>myself</option></l></block></block><block s="doTellTo"><block var="newSprite"/><block s="reifyScript"><script><block s="doSetVar"><l>myData</l><block s="reportNewList"><list></list></block></block><custom-block s="$storage set properties" scope="local"></custom-block><block s="gotoXY"><block s="reportRandom"><l>-100</l><l>-50</l></block><block s="reportRandom"><l>100</l><l>150</l></block></block></script><list></list></block><list></list></block><block s="doReport"><block var="newSprite"/></block></script></block></script></block-definition><block-definition s="$storage write string %&apos;theString&apos; to file %&apos;filename&apos;" type="command" category="operators"><comment x="0" y="0" w="115.146771037182" collapsed="false">Stores a string in a file. JS-code-snippets copied from Snap!-code. </comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>data</l><l>filename</l></list><l>var ide = this.parent.parent;&#xD;if(isString(data)){&#xD;  ide.saveFileAs(data,&#xD;  &apos;text/plain;charset=utf-8&apos;,&#xD;  filename);&#xD;  };</l></block><list><block var="theString"/><block var="filename"/></list></block></script></block-definition><block-definition s="$storage %&apos;n&apos; random points $nl x-range %&apos;xmin&apos; %&apos;xmax&apos; m %&apos;m&apos; b %&apos;b&apos; delta %&apos;delta&apos;" type="reporter" category="lists"><comment x="0" y="0" w="98.21917808219183" collapsed="false">Creates new random data in the specified ranges .swaying by a straight line</comment><header></header><code></code><translations></translations><inputs><input type="%n">10</input><input type="%n">-5</input><input type="%n">5</input><input type="%n">1</input><input type="%n">0</input><input type="%n">2</input></inputs><script><block s="doDeclareVariables"><list><l>new data</l><l>x</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>new data</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block var="n"/><script><block s="doSetVar"><l>x</l><block s="reportSum"><block s="reportProduct"><block s="reportDifference"><block var="xmax"/><block var="xmin"/></block><custom-block s="$storage random" scope="local"></custom-block></block><block var="xmin"/></block></block><block s="doAddToList"><block s="reportNewList"><list><block var="x"/><block s="reportSum"><block s="reportSum"><block s="reportProduct"><block var="m"/><block var="x"/></block><block s="reportProduct"><block var="delta"/><block s="reportDifference"><custom-block s="$storage random" scope="local"></custom-block><l>0.5</l></block></block></block><block var="b"/></block></list></block><block var="new data"/></block></script></block><block s="doReport"><block var="new data"/></block></script></block></script></block-definition><block-definition s="$storage regression line parameters of %&apos;data&apos;" type="reporter" category="operators"><comment x="0" y="0" w="121.66666666666673" collapsed="false">Calculates the parameters of a regression line.</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>meanX</l><l>meanY</l><l>denominator</l><l>numerator</l><l>m</l><l>b</l><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="source"/><l>matrix</l></custom-block><script><block s="doIfElse"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListLength"><block var="source"/></block><l>0</l></block><block s="reportEquals"><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="source"/></block></block><l>2</l></block></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var meanX,meanY,sumX=0,sumY=0,numerator=0,denominator=0,m,b;&#xD;i=1;&#xD;while(i &lt;= data.length()) {&#xD;  sumX=sumX+Number(data.at(i).at(1));&#xD;  sumY=sumY+Number(data.at(i).at(2));&#xD;  i++;&#xD;  }&#xD;meanX=sumX/data.length();&#xD;meanY=sumY/data.length();&#xD;i=1;&#xD;while(i &lt;= data.length()) {&#xD;  numerator=numerator+(data.at(i).at(1)-meanX)*(data.at(i).at(2)-meanY);&#xD;  denominator=denominator+(data.at(i).at(1)-meanX)*(data.at(i).at(1)-meanX);&#xD;  i++;&#xD;  }&#xD;m=numerator/denominator;&#xD;b=meanY-m*meanX;&#xD;return new List([m,b]);     </l></block><list><block var="source"/></list></block></block></script><script><block s="doAddToList"><l>from "regression line": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script><script><block s="doAddToList"><l>from "regression line": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage %&apos;selection&apos; of column %&apos;x&apos; and %&apos;y&apos; of %&apos;table&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Calculates the ranges, the covariance or the correlation between two columns of a table&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">ranges<options>ranges&#xD;covariance&#xD;correlation</options></input><input type="%n">1</input><input type="%n">2</input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="source"/><l>table</l></custom-block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>selection</l><l>table</l><l>x</l><l>y</l></list><l>var xmin,xmax,ymin,ymax,meanx, meany,cov,corr,varx,vary,i,valx,valy;&#xD;if(table.contents.length&lt;1) return "bad data";&#xD;xmin=Number(table.at(1).at(x));&#xD;xmax=xmin;&#xD;ymin=Number(table.at(1).at(y));&#xD;ymax=ymin;&#xD;meanx=xmin; meany=ymin;&#xD;i=2;&#xD;while(i&lt;=table.contents.length){&#xD;  valx=Number(table.at(i).at(x));&#xD;  valy=Number(table.at(i).at(y));&#xD;  if(valx&lt;xmin) xmin=valx;&#xD;  if(valx&gt;xmax) xmax=valx;&#xD;  if(valy&lt;ymin) ymin=valy;&#xD;  if(valy&gt;ymax) ymax=valy;&#xD;  meanx=Number(meanx)+valx;&#xD;  meany=Number(meany)+valy;&#xD;  i++;&#xD;  }&#xD;meanx=meanx/(i-1);&#xD;meany=meany/(i-1);&#xD;if(selection=="ranges")&#xD;  return new List([xmin,xmax,ymin,ymax]);&#xD;&#xD;i=1; cov=0; corr=0; varx=0; vary=0;&#xD;while(i&lt;=table.contents.length){&#xD;  valx=Number(table.at(i).at(x));&#xD;  valy=Number(table.at(i).at(y));&#xD;  cov = Number(cov)+(valx-meanx)*(valy-meany);&#xD;  varx = Number(varx) +(valx-meanx)*(valx-meanx);&#xD;  vary = Number(vary) +(valy-meany)*(valy-meany);&#xD;  i++;&#xD;  }&#xD;varx=Math.sqrt(varx);&#xD;vary=Math.sqrt(vary);&#xD;corr = cov/(varx*vary);&#xD;cov=cov/(i-2);&#xD;if(selection=="covariance")&#xD;  return cov;&#xD;if(selection=="correlation")&#xD;  return corr;&#xD;return "unknown"</l></block><list><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="selection"/><l> </l></block></block><block var="source"/><block var="x"/><block var="y"/></list></block></block></script><script><block s="doAddToList"><l>from "&lt;feature of columns": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block-definition><block-definition s="$storage copy of %&apos;table&apos;" type="reporter" category="lists"><comment x="0" y="0" w="73.33333333333334" collapsed="false">Reports a copy of a table.</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><block s="reportOr"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block><custom-block s="$storage is %s a %s ?" scope="local"><block var="source"/><l>table</l></custom-block></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>function listCopy(item){&#xD;  var theCopy;&#xD;  if(item instanceof List){&#xD;    theCopy = new List();&#xD;    for(var i=1;i&lt;=item.length();i++) theCopy.add(listCopy(item.at(i)));&#xD;    }&#xD;  else theCopy = item;&#xD;  return theCopy;&#xD;  }&#xD;return listCopy(data);</l></block><list><block var="source"/></list></block></block></script><script><block s="doAddToList"><l>from "copy of": only lists supported</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: only lists supported</l></block></script></block></script></block-definition><block-definition s="$storage new %&apos;n&apos; x %&apos;m&apos; table" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Creates a new empty table.</comment><header></header><code></code><translations></translations><inputs><input type="%n">2</input><input type="%n">3</input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>row</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>row</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block var="n"/><script><block s="doAddToList"><l></l><block var="row"/></block></script></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block var="m"/><script><block s="doAddToList"><block var="row"/><block var="result"/></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="$storage %&apos;selection&apos; of %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Determines a property of a list.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">min<options>min&#xD;max&#xD;minpos&#xD;maxpos&#xD;number&#xD;sum&#xD;mean&#xD;median&#xD;variance&#xD;standard-deviation</options></input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>help</l><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="source"/><l>vector</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block var="selection"/><l>median</l></block><script><block s="doSetVar"><l>help</l><l></l></block><block s="doIfElse"><block s="reportEquals"><block s="reportModulus"><block s="reportListLength"><block var="help"/></block><l>2</l></block><l>1</l></block><script><block s="doReport"><block s="reportListItem"><block s="reportRound"><block s="reportQuotient"><block s="reportListLength"><block var="help"/></block><l>2</l></block></block><block var="help"/></block></block></script><script><block s="doReport"><block s="reportQuotient"><block s="reportSum"><block s="reportListItem"><block s="reportDifference"><block s="reportRound"><block s="reportQuotient"><block s="reportListLength"><block var="help"/></block><l>2</l></block></block><l>1</l></block><block var="help"/></block><block s="reportListItem"><block s="reportRound"><block s="reportQuotient"><block s="reportListLength"><block var="help"/></block><l>2</l></block></block><block var="help"/></block></block><l>2</l></block></block></script></block></script><script><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>aList</l></list><l>var min=10000000,max=-min,sum=0,mean,n=0,isNumber,c,minpos=0,maxpos=0;&#xD;if(aList.length()==0) return new List([0,0,0,0,0,0,0]);&#xD;var i=1,k,value;&#xD;while(i &lt;= aList.length()) {&#xD;  value = aList.at(i);&#xD;  if(typeof(value)=="number") isNumber=true;&#xD;  else{&#xD;    if(typeof(value)=="string"){&#xD;      isNumber=true;&#xD;      k=0;&#xD;      while((k&lt;value.length) &amp;&amp; isNumber){&#xD;        c=value.charAt(k);&#xD;        if((c&lt;&apos;0&apos;) || (c&gt;&apos;9&apos;))&#xD;          if((c!=&apos;E&apos;) &amp;&amp; (c!=&apos;e&apos;) &amp;&amp; (c!=&apos;+&apos;) &amp;&amp; (c!=&apos;-&apos;)&amp;&amp; (c!=&apos;.&apos;) &amp;&amp; (c!=&apos;,&apos;))&#xD;            isNumber=false;&#xD;        k++;&#xD;        }&#xD;       }&#xD;     else isNumber=false;&#xD;     }&#xD;  if(isNumber){&#xD;    value=Number(value);&#xD;    if(min&gt;value) {min=value; minpos=i;}&#xD;    if(max&lt;value) {max=value; maxpos=i;}&#xD;    sum=Number(sum)+Number(value);&#xD;    n++;&#xD;    }&#xD;  i++;&#xD;  }&#xD;if(n&gt;0) mean=sum/n; else mean=NaN;&#xD;return new List([min,max,n,sum,mean,minpos,maxpos]);     </l></block><list><block var="source"/></list></block></block><block s="doSetVar"><l>selection</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="selection"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>min</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>max</l></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>number</l></block><script><block s="doReport"><block s="reportListItem"><l>3</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>sum</l></block><script><block s="doReport"><block s="reportListItem"><l>4</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>mean</l></block><script><block s="doReport"><block s="reportListItem"><l>5</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>minpos</l></block><script><block s="doReport"><block s="reportListItem"><l>6</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>maxpos</l></block><script><block s="doReport"><block s="reportListItem"><l>7</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportOr"><block s="reportEquals"><block var="selection"/><l>variance</l></block><block s="reportEquals"><block var="selection"/><l>standard-deviation</l></block></block><script><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>aList</l><l>mean</l></list><l>if(aList.length()==0) return 0;&#xD;var n=0,isNumber,c,variance=0;&#xD;var i=1,k,value;&#xD;while(i&lt;= aList.contents.length) {&#xD;  value = aList.at(i);&#xD;  if(typeof(value)=="number") isNumber=true;&#xD;  else{&#xD;    if(typeof(value)=="string"){&#xD;      isNumber=true;&#xD;      k=0;&#xD;      while((k&lt;value.length) &amp;&amp; isNumber){&#xD;        c=value.charAt(k);&#xD;        if((c&lt;&apos;0&apos;) || (c&gt;&apos;9&apos;))&#xD;          if((c!=&apos;E&apos;) &amp;&amp; (c!=&apos;e&apos;) &amp;&amp; (c!=&apos;+&apos;) &amp;&amp; (c!=&apos;-&apos;)&amp;&amp; (c!=&apos;.&apos;) &amp;&amp; (c!=&apos;,&apos;))&#xD;            isNumber=false;&#xD;        k++;&#xD;        }&#xD;       }&#xD;     else isNumber=false;&#xD;     }&#xD;  if(isNumber){&#xD;    value=Number(value);&#xD;    variance = Number(variance) +(Number(value)-Number(mean))*(Number(value)-Number(mean));&#xD;    n++;&#xD;    }&#xD;  i++;&#xD;  }&#xD;if(n&gt;0) variance=variance/n; else variance=NaN;&#xD;return variance;     </l></block><list><block var="source"/><block s="reportListItem"><l>5</l><block var="result"/></block></list></block></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>variance</l></block><script><block s="doReport"><block var="result"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>standard-deviation</l></block><script><block s="doReport"><block s="reportMonadic"><l><option>sqrt</option></l><block var="result"/></block></block></script></block></script></block><block s="doAddToList"><l>from "&lt;feature&gt; of": unknown option</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: unknown option</l></block></script></block></script><script><block s="doAddToList"><l>from "&lt;feature&gt; of": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage sort %&apos;table&apos; by column %&apos;n&apos; ascending %&apos;ascending&apos;" type="reporter" category="lists"><comment x="0" y="0" w="115.296803652968" collapsed="false">Sorts a list, JS-code-snippets copied from Snap!-code.</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%n">1</input><input type="%b">true</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><block s="reportOr"><custom-block s="$storage is %s a %s ?" scope="local"><block var="source"/><l>table</l></custom-block><block s="reportIsA"><block var="source"/><l><option>list</option></l></block></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="source"/></block><l><option>list</option></l></block><script><block s="doIfElse"><block var="ascending"/><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="source"/><block s="reifyPredicate"><autolambda><block s="reportLessThan"><block s="reportListItem"><block var="n"/><l/></block><block s="reportListItem"><block var="n"/><l/></block></block></autolambda><list></list></block></list></block></block></script><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="source"/><block s="reifyPredicate"><autolambda><block s="reportGreaterThan"><block s="reportListItem"><block var="n"/><l/></block><block s="reportListItem"><block var="n"/><l/></block></block></autolambda><list></list></block></list></block></block></script></block></script><script><block s="doIfElse"><block var="ascending"/><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="source"/><block s="reifyPredicate"><autolambda><block s="reportLessThan"><l></l><l></l></block></autolambda><list></list></block></list></block></block></script><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="source"/><block s="reifyPredicate"><autolambda><block s="reportGreaterThan"><l></l><l></l></block></autolambda><list></list></block></list></block></block></script></block></script></block></script><script><block s="doAddToList"><l>from "sort": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage select rows of %&apos;table&apos; where $nl column %&apos;n&apos; is %&apos;op&apos; %&apos;value&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Determines the rows of a table with certain properties.</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%n">1</input><input type="%s" readonly="true">less-than<options>less-than&#xD;greater-than&#xD;equal-to&#xD;different-from</options></input><input type="%s">123</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="source"/><l>table</l></custom-block><script><block s="doSetVar"><l>op</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="op"/><l><option>whitespace</option></l></block></block></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>less-than</l></block><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportLessThan"><block s="reportListItem"><block var="n"/><l/></block><block var="value"/></block></autolambda><list></list></block><block var="source"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>greater-than</l></block><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportGreaterThan"><block s="reportListItem"><block var="n"/><l/></block><block var="value"/></block></autolambda><list></list></block><block var="source"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>equal-to</l></block><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><block var="n"/><l/></block><block var="value"/></block></autolambda><list></list></block><block var="source"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>different-from</l></block><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><block var="n"/><l/></block><block var="value"/></block></block></autolambda><list></list></block><block var="source"/></block></block></script></block></script><script><block s="doAddToList"><l>from "select rows": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage %&apos;selection&apos; of column %&apos;k&apos; of %&apos;table&apos; $nl grouped by column %&apos;n&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Determines group properties.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">mean<options>min&#xD;max&#xD;number&#xD;sum&#xD;mean</options></input><input type="%n">2</input><input type="%s">myData</input><input type="%n">1</input></inputs><script><block s="doDeclareVariables"><list><l>copy</l><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="source"/><l>table</l></custom-block><script><block s="doSetVar"><l>selection</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="selection"/><l> </l></block></block></block><block s="doSetVar"><l>copy</l><custom-block s="$storage sort %s by column %n ascending %b" scope="local"><block var="source"/><block var="n"/><l><bool>true</bool></l></custom-block></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>aTable</l><l>compaircolumn</l><l>operation</l><l>groupcolumn</l></list><l>var min,max,sum,mean,n,result,i,value,oldgroup,newgroup,stored=false;&#xD;&#xD;function isNumber(val){&#xD;  var ok,k,c;&#xD;  if(typeof(val)=="number") ok=true;&#xD;  else{&#xD;    if(typeof(val)=="string"){&#xD;      ok=true; k=0;&#xD;      while((k&lt;val.length) &amp;&amp; ok){&#xD;        c=val.charAt(k);&#xD;        if((c&lt;&apos;0&apos;) || (c&gt;&apos;9&apos;))&#xD;          if((c!=&apos;E&apos;) &amp;&amp; (c!=&apos;e&apos;) &amp;&amp; (c!=&apos;+&apos;) &amp;&amp; (c!=&apos;-&apos;)&amp;&amp; (c!=&apos;.&apos;) &amp;&amp; (c!=&apos;,&apos;)) ok=false;&#xD;        k++;&#xD;        }&#xD;       }&#xD;     else ok=false;&#xD;     }&#xD;  return ok;&#xD;  }&#xD;&#xD;result=new List();&#xD;result.add(new List([&apos;value&apos;,operation]));&#xD;if(aTable.contents.length==0) return result;&#xD;&#xD;newgroup=aTable.at(1).at(groupcolumn);&#xD;if(isNumber(newgroup)) newgroup=Number(newgroup);&#xD;oldgroup=newgroup;&#xD;value = aTable.at(1).at(compaircolumn);&#xD;if(isNumber(value)){value=Number(value); sum=value;} else sum="-";&#xD;min=value; max=value; n=1;&#xD;i=2;&#xD;while(i&lt;=aTable.length()){&#xD;  stored=false;&#xD;  newgroup=aTable.at(i).at(groupcolumn);&#xD;  if(isNumber(newgroup)) newgroup=Number(newgroup);&#xD;  value=aTable.at(i).at(compaircolumn);&#xD;  if(isNumber(value)) value=Number(value);&#xD;  if(isNumber(newgroup)) newgroup=Number(newgroup);&#xD;  if(newgroup==oldgroup){&#xD;    if(min&gt;value) min=value; &#xD;    if(max&lt;value) max=value; &#xD;    if(isNumber(value)&amp;&amp;isNumber(sum)) sum=Number(sum)+Number(value); else sum="-";&#xD;    n++;&#xD;    }&#xD;   else{&#xD;     if(operation==&apos;min&apos;) result.add(new List([oldgroup,min]));&#xD;     if(operation==&apos;max&apos;) result.add(new List([oldgroup,max]));&#xD;     if(operation==&apos;number&apos;) result.add(new List([oldgroup,n]));&#xD;     if(operation==&apos;sum&apos;) result.add(new List([oldgroup,sum]));&#xD;     if(operation==&apos;mean&apos;) &#xD;       if(isNumber(sum)) result.add(new List([oldgroup,1.0*sum/n]));&#xD;       else result.add(new List([oldgroup,"-"]));&#xD;     min=value; max=value; &#xD;     if(isNumber(value)) sum=value; else sum="-";&#xD;     n=1;&#xD;     oldgroup=newgroup;&#xD;     stored=true;&#xD;     }&#xD;  i++;&#xD;  }&#xD;if(!stored){&#xD;     if(operation==&apos;min&apos;) result.add(new List([oldgroup,min]));&#xD;     if(operation==&apos;max&apos;) result.add(new List([oldgroup,max]));&#xD;     if(operation==&apos;number&apos;) result.add(new List([oldgroup,n]));&#xD;     if(operation==&apos;sum&apos;) result.add(new List([oldgroup,sum]));&#xD;     if(operation==&apos;mean&apos;) &#xD;       if(isNumber(sum)) result.add(new List([oldgroup,1.0*sum/n]));&#xD;       else result.add(new List([oldgroup,"-"]));&#xD;  }&#xD;return result; </l></block><list><block var="copy"/><block var="k"/><block var="selection"/><block var="n"/></list></block></block></script><script><block s="doAddToList"><l>from "&lt;feature&gt; of grouped by": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage write %&apos;data&apos; to CSV file %&apos;filename&apos;" type="command" category="lists"><comment x="0" y="0" w="284.7945205479452" collapsed="false">Stores a list in a CSV file, JS-code copied from Snap!-code</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block><script><block s="doRun"><block s="reportJSFunction"><list><l>data</l><l>filename</l></list><l>function toCSV(data){&#xD;  var items=data.itemsArray(),rows = [];&#xD;    &#xD;    function encodeCell(atomicValue) {&#xD;        var string = atomicValue.toString(),cell;&#xD;        if (string.indexOf(&apos;\"&apos;) ===  -1 &amp;&amp;&#xD;                (string.indexOf(&apos;\n&apos;) === -1) &amp;&amp;&#xD;                (string.indexOf(&apos;\,&apos;) === -1)) {&#xD;            return string;&#xD;        }&#xD;        cell = [&apos;\"&apos;];&#xD;        string.split(&apos;&apos;).forEach(function (letter) {cell.push(letter);&#xD;            if (letter === &apos;\"&apos;) {cell.push(letter);}&#xD;        });&#xD;        cell.push(&apos;\"&apos;);&#xD;        return cell.join(&apos;&apos;);&#xD;   }&#xD;&#xD;  if (items.some(function (any) {return any instanceof List; })) {&#xD;     items.forEach(function (item) {&#xD;       if (item instanceof List) {&#xD;         rows.push(item.itemsArray().map(encodeCell).join(&apos;,&apos;));&#xD;       } else {rows.push(encodeCell(item));}&#xD;      });&#xD;    return rows.join(&apos;\n&apos;);&#xD;  }&#xD;  return items.map(encodeCell).join(&apos;,&apos;);&#xD;}&#xD;&#xD;var ide = this.parent.parent;&#xD;ide.saveFileAs(toCSV(data),&apos;text/csv;charset=utf-8&apos;,filename);</l></block><list><block var="source"/><block var="filename"/></list></block></script><script><block s="doAddToList"><l>from "write to CSV file": wrong data format</l><block var="myMessages"/></block></script></block></script></block-definition><block-definition s="$storage read file with filepicker" type="reporter" category="lists"><comment x="0" y="0" w="291.3698630136987" collapsed="false">Loads the contents of a file, JS-code copied from Snap!-code</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>ready</l></list></block><block s="doSetVar"><l>ready</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var inp = document.createElement(&apos;input&apos;), ide = this.parent.parent, result=0, done=false;&#xD;&#xD;  function userImport() {&#xD;&#xD;        function txtOnlyMsg(ftype, anyway) {&#xD;            ide.confirm(&#xD;                localize(&#xD;                    &apos;Snap! can only import "text" files.\n&apos; +&#xD;                        &apos;You selected a file of type "&apos; +&#xD;                        ftype +&#xD;                        &apos;".&apos;&#xD;                ) + &apos;\n\n&apos; + localize(&apos;Open anyway?&apos;),&#xD;                &apos;Unable to import&apos;,&#xD;                anyway // callback&#xD;            );&#xD;        }&#xD;&#xD;        function readText(aFile) {&#xD;            var frd = new FileReader(),&#xD;                ext = aFile.name.split(&apos;.&apos;).pop().toLowerCase();&#xD;&#xD;            function isTextFile(aFile) {&#xD;                // special cases for Windows&#xD;                // check the file extension for text-like-ness&#xD;                return aFile.type.indexOf(&apos;text&apos;) !== -1 ||&#xD;                    contains([&apos;txt&apos;, &apos;csv&apos;, &apos;xml&apos;, &apos;json&apos;, &apos;tsv&apos;], ext);&#xD;            }&#xD;&#xD;            function isType(aFile, string) {&#xD;                return aFile.type.indexOf(string) !== -1 || (ext === string);&#xD;            }&#xD;&#xD;            frd.onloadend = function (e) {&#xD;                done=true;&#xD;                if (isType(aFile, &apos;csv&apos;)) {result=Process.prototype.parseCSV(e.target.result);}&#xD;                else if (isType(aFile, &apos;json&apos;)) { result=Process.prototype.parseJSON(e.target.result);}&#xD;                     else { result=e.target.result;}&#xD;            };&#xD;&#xD;            if (isTextFile(aFile)) {&#xD;                frd.readAsText(aFile);&#xD;            } else {&#xD;               txtOnlyMsg(&#xD;                    aFile.type,&#xD;                    function () {frd.readAsText(aFile); }&#xD;                );&#xD;            }&#xD;        }&#xD;&#xD;        document.body.removeChild(inp);&#xD;        ide.filePicker = null;&#xD;        if (inp.files.length &gt; 0) {&#xD;            readText(inp.files[inp.files.length - 1]);&#xD;        }&#xD;    }&#xD;&#xD;    if (ide.filePicker) {&#xD;        document.body.removeChild(ide.filePicker);&#xD;        ide.filePicker = null;&#xD;    }&#xD;    inp.type = &apos;file&apos;;&#xD;    inp.style.color = "transparent";&#xD;    inp.style.backgroundColor = "transparent";&#xD;    inp.style.border = "none";&#xD;    inp.style.outline = "none";&#xD;    inp.style.position = "absolute";&#xD;    inp.style.top = "0px";&#xD;    inp.style.left = "0px";&#xD;    inp.style.width = "0px";&#xD;    inp.style.height = "0px";&#xD;    inp.style.display = "none";&#xD;    inp.addEventListener(&#xD;        "change",&#xD;        userImport,&#xD;        false&#xD;    );&#xD;    document.body.appendChild(inp);&#xD;    ide.filePicker = inp;&#xD;    inp.click();&#xD;return function(){return new List([done,result]);};</l></block><list></list></block></block><block s="doWaitUntil"><block s="reportListItem"><l>1</l><block s="evaluate"><block var="ready"/><list></list></block></block></block><block s="doReport"><block s="reportListItem"><l>2</l><block s="evaluate"><block var="ready"/><list></list></block></block></block></script></block-definition><block-definition s="$storage normalize %&apos;data&apos; by %&apos;choice&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Normalizes a table by dividing it by the specified value.</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%s" readonly="true">mean<options>mean&#xD;max&#xD;number&#xD;sum&#xD;median&#xD;softmax</options></input></inputs><script><block s="doDeclareVariables"><list><l>divisor</l><l>source</l><l>n</l><l>sum</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="source"/><l>vector</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block var="choice"/><l>mean</l></block><script><block s="doSetVar"><l>divisor</l><custom-block s="$storage %s of %s" scope="local"><l>mean</l><block var="source"/></custom-block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="choice"/><l>max</l></block><script><block s="doSetVar"><l>divisor</l><custom-block s="$storage %s of %s" scope="local"><l>max</l><block var="source"/></custom-block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="choice"/><l>number</l></block><script><block s="doSetVar"><l>divisor</l><custom-block s="$storage %s of %s" scope="local"><l>number</l><block var="source"/></custom-block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="choice"/><l>sum</l></block><script><block s="doSetVar"><l>divisor</l><custom-block s="$storage %s of %s" scope="local"><l>sum</l><block var="source"/></custom-block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="choice"/><l>median</l></block><script><block s="doSetVar"><l>divisor</l><custom-block s="$storage %s of %s" scope="local"><l>median</l><block var="source"/></custom-block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="choice"/><l>softmax</l></block><script><block s="doSetVar"><l>n</l><block s="reportListLength"><block var="source"/></block></block><block s="doSetVar"><l>sum</l><l>0</l></block><block s="doFor"><l>i</l><l>1</l><block var="n"/><script><block s="doChangeVar"><l>sum</l><block s="reportMonadic"><l><option>e^</option></l><block s="reportListItem"><block var="i"/><block var="source"/></block></block></block></script></block><block s="doReport"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportQuotient"><block s="reportMonadic"><l><option>e^</option></l><l></l></block><block var="sum"/></block></autolambda><list></list></block><block var="source"/></block></block></script><script><block s="doIfElse"><block s="reportIsA"><block var="choice"/><l><option>number</option></l></block><script><block s="doSetVar"><l>divisor</l><block var="choice"/></block></script><script><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block></script></block></script></block></script></block></script></block></script></block><block s="doIfElse"><block s="reportNot"><block s="reportEquals"><block var="divisor"/><l>0</l></block></block><script><block s="doReport"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportQuotient"><l></l><block var="divisor"/></block></autolambda><list></list></block><block var="source"/></block></block></script><script><block s="doAddToList"><l>from "normalize": divisor is 0</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: divisor is 0</l></block></script></block></script><script><block s="doAddToList"><l>from "normalize": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage delete %&apos;choice&apos; %&apos;n&apos; of %&apos;table&apos;" type="command" category="lists"><comment x="0" y="0" w="85" collapsed="false">Deletes a row or column of a table.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">row<options>row&#xD;column</options></input><input type="%n">1</input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>target</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>target</l><block var="myData"/></block></script><script><block s="doSetVar"><l>target</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="target"/><l>table</l></custom-block><script><block s="doIf"><block s="reportEquals"><block var="choice"/><l>row</l></block><script><block s="doDeleteFromList"><block var="n"/><block var="target"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>column</l></block><script><block s="doIf"><block s="reportGreaterThan"><block s="reportListLength"><block var="target"/></block><l>0</l></block><script><block s="doIfElse"><block s="reportAnd"><block s="reportEquals"><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="target"/></block></block><l>1</l></block><block s="reportEquals"><block var="n"/><l>1</l></block></block><script><block s="doDeleteFromList"><l><option>all</option></l><block var="target"/></block></script><script><block s="doRun"><block s="reportJSFunction"><list><l>data</l><l>n</l></list><l>for(var i=1;i&lt;=data.length();i++)&#xD;   data.put(data.at(i).remove(n));</l></block><list><block var="target"/><block var="n"/></list></block></script></block></script></block></script></block></script><script><block s="doAddToList"><l>from "delete": only data in tables are deleteable</l><block var="myMessages"/></block></script></block></script></block></script></block-definition><block-definition s="$storage add %&apos;choice&apos; %&apos;newContent&apos; to %&apos;table&apos;" type="command" category="lists"><comment x="0" y="0" w="90" collapsed="false">Adds a row, a column, or  column headers to a table.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">row<options>row&#xD;column&#xD;column-headers</options></input><input type="%s"></input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>tablewidth</l><l>item</l><l>target</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>target</l><block var="myData"/></block></script><script><block s="doSetVar"><l>target</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="target"/><l>table</l></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>data</l><l>newContent</l><l>choice</l></list><l>var tablewidth,item;&#xD;&#xD;if(choice=="row"){&#xD;  if(data.length()==0) &#xD;    if(newContent instanceof List) data.add(newContent);&#xD;    else data.add(new List([newContent]));&#xD;  else{&#xD;    tablewidth=data.at(1).length();&#xD;    if(newContent instanceof List){&#xD;      item=new List();&#xD;      for(var i=1;i&lt;=tablewidth;i++)&#xD;        if(i&gt;newContent.length()) item.add("");&#xD;        else item.add(newContent.at(i));&#xD;      data.add(item);&#xD;      }&#xD;    else{&#xD;      item=new List([newContent]);&#xD;      for(var i=1;i&lt;tablewidth;i++) item.add("");&#xD;      data.add(item);&#xD;      }&#xD;    }&#xD;  }  &#xD;&#xD;if(choice=="column"){&#xD;  if(!(newContent instanceof List)) newContent = new List([newContent]);&#xD;  if(data.length()==0)&#xD;    for(var i=1;i&lt;=newContent.length();i++) data.add(new List([newContent.at(i)]));&#xD;  else for(var i=1; i&lt;= data.length();i++)&#xD;         if(i&gt;newContent.length()) data.at(i).add("");&#xD;         else data.at(i).add(newContent.at(i));&#xD;&#xD;  }&#xD;&#xD;if(choice=="column-headers"){&#xD;  if(data.length()==0) &#xD;    if(newContent instanceof List) data.add(newContent);&#xD;    else data.add(new List([newContent]));&#xD;  else{&#xD;    tablewidth=data.at(1).length();&#xD;    if(newContent instanceof List){&#xD;      item=new List();&#xD;      for(var i=1;i&lt;=tablewidth;i++)&#xD;        if(i&gt;newContent.length()) item.add("");&#xD;        else item.add(newContent.at(i));&#xD;      }&#xD;    else{&#xD;      item=new List([newContent]);&#xD;      for(var i=1;i&lt;tablewidth;i++) item.add("");&#xD;      }&#xD;    data.add(item,1);&#xD;    }&#xD;  }</l></block><list><block var="target"/><block var="newContent"/><block var="choice"/></list></block></script><script><block s="doAddToList"><l>from "add": only tables are expandable</l><block var="myMessages"/></block></script></block></script></block></script></block-definition><block-definition s="$storage %&apos;choice&apos; %&apos;n&apos; of %&apos;table&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Reports a row or column of a table.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">row<options>row&#xD;column</options></input><input type="%n">1</input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="source"/><l>table</l></custom-block><script><block s="doIf"><block s="reportEquals"><block var="choice"/><l>row</l></block><script><block s="doReport"><custom-block s="$storage copy of %s" scope="local"><block s="reportListItem"><block var="n"/><block var="source"/></block></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>column</l></block><script><block s="doReport"><block s="reportAtomicMap"><block s="reifyReporter"><script><block s="doReport"><block s="reportListItem"><block var="n"/><l/></block></block></script><list></list></block><block var="source"/></block></block></script></block></script><script><block s="doAddToList"><l>from "&lt;row&gt; of": impossible operation</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: impossible</l></block></script></block></script></block></script></block-definition><block-definition s="$storage %&apos;n&apos; random points near %&apos;f&apos; $nl between %&apos;xmin&apos; and %&apos;xmax&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Generates a list of points &quot;near&quot; a given graph.</comment><header></header><code></code><translations></translations><inputs><input type="%n">20</input><input type="%s"></input><input type="%n">-5</input><input type="%n">5</input></inputs><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>data</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>data</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block var="n"/><script><block s="doSetVar"><l>x</l><block s="reportSum"><block s="reportProduct"><block s="reportDifference"><block var="xmax"/><block var="xmin"/></block><custom-block s="$storage random" scope="local"></custom-block></block><block var="xmin"/></block></block><block s="doSetVar"><l>y</l><block s="evaluate"><block s="reportJSFunction"><list><l>f</l><l>x</l><l>proc</l></list><l>return proc.reportAtomicMap(f,new List([x])).at(1); //copied from Snap!-code</l></block><list><block var="f"/><block var="x"/></list></block></block><block s="doAddToList"><block s="reportNewList"><list><block var="x"/><block s="reportSum"><block var="y"/><block s="reportProduct"><block s="reportDifference"><custom-block s="$storage random" scope="local"></custom-block><l>0.5</l></block><block var="y"/></block></block></list></block><block var="data"/></block></script></block><block s="doReport"><block var="data"/></block></script></block></script></block-definition><block-definition s="$storage element %&apos;x&apos; %&apos;y&apos; of %&apos;table&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Reports the element a position x|y of a table.</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="source"/><l>table</l></custom-block><script><block s="doIfElse"><block s="reportAnd"><block s="reportLessThan"><block var="y"/><block s="reportSum"><block s="reportListLength"><block var="source"/></block><l>1</l></block></block><block s="reportLessThan"><block var="x"/><block s="reportSum"><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="source"/></block></block><l>1</l></block></block></block><script><block s="doReport"><block s="reportListItem"><block var="x"/><block s="reportListItem"><block var="y"/><block var="source"/></block></block></block></script><script><block s="doAddToList"><l>from "element of": impossible operation</l><block var="myMessages"/></block><block s="doReport"><l>impossible</l></block></script></block></script><script><block s="doAddToList"><l>from "element of": impossible operation</l><block var="myMessages"/></block><block s="doReport"><l>impossible</l></block></script></block></script></block></script></block-definition><block-definition s="$storage set element %&apos;x&apos; %&apos;y&apos; of %&apos;table&apos; to %&apos;value&apos;" type="command" category="lists"><comment x="0" y="0" w="90" collapsed="false">Replaces the value at x|y of a table.</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input><input type="%s">myData</input><input type="%s">33</input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="source"/><l>table</l></custom-block><script><block s="doIfElse"><block s="reportAnd"><block s="reportLessThan"><block var="y"/><block s="reportSum"><block s="reportListLength"><block var="source"/></block><l>1</l></block></block><block s="reportLessThan"><block var="x"/><block s="reportSum"><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="source"/></block></block><l>1</l></block></block></block><script><block s="doReplaceInList"><block var="x"/><block s="reportListItem"><block var="y"/><block var="source"/></block><block var="value"/></block></script><script><block s="doAddToList"><l>from "set element of":impossible operation</l><block var="myMessages"/></block></script></block></script><script><block s="doAddToList"><l>from "set element of":impossible operation</l><block var="myMessages"/></block></script></block></script></block-definition><block-definition s="$storage %&apos;k&apos; next neighbors of %&apos;point&apos; in %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="163.57142857142856" collapsed="false">Determines the next k neighbours of a point in data. The class of the point must be in column 3.</comment><header></header><code></code><translations></translations><inputs><input type="%n">5</input><input type="%l"></input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>neighbors</l><l>points</l><l>result</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>points</l><block var="myData"/></block></script><script><block s="doSetVar"><l>points</l><block var="data"/></block></script></block><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="points"/><l>table</l></custom-block><script><block s="doSetVar"><l>neighbors</l><custom-block s="$storage sort %s by column %n ascending %b" scope="local"><block s="evaluate"><block s="reportJSFunction"><list><l>point</l><l>points</l></list><l>var neighbors=new List();&#xD;for(i=1;i&lt;=points.length();i++){&#xD;  neighbors.add(new List([Math.sqrt((point.at(1)-points.at(i).at(1))*(point.at(1)-points.at(i).at(1))+(point.at(2)-points.at(i).at(2))*(point.at(2)-points.at(i).at(2))),points.at(i).at(3)]));&#xD;  }&#xD;return neighbors;</l></block><list><block var="point"/><block var="points"/></list></block><l>1</l><l><bool>true</bool></l></custom-block></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block s="reportListLength"><block var="result"/></block><block var="k"/></block><block s="reportEquals"><block s="reportListLength"><block var="neighbors"/></block><l>0</l></block></block><script><block s="doAddToList"><block s="reportListItem"><l>1</l><block var="neighbors"/></block><block var="result"/></block><block s="doDeleteFromList"><l>1</l><block var="neighbors"/></block></script></block><block s="doReport"><block var="result"/></block></script><script><block s="doAddToList"><l>from "next neighbours": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$storage %&apos;typeOfPooling&apos; pooling of %&apos;data&apos; with stride %&apos;stride&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Pooling operation with matrices, images and vectors.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">max<options>max&#xD;mean</options></input><input type="%s">myData</input><input type="%n">2</input></inputs><script><block s="doDeclareVariables"><list><l>source</l><l>typeOfData</l><l>width</l><l>height</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block><block s="doSetVar"><l>typeOfData</l><custom-block s="$storage property %txt" scope="local"><l>typeOfData</l></custom-block></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="data"/><l>vector</l></custom-block><script><block s="doSetVar"><l>source</l><block var="data"/></block><block s="doSetVar"><l>typeOfData</l><l>vector</l></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="data"/><l>matrix</l></custom-block><script><block s="doSetVar"><l>source</l><block var="data"/></block><block s="doSetVar"><l>typeOfData</l><l>matrix</l></block></script><script><block s="doAddToList"><l>from "pooling of": only defined for matrices, images, and vectors</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: only defined for matrices, images, and vectors.</l></block></script></block></script></block></script></block><block s="doSetVar"><l>typeOfPooling</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="typeOfPooling"/><l> </l></block></block></block><block s="doIfElse"><block s="reportOr"><block s="reportOr"><block s="reportEquals"><block var="typeOfData"/><l>matrix</l></block><block s="reportEquals"><block var="typeOfData"/><l>vector</l></block></block><block s="reportOr"><block s="reportEquals"><block var="typeOfData"/><l>FITS</l></block><block s="reportEquals"><block var="typeOfData"/><l>RGB</l></block></block></block><script><block s="doIf"><block s="reportOr"><block s="reportEquals"><block var="typeOfData"/><l>FITS</l></block><block s="reportEquals"><block var="typeOfData"/><l>RGB</l></block></block><script><block s="doSetVar"><l>width</l><custom-block s="$storage property %txt" scope="local"><l>width</l></custom-block></block><block s="doSetVar"><l>height</l><custom-block s="$storage property %txt" scope="local"><l>height</l></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><block var="typeOfData"/><l>matrix</l></block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListLength"><block var="source"/></block><l>0</l></block><script><block s="doAddToList"><l>from "pooling of": no data found</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: no data found</l></block></script><script><block s="doSetVar"><l>width</l><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="source"/></block></block></block><block s="doSetVar"><l>height</l><block s="reportListLength"><block var="source"/></block></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="typeOfData"/><l>vector</l></block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListLength"><block var="source"/></block><l>0</l></block><script><block s="doAddToList"><l>from "pooling of": no data found</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: no data found</l></block></script><script><block s="doSetVar"><l>width</l><block s="reportListLength"><block var="source"/></block></block><block s="doSetVar"><l>height</l><l>1</l></block></script></block></script></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>width</l><l>height</l><l>typeOfPooling</l><l>stride</l><l>typeOfData</l></list><l>function getValue(x,y){return data.at((y-1)*width+x);}&#xD;&#xD;var result=[],y,x,max,sum,mean,n,value,row;&#xD;width=Number(width);&#xD;height=Number(height);&#xD;stride=Number(stride);&#xD;result.push(Math.ceil(1.0*width/stride));&#xD;result.push(Math.ceil(1.0*height/stride));&#xD;&#xD;if(typeOfData=="FITS"){&#xD;  y=1;&#xD;  while(y&lt;=height){&#xD;    x=1;&#xD;    while(x&lt;=width){&#xD;      max=0; mean=0;n=0;sum=0;&#xD;      for(var i=0;i&lt;stride;i++){&#xD;        for(var j=0;j&lt;stride;j++){&#xD;          if(((x+i)&lt;=width)&amp;&amp;((y+j)&lt;=height)){&#xD;            n++;&#xD;            value=Number(getValue(x+i,y+j));&#xD;            sum=sum+value;&#xD;            if(value&gt;max) max=value;&#xD;            }&#xD;          }&#xD;        }&#xD;      if(n&gt;0) mean=1.0*sum/n;&#xD;      if(typeOfPooling=="max") result.push(max); else result.push(mean);&#xD;      x=x+stride;      &#xD;      }&#xD;    y=y+stride;&#xD;    }&#xD;  }&#xD;&#xD;if(typeOfData=="RGB"){&#xD;  y=1;&#xD;  while(y&lt;=height){&#xD;    x=1;&#xD;    while(x&lt;=width){&#xD;      max=[0,0,0,0]; mean=[0,0,0,0];n=0;sum=[0,0,0,0];&#xD;      for(var i=0;i&lt;stride;i++){&#xD;        for(var j=0;j&lt;stride;j++){&#xD;          if(((x+i)&lt;=width)&amp;&amp;((y+j)&lt;=height)){&#xD;            n++;&#xD;            value=getValue(x+i,y+j);&#xD;            for(k=0;k&lt;4;k++){&#xD;              sum[k]=sum[k]+Number(value.at(k+1));&#xD;              if(value.at(k+1)&gt;max[k]) max[k]=value.at(k+1);&#xD;              }&#xD;            }&#xD;          }&#xD;        }&#xD;      if(n&gt;0) for(k=0;k&lt;4;k++) mean[k]=1.0*sum[k]/n;&#xD;      if(typeOfPooling=="max") result.push(new List(max)); else result.push(new List(mean));&#xD;      x=x+stride;      &#xD;      }&#xD;    y=y+stride;&#xD;    }&#xD;  }&#xD;&#xD;if(typeOfData=="matrix"){&#xD;  y=1;&#xD;  while(y&lt;=height){&#xD;    x=1;&#xD;    row = new List();&#xD;    while(x&lt;=width){&#xD;      max=data.at(y).at(x); mean=0;n=0;sum=0;&#xD;      for(var i=0;i&lt;stride;i++){&#xD;        for(var j=0;j&lt;stride;j++){&#xD;          if(((x+i)&lt;=width)&amp;&amp;((y+j)&lt;=height)){&#xD;            n++;&#xD;            value=Number(data.at(y+j).at(x+i));&#xD;            sum=sum+value;&#xD;            if(value&gt;max) max=value;&#xD;            }&#xD;          }&#xD;        }&#xD;      if(n&gt;0) mean=1.0*sum/n;&#xD;      if(typeOfPooling=="max") row.add(max); else row.add(mean);&#xD;      x=x+stride;      &#xD;      }&#xD;    result.push(row);&#xD;    y=y+stride;&#xD;    }&#xD;  }&#xD;&#xD;if(typeOfData=="vector"){&#xD;  x=1;&#xD;  while(x&lt;=width){&#xD;    max=data.at(x); mean=0;n=0;sum=0;&#xD;    for(var i=0;i&lt;stride;i++){&#xD;      if((x+i)&lt;=width){&#xD;        n++;&#xD;        value=Number(data.at(x+i));&#xD;        sum=sum+value;&#xD;        if(value&gt;max) max=value;&#xD;        }&#xD;      }&#xD;    if(n&gt;0) mean=1.0*sum/n;&#xD;    if(typeOfPooling=="max") result.push(max); else result.push(mean);&#xD;    x=x+stride;      &#xD;    }&#xD;  }&#xD;&#xD;return new List(result);</l></block><list><block var="source"/><block var="width"/><block var="height"/><block var="typeOfPooling"/><block var="stride"/><block var="typeOfData"/></list></block></block></script><script><block s="doAddToList"><l>from "pooling of": only defined for matrices, images, and vectors</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: only defined for images, tables, and lists</l></block></script></block></script></block></script></block-definition><block-definition s="$storage is %&apos;data&apos; a %&apos;choice&apos; ?" type="predicate" category="operators"><comment x="0" y="0" w="76.99708769280555" collapsed="false">Test whether data is a table.</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%s" readonly="true">table<options>vector&#xD;matrix&#xD;table</options></input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><block s="reportNot"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doIf"><block s="reportEquals"><block var="choice"/><l>vector</l></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="source"/></block><l><option>list</option></l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var result=true;&#xD;i=1;&#xD;while(result &amp;&amp; (i&lt;=data.length()))&#xD;{&#xD;  row=data.at(i);&#xD;  if(!(row instanceof List)) result=false;&#xD;  else if(row.length()!=1) result=false;&#xD;       else if(Number.isNaN(row.at(1))) result=false;&#xD;  i++;&#xD;}&#xD;return result;&#xD;</l></block><list><block var="source"/></list></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportIsA"><l></l><l><option>number</option></l></block></block></autolambda><list></list></block><block var="source"/></block><block s="reportBoolean"><l><bool>false</bool></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>matrix</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var result=true,row,i,j,width;&#xD;i=1;&#xD;while(result &amp;&amp; (i&lt;=data.length()))&#xD;{&#xD;  row=data.at(i);&#xD;  if(!(row instanceof List)) result=false;&#xD;  else&#xD;  {&#xD;    if(i==1) width = row.length();&#xD;    if(width==1) result=false;&#xD;    if(row.length()!=width) result=false;&#xD;    else&#xD;    {&#xD;      j=1;&#xD;      while(result &amp;&amp; (j&lt;=row.length()))&#xD;      {&#xD;        if(Number.isNaN(row.at(j))) result=false;&#xD;        j++;&#xD;      }&#xD;    }&#xD;  }&#xD;  i++;&#xD;}&#xD;return result;&#xD;</l></block><list><block var="source"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>table</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var result=true,row,i,width;&#xD;i=1;&#xD;while(result &amp;&amp; (i&lt;=data.length()))&#xD;{&#xD;  row=data.at(i);&#xD;  if(!(row instanceof List)) result=false;&#xD;  else&#xD;  {&#xD;    if(i==1) width = row.length();&#xD;    if(row.length()!=width) result=false;&#xD;  }&#xD;  i++;&#xD;}&#xD;return result;&#xD;</l></block><list><block var="source"/></list></block></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block></script></block-definition><block-definition s="$storage random" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">Returns a random number between 0 and 1.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return Math.random();</l></block><list></list></block></block></script></block-definition><block-definition s="$storage import %&apos;choice&apos; from %&apos;source&apos; to myData" type="command" category="lists"><comment x="0" y="0" w="118.57142857142863" collapsed="false">Imports FITS-data, table-CSV-data or costume-data to myData.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">costume-(RGB)-data<options>table-(CSV)-data&#xD;costume-(RGB)-data&#xD;FITS-data</options></input><input type="%s">current-costume</input></inputs><script><block s="doDeclareVariables"><list><l>header</l><l>imagedata</l><l>h</l><l>min</l><l>max</l><l>w</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>FITS-data</l></block><script><block s="doIfElse"><block s="reportIsA"><block var="source"/><l><option>text</option></l></block><script><block s="doSetVar"><l>imagedata</l><block s="evaluate"><block s="reportJSFunction"><list><l>FITSdata</l></list><l>function strToInt(high,low){&#xD;  var left = high.toString(2), right = low.toString(2);&#xD;  while(left.length&lt;8) left="0"+left;&#xD;  while(right.length&lt;8) right="0"+right;&#xD;  var both = left+right, result = 0;&#xD;  var factor = 1;&#xD;  for(var i=15; i&gt;=0;i--) {&#xD;    if(both.charAt(i)==&apos;1&apos;) result = result+factor;&#xD;    factor = factor*2;&#xD;    }&#xD;  return result;&#xD;  }&#xD;&#xD;var width=0, height=0, numberlength=0; minValue=32768, maxValue=-32769,header=[], pixelvalues=[],&#xD;    keyword=&apos;&apos;, kwvalue=&apos;&apos;, indexInLine=0, i=0, insideString=false, finished=false, c=&apos; &apos;, n=0,&#xD;    mask = Math.pow(2,7)-1; &#xD;i=0;&#xD;while((i&lt;2880) &amp;&amp; (i&lt;FITSdata.length)){&#xD;  indexInLine=1; keyword=&apos;&apos;; c = FITSdata.charAt(i); &#xD;  while((c!=&apos; &apos;) &amp;&amp; (c!=&apos;=&apos;) &amp;&amp; (i&lt;2880) &amp;&amp; (i&lt;FITSdata.length) &amp;&amp; (indexInLine&lt;=80)){&#xD;    keyword = keyword+c;i++;indexInLine++; c = FITSdata.charAt(i);&#xD;    } &#xD;  while(((c==&apos; &apos;) || (c==&apos;=&apos;)) &amp;&amp; (i&lt;2880) &amp;&amp; (i&lt;FITSdata.length) &amp;&amp; (indexInLine&lt;=80)){&#xD;    i++; indexInLine++; c = FITSdata.charAt(i);&#xD;    }&#xD;  kwvalue=&apos;&apos;; insideString=false; finished=false;&#xD;  while(!finished){&#xD;    kwvalue=kwvalue+FITSdata.charAt(i);&#xD;    if(c=="&apos;") insideString = !insideString;&#xD;    i++; indexInLine++;&#xD;    c = FITSdata.charAt(i);&#xD;    if(insideString) finished=(i&gt;=2880) || (i&gt;=FITSdata.length) || (indexInLine&gt;80);&#xD;    else finished= (c==&apos; &apos;) || (i&gt;=2880) || (i&gt;=FITSdata.length) || (indexInLine&gt;80);&#xD;    }&#xD;  if(keyword.length&gt;0) header.push(new List([keyword,kwvalue]));&#xD;  if(keyword==&apos;NAXIS1&apos;) width=kwvalue;&#xD;  if(keyword==&apos;NAXIS2&apos;) height=kwvalue;&#xD;  if(keyword==&apos;BITPIX&apos;) numberlength=kwvalue;&#xD;  while((i&lt;2880) &amp;&amp; (i&lt;FITSdata.length) &amp;&amp; (indexInLine&lt;=80)){&#xD;    i++; indexInLine++;&#xD;    }&#xD;  }&#xD;&#xD;if(numberlength==16){&#xD;  i=2880; &#xD;  while(i&lt;FITSdata.length-1){&#xD;    n = strToInt(FITSdata.charAt(i).charCodeAt(0),FITSdata.charAt(i+1).charCodeAt(0));&#xD;    //n = -(n &amp; mask) + (n &amp; &#126;mask);  &#xD;    pixelvalues.push(n);&#xD;    if(n&gt;maxValue) maxValue=n;&#xD;    if(n&lt;minValue) minValue=n;&#xD;    i = i+2;&#xD;    }&#xD; return new List([width,height,minValue,maxValue,new List(header),new List(pixelvalues)]);&#xD;  }&#xD;else return &apos;unsupported number format&apos;;</l></block><list><block var="source"/></list></block></block><block s="doSetVar"><l>myData</l><block s="reportListItem"><l>6</l><block var="imagedata"/></block></block><custom-block s="$storage set properties" scope="local"></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>typeOfData</l><l>FITS</l></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>width</l><block s="reportListItem"><l>1</l><block var="imagedata"/></block></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>height</l><block s="reportListItem"><l>2</l><block var="imagedata"/></block></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>minValue</l><block s="reportListItem"><l>3</l><block var="imagedata"/></block></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>maxValue</l><block s="reportListItem"><l>4</l><block var="imagedata"/></block></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>columns</l><l>1</l></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>rows</l><block s="reportListLength"><block var="myData"/></block></custom-block><block s="doSetVar"><l>header</l><block s="reportListItem"><l>5</l><block var="imagedata"/></block></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block s="reportListLength"><block var="header"/></block><l>0</l></block><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="header"/></block></block><l></l></block></block><script><custom-block s="$storage set property %txt to %s" scope="local"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="header"/></block></block><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="header"/></block></block></custom-block><block s="doDeleteFromList"><l>1</l><block var="header"/></block></script></block></script><script><block s="doAddToList"><l>from "import from": FITS data have to be text</l><block var="myMessages"/></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>table-(CSV)-data</l></block><script><block s="doIfElse"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block><script><block s="doSetVar"><l>w</l><custom-block s="$storage property %txt" scope="local"><l>width</l></custom-block></block><block s="doSetVar"><l>h</l><custom-block s="$storage property %txt" scope="local"><l>height</l></custom-block></block><custom-block s="$storage set properties" scope="local"></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>width</l><block var="w"/></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>height</l><block var="h"/></custom-block><block s="doSetVar"><l>myData</l><custom-block s="$storage copy of %s" scope="local"><block var="source"/></custom-block></block><custom-block s="$storage set property %txt to %s" scope="local"><l>typeOfData</l><l>table</l></custom-block><block s="doIfElse"><block s="reportEquals"><block s="reportListLength"><block var="myData"/></block><l>0</l></block><script><custom-block s="$storage set property %txt to %s" scope="local"><l>columns</l><l>0</l></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>rows</l><l>0</l></custom-block></script><script><custom-block s="$storage set property %txt to %s" scope="local"><l>rows</l><block s="reportListLength"><block var="myData"/></block></custom-block><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="myData"/></block><l><option>list</option></l></block><script><custom-block s="$storage set property %txt to %s" scope="local"><l>columns</l><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="myData"/></block></block></custom-block></script><script><custom-block s="$storage set property %txt to %s" scope="local"><l>columns</l><l>1</l></custom-block></script></block></script></block><custom-block s="$storage set property %txt to %s" scope="local"><l>minValue</l><l>not set</l></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>maxValue</l><l>not set</l></custom-block></script><script><block s="doAddToList"><l>from "import from": only import from tables</l><block var="myMessages"/></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>costume-(RGB)-data</l></block><script><block s="doIfElse"><block s="reportEquals"><block var="source"/><l>current-costume</l></block><script><block s="doSetVar"><l>source</l><block s="reportGet"><l><option>costume</option></l></block></block></script><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="source"/><l><option>costume</option></l></block></block><script><block s="doAddToList"><l>from "import from": only import from costumes</l><block var="myMessages"/></block></script></block></script></block><block s="doIf"><block s="reportIsA"><block var="source"/><l><option>costume</option></l></block><script><block s="doSetVar"><l>myData</l><block s="reportGetImageAttribute"><l><option>pixels</option></l><block var="source"/></block></block><custom-block s="$storage set properties" scope="local"></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>typeOfData</l><l>RGB</l></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>width</l><block s="reportGetImageAttribute"><l><option>width</option></l><block var="source"/></block></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>height</l><block s="reportGetImageAttribute"><l><option>height</option></l><block var="source"/></block></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>rows</l><block s="reportListLength"><block var="myData"/></block></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>columns</l><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="myData"/></block></block></custom-block><block s="doSetVar"><l>min</l><custom-block s="$storage %s of %s" scope="local"><l>min</l><custom-block s="$storage %s %n of %s" scope="local"><l>column</l><l>1</l><block var="myData"/></custom-block></custom-block></block><block s="doSetVar"><l>max</l><custom-block s="$storage %s of %s" scope="local"><l>max</l><custom-block s="$storage %s %n of %s" scope="local"><l>column</l><l>1</l><block var="myData"/></custom-block></custom-block></block><block s="doFor"><l>i</l><l>2</l><custom-block s="$storage property %txt" scope="local"><l>columns</l></custom-block><script><block s="doSetVar"><l>h</l><custom-block s="$storage %s of %s" scope="local"><l>min</l><custom-block s="$storage %s %n of %s" scope="local"><l>column</l><block var="i"/><block var="myData"/></custom-block></custom-block></block><block s="doIf"><block s="reportLessThan"><block var="h"/><block var="min"/></block><script><block s="doSetVar"><l>min</l><block var="h"/></block></script></block><block s="doSetVar"><l>h</l><custom-block s="$storage %s of %s" scope="local"><l>max</l><custom-block s="$storage %s %n of %s" scope="local"><l>column</l><block var="i"/><block var="myData"/></custom-block></custom-block></block><block s="doIf"><block s="reportGreaterThan"><block var="h"/><block var="max"/></block><script><block s="doSetVar"><l>max</l><block var="h"/></block></script></block></script></block><custom-block s="$storage set property %txt to %s" scope="local"><l>minValue</l><block var="min"/></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>maxValue</l><block var="max"/></custom-block></script></block></script></block></script></block></script></block-definition><block-definition s="$storage apply convolution kernel %&apos;kernel&apos; to %&apos;typeOfData&apos; %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="98.33333333333333" collapsed="false">Applies a convolution to a table with FITS, RGB, or table values</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s" readonly="true">table<options>image&#xD;table</options></input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>w</l><l>h</l><l>t</l><l>m</l><l>source</l><l>width</l><l>height</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doIfElse"><custom-block s="$storage is %s a %s ?" scope="local"><block var="data"/><l>matrix</l></custom-block><script><block s="doSetVar"><l>source</l><block var="data"/></block></script><script><block s="doAddToList"><l>from "apply convolution": wrong data type</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data type</l></block></script></block></script></block><block s="doIfElse"><block s="reportAnd"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block><custom-block s="$storage is %s a %s ?" scope="local"><block var="kernel"/><l>matrix</l></custom-block></block><script><block s="doSetVar"><l>h</l><block s="reportListLength"><block var="kernel"/></block></block><block s="doSetVar"><l>w</l><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="kernel"/></block></block></block><block s="doIfElse"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block var="w"/><block var="h"/></block></block><block s="reportOr"><block s="reportEquals"><block s="reportProduct"><l>2</l><block s="reportRound"><block s="reportQuotient"><block var="w"/><l>2</l></block></block></block><block var="w"/></block><block s="reportEquals"><block s="reportProduct"><l>2</l><block s="reportRound"><block s="reportQuotient"><block var="h"/><l>2</l></block></block></block><block var="h"/></block></block></block><script><block s="doAddToList"><l>from "apply convolution": wrong kernel</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong kernel</l></block></script><script><block s="doSetVar"><l>typeOfData</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="typeOfData"/><l> </l></block></block></block><block s="doSetVar"><l>m</l><block s="reportRound"><block s="reportQuotient"><block var="w"/><l>2</l></block></block></block><block s="doIfElse"><block s="reportEquals"><block var="typeOfData"/><l>image</l></block><script><block s="doSetVar"><l>width</l><custom-block s="$storage property %txt" scope="local"><l>width</l></custom-block></block><block s="doSetVar"><l>height</l><custom-block s="$storage property %txt" scope="local"><l>height</l></custom-block></block><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="source"/></block><l><option>number</option></l></block><script><block s="doSetVar"><l>t</l><l>FITS</l></block></script><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="source"/></block><l><option>list</option></l></block><script><block s="doSetVar"><l>t</l><l>RGB</l></block></script><script><block s="doAddToList"><l>from "apply convolution": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR wrong data format</l></block></script></block></script></block></script><script><block s="doSetVar"><l>t</l><l>table</l></block><block s="doSetVar"><l>width</l><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="source"/></block></block></block><block s="doSetVar"><l>height</l><block s="reportListLength"><block var="source"/></block></block></script></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>kernel</l><l>data</l><l>width</l><l>height</l><l>typeOfData</l><l>mIndex</l><l>kWidth</l></list><l>function getValue(x,y){&#xD;  if(typeOfData==&apos;FITS&apos;) return (data.at(x+(y-1)*width));&#xD;  if(typeOfData==&apos;RGB&apos;) return (data.at(x+(y-1)*width));&#xD;  if(typeOfData==&apos;table&apos;) return (data.at(y).at(x));&#xD;  }&#xD;&#xD;function getKernelValue(x,y){&#xD;  return (kernel.at(y).at(x));&#xD;&#xD;}&#xD;&#xD;var result=[],x,y,value,r,g,b,s,row;&#xD;width=Number(width); height=Number(height); mIndex=Number(mIndex);kWidth=Number(kWidth);&#xD;for(var y=1; y&lt;=height;y++){&#xD;  row=new List();&#xD;  for(var x=1;x&lt;=width;x++){&#xD;    if(typeOfData==&apos;FITS&apos;) value = 0; &#xD;    if(typeOfData==&apos;RGB&apos;){r=0;g=0;b=0;s=255};&#xD;    if(typeOfData==&apos;table&apos;) value=0;&#xD;    for(var ky=1;ky&lt;=kWidth;ky++)&#xD;      for(var kx=1;kx&lt;=kWidth;kx++)&#xD;         if((y-mIndex+ky&gt;0) &amp;&amp; (y-mIndex+ky&lt;=height) &amp;&amp; (x-mIndex+kx&gt;0) &amp;&amp; (x-mIndex+kx&lt;=width)){&#xD;           if(typeOfData==&apos;FITS&apos;) value = value+getValue(x-mIndex+kx,y-mIndex+ky)*getKernelValue(kx,ky);&#xD;           if(typeOfData==&apos;table&apos;) value = value+getValue(x-mIndex+kx,y-mIndex+ky)*getKernelValue(kx,ky);&#xD;           if(typeOfData==&apos;RGB&apos;){&#xD;             r = r + getValue(x-mIndex+kx,y-mIndex+ky).at(1)*getKernelValue(kx,ky);&#xD;             g = g + getValue(x-mIndex+kx,y-mIndex+ky).at(2)*getKernelValue(kx,ky);&#xD;             b = b + getValue(x-mIndex+kx,y-mIndex+ky).at(3)*getKernelValue(kx,ky);&#xD;             }&#xD;           }&#xD;    if(typeOfData==&apos;FITS&apos;) result.push(value); &#xD;    if(typeOfData==&apos;table&apos;) row.add(value); &#xD;    if(typeOfData==&apos;RGB&apos;) result.push(new List([r,g,b,s]));&#xD;    }&#xD;  if(typeOfData==&apos;table&apos;) result.push(row); &#xD;  }&#xD;return new List(result);</l></block><list><block var="kernel"/><block var="source"/><block var="width"/><block var="height"/><block var="t"/><block var="m"/><block var="w"/></list></block></block></script></block></script><script><block s="doAddToList"><l>from "apply convolution": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="compress %&apos;data&apos; with factor %&apos;n&apos; by averaging" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%n">2</input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>h</l><l>h2</l><l>i</l><l>j</l><l>source</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListLength"><block var="source"/></block><l>0</l></block><block s="reportGreaterThan"><block var="n"/><l>0</l></block></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>n</l></list><l>function mean(d,n){&#xD;  var sum=0;&#xD;  for(var i=1;i&lt;=d.length();i++){&#xD;    sum=sum+Number(d.at(i).at(n));&#xD;    }&#xD;  return sum/d.length();&#xD;  }&#xD;&#xD;function mean2(d){&#xD;  var sum=0;&#xD;  for(var i=1;i&lt;=d.length();i++){&#xD;    sum=sum+Number(d.at(i));&#xD;    }&#xD;  return sum/d.length();&#xD;  }&#xD;&#xD;var result=new List(),i,j,h1,h2;&#xD;n=Math.round(n);&#xD;if(data.at(1) instanceof List){&#xD;  i=1;&#xD;  while(i&lt;=data.length()-n+1){&#xD;    h1 = new List();&#xD;    h1.add(data.at(i));&#xD;    j=1;&#xD;    while(j&lt;=n-1){&#xD;      h1.add(data.at(i+j));&#xD;      j++;&#xD;      }&#xD;    j=1;&#xD;    h2=new List();&#xD;    while(j&lt;=h1.at(1).length()){&#xD;      h2.add(mean(h1,j));&#xD;      j++;&#xD;      }&#xD;    result.add(h2);&#xD;    i=i+n;&#xD;    }&#xD;  }&#xD;else{&#xD;  i=1;&#xD;  while(i&lt;=data.length()-n+1){&#xD;    h1 = new List();&#xD;    h1.add(data.at(i));&#xD;    j=1;&#xD;    while(j&lt;=n-1){&#xD;      h1.add(data.at(i+j));&#xD;      j++;&#xD;      }&#xD;    result.add(mean2(h1));&#xD;    i=i+n;&#xD;    }&#xD;}&#xD;return result;</l></block><list><block var="source"/><block var="n"/></list></block></block></script><script><block s="doReport"><l>ERROR: impossible operation</l></block></script></block></script><script><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block-definition><block-definition s="max pooling of FITS data %&apos;data&apos; width %&apos;w&apos; height %&apos;h&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doSetVar"><l>myData</l><custom-block s="$storage copy of %s" scope="local"><block var="data"/></custom-block></block><custom-block s="$storage set property %txt to %s" scope="local"><l>typeOfData</l><l>FITS</l></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>width</l><block var="w"/></custom-block><custom-block s="$storage set property %txt to %s" scope="local"><l>height</l><block var="h"/></custom-block><block s="doReport"><custom-block s="$storage %s pooling of %s with stride %n" scope="local"><l>max</l><l>myData</l><l>4</l></custom-block></block></script></block-definition></blocks><variables><variable name="myData"><list struct="atomic" id="8824">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77.52792617775619,166.69742593491983,226.76299174356478,153.6935405536668,64.52404079650314,4.4584749878581835,0,0,0,0,0,0,0,0,0,46.81398737251092,113.19572608062164,195.182127246236,240.50995628946092,236.67071393880525,158.89509470616804,66.75327829043225,4.210781932977174,0,0,0,0,0,0,0,4.334628460417678,44.70859640602234,0,0,0,0,17.462360369111227,77.40407965031568,35.048567265662946,0,0,0,0,0,0,0,5.573093734822729,0,0,0,0,0,0,0,19.320058280718797,0,0,0,0,0,0,0,27.493929091792133,0,0,0,0,0,0,0,22.540067994171924,38.14473045167557,0,0,0,0,0,0,26.503156872268093,26.87469645458961,24.893152015541528,0.37153958232151796,2.6007770762506066,72.20252549781448,129.91500728508984,186.63671685284115,117.0349684312773,59.32248664400194,0,0,0,0,0,0,9.783875667799906,81.36716852841185,156.04662457503642,228.00145701796984,248.1884409907722,255,157.65662943176298,27.741622146673148,0,0,0,0,0,0,0,0,0,45.20398251578436,140.93734822729482,249.42690626517728,216.85526954832443,43.71782418649829,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</list></variable><variable name="myProperties"><list id="8825"><item><list struct="atomic" id="8826">typeOfData,FITS</list></item><item><list struct="atomic" id="8827">width,16</list></item><item><list struct="atomic" id="8828">height,16</list></item><item><list struct="atomic" id="8829">minValue,not set</list></item><item><list struct="atomic" id="8830">maxValue,not set</list></item><item><list struct="atomic" id="8831">columns,0</list></item><item><list struct="atomic" id="8832">rows,0</list></item></list></variable><variable name="myMessages"><list struct="atomic" id="8833">&quot;from &quot;&quot;normalize&quot;&quot;: wrong data format&quot;,&quot;from &quot;&quot;normalize&quot;&quot;: wrong data format&quot;,&quot;from &quot;&quot;normalize&quot;&quot;: wrong data format&quot;,&quot;from &quot;&quot;normalize&quot;&quot;: wrong data format&quot;,&quot;from &quot;&quot;normalize&quot;&quot;: wrong data format&quot;,&quot;from &quot;&quot;normalize&quot;&quot;: wrong data format&quot;,&quot;from &quot;&quot;normalize&quot;&quot;: wrong data format&quot;,&quot;from &quot;&quot;&lt;feature&gt; of&quot;&quot;: wrong data format&quot;,&quot;from &quot;&quot;&lt;feature&gt; of&quot;&quot;: wrong data format&quot;</list></variable></variables><scripts></scripts></sprite><sprite name="thePen" idx="1" x="-320" y="-390" heading="90" scale="0.3" volume="100" pan="0" rotation="1" draggable="true" costume="1" color="0,1,7,1" pen="tip" id="8835"><costumes><list id="8836"><item><costume name="costume1" center-x="4" center-y="132.2" image="data:image/png;base64,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" id="8837"/></item></list></costumes><sounds><list struct="atomic" id="8838"></list></sounds><blocks><block-definition s="write %&apos;text&apos; at %&apos;x&apos; %&apos;y&apos; size %&apos;size&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%n">-100</input><input type="%n"></input><input type="%n">20</input></inputs><script><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="show"></block><block s="write"><block var="text"/><block var="size"/></block><block s="gotoXY"><l>-320</l><l>-390</l></block></script></block-definition><block-definition s="draw rect %&apos;x&apos; %&apos;y&apos; %&apos;b&apos; %&apos;h&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">0</input><input type="%n">50</input><input type="%n">30</input></inputs><script><block s="up"></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="show"></block><block s="down"></block><block s="gotoXY"><block s="reportSum"><block var="x"/><block var="b"/></block><block var="y"/></block><block s="gotoXY"><block s="reportSum"><block var="x"/><block var="b"/></block><block s="reportDifference"><block var="y"/><block var="h"/></block></block><block s="gotoXY"><block var="x"/><block s="reportDifference"><block var="y"/><block var="h"/></block></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="up"></block><block s="gotoXY"><l>-320</l><l>-390</l></block></script></block-definition><block-definition s="draw all lines" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="setColor"><color>0,1,7,1</color></block><block s="setSize"><l>1</l></block><block s="up"></block><block s="gotoXY"><l>-120</l><l>-90</l></block><block s="down"></block><block s="gotoXY"><l>-120</l><l>-150</l></block><block s="gotoXY"><l>-5</l><l>-200</l></block><block s="up"></block><block s="gotoXY"><l>0</l><l>-90</l></block><block s="down"></block><block s="gotoXY"><l>0</l><l>-150</l></block><block s="gotoXY"><l>44</l><l>-200</l></block><block s="up"></block><block s="gotoXY"><l>115</l><l>-90</l></block><block s="down"></block><block s="gotoXY"><l>115</l><l>-150</l></block><block s="gotoXY"><l>95</l><l>-200</l></block><block s="up"></block><block s="gotoXY"><l>235</l><l>-90</l></block><block s="down"></block><block s="gotoXY"><l>235</l><l>-150</l></block><block s="gotoXY"><l>145</l><l>-200</l></block><block s="up"></block><block s="gotoXY"><l>-320</l><l>-390</l></block></script></block-definition></blocks><variables></variables><scripts></scripts></sprite><sprite name="ImageSprite" idx="8" x="50" y="250" heading="90" scale="2" volume="100" pan="0" rotation="1" draggable="true" costume="11" color="0,193.8,135.66000000000003,1" pen="tip" id="8944"><costumes><list id="8945"><item><costume name="Eins0" center-x="32" center-y="32" image="data:image/png;base64,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" id="8946"/></item><item><costume name="Eins1" center-x="32" center-y="32" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAFLklEQVR4Xu1aSSxdfxQ+qoYg5nlKCAsJsSOIsKmEEo0KC0KMEVNraGqIGKNIKBaNucKGsOmiRGJaiDY2QiQkLcJCQksEUVP55zvJe6HRvvf+XH3v9p4V3nXf+757zne+c35P6+rq6or+4dCSCJAyQCoBSQP+YQ0kSQSlLiB1AakLSF1AXboAqvHnz590eXlJjx8/pkePHgn+0dSmCwD0ysoKffjwgQ4ODigsLIwCAgIEJ0EtCMCTn5qaovz8fFpaWiL87ubmRn19feTr6ytoFqgFAbOzs5SUlERfvnxh8AhtbW0qKyuj8vJy8RJwcXFBMzMz9PLlS1pcXJSDB2ItLS0qKiqi2tpacRJwdnZGHz9+pNevX9PXr19vgAdiiGB1dTWTIGT8lRKA4I2NjdGLFy9uBQ/Aurq6VF9fz9khZPwVAlDrqHnUvqzmkfKoe5QFwsDAgN6+fUvp6elC4n/4YejHjx8sbC0tLYQyQKDfOzs70+7uLh0eHvLfTExMqL29nWJjY8VDAJ726OgoP/2dnR0Ghifv4uJCMTEx9O7dO/YACGtra+ru7qbw8HDxELC5uUnJyck0OTkpT31DQ0NWeqR8Xl4eHR0dMWA7Ozvq6upiQyRkPJgGnJycsKjV1dURfpalfkREBKf6yMgI5ebm3iAAGRAaGiok/ofTAPT7hIQEWl9flwNycnJitxccHEzv378XLwH7+/uUlZVFg4ODPOzIVL60tJQKCgpIT09PvARA6Ts7O9nQyOobwvfkyRMWOUdHRyZElBkAwzMxMUFpaWm0sbEhT30rKytqa2ujZ8+eyac90RGAlrewsEDZ2dn06dMnnvERsLgZGRlUU1PDvV4WoiIA4Ofn59nnT09Py90dDA8EDyXh6up6Q91FRcDy8jIrOvq97Mmj7jHjd3R0MAm/hmgIgOIXFhZyezs/P5fjtLGxoTdv3lBcXBwPOqIk4Pj4mMUNXv+64sPWVlZWUnx8PMH53RYanwF7e3vc1uD2MNTIwtzcnK1uYmIi6evr/9bVaTQBW1tb1NjYyOImm+aAVEdHhw0QFhtGRkZ/tLQaSQBm97m5OX7C4+PjdHp6KgeJ2R4+vrW1lac9RaFxBCDNBwYGeGmxtrZ2Y6WFVMcYW1VVRR4eHoqwa5YTRLpjph8aGuKNDsTu+vEiwKPeS0pKeMmhbGhEBgB8RUUFP/lfgaPP29vbU05ODqWkpJClpaWy2DUnA+DqUlNTaXV19QY41LuPjw+TExQUxNOdqgEBxQIUrRTh4OBAPT09FBISouqtVLpepYUIdveZmZlybw/gFhYWFBUVxac67u7uKr359Yubm5vZOsv2hLDKvb29FBgY+L/vqcw/qkQAFpo4whoeHqbt7W3280+fPiV/f38yNjZW5v1+ew02RTgJkm2Fvby8qL+/n7y9ve90X0X/rBIBuBlIgOlBmJqa8i4P9X/XgFOEX5AtTPz8/NhOY34QMlQmQKgPU1xcTA0NDfLhCQsTEGBrayvUW/J91YaAV69esZuUtdTIyEjWAGSZkKE2BGCCbGpqkhPw/Plz7gJ31RZF5KktAdHR0Txc/TMEwDZDCLFAgajCTMFmKxqiFD1hRa+rTQbgYARHZt++feOdAc4OsT+4bXmiCJQqr6sNAdgkQfQ+f/5Mnp6efISG47H7aLF/IkRtCMCHBAnfv38nMzMzwiJFaPBq1QZVSdv7vFatMuA+gSl7L4kA6dvi0rfFpW+LS98WV1YxxXid1AWkLiB1AakLSF1AjOquLKb/AI0Rk269+n1mAAAAAElFTkSuQmCC" id="8947"/></item><item><costume name="Eins2" center-x="32" center-y="32" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAD6klEQVR4Xu1a2SttURj/bfNQCOFJijdPPHjyHygl4sn4QFGGkLGMERKRkkQpGZ6UDIVHJUnGUIaiPJjJlOncfqvOrnu77sk95+7lttdXu5yznL3X91vf9/t961tbs1gsFpjYNAWAigCVAooDTMyBUCSoVECpgFIBpQJKBUyMgJJBJYNKBpUMSpPBj48PXF5e4vDwUNBwREQEAgICDKVkKST4/v6O6+trLCwsYGRkBBsbG3BxcUFSUhKKi4sNBeGfAUBqeX19xdPTE+7v73Fzc4OzszMcHx9jZ2cHKysrWF1dFd9bacjHxwcDAwNITEw0LArsBuDh4UGE8NHRkXDw6upKOEWnrRe/Y6hfXFyIscfHRzD8fzUnJyeUlZWhqanp/wCAzk9NTaGvrw/b29u4u7vDy8uLcI6r+lWBIQAVFRVobGz8PwDY3d1FaWkppqenf7uitrxwdnYW/0JOoJEHmpubUVJSYuunDhu3KwU2NzfFZOfn5z8FQNM08OLqurq6wsvLC4GBgQgPD4evry9mZmZEWtA8PT3R2dmJ7Oxshzlo60Z2AcCJj46OYnBwECcnJ2IF6VRwcLBwkn/TYQ8PD3h7e8Pf3x8hISEICwsT1+TkJPLy8sBUonG8v78fCQkJtubtsHG7AOAsCAJZnQTIFaTzQUFB8PPzg7u7u1j5z6ytrQ2VlZV4e3vT64Dh4WHExMQ4zEFbN7IbAFsP+GycBFlUVISuri6dLGNjY0EAQkND//a2X/6dNAAYOcnJyZibm9MnnZKSItKJkWSUSQNgaWkJdJiFEY2KUFNTg+rqakGaRpk0AFg7FBQU4Pn5WSfAoaEhxMXFGeW7eI40ALjaLHisFWFUVBTGx8fFhshIkwIACTA/Px89PT06AcbHx4MRQOk00qQAwA1SVlaWqCGsxs+9vb2iWDLSpABwenqK9PR0UUGKPNQ0UVG2tLQYSoDSOICFU0ZGBpaXl3UFqKurQ1VVlZGLL48E2QBhBKytrYlJsIRuaGhAeXm5eQBIS0vD+vq6AkBFgEoBxQGKBE2nAmylpaammlcFtra2RB3AcwGrCtTW1pqnEOI5AuuAxcVFAQDbZqwC6+vrzVEInZ+fCwBmZ2d/2gu0traaAwC2wzIzMzExMaEDwP5ge3u7OQC4vb1FTk4OxsbGdAB4wMLdoNEmZTvMs0F2g+gwO0Jubm7o6OhAbm6u0f7LaYnxKIwKUFhYiIODA0RHR6O7u1ucFhltUiKAThKEvb097O/vIzIyUorz0hoiRq/yn54nLQK+CwgKAPWe4Fdf4/guseugeagUUCmgUkC9KivtVVkH8Zhdt1EkqEjQ5CT4AzZtuF8KfK4zAAAAAElFTkSuQmCC" id="8948"/></item><item><costume name="Eins3" center-x="32" center-y="32" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACe0lEQVR4Xu1bz6tpURT+EG7qYqZMdZkYK2FgaoiRP8FAqXuLKYM7U4oiP2ZGRJkZMkQZkjtV6BYhP1J47d2j9+q+zhtc53SPtctAu9Pe61trr+9b56ytuFwuFzzwUBAAFAF0BCgHPHAOBCVBYgFiAWIBYgFiAYkQ2O12GI/H6Pf7OB6PcLlcsNvtUKlUou1IdBo8nU74/PxEt9tFs9lEp9PBZDLB+XyGzWZDLpeDw+EQDYS7A8BI5nA4YD6fc2/3ej20220MBgMsFgtu+HUoFApEo1Ekk0nodDpRouCuADDjmbfr9Tqq1SqGwyE3moX7v9g3EAigVCrBYDD8fAA2mw0qlQpisRjW6/WXRjOv/wmG3+/nABiNxp8PwGw2w/v7OzKZzF+hzixTq9UwmUw81D8+Pm4gsAgoFovyAGC73fJEF4/HMZ1OeWLT6/WwWCxwu93w+Xyo1WrIZrPyBIB5moHAaI79tFotXl5eYLVaYTab+f/X11ekUin5AiB0kAkAigA6ApQDKAkSCxANkg641gOyksJCIojNkxAiIURCiIQQCSESQiSESAiREPr9jZaUoJzeCpMU/g8EqBagWoBqAaoFqBagWuCBawHWEZJOp2+1QDAYRKFQkMfncSEZwDpFwuEwyuXyDYBQKMT7hJ6fn4Ue/5b5u7bICO1wtVrx7pF8Ps8BUCqVeHt7QyKRgEajEXr8W+YlBWC/36PRaCASiWC5XPLGCdYd4vF4wFpnxBiSAsC8zpqmWq0WRqMRnE4nvF4vnp6exLCdryEpAGwD1zY6lg+Y4axrRMwhOQBiGvvVWgQAXZigCxN0YYIuTEidiaVcn1iAWODBWeAXqK3cXz28UdEAAAAASUVORK5CYII=" id="8949"/></item><item><costume name="Eins4" center-x="32" center-y="32" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAEjklEQVR4Xu1bWSimfxg9xpIlZFdCcsEkJYlcjKx3klLKHiZyJxe27CNXyL4mItuUiMKNRKS4EaLcUBSylrFl+3d+9Wqm/0wzF773/Xq9v9vvS9857/Occ57n9zJ4fX19xQc+BhoBWgVoLaBpwAfWQGgiqLmA5gKaC2guoLnAB2ZAs0HNBjUb1J0Nnp+fY2trC3d3d/Dx8YGLiws+ffqkV4rz7hpwe3uL3d1dLC4uYnp6Gjs7O3h6eoKvry/Ky8sRFBSkVyS8GwHspKOjI/T29mJwcBB7e3t4eHiA1GEGBgYICwsTn7u5uelNFbwLAQS5vb2N6upqTE1N4ebm5rcAbW1t0dPTg9jYWPUQQPAbGxvIy8vDwsICnp+f/wjO3NwcLS0tSE9PVwcBBLu6uorCwkIsLy//At7ExATOzs44PT0VIsijKgIodpOTk6ioqBCi93OvW1lZITU1FV5eXvj27RtOTk7URQDtrbOzEw0NDTg7O3sDT5QODg4oKytDWloalpaWRLmrigAK3NDQEPLz83F1dfXWy1R5R0dHVFVVISUlBWZmZpiZmVEfAcfHx6Ks29vb3548w423tzcqKysRHR0NU1NTQYwqCbi+vsbo6CiKiopweXkJ9ntkZKQQQj8/v19CjioJoNgR+Pz8vPD+z58/i4BjZ2f3P2tTJQFESRIYb19eXmBkZARDQ8Pf+rpqCfjXFEMCMjIyQN2QckBTUxMyMzP/9U/o/HvvEoX/9Cvn5uaECxwcHIivMBzV1NSI1EjX0IejUwI4CtMS19fXBVaCTkpKQkdHBywsLPQBv25vhn78+IGcnBwxHUpJ0d3dHQMDA/jy5Yv6CSDCkZERZGVlgfbJw8yQmJiI1tZWYaFKH522AMFxR5CcnCxsU6oCGxsbdHd3Iy4uTmn8um0BoqNVTkxMiCrgDCFpAbPD8PCwiM9KHp1XAMGx/HNzc9HX1ycIkSyxrq4O2dnZijqCLAQQ8MrKiuj9/f39twfu7++P79+/w9PTU7EikI2A+/t7lJSUoLGxUaRIKRcUFBSgtLQUxsbGipAgGwFExw1xfHy8WJVLx8PDQ9hkcHCw+glg/3MnyMlRWpPRFjlCd3V1wcnJSXYSZK0Aojs8PBTbop9tkRGZ4zXbgYsUOY/sBLAKZmdn8fXrV5ERpMMFKhNiRESErK4gOwEETEGsra0V9wi8PJESYkxMjAhI9vb2shWBIgQQHdflnBR5fSYlRC5UKYhRUVHqJ4AIx8fHRStcXFwIwLRCbpSLi4tluz9UrAIImBqQkJAgbpR4OC7TJukIcg1KihLw+PgoliNtbW1vETkwMFCs3eVKh4oSwKfOyxXmAkkMXV1d0d/fj9DQUFl0QHECxsbGxKQo6YC1tTWam5vFJkmOozgBa2trYkm6ubkp8JIAzgsMS3IcxQng3WJ9fb146swHnBC5LQoICJADv+4XIn9DwSt2jsi8aeb6PCQkBOHh4bJFYsUrgASRBC5QKYSWlpaygRfWq70nqL0nqLv3BP/W//rwudYCmgZoGqBpgPYvM/qgxkr9hg/vAv8BW439X86pyCgAAAAASUVORK5CYII=" id="8950"/></item><item><costume name="Eins5" center-x="32" center-y="32" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACsElEQVR4Xu2aP0uyURjGL3VIUkOJvkQuIg5OLQ2ii4TQEKiohVLQYLqJugghaPSPQnN0MNLFJXHOSXFpMHAQGioMWhQVUl/OgRrf8Tkv77nPF9Dr99znuu5zn6NaLpdLSLxUBIAqgLYAeYDEHggyQUoBSgFKAUoBSgGJCVAMUgxSDCobg9PpFJ+fn/j+/sbGxgZ0Op1QB1LUA5j4VquFarWKyWQCp9MJl8slFIKiAPr9PlKpFB4eHjCfz2G323FxcQGr1SqsChQF8PT0hEgkgufnZy7YZDLh6uoKe3t7cgBg5R8MBvHy8sIFr6ysIJvN4vj4WA4AvV4PXq8X7XabC9ZoNEin00gkEnIA+Pj4gN/vR6PR4ILVajXi8ThOT0/lADAajXBwcIBKpQLWfqhUKhwdHeH8/JzDELEUNUGW/YeHh7i7u/sF4PP5cHt7C61WK0K/siMx9tWj0Sj/4j8VsLu7i0KhgLW1tf8fAFMYi8WQz+d/AXg8HhSLRRiNRjkB7OzsoFQqyQOAuX4ul+MVwJbD4UC5XMb6+rocFZBMJpHJZLBYLLjgzc1N3N/fw2w2ywHg+voaJycnmM1mXDD78mwLuN1uOQDUajXs7+/j6+uLCzYYDLi8vOQNkoilaB/ABD4+PiIQCOD9/Z3r1ev1PBbZGUHEEgKAiX17eyMAVAG0BcgDyAQpBSgGqQ+gRog6QWqF6SxAhyE6DdJxWJJ5QLPZRCgUwuvrK58HrK6u8jF5OBwWMQ9R9mKEKex0Ovx6rNvtcsHsQoQBYFBELMUnQsPhEGdnZ3wOyF6MWCwW3NzcwGazidCvfAWwlyGDwQD1ep2Pxba2trC9vS3H3eDPJ2YQxuMxH42zqbCoi1H2fxTfAkLq/C8/SgDopSi9FFX2pSh5wD9GgEyQTJBMUG4T/AOKF2pf63qeagAAAABJRU5ErkJggg==" id="8951"/></item><item><costume name="Eins6" center-x="32" center-y="32" image="data:image/png;base64,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" id="8952"/></item><item><costume name="Eins7" center-x="32" center-y="32" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAFW0lEQVR4Xu1bTSwsWRT+qvV4Zt7z8/JGMHrGCIlYioiViGBrYWEhdmysLWx0YkPYiWBJiJ/Y2JBgTyIWNhIhIphMRszL4/lpzzStJ1+lq1P9VHffWz3TdTuqkk5E3Vt9v++e851zT53WwuFwGG/40lwCXAtwXcDVgDesgXBF0I0CbhRQKgqYBVlLhzapoAEvAIIA7gC8B/BTBPgtgOzIx2NFxu3tLba3t3FycoLa2lrU1dXB6/VK8eYkAQZwgs9LsGoSQWKyjDFPT0/Y29vD2NgY1tfX8fj4iLKyMoyPj6O5uVmKBKcICAF4AJAruF26dYRCIc/R0REWFhawuLiI8/NzGBKmaRo6OzsxOTmJ/Px8wcci7WGQPs4df47sqvBCHx4egisrK9mjo6M4PDzE8zMfEXs1NjZiaWkJJSUlws9NpwU8AXiU2PUoiEAggKmpqcDIyMj7q6uruOCampowNzcHn8+nHAEEzi37ILoymjaB0+Tn5+cxMzMTvrm5iYkMFLxQKBR1g5aWFo5TigD6+j8mZU+Kn8q+v7+P3d1d7Ozs6GJ3enqqAzUuj8eD8vJylJaWYmtrCy8v1FNANQJo8t+SKHwMIQS/vLysq/nx8TGCwWB0d42B3PWGhgYMDQ1hdXUV1AQVCZAGT4AHBwfo6+vD5ubmK+C8n5OTg7a2NgwODqK6uhp+vx/Dw8PKEUClZ4hj7Ja66O/9/f1YW1uLmjzNPTc3F1VVVeGuri6to6MDRUVF+nNVJYC7/4MU8sjg+/t7PbGZnZ3VY3xeXh5qamp0k6+vr//m8/k0r9ebYzxbVQK+AiiwQwDnkISzszPc3d2huLhYF7rsbGbE+kXLYq6r/0NFAmj+fwL41S4BAvOYGjOcelQkgPHoDwC/CwBJZQhD6ztVCaAF/JYKOoG5nwH87Pf7NRWjwDWAjwIgUhlyAaBYVQJsRwEJRpS2AOn0VwK4MVRZDeCBhwcf4UOPDfDRAolKIsjwR+A0/0TVHRt4Y6YQPBMhpfIAW3m/JBNMgPg9tKxoaUwFC+Ci+DEKmZK4hIfTtQg8ph7gJAFGQTOalwtDsTeQLvaqTO4UAbIFTXuQY2cpQwDBB/5nobMiTAkC/kvwFDVR3WBVia7mqAtwB25SOeaattV4C/RJ0DfOImeLV2+H0qkBjPEk4UfBRccbxojB8zxz+V8En+U4AQTOIkcqBxwmMCSPlSI+T5aAMiddgDGYC7Zb5KBovovsvLHpf2WSBdBnuWDZIoeRtnLXzQImawEUQRLomAbYIYAvM6ny0bTV5O8k4JLneUENiDssXSLI8Pc3ANE3jjR5hi0r8AaYLwBEowDnOJoH8MtphiJx22hysGxoMG0lSZJ5b8BNeEVouiyA6xY58ZmVPpl1y1aNLMenkwACYhWGH6vzvgx4PouHqWRWYiaROhR9OWDcSDcB/F6aIsMiTZ1/M6lhlwfNM5HPf28Rlj6dwGz0Etj3950gwFhDqt1csgQo4QLJ/FrmPgm4F+wWoWAyl1DCBWRAJhtL3RCpHzJkMg13LBFKBsTufQobTTtZOLQUQH6pkxpgF7R5Ht2Ab5EobvFI4CmUpm8ZMTKdACPDY0RhZKEmMDzy3EBC+LE8A8QLg62trZienlaqSUrEUmgJBG50kjG0MpXmrifsF2Z/0MDAgN4zyEbJ9vZ2TExM6H0Folc6+wRF1yQ8bmNjA93d3bi4uND7h9g71Nvbq7fUiF4ZTcD19bXeF8hWucrKSvT09KCiogJZWeI5WUYTwF0mCZeXlygoKEBhYaEUeM7PeAJETT3eOJcA9zdD7m+GlPrNUKouLT3f1YC3rgH/Algkum7hXUyGAAAAAElFTkSuQmCC" id="8953"/></item><item><costume name="Eins8" center-x="32" center-y="32" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAH1UlEQVR4Xu1bXWxMaRh+pqXV0Q61a9MttSshkXAn4i8u3ElEiISGED/FNNqq3xIXEhEpQoK2SgdFRCQkRJBIK0gkLl24ECGxgsVQS9up0unM5nnNNxlj5sw5c74xI+ZNJpl0vnPO9z7v//OdOoLBYBC/sDiyAGQ9IBsC2RzwC+dAZJNgtgpkq4DeKuD3+/Hhwwf09PSguLgYRUVFVlJMZEJ2WLkw2bVac0B3dzdu3bqFs2fPoqOjA7NmzcKqVaswdOhQo/0FAHwB0AVgMABnaHEngLzQJydZBRNdpw0AWvzYsWPYu3cvvF4vGFkFBQU4cuQIli5ditzc3Oi9KMWpvMtgowSCwHx3g0TKmfldCwCBQABnzpzBhg0bxP0jZfHixThx4gQGDRoU+ed+AD0AzMaH8g7tnqAFgPv376O8vByPHz/+DvQFCxbg9OnT4g0AGOO0uD9kVTNGUmt4HUNCq9gGgK6/ceNGeDwe0BOihR5w/PhxAtAHoNeC1aNv1QHgN63aA/YboZs3b0qMv3r1SvbmcDgk/pUQAI/H0+t0Omn1QhsKvAHwBx9h4x7fXWrLAxjvFRUVuHz5ctj6eXl5+PKF3vpVysvL/a2trQNCIWBn728B/J5RAFy8eBErV65EVxdz1Ffrjx49Gk+fPg17QUQI2FGe134CIIlEpyTtAZ2dnVi+fDkuXboU3k9JSQmmTp0qHqHCQBMATC78DNCpvBgt2Vng7t27WLRoEV68eCF7ysnJwbJly+B0OqX2awaAj8icKsB2d+fOndizZw/4ncJuj/X+9u3bgcbGxpwUAMC+gX3ANw2FXY9IygOePHmChQsXgvVfyfTp08GcsGvXrs/Nzc35KQCAjyIIDANt/YBlAPr6+rB//34qik+fmJcAZv76+nqsX78+uHbt2u6WlpaiFAHAx7E1ZjnV0hVaBuDevXuS+R89ehSO8/Hjx4v1x40bF3C73d0ej8eVQgAIwmcA+Xbd33ISpNJVVVWMc/T3s50H8vPzsX37dmzdupXfA5WVlb4UewAfq60nMO0Bz58/x5YtW8TSSnnW/WnTpqG1tRVjx44VQKqqqlKZA5TR2XaW6GiKTAHw/v17yfotLS3o7WU7/1XKysrQ2NiI2bNnh8fddevWpaoKRHr8j/MADjsHDx6UJEfCQwnZnt27d2PFihXfjLq1tbXBhoYGAitLNTVC0eH+Y3IAa/y5c+ewadMmvHv3LryJwsJCbNu2DbW1teD3CPHX1NQEm5qaBioAlixZIp6jYRZQj9FKkBiGwMOHD0EFWO+VQkx6q1evlpAYNmyY2hTNzdjoq66udkV2gvSQo0ePSqnUIFSejZCWmyWsArT+mjVr4PP5ZO+ktebMmYNDhw5h1KhRSh/O+WwIXPSYyspK6QiV8Prm5mZplW0IGyA+h+6mlRoz9AAOOiQ1mQSp/IwZM9DQ0IAJEyZEKs+NCZFJoDggsVIIug4HqqurcfjwYRu6y6Xst6m4Vi4goQeQ5Dhw4ADY/IwcOVLK4MSJE6mYIjS/6ctZKkmNcb0CgNeQKLUpDDHtyicEgAsIAhUrLS3FiBEjqHxcQvPOnTvCDnE9hXG/b98+SZY2JX0ARG2cyjMhxKSxyQzT5RVBwiR58uRJzJ0716b+QqamxwMidm6oPNexX2BLrCixMWPGCF1OkiRKmNTUAUgicJhgGWppBYAW+Mix32i3O3bskOZIscNTpkwRAFSbHLpWnQKZZXj/AcCSY6uMxNu3qVY4VOMJQlxOjvNBTU2N1HzVM8ybN0/mhIijMVYMzvPs5UsTmT70e9oBoOI87ik22jDjngzxhQsXwhWAPUBTUxNLKBsYgjcwdDhiFYC/0hkCrMHccJkRAK9fvxYArl+/Hgagrq6OtBmTJmf3SELz35/JAxiz3PDfRgCQHGXb297eLsvY+dXV1fXX19czdiMTGD3KigcwCRLAtOWApAHgwMSkGCUEgKc8nOfTLmaSIMufF8CfiTyAVFlbW1vYA+IAwN+tnvOltQ/gw+mGhnX75cuXnAP87e3tEusMAQMAmBd45m9WaAStQ5B6sBkP4NrwxBdvx16vt6uiomLw1atXJVY5CPF9Ac4SMYT3Y0UwK1bXm72vpZMhsjD8xGqDO30+X4Hb7R7IEZp9AAEgl8Cj8RhcAIcpK0ktJadCYiiLR2N0RZZFnobyO92db3nkBgKB3M2bN0s7rBohEqbnz58X7jBGIrTS2mqjwKI3YhUAdX3Mt7lIlLD2q1mApMmpU6cwc+ZMuwBkRAgkjCt2gaTLPn7k2AB5TY5sEDmCGB5AhtXMO0JMmMwX2miwyL0k6wExwbhy5YowSG/fkrUGXC6X0ObkCGII22Ojt8PUJSyZbMOt5IyExrJaBUzdkADQA/ianAkAmNjo2onKYcoSYDJJ0BAIAsAB6M0bNnrAkCFDhEOM4wHMI/+F2tx4IJBppuunxPraAbhx4wbcbjeePXsmAAwfPlymQb4qF0cIAisKKwtzAssjqwMB4SdlM0BKQuDBgwdgKeSbYyyFkyZNEgp98uTJRp5DEKg4rU0gWFrJAEUPUabC0OoirUmQR2fXrl2T0yS+RzB//nyxPkMhU0UrAFSSIHA0JkNEKj2TldeeAzLVykb70u4BPxsIWQAsDkM/m4ET7jfrAVkPyP7XmN7/GksYdBm24H/YMA59TpFnsgAAAABJRU5ErkJggg==" id="8954"/></item><item><costume name="Eins9" center-x="32" center-y="32" image="data:image/png;base64,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" id="8955"/></item><item><costume name="Null0" center-x="32" center-y="32" image="data:image/png;base64,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" id="8956"/></item><item><costume name="Null1" center-x="32" center-y="32" image="data:image/png;base64,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" id="8957"/></item><item><costume name="Null2" center-x="32" center-y="32" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAHP0lEQVR4Xu2adYhWTRTGn9fuAluxsVAExQRRwQDBQFFswS4MxAIDxUZMVFTsDjAQ9C/FQlHBRLGwO7FzP34Dc9lddz/fe+8764L3wOLi3pk788w553nOmRtLSkpK0j9ssQiAyAOiEIhywD+cAxUlwYgFIhaIWCBigYgF/mEEIhqMaDCiQfc0+O3bNz1+/FiPHj1SgQIFVLFiReXNmzdTZB6nOQDnevLkifbt26c9e/bo2bNnKlu2rPr166eWLVsqf/78isVivwHx5csXXb16VRcuXFChQoXUpEkTlShRwglgzgB4+/atjh49qjVr1ujYsWP68OGDACRLliyqVq2a2rZtq969e6tmzZopQHj9+rUZs3r1aj18+FA5cuTQgAEDNHbsWCcgJByAnz9/6vz581qyZIkOHz6sV69emY2ntqxZs6pGjRpatGiRmjdvrnfv3unkyZNat26dDh06pI8fP3pD8ACeq1evXsK9IKEA4Lr79+/XlClTdPPmTf369et/F4z7161bV3PnztXu3bu1c+dO4QHJAQOobt26mWdKlSqVeQFg85s3b9a0adNMsktuNs7T8gRCgrzAmB8/fqQYx+ZbtWqlOXPmqFatWmnmi7CIJMQDcNf169ebzSd3eTZesGBBlS9fXtevXxcgxWOMK1y4sNq3b68JEyaocuXKJne4sNAAfP78WWvXrtXUqVPN5q1xenXq1NHo0aOVL18+DRs27DfPSGtDJL1mzZqpf//+atGihYoUKeLk5O27QwGAS5OwBg4caDZnXZzNs/j58+erdu3aBhgAIrujCdIzgOrTp48mTpyokiVLOjv1FOEZRgo/ePDALBi6s5vPli2b2rRpo3nz5ql69ermXfzt3r17xlMOHjyoFy9eCJp8//69txZcvEuXLlq8eLGKFSvmwtvTnDOwB3z9+lWzZ882CYrfMTaBwFm6dKmqVKmS4oWAQK4ANMTRpUuXzPjnz597z+EtO3bsMDohoywwAHB29+7ddf/+fbNWEhcSd9OmTWrUqNEf109ChC7h9+/fv5vn8R4ED+GSK1euP86RiAcCAfDmzRsNHz5c27dv97g+d+7cZuFjxoxR9uzZ41obzIDbX7582XseENED6IOMMN8AoPR27dplsjqixZ4+mRsd4EesIJSWL1+ucePGCTbBSKAkwcmTJxsZ7Np8A0BB07dvXyNzbeKDqpCw7dq1873ep0+fqnPnzkYGW2vatKm2bt2q0qVL+57P7wDfACB1yfxkcXtiAIL2z5Mnj9/3GxCnT5+umTNnerkAZYg3AYRr8wUA7o97LliwwIt9+HrLli2moAlqe/fuNcLHCinyCQwxYsQI51rAFwCfPn0yoocNW4PzSYZI3qBG4UTBQxVpc0qHDh2MbqAf4NJ8AUDJyklRudmFDh061PB+Wo2NeBcOJUJ/K1euFF6GwQbkgQYNGsQ7TaDnfAFA3AMA3R0LAFqfkAhrCKBBgwaZvgCGLF62bJnJNy4tNAAjR47UwoULQ6/xzJkz6tGjh27fvm3mggLJA+gKl+YLALQ7p7Rt2zbPA3r27GmKnLCcjTRmLiuKUIUzZsww5bBL8wUAlRyximtaDUDJS06oVKlSqHVeu3bNuPvZs2fNPAgilCWCyKX5AoBN06zE7W1zI2fOnKbyQxmy6KBGAxQmOHHihOdd48ePN2Hg0nwBwEKuXLmijh076tatW966yNQksXLlygVeK+Vyp06dUlBhpgSA0hcxBPXZHh6XHLNmzRKUSOwGMU6+V69eunv3rhnOPJw+IefSfHsAizl37py6du2qO3fueO5KyxqBlLoPEO/i8SD6/7ZJwg3SihUrTMnt0gIBQOVGLU/3xtby1O9k7VGjRgXyAmoBmqrWq2ikAmjjxo1d7j/4V2IXL140p0P2toxADY8spovrx5DYXJcx1hrlNXTr6krMvieQBzAYSiTuk7fEaIRMmjTJ/PjRBcQ912THjx/3QmrIkCGmWxRvc8UP4MmfDQwAk3CBSS7gX2sVKlTQxo0bzYVmvPUBl6DWm5iH3iIhhg5wbaEAIP7xguS1PJuuX7++Bg8ebG5ziGUquvQ0Al0hWmCcuO0xZBQDAG4oAJgAJqCvZ0tZM2ksZq6+aY9VrVrVNEm5BSaeEU7WyB10iQHw9OnTXi4BMG6auBlybaEBYIEHDhwwJ067O/X9H2AQx9AaPQO6RjY0yPg0QV6+fOmVwfyN+8ANGzaoePHirvcf3gNYIbKYniAnyZcgQb+6YfO0w1atWqXWrVs733xCQsCuEio7cuSIAYJw4PaH//MDRtGiRU3igxIz9b1AekdDQqNVfuPGDcMMp06dMqqRzi9fiODyqQEh40OZ5Apqf+KeZkhGWUJyQHqLZdNwPD+EBlneKkc7BnYoU6aMGjZsaBgjaC0RFDCnAARdVEaOiwAIcz2ekSfl6l2RB0Qe4IeoXfnhX5w3CoEoBKIQcP+5/F8M8T+++j/JA0F99F3kMAAAAABJRU5ErkJggg==" id="8958"/></item><item><costume name="Null3" center-x="32" center-y="32" image="data:image/png;base64,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" id="8959"/></item><item><costume name="Null4" center-x="32" center-y="32" image="data:image/png;base64,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" id="8960"/></item><item><costume name="Null5" center-x="32" center-y="32" image="data:image/png;base64,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" id="8961"/></item><item><costume name="Null6" center-x="32" center-y="32" image="data:image/png;base64,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" id="8962"/></item><item><costume name="Null7" center-x="32" center-y="32" image="data:image/png;base64,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" id="8963"/></item><item><costume name="Null8" center-x="32" center-y="32" image="data:image/png;base64,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" id="8964"/></item><item><costume name="Null9" center-x="32" center-y="32" image="data:image/png;base64,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" id="8965"/></item></list></costumes><sounds><list struct="atomic" id="8966"></list></sounds><blocks><block-definition s="$brush set properties" type="command" category="lists"><comment x="0" y="0" w="140.33333433333345" collapsed="false">Sets the default values of the properties of a ImageSprite.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>myProperties</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>myMessages</l><block s="reportNewList"><list></list></block></block><custom-block s="$brush set property %txt to %s" scope="local"><l>typeOfData</l><l>empty</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageWidth</l><block s="reportGetImageAttribute"><l><option>width</option></l><l><option>current</option></l></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageHeight</l><block s="reportGetImageAttribute"><l><option>height</option></l><l><option>current</option></l></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>minValue</l><l>not set</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>maxValue</l><l>not set</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>backColorRed</l><l>225</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>backColorGreen</l><l>225</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>backColorBlue</l><l>255</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineStyle</l><l>continuous</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineWidth</l><l>1</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineColorRed</l><l>0</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineColorGreen</l><l>0</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineColorBlue</l><l>0</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>surfaceColorRed</l><l>180</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>surfaceColorGreen</l><l>180</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>surfaceColorBlue</l><l>180</l></custom-block></script></block></script></block-definition><block-definition s="$brush set property %&apos;name&apos; to %&apos;value&apos;" type="command" category="lists"><comment x="0" y="0" w="148.80952380952377" collapsed="false">Sets the value of an existing property or inserts it anew.</comment><header></header><code></code><translations></translations><inputs><input type="%txt">imageWidth<options>typeOfData&#xD;imageWidth&#xD;imageHeight&#xD;minValue&#xD;maxValue&#xD;backColorRed&#xD;backColorGreen&#xD;backColorBlue&#xD;lineStyle&#xD;lineWidth&#xD;lineColorRed&#xD;lineColorGreen&#xD;lineColorBlue&#xD;lineStyle&#xD;lineWidth&#xD;lineColorRed&#xD;lineColorGreen&#xD;lineColorBlue&#xD;surfaceColorRed&#xD;surfaceColorGreen&#xD;surfaceColorBlue</options></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>done</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>name</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="name"/><l> </l></block></block></block><block s="doSetVar"><l>done</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>h</l><block s="reportAtomicMap"><block s="reifyReporter"><script><block s="doIf"><block s="reportEquals"><block var="name"/><block s="reportListItem"><l>1</l><l/></block></block><script><block s="doReplaceInList"><l>2</l><l/><block var="value"/></block><block s="doSetVar"><l>done</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script><list></list></block><block var="myProperties"/></block></block><block s="doIf"><block s="reportNot"><block var="done"/></block><script><block s="doAddToList"><block s="reportNewList"><list><block var="name"/><block var="value"/></list></block><block var="myProperties"/></block></script></block></script></block></script></block-definition><block-definition s="$brush property %&apos;name&apos;" type="reporter" category="lists"><comment x="0" y="0" w="95" collapsed="false">Reads the value of an existing property.</comment><header></header><code></code><translations></translations><inputs><input type="%txt">imageWidth<options>typeOfData&#xD;imageWidth&#xD;imageHeight&#xD;minValue&#xD;maxValue&#xD;backColorRed&#xD;backColorGreen&#xD;backColorBlue&#xD;lineStyle&#xD;lineWidth&#xD;lineColorRed&#xD;lineColorGreen&#xD;lineColorBlue&#xD;surfaceColorRed&#xD;surfaceColorGreen&#xD;surfaceColorBlue</options></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>result</l><l>not found</l></block><block s="doSetVar"><l>name</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="name"/><l> </l></block></block></block><block s="doSetVar"><l>h</l><block s="reportAtomicMap"><block s="reifyReporter"><script><block s="doIf"><block s="reportEquals"><block var="name"/><block s="reportListItem"><l>1</l><l/></block></block><script><block s="doSetVar"><l>result</l><block s="reportListItem"><l>2</l><l/></block></block></script></block></script><list></list></block><block var="myProperties"/></block></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="$brush add %&apos;color&apos; image of %&apos;data&apos; min/max %&apos;min&apos; %&apos;max&apos; log? %&apos;log&apos;" type="command" category="looks"><comment x="0" y="0" w="99.16666666666669" collapsed="false">Generates an image from the FITS or RGB data of the DataSprite in gray or false colors</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">gray<options>gray&#xD;false-color&#xD;RGB</options></input><input type="%s">myData</input><input type="%n">0</input><input type="%n">32000</input><input type="%b">false</input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>pixels</l><l>source</l><l>gray</l></list></block><block s="doSetVar"><l>color</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="color"/><l> </l></block></block></block><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>FITS</l></block><script><block s="doIfElse"><block s="reportEquals"><block var="color"/><l>gray</l></block><script><block s="doSetVar"><l>gray</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doSetVar"><l>gray</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doSetVar"><l>pixels</l><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>min</l><l>max</l><l>gray</l><l>log</l></list><l>var result=[], i=1, n, value, interval = (max-min)/8;&#xD;while(i&lt;= data.length()) {&#xD;  value = data.at(i);&#xD;  n = value;&#xD;  if(value&lt;=min) n=min+1;&#xD;  if(value&gt;max) n =max;&#xD;  if(log) n = Math.round(Math.log(n-min)/Math.log(max-min)*255);&#xD;  else n = Math.round((n-min)/(max-min)*255);&#xD;  if(gray) result.push(new List([n,n,n,255]));&#xD;  else { // result.push(new List([n,255-n,Math.round(255-n/2),255]));&#xD;    if(value&lt;=min) {result.push(new List([0,0,0,255]));}&#xD;       else if(value&lt;min+interval) result.push(new List([0,0,n,255]));&#xD;            else if(value&lt;min+2*interval) result.push(new List([0,n,n,255]));&#xD;                 else if(value&lt;min+3*interval) result.push(new List([n,0,n,255]));&#xD;                      else if(value&lt;min+4*interval) result.push(new List([0,n,0,255]));&#xD;                           else if(value&lt;min+5*interval) result.push(new List([n,0,0,n]));&#xD;                                else if(value&lt;min+6*interval) result.push(new List([n,n/2,0,255]));&#xD;                                     else if(value&lt;min+7*interval) result.push(new List([n,n,0,255]));&#xD;                                          else if(value&lt;min+8*interval) result.push(new List([n,n,n,255]));&#xD;                                               else result.push(new List([255,255,255,255]));&#xD;     }&#xD;  i = i+1;&#xD;  }&#xD;return new List(result);</l></block><list><block var="source"/><block var="min"/><block var="max"/><block var="gray"/><block var="log"/></list></block></block><custom-block s="$brush new costume width %n height %n %br color %n %n %n" scope="local"><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><l>255</l><l>225</l><l>205</l></custom-block><block s="doSwitchToCostume"><block var="pixels"/></block></script><script><block s="doIfElse"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>RGB</l></block><script><block s="doIfElse"><block s="reportEquals"><block var="color"/><l>RGB</l></block><script><custom-block s="$brush new costume width %n height %n %br color %n %n %n" scope="local"><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><l>225</l><l>225</l><l>255</l></custom-block><block s="doSwitchToCostume"><block var="source"/></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="color"/><l>gray</l></block><script><block s="doSetVar"><l>gray</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doSetVar"><l>gray</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doSetVar"><l>pixels</l><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>min</l><l>max</l><l>gray</l><l>log</l></list><l>var result=[], i=1, n, value, interval = (max-min)/8;&#xD;while(i&lt;= data.length()) {&#xD;  value = (data.at(i).at(1)+data.at(i).at(2)+data.at(i).at(3))/3;&#xD;  n = value;&#xD;  if(value&lt;=min) n=min+1;&#xD;  if(value&gt;max) n =max;&#xD;  if(log) n = Math.round(Math.log(n-min)/Math.log(max-min)*255);&#xD;  else n = Math.round((n-min)/(max-min)*255);&#xD;  if(gray) result.push(new List([n,n,n,255]));&#xD;  else { // result.push(new List([n,255-n,Math.round(255-n/2),255]));&#xD;    if(value&lt;=min) {result.push(new List([0,0,0,255]));}&#xD;       else if(value&lt;min+interval) result.push(new List([0,0,n,255]));&#xD;            else if(value&lt;min+2*interval) result.push(new List([0,n,n,255]));&#xD;                 else if(value&lt;min+3*interval) result.push(new List([n,0,n,255]));&#xD;                      else if(value&lt;min+4*interval) result.push(new List([0,n,0,255]));&#xD;                           else if(value&lt;min+5*interval) result.push(new List([n,0,0,n]));&#xD;                                else if(value&lt;min+6*interval) result.push(new List([n,n/2,0,255]));&#xD;                                     else if(value&lt;min+7*interval) result.push(new List([n,n,0,255]));&#xD;                                          else if(value&lt;min+8*interval) result.push(new List([n,n,n,255]));&#xD;                                               else result.push(new List([255,255,255,255]));&#xD;     }&#xD;  i = i+1;&#xD;  }&#xD;return new List(result);</l></block><list><block var="myData"/><block var="min"/><block var="max"/><block var="gray"/><block var="log"/></list></block></block><custom-block s="$brush new costume width %n height %n %br color %n %n %n" scope="local"><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><l>225</l><l>225</l><l>255</l></custom-block><block s="doSwitchToCostume"><block var="pixels"/></block></script></block></script><script><block s="doAddToList"><l>from "add image": image date required</l><block var="myMessages"/></block></script></block></script></block></script></block></script></block-definition><block-definition s="$brush image value of myData at %&apos;x&apos; %&apos;y&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="132.5" collapsed="false">Reads the data value at the position (x/y) of an image stored in myData.</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input></inputs><script><block s="doWarp"><script><block s="doIfElse"><block s="reportOr"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>RGB</l></block><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>FITS</l></block></block><script><block s="doSetVar"><l>x</l><block s="reportRound"><block var="x"/></block></block><block s="doSetVar"><l>y</l><block s="reportRound"><block var="y"/></block></block><block s="doIfElse"><block s="reportOr"><block s="reportOr"><block s="reportGreaterThan"><block var="x"/><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="reportGreaterThan"><block var="y"/><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block></block><block s="reportOr"><block s="reportLessThan"><block var="x"/><l>1</l></block><block s="reportLessThan"><block var="y"/><l>1</l></block></block></block><script><block s="doReport"><l>-1</l></block></script><script><block s="doReport"><block s="reportListItem"><block s="reportSum"><block var="x"/><block s="reportProduct"><block s="reportDifference"><block var="y"/><l>1</l></block><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block></block><block var="myData"/></block></block></script></block></script><script><block s="doAddToList"><l>from "image value in": operation only defined for image data</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: only defined for image data</l></block></script></block></script></block></script></block-definition><block-definition s="$brush RGB at %&apos;x&apos; %&apos;y&apos; of current costume" type="reporter" category="sensing"><comment x="0" y="0" w="216.74657534246577" collapsed="false">Reads the RGB value at the position (x/y) of the costume. JS-code-snippets copied from Snap!-code.</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;var pixel = ctx.getImageData(x,y,1,1);&#xD;return new List(new Array(pixel.data[0],pixel.data[1],pixel.data[2]));</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x"/><block var="y"/></list></block></block></script></block-definition><block-definition s="$brush set RGB at %&apos;x&apos; %&apos;y&apos; of current costume to %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Sets the RGB value al (x|y) on costume.</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input><input type="%s">255</input><input type="%n">180</input><input type="%n">100</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>r</l><l>g</l><l>b</l><l>x</l><l>y</l><l>costume</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = 1;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.moveTo(x,y);&#xD;ctx.lineTo(x+1,y);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block var="r"/><block var="g"/><block var="b"/><block var="x"/><block var="y"/><block s="reportGet"><l><option>costume</option></l></block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block-definition><block-definition s="$brush %&apos;data&apos; by mouse" type="reporter" category="sensing"><comment x="0" y="0" w="146.66666666666669" collapsed="false">Obtaining data with the mouse.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">image-value<options>image-value&#xD;costume-coordinates&#xD;slice-data&#xD;line-data&#xD;circle-data&#xD;brightness</options></input></inputs><script><block s="doDeclareVariables"><list><l>h</l><l>result</l><l>i</l><l>m</l><l>pixel</l><l>dist</l><l>dx</l><l>dy</l><l>points</l><l>x1</l><l>y1</l><l>x2</l><l>y2</l><l>x</l><l>y</l><l>p1</l><l>p2</l><l>w</l><l>h</l><l>secondCostume</l><l>ok</l><l>xold</l><l>yold</l><l>radius</l><l>sumOfValues</l><l>value</l><l>center</l><l>costume</l></list></block><block s="doSetVar"><l>data</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>costume-coordinates</l><comment w="90" collapsed="false">costume coordinates.</comment></block><script><block s="doWarp"><script><block s="doSetVar"><l>x</l><block s="reportSum"><block s="reportSum"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="reportMouseX"></block><block s="xPosition"></block></block><block s="getScale"></block></block></block><block s="reportQuotient"><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><l>2</l></block></block><l>1</l></block></block><block s="doSetVar"><l>y</l><block s="reportSum"><block s="reportSum"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="yPosition"></block><block s="reportMouseY"></block></block><block s="getScale"></block></block></block><block s="reportQuotient"><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><l>2</l></block></block><l>1</l></block></block><block s="doIfElse"><block s="reportOr"><block s="reportOr"><block s="reportGreaterThan"><block var="x"/><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="reportGreaterThan"><block var="y"/><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block></block><block s="reportOr"><block s="reportLessThan"><block var="x"/><l>1</l></block><block s="reportLessThan"><block var="y"/><l>1</l></block></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><script><block s="doReport"><block s="reportNewList"><list><block var="x"/><block var="y"/></list></block></block></script></block></script></block></script></block><block s="doIf"><block s="reportNot"><block s="reportOr"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>RGB</l></block><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>FITS</l></block></block></block><script><block s="doAddToList"><l>from "&lt;data&gt; by mouse": only defined for image data</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: only defined for image data</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>image-value</l></block><script><block s="doWarp"><script><block s="doSetVar"><l>x</l><block s="reportSum"><block s="reportSum"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="reportMouseX"></block><block s="xPosition"></block></block><block s="getScale"></block></block></block><block s="reportQuotient"><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><l>2</l></block></block><l>1</l></block></block><block s="doSetVar"><l>y</l><block s="reportSum"><block s="reportSum"><block s="reportProduct"><l>100</l><block s="reportQuotient"><block s="reportDifference"><block s="yPosition"></block><block s="reportMouseY"></block></block><block s="getScale"></block></block></block><block s="reportQuotient"><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><l>2</l></block></block><l>1</l></block></block><block s="doIfElse"><block s="reportOr"><block s="reportOr"><block s="reportGreaterThan"><block var="x"/><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="reportGreaterThan"><block var="y"/><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block></block><block s="reportOr"><block s="reportLessThan"><block var="x"/><l>1</l></block><block s="reportLessThan"><block var="y"/><l>1</l></block></block></block><script><block s="doReport"><l>-1</l></block></script><script><block s="doReport"><block s="reportListItem"><block s="reportSum"><block var="x"/><block s="reportProduct"><block s="reportDifference"><block var="y"/><l>1</l></block><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block></block><block var="myData"/></block></block></script></block></script></block></script><comment w="90" collapsed="false">image value</comment></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>line-data</l></block><script><block s="doWarp"><script><block s="doSetVar"><l>w</l><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="doSetVar"><l>h</l><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block><block s="doSetVar"><l>secondCostume</l><custom-block s="$brush copy of costume %obj" scope="local"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><custom-block s="$brush set line attributes style %txt width %n %br color %n %n %n" scope="local"><l>continuous</l><l>1</l><l>255</l><l>255</l><l>0</l></custom-block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doUntil"><block var="ok"/><script><block s="doIf"><block s="reportMouseDown"></block><script><block s="doSetVar"><l>p1</l><custom-block s="$brush %s by mouse" scope="local"><l>costume-coordinates</l></custom-block></block><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="p1"/></block><l>-1</l></block><block s="reportAnd"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportSum"><block var="w"/><l>1</l></block></block><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block var="p1"/></block><l>-1</l></block><block s="reportLessThan"><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportSum"><block var="h"/><l>1</l></block></block></block></block></block><script><block s="doSetVar"><l>xold</l><block s="reportListItem"><l>1</l><block var="p1"/></block></block><block s="doSetVar"><l>yold</l><block s="reportListItem"><l>2</l><block var="p1"/></block></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doUntil"><block var="ok"/><script><block s="doSetVar"><l>p2</l><custom-block s="$brush %s by mouse" scope="local"><l>costume-coordinates</l></custom-block></block><block s="doIf"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="p2"/></block><block var="xold"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportListItem"><l>2</l><block var="p2"/></block><block var="yold"/></block></block></block><script><block s="doSwitchToCostume"><block var="secondCostume"/></block><block s="doSetVar"><l>costume</l><custom-block s="$brush copy of costume %obj" scope="local"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><block s="doSwitchToCostume"><block var="costume"/></block><block s="doSetVar"><l>xold</l><block s="reportListItem"><l>1</l><block var="p2"/></block></block><block s="doSetVar"><l>yold</l><block s="reportListItem"><l>2</l><block var="p2"/></block></block><custom-block s="$brush draw line from %n %n to %n %n" scope="local"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportListItem"><l>1</l><block var="p2"/></block><block s="reportListItem"><l>2</l><block var="p2"/></block></custom-block></script></block><block s="doIf"><block s="reportNot"><block s="reportMouseDown"></block></block><script><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="p2"/></block><l>-1</l></block><block s="reportAnd"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="p2"/></block><block s="reportSum"><block var="w"/><l>1</l></block></block><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block var="p2"/></block><l>-1</l></block><block s="reportLessThan"><block s="reportListItem"><l>2</l><block var="p2"/></block><block s="reportSum"><block var="h"/><l>1</l></block></block></block></block></block><script><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doSwitchToCostume"><block var="secondCostume"/></block><block s="doReport"><block s="reportNewList"><list><block var="p1"/><block var="p2"/></list></block></block></script><comment w="90" collapsed="false">line data</comment></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>slice-data</l></block><script><block s="doSetVar"><l>costume</l><custom-block s="$brush copy of costume %obj" scope="local"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doSetVar"><l>points</l><custom-block s="$brush %s by mouse" scope="local"><l>line-data</l></custom-block></block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doWarp"><script><block s="doSetVar"><l>x1</l><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="points"/></block></block></block><block s="doSetVar"><l>y1</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="points"/></block></block></block><block s="doSetVar"><l>x2</l><block s="reportListItem"><l>1</l><block s="reportListItem"><l>2</l><block var="points"/></block></block></block><block s="doSetVar"><l>y2</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="points"/></block></block></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>dist</l><block s="reportRound"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportSum"><block s="reportProduct"><block s="reportDifference"><block var="x1"/><block var="x2"/></block><block s="reportDifference"><block var="x1"/><block var="x2"/></block></block><block s="reportProduct"><block s="reportDifference"><block var="y1"/><block var="y2"/></block><block s="reportDifference"><block var="y1"/><block var="y2"/></block></block></block></block></block></block><block s="doSetVar"><l>dx</l><block s="reportQuotient"><block s="reportDifference"><block var="x2"/><block var="x1"/></block><block var="dist"/></block></block><block s="doSetVar"><l>dy</l><block s="reportQuotient"><block s="reportDifference"><block var="y2"/><block var="y1"/></block><block var="dist"/></block></block><block s="doSetVar"><l>i</l><l>0</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block var="dist"/></block><script><block s="doAddToList"><block s="reportNewList"><list><block var="i"/><custom-block s="$brush image value of myData at %n %n" scope="local"><block s="reportSum"><block var="x1"/><block s="reportProduct"><block var="i"/><block var="dx"/></block></block><block s="reportSum"><block var="y1"/><block s="reportProduct"><block var="i"/><block var="dy"/></block></block></custom-block></list></block><block var="result"/></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doSwitchToCostume"><block var="costume"/></block><block s="doReport"><block var="result"/></block></script></block></script><comment w="90" collapsed="false">slice data</comment></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>circle-data</l><comment w="90" collapsed="false">circle data</comment></block><script><block s="doWarp"><script><block s="doSetVar"><l>w</l><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="doSetVar"><l>h</l><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block><block s="doSetVar"><l>secondCostume</l><custom-block s="$brush copy of costume %obj" scope="local"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><block s="doSetVar"><l>costume</l><custom-block s="$brush copy of costume %obj" scope="local"><block s="reportGet"><l><option>costume</option></l></block></custom-block></block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doUntil"><block var="ok"/><script><block s="doIf"><block s="reportMouseDown"></block><script><block s="doSetVar"><l>p1</l><custom-block s="$brush %s by mouse" scope="local"><l>costume-coordinates</l></custom-block></block><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="p1"/></block><l>-1</l></block><block s="reportAnd"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportSum"><block var="w"/><l>1</l></block></block><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block var="p1"/></block><l>-1</l></block><block s="reportLessThan"><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportSum"><block var="h"/><l>1</l></block></block></block></block></block><script><block s="doSetVar"><l>xold</l><block s="reportListItem"><l>1</l><block var="p1"/></block></block><block s="doSetVar"><l>yold</l><block s="reportListItem"><l>2</l><block var="p1"/></block></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></block><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doUntil"><block var="ok"/><script><block s="doSetVar"><l>p2</l><custom-block s="$brush %s by mouse" scope="local"><l>costume-coordinates</l></custom-block></block><block s="doSetVar"><l>radius</l><block s="reportRound"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportSum"><block s="reportProduct"><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>1</l><block var="p2"/></block></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>1</l><block var="p2"/></block></block></block><block s="reportProduct"><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p2"/></block></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p2"/></block></block></block></block></block></block></block><block s="doSetVar"><l>costume</l><custom-block s="$brush copy of costume %obj" scope="local"><block var="secondCostume"/></custom-block></block><block s="doSwitchToCostume"><block var="costume"/></block><custom-block s="$brush set line attributes style %txt width %n %br color %n %n %n" scope="local"><l>continuous</l><l>3</l><l>255</l><l>255</l><l>0</l></custom-block><custom-block s="$brush draw line from %n %n to %n %n" scope="local"><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="p1"/></block><l>1</l></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="p1"/></block><l>1</l></block><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p1"/></block></custom-block><custom-block s="$brush set line attributes style %txt width %n %br color %n %n %n" scope="local"><l>continuous</l><l>1</l><l>255</l><l>255</l><l>0</l></custom-block><custom-block s="$brush draw circle center %n %n radius %n" scope="local"><block s="reportListItem"><l>1</l><block var="p1"/></block><block s="reportListItem"><l>2</l><block var="p1"/></block><block var="radius"/></custom-block><block s="doIf"><block s="reportNot"><block s="reportMouseDown"></block></block><script><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>1</l><block var="p2"/></block><l>-1</l></block><block s="reportAnd"><block s="reportLessThan"><block s="reportListItem"><l>1</l><block var="p2"/></block><block s="reportSum"><block var="w"/><l>1</l></block></block><block s="reportAnd"><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block var="p2"/></block><l>-1</l></block><block s="reportLessThan"><block s="reportListItem"><l>2</l><block var="p2"/></block><block s="reportSum"><block var="h"/><l>1</l></block></block></block></block></block><script><block s="doSetVar"><l>ok</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block></script></block><block s="doRun"><block s="reifyScript"><script><block s="doSetVar"><l></l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><list><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>draggable?</option></l></block></autolambda><list></list></block></list></block><block s="doSwitchToCostume"><block var="secondCostume"/></block><block s="doReport"><block s="reportNewList"><list><block var="p1"/><block var="radius"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="data"/><l><option>whitespace</option></l></block></block><l>brightness</l></block><script><block s="doSetVar"><l>h</l><custom-block s="$brush %s by mouse" scope="local"><l>circle-data</l></custom-block></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>xpos</l><l>ypos</l><l>r</l><l>width</l><l>height</l><l>typeOfData</l></list><l>&#xD;function imageValue(x,y){&#xD;  if((x&gt;width)||(x&lt;1)||(y&gt;height)||(y&lt;1)) return 0;&#xD;  else return data.at(x+(y-1)*width);&#xD;  }&#xD;&#xD;var value,sumOfValues=0,points=0,y=ypos-r,x;&#xD;&#xD;if(typeOfData==&apos;FITS&apos;){ &#xD;  sumOfValues=0;&#xD;  while((y&lt;=ypos+r) &amp;&amp; (y&lt;=height)){&#xD;    x=xpos-r;&#xD;    while((x&lt;=xpos+r) &amp;&amp; (x&lt;=width)){&#xD;      if(r&gt;Math.sqrt((xpos-x)*(xpos-x)+(ypos-y)*ypos-y)){&#xD;        sumOfValues=sumOfValues+imageValue(Math.round(x),Math.round(y));&#xD;        points++;&#xD;        }&#xD;      x++;&#xD;      }&#xD;    y++;&#xD;    }&#xD;  return new List([sumOfValues,points]);    &#xD;  }&#xD;else{&#xD;  sumOfValues=[0,0,0];&#xD;  while((y&lt;=ypos+r) &amp;&amp; (y&lt;=height)){&#xD;    x=xpos-r;&#xD;    while((x&lt;=xpos+r) &amp;&amp; (x&lt;=width)){&#xD;      if(r&gt;Math.sqrt((xpos-x)*(xpos-x)+(ypos-y)*ypos-y)){&#xD;        value=imageValue(Math.round(x),Math.round(y));&#xD;        sumOfValues=[sumOfValues[0]+value.at(1),sumOfValues[1]+value.at(2),&#xD;                     sumOfValues[2]+value.at(3)];&#xD;        points++;&#xD;        }&#xD;      x++;&#xD;      }&#xD;    y++;&#xD;    }&#xD;  }&#xD;return new List([new List(sumOfValues),points]);    </l></block><list><block var="myData"/><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="h"/></block></block><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="h"/></block></block><block s="reportListItem"><l>2</l><block var="h"/></block><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block></list></block></block></script><comment w="90" collapsed="false">brightness</comment></block></script></block-definition><block-definition s="$brush copy of costume %&apos;costume&apos;" type="reporter" category="looks"><comment x="0" y="0" w="90" collapsed="false">Returns the copy of the current sprite-costume.</comment><header></header><code></code><translations></translations><inputs><input type="%obj"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>costume</l></list><l>return costume.copy();</l></block><list><block var="costume"/></list></block></block></script></block-definition><block-definition s="$brush set line attributes style %&apos;style&apos; width %&apos;width&apos; $nl color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><comment x="0" y="0" w="90" collapsed="false">Sets line style and color for DataSprite diagrams.</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">continuous<options>continuous&#xD;dashed&#xD;dash-dot&#xD;dot-dot</options></input><input type="%n">1</input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>style</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="style"/><l> </l></block></block></block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineStyle</l><block var="style"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineWidth</l><block var="width"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineColorRed</l><block var="r"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineColorGreen</l><block var="g"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>lineColorBlue</l><block var="b"/></custom-block></script></block></script></block-definition><block-definition s="$brush draw circle center %&apos;x&apos; %&apos;y&apos; radius %&apos;radius&apos;" type="command" category="looks"><comment x="0" y="0" w="90" collapsed="false">Draws a circle on present costume using line properties. Attention: JS coordinates are used.</comment><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">20</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>radius</l><l>w</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = w;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.arc(x,y,radius,0,6.283185307179586476925286766559);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x"/><block var="y"/><block var="radius"/><custom-block s="$brush property %txt" scope="local"><l>lineWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>backColorRed</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorGreen</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block-definition><block-definition s="$brush draw line from %&apos;x1&apos; %&apos;y1&apos; to %&apos;x2&apos; %&apos;y2&apos;" type="command" category="looks"><comment x="0" y="0" w="90" collapsed="false">Draws a line on present costume using line properties. Attention: JS coordinates are used.&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%n">10</input><input type="%n">10</input><input type="%n">100</input><input type="%n">100</input></inputs><script><block s="doWarp"><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x1</l><l>y1</l><l>x2</l><l>y2</l><l>w</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = w;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.moveTo(x1,y1);&#xD;ctx.lineTo(x2,y2);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x1"/><block var="y1"/><block var="x2"/><block var="y2"/><custom-block s="$brush property %txt" scope="local"><l>lineWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorRed</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorGreen</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block></script></block-definition><block-definition s="$brush draw rectangle from %&apos;x1&apos; %&apos;y1&apos; to %&apos;x2&apos; %&apos;y2&apos;" type="command" category="looks"><comment x="0" y="0" w="90" collapsed="false">Draws a rectangle on present costume using line properties. Attention: JS coordinates are used. </comment><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">200</input><input type="%n">200</input></inputs><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>w</l><l>h</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportGreaterThan"><block var="x1"/><block var="x2"/></block><script><block s="doSetVar"><l>x</l><block var="x2"/></block><block s="doSetVar"><l>w</l><block s="reportDifference"><block var="x1"/><block var="x2"/></block></block></script><script><block s="doSetVar"><l>x</l><block var="x1"/></block><block s="doSetVar"><l>w</l><block s="reportDifference"><block var="x2"/><block var="x1"/></block></block></script></block><block s="doIfElse"><block s="reportGreaterThan"><block var="y2"/><block var="y1"/></block><script><block s="doSetVar"><l>y</l><block var="y2"/></block><block s="doSetVar"><l>h</l><block s="reportDifference"><block var="y2"/><block var="y1"/></block></block></script><script><block s="doSetVar"><l>y</l><block var="y1"/></block><block s="doSetVar"><l>h</l><block s="reportDifference"><block var="y1"/><block var="y2"/></block></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x1</l><l>y1</l><l>w</l><l>h</l><l>width</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = width;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.strokeRect(x1,y1,w,h);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x"/><block var="y"/><block var="w"/><block var="h"/><custom-block s="$brush property %txt" scope="local"><l>lineWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorRed</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorGreen</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block></script></block-definition><block-definition s="$brush fill recangle from %&apos;x1&apos; %&apos;y1&apos; to %&apos;x2&apos; %&apos;y2&apos;" type="command" category="looks"><comment x="0" y="0" w="164.6575342465754" collapsed="false">Fills a rectangle on present costume using surface properties. Attention: JS coordinates are used.</comment><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">200</input><input type="%n">150</input></inputs><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>w</l><l>h</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportGreaterThan"><block var="x1"/><block var="x2"/></block><script><block s="doSetVar"><l>x</l><block var="x2"/></block><block s="doSetVar"><l>w</l><block s="reportDifference"><block var="x1"/><block var="x2"/></block></block></script><script><block s="doSetVar"><l>x</l><block var="x1"/></block><block s="doSetVar"><l>w</l><block s="reportDifference"><block var="x2"/><block var="x1"/></block></block></script></block><block s="doIfElse"><block s="reportGreaterThan"><block var="y2"/><block var="y1"/></block><script><block s="doSetVar"><l>y</l><block var="y2"/></block><block s="doSetVar"><l>h</l><block s="reportDifference"><block var="y2"/><block var="y1"/></block></block></script><script><block s="doSetVar"><l>y</l><block var="y1"/></block><block s="doSetVar"><l>h</l><block s="reportDifference"><block var="y1"/><block var="y2"/></block></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x1</l><l>y1</l><l>w</l><l>h</l><l>width</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = width;&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.fillRect(x1,y1,w,h);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x"/><block var="y"/><block var="w"/><block var="h"/><custom-block s="$brush property %txt" scope="local"><l>lineWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>surfaceColorRed</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>surfaceColorGreen</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>surfaceColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block></script></block-definition><block-definition s="$brush fill circle center %&apos;x&apos; %&apos;y&apos; radius %&apos;radius&apos;" type="command" category="looks"><comment x="0" y="0" w="72.19178082191787" collapsed="false">Fills a circle on present costume using surface properties. Attention: JS coordinates are used.</comment><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">20</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>radius</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.arc(x,y,radius,0,6.283185307179586476925286766559);&#xD;ctx.closePath();&#xD;ctx.fill();</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x"/><block var="y"/><block var="radius"/><l></l><custom-block s="$brush property %txt" scope="local"><l>surfaceColorRed</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>surfaceColorGreen</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>surfaceColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block-definition><block-definition s="draw text %&apos;text&apos; at %&apos;x&apos; %&apos;y&apos; height %&apos;height&apos; horizontal %&apos;horizontal&apos;" type="command" category="looks"><comment x="0" y="0" w="90" collapsed="false">Draws a text on present costume using line properties. Attention: JS coordinates are used.</comment><header></header><code></code><translations></translations><inputs><input type="%txt">my text</input><input type="%n">100</input><input type="%n">50</input><input type="%n">12</input><input type="%b">true</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>text</l><l>height</l><l>horizontal</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.font = ""+height+"px sans-serif";&#xD;if(horizontal)ctx.fillText(text,x,y);&#xD;else{&#xD;  ctx.rotate(-Math.PI/2);  &#xD;  ctx.fillText(text,-y,x);&#xD;  ctx.rotate(Math.PI/2);  &#xD;  }&#xD;ctx.closePath();&#xD;ctx.fill();</l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="x"/><block var="y"/><block var="text"/><block var="height"/><block var="horizontal"/><custom-block s="$brush property %txt" scope="local"><l>lineColorRed</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorGreen</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>lineColorBlue</l></custom-block></list></block><block s="doSwitchToCostume"><block s="reportGet"><l><option>costume</option></l></block></block></script></block-definition><block-definition s="$brush set surface color to %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">220</input><input type="%n">200</input><input type="%n">180</input></inputs><script><block s="doWarp"><script><custom-block s="$brush set property %txt to %s" scope="local"><l>surfaceColorRed</l><block var="r"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>surfaceColorGreen</l><block var="g"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>surfaceColorBlue</l><block var="b"/></custom-block></script></block></script></block-definition><block-definition s="$brush set image value of myData at %&apos;x&apos; %&apos;y&apos; to %&apos;value&apos;" type="command" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Sets the value at (x|y) in myData</comment><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input><input type="%s"></input></inputs><script><block s="doWarp"><script><block s="doIfElse"><block s="reportIsA"><block var="myData"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportOr"><block s="reportAnd"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="myData"/></block><l><option>list</option></l></block><block s="reportIsA"><block var="value"/><l><option>list</option></l></block></block><block s="reportAnd"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="myData"/></block><l><option>number</option></l></block><block s="reportIsA"><block var="value"/><l><option>number</option></l></block></block></block><script><block s="doSetVar"><l>x</l><block s="reportRound"><block var="x"/></block></block><block s="doSetVar"><l>y</l><block s="reportRound"><block var="y"/></block></block><block s="doIf"><block s="reportAnd"><block s="reportAnd"><block s="reportLessThan"><block var="x"/><block s="reportSum"><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><l>1</l></block></block><block s="reportLessThan"><block var="y"/><block s="reportSum"><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><l>1</l></block></block></block><block s="reportAnd"><block s="reportGreaterThan"><block var="x"/><l>0</l></block><block s="reportGreaterThan"><block var="y"/><l>0</l></block></block></block><script><block s="doReplaceInList"><block s="reportSum"><block var="x"/><block s="reportProduct"><block s="reportDifference"><block var="y"/><l>1</l></block><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block></block><block var="myData"/><block var="value"/></block></script></block></script><script><block s="doAddToList"><l>from "set image value": wrong data format</l><block var="myMessages"/></block></script></block></script><script><block s="doAddToList"><l>from "set image value": wrong data format</l><block var="myMessages"/></block></script></block></script></block></script></block-definition><block-definition s="$brush brightness around %&apos;x&apos; %&apos;y&apos; radius %&apos;r&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="94.28571428571428" collapsed="false">Reports the brightness of a FITS or RGB image around x|y in a circle with radius r.</comment><header></header><code></code><translations></translations><inputs><input type="%n">100</input><input type="%n">100</input><input type="%n">10</input></inputs><script><block s="doIfElse"><block s="reportAnd"><block s="reportIsA"><block var="myData"/><l><option>list</option></l></block><block s="reportOr"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>FITS</l></block><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>RGB</l></block></block></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>xpos</l><l>ypos</l><l>r</l><l>width</l><l>height</l><l>typeOfData</l></list><l>&#xD;function imageValue(x,y){&#xD;  if((x&gt;width)||(x&lt;1)||(y&gt;height)||(y&lt;1)) return 0;&#xD;  else if(typeOfData==&apos;FITS&apos;) return data.at(x+(y-1)*width);&#xD;       else{&#xD;         h=data.at(x+(y-1)*width);&#xD;         return(h.at(1)+h.at(2)+h.at(3))/3;&#xD;         } &#xD;  }&#xD;&#xD;var xpos=Number(xpos), ypos=Number(ypos), r=Number(r), width=Number(width), height=Number(height),&#xD;    value,sumOfValues,points,x,y,h;&#xD;&#xD;sumOfValues=0;&#xD;points=0;&#xD;y=ypos-r;&#xD;if(y&lt;1) y=1;&#xD;while((y&lt;=ypos+r) &amp;&amp; (y&lt;=height)){&#xD;  x=xpos-r;&#xD;  if(x&lt;1) x=1;&#xD;  while((x&lt;=xpos+r) &amp;&amp; (x&lt;=width)){&#xD;    if(r&gt;Math.sqrt((xpos-x)*(xpos-x)+(ypos-y)*ypos-y)){&#xD;      sumOfValues=sumOfValues+imageValue(Math.round(x),Math.round(y));&#xD;      points++;&#xD;      }&#xD;    x++;&#xD;    }&#xD;  y++;&#xD;  }&#xD;return new List([sumOfValues,points]);    </l></block><list><block var="myData"/><block var="x"/><block var="y"/><block var="r"/><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block></list></block></block></script><script><block s="doAddToList"><l>from "brightness around": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block-definition><block-definition s="$brush new clone of ImageSprite" type="reporter" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>newSprite</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>newSprite</l><block s="newClone"><l><option>myself</option></l></block></block><block s="doTellTo"><block var="newSprite"/><block s="reifyScript"><script><block s="doSetVar"><l>myData</l><block s="reportNewList"><list></list></block></block><custom-block s="$brush set properties" scope="local"></custom-block><block s="gotoXY"><block s="reportRandom"><l>-100</l><l>-50</l></block><block s="reportRandom"><l>100</l><l>150</l></block></block><custom-block s="$brush new costume width %n height %n %br color %n %n %n" scope="local"><l>350</l><l>300</l><l>225</l><l>225</l><l>255</l></custom-block></script><list></list></block><list></list></block><block s="doReport"><block var="newSprite"/></block></script></block></script></block-definition><block-definition s="$brush affine transformation of %&apos;imagedata&apos; width %&apos;width&apos; height %&apos;height&apos; $nl by %&apos;originalPoints&apos; --&gt; %&apos;targetPoints&apos;" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">Applies an affine transformation to an image.&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%n"></input><input type="%n"></input><input type="%l"></input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>a11</l><l>a12</l><l>a13</l><l>a21</l><l>a22</l><l>a23</l><l>S</l><l>P1</l><l>P2</l><l>P3</l><l>Q1</l><l>Q2</l><l>Q3</l><l>data</l><l>imagetype</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="imagedata"/><l>myData</l></block><script><block s="doIfElse"><block s="reportOr"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>FITS</l></block><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>RGB</l></block></block><script><block s="doSetVar"><l>data</l><block var="myData"/></block><block s="doSetVar"><l>width</l><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="doSetVar"><l>height</l><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block></script><script><block s="doAddToList"><l>from "affine transformation": no image data stored</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: no imagedata stored</l></block></script></block></script><script><block s="doSetVar"><l>data</l><block var="imagedata"/></block></script></block><block s="doIfElse"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="data"/></block><l><option>list</option></l></block><script><block s="doSetVar"><l>imagetype</l><l>RGB</l></block></script><script><block s="doSetVar"><l>imagetype</l><l>FITS</l></block></script></block></script><script><block s="doAddToList"><l>from "affine transformation": no image data stored</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: illegal data format</l></block></script></block><block s="doSetVar"><l>P1</l><block s="reportListItem"><l>1</l><block var="originalPoints"/></block></block><block s="doSetVar"><l>P2</l><block s="reportListItem"><l>2</l><block var="originalPoints"/></block></block><block s="doSetVar"><l>P3</l><block s="reportListItem"><l>3</l><block var="originalPoints"/></block></block><block s="doSetVar"><l>Q1</l><block s="reportListItem"><l>1</l><block var="targetPoints"/></block></block><block s="doSetVar"><l>Q2</l><block s="reportListItem"><l>2</l><block var="targetPoints"/></block></block><block s="doSetVar"><l>Q3</l><block s="reportListItem"><l>3</l><block var="targetPoints"/></block></block><block s="doSetVar"><l>S</l><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>2</l><block var="P2"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>2</l><block var="P3"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>2</l><block var="P1"/></block></block></block></block></block></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="S"/><l>0</l></block></block><script><block s="doSetVar"><l>a11</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q2"/></block><block s="reportListItem"><l>1</l><block var="Q3"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q3"/></block><block s="reportListItem"><l>1</l><block var="Q1"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q1"/></block><block s="reportListItem"><l>1</l><block var="Q2"/></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a12</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q3"/></block><block s="reportListItem"><l>1</l><block var="Q2"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q1"/></block><block s="reportListItem"><l>1</l><block var="Q3"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="Q2"/></block><block s="reportListItem"><l>1</l><block var="Q1"/></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a21</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q2"/></block><block s="reportListItem"><l>2</l><block var="Q3"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q3"/></block><block s="reportListItem"><l>2</l><block var="Q1"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q1"/></block><block s="reportListItem"><l>2</l><block var="Q2"/></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a22</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q3"/></block><block s="reportListItem"><l>2</l><block var="Q2"/></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q1"/></block><block s="reportListItem"><l>2</l><block var="Q3"/></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="Q2"/></block><block s="reportListItem"><l>2</l><block var="Q1"/></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a13</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>1</l><block var="Q2"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>1</l><block var="Q3"/></block></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>1</l><block var="Q3"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>1</l><block var="Q1"/></block></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>1</l><block var="Q1"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>1</l><block var="Q2"/></block></block></block></block></block></block><block var="S"/></block></block><block s="doSetVar"><l>a23</l><block s="reportQuotient"><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P1"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>2</l><block var="Q2"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>2</l><block var="Q3"/></block></block></block></block><block s="reportSum"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P2"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>2</l><block var="Q3"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P3"/></block><block s="reportListItem"><l>2</l><block var="Q1"/></block></block></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="P3"/></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P2"/></block><block s="reportListItem"><l>2</l><block var="Q1"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="P1"/></block><block s="reportListItem"><l>2</l><block var="Q2"/></block></block></block></block></block></block><block var="S"/></block></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a11</l><l>a12</l><l>a13</l><l>a21</l><l>a22</l><l>a23</l><l>w</l><l>h</l><l>data</l><l>typeOfData</l></list><l>var x,y,xnew,ynew,value,newdata=[];&#xD;for(var i=1;i&lt;=data.contents.length;i++) &#xD;  if(typeOfData==&apos;FITS&apos;) newdata.push(0); else newdata.push(new List([0,0,0,255]));&#xD;for(var y=1;y&lt;=h;y++)&#xD;  for(var x=1;x&lt;=w;x++){&#xD;    value= data.at(x+(y-1)*w);&#xD;    xnew=Math.round(a11*x+a12*y+a13);&#xD;    ynew=Math.round(a21*x+a22*y+a23);&#xD;    if((xnew&gt;0) &amp;&amp; (xnew&lt;=w) &amp;&amp; (ynew&gt;0) &amp;&amp; (ynew&lt;=h)) newdata[xnew-1+(ynew-1)*w-1] = value; &#xD;}&#xD;return new List(newdata);</l></block><list><block var="a11"/><block var="a12"/><block var="a13"/><block var="a21"/><block var="a22"/><block var="a23"/><block var="width"/><block var="height"/><block var="data"/><block var="imagetype"/></list></block></block></script></block></script></block></script></block-definition><block-definition s="$brush read file with filepicker" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">reads a file from filesystem</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>ready</l></list></block><block s="doSetVar"><l>ready</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var inp = document.createElement(&apos;input&apos;), ide = this.parent.parent, result=0, done=false;&#xD;&#xD;  function userImport() {&#xD;&#xD;        function txtOnlyMsg(ftype, anyway) {&#xD;            ide.confirm(&#xD;                localize(&#xD;                    &apos;Snap! can only import "text" files.\n&apos; +&#xD;                        &apos;You selected a file of type "&apos; +&#xD;                        ftype +&#xD;                        &apos;".&apos;&#xD;                ) + &apos;\n\n&apos; + localize(&apos;Open anyway?&apos;),&#xD;                &apos;Unable to import&apos;,&#xD;                anyway // callback&#xD;            );&#xD;        }&#xD;&#xD;        function readText(aFile) {&#xD;            var frd = new FileReader(),&#xD;                ext = aFile.name.split(&apos;.&apos;).pop().toLowerCase();&#xD;&#xD;            function isTextFile(aFile) {&#xD;                // special cases for Windows&#xD;                // check the file extension for text-like-ness&#xD;                return aFile.type.indexOf(&apos;text&apos;) !== -1 ||&#xD;                    contains([&apos;txt&apos;, &apos;csv&apos;, &apos;xml&apos;, &apos;json&apos;, &apos;tsv&apos;], ext);&#xD;            }&#xD;&#xD;            function isType(aFile, string) {&#xD;                return aFile.type.indexOf(string) !== -1 || (ext === string);&#xD;            }&#xD;&#xD;            frd.onloadend = function (e) {&#xD;                done=true;&#xD;                if (isType(aFile, &apos;csv&apos;)) {result=Process.prototype.parseCSV(e.target.result);}&#xD;                else if (isType(aFile, &apos;json&apos;)) { result=Process.prototype.parseJSON(e.target.result);}&#xD;                     else { result=e.target.result;}&#xD;            };&#xD;&#xD;            if (isTextFile(aFile)) {&#xD;                frd.readAsText(aFile);&#xD;            } else {&#xD;               txtOnlyMsg(&#xD;                    aFile.type,&#xD;                    function () {frd.readAsText(aFile); }&#xD;                );&#xD;            }&#xD;        }&#xD;&#xD;        document.body.removeChild(inp);&#xD;        ide.filePicker = null;&#xD;        if (inp.files.length &gt; 0) {&#xD;            readText(inp.files[inp.files.length - 1]);&#xD;        }&#xD;    }&#xD;&#xD;    if (ide.filePicker) {&#xD;        document.body.removeChild(ide.filePicker);&#xD;        ide.filePicker = null;&#xD;    }&#xD;    inp.type = &apos;file&apos;;&#xD;    inp.style.color = "transparent";&#xD;    inp.style.backgroundColor = "transparent";&#xD;    inp.style.border = "none";&#xD;    inp.style.outline = "none";&#xD;    inp.style.position = "absolute";&#xD;    inp.style.top = "0px";&#xD;    inp.style.left = "0px";&#xD;    inp.style.width = "0px";&#xD;    inp.style.height = "0px";&#xD;    inp.style.display = "none";&#xD;    inp.addEventListener(&#xD;        "change",&#xD;        userImport,&#xD;        false&#xD;    );&#xD;    document.body.appendChild(inp);&#xD;    ide.filePicker = inp;&#xD;    inp.click();&#xD;return function(){return new List([done,result]);};</l></block><list></list></block></block><block s="doWaitUntil"><block s="reportListItem"><l>1</l><block s="evaluate"><block var="ready"/><list></list></block></block></block><block s="doReport"><block s="reportListItem"><l>2</l><block s="evaluate"><block var="ready"/><list></list></block></block></block></script></block-definition><block-definition s="$brush %&apos;selection&apos; of colum %&apos;n&apos; of %&apos;table&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Determines a property of a list.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">min<options>min&#xD;max</options></input><input type="%n">1</input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>typeOfData</l><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="table"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="table"/></block></script></block><block s="doIfElse"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="source"/></block><l><option>list</option></l></block><script><block s="doSetVar"><l>typeOfData</l><l>table</l></block></script><script><block s="doSetVar"><l>typeOfData</l><l>list</l></block></script></block><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>n</l><l>typeOfData</l></list><l>var min,max,isNumber,c,i,k,value;&#xD;if(data.length()==0) return new List([0,0]);&#xD;&#xD;i=1;&#xD;if(typeOfData=="list") min=data.at(1); else min=data.at(1).at(n);&#xD;max=min;&#xD;while(i &lt;= data.length()) {&#xD;  if(typeOfData=="list") value = data.at(i); else value=data.at(i).at(n);&#xD;  if(typeof(value)=="number") isNumber=true;&#xD;  else {&#xD;    if(typeof(value)=="string"){&#xD;      isNumber=true;&#xD;      k=0;&#xD;      while((k&lt;value.length) &amp;&amp; isNumber){&#xD;        c=value.charAt(k);&#xD;        if((c&lt;&apos;0&apos;) || (c&gt;&apos;9&apos;))&#xD;          if((c!=&apos;E&apos;) &amp;&amp; (c!=&apos;e&apos;) &amp;&amp; (c!=&apos;+&apos;) &amp;&amp; (c!=&apos;-&apos;)&amp;&amp; (c!=&apos;.&apos;) &amp;&amp; (c!=&apos;,&apos;))&#xD;            isNumber=false;&#xD;        k++;&#xD;        }&#xD;       }&#xD;     else isNumber=false;&#xD;     }&#xD;  if(isNumber){&#xD;    value=Number(value);&#xD;    if(min&gt;value) {min=value;}&#xD;    if(max&lt;value) {max=value;}&#xD;    }&#xD;  i++;&#xD;  }&#xD;return new List([min,max]);     &#xD;</l></block><list><block var="source"/><block var="n"/><block var="typeOfData"/></list></block></block><block s="doSetVar"><l>selection</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="selection"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>min</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>max</l></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="result"/></block></block></script></block></script><script><block s="doAddToList"><l>from "&lt;feature&gt; of column": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$brush new costume width %&apos;width&apos; height %&apos;height&apos; $nl color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">350</input><input type="%n">300</input><input type="%n">225</input><input type="%n">225</input><input type="%n">255</input></inputs><script><block s="doWarp"><script><custom-block s="$brush set property %txt to %s" scope="local"><l>imageWidth</l><block var="width"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageHeight</l><block var="height"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>backColorRed</l><block var="r"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>backColorGreen</l><block var="g"/></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>backColorBlue</l><block var="b"/></custom-block><block s="doSwitchToCostume"><block s="evaluate"><block s="reportJSFunction"><list><l>w</l><l>h</l><l>r</l><l>g</l><l>b</l></list><l>var newCostume=new Costume();&#xD;newCostume.contents.width = w;&#xD;newCostume.contents.height = h;&#xD;var ctx = newCostume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.strokeStyle = new Color(0,0,0).toString();&#xD;ctx.fillRect(0,0,w,h);&#xD;ctx.strokeRect(0,0,w,h);&#xD;ctx.closePath();&#xD;ctx.fill();&#xD;ctx.stroke();&#xD;newCostume.rotationCenter=new Point(w/2,h/2);&#xD;return newCostume;</l></block><list><block var="width"/><block var="height"/><block var="r"/><block var="g"/><block var="b"/></list></block></block></script></block></script></block-definition><block-definition s="$brush import %&apos;choice&apos; from %&apos;source&apos; to myData" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">costume-(RGB)-data<options>costume-(RGB)-data&#xD;FITS-data</options></input><input type="%s">current-costume</input></inputs><script><block s="doDeclareVariables"><list><l>header</l><l>imagedata</l><l>h</l><l>min</l><l>max</l><l>w</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>FITS-data</l></block><script><block s="doIfElse"><block s="reportIsA"><block var="source"/><l><option>text</option></l></block><script><block s="doSetVar"><l>imagedata</l><block s="evaluate"><block s="reportJSFunction"><list><l>FITSdata</l></list><l>function strToInt(high,low){&#xD;  var left = high.toString(2), right = low.toString(2);&#xD;  while(left.length&lt;8) left="0"+left;&#xD;  while(right.length&lt;8) right="0"+right;&#xD;  var both = left+right, result = 0;&#xD;  var factor = 1;&#xD;  for(var i=15; i&gt;=0;i--) {&#xD;    if(both.charAt(i)==&apos;1&apos;) result = result+factor;&#xD;    factor = factor*2;&#xD;    }&#xD;  return result;&#xD;  }&#xD;&#xD;var width=0, height=0, numberlength=0; minValue=32768, maxValue=-32769,header=[], pixelvalues=[],&#xD;    keyword=&apos;&apos;, kwvalue=&apos;&apos;, indexInLine=0, i=0, insideString=false, finished=false, c=&apos; &apos;, n=0,&#xD;    mask = Math.pow(2,7)-1; &#xD;i=0;&#xD;while((i&lt;2880) &amp;&amp; (i&lt;FITSdata.length)){&#xD;  indexInLine=1; keyword=&apos;&apos;; c = FITSdata.charAt(i); &#xD;  while((c!=&apos; &apos;) &amp;&amp; (c!=&apos;=&apos;) &amp;&amp; (i&lt;2880) &amp;&amp; (i&lt;FITSdata.length) &amp;&amp; (indexInLine&lt;=80)){&#xD;    keyword = keyword+c;i++;indexInLine++; c = FITSdata.charAt(i);&#xD;    } &#xD;  while(((c==&apos; &apos;) || (c==&apos;=&apos;)) &amp;&amp; (i&lt;2880) &amp;&amp; (i&lt;FITSdata.length) &amp;&amp; (indexInLine&lt;=80)){&#xD;    i++; indexInLine++; c = FITSdata.charAt(i);&#xD;    }&#xD;  kwvalue=&apos;&apos;; insideString=false; finished=false;&#xD;  while(!finished){&#xD;    kwvalue=kwvalue+FITSdata.charAt(i);&#xD;    if(c=="&apos;") insideString = !insideString;&#xD;    i++; indexInLine++;&#xD;    c = FITSdata.charAt(i);&#xD;    if(insideString) finished=(i&gt;=2880) || (i&gt;=FITSdata.length) || (indexInLine&gt;80);&#xD;    else finished= (c==&apos; &apos;) || (i&gt;=2880) || (i&gt;=FITSdata.length) || (indexInLine&gt;80);&#xD;    }&#xD;  if(keyword.length&gt;0) header.push(new List([keyword,kwvalue]));&#xD;  if(keyword==&apos;NAXIS1&apos;) width=kwvalue;&#xD;  if(keyword==&apos;NAXIS2&apos;) height=kwvalue;&#xD;  if(keyword==&apos;BITPIX&apos;) numberlength=kwvalue;&#xD;  while((i&lt;2880) &amp;&amp; (i&lt;FITSdata.length) &amp;&amp; (indexInLine&lt;=80)){&#xD;    i++; indexInLine++;&#xD;    }&#xD;  }&#xD;&#xD;if(numberlength==16){&#xD;  i=2880; &#xD;  while(i&lt;FITSdata.length-1){&#xD;    n = strToInt(FITSdata.charAt(i).charCodeAt(0),FITSdata.charAt(i+1).charCodeAt(0));&#xD;    //n = -(n &amp; mask) + (n &amp; &#126;mask);  &#xD;    pixelvalues.push(n);&#xD;    if(n&gt;maxValue) maxValue=n;&#xD;    if(n&lt;minValue) minValue=n;&#xD;    i = i+2;&#xD;    }&#xD; return new List([width,height,minValue,maxValue,new List(header),new List(pixelvalues)]);&#xD;  }&#xD;else return &apos;unsupported number format&apos;;</l></block><list><block var="source"/></list></block></block><block s="doSetVar"><l>myData</l><block s="reportListItem"><l>6</l><block var="imagedata"/></block></block><custom-block s="$brush set properties" scope="local"></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>typeOfData</l><l>FITS</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageWidth</l><block s="reportListItem"><l>1</l><block var="imagedata"/></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageHeight</l><block s="reportListItem"><l>2</l><block var="imagedata"/></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>minValue</l><block s="reportListItem"><l>3</l><block var="imagedata"/></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>maxValue</l><block s="reportListItem"><l>4</l><block var="imagedata"/></block></custom-block><block s="doSetVar"><l>header</l><block s="reportListItem"><l>5</l><block var="imagedata"/></block></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block s="reportListLength"><block var="header"/></block><l>0</l></block><block s="reportEquals"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="header"/></block></block><l></l></block></block><script><custom-block s="$brush set property %txt to %s" scope="local"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="header"/></block></block><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="header"/></block></block></custom-block><block s="doDeleteFromList"><l>1</l><block var="header"/></block></script></block></script><script><block s="doAddToList"><l>from "import from": FITS data have to be text</l><block var="myMessages"/></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>costume-(RGB)-data</l></block><script><block s="doIfElse"><block s="reportEquals"><block var="source"/><l>current-costume</l></block><script><block s="doSetVar"><l>source</l><block s="reportGet"><l><option>costume</option></l></block></block></script><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="source"/><l><option>costume</option></l></block></block><script><block s="doAddToList"><l>from "import from": import only from costumes</l><block var="myMessages"/></block></script></block></script></block><block s="doIf"><block s="reportIsA"><block var="source"/><l><option>costume</option></l></block><script><block s="doSetVar"><l>myData</l><block s="reportGetImageAttribute"><l><option>pixels</option></l><block var="source"/></block></block><custom-block s="$brush set properties" scope="local"></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>typeOfData</l><l>RGB</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageWidth</l><block s="reportGetImageAttribute"><l><option>width</option></l><block var="source"/></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageHeight</l><block s="reportGetImageAttribute"><l><option>height</option></l><block var="source"/></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>minValue</l><l>not set</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>maxValue</l><l>not set</l></custom-block></script></block></script></block></script></block></script></block-definition><block-definition s="$brush apply convolution kernel %&apos;kernel&apos; to myData" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>w</l><l>h</l><l>t</l><l>m</l><l>width</l><l>height</l><l>height</l></list></block><block s="doWarp"><script><block s="doIf"><block s="reportNot"><block s="reportOr"><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>FITS</l></block><block s="reportEquals"><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><l>RGB</l></block></block></block><script><block s="doAddToList"><l>from "apply convolution": wrong data type</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data type</l></block></script></block><block s="doIfElse"><custom-block s="$brush is %s a %s ?" scope="local"><block var="kernel"/><l>matrix</l></custom-block><script><block s="doSetVar"><l>h</l><block s="reportListLength"><block var="kernel"/></block></block><block s="doSetVar"><l>w</l><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="kernel"/></block></block></block><block s="doIfElse"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block var="w"/><block var="h"/></block></block><block s="reportOr"><block s="reportEquals"><block s="reportProduct"><l>2</l><block s="reportRound"><block s="reportQuotient"><block var="w"/><l>2</l></block></block></block><block var="w"/></block><block s="reportEquals"><block s="reportProduct"><l>2</l><block s="reportRound"><block s="reportQuotient"><block var="h"/><l>2</l></block></block></block><block var="h"/></block></block></block><script><block s="doAddToList"><l>from "apply convolution": wrong kernel</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong kernel</l></block></script><script><block s="doSetVar"><l>m</l><block s="reportRound"><block s="reportQuotient"><block var="w"/><l>2</l></block></block></block><block s="doSetVar"><l>width</l><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="doSetVar"><l>height</l><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>kernel</l><l>data</l><l>width</l><l>height</l><l>typeOfData</l><l>mIndex</l><l>kWidth</l></list><l>function getValue(x,y){&#xD;  if(typeOfData==&apos;FITS&apos;) return (data.at(x+(y-1)*width));&#xD;  if(typeOfData==&apos;RGB&apos;) return (data.at(x+(y-1)*width));&#xD;  if(typeOfData==&apos;table&apos;) return (data.at(y).at(x));&#xD;  }&#xD;&#xD;function getKernelValue(x,y){&#xD;  return (kernel.at(y).at(x));&#xD;&#xD;}&#xD;&#xD;var result=[],x,y,value,r,g,b,s,row;&#xD;width=Number(width); height=Number(height); mIndex=Number(mIndex);kWidth=Number(kWidth);&#xD;for(var y=1; y&lt;=height;y++){&#xD;  row=new List();&#xD;  for(var x=1;x&lt;=width;x++){&#xD;    if(typeOfData==&apos;FITS&apos;) value = 0; &#xD;    if(typeOfData==&apos;RGB&apos;){r=0;g=0;b=0;s=255};&#xD;    if(typeOfData==&apos;table&apos;) value=0;&#xD;    for(var ky=1;ky&lt;=kWidth;ky++)&#xD;      for(var kx=1;kx&lt;=kWidth;kx++)&#xD;         if((y-mIndex+ky&gt;0) &amp;&amp; (y-mIndex+ky&lt;=height) &amp;&amp; (x-mIndex+kx&gt;0) &amp;&amp; (x-mIndex+kx&lt;=width)){&#xD;           if(typeOfData==&apos;FITS&apos;) value = value+getValue(x-mIndex+kx,y-mIndex+ky)*getKernelValue(kx,ky);&#xD;           if(typeOfData==&apos;table&apos;) value = value+getValue(x-mIndex+kx,y-mIndex+ky)*getKernelValue(kx,ky);&#xD;           if(typeOfData==&apos;RGB&apos;){&#xD;             r = r + getValue(x-mIndex+kx,y-mIndex+ky).at(1)*getKernelValue(kx,ky);&#xD;             g = g + getValue(x-mIndex+kx,y-mIndex+ky).at(2)*getKernelValue(kx,ky);&#xD;             b = b + getValue(x-mIndex+kx,y-mIndex+ky).at(3)*getKernelValue(kx,ky);&#xD;             }&#xD;           }&#xD;    if(typeOfData==&apos;FITS&apos;) result.push(value); &#xD;    if(typeOfData==&apos;table&apos;) row.add(value); &#xD;    if(typeOfData==&apos;RGB&apos;) result.push(new List([r,g,b,s]));&#xD;    }&#xD;  if(typeOfData==&apos;table&apos;) result.push(row); &#xD;  }&#xD;return new List(result);</l></block><list><block var="kernel"/><block var="myData"/><block var="width"/><block var="height"/><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block><block var="m"/><block var="w"/></list></block></block></script></block></script><script><block s="doAddToList"><l>from "apply convolution": wrong kernel format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong kernel format</l></block></script></block></script></block></script></block-definition><block-definition s="$brush is %&apos;data&apos; a %&apos;choice&apos; ?" type="predicate" category="operators"><comment x="0" y="0" w="90" collapsed="false">Test on type of data.</comment><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%s" readonly="true">vector<options>vector&#xD;matrix&#xD;RGB-image&#xD;FITS-image</options></input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><block s="reportNot"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doIf"><block s="reportEquals"><block var="choice"/><l>vector</l></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="source"/></block><l><option>list</option></l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var result=true;&#xD;i=1;&#xD;while(result &amp;&amp; (i&lt;=data.length()))&#xD;{&#xD;  row=data.at(i);&#xD;  if(!(row instanceof List)) result=false;&#xD;  else if(row.length()!=1) result=false;&#xD;       else if(Number.isNaN(row.at(1))) result=false;&#xD;  i++;&#xD;}&#xD;return result;&#xD;</l></block><list><block var="source"/></list></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportIsA"><l></l><l><option>number</option></l></block></block></autolambda><list></list></block><block var="source"/></block><block s="reportBoolean"><l><bool>false</bool></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>matrix</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var result=true,row,i,j,width;&#xD;i=1;&#xD;while(result &amp;&amp; (i&lt;=data.length()))&#xD;{&#xD;  row=data.at(i);&#xD;  if(!(row instanceof List)) result=false;&#xD;  else&#xD;  {&#xD;    if(i==1) width = row.length();&#xD;    if(width==1) result=false;&#xD;    if(row.length()!=width) result=false;&#xD;    else&#xD;    {&#xD;      j=1;&#xD;      while(result &amp;&amp; (j&lt;=row.length()))&#xD;      {&#xD;        if(Number.isNaN(row.at(j))) result=false;&#xD;        j++;&#xD;      }&#xD;    }&#xD;  }&#xD;  i++;&#xD;}&#xD;return result;&#xD;</l></block><list><block var="source"/></list></block></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>RGB-image</l></block><script><block s="doIfElse"><custom-block s="$brush is %s a %s ?" scope="local"><block var="source"/><l>matrix</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="source"/></block></block><l>4</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>RGB-image</l></block><script><block s="doIfElse"><custom-block s="$brush is %s a %s ?" scope="local"><block var="source"/><l>vector</l></custom-block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="$arrowLeftOutline draw circle on %&apos;costume&apos; at %&apos;x&apos; %&apos;y&apos; $nl radius %&apos;radius&apos; linewidth %&apos;width&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>radius</l><l>w</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = Number(w);&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.arc(Number(x),Number(y),Number(radius),0,6.283185307179586476925286766559);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block var="costume"/><block var="x"/><block var="y"/><block var="radius"/><block var="width"/><block var="r"/><block var="g"/><block var="b"/></list></block></script></block-definition><block-definition s="$arrowLeftOutline draw rectangle on %&apos;costume&apos; from %&apos;x&apos; %&apos;y&apos; $nl width %&apos;width&apos; height %&apos;height&apos; linewidth %&apos;w&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>width</l><l>height</l><l>w</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = Number(w);&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.strokeRect(x,y,width,height);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block var="costume"/><block var="x"/><block var="y"/><block var="width"/><block var="height"/><block var="w"/><block var="r"/><block var="g"/><block var="b"/></list></block></script></block-definition><block-definition s="$arrowLeftOutline fill circle on %&apos;costume&apos; at %&apos;x&apos; %&apos;y&apos; $nl radius %&apos;radius&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>radius</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.arc(Number(x),Number(y),Number(radius),0,6.283185307179586476925286766559);&#xD;ctx.closePath();&#xD;ctx.fill();</l></block><list><block var="costume"/><block var="x"/><block var="y"/><block var="radius"/><block var="r"/><block var="g"/><block var="b"/></list></block></script></block-definition><block-definition s="$arrowLeftOutline fill rectangle on %&apos;costume&apos; from %&apos;x&apos; %&apos;y&apos; $nl width %&apos;width&apos; height %&apos;height&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>width</l><l>height</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.fillRect(x,y,width,height);&#xD;ctx.closePath();&#xD;ctx.fill();</l></block><list><block var="costume"/><block var="x"/><block var="y"/><block var="width"/><block var="height"/><block var="r"/><block var="g"/><block var="b"/></list></block></script></block-definition><block-definition s="$arrowLeftOutline draw line on %&apos;costume&apos; from %&apos;x&apos; %&apos;y&apos; $nl to %&apos;xe&apos; %&apos;ye&apos; linewidth %&apos;w&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>xe</l><l>ye</l><l>w</l><l>r</l><l>g</l><l>b</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.lineWidth = w;&#xD;ctx.strokeStyle = new Color(r,g,b).toString();&#xD;ctx.moveTo(x,y);&#xD;ctx.lineTo(xe,ye);&#xD;ctx.closePath();&#xD;ctx.stroke();</l></block><list><block var="costume"/><block var="x"/><block var="y"/><block var="xe"/><block var="ye"/><block var="w"/><block var="r"/><block var="g"/><block var="b"/></list></block></script></block-definition><block-definition s="$arrowLeftOutline draw text %&apos;text&apos; on %&apos;costume&apos; at %&apos;x&apos; %&apos;y&apos; $nl height %&apos;height&apos; horizontal %&apos;horizontal&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%txt"></input><input type="%s"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%b"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>x</l><l>y</l><l>height</l><l>horizontal</l><l>r</l><l>g</l><l>b</l><l>text</l></list><l>var ctx = costume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.font = ""+height+"px sans-serif";&#xD;if(horizontal)ctx.fillText(text,x,y);&#xD;else{&#xD;  ctx.rotate(-Math.PI/2);  &#xD;  ctx.fillText(text,-y,x);&#xD;  ctx.rotate(Math.PI/2);  &#xD;  }&#xD;ctx.closePath();&#xD;ctx.fill();</l></block><list><block var="costume"/><block var="x"/><block var="y"/><block var="height"/><block var="horizontal"/><block var="r"/><block var="g"/><block var="b"/><block var="text"/></list></block></script></block-definition><block-definition s="convert %&apos;pixels&apos; to FITS" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>pixels</l></list><l>var result=[],pixel;&#xD;for(var i=1;i&lt;=pixels.length();i++){&#xD;  pixel=pixels.at(i);  &#xD;  result.push((pixel.at(1)+pixel.at(2)+pixel.at(3))/3); &#xD;}&#xD;return new List(result);</l></block><list><block var="pixels"/></list></block></block></script></block-definition><block-definition s="switch to costume nr %&apos;nr&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doWarp"><script><block s="doSwitchToCostume"><block var="nr"/></block><custom-block s="$brush import %s from %s to myData" scope="local"><l>costume-(RGB)-data</l><l>current-costume</l></custom-block><block s="doSetVar"><l>myData</l><custom-block s="convert %l to FITS" scope="local"><block var="myData"/></custom-block></block><custom-block s="$brush set property %txt to %s" scope="local"><l>typeOfData</l><l>FITS</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageWidth</l><l>64</l></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageHeight</l><l>64</l></custom-block></script></block></script></block-definition><block-definition s="apply convolution kernel %&apos;nr&apos; to myself" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>myData</l><custom-block s="$brush apply convolution kernel %l to myData" scope="local"><block s="reportListItem"><block var="nr"/><block var="kernels"/></block></custom-block></block><block s="doSetVar"><l>myData</l><block s="evaluate"><block s="reportAttributeOf"><l><wish s="$storage normalize %s by %s" type="reporter" category="lists"></wish></l><l>DataSprite</l></block><list><block var="myData"/><l>max</l></list></block></block><block s="doSetVar"><l>myData</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportProduct"><l></l><l>255</l></block></autolambda><list></list></block><block var="myData"/></block></block><custom-block s="$brush add %txt image of %s min/max %n %n log? %b" scope="local"><l>gray</l><l>myData</l><l>0</l><l>255</l><l><bool>false</bool></l></custom-block></script></block></script></block-definition><block-definition s="apply reLU to myself" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>myData</l><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>typeOfData</l></list><l>var result=[],value;&#xD;&#xD;for(var i=1; i&lt;=data.length();i++){&#xD;  if(typeOfData==&apos;FITS&apos;) {&#xD;    if(data.at(i)&lt;0) result.push(0); else result.push(data.at(i));&#xD;  } &#xD;  else if(typeOfData==&apos;RGB&apos;){&#xD;         value = [];&#xD;         for(var j=1;j&lt;=4;j++)&#xD;           if(data.at(i).at(j)&lt;0) value.push(0); else value.push(data.at(i).at(j));&#xD;           result.push(new List(value));&#xD;       }&#xD;  }&#xD;return new List(result);</l></block><list><block var="myData"/><custom-block s="$brush property %txt" scope="local"><l>typeOfData</l></custom-block></list></block></block><custom-block s="$brush add %txt image of %s min/max %n %n log? %b" scope="local"><l>gray</l><l>myData</l><l>0</l><l>255</l><l><bool>false</bool></l></custom-block></script></block-definition><block-definition s="apply maxpooling to myself" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportAttributeOf"><l><wish s="max pooling of FITS data %l width %s height %s" type="reporter" category="other"></wish></l><l>DataSprite</l></block><list><block var="myData"/><custom-block s="$brush property %txt" scope="local"><l>imageWidth</l></custom-block><custom-block s="$brush property %txt" scope="local"><l>imageHeight</l></custom-block></list></block></block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageWidth</l><block s="reportListItem"><l>1</l><block var="result"/></block></custom-block><custom-block s="$brush set property %txt to %s" scope="local"><l>imageHeight</l><block s="reportListItem"><l>2</l><block var="result"/></block></custom-block><block s="doDeleteFromList"><l>1</l><block var="result"/></block><block s="doDeleteFromList"><l>1</l><block var="result"/></block><block s="doSetVar"><l>myData</l><block var="result"/></block><custom-block s="$brush add %txt image of %s min/max %n %n log? %b" scope="local"><l>gray</l><l>myData</l><l>0</l><l>255</l><l><bool>false</bool></l></custom-block></script></block></script></block-definition></blocks><variables><variable name="myData"><list struct="atomic" id="13049">255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,245,243,250,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,229,160,113,134,206,250,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,192,65,9,2,5,80,220,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,239,152,31,1,0,0,0,21,133,203,227,247,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,214,102,15,0,0,0,0,0,2,16,39,63,94,149,221,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,203,65,4,0,0,0,0,0,0,0,0,0,0,1,6,50,175,247,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,216,69,2,0,0,0,4,15,6,0,0,0,0,0,0,0,1,25,146,243,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,229,89,5,0,0,0,14,104,181,131,63,28,12,4,1,0,0,0,0,21,150,247,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,240,115,6,0,0,1,26,149,241,255,249,225,190,160,135,100,35,2,0,0,0,21,164,250,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,251,161,18,0,0,0,18,152,247,255,255,255,255,255,255,255,251,201,71,4,0,0,1,35,187,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,49,1,0,0,9,129,242,255,255,255,255,255,255,255,255,255,254,216,72,2,0,0,2,65,218,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,101,4,0,0,4,97,237,255,255,255,255,255,255,255,255,255,255,255,254,210,56,2,0,0,7,117,244,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,175,17,0,0,1,50,211,255,255,255,255,255,255,255,255,255,255,255,255,255,254,190,35,1,0,0,27,188,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,238,85,1,0,0,16,158,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,249,142,13,0,0,2,91,241,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,201,35,0,0,1,84,238,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,229,73,1,0,0,26,195,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,161,13,0,0,14,163,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,168,16,0,0,4,133,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,137,4,0,0,36,203,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,235,65,0,0,0,82,241,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,128,3,0,0,55,219,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,118,2,0,0,52,215,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,124,1,0,0,63,225,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,144,6,0,0,37,196,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,122,1,0,0,60,225,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,148,7,0,0,33,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,128,2,0,0,42,211,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,137,5,0,0,37,196,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,154,9,0,0,17,173,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,197,58,1,0,0,51,213,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,198,31,0,0,3,111,249,255,255,255,255,255,255,255,255,255,255,255,255,255,254,238,185,106,30,3,0,0,1,90,240,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,235,77,1,0,0,48,219,255,255,255,255,255,255,255,255,255,255,255,255,245,188,87,23,3,0,0,0,0,19,175,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,144,9,0,0,11,157,255,255,255,255,255,255,255,255,255,255,254,224,125,28,2,0,0,0,0,1,23,134,242,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,211,42,0,0,1,78,241,255,255,255,255,255,255,255,255,254,206,78,8,0,0,0,0,0,11,72,176,242,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,248,108,2,0,0,16,165,253,255,255,255,255,255,254,245,188,56,2,0,0,0,1,17,70,156,233,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,191,24,0,0,0,40,185,214,193,163,140,125,112,84,29,2,0,0,1,11,71,169,233,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,100,2,0,0,2,29,47,29,13,5,2,1,0,0,0,0,0,23,133,228,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,209,44,1,0,0,0,0,0,0,0,0,0,0,0,0,1,24,158,247,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,172,23,0,0,0,0,0,0,0,0,0,1,2,15,62,174,249,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246,151,41,7,2,3,8,19,38,62,80,98,124,170,224,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,206,148,125,129,145,174,203,224,240,250,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255</list></variable><variable name="myProperties"><list id="13050"><item><list struct="atomic" id="13051">typeOfData,FITS</list></item><item><list struct="atomic" id="13052">imageWidth,64</list></item><item><list struct="atomic" id="13053">imageHeight,64</list></item><item><list struct="atomic" id="13054">minValue,not set</list></item><item><list struct="atomic" id="13055">maxValue,not set</list></item><item><list struct="atomic" id="13056">backColorRed,225</list></item><item><list struct="atomic" id="13057">backColorGreen,225</list></item><item><list struct="atomic" id="13058">backColorBlue,255</list></item><item><list struct="atomic" id="13059">lineStyle,continuous</list></item><item><list struct="atomic" id="13060">lineWidth,1</list></item><item><list struct="atomic" id="13061">lineColorRed,0</list></item><item><list struct="atomic" id="13062">lineColorGreen,0</list></item><item><list struct="atomic" id="13063">lineColorBlue,0</list></item><item><list struct="atomic" id="13064">surfaceColorRed,180</list></item><item><list struct="atomic" id="13065">surfaceColorGreen,180</list></item><item><list struct="atomic" id="13066">surfaceColorBlue,180</list></item></list></variable><variable name="myMessages"><list struct="atomic" id="13067"></list></variable></variables><scripts><script x="15.000000000000002" y="98.44642857142856"><block s="receiveGo"></block><block s="gotoXY"><l>50</l><l>250</l></block><block s="setScale"><l>200</l></block></script><script x="180.60058493750003" y="107.48809523809526"><block s="receiveMessage"><l>delete all clones</l></block><block s="removeClone"></block></script><script x="17.5" y="196.07142857142858"><block s="receiveMessage"><l>next image</l></block></script><script x="24.642857142857146" y="383.07142857142856"><block s="doWaitUntil"><block var="ready for next process"/></block><custom-block s="switch to costume nr %n" scope="local"><block s="reportRandom"><l>1</l><l>20</l></block></custom-block><block s="doBroadcast"><l>analyse image</l></block></script></scripts></sprite><sprite name="NeuralNetSprite" idx="10" x="55" y="-250" heading="270" scale="1" volume="100" pan="0" rotation="1" draggable="false" costume="0" color="0,25.24499999999991,252.45,1" pen="tip" id="13089"><wear><costume name="" center-x="100" center-y="50" image="data:image/png;base64,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" id="13090"/></wear><costumes><list id="13091"><item><costume name="NeuralNetSpriteIcon(2)" center-x="25" center-y="25" image="data:image/png;base64,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" id="13092"/></item></list></costumes><sounds><list struct="atomic" id="13093"></list></sounds><blocks><block-definition s="$gears set properties" type="command" category="lists"><comment x="0" y="0" w="140.33333433333345" collapsed="false">Sets the default values of the properties of a NeuralNet.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>myProperties</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>myMessages</l><block s="reportNewList"><list></list></block></block><custom-block s="$gears set property %txt to %s" scope="local"><l>typeOfData</l><l>empty</l></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>imageWidth</l><block s="reportGetImageAttribute"><l><option>width</option></l><l><option>current</option></l></block></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>imageHeight</l><block s="reportGetImageAttribute"><l><option>height</option></l><l><option>current</option></l></block></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>backColorRed</l><l>255</l></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>backColorGreen</l><l>225</l></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>backColorBlue</l><l>205</l></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>layers</l><l>0</l></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>layerWidth</l><l>0</l></custom-block></script></block></script></block-definition><block-definition s="$gears set property %&apos;name&apos; to %&apos;value&apos;" type="command" category="lists"><comment x="0" y="0" w="148.80952380952377" collapsed="false">Sets the value of an existing property or inserts it anew.</comment><header></header><code></code><translations></translations><inputs><input type="%txt">layers<options>typeOfData&#xD;imageWidth&#xD;imageHeight&#xD;backColorRed&#xD;backColorGreen&#xD;backColorBlue&#xD;layerWidth&#xD;layers</options></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>done</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>name</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="name"/><l> </l></block></block></block><block s="doSetVar"><l>done</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>h</l><block s="reportAtomicMap"><block s="reifyReporter"><script><block s="doIf"><block s="reportEquals"><block var="name"/><block s="reportListItem"><l>1</l><l/></block></block><script><block s="doReplaceInList"><l>2</l><l/><block var="value"/></block><block s="doSetVar"><l>done</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script><list></list></block><block var="myProperties"/></block></block><block s="doIf"><block s="reportNot"><block var="done"/></block><script><block s="doAddToList"><block s="reportNewList"><list><block var="name"/><block var="value"/></list></block><block var="myProperties"/></block></script></block></script></block></script></block-definition><block-definition s="$gears property %&apos;name&apos;" type="reporter" category="lists"><comment x="0" y="0" w="95" collapsed="false">Reads the value of an existing property.</comment><header></header><code></code><translations></translations><inputs><input type="%txt">layers<options>typeOfData&#xD;imageWidth&#xD;imageHeight&#xD;backColorRed&#xD;backColorGreen&#xD;backColorBlue&#xD;layerWidth&#xD;layers</options></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>h</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>result</l><l>not found</l></block><block s="doSetVar"><l>name</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="name"/><l> </l></block></block></block><block s="doSetVar"><l>h</l><block s="reportAtomicMap"><block s="reifyReporter"><script><block s="doIf"><block s="reportEquals"><block var="name"/><block s="reportListItem"><l>1</l><l/></block></block><script><block s="doSetVar"><l>result</l><block s="reportListItem"><l>2</l><l/></block></block></script></block></script><list></list></block><block var="myProperties"/></block></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="$gears softmax of %&apos;data&apos;" type="reporter" category="operators"><comment x="0" y="0" w="95.511811023622" collapsed="false">Returns a by softmax normalized list of values.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>n</l><l>sum</l><l>result</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>n</l><block s="reportListLength"><block var="data"/></block></block><block s="doSetVar"><l>sum</l><l>0</l></block><block s="doFor"><l>i</l><l>1</l><block var="n"/><script><block s="doChangeVar"><l>sum</l><block s="reportMonadic"><l><option>e^</option></l><block s="reportListItem"><block var="i"/><block var="data"/></block></block></block></script></block><block s="doReport"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportQuotient"><block s="reportMonadic"><l><option>e^</option></l><l></l></block><block var="sum"/></block></autolambda><list></list></block><block var="data"/></block></block></script></block></script></block-definition><block-definition s="$gears apply convolution kernel %&apos;kernel&apos; to %&apos;typeOfData&apos; %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="98.33333333333333" collapsed="false">Applies a convolution to a table with FITS, RBG, or table values</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s" readonly="true">image<options>image&#xD;table</options></input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>w</l><l>h</l><l>t</l><l>m</l><l>source</l><l>width</l><l>height</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doIfElse"><custom-block s="$gears is %s a %s" scope="local"><block var="data"/><l>matrix</l></custom-block><script><block s="doSetVar"><l>source</l><block var="data"/></block></script><script><block s="doAddToList"><l>from "apply convolution kernel": wrong type of input data, only numbers allowed</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong  type of input data</l></block></script></block></script></block><block s="doIfElse"><block s="reportAnd"><block s="reportIsA"><block var="source"/><l><option>list</option></l></block><custom-block s="$gears is %s a %s" scope="local"><block var="kernel"/><l>matrix</l></custom-block></block><script><block s="doSetVar"><l>h</l><block s="reportListLength"><block var="kernel"/></block></block><block s="doSetVar"><l>w</l><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="kernel"/></block></block></block><block s="doIfElse"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block var="w"/><block var="h"/></block></block><block s="reportOr"><block s="reportEquals"><block s="reportProduct"><l>2</l><block s="reportRound"><block s="reportQuotient"><block var="w"/><l>2</l></block></block></block><block var="w"/></block><block s="reportEquals"><block s="reportProduct"><l>2</l><block s="reportRound"><block s="reportQuotient"><block var="h"/><l>2</l></block></block></block><block var="h"/></block></block></block><script><block s="doAddToList"><l>from "apply convolution kernel": wrong kernel</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong kernel</l></block></script><script><block s="doSetVar"><l>typeOfData</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="typeOfData"/><l> </l></block></block></block><block s="doSetVar"><l>m</l><block s="reportRound"><block s="reportQuotient"><block var="w"/><l>2</l></block></block></block><block s="doIfElse"><block s="reportEquals"><block var="typeOfData"/><l>image</l></block><script><block s="doSetVar"><l>width</l><custom-block s="$gears property %txt" scope="local"><l>width</l></custom-block></block><block s="doSetVar"><l>height</l><custom-block s="$gears property %txt" scope="local"><l>height</l></custom-block></block><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="source"/></block><l><option>number</option></l></block><script><block s="doSetVar"><l>t</l><l>FITS</l></block></script><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="source"/></block><l><option>list</option></l></block><script><block s="doSetVar"><l>t</l><l>RGB</l></block></script><script><block s="doAddToList"><l>from "apply convolution kernel": wrong data format, images required</l><block var="myMessages"/></block><block s="doReport"><l>ERROR wrong data format</l></block></script></block></script></block></script><script><block s="doSetVar"><l>t</l><l>table</l></block><block s="doSetVar"><l>width</l><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="source"/></block></block></block><block s="doSetVar"><l>height</l><block s="reportListLength"><block var="source"/></block></block></script></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>kernel</l><l>data</l><l>width</l><l>height</l><l>typeOfData</l><l>mIndex</l><l>kWidth</l></list><l>function getValue(x,y){&#xD;  if(typeOfData==&apos;FITS&apos;) return (data.at(x+(y-1)*width));&#xD;  if(typeOfData==&apos;RGB&apos;) return (data.at(x+(y-1)*width));&#xD;  if(typeOfData==&apos;table&apos;) return (data.at(y).at(x));&#xD;  }&#xD;&#xD;function getKernelValue(x,y){&#xD;  return (kernel.at(y).at(x));&#xD;&#xD;}&#xD;&#xD;var result=[],x,y,value,r,g,b,s,row;&#xD;width=Number(width); height=Number(height); mIndex=Number(mIndex);kWidth=Number(kWidth);&#xD;for(var y=1; y&lt;=height;y++){&#xD;  row=new List();&#xD;  for(var x=1;x&lt;=width;x++){&#xD;    if(typeOfData==&apos;FITS&apos;) value = 0; &#xD;    if(typeOfData==&apos;RGB&apos;){r=0;g=0;b=0;s=255};&#xD;    if(typeOfData==&apos;table&apos;) value=0;&#xD;    for(var ky=1;ky&lt;=kWidth;ky++)&#xD;      for(var kx=1;kx&lt;=kWidth;kx++)&#xD;         if((y-mIndex+ky&gt;0) &amp;&amp; (y-mIndex+ky&lt;=height) &amp;&amp; (x-mIndex+kx&gt;0) &amp;&amp; (x-mIndex+kx&lt;=width)){&#xD;           if(typeOfData==&apos;FITS&apos;) value = value+getValue(x-mIndex+kx,y-mIndex+ky)*getKernelValue(kx,ky);&#xD;           if(typeOfData==&apos;table&apos;) value = value+getValue(x-mIndex+kx,y-mIndex+ky)*getKernelValue(kx,ky);&#xD;           if(typeOfData==&apos;RGB&apos;){&#xD;             r = r + getValue(x-mIndex+kx,y-mIndex+ky).at(1)*getKernelValue(kx,ky);&#xD;             g = g + getValue(x-mIndex+kx,y-mIndex+ky).at(2)*getKernelValue(kx,ky);&#xD;             b = b + getValue(x-mIndex+kx,y-mIndex+ky).at(3)*getKernelValue(kx,ky);&#xD;             }&#xD;           }&#xD;    if(typeOfData==&apos;FITS&apos;) result.push(value); &#xD;    if(typeOfData==&apos;table&apos;) row.add(value); &#xD;    if(typeOfData==&apos;RGB&apos;) result.push(new List([r,g,b,s]));&#xD;    }&#xD;  if(typeOfData==&apos;table&apos;) result.push(row); &#xD;  }&#xD;return new List(result);</l></block><list><block var="kernel"/><block var="source"/><block var="width"/><block var="height"/><block var="t"/><block var="m"/><block var="w"/></list></block></block></script></block></script><script><block s="doAddToList"><l>from "apply convolution kernel": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$gears is %&apos;data&apos; a %&apos;choice&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true">vector<options>vector&#xD;matrix&#xD;table</options></input></inputs><script><block s="doDeclareVariables"><list><l>width</l><l>result</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>choice</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="choice"/><l> </l></block></block></block><block s="doIfElse"><block s="reportNot"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doIf"><block s="reportEquals"><block var="choice"/><l>vector</l></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="data"/></block><l><option>list</option></l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var result=true;&#xD;i=1;&#xD;while(result &amp;&amp; (i&lt;=data.length()))&#xD;{&#xD;  row=data.at(i);&#xD;  if(!(row instanceof List)) result=false;&#xD;  else if(row.length()!=1) result=false;&#xD;       else if(Number.isNaN(row.at(1))) result=false;&#xD;  i++;&#xD;}&#xD;return result;&#xD;</l></block><list><block var="data"/></list></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportIsA"><l></l><l><option>number</option></l></block></block></autolambda><list></list></block><block var="data"/></block><block s="reportBoolean"><l><bool>false</bool></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>matrix</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var result=true,row,i,j,width;&#xD;i=1;&#xD;while(result &amp;&amp; (i&lt;=data.length()))&#xD;{&#xD;  row=data.at(i);&#xD;  if(!(row instanceof List)) result=false;&#xD;  else&#xD;  {&#xD;    if(i==1) width = row.length();&#xD;    if(width==1) result=false;&#xD;    if(row.length()!=width) result=false;&#xD;    else&#xD;    {&#xD;      j=1;&#xD;      while(result &amp;&amp; (j&lt;=row.length()))&#xD;      {&#xD;        if(Number.isNaN(row.at(j))) result=false;&#xD;        j++;&#xD;      }&#xD;    }&#xD;  }&#xD;  i++;&#xD;}&#xD;return result;&#xD;</l></block><list><block var="data"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="choice"/><l>table</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>var result=true,row,i,width;&#xD;i=1;&#xD;while(result &amp;&amp; (i&lt;=data.length()))&#xD;{&#xD;  row=data.at(i);&#xD;  if(!(row instanceof List)) result=false;&#xD;  else&#xD;  {&#xD;    if(i==1) width = row.length();&#xD;    if(row.length()!=width) result=false;&#xD;  }&#xD;  i++;&#xD;}&#xD;return result;&#xD;</l></block><list><block var="data"/></list></block></block></script></block><block s="doAddToList"><l>from "is &lt;data&gt; a": general error</l><block var="myMessages"/></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block></script></block-definition><block-definition s="$gears new clone of NeuralNetSprite" type="reporter" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>newSprite</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>newSprite</l><block s="newClone"><l><option>myself</option></l></block></block><block s="doTellTo"><block var="newSprite"/><block s="reifyScript"><script><block s="doSetVar"><l>myData</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>myMessages</l><block s="reportNewList"><list></list></block></block><custom-block s="$gears set properties" scope="local"></custom-block><block s="gotoXY"><block s="reportRandom"><l>-100</l><l>-50</l></block><block s="reportRandom"><l>100</l><l>150</l></block></block><custom-block s="$gears new costume width %n height %n %br color %n %n %n" scope="local"><l>200</l><l>150</l><l>255</l><l>225</l><l>205</l></custom-block></script><list></list></block><list></list></block><block s="doReport"><block var="newSprite"/></block></script></block></script></block-definition><block-definition s="$gears read file from filepicker" type="reporter" category="lists"><comment x="0" y="0" w="291.3698630136987" collapsed="false">Loads the contents of a file, JS-code copied from Snap!-code</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>ready</l></list></block><block s="doSetVar"><l>ready</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var inp = document.createElement(&apos;input&apos;), ide = this.parent.parent, result=0, done=false;&#xD;&#xD;  function userImport() {&#xD;&#xD;        function txtOnlyMsg(ftype, anyway) {&#xD;            ide.confirm(&#xD;                localize(&#xD;                    &apos;Snap! can only import "text" files.\n&apos; +&#xD;                        &apos;You selected a file of type "&apos; +&#xD;                        ftype +&#xD;                        &apos;".&apos;&#xD;                ) + &apos;\n\n&apos; + localize(&apos;Open anyway?&apos;),&#xD;                &apos;Unable to import&apos;,&#xD;                anyway // callback&#xD;            );&#xD;        }&#xD;&#xD;        function readText(aFile) {&#xD;            var frd = new FileReader(),&#xD;                ext = aFile.name.split(&apos;.&apos;).pop().toLowerCase();&#xD;&#xD;            function isTextFile(aFile) {&#xD;                // special cases for Windows&#xD;                // check the file extension for text-like-ness&#xD;                return aFile.type.indexOf(&apos;text&apos;) !== -1 ||&#xD;                    contains([&apos;txt&apos;, &apos;csv&apos;, &apos;xml&apos;, &apos;json&apos;, &apos;tsv&apos;], ext);&#xD;            }&#xD;&#xD;            function isType(aFile, string) {&#xD;                return aFile.type.indexOf(string) !== -1 || (ext === string);&#xD;            }&#xD;&#xD;            frd.onloadend = function (e) {&#xD;                done=true;&#xD;                if (isType(aFile, &apos;csv&apos;)) {result=Process.prototype.parseCSV(e.target.result);}&#xD;                else if (isType(aFile, &apos;json&apos;)) { result=Process.prototype.parseJSON(e.target.result);}&#xD;                     else { result=e.target.result;}&#xD;            };&#xD;&#xD;            if (isTextFile(aFile)) {&#xD;                frd.readAsText(aFile);&#xD;            } else {&#xD;               txtOnlyMsg(&#xD;                    aFile.type,&#xD;                    function () {frd.readAsText(aFile); }&#xD;                );&#xD;            }&#xD;        }&#xD;&#xD;        document.body.removeChild(inp);&#xD;        ide.filePicker = null;&#xD;        if (inp.files.length &gt; 0) {&#xD;            readText(inp.files[inp.files.length - 1]);&#xD;        }&#xD;    }&#xD;&#xD;    if (ide.filePicker) {&#xD;        document.body.removeChild(ide.filePicker);&#xD;        ide.filePicker = null;&#xD;    }&#xD;    inp.type = &apos;file&apos;;&#xD;    inp.style.color = "transparent";&#xD;    inp.style.backgroundColor = "transparent";&#xD;    inp.style.border = "none";&#xD;    inp.style.outline = "none";&#xD;    inp.style.position = "absolute";&#xD;    inp.style.top = "0px";&#xD;    inp.style.left = "0px";&#xD;    inp.style.width = "0px";&#xD;    inp.style.height = "0px";&#xD;    inp.style.display = "none";&#xD;    inp.addEventListener(&#xD;        "change",&#xD;        userImport,&#xD;        false&#xD;    );&#xD;    document.body.appendChild(inp);&#xD;    ide.filePicker = inp;&#xD;    inp.click();&#xD;return function(){return new List([done,result]);};</l></block><list></list></block></block><block s="doWaitUntil"><block s="reportListItem"><l>1</l><block s="evaluate"><block var="ready"/><list></list></block></block></block><block s="doReport"><block s="reportListItem"><l>2</l><block s="evaluate"><block var="ready"/><list></list></block></block></block></script></block-definition><block-definition s="$gears import table from %&apos;source&apos; to myData" type="command" category="lists"><comment x="0" y="0" w="118.57142857142863" collapsed="false">Imports table-data to myData.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>w</l><l>h</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportOr"><custom-block s="$gears is %s a %s" scope="local"><block var="source"/><l>vector</l></custom-block><custom-block s="$gears is %s a %s" scope="local"><block var="source"/><l>matrix</l></custom-block></block><script><block s="doSetVar"><l>w</l><custom-block s="$gears property %txt" scope="local"><l>imageWidth</l></custom-block></block><block s="doSetVar"><l>h</l><custom-block s="$gears property %txt" scope="local"><l>imageHeight</l></custom-block></block><custom-block s="$gears set properties" scope="local"></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>imageWidth</l><block var="w"/></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>imageHeight</l><block var="h"/></custom-block><block s="doSetVar"><l>myData</l><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>function listCopy(item){&#xD;  var theCopy;&#xD;  if(item instanceof List){&#xD;    theCopy = new List();&#xD;    for(var i=1;i&lt;=item.length();i++) theCopy.add(listCopy(item.at(i)));&#xD;    }&#xD;  else theCopy = item;&#xD;  return theCopy;&#xD;  }&#xD;return listCopy(data);</l></block><list><block var="source"/></list></block></block><custom-block s="$gears set property %txt to %s" scope="local"><l>typeOfData</l><l>NN</l></custom-block><block s="doIfElse"><block s="reportEquals"><block s="reportListLength"><block var="myData"/></block><l>0</l></block><script><custom-block s="$gears set property %txt to %s" scope="local"><l>layers</l><l>0</l></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>layerWidth</l><l>0</l></custom-block></script><script><custom-block s="$gears set property %txt to %s" scope="local"><l>layers</l><block s="reportListLength"><block var="myData"/></block></custom-block><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="myData"/></block><l><option>list</option></l></block><script><custom-block s="$gears set property %txt to %s" scope="local"><l>layerWidth</l><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="myData"/></block></block></custom-block></script><script><custom-block s="$gears set property %txt to %s" scope="local"><l>layerWidth</l><l>1</l></custom-block></script></block></script></block></script><script><block s="doAddToList"><l>from "import table": wrong data format, vector or matrix required</l><block var="myMessages"/></block></script></block></script></block></script></block-definition><block-definition s="$gears write %&apos;data&apos; to CSV file %&apos;filename&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s">myData</input><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>source</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><block s="reportOr"><custom-block s="$gears is %s a %s" scope="local"><block var="source"/><l>vector</l></custom-block><custom-block s="$gears is %s a %s" scope="local"><block var="source"/><l>matrix</l></custom-block></block><script><block s="doRun"><block s="reportJSFunction"><list><l>data</l><l>filename</l></list><l>function toCSV(data){&#xD;  var items=data.itemsArray(),rows = [];&#xD;    &#xD;    function encodeCell(atomicValue) {&#xD;        var string = atomicValue.toString(),cell;&#xD;        if (string.indexOf(&apos;\"&apos;) ===  -1 &amp;&amp;&#xD;                (string.indexOf(&apos;\n&apos;) === -1) &amp;&amp;&#xD;                (string.indexOf(&apos;\,&apos;) === -1)) {&#xD;            return string;&#xD;        }&#xD;        cell = [&apos;\"&apos;];&#xD;        string.split(&apos;&apos;).forEach(function (letter) {cell.push(letter);&#xD;            if (letter === &apos;\"&apos;) {cell.push(letter);}&#xD;        });&#xD;        cell.push(&apos;\"&apos;);&#xD;        return cell.join(&apos;&apos;);&#xD;   }&#xD;&#xD;  if (items.some(function (any) {return any instanceof List; })) {&#xD;     items.forEach(function (item) {&#xD;       if (item instanceof List) {&#xD;         rows.push(item.itemsArray().map(encodeCell).join(&apos;,&apos;));&#xD;       } else {rows.push(encodeCell(item));}&#xD;      });&#xD;    return rows.join(&apos;\n&apos;);&#xD;  }&#xD;  return items.map(encodeCell).join(&apos;,&apos;);&#xD;}&#xD;&#xD;var ide = this.parent.parent;&#xD;ide.saveFileAs(toCSV(data),&apos;text/csv;charset=utf-8&apos;,filename);</l></block><list><block var="source"/><block var="filename"/></list></block></script><script><block s="doAddToList"><l>from "write to CSV file": wrong data format, vector or matrix required</l><block var="myMessages"/></block></script></block></script></block-definition><block-definition s="$gears output of %&apos;n&apos; layer with input %&apos;input&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Reports the output of the nth layer of a neural network with given input.</comment><header></header><code></code><translations></translations><inputs><input type="%s">last</input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>weights</l><l>width</l><l>depth</l><l>layerNr</l><l>output</l><l>result</l><l>layer</l><l>inp</l></list></block><block s="doWarp"><script><block s="doIf"><block s="reportNot"><custom-block s="$gears is %s a %s" scope="local"><block var="input"/><l>vector</l></custom-block></block><script><block s="doAddToList"><l>from "output of layer": wrong data format, numerical input required</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: no numerical input</l></block></script></block><block s="doIfElse"><block s="reportEquals"><custom-block s="$gears property %txt" scope="local"><l>typeOfData</l></custom-block><l>NN</l></block><script><block s="doSetVar"><l>inp</l><block s="reportMap"><block s="reifyReporter"><script></script><list></list></block><block var="input"/></block></block><block s="doSetVar"><l>width</l><custom-block s="$gears property %txt" scope="local"><l>layerWidth</l></custom-block></block><block s="doIfElse"><block s="reportEquals"><block var="width"/><block s="reportListLength"><block var="inp"/></block></block><script><block s="doSetVar"><l>depth</l><custom-block s="$gears property %txt" scope="local"><l>layers</l></custom-block></block><block s="doIf"><block s="reportOr"><block s="reportEquals"><block var="n"/><l>last</l></block><block s="reportGreaterThan"><block var="n"/><block var="depth"/></block></block><script><block s="doSetVar"><l>n</l><block var="depth"/></block></script></block><block s="doSetVar"><l>weights</l><block var="myData"/></block><block s="doSetVar"><l>layerNr</l><l>1</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="layerNr"/><block var="n"/></block><script><block s="doAddToList"><l>0.1</l><block var="inp"/></block><block s="doSetVar"><l>layer</l><block s="reportListItem"><block var="layerNr"/><block var="weights"/></block></block><block s="doSetVar"><l>output</l><custom-block s="$gears %s %s %s" scope="local"><block var="layer"/><l>*</l><custom-block s="$gears transpose %l" scope="local"><block var="inp"/></custom-block></custom-block></block><block s="doSetVar"><l>inp</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><block s="reportListLength"><block var="output"/></block><script><block s="doAddToList"><block s="reportQuotient"><l>1</l><block s="reportSum"><l>1</l><block s="reportMonadic"><l><option>e^</option></l><block s="reportProduct"><l>-1</l><block s="reportListItem"><block var="i"/><block var="output"/></block></block></block></block></block><block var="inp"/></block></script></block><block s="doChangeVar"><l>layerNr</l><l>1</l></block></script></block><block s="doReport"><block var="inp"/></block></script><script><block s="doAddToList"><l>from "output of layer": wrong length of input</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: the input should match the net width</l></block></script></block></script><script><block s="doAddToList"><l>from "output of layer": no NN found</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: only for NNs available</l></block></script></block></script></block></script></block-definition><block-definition s="$gears %&apos;a&apos; %&apos;op&apos; %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true">*<options>+&#xD;-&#xD;*&#xD;X</options></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>transposed</l><l>result</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>op</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="op"/><l> </l></block></block></block><block s="doIf"><block s="reportIsA"><block var="a"/><l><option>number</option></l></block><script><block s="doIf"><block s="reportIsA"><block var="b"/><l><option>number</option></l><comment w="119.45205479452063" collapsed="false">number number operation</comment></block><script><block s="doIf"><block s="reportEquals"><block var="op"/><l>+</l></block><script><block s="doReport"><block s="reportSum"><block var="a"/><block var="b"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>-</l></block><script><block s="doReport"><block s="reportDifference"><block var="a"/><block var="b"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>*</l></block><script><block s="doReport"><block s="reportProduct"><block var="a"/><block var="b"/></block></block></script></block><block s="doAddToList"><l>from "linear operation": not allowed operator</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: illegal operation</l></block></script></block><block s="doIf"><custom-block s="$gears is %s a %s" scope="local"><block var="b"/><l>vector</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block var="op"/><l>*</l></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="b"/></block><l><option>list</option></l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>scalar</l><l>vector</l></list><l>//scalar*vector&#xD;var result=new List();&#xD;scalar=Number(scalar);&#xD;for(var i=1;i&lt;=vector.length();i++){&#xD;  result.add(scalar*Number(vector.at(i)));&#xD;  }&#xD;return result;</l></block><list><block var="a"/><custom-block s="$gears transpose %l" scope="local"><block var="b"/></custom-block></list></block></block></script><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>scalar</l><l>vector</l></list><l>//scalar*vector&#xD;var result=new List();&#xD;vscalar = Number(scalar);&#xD;for(var i=1;i&lt;=vector.length();i++){&#xD;  result.add(scalar*Number(vector.at(i)));&#xD;  }&#xD;return result;</l></block><list><block var="a"/><block var="b"/></list></block></block></script></block></script><script><block s="doAddToList"><l>from "linear operation": not allowed operator</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block><block s="doIf"><custom-block s="$gears is %s a %s" scope="local"><block var="b"/><l>matrix</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block var="op"/><l>*</l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportProduct"><block var="a"/><l></l></block></autolambda><list></list></block><l/></block></autolambda><list></list></block><block var="b"/></block></block></script><script><block s="doAddToList"><l>from "linear operation": not allowed operator</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block><block s="doAddToList"><l>from "linear operation": illegal operation</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: illegal operation</l></block></script></block><block s="doIf"><custom-block s="$gears is %s a %s" scope="local"><block var="a"/><l>vector</l></custom-block><script><block s="doIf"><block s="reportIsA"><block var="b"/><l><option>number</option></l></block><script><block s="doReport"><custom-block s="$gears %s %s %s" scope="local"><block var="b"/><l>*</l><block var="a"/></custom-block><comment w="90" collapsed="false">vector number operation.</comment></block></script></block><block s="doIf"><custom-block s="$gears is %s a %s" scope="local"><block var="b"/><l>vector</l></custom-block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListLength"><block var="a"/></block><block s="reportListLength"><block var="b"/></block></block><script><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="a"/></block><l><option>list</option></l></block><script><block s="doSetVar"><l>a</l><custom-block s="$gears transpose %l" scope="local"><block var="a"/></custom-block></block><block s="doSetVar"><l>transposed</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doSetVar"><l>transposed</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>+</l></block><script><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>vector1</l><l>vector2</l></list><l>//vector+vector&#xD;var result=new List();&#xD;for(var i=1;i&lt;=vector1.length();i++){&#xD;  result.add(Number(vector1.at(i))+Number(vector2.at(i)));&#xD;  }&#xD;return result;</l></block><list><block var="a"/><block var="b"/></list></block></block><block s="doIf"><block var="transposed"/><script><block s="doSetVar"><l>result</l><custom-block s="$gears transpose %l" scope="local"><block var="result"/></custom-block></block></script></block><block s="doReport"><block var="result"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>-</l></block><script><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>vector1</l><l>vector2</l></list><l>//vector-vector&#xD;var result=new List();&#xD;for(var i=1;i&lt;=vector1.length();i++){&#xD;  result.add(Number(vector1.at(i))-Number(vector2.at(i)));&#xD;  }&#xD;return result;</l></block><list><block var="a"/><block var="b"/></list></block></block><block s="doIf"><block var="transposed"/><script><block s="doSetVar"><l>result</l><custom-block s="$gears transpose %l" scope="local"><block var="result"/></custom-block></block></script></block><block s="doReport"><block var="result"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="op"/><l>*</l></block><script><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>vector1</l><l>vector2</l></list><l>//vector*vector&#xD;var result=0;&#xD;for(var i=1;i&lt;=vector1.length();i++){&#xD;  result=result+Number(vector1.at(i))*Number(vector2.at(i));&#xD;  }&#xD;return result;</l></block><list><block var="a"/><block var="b"/></list></block></block><block s="doReport"><block var="result"/></block></script></block><block s="doIfElse"><block s="reportEquals"><block var="op"/><l>X</l></block><script><block s="doIf"><block s="reportAnd"><block s="reportEquals"><block s="reportListLength"><block var="a"/></block><l>3</l></block><block s="reportEquals"><block s="reportListLength"><block var="b"/></block><l>3</l></block></block><script><block s="doSetVar"><l>result</l><block s="reportNewList"><list><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="a"/></block><block s="reportListItem"><l>3</l><block var="b"/></block></block><block s="reportProduct"><block s="reportListItem"><l>3</l><block var="a"/></block><block s="reportListItem"><l>2</l><block var="b"/></block></block></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>3</l><block var="a"/></block><block s="reportListItem"><l>1</l><block var="b"/></block></block><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="a"/></block><block s="reportListItem"><l>3</l><block var="b"/></block></block></block><block s="reportDifference"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="a"/></block><block s="reportListItem"><l>2</l><block var="b"/></block></block><block s="reportProduct"><block s="reportListItem"><l>2</l><block var="a"/></block><block s="reportListItem"><l>1</l><block var="b"/></block></block></block></list></block></block><block s="doIf"><block var="transposed"/><script><block s="doSetVar"><l>result</l><custom-block s="$gears transpose %l" scope="local"><block var="result"/></custom-block></block></script></block><block s="doReport"><block var="result"/></block></script></block></script><script><block s="doAddToList"><l>from "linear operation": wrong dimensions of vectors</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong dimension of vectors</l></block></script></block></script><script><block s="doAddToList"><l>from "linear operation": different length of vectors</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: different length of vectors</l></block></script></block></script></block><block s="doIf"><custom-block s="$gears is %s a %s" scope="local"><block var="b"/><l>matrix</l></custom-block><script><block s="doIfElse"><block s="reportAnd"><block s="reportAnd"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="a"/></block><l><option>number</option></l></block><block s="reportEquals"><block var="op"/><l>*</l></block></block><block s="reportEquals"><block s="reportListLength"><block var="a"/></block><block s="reportListLength"><block var="b"/></block></block></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>vector</l><l>matrix</l></list><l>var result=new List(),sum;&#xD;for(var i=1;i&lt;=matrix.at(1).length();i++){&#xD;  sum=0;&#xD;  for(var j=1;j&lt;=vector.length();j++)&#xD;    sum=sum+vector.at(j)*matrix.at(j).at(i);&#xD;  result.add(sum);&#xD;  }&#xD;return result;</l></block><list><block var="a"/><block var="b"/></list></block></block></script><script><block s="doAddToList"><l>from "linear operation": illegal operation</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block><block s="doAddToList"><l>from "linear operation": illegal operation</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: illegal operation</l></block></script></block><block s="doIf"><custom-block s="$gears is %s a %s" scope="local"><block var="a"/><l>matrix</l></custom-block><script><block s="doIf"><block s="reportIsA"><block var="b"/><l><option>number</option></l><comment w="119.45205479452063" collapsed="false">matrix number operation</comment></block><script><block s="doIfElse"><block s="reportEquals"><block var="op"/><l>*</l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportProduct"><block var="b"/><l></l></block></autolambda><list></list></block><l/></block></autolambda><list></list></block><block var="a"/></block></block></script><script><block s="doAddToList"><l>from "linear operation": illegal operation</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block><block s="doIf"><custom-block s="$gears is %s a %s" scope="local"><block var="b"/><l>vector</l></custom-block><script><block s="doIfElse"><block s="reportAnd"><block s="reportAnd"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="b"/></block><l><option>list</option></l></block><block s="reportEquals"><block var="op"/><l>*</l></block></block><block s="reportEquals"><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="a"/></block></block><block s="reportListLength"><block var="b"/></block></block></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>matrix</l><l>vector</l></list><l>var result=new List(),sum;&#xD;for(var i=1;i&lt;=matrix.length();i++){&#xD;  sum=0;&#xD;  for(var j=1;j&lt;=vector.length();j++)&#xD;    sum=sum+matrix.at(i).at(j)*vector.at(j);&#xD;  result.add(sum);&#xD;  }&#xD;return result;</l></block><list><block var="a"/><custom-block s="$gears transpose %l" scope="local"><block var="b"/></custom-block></list></block></block></script><script><block s="doAddToList"><l>from "linear operation": illegal operation</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block><block s="doIfElse"><custom-block s="$gears is %s a %s" scope="local"><block var="b"/><l>matrix</l></custom-block><script><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>a</l><l>b</l><l>op</l></list><l>var result=new List(),rowsA=a.length(),rowsB=b.length(),colsA=a.at(1).length();&#xD;var colsB=b.at(1).length(),row,sum;&#xD;if(op=="+"){&#xD;  if((rowsA==rowsB) &amp;&amp; (colsA==colsB)){&#xD;    for(var i=1;i&lt;=rowsA;i++){&#xD;      row=new List();&#xD;      for(j=1;j&lt;=colsA;j++)&#xD;        row.add(Number(a.at(i).at(j))+Number(b.at(i).at(j)));&#xD;      result.add(row);&#xD;      }&#xD;    return result;&#xD;    }&#xD;  else return "different dimensions";       &#xD;  }&#xD;&#xD;if(op=="-"){&#xD;  if((rowsA==rowsB) &amp;&amp; (colsA==colsB)){&#xD;    for(var i=1;i&lt;=rowsA;i++){&#xD;      row=new List();&#xD;      for(j=1;j&lt;=colsA;j++)&#xD;        row.add(Number(a.at(i).at(j))-Number(b.at(i).at(j)));&#xD;      result.add(row);&#xD;      }&#xD;    return result;&#xD;    }&#xD;  else return "different dimensions";       &#xD;  }&#xD;&#xD;if(op=="*"){&#xD;  if(colsA==rowsB){&#xD;    for(var i=1;i&lt;=rowsA;i++){&#xD;       row=new List();&#xD;       for(j=1;j&lt;=colsB;j++){&#xD;         sum=0;&#xD;         for(k=1;k&lt;=colsA;k++)&#xD;           sum=sum+(Number(a.at(i).at(k))*Number(b.at(k).at(j)));&#xD;         row.add(sum);&#xD;         }&#xD;       result.add(row);&#xD;       }&#xD;      return result;&#xD;    }&#xD;  else return "wrong dimensions";       &#xD;  }&#xD;&#xD;return "wrong operation";</l></block><list><block var="a"/><block var="b"/><block var="op"/></list></block></block><block s="doIf"><block s="reportIsA"><block var="result"/><l><option>text</option></l></block><script><block s="doAddToList"><block s="reportJoinWords"><list><l>from "linear operation": </l><block var="result"/></list></block><block var="myMessages"/></block></script></block><block s="doReport"><block var="result"/></block></script><script><block s="doAddToList"><l>from "linear operation": illegal operation</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block><block s="doAddToList"><l>from "linear operation": illegal operation</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: illegal operation</l></block></script></block></script></block-definition><block-definition s="$gears transpose %&apos;data&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportEquals"><block s="reportListLength"><block var="data"/></block><l>0</l></block><script><block s="doReport"><block var="data"/></block></script><script><block s="doIfElse"><custom-block s="$gears is %s a %s" scope="local"><block var="data"/><l>vector</l></custom-block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>vector</l></list><l>var result= new List();&#xD;if(vector.at(1) instanceof List){&#xD;  for(i=1;i&lt;=vector.length();i++)&#xD;    result.add(vector.at(i).at(1));&#xD;  }&#xD;else{&#xD;  for(i=1;i&lt;=vector.length();i++)&#xD;    result.add(new List([vector.at(i)]));&#xD;  }&#xD;return result;</l></block><list><block var="data"/></list></block></block></script><script><block s="doIfElse"><custom-block s="$gears is %s a %s" scope="local"><block var="data"/><l>matrix</l></custom-block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>matrix</l></list><l>var result= new List(), width=matrix.at(1).length();&#xD;for(var i=1;i&lt;=width;i++) result.add(new List());&#xD;for(var i=1;i&lt;=matrix.length();i++)&#xD;  for(var j=1;j&lt;=width;j++)&#xD;    result.at(j).add(matrix.at(i).at(j));&#xD;return result;</l></block><list><block var="data"/></list></block></block></script><script><block s="doAddToList"><l>from "transpose": data are not transposable</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: not transposable</l></block></script></block></script></block></script></block></script><script><block s="doAddToList"><l>from "transpose": data are not transposable</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: not transposable</l></block></script></block></script></block-definition><block-definition s="$gears teach NN with input %&apos;input&apos; and target output %&apos;target&apos; $nl by backpropagation with learning factor %&apos;eta&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input><input type="%n">0.01</input></inputs><script><block s="doDeclareVariables"><list><l>weights</l><l>width</l><l>depth</l><l>layerNr</l><l>currentLayer</l><l>currentOutput</l><l>nextOutput</l><l>h</l><l>delta</l><l>previousDelta</l><l>k</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><custom-block s="$gears property %txt" scope="local"><l>typeOfData</l></custom-block><l>NN</l></block><script><block s="doSetVar"><l>width</l><custom-block s="$gears property %txt" scope="local"><l>layerWidth</l></custom-block></block><block s="doIfElse"><block s="reportAnd"><block s="reportEquals"><block var="width"/><block s="reportListLength"><block var="input"/></block></block><block s="reportEquals"><block var="width"/><block s="reportListLength"><block var="target"/></block></block></block><script><block s="doSetVar"><l>depth</l><custom-block s="$gears property %txt" scope="local"><l>layers</l></custom-block></block><block s="doSetVar"><l>layerNr</l><block var="depth"/></block><block s="doSetVar"><l>weights</l><block var="myData"/></block><block s="doUntil"><block s="reportLessThan"><block var="layerNr"/><l>1</l></block><script><block s="doSetVar"><l>currentLayer</l><block s="reportListItem"><block var="layerNr"/><block var="weights"/></block></block><block s="doSetVar"><l>currentOutput</l><custom-block s="$gears output of %s layer with input %l" scope="local"><block var="layerNr"/><block var="input"/></custom-block></block><block s="doIfElse"><block s="reportEquals"><block var="layerNr"/><l>1</l></block><script><block s="doSetVar"><l>nextOutput</l><block var="input"/></block></script><script><block s="doSetVar"><l>nextOutput</l><custom-block s="$gears output of %s layer with input %l" scope="local"><block s="reportDifference"><block var="layerNr"/><l>1</l></block><block var="input"/></custom-block></block></script></block><block s="doIfElse"><block s="reportEquals"><block var="layerNr"/><block var="depth"/></block><script><block s="doSetVar"><l>delta</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><block var="width"/><script><block s="doSetVar"><l>h</l><block s="reportProduct"><block s="reportProduct"><block s="reportListItem"><block var="i"/><block var="currentOutput"/></block><block s="reportDifference"><l>1</l><block s="reportListItem"><block var="i"/><block var="currentOutput"/></block></block></block><block s="reportDifference"><block s="reportListItem"><block var="i"/><block var="currentOutput"/></block><block s="reportListItem"><block var="i"/><block var="target"/></block></block></block></block><block s="doAddToList"><block var="h"/><block var="delta"/></block><block s="doFor"><l>n</l><l>1</l><block var="width"/><script><block s="doReplaceInList"><block var="n"/><block s="reportListItem"><block var="i"/><block var="currentLayer"/></block><block s="reportDifference"><block s="reportListItem"><block var="n"/><block s="reportListItem"><block var="i"/><block var="currentLayer"/></block></block><block s="reportProduct"><block s="reportProduct"><block var="eta"/><block var="h"/></block><block s="reportListItem"><block var="n"/><block var="nextOutput"/></block></block></block></block></script></block></script></block><block s="doSetVar"><l>previousDelta</l><block var="delta"/></block></script><script><block s="doSetVar"><l>delta</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><block var="width"/><script><block s="doSetVar"><l>h</l><l>0</l></block><block s="doFor"><l>k</l><l>1</l><block var="width"/><script><block s="doChangeVar"><l>h</l><block s="reportProduct"><block s="reportListItem"><block var="k"/><block var="previousDelta"/></block><block s="reportListItem"><block var="k"/><block s="reportListItem"><block var="i"/><block s="reportListItem"><block s="reportSum"><block var="layerNr"/><l>1</l></block><block var="weights"/></block></block></block></block></block></script></block><block s="doSetVar"><l>h</l><block s="reportProduct"><block var="h"/><block s="reportProduct"><block s="reportListItem"><block var="i"/><block var="currentOutput"/></block><block s="reportDifference"><l>1</l><block s="reportListItem"><block var="i"/><block var="currentOutput"/></block></block></block></block></block><block s="doAddToList"><block var="h"/><block var="delta"/></block><block s="doFor"><l>n</l><l>1</l><block var="width"/><script><block s="doReplaceInList"><block var="n"/><block s="reportListItem"><block var="i"/><block var="currentLayer"/></block><block s="reportDifference"><block s="reportListItem"><block var="n"/><block s="reportListItem"><block var="i"/><block var="currentLayer"/></block></block><block s="reportProduct"><block s="reportProduct"><block var="eta"/><block var="h"/></block><block s="reportListItem"><block var="n"/><block var="nextOutput"/></block></block></block></block></script></block></script></block><block s="doSetVar"><l>previousDelta</l><block var="delta"/></block></script></block><block s="doChangeVar"><l>layerNr</l><l>-1</l></block></script></block><block s="doSetVar"><l>myData</l><block var="weights"/></block></script><script><block s="doAddToList"><l>from "teach NN": wrong length of input or target</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong length of input or target</l></block></script></block></script><script><block s="doAddToList"><l>from "teach NN": no NN found</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: only for NNs available</l></block></script></block></script></block></script></block-definition><block-definition s="$gears add new weights width %&apos;width&apos; depth %&apos;depth&apos;" type="command" category="lists"><comment x="0" y="0" w="136.42857142857144" collapsed="false">Creates a fully connected neural network of perceptrons. Inputs should be connected to layer 1, outputs to last layer.</comment><header></header><code></code><translations></translations><inputs><input type="%n">3</input><input type="%n">2</input></inputs><script><block s="doDeclareVariables"><list><l>weights</l><l>row</l><l>matrix</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>myData</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block var="depth"><comment w="115.85714185714296" collapsed="false">one matrix for each layer</comment></block><script><block s="doSetVar"><l>matrix</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><block var="width"/><script><block s="doSetVar"><l>row</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>j</l><l>1</l><block var="width"/><script><block s="doAddToList"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return Math.random();</l></block><list></list></block><block var="row"/></block></script></block><block s="doAddToList"><l>1</l><block var="row"/></block><block s="doAddToList"><block var="row"/><block var="matrix"/></block></script></block><block s="doAddToList"><block var="matrix"/><block var="myData"/></block></script></block><custom-block s="$gears set property %txt to %s" scope="local"><l>typeOfData</l><l>NN</l></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>layers</l><block var="depth"/></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>layerWidth</l><block var="width"/></custom-block></script></block></script></block-definition><block-definition s="$gears show NN status input %&apos;input&apos;" type="command" category="looks"><comment x="0" y="0" w="90" collapsed="false">Draws the nodes and current status of connections of an NN.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>depth</l><l>layerOutputs</l><l>netWidth</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><custom-block s="$gears property %txt" scope="local"><l>typeOfData</l></custom-block><l>NN</l></block><script><block s="doSetVar"><l>netWidth</l><custom-block s="$gears property %txt" scope="local"><l>layerWidth</l></custom-block></block><block s="doIfElse"><block s="reportEquals"><block var="netWidth"/><block s="reportListLength"><block var="input"/></block></block><script><block s="doSetVar"><l>depth</l><custom-block s="$gears property %txt" scope="local"><l>layers</l></custom-block></block><block s="doSetVar"><l>layerOutputs</l><block s="reportNewList"><list></list></block></block><block s="doAddToList"><block var="input"/><block var="layerOutputs"/></block><block s="doFor"><l>i</l><l>1</l><block var="depth"/><script><block s="doAddToList"><custom-block s="$gears output of %s layer with input %l" scope="local"><block var="i"/><block var="input"/></custom-block><block var="layerOutputs"/></block></script></block><block s="doSwitchToCostume"><block s="evaluate"><block s="reportJSFunction"><list><l>costume</l><l>netWidth</l><l>depth</l><l>weights</l><l>outputs</l><l>r</l><l>g</l><l>b</l></list><l>var newCostume,ctx,imageWidth,imageHeight,dx,dy,x,y,x1,y1,colorcode; &#xD;&#xD;//new costume&#xD;imageWidth = costume.width();&#xD;imageHeight = costume.height(); &#xD;newCostume=new Costume();&#xD;newCostume.contents.width = imageWidth ;&#xD;newCostume.contents.height = imageHeight;&#xD;ctx = newCostume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.strokeStyle = new Color(0,0,0).toString();&#xD;ctx.fillRect(0,0,imageWidth,imageHeight);&#xD;ctx.strokeRect(0,0,imageWidth,imageHeight);&#xD;ctx.closePath();&#xD;ctx.fill();&#xD;ctx.stroke();&#xD;newCostume.rotationCenter=new Point(imageWidth/2,imageHeight/2);&#xD;&#xD;//draw frame&#xD;ctx.beginPath();&#xD;ctx.lineWidth = 2;&#xD;ctx.moveTo(imageWidth-15,imageHeight-20);&#xD;ctx.lineTo(imageWidth-15,40);&#xD;ctx.lineTo(imageWidth-20,40);&#xD;ctx.lineTo(imageWidth-15,20);&#xD;ctx.lineTo(imageWidth-10,40);&#xD;ctx.lineTo(imageWidth-15,40);&#xD;ctx.closePath();&#xD;ctx.stroke();&#xD;ctx.beginPath();&#xD;ctx.lineWidth = 1;&#xD;ctx.moveTo(imageWidth-30,1);&#xD;ctx.lineTo(imageWidth-30,imageHeight-1);&#xD;ctx.closePath();&#xD;ctx.stroke();&#xD;&#xD;netWidth=Number(netWidth); depth=Number(depth);&#xD;&#xD;//draw connections&#xD;if(netWidth&gt;1) dx = 1.0*(imageWidth-50)/(netWidth-1); else dx = 1.0*(imageWidth-15)/2;&#xD;if(depth&gt;1) dy = 1.0*imageHeight/depth; else dy = 1.0*imageHeight/2;  &#xD;ctx.lineWidth = 1;&#xD;for(var layer=1;layer&lt;=depth;layer++){&#xD;  for(var i=1;i&lt;=netWidth;i++){&#xD;    x=10+(i-1)*dx; &#xD;    if(layer==depth) y = 3; else y = imageHeight-layer*dy;&#xD;    for(var n=1;n&lt;=netWidth;n++){&#xD;      ctx.beginPath();&#xD;      x1=10+(n-1)*dx; &#xD;      if(layer==1) y1=imageHeight-3; else y1 = imageHeight-(layer-1)*dy;&#xD;      colorcode=Math.round(255*weights.at(layer).at(i).at(n));&#xD;      if(colorcode&lt;0)&#xD;        ctx.strokeStyle = new Color(-colorcode,0,0).toString();&#xD;        else ctx.strokeStyle = new Color(0,colorcode,0).toString();&#xD;      ctx.moveTo(x,y);&#xD;      ctx.lineTo(x1,y1);&#xD;      ctx.closePath();&#xD;      ctx.stroke();&#xD;      }&#xD;    }&#xD;  }&#xD;&#xD;//draw connectors&#xD;if(netWidth&gt;1) dx = 1.0*(imageWidth-50)/(netWidth-1); else dx = 1.0*(imageWidth-15)/2;&#xD;if(depth&gt;1) dy = 1.0*(imageHeight-30)/(depth-1); else dy = 1.0*(imageHeight-15)/2;  &#xD;ctx.lineWidth = 1;&#xD;for(var i=0;i&lt;netWidth;i++){&#xD;  ctx.beginPath();&#xD;  x=5+i*dx; &#xD;  y=1;&#xD;  colorcode=Math.round(255*outputs.at(depth+1).at(i+1));&#xD;  if(colorcode&lt;0)&#xD;    ctx.fillStyle = new Color(-colorcode,0,0).toString();&#xD;    else ctx.fillStyle = new Color(0,colorcode,0).toString();&#xD;  ctx.strokeRect(x,y,10,5);&#xD;  ctx.fillRect(x,y,10,5);&#xD;  ctx.closePath();&#xD;  ctx.stroke();&#xD;  ctx.fill();&#xD;  y=imageHeight-6;&#xD;  colorcode=Math.round(255*outputs.at(1).at(i+1));&#xD;  if(colorcode&lt;0)&#xD;    ctx.fillStyle = new Color(-colorcode,0,0).toString();&#xD;    else ctx.fillStyle = new Color(0,colorcode,0).toString();&#xD;  ctx.strokeRect(x,y,10,5);&#xD;  ctx.fillRect(x,y,10,5);&#xD;  ctx.closePath();&#xD;  ctx.stroke();&#xD;  ctx.fill();&#xD;  }&#xD;&#xD;//draw inner layers&#xD;if(netWidth&gt;1) dx = 1.0*(imageWidth-50)/(netWidth-1); else dx = 1.0*(imageWidth-15)/2;&#xD;if(depth&gt;1) dy = 1.0*imageHeight/depth; else dy = 1.0*imageHeight/2;  &#xD;for(var layer=2;layer&lt;=depth;layer++){&#xD;  for(var i=0;i&lt;netWidth;i++){&#xD;    ctx.beginPath();&#xD;    x=10+i*dx;&#xD;    y=imageHeight-(layer-1)*dy;&#xD;    colorcode=Math.round(255*outputs.at(layer).at(i+1)); &#xD;    if(colorcode&lt;0)&#xD;      ctx.fillStyle = new Color(-colorcode,0,0).toString();&#xD;      else ctx.fillStyle = new Color(0,colorcode,0).toString();&#xD;    ctx.arc(x,y,5,0,6.283185307179586476925286766559);&#xD;    ctx.closePath();&#xD;    ctx.stroke();&#xD;    ctx.fill();&#xD;    }&#xD;  }&#xD;&#xD;return newCostume; </l></block><list><block s="reportGet"><l><option>costume</option></l></block><block var="netWidth"/><block var="depth"/><block var="myData"/><block var="layerOutputs"/><custom-block s="$gears property %txt" scope="local"><l>backColorRed</l></custom-block><custom-block s="$gears property %txt" scope="local"><l>backColorGreen</l></custom-block><custom-block s="$gears property %txt" scope="local"><l>backColorBlue</l></custom-block></list></block></block></script><script><block s="doAddToList"><l>from "show NN": wrong input</l><block var="myMessages"/></block></script></block></script><script><block s="doAddToList"><l>from "show NN": only for NNs available</l><block var="myMessages"/></block></script></block></script></block></script></block-definition><block-definition s="$gears %&apos;selection&apos; of %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">min<options>min&#xD;max&#xD;minpos&#xD;maxpos</options></input><input type="%s">myData</input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>help</l><l>source</l></list></block><block s="doWarp"><script><block s="doIfElse"><block s="reportEquals"><block var="data"/><l>myData</l></block><script><block s="doSetVar"><l>source</l><block var="myData"/></block></script><script><block s="doSetVar"><l>source</l><block var="data"/></block></script></block><block s="doIfElse"><custom-block s="$gears is %s a %s" scope="local"><block var="source"/><l>vector</l></custom-block><script><block s="doSetVar"><l>result</l><block s="evaluate"><block s="reportJSFunction"><list><l>aList</l></list><l>var min=10000000,max=-min,sum=0,mean,n=0,isNumber,c,minpos=0,maxpos=0;&#xD;if(aList.length()==0) return new List([0,0,0,0,0,0,0]);&#xD;var i=1,k,value;&#xD;while(i &lt;= aList.length()) {&#xD;  value = aList.at(i);&#xD;  if(typeof(value)=="number") isNumber=true;&#xD;  else{&#xD;    if(typeof(value)=="string"){&#xD;      isNumber=true;&#xD;      k=0;&#xD;      while((k&lt;value.length) &amp;&amp; isNumber){&#xD;        c=value.charAt(k);&#xD;        if((c&lt;&apos;0&apos;) || (c&gt;&apos;9&apos;))&#xD;          if((c!=&apos;E&apos;) &amp;&amp; (c!=&apos;e&apos;) &amp;&amp; (c!=&apos;+&apos;) &amp;&amp; (c!=&apos;-&apos;)&amp;&amp; (c!=&apos;.&apos;) &amp;&amp; (c!=&apos;,&apos;))&#xD;            isNumber=false;&#xD;        k++;&#xD;        }&#xD;       }&#xD;     else isNumber=false;&#xD;     }&#xD;  if(isNumber){&#xD;    value=Number(value);&#xD;    if(min&gt;value) {min=value; minpos=i;}&#xD;    if(max&lt;value) {max=value; maxpos=i;}&#xD;    sum=Number(sum)+Number(value);&#xD;    n++;&#xD;    }&#xD;  i++;&#xD;  }&#xD;if(n&gt;0) mean=sum/n; else mean=NaN;&#xD;return new List([min,max,n,sum,mean,minpos,maxpos]);     </l></block><list><block var="source"/></list></block></block><block s="doSetVar"><l>selection</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="selection"/><l> </l></block></block></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>min</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>max</l></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>minpos</l></block><script><block s="doReport"><block s="reportListItem"><l>6</l><block var="result"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="selection"/><l>maxpos</l></block><script><block s="doReport"><block s="reportListItem"><l>7</l><block var="result"/></block></block></script></block></script><script><block s="doAddToList"><l>from "&lt;feature&gt; of": wrong data format</l><block var="myMessages"/></block><block s="doReport"><l>ERROR: wrong data format</l></block></script></block></script></block></script></block-definition><block-definition s="$gears new costume width %&apos;w&apos; height %&apos;h&apos; $nl color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">200</input><input type="%n">150</input><input type="%n">255</input><input type="%n">225</input><input type="%n">205</input></inputs><script><block s="doWarp"><script><custom-block s="$gears set property %txt to %s" scope="local"><l>imageWidth</l><block var="w"/></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>imageHeight</l><block var="h"/></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>backColorRed</l><block var="r"/></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>backColorGreen</l><block var="g"/></custom-block><custom-block s="$gears set property %txt to %s" scope="local"><l>backColorBlue</l><block var="b"/></custom-block><block s="doSwitchToCostume"><block s="evaluate"><block s="reportJSFunction"><list><l>w</l><l>h</l><l>r</l><l>g</l><l>b</l></list><l>var newCostume=new Costume();&#xD;newCostume.contents.width = w;&#xD;newCostume.contents.height = h;&#xD;var ctx = newCostume.contents.getContext(&apos;2d&apos;);&#xD;ctx.beginPath();&#xD;ctx.fillStyle = new Color(r,g,b).toString();&#xD;ctx.strokeStyle = new Color(0,0,0).toString();&#xD;ctx.fillRect(0,0,w,h);&#xD;ctx.strokeRect(0,0,w,h);&#xD;ctx.closePath();&#xD;ctx.fill();&#xD;ctx.stroke();&#xD;newCostume.rotationCenter=new Point(w/2,h/2);&#xD;return newCostume;</l></block><list><block var="w"/><block var="h"/><block var="r"/><block var="g"/><block var="b"/></list></block></block></script></block></script></block-definition><block-definition s="read input values" type="reporter" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>data</l><l>result</l><l>final map</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><l>4</l><script><block s="doSetVar"><l>final map</l><custom-block s="element %n %n of %l"><block var="i"/><l>3</l><block var="second layer"/></custom-block></block><block s="doAddToList"><block s="reportQuotient"><block s="reportRound"><block s="reportProduct"><block s="evaluate"><block s="reportAttributeOf"><l><wish s="$storage %s of %s" type="reporter" category="lists"></wish></l><l>DataSprite</l></block><list><l>mean</l><block s="reportAttributeOf"><l>myData</l><custom-block s="element %n %n of %l"><block var="i"/><l>3</l><block var="second layer"/></custom-block></block></list></block><l>10</l></block></block><l>10</l></block><block var="result"/></block></script></block><block s="doSetVar"><l>mean1</l><block s="reportListItem"><l>1</l><block var="result"/></block></block><block s="doSetVar"><l>mean2</l><block s="reportListItem"><l>2</l><block var="result"/></block></block><block s="doSetVar"><l>mean3</l><block s="reportListItem"><l>3</l><block var="result"/></block></block><block s="doSetVar"><l>mean4</l><block s="reportListItem"><l>4</l><block var="result"/></block></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="show result" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="goToLayer"><l><option>front</option></l></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>means:</l><l>-390</l><l>-165</l><l>20</l></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>recognized digit:</l><l>-390</l><l>-260</l><l>20</l></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>&lt;--</l><l>-120</l><l>-265</l><l>50</l></list></block><block s="doSetVar"><l>inputs</l><custom-block s="read input values" scope="local"></custom-block></block><block s="doSetVar"><l>nr</l><custom-block s="$gears %s of %s" scope="local"><l>maxpos</l><custom-block s="$gears output of %s layer with input %l" scope="local"><l>last</l><block var="inputs"/></custom-block></custom-block></block><block s="doIfElse"><block s="reportEquals"><block var="nr"/><l>1</l></block><script><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>0</l><l>-180</l><l>-280</l><l>100</l></list></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="nr"/><l>4</l></block><script><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>1</l><l>-180</l><l>-280</l><l>100</l></list></block></script><script><block s="doRun"><block s="reportAttributeOf"><l><wish s="write %txt at %n %n size %n" type="command" category="other"></wish></l><l>thePen</l></block><list><l>-</l><l>-180</l><l>-280</l><l>100</l></list></block></script></block></script></block><block s="doWait"><l>0.5</l></block></script></block></script></block-definition><block-definition s="target at %&apos;n&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doFor"><l>i</l><l>1</l><l>4</l><script><block s="doIfElse"><block s="reportEquals"><block var="i"/><block var="n"/></block><script><block s="doAddToList"><l>1</l><block var="result"/></block></script><script><block s="doAddToList"><l>0</l><block var="result"/></block></script></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="learn %&apos;nr&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doDeclareVariables"><list><l>i</l><l>result</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>ready for next process</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>inputs</l><custom-block s="read input values" scope="local"></custom-block></block><block s="doSetVar"><l>result</l><custom-block s="$gears %s of %s" scope="local"><l>maxpos</l><custom-block s="$gears output of %s layer with input %l" scope="local"><l>last</l><block var="inputs"/></custom-block></custom-block></block><block s="doIfElse"><block s="reportAnd"><block s="reportLessThan"><block var="nr"/><l>11</l></block><block s="reportLessThan"><block var="result"/><l>4</l></block></block><script><block s="doSetVar"><l>i</l><l>0</l></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="result"/><l>4</l></block><block s="reportGreaterThan"><block var="i"/><l>100</l></block></block><script><custom-block s="$gears teach NN with input %l and target output %l %br by backpropagation with learning factor %n" scope="local"><block var="inputs"/><custom-block s="target at %n" scope="local"><l>4</l></custom-block><l>0.1</l></custom-block><custom-block s="$gears show NN status input %l" scope="local"><block var="inputs"/></custom-block><block s="doSetVar"><l>result</l><custom-block s="$gears %s of %s" scope="local"><l>maxpos</l><custom-block s="$gears output of %s layer with input %l" scope="local"><l>last</l><block var="inputs"/></custom-block></custom-block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block></script><script><block s="doIf"><block s="reportAnd"><block s="reportGreaterThan"><block var="nr"/><l>10</l></block><block s="reportGreaterThan"><block var="result"/><l>1</l></block></block><script><block s="doSetVar"><l>i</l><l>0</l></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="result"/><l>1</l></block><block s="reportGreaterThan"><block var="i"/><l>100</l></block></block><script><custom-block s="$gears teach NN with input %l and target output %l %br by backpropagation with learning factor %n" scope="local"><block var="inputs"/><custom-block s="target at %n" scope="local"><l>1</l></custom-block><l>0.1</l></custom-block><custom-block s="$gears show NN status input %l" scope="local"><block var="inputs"/></custom-block><block s="doSetVar"><l>result</l><custom-block s="$gears %s of %s" scope="local"><l>maxpos</l><custom-block s="$gears output of %s layer with input %l" scope="local"><l>last</l><block var="inputs"/></custom-block></custom-block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block></script></block></script></block><custom-block s="show result" scope="local"></custom-block><block s="doSetVar"><l>ready for next process</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block-definition><block-definition s="learn" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>learning</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doSetVar"><l>ready for next process</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doUntil"><block s="reportNot"><block var="learning"/></block><script><block s="doWaitUntil"><block var="ready for next process"/></block><block s="doSetVar"><l>nr</l><block s="reportRandom"><l>1</l><l>20</l></block></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="switch to costume nr %n" type="command" category="other"></wish></l><l>ImageSprite</l></block><list><block var="nr"/></list></block><block s="doRun"><block s="reportAttributeOf"><l><wish s="analyse image" type="command" category="other"></wish></l><l>Control</l></block><list></list></block><custom-block s="learn %n" scope="local"><block var="nr"/></custom-block></script></block></script></block-definition><block-definition s="initialize" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="gotoXY"><l>55</l><l>-250</l></block><custom-block s="$gears new costume width %n height %n %br color %n %n %n" scope="local"><l>200</l><l>100</l><l>255</l><l>225</l><l>205</l></custom-block><custom-block s="$gears add new weights width %n depth %n" scope="local"><l>4</l><l>2</l></custom-block><custom-block s="$gears show NN status input %l" scope="local"><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l><l>0</l></list></block></custom-block></script></block-definition></blocks><variables><variable name="myData"><list id="15912"><item><list id="15913"><item><list struct="atomic" id="15914">0.687789654128889,0.32366191955670365,0.8926785021605994,0.8443496741711141,1</list></item><item><list struct="atomic" id="15915">0.922754265645104,0.7519600338395849,0.25699417919467016,0.3250175502584236,1</list></item><item><list struct="atomic" id="15916">0.3372202239299795,0.5843544681411761,0.5226053325555347,0.06013418697292816,1</list></item><item><list struct="atomic" id="15917">0.43472563005328024,0.7309868163703916,0.21036361236809586,0.13024282642147145,1</list></item></list></item><item><list id="15918"><item><list struct="atomic" id="15919">-0.2928556477118528,-0.24176352907847468,0.21669219259265218,0.287080921216177,1</list></item><item><list struct="atomic" id="15920">-0.33515964391347275,-0.8334589510829209,-0.1770112685745437,-0.3285295307103739,1</list></item><item><list struct="atomic" id="15921">-0.5251434423450897,-0.34635999133778156,-0.4496622777268095,-0.32566228857686036,1</list></item><item><list struct="atomic" id="15922">-0.00007412454285734768,0.33628168198249764,-0.07323292368097459,-0.24335027244754848,1</list></item></list></item></list></variable><variable name="myProperties"><list id="15923"><item><list struct="atomic" id="15924">typeOfData,NN</list></item><item><list struct="atomic" id="15925">imageWidth,200</list></item><item><list struct="atomic" id="15926">imageHeight,100</list></item><item><list struct="atomic" id="15927">backColorRed,255</list></item><item><list struct="atomic" id="15928">backColorGreen,225</list></item><item><list struct="atomic" id="15929">backColorBlue,205</list></item><item><list struct="atomic" id="15930">layers,2</list></item><item><list struct="atomic" id="15931">layerWidth,4</list></item></list></variable><variable name="myMessages"><list struct="atomic" id="15932"></list></variable><variable name="inputs"><list struct="atomic" id="15933">43.3,86.8,62.3,80.8</list></variable><variable name="mean1"><l>43.3</l></variable><variable name="mean2"><l>86.8</l></variable><variable name="mean3"><l>62.3</l></variable><variable name="mean4"><l>80.8</l></variable><variable name="nr"><l>4</l></variable></variables><scripts><script x="48.03571428571429" y="105.05357142857147"><block s="receiveGo"></block><block s="goToLayer"><l><option>front</option></l></block><block s="setHeading"><l>-90</l></block><block s="gotoXY"><l>55</l><l>-250</l></block></script></scripts></sprite><watcher var="ready for next process" style="normal" x="12.099999999999909" y="45.738002420000015" color="243,118,29" hidden="true"/><watcher var="learning" style="normal" x="18.15000000000009" y="64.13" color="243,118,29"/><watcher s="xPosition" style="normal" x="12.099999999999909" y="79.37600484000001" color="74,108,212" hidden="true"/><watcher s="yPosition" style="normal" x="12.099999999999909" y="113.01400726000003" color="74,108,212" hidden="true"/><watcher var="inputs" style="normal" x="12.099999999999909" y="208.12001210000003" color="243,118,29" hidden="true"/><watcher var="myData" style="normal" x="12.099999999999909" y="241.75801452000007" color="243,118,29" hidden="true"/><watcher scope="Stage" s="reportMouseX" style="normal" x="12.099999999999909" y="511.58801694" color="4,148,220" hidden="true"/><watcher scope="Stage" s="reportMouseY" style="normal" x="12.099999999999909" y="545.22601936" color="4,148,220" hidden="true"/><watcher var="kernels" style="normal" x="12.099999999999909" y="574.7500217799999" color="243,118,29" hidden="true"/><watcher scope="ImageSprite" var="myProperties" style="normal" x="12.099999999999909" y="753.8299975799998" color="243,118,29" hidden="true"/><watcher scope="ImageSprite" var="myData" style="normal" x="47.190000000000055" y="129.46999757999987" color="243,118,29" hidden="true"/><watcher var="second layer" style="normal" x="692.1199999999999" y="756.0079975799999" color="243,118,29" hidden="true"/><watcher var="final feature maps" style="normal" x="36.299999999999955" y="768.10799758" color="243,118,29" hidden="true"/><watcher var="first layer" style="normal" x="30.25" y="647.10799758" color="243,118,29" hidden="true"/><watcher scope="NeuralNetSprite" var="inputs" style="normal" x="12.099999999999909" y="934.36199758" color="243,118,29" hidden="true"/><watcher scope="NeuralNetSprite" var="nr" style="normal" x="12.099999999999909" y="934.36199758" color="243,118,29" hidden="true"/><watcher scope="NeuralNetSprite" var="mean4" style="large" x="728.4200000000001" y="630.65199758" color="243,118,29"/><watcher scope="NeuralNetSprite" var="mean3" style="large" x="586.8499999999999" y="633.07199758" color="243,118,29"/><watcher scope="NeuralNetSprite" var="mean2" style="large" x="444.0699999999997" y="629.44199758" color="243,118,29"/><watcher scope="NeuralNetSprite" var="mean1" style="large" x="304.9200000000001" y="631.8619975800001" color="243,118,29"/><watcher scope="bDraw" s="xPosition" style="normal" x="12.099999999999909" y="934.36199758" color="74,108,212" hidden="true"/><watcher scope="NeuralNetSprite" s="xPosition" style="normal" x="12.099999999999909" y="934.36199758" color="74,108,212" hidden="true"/><watcher scope="NeuralNetSprite" s="yPosition" style="normal" x="12.099999999999909" y="934.36199758" color="74,108,212" hidden="true"/><watcher scope="thePen" s="xPosition" style="normal" x="12.099999999999909" y="934.36199758" color="74,108,212" hidden="true"/><watcher scope="thePen" s="yPosition" style="normal" x="12.099999999999909" y="934.36199758" color="74,108,212" hidden="true"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="set value %&apos;which&apos; to %&apos;value&apos;" type="command" category="sensing"><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Project notes&#xD;Project name&#xD;Language&#xD;Zoom blocks&#xD;Stage size&#xD;Stage scale&#xD;Visible palette</options></input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>which</l><l>value</l></list><l>var   stage = this.parentThatIsA(StageMorph),&#xD;        ide = stage.parentThatIsA(IDE_Morph),&#xD;        world = stage.parentThatIsA(WorldMorph);&#xD;&#xD;try {&#xD;ide.savingPreferences = false;&#xD;&#xD;switch (which) {&#xD;    case &apos;Project notes&apos;:&#xD;        ide.projectNotes = value;&#xD;        break;&#xD;    case &apos;Project name&apos;:&#xD;        ide.setProjectName(value);&#xD;        break;&#xD;    case &apos;Language&apos;:&#xD;        ide.setLanguage(value);&#xD;        break;&#xD;    case &apos;Zoom blocks&apos;:&#xD;        if (!isNaN(value)) ide.setBlocksScale(Math.min(value, 12));&#xD;        break;&#xD;    case &apos;Stage size&apos;:&#xD;        if ((value instanceof List) &amp;&amp; value.length()==2&#xD;                       &amp;&amp; !isNaN(value.at(1)) &amp;&amp; !isNaN(value.at(2)))&#xD;            ide.setStageExtent(new Point(value.at(1), value.at(2)));&#xD;        break;&#xD;    case &apos;Stage scale&apos;:&#xD;        ide.toggleStageSize(value != 1, Math.max(0.1, value));&#xD;        break;&#xD;    case &apos;Visible palette&apos;:&#xD;        ide.currentCategory = value.toLowerCase();&#xD;        ide.categories.children.forEach(function (each) {&#xD;                each.refresh();&#xD;        });&#xD;        ide.refreshPalette(true);&#xD;        break;&#xD;};&#xD;}&#xD;finally {ide.savingPreferences = true;&#xD;};</l></block><list><block var="which"/><block var="value"/></list></block></script></block-definition><block-definition s="element %&apos;x&apos; %&apos;y&apos; of %&apos;table&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">1</input><input type="%l">myData</input></inputs><script><block s="doIfElse"><block s="reportAnd"><block s="reportLessThan"><block var="y"/><block s="reportSum"><block s="reportListLength"><block var="table"/></block><l>1</l></block></block><block s="reportLessThan"><block var="x"/><block s="reportSum"><block s="reportListLength"><block s="reportListItem"><l>1</l><block var="table"/></block></block><l>1</l></block></block></block><script><block s="doReport"><block s="reportListItem"><block var="x"/><block s="reportListItem"><block var="y"/><block var="table"/></block></block></block></script><script><block s="doReport"><l>impossible</l></block></script></block></script></block-definition></blocks><variables><variable name="learning"><bool>false</bool></variable><variable name="ready for next process"><bool>true</bool></variable><variable name="kernels"><list id="16024"><item><list id="16025"><item><list struct="atomic" id="16026">-1,0,1</list></item><item><list struct="atomic" id="16027">-1,0,1</list></item><item><list struct="atomic" id="16028">-1,0,1</list></item></list></item><item><list id="16029"><item><list struct="atomic" id="16030">-1,-1,-1</list></item><item><list struct="atomic" id="16031">0,0,0</list></item><item><list struct="atomic" id="16032">1,1,1</list></item></list></item><item><list id="16033"><item><list struct="atomic" id="16034">-1,-2,-1</list></item><item><list struct="atomic" id="16035">0,0,0</list></item><item><list struct="atomic" id="16036">1,2,1</list></item></list></item><item><list id="16037"><item><list struct="atomic" id="16038">1,2,1</list></item><item><list struct="atomic" id="16039">2,4,2</list></item><item><list struct="atomic" id="16040">1,2,1</list></item></list></item><item><list id="16041"><item><list struct="atomic" id="16042">0,1,0</list></item><item><list struct="atomic" id="16043">1,-4,0</list></item><item><list struct="atomic" id="16044">0,1,0</list></item></list></item><item><list id="16045"><item><list struct="atomic" id="16046">1,2,1</list></item><item><list struct="atomic" id="16047">2,-13,2</list></item><item><list struct="atomic" id="16048">1,2,1</list></item></list></item></list></variable><variable name="final feature maps"><list struct="atomic" id="16049">0,0,0,0</list></variable><variable name="first layer"><list id="16050"><item><list struct="atomic" id="16051">0,0</list></item><item><list struct="atomic" id="16052">0,0</list></item><item><list struct="atomic" id="16053">0,0</list></item></list></variable><variable name="second layer"><list id="16054"><item><list struct="atomic" id="16055">0,0,0,0</list></item><item><list struct="atomic" id="16056">0,0,0,0</list></item><item><list struct="atomic" id="16057">0,0,0,0</list></item></list></variable></variables></project><media name="Convolutional NN" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>