Browse Source

SMparser basics functional

jancoow 10 years ago
parent
commit
45cc1f919c
2 changed files with 2197 additions and 10 deletions
  1. 72 10
      src/SMParser/SMParser.java
  2. 2125 0
      test

+ 72 - 10
src/SMParser/SMParser.java

@@ -1,28 +1,37 @@
 package SMParser;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import java.util.Arrays;
+import java.util.ArrayList;
+
+import javax.json.Json;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonWriter;
 
 
 public class SMParser {
-	private static String[] metaDataHeaders = {"OFFSET:","TITLE:","ARTIST:", "DISPLAYBPM:", "MUSIC","SAMPLESTART:"};
-	String[] metadata;
-	
+	private static String[] metaDataHeaders = {"OFFSET:","TITLE:","ARTIST:", "DISPLAYBPM:", "MUSIC","SAMPLESTART:", "BANNER:", "BACKGROUND:", "SUBTITLE:"};
+	private String[] metadata;
+	private ArrayList<JsonObjectBuilder> arrays;
 	
 	public SMParser(){
 		try {
 			String file = readFile("test", Charset.defaultCharset());
 			String[] mainsplit = file.split("\\#");
-			String[] metadata = new String[metaDataHeaders.length];
-			
+			arrays = new ArrayList<JsonObjectBuilder>();
+			metadata = new String[metaDataHeaders.length];
 			for(String s:mainsplit){
 				//searching for the metadata
 				int i = 0;
 				for(String header:metaDataHeaders){
 					if(s.contains(header)){
-						metadata[i] = getValue(s).replace(';', ' ');
+						metadata[i] = getValue(s).replace(';', ' ').trim();
 					}
 					i++;
 				}
@@ -36,9 +45,13 @@ public class SMParser {
 						}
 						s= s.replaceAll("//.*", ""); // remove some more bs
 						s = s.replaceAll("\\;", "");
-						System.out.println(difficulty);
+						
 						notesplit = s.split("\\,"); //split everything in arrays which contains "beats" for 1 second
 						double secondscounter = Double.parseDouble(metadata[0])*-1;
+						int extraButtonTime = notesplit.length / difficultyToMaxButtons(difficulty);
+						int maxButtons = 1;						
+						JsonArrayBuilder objectsArrayBuilder = Json.createArrayBuilder();
+						
 						for(String notespersecond:notesplit){
 							notespersecond = notespersecond.trim();
 							String[] notes = notespersecond.split("\n");
@@ -47,21 +60,70 @@ public class SMParser {
 							for(String note:notes){
 								int direction = noteToDirection(note);
 								if(direction != -1){
-									System.out.println(time + "\t\t" + direction);
+									JsonObjectBuilder object = Json.createObjectBuilder();
+									object.add("time", time);
+									object.add("direction", direction);
+									object.add("button", (int)(Math.random()*maxButtons));
+									objectsArrayBuilder.add(object.build());
+								}
+								if(extraButtonTime*maxButtons < time){
+									maxButtons++;
 								}
 								time += precision;
 							}
 							secondscounter++;
 						}
-						System.out.println("----------");
+						
+						arrays.add(Json.createObjectBuilder());
+						arrays.get(arrays.size()-1).add("difficulty", difficulty);
+						arrays.get(arrays.size()-1).add("objects", objectsArrayBuilder);					
 					}
 				};
 			}
+			writeJsonFile();
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
 	}
 	
+	private void writeJsonFile(){
+		JsonObjectBuilder jsonfilebuilder = Json.createObjectBuilder();
+		JsonArrayBuilder dataArrayBuilder = Json.createArrayBuilder();
+		
+		jsonfilebuilder.add("meta", Json.createObjectBuilder().add("title", metadata[1]).add("subtitle", metadata[8]).add("author", metadata[2]).add("BPM", Double.parseDouble(metadata[3])).add("sample_start", Double.parseDouble(metadata[5])));
+		jsonfilebuilder.add("file", Json.createObjectBuilder().add("audio", metadata[4]).add("background", metadata[7]).add("banner", metadata[6]));
+		for(JsonObjectBuilder ar:arrays){
+			dataArrayBuilder.add(ar.build());
+		}
+		jsonfilebuilder.add("data", dataArrayBuilder);
+		
+		
+		try {
+			JsonObject file = jsonfilebuilder.build();
+			OutputStream os;
+			os = new FileOutputStream("emp.txt");
+			JsonWriter jsonWriter = Json.createWriter(os);
+			jsonWriter.writeObject(file);
+			jsonWriter.close();		
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+		}
+
+	}
+	
+	private int difficultyToMaxButtons(String d){
+		if(d.equals("Beginner")){
+			return 2;
+		}else if(d.equals("Easy")){
+			return 3;
+		}else if(d.equals("Medium")){
+			return 4;
+		}else if(d.equals("Hard")){
+			return 6;
+		}
+		return 0;
+	}
+	
 	private String getValue(String s){
 		String[] split = s.split("\\:");
 		if(split[1] != null){

+ 2125 - 0
test

@@ -0,0 +1,2125 @@
+#TITLE:WE ARE THE CHAMPIONS;
+#SUBTITLE:(Factory Team Remix);
+#ARTIST:LIVE 2 LOVE;
+#TITLETRANSLIT:;
+#SUBTITLETRANSLIT:;
+#ARTISTTRANSLIT:;
+#CREDIT:;
+#BANNER:WE ARE THE CHAMPIONS (Factory Team Remix).png;
+#BACKGROUND:WE ARE THE CHAMPIONS (Factory Team Remix)-bg.png;
+#LYRICSPATH:WE ARE THE CHAMPIONS (Factory Team Remix).lrc;
+#CDTITLE:./CDTITLES/DANCE MANIA SPORTS.PNG;
+#MUSIC:WE ARE THE CHAMPIONS (Factory Team Remix).mp3;
+#OFFSET:-3.823;
+#SAMPLESTART:44.260;
+#SAMPLELENGTH:12.000;
+#SELECTABLE:YES;
+#DISPLAYBPM:136.000;
+#BPMS:0.000=136.000;
+#STOPS:;
+#BGCHANGES:;
+
+//---------------dance-single - ----------------
+#NOTES:
+     dance-single:
+     :
+     Beginner:
+     1:
+     0.155,0.200,0.146,0.000,0.000:
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+1000
+0000
+1000
+0000
+,
+0001
+0000
+0001
+0000
+,
+0100
+0000
+0100
+0000
+,
+1001
+0000
+0000
+0000
+,
+1000
+0000
+0001
+0001
+,
+0000
+0000
+0100
+0100
+,
+0000
+0000
+1000
+0000
+,
+0010
+0000
+0010
+0010
+,
+0000
+0000
+1000
+1000
+,
+0000
+0000
+0010
+0000
+,
+0001
+0000
+0001
+0000
+,
+0010
+0000
+0100
+0000
+,
+0001
+0000
+0100
+0000
+,
+1000
+0000
+0100
+0000
+,
+0001
+0000
+0010
+0000
+,
+1000
+0000
+0010
+0000
+,
+1001
+0000
+0010
+0000
+,
+1001
+0000
+0100
+0000
+,
+1001
+0000
+0000
+0000
+,
+1001
+0000
+0110
+0000
+,
+0110
+0000
+1001
+0000
+,
+0001
+0000
+0001
+0000
+,
+1000
+0000
+1000
+0000
+,
+0001
+0000
+0001
+0000
+,
+1001
+0000
+1001
+0000
+,
+1000
+0000
+1000
+0000
+,
+0001
+0000
+0001
+0000
+,
+1000
+0000
+1000
+0000
+,
+1001
+0000
+1001
+0000
+,
+1000
+0000
+0001
+0000
+,
+1000
+0000
+0001
+0000
+,
+0001
+0000
+1000
+0000
+,
+0001
+0000
+1000
+0000
+,
+0001
+0000
+1000
+0000
+,
+0001
+0001
+0000
+0000
+,
+1000
+0000
+0001
+0000
+,
+1000
+1000
+0000
+0000
+,
+0010
+0000
+0100
+0000
+,
+0010
+0000
+0100
+0000
+,
+0010
+0000
+0000
+0000
+;
+
+//---------------dance-single - ----------------
+#NOTES:
+     dance-single:
+     :
+     Easy:
+     3:
+     0.217,0.262,0.146,0.037,0.000:  // measure 1
+0000
+0000
+0000
+0000
+,  // measure 2
+0000
+0000
+0000
+0000
+,  // measure 3
+1000
+0000
+1000
+0000
+,  // measure 4
+0001
+0000
+0001
+0000
+,  // measure 5
+0100
+0000
+0100
+0000
+,  // measure 6
+1001
+0000
+0000
+0000
+,  // measure 7
+1000
+0000
+0001
+0001
+,  // measure 8
+0100
+0000
+0100
+0100
+,  // measure 9
+1000
+0000
+1000
+0001
+,  // measure 10
+0010
+0000
+0010
+0010
+,  // measure 11
+0001
+0000
+1000
+1000
+,  // measure 12
+0100
+0000
+0010
+0100
+,  // measure 13
+0001
+0000
+0001
+1000
+,  // measure 14
+0010
+0000
+0100
+0010
+,  // measure 15
+0001
+0100
+0100
+0000
+,  // measure 16
+1000
+0100
+0100
+0000
+,  // measure 17
+0001
+0010
+0010
+0000
+,  // measure 18
+1000
+0010
+0010
+0000
+,  // measure 19
+1001
+0000
+0010
+0000
+,  // measure 20
+1001
+0000
+0100
+0000
+,  // measure 21
+2002
+0000
+3003
+0000
+,  // measure 22
+1001
+0000
+0110
+0000
+,  // measure 23
+0110
+0000
+1001
+0000
+,  // measure 24
+0001
+0010
+0001
+0000
+,  // measure 25
+1000
+0010
+1000
+0000
+,  // measure 26
+0001
+0010
+0001
+0000
+,  // measure 27
+1001
+0000
+1001
+0000
+,  // measure 28
+1000
+0100
+1000
+0000
+,  // measure 29
+0001
+0100
+0001
+0000
+,  // measure 30
+1000
+0100
+1000
+0000
+,  // measure 31
+1001
+0000
+1001
+0000
+,  // measure 32
+1000
+0010
+0001
+0010
+,  // measure 33
+1000
+0100
+0001
+0100
+,  // measure 34
+0001
+0010
+1000
+0010
+,  // measure 35
+0001
+0100
+1000
+0100
+,  // measure 36
+0001
+1000
+1000
+0100
+,  // measure 37
+0001
+0001
+0100
+0000
+,  // measure 38
+1000
+0001
+0001
+0100
+,  // measure 39
+1000
+1000
+0100
+0000
+,  // measure 40
+0010
+0000
+0100
+0000
+,  // measure 41
+0010
+0100
+0100
+0000
+,  // measure 42
+0020
+0000
+0000
+0000
+,  // measure 43
+0000
+0000
+0000
+0000
+,  // measure 44
+0030
+0000
+0000
+0000
+;
+
+//---------------dance-single - ----------------
+#NOTES:
+     dance-single:
+     :
+     Medium:
+     5:
+     0.362,0.366,0.268,0.195,0.000:
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+1000
+1000
+0001
+0001
+,
+0010
+1000
+0001
+0000
+0010
+0001
+1000
+0000
+,
+0010
+0010
+0100
+0100
+,
+1000
+0100
+0010
+0001
+0100
+0000
+1001
+0000
+,
+1000
+0010
+1000
+0100
+,
+0001
+0000
+0010
+0000
+0001
+0100
+0100
+0000
+,
+1000
+0100
+0001
+0010
+,
+1000
+0000
+0001
+0000
+1001
+0000
+0100
+0100
+,
+0001
+0010
+0001
+0100
+,
+1000
+0000
+0010
+0000
+1000
+0100
+0100
+0000
+,
+0001
+0100
+1000
+0010
+,
+0001
+0000
+1000
+0000
+1001
+0000
+0010
+0010
+,
+1000
+1001
+0010
+0011
+,
+1000
+0100
+1000
+0000
+0001
+0100
+0001
+0000
+,
+0001
+1001
+0010
+1010
+,
+0001
+0100
+0001
+0000
+1000
+0100
+1000
+0000
+,
+2000
+3100
+0200
+0310
+,
+0020
+0031
+0002
+0013
+,
+0020
+0200
+0000
+0330
+,
+2000
+0010
+3002
+0100
+,
+2003
+0010
+0002
+3003
+,
+1000
+0010
+0001
+0010
+,
+0101
+0000
+0000
+1010
+0000
+0000
+0000
+1000
+,
+0010
+0100
+0010
+0100
+,
+0110
+0001
+0110
+1000
+,
+0001
+0010
+1000
+0010
+,
+0100
+0010
+0010
+0000
+1000
+0001
+0001
+0000
+,
+0010
+0101
+0010
+1100
+,
+0001
+0100
+1000
+0000
+1000
+0100
+0001
+0000
+,
+0100
+0010
+0001
+0101
+,
+2000
+0000
+0000
+0002
+0000
+0000
+3003
+0000
+,
+0100
+0010
+1000
+1100
+,
+0002
+0000
+0000
+2000
+0000
+0000
+3003
+0000
+,
+0010
+0110
+0100
+0110
+,
+0001
+0000
+1000
+0100
+0010
+0001
+0100
+0000
+,
+0101
+1000
+1100
+0001
+,
+0110
+0000
+0000
+1001
+0000
+0000
+0100
+0000
+,
+1000
+0010
+0001
+0000
+0001
+0010
+1000
+0000
+,
+1000
+0100
+0010
+0100
+1000
+0000
+0001
+0000
+,
+2002
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+3003
+0000
+0000
+0000
+;
+
+//---------------dance-single - ----------------
+#NOTES:
+     dance-single:
+     :
+     Hard:
+     7:
+     0.412,0.392,0.085,0.061,0.079:
+0000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+1000
+0000
+0001
+1000
+0000
+0100
+0010
+0001
+,
+0000
+1000
+0001
+0000
+0010
+0001
+0100
+0000
+,
+0001
+0000
+1000
+0001
+0000
+0010
+0100
+1000
+,
+0000
+0001
+1000
+0000
+0100
+1000
+0010
+0000
+,
+1000
+0001
+0100
+0000
+0001
+1000
+0100
+0000
+,
+1000
+0010
+0100
+0000
+1000
+0100
+0010
+0000
+,
+0001
+1000
+0010
+0000
+1000
+0001
+0010
+0000
+,
+0001
+0100
+0010
+0000
+1000
+0010
+0100
+0000
+,
+0001
+0100
+0010
+0000
+1000
+0000
+1001
+0000
+,
+1000
+0100
+0010
+0000
+0001
+0000
+1001
+0000
+,
+1000
+0001
+1000
+0000
+0001
+1000
+0001
+0000
+,
+0010
+0000
+0000
+0010
+0000
+0000
+0010
+0000
+0100
+0000
+0000
+0100
+0000
+0000
+0100
+0000
+,
+1000
+0100
+1000
+0001
+0000
+0001
+1000
+0010
+,
+0000
+0100
+0001
+1000
+0100
+0000
+0101
+0000
+,
+0001
+0100
+0001
+1000
+0000
+1000
+0001
+0010
+,
+0000
+0100
+1000
+0001
+0010
+0000
+0110
+0000
+,
+1000
+0000
+0000
+0010
+0000
+0000
+1000
+0000
+0001
+0000
+0000
+0010
+0000
+0000
+0001
+0000
+,
+0100
+0000
+0000
+0001
+0000
+0000
+0100
+0000
+0010
+0000
+0000
+0100
+0000
+0000
+0001
+0000
+,
+1000
+0000
+0000
+0010
+0000
+0000
+1000
+0000
+0001
+0000
+0000
+0100
+0000
+0000
+0001
+0000
+,
+2000
+0010
+3001
+0000
+0002
+0010
+1003
+0000
+,
+2000
+0100
+3001
+0000
+1001
+0000
+0000
+0000
+,
+0001
+0010
+0100
+0010
+0000
+0100
+0100
+0000
+,
+1000
+0010
+0100
+0010
+0000
+0100
+0100
+0000
+,
+1000
+0001
+1000
+0100
+0010
+0001
+0010
+0000
+,
+0001
+0000
+0000
+0001
+0000
+0000
+0001
+0000
+1000
+0000
+0000
+1000
+0000
+0000
+1000
+0000
+,
+0001
+0100
+0010
+0100
+0000
+0010
+0010
+0000
+,
+1000
+0100
+0010
+0100
+0000
+0010
+0010
+0000
+,
+0001
+1000
+0100
+0010
+0001
+1000
+0010
+0000
+,
+1000
+0000
+0000
+1000
+0000
+0000
+1000
+0000
+0001
+0000
+0000
+0001
+0000
+0000
+0001
+0000
+,
+0010
+0000
+0010
+0001
+0000
+0001
+0010
+0000
+,
+0011
+0000
+0100
+1000
+0000
+0000
+0100
+0000
+,
+1000
+0000
+1000
+0100
+0000
+0100
+1000
+0000
+,
+1010
+0000
+1000
+0001
+0000
+0000
+0001
+0000
+,
+0100
+0010
+1000
+0010
+0000
+1000
+0100
+0000
+,
+0010
+0001
+1000
+0100
+0000
+0001
+0010
+0000
+,
+0100
+1000
+0001
+0010
+0000
+0001
+0100
+0000
+,
+0001
+0100
+0010
+1000
+0000
+0001
+0100
+0000
+,
+0010
+1000
+0010
+0000
+0100
+0010
+0100
+0000
+,
+0001
+0000
+0100
+0000
+0010
+0000
+1000
+0000
+0000
+0000
+0010
+0000
+0000
+0200
+0000
+0000
+,
+2000
+0000
+0000
+0000
+,
+0000
+0000
+0000
+0000
+,
+3300
+0000
+0000
+0000
+;
+
+//---------------dance-double - ----------------
+#NOTES:
+     dance-double:
+     :
+     Easy:
+     3:
+     0.203,0.262,0.183,0.049,0.000:
+00000000
+00000000
+00000000
+00000000
+,
+00000000
+00000000
+00000000
+00000000
+,
+00010000
+00000000
+00010000
+00000000
+,
+00001000
+00000000
+00001000
+00000000
+,
+00010000
+00000000
+00001000
+00000000
+,
+00100000
+00000000
+01000000
+00000000
+,
+10000000
+00000000
+00010000
+00000000
+,
+01000000
+01000000
+00100000
+00000000
+,
+10000000
+00000000
+01000000
+00000000
+,
+00010000
+00000000
+00011000
+00000000
+,
+00000100
+00000000
+00001000
+00000000
+,
+00000100
+00000100
+00000010
+00000000
+,
+00000001
+00000000
+00000100
+00000000
+,
+00001000
+00000000
+00011000
+00000000
+,
+00100000
+00010000
+00010000
+00000000
+,
+10000000
+10000000
+01000000
+00000000
+,
+10000000
+00010000
+00010000
+00000000
+,
+01000000
+01000000
+00010000
+00000000
+,
+00011000
+00000000
+00001000
+00000000
+,
+00001010
+00000000
+00001000
+00000000
+,
+00022000
+00000000
+00033000
+00000000
+,
+00001000
+00000000
+01000000
+00000000
+,
+00010000
+00000000
+10010000
+00000000
+,
+00100000
+10000000
+00100000
+00000000
+,
+01000000
+00010000
+01000000
+00000000
+,
+00001000
+00000000
+00011000
+00000000
+,
+00010000
+00000000
+00000100
+00000000
+,
+00000010
+00000001
+00000010
+00000000
+,
+00000100
+00001000
+00000100
+00000000
+,
+00010000
+00000000
+00011000
+00000000
+,
+00001000
+00000000
+00100000
+00000000
+,
+00010000
+01000000
+10000000
+01000000
+,
+10010000
+00000000
+10010000
+00000000
+,
+00100000
+00001000
+00010000
+00001000
+,
+00011000
+00000000
+00011000
+00000000
+,
+00000010
+00001000
+00000001
+00000001
+,
+00000100
+00000010
+00001000
+00001000
+,
+00000100
+00000000
+00010000
+00001000
+,
+00011000
+00000000
+00011000
+00000000
+,
+00001000
+00000000
+00100000
+00000000
+,
+00010000
+00010000
+10000000
+00000000
+,
+20020000
+00000000
+00000000
+00000000
+,
+00000000
+00000000
+00000000
+00000000
+,
+30030000
+00000000
+00000000
+00000000
+;
+
+//---------------dance-double - ----------------
+#NOTES:
+     dance-double:
+     :
+     Medium:
+     5:
+     0.311,0.314,0.256,0.097,0.000:
+00000000
+00000000
+00000000
+00000000
+,
+00000000
+00000000
+00000000
+00000000
+,
+10000000
+10000000
+00010000
+00010000
+,
+00100000
+00000000
+00010000
+00000000
+10000000
+01000000
+00010000
+00000000
+,
+00001000
+00001000
+00000010
+00000010
+,
+00000001
+00001000
+00001001
+00000000
+,
+00000100
+00000001
+00000010
+00000001
+,
+00000001
+00000100
+00001000
+00010000
+,
+01000000
+10000000
+00100000
+10000000
+,
+10000000
+01000000
+00010000
+00001000
+,
+00000100
+00000010
+00001000
+00001100
+,
+00000001
+00000100
+00000010
+00001010
+,
+00010000
+00001000
+00100000
+01100000
+,
+00100000
+00010000
+01000000
+00000000
+00100000
+10000000
+01000000
+00000000
+,
+00100000
+00001000
+00010000
+00011000
+,
+00000010
+00000000
+00000100
+00000000
+00000001
+00000001
+00000100
+00000000
+,
+00000010
+00010000
+00001000
+00011000
+,
+00100000
+00000000
+01000000
+00000000
+10000000
+10000000
+01000000
+00000000
+,
+10010000
+00000000
+01100000
+00000000
+,
+00011000
+00000000
+00000110
+00000000
+,
+00000002
+00002000
+00000000
+00003003
+,
+00000020
+00000000
+00020030
+00000000
+,
+00032000
+00000000
+02003000
+03000000
+,
+00010000
+00100000
+00010000
+10000000
+,
+10010000
+00000000
+00000000
+01100000
+00000000
+00000000
+00000000
+00000000
+,
+00100000
+01000000
+00100000
+01100000
+,
+10000000
+00010000
+01000000
+00000000
+00010000
+10000000
+00100000
+00000000
+,
+01000000
+00010000
+00001000
+00000010
+,
+00000100
+00000001
+00001000
+00001001
+,
+00000100
+00000010
+00000001
+00000101
+,
+00001000
+00000010
+00000100
+00000000
+00000001
+00000010
+00000100
+00000000
+,
+00001000
+00010000
+00100000
+01000000
+,
+00110000
+00000000
+00000000
+00011000
+00000000
+00000000
+00000000
+00000000
+,
+00001000
+00000010
+00000001
+00001000
+,
+00001100
+00000000
+00000000
+00011000
+00000000
+00000000
+00000000
+00000000
+,
+00010000
+00100000
+10000000
+01000000
+,
+00010000
+00001000
+00000010
+00000001
+,
+00001000
+00010000
+10000000
+00010000
+,
+00001000
+00000001
+00001000
+00010000
+,
+00100000
+00010000
+01000000
+00000000
+00010000
+10000000
+01000000
+00000000
+,
+00010000
+00001000
+00011000
+00000000
+,
+00022000
+00000000
+00000000
+00000000
+,
+00000000
+00000000
+00000000
+00000000
+,
+00033000
+00000000
+00000000
+00000000
+;
+
+//---------------dance-double - ----------------
+#NOTES:
+     dance-double:
+     :
+     Hard:
+     7:
+     0.414,0.416,0.085,0.073,0.067:
+00000000
+00000000
+00000000
+00000000
+,
+00000000
+00000000
+00000000
+00000000
+,
+00001000
+00000000
+00100000
+00010000
+00000000
+01000000
+00100000
+10000000
+,
+00000000
+01000000
+00100000
+00000000
+00010000
+00000000
+00011000
+00000000
+,
+00010000
+00000000
+00000010
+00001000
+00000000
+00000100
+00000010
+00000001
+,
+00000000
+00000100
+00000010
+00000000
+00010000
+00000000
+00100000
+00000000
+,
+10000000
+00010000
+01000000
+00000000
+00100000
+10000000
+01000000
+00000000
+,
+00100000
+00001000
+00010000
+00000000
+00000100
+00000000
+00001100
+00000000
+,
+00000001
+00001000
+00000010
+00000000
+00000100
+00000001
+00000010
+00000000
+,
+00000100
+00010000
+00001000
+00000000
+00100000
+00000000
+00110000
+00000000
+,
+01000000
+00100000
+00010000
+00000000
+10000000
+01000000
+00010000
+00000000
+,
+00001000
+00010000
+00000100
+00000000
+00000010
+00000001
+00001000
+00000000
+,
+00000010
+00000100
+00000001
+00000000
+00001000
+00000010
+00010000
+00000000
+,
+00001000
+00100000
+00001000
+00010000
+00000010
+00001000
+00000100
+00000000
+,
+00010000
+00001000
+01000000
+00010000
+00000000
+10000000
+01000000
+00100000
+,
+00000000
+00010000
+00100000
+00001000
+01000000
+00000000
+01010000
+00000000
+,
+00001000
+00010000
+00000100
+00001000
+00000000
+00000001
+00000100
+00000010
+,
+00000000
+00001000
+00000010
+00010000
+00000100
+00000000
+00001100
+00000000
+,
+00000010
+00000000
+00000000
+00000001
+00000000
+00000000
+00000100
+00000000
+00001000
+00000000
+00000000
+00010000
+00000000
+00000000
+00100000
+00000000
+,
+10000000
+00000000
+00000000
+00010000
+00000000
+00000000
+01000000
+00000000
+00100000
+00000000
+00000000
+10000000
+00000000
+00000000
+00010000
+00000000
+,
+10000000
+00000000
+00000000
+00100000
+00000000
+00000000
+10000000
+00000000
+01000000
+00000000
+00000000
+00100000
+00000000
+00000000
+00001000
+00000000
+,
+00020000
+00000000
+00030000
+00000100
+00000200
+00000000
+00000300
+00010000
+,
+00020000
+00000000
+00000000
+00001000
+00002000
+00000000
+00033000
+00000000
+,
+00000010
+00000100
+00000010
+00000100
+00000000
+00000001
+00000100
+00000000
+,
+00000010
+00001000
+00000010
+00001000
+00000000
+00010000
+00001000
+00000000
+,
+01000000
+00100000
+01000000
+00100000
+00000000
+00010000
+00100000
+00000000
+,
+00001000
+00000000
+00000000
+00001000
+00000000
+00000000
+00001000
+00000000
+01000000
+00000000
+00000000
+01000000
+00000000
+00000000
+01000000
+00000000
+,
+00100000
+01000000
+00100000
+01000000
+00000000
+10000000
+01000000
+00000000
+,
+00100000
+00010000
+00100000
+00010000
+00000000
+00001000
+00010000
+00000000
+,
+00000100
+00000010
+00000100
+00000010
+00000000
+00001000
+00000010
+00000000
+,
+00010000
+00000000
+00000000
+00010000
+00000000
+00000000
+00010000
+00000000
+00000100
+00000000
+00000000
+00000100
+00000000
+00000000
+00000100
+00000000
+,
+00010000
+00000000
+00001000
+00100000
+00000000
+00001000
+00010000
+00000000
+,
+00110000
+00000000
+10000000
+00010000
+00000000
+00000000
+00100000
+00000000
+,
+00001000
+00000000
+00010000
+00000010
+00000000
+00010000
+00001000
+00000000
+,
+00001010
+00000000
+00000001
+00001000
+00000000
+00000000
+00000100
+00000000
+,
+00010000
+00001000
+00010000
+00000100
+00000010
+00000001
+00000100
+00000001
+,
+00000100
+00000010
+00010000
+00001000
+01000000
+00100000
+10000000
+00000000
+,
+01000000
+00100000
+01000000
+00010000
+00001000
+00010000
+00000010
+00000100
+,
+00000001
+00000100
+00000010
+00001000
+00000100
+00010000
+00001000
+00000000
+,
+00100000
+00001000
+00010000
+00000000
+00000010
+00010000
+00001000
+00000000
+,
+01000000
+00000000
+00001000
+00000000
+00010000
+00000000
+00000100
+00000000
+00000000
+00000000
+00000010
+00000000
+00000000
+00000002
+00000000
+00000000
+,
+00002000
+00000000
+00000000
+00000000
+,
+00000000
+00000000
+00000000
+00003003
+;