diff --git a/BarracksSpr.inc b/BarracksSpr.i similarity index 100% rename from BarracksSpr.inc rename to BarracksSpr.i diff --git a/BitmapEncoder-master/.gitattributes b/BitmapEncoder-master/.gitattributes new file mode 100644 index 0000000..32fdc60 --- /dev/null +++ b/BitmapEncoder-master/.gitattributes @@ -0,0 +1,23 @@ +# Auto detect text files and perform LF normalization +* text=auto +*.jar binary + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/BitmapEncoder-master/.gitignore b/BitmapEncoder-master/.gitignore new file mode 100644 index 0000000..f05169a --- /dev/null +++ b/BitmapEncoder-master/.gitignore @@ -0,0 +1,3 @@ +/build/ +/dist/ +/settings.dat \ No newline at end of file diff --git a/BitmapEncoder-master/BitmapEncoder.jar b/BitmapEncoder-master/BitmapEncoder.jar new file mode 100755 index 0000000..91a4514 Binary files /dev/null and b/BitmapEncoder-master/BitmapEncoder.jar differ diff --git a/BitmapEncoder-master/README.md b/BitmapEncoder-master/README.md new file mode 100644 index 0000000..1801a22 --- /dev/null +++ b/BitmapEncoder-master/README.md @@ -0,0 +1,10 @@ +BitmapEncoder +============= + +**Encode images to display them on your Gamebuino** + +The encoder is programmed using Java 8, so you have to install the Java 8 JRE if you don't already have it. + +You can download it here: [Java 8 Download](http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html) + +Once Java is installed, simply double click on BitmapEncoder.jar to run it. diff --git a/BitmapEncoder-master/changelog.md b/BitmapEncoder-master/changelog.md new file mode 100644 index 0000000..5aa424a --- /dev/null +++ b/BitmapEncoder-master/changelog.md @@ -0,0 +1,13 @@ +#2014-08-12 +* larger output text area +* upper case output hex value +* bitmap takes the name of the selected file + +#2014-08-19 +* added radio buttons to choose single or multi-file mode +* added method for handling multiple image files in a single operation +* various tweaks to the interface to accommodate new layout and modes +* minor code cleanup/standardization (access modifiers, getters/setters, etc.) + +#2014-08-26 +* fixed issue with saved directories for FileChooser that no longer exist \ No newline at end of file diff --git a/BitmapEncoder-master/nbproject/build-impl.xml b/BitmapEncoder-master/nbproject/build-impl.xml new file mode 100644 index 0000000..b9ba6da --- /dev/null +++ b/BitmapEncoder-master/nbproject/build-impl.xml @@ -0,0 +1,1413 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BitmapEncoder-master/nbproject/genfiles.properties b/BitmapEncoder-master/nbproject/genfiles.properties new file mode 100644 index 0000000..1694cfd --- /dev/null +++ b/BitmapEncoder-master/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=64fa75ef +build.xml.script.CRC32=478ad818 +build.xml.stylesheet.CRC32=8064a381@1.74.2.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=64fa75ef +nbproject/build-impl.xml.script.CRC32=9209127f +nbproject/build-impl.xml.stylesheet.CRC32=876e7a8f@1.74.2.48 diff --git a/BitmapEncoder-master/nbproject/private/private.properties b/BitmapEncoder-master/nbproject/private/private.properties new file mode 100644 index 0000000..eda7286 --- /dev/null +++ b/BitmapEncoder-master/nbproject/private/private.properties @@ -0,0 +1,2 @@ +compile.on.save=true +user.properties.file=D:\\Dropbox\\Program Files\\netbean_user\\build.properties diff --git a/BitmapEncoder-master/nbproject/private/private.xml b/BitmapEncoder-master/nbproject/private/private.xml new file mode 100644 index 0000000..52944c4 --- /dev/null +++ b/BitmapEncoder-master/nbproject/private/private.xml @@ -0,0 +1,10 @@ + + + + + + file:/D:/Dropbox/Gamebuino/BitmapEncoder/src/bitmapencoder/BitmapFrame.java + file:/D:/Dropbox/Gamebuino/BitmapEncoder/src/bitmapencoder/BitmapEncoder.java + + + diff --git a/BitmapEncoder-master/nbproject/project.properties b/BitmapEncoder-master/nbproject/project.properties new file mode 100644 index 0000000..fe31650 --- /dev/null +++ b/BitmapEncoder-master/nbproject/project.properties @@ -0,0 +1,73 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/BitmapEncoder.jar +dist.javadoc.dir=${dist.dir}/javadoc +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.8 +javac.target=1.8 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=bitmapencoder.BitmapFrame +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/BitmapEncoder-master/nbproject/project.xml b/BitmapEncoder-master/nbproject/project.xml new file mode 100644 index 0000000..6bfac51 --- /dev/null +++ b/BitmapEncoder-master/nbproject/project.xml @@ -0,0 +1,15 @@ + + + org.netbeans.modules.java.j2seproject + + + BitmapEncoder + + + + + + + + + diff --git a/BitmapEncoder-master/src/bitmapencoder/BitmapEncoder.java b/BitmapEncoder-master/src/bitmapencoder/BitmapEncoder.java new file mode 100644 index 0000000..3f9601d --- /dev/null +++ b/BitmapEncoder-master/src/bitmapencoder/BitmapEncoder.java @@ -0,0 +1,224 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package bitmapencoder; + +import java.io.IOException; +import javax.imageio.ImageIO; +import java.io.File; +import java.awt.image.*; + +/** + * + * @author Rodot + */ +public class BitmapEncoder { + + private BufferedImage inputImage; + private BufferedImage outputImage; + private String bitmapName = "myBitmap"; + private boolean hexFormatting = false; + private boolean wrapping = true; + private static File[] filesToConvert; + private static int imageCounter; + private static int fileCount; + + protected void BitmapEncoder() { + } + + protected void open(File file) { + try { + inputImage = ImageIO.read(file); + } catch (IOException e) { + e.printStackTrace(); + } + if (inputImage != null) { + if ((inputImage.getWidth() > 200) || (inputImage.getHeight() > 200)) { + inputImage = null; + return; + } + outputImage = deepCopy(inputImage); + } + } + + protected void threshold(int thres) { + if (inputImage == null) { + return; + } + for (int y = 0; y < inputImage.getHeight(); y++) { + for (int x = 0; x < inputImage.getWidth(); x++) { + int rgb = inputImage.getRGB(x, y); + int red = (rgb >> 16) & 0x000000FF; + int green = (rgb >> 8) & 0x000000FF; + int blue = (rgb) & 0x000000FF; + int value = red + green + blue; + if (value > thres) { + outputImage.setRGB(x, y, 0x00FFFFFF); + } else { + outputImage.setRGB(x, y, 0); + } + } + } + } + + protected String generateOutput(int thres) { + if (inputImage == null) { + return ""; + } + String output = ""; + output = output.concat("const byte "); + output = output.concat(bitmapName); + output = output.concat("[] PROGMEM = {"); + int width = ((inputImage.getWidth() - 1) / 8 + 1) * 8; //round to the closest larger multiple of 8 + output = output.concat(width + "," + inputImage.getHeight() + ","); + if (wrapping) { + output = output.concat("\n"); + } + for (int y = 0; y < inputImage.getHeight(); y++) { + for (int x = 0; x < inputImage.getWidth(); x += 8) { + if (hexFormatting) { + output = output.concat("0x"); + } else { + output = output.concat("B"); + } + int thisByte = 0; + for (int b = 0; b < 8; b++) { + int value = 0xFFFF; + if (x + b < inputImage.getWidth()) { + int rgb = inputImage.getRGB(x + b, y); + int red = (rgb >> 16) & 0x000000FF; + int green = (rgb >> 8) & 0x000000FF; + int blue = (rgb) & 0x000000FF; + value = red + green + blue; + } + if (hexFormatting) { + thisByte *= 2; + if (value < thres) { + thisByte++; + } + } else {//binary formattning + if (value < thres) { + output = output.concat("1"); + } else { + output = output.concat("0"); + } + + } + } + if (hexFormatting) { + output = output.concat(Integer.toString(thisByte, 16). + toUpperCase()); + } + output = output.concat(","); + } + if (wrapping) { + output = output.concat("\n"); + } + } + output = output.concat("};"); + return output; + } + + protected static BufferedImage deepCopy(BufferedImage bi) { + ColorModel cm = bi.getColorModel(); + boolean isAlphaPremultiplied = cm.isAlphaPremultiplied(); + WritableRaster raster = bi.copyData(null); + return new BufferedImage(cm, raster, isAlphaPremultiplied, null); + } + + protected static int countFiles(File[] list, boolean recursed) { + + if (list == null) { + return 0; + } + + if (!recursed) { + fileCount = 0; + } + + for (File f : list) { + if (f.isDirectory()) { + countFiles(f.listFiles(), true); + } else { + if (isImage(f)) { + fileCount++; + } + } + } + return fileCount; + } + + protected static boolean isImage(File f) { + boolean isImage = false; + if (f.getName().endsWith(".bmp") || f.getName().endsWith(".png") + || f.getName().endsWith(".jpeg") + || f.getName().endsWith(".jpg")) { + isImage = true; + } + return isImage; + } + + protected static File[] processSelectedFiles(File[] list, boolean recursed) { + if (!recursed) { + filesToConvert = new File[countFiles(list, false)]; + imageCounter = 0; + } + if (list == null) { + return null; + } + + for (File f : list) { + if (f.isDirectory()) { + processSelectedFiles(f.listFiles(), true); + } else { + if (isImage(f)) { + filesToConvert[imageCounter] = f; + imageCounter++; + } + } + } + return filesToConvert; + } + + protected BufferedImage getInputImage() { + return inputImage; + } + + protected BufferedImage getOutputImage() { + return outputImage; + } + + protected String getBitmapName() { + return bitmapName; + } + + protected boolean isHexFormatting() { + return hexFormatting; + } + + protected boolean isWrapping() { + return wrapping; + } + + protected void setInputImage(BufferedImage inputImage) { + this.inputImage = inputImage; + } + + protected void setOutputImage(BufferedImage outputImage) { + this.outputImage = outputImage; + } + + protected void setBitmapName(String bitmapName) { + this.bitmapName = bitmapName; + } + + protected void setHexFormatting(boolean hexFormatting) { + this.hexFormatting = hexFormatting; + } + + protected void setWrapping(boolean wrapping) { + this.wrapping = wrapping; + } +} diff --git a/BitmapEncoder-master/src/bitmapencoder/BitmapFrame.form b/BitmapEncoder-master/src/bitmapencoder/BitmapFrame.form new file mode 100644 index 0000000..cbf18c6 --- /dev/null +++ b/BitmapEncoder-master/src/bitmapencoder/BitmapFrame.form @@ -0,0 +1,530 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BitmapEncoder-master/src/bitmapencoder/BitmapFrame.java b/BitmapEncoder-master/src/bitmapencoder/BitmapFrame.java new file mode 100644 index 0000000..3bb5af3 --- /dev/null +++ b/BitmapEncoder-master/src/bitmapencoder/BitmapFrame.java @@ -0,0 +1,799 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package bitmapencoder; + +import static bitmapencoder.BitmapEncoder.deepCopy; +import static bitmapencoder.BitmapEncoder.isImage; +import static bitmapencoder.BitmapEncoder.processSelectedFiles; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.*; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.imageio.ImageIO; +import javax.swing.*; + +/** + * + * @author Rodot + */ +public class BitmapFrame extends javax.swing.JFrame { + + BitmapEncoder encoder = new BitmapEncoder(); + final JFileChooser fileChooser = new JFileChooser(); + final JFileChooser multiFileChooser = new JFileChooser(); + private File[] filesSelected = null; + private String lastSingleDirectory = System.getProperty("user.home"); + private String lastMultiDirectory = System.getProperty("user.home"); + private byte multiFormattingSetting = 1; + private byte singleFormattingSetting = 0; + private boolean multiWrapSetting = false; + private boolean singleWrapSetting = true; + private boolean allowDirectorySelection = false; + + /** + * Creates new form BitmapFrame + */ + private BitmapFrame() { + initComponents(); + try { + loadSettingsFromDisk(); + } catch (IOException ex) { + Logger.getLogger(BitmapFrame.class.getName()). + log(Level.SEVERE, null, ex); + } + formattingBox.setSelectedIndex((int) singleFormattingSetting); + encoder.setHexFormatting(formattingBox.getSelectedIndex() == 1); + wrapCheckbox.setSelected(singleWrapSetting); + encoder.setWrapping(wrapCheckbox.isSelected()); + allowDirectorySelectionCheckBox.setSelected(allowDirectorySelection); + File singleDirectory = new File(lastSingleDirectory); + if (!singleDirectory.exists()) { + lastSingleDirectory = System.getProperty("user.home"); + } + fileChooser.setCurrentDirectory(new File(lastSingleDirectory)); + File multiDirectory = new File(lastMultiDirectory); + if (!multiDirectory.exists()) { + lastMultiDirectory = System.getProperty("user.home"); + } + multiFileChooser.setCurrentDirectory(new File(lastMultiDirectory)); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + buttonGroup1 = new javax.swing.ButtonGroup(); + jPanel1 = new javax.swing.JPanel(); + openButton = new javax.swing.JButton(); + message = new javax.swing.JLabel(); + originalPanel = new javax.swing.JPanel(); + original = new javax.swing.JLabel(); + previewPanel = new javax.swing.JPanel(); + preview = new javax.swing.JLabel(); + thresholdSlider = new javax.swing.JSlider(); + FileSelectionPanel = new javax.swing.JPanel(); + singleFileModeRadioButton = new javax.swing.JRadioButton(); + multiFileModeRadioButton = new javax.swing.JRadioButton(); + allowDirectorySelectionCheckBox = new javax.swing.JCheckBox(); + jPanel2 = new javax.swing.JPanel(); + outputScrollPane = new javax.swing.JScrollPane(); + outputTextArea = new javax.swing.JTextArea(); + jPanel3 = new javax.swing.JPanel(); + scaleSlider = new javax.swing.JSlider(); + scaleLabel = new javax.swing.JLabel(); + nameTextField = new javax.swing.JTextField(); + nameLabel = new javax.swing.JLabel(); + formattingBox = new javax.swing.JComboBox(); + formattingLabel = new javax.swing.JLabel(); + wrapCheckbox = new javax.swing.JCheckBox(); + wrapLabel = new javax.swing.JLabel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); + setTitle("Bitmap Encoder - Gamebuino"); + setMinimumSize(new java.awt.Dimension(600, 502)); + setName("bitmapFrame"); // NOI18N + setPreferredSize(new java.awt.Dimension(800, 600)); + addWindowListener(new java.awt.event.WindowAdapter() { + public void windowClosing(java.awt.event.WindowEvent evt) { + formWindowClosing(evt); + } + }); + + jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Input")); + + openButton.setText("Open"); + openButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + openButtonActionPerformed(evt); + } + }); + + message.setText("Please select a file to encode"); + + originalPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + originalPanel.setMaximumSize(new java.awt.Dimension(400, 400)); + originalPanel.setMinimumSize(new java.awt.Dimension(120, 120)); + originalPanel.setPreferredSize(new java.awt.Dimension(120, 120)); + + original.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + original.setText("original"); + + javax.swing.GroupLayout originalPanelLayout = new javax.swing.GroupLayout(originalPanel); + originalPanel.setLayout(originalPanelLayout); + originalPanelLayout.setHorizontalGroup( + originalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(original, javax.swing.GroupLayout.DEFAULT_SIZE, 116, Short.MAX_VALUE) + ); + originalPanelLayout.setVerticalGroup( + originalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(original, javax.swing.GroupLayout.DEFAULT_SIZE, 116, Short.MAX_VALUE) + ); + + previewPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + previewPanel.setMaximumSize(new java.awt.Dimension(400, 400)); + previewPanel.setMinimumSize(new java.awt.Dimension(120, 120)); + previewPanel.setPreferredSize(new java.awt.Dimension(120, 120)); + + preview.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + preview.setText("preview"); + + javax.swing.GroupLayout previewPanelLayout = new javax.swing.GroupLayout(previewPanel); + previewPanel.setLayout(previewPanelLayout); + previewPanelLayout.setHorizontalGroup( + previewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(preview, javax.swing.GroupLayout.DEFAULT_SIZE, 116, Short.MAX_VALUE) + ); + previewPanelLayout.setVerticalGroup( + previewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(preview, javax.swing.GroupLayout.DEFAULT_SIZE, 116, Short.MAX_VALUE) + ); + + thresholdSlider.setMaximum(765); + thresholdSlider.setOrientation(javax.swing.JSlider.VERTICAL); + thresholdSlider.setToolTipText("Use to adjust the thresold between black and white."); + thresholdSlider.setValue(384); + thresholdSlider.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + thresholdSlider.setMaximumSize(new java.awt.Dimension(20, 32767)); + thresholdSlider.setMinimumSize(new java.awt.Dimension(20, 36)); + thresholdSlider.setPreferredSize(new java.awt.Dimension(20, 150)); + thresholdSlider.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseReleased(java.awt.event.MouseEvent evt) { + thresholdSliderMouseReleased(evt); + } + }); + + FileSelectionPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("File Selection Mode")); + FileSelectionPanel.setName(""); // NOI18N + + buttonGroup1.add(singleFileModeRadioButton); + singleFileModeRadioButton.setSelected(true); + singleFileModeRadioButton.setText("Single File Mode"); + singleFileModeRadioButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + singleFileModeRadioButtonActionPerformed(evt); + } + }); + + buttonGroup1.add(multiFileModeRadioButton); + multiFileModeRadioButton.setText("Multi File Mode (disables preview)"); + multiFileModeRadioButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + multiFileModeRadioButtonActionPerformed(evt); + } + }); + + allowDirectorySelectionCheckBox.setText("Allow directory selection"); + allowDirectorySelectionCheckBox.setEnabled(false); + allowDirectorySelectionCheckBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + allowDirectorySelectionCheckBoxActionPerformed(evt); + } + }); + + javax.swing.GroupLayout FileSelectionPanelLayout = new javax.swing.GroupLayout(FileSelectionPanel); + FileSelectionPanel.setLayout(FileSelectionPanelLayout); + FileSelectionPanelLayout.setHorizontalGroup( + FileSelectionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(FileSelectionPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(FileSelectionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(FileSelectionPanelLayout.createSequentialGroup() + .addGap(21, 21, 21) + .addComponent(allowDirectorySelectionCheckBox)) + .addComponent(singleFileModeRadioButton) + .addComponent(multiFileModeRadioButton)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + FileSelectionPanelLayout.setVerticalGroup( + FileSelectionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(FileSelectionPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(singleFileModeRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(multiFileModeRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(allowDirectorySelectionCheckBox) + .addContainerGap(8, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(originalPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(previewPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(FileSelectionPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(openButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(message))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(thresholdSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(45, 45, 45) + .addComponent(thresholdSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addComponent(FileSelectionPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(openButton) + .addComponent(message, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(originalPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(previewPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Output")); + + outputScrollPane.setFont(new java.awt.Font("Monospaced", 0, 11)); // NOI18N + outputScrollPane.setPreferredSize(new java.awt.Dimension(200, 200)); + + outputTextArea.setColumns(20); + outputTextArea.setFont(new java.awt.Font("Consolas", 0, 10)); // NOI18N + outputTextArea.setRows(5); + outputTextArea.setAutoscrolls(false); + outputScrollPane.setViewportView(outputTextArea); + + javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(outputScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 444, Short.MAX_VALUE) + ); + jPanel2Layout.setVerticalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(outputScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + + jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Settings")); + + scaleSlider.setMaximum(4); + scaleSlider.setMinimum(1); + scaleSlider.setMinorTickSpacing(1); + scaleSlider.setPaintLabels(true); + scaleSlider.setPaintTicks(true); + scaleSlider.setSnapToTicks(true); + scaleSlider.setValue(2); + scaleSlider.setMaximumSize(new java.awt.Dimension(150, 31)); + scaleSlider.setMinimumSize(new java.awt.Dimension(150, 31)); + scaleSlider.setPreferredSize(new java.awt.Dimension(150, 31)); + scaleSlider.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + scaleSliderStateChanged(evt); + } + }); + + scaleLabel.setText("Preview scale"); + + nameTextField.setFont(new java.awt.Font("Consolas", 0, 11)); // NOI18N + nameTextField.setText("bitmapName"); + + nameLabel.setText("Bitmap name"); + + formattingBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Binary (ex: B00110010)", "Hexadecimal (ex: 0x32)" })); + formattingBox.setName(""); // NOI18N + formattingBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + formattingBoxActionPerformed(evt); + } + }); + + formattingLabel.setText("Output number formatting"); + + wrapCheckbox.setSelected(true); + wrapCheckbox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + wrapCheckboxActionPerformed(evt); + } + }); + + wrapLabel.setText("Wrap output lines"); + + javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); + jPanel3.setLayout(jPanel3Layout); + jPanel3Layout.setHorizontalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(wrapCheckbox) + .addComponent(formattingBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(nameTextField, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scaleSlider, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addComponent(scaleLabel) + .addGap(0, 0, Short.MAX_VALUE)) + .addGroup(jPanel3Layout.createSequentialGroup() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(nameLabel) + .addComponent(formattingLabel) + .addComponent(wrapLabel)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + ); + jPanel3Layout.setVerticalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addComponent(scaleLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() + .addComponent(scaleSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(8, 8, 8))) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(nameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(nameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(formattingLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(formattingBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(wrapCheckbox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(wrapLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 98, Short.MAX_VALUE))) + .addContainerGap()) + ); + + getAccessibleContext().setAccessibleDescription(""); + + pack(); + }// //GEN-END:initComponents + + private void scaleSliderStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_scaleSliderStateChanged + if (singleFileModeRadioButton.isSelected()) { + redrawPreview(); + } + }//GEN-LAST:event_scaleSliderStateChanged + + private void formattingBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_formattingBoxActionPerformed + encoder.setHexFormatting(formattingBox.getSelectedIndex() == 1); + if (singleFileModeRadioButton.isSelected()) { + singleFormattingSetting = (byte) formattingBox.getSelectedIndex(); + updateOutput(); + } else { + multiFormattingSetting = (byte) formattingBox.getSelectedIndex(); + processMultiFiles(); + } + }//GEN-LAST:event_formattingBoxActionPerformed + + private void wrapCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_wrapCheckboxActionPerformed + encoder.setWrapping(wrapCheckbox.isSelected()); + if (singleFileModeRadioButton.isSelected()) { + singleWrapSetting = wrapCheckbox.isSelected(); + updateOutput(); + } else { + multiWrapSetting = wrapCheckbox.isSelected();; + processMultiFiles(); + } + }//GEN-LAST:event_wrapCheckboxActionPerformed + + private void thresholdSliderMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_thresholdSliderMouseReleased + if (encoder.getInputImage() == null && singleFileModeRadioButton.isSelected()) { + message.setText("Open a image before you play with that slider!"); + } else if (singleFileModeRadioButton.isSelected()) { + message.setText("Loading..."); + redrawPreview(); + message.setText("Output updated"); + } else if (multiFileModeRadioButton.isSelected()) { + processMultiFiles(); + } + }//GEN-LAST:event_thresholdSliderMouseReleased + + private void openButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openButtonActionPerformed + if (singleFileModeRadioButton.isSelected()) { + int returnVal = fileChooser.showOpenDialog(BitmapFrame.this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + lastSingleDirectory = fileChooser.getCurrentDirectory(). + getAbsolutePath(); + File file = fileChooser.getSelectedFile(); + encoder.open(file); + if (encoder.getInputImage() == null) { + message.setText("Can't open the selected image"); + } else { + message.setText("Image succesfully loaded"); + String fileName = file.getName(); + fileName = fileName.substring(0, fileName.lastIndexOf('.')); + nameTextField.setText(fileName); + redrawPreview(); + } + } + } else { + + if (allowDirectorySelectionCheckBox.isSelected()) { + multiFileChooser.setFileSelectionMode( + JFileChooser.FILES_AND_DIRECTORIES); + } else { + multiFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + } + multiFileChooser.setMultiSelectionEnabled(true); + int returnVal = multiFileChooser.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + lastMultiDirectory = multiFileChooser.getCurrentDirectory(). + getAbsolutePath(); + filesSelected = multiFileChooser.getSelectedFiles(); + processMultiFiles(); + } + } + try { + saveSettingsToDisk(new File("settings.dat")); + } catch (IOException ex) { + Logger.getLogger(BitmapFrame.class.getName()). + log(Level.SEVERE, null, ex); + } + }//GEN-LAST:event_openButtonActionPerformed + + private void processMultiFiles() { + outputTextArea.setText(""); + String eol = System.lineSeparator(); + File[] filesToConvert = processSelectedFiles(filesSelected, false); + if (filesToConvert == null) { + return; + } + for (File f : filesToConvert) { + if (f != null) { + if (isImage(f)) { + try { + System.out.println("Reading image " + f.getName() + + "..."); + BufferedImage img = ImageIO.read(f); + if (img != null) { + if ((img.getWidth() > 200) || (img.getHeight() + > 200)) { + System.out.println("File " + f.getName() + + " is too large."); + continue; + } + System.out.println("Deep copy of " + f.getName() + + "."); + BufferedImage newImg = deepCopy(img); + int threshold = thresholdSlider.getValue(); + System.out.println( + "Setting threshold for new image."); + for (int y = 0; y < img.getHeight(); y++) { + for (int x = 0; x < img.getWidth(); x++) { + int rgb = img.getRGB(x, y); + int red = (rgb >> 16) & 0x000000FF; + int green = (rgb >> 8) & 0x000000FF; + int blue = (rgb) & 0x000000FF; + int value = red + green + blue; + if (value > threshold) { + newImg.setRGB(x, y, 0x00FFFFFF); + } else { + newImg.setRGB(x, y, 0); + } + } + } + String bitmapName = f.getName().substring(0, f. + getName().lastIndexOf(".")); + System.out.println("Generating output for " + f. + getName() + "."); + String output = outputTextArea.getText(); + output = output.concat("const byte "); + output = output.concat(bitmapName); + output = output.concat("[] PROGMEM = {"); + if (encoder.isWrapping()) { + output = output.concat(eol); + } + int width = ((img.getWidth() - 1) / 8 + 1) * 8; //round to the closest larger multiple of 8 + output = output.concat(width + "," + img. + getHeight() + ","); + if (encoder.isWrapping()) { + output = output.concat(eol); + } + for (int y = 0; y < img.getHeight(); y++) { + for (int x = 0; x < img.getWidth(); x += 8) { + if (encoder.isHexFormatting()) { + output = output.concat("0x"); + } else { + output = output.concat("B"); + } + int thisByte = 0; + for (int b = 0; b < 8; b++) { + int value = 0xFFFF; + if (x + b < img.getWidth()) { + int rgb = img.getRGB(x + b, y); + int red = (rgb >> 16) + & 0x000000FF; + int green = (rgb >> 8) + & 0x000000FF; + int blue = (rgb) & 0x000000FF; + value = red + green + blue; + } + if (encoder.isHexFormatting()) { + thisByte *= 2; + if (value < threshold) { + thisByte++; + } + } else {//binary formatting + if (value < threshold) { + output = output.concat("1"); + } else { + output = output.concat("0"); + } + + } + } + if (encoder.isHexFormatting()) { + output = output.concat(Integer. + toString(thisByte, 16). + toUpperCase()); + } + output = output.concat(","); + } + if (encoder.isWrapping()) { + output = output.concat(eol); + } + } + output = output.concat("};" + eol); + if (encoder.isWrapping()) { + output = output.concat(eol); + } + outputTextArea.setText(output); + } + } catch (IOException ex) { + Logger.getLogger(BitmapFrame.class. + getName()). + log(Level.SEVERE, null, ex); + } + } else { + System.out.println("File " + f.getName() + + " is not an image."); + } + } + } + } + private void singleFileModeRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_singleFileModeRadioButtonActionPerformed + scaleSlider.setEnabled(true); + nameTextField.setEnabled(true); + allowDirectorySelectionCheckBox.setEnabled(false); + formattingBox.setSelectedIndex((int) singleFormattingSetting); + encoder.setHexFormatting(formattingBox.getSelectedIndex() == 1); + wrapCheckbox.setSelected(singleWrapSetting); + encoder.setWrapping(wrapCheckbox.isSelected()); + updateOutput(); + }//GEN-LAST:event_singleFileModeRadioButtonActionPerformed + + private void multiFileModeRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_multiFileModeRadioButtonActionPerformed + scaleSlider.setEnabled(false); + nameTextField.setEnabled(false); + allowDirectorySelectionCheckBox.setEnabled(true); + formattingBox.setSelectedIndex((int) multiFormattingSetting); + encoder.setHexFormatting(formattingBox.getSelectedIndex() == 1); + wrapCheckbox.setSelected(multiWrapSetting); + encoder.setWrapping(wrapCheckbox.isSelected()); + processMultiFiles(); + }//GEN-LAST:event_multiFileModeRadioButtonActionPerformed + + private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing + try { + saveSettingsToDisk(new File("settings.dat")); + } catch (IOException ex) { + Logger.getLogger(BitmapFrame.class.getName()). + log(Level.SEVERE, null, ex); + } + }//GEN-LAST:event_formWindowClosing + + private void allowDirectorySelectionCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_allowDirectorySelectionCheckBoxActionPerformed + allowDirectorySelection = allowDirectorySelectionCheckBox.isSelected(); + }//GEN-LAST:event_allowDirectorySelectionCheckBoxActionPerformed + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try { + /*for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + }*/ + javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager. + getSystemLookAndFeelClassName()); + } catch (ClassNotFoundException | InstantiationException | + IllegalAccessException | + javax.swing.UnsupportedLookAndFeelException ex) { + java.util.logging.Logger.getLogger(BitmapFrame.class.getName()).log( + java.util.logging.Level.SEVERE, null, ex); + } + // + + /* Create and display the form */ + java.awt.EventQueue.invokeLater(() -> { + new BitmapFrame().setVisible(true); + }); + } + + private void redrawPreview() { + int scale = scaleSlider.getValue(); + //input image + Image in = BitmapEncoder.deepCopy(encoder.getInputImage()); + in = in.getScaledInstance(in.getWidth(null) * scale, in.getHeight(null) + * scale, java.awt.Image.SCALE_REPLICATE); + ImageIcon originalIcon = new ImageIcon(in); + original.setText(""); + original.setIcon(originalIcon); + //output image + encoder.threshold(thresholdSlider.getValue()); + Image out = BitmapEncoder.deepCopy(encoder.getOutputImage()); + out = out.getScaledInstance(out.getWidth(null) * scale, out.getHeight( + null) * scale, java.awt.Image.SCALE_REPLICATE); + ImageIcon previewIcon = new ImageIcon(out); + preview.setText(""); + preview.setIcon(previewIcon); + updateOutput(); + } + + private void updateOutput() { + encoder.setBitmapName(nameTextField.getText()); + outputTextArea.setText(encoder. + generateOutput(thresholdSlider.getValue())); + outputTextArea.setCaretPosition(0); + } + + private void loadSettingsFromDisk() throws IOException { + File saveFile = new File("settings.dat"); + if (saveFile.createNewFile()) { + saveSettingsToDisk(saveFile); + } else { + BufferedReader br = new BufferedReader(new FileReader(saveFile)); + for (String line; (line = br.readLine()) != null;) { + String settingName = line.trim().substring(0, line.indexOf(":")); + String setting = line.substring((line.indexOf(":") + 1)).trim(); + switch (settingName) { + case "LAST_SINGLE_DIRECTORY": + lastSingleDirectory = setting; + break; + case "LAST_MULTI_DIRECTORY": + lastMultiDirectory = setting; + break; + case "SINGLE_FORMATTING": + singleFormattingSetting = Byte.valueOf(setting); + break; + case "MULTI_FORMATTING": + multiFormattingSetting = Byte.valueOf(setting); + break; + case "SINGLE_WRAPPING": + singleWrapSetting = Boolean.valueOf(setting); + break; + case "MULTI_WRAPPING": + multiWrapSetting = Boolean.valueOf(setting); + break; + case "ALLOW_DIRECTORY_SELECTION": + allowDirectorySelection = Boolean.valueOf(setting); + break; + default: + break; + } + } + // line is not visible here. + } + } + + private void saveSettingsToDisk(File saveFile) throws IOException { + try (BufferedWriter out = new BufferedWriter(new FileWriter(saveFile))) { + out.write("LAST_SINGLE_DIRECTORY: " + lastSingleDirectory); + out.newLine(); + out.write("LAST_MULTI_DIRECTORY: " + lastMultiDirectory); + out.newLine(); + out.write("SINGLE_FORMATTING: " + singleFormattingSetting); + out.newLine(); + out.write("MULTI_FORMATTING: " + multiFormattingSetting); + out.newLine(); + out.write("SINGLE_WRAPPING: " + singleWrapSetting); + out.newLine(); + out.write("MULTI_WRAPPING: " + multiWrapSetting); + out.newLine(); + out.write("ALLOW_DIRECTORY_SELECTION: " + allowDirectorySelection); + out.newLine(); + out.close(); + } + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel FileSelectionPanel; + private javax.swing.JCheckBox allowDirectorySelectionCheckBox; + private javax.swing.ButtonGroup buttonGroup1; + private javax.swing.JComboBox formattingBox; + private javax.swing.JLabel formattingLabel; + private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel2; + private javax.swing.JPanel jPanel3; + private javax.swing.JLabel message; + private javax.swing.JRadioButton multiFileModeRadioButton; + private javax.swing.JLabel nameLabel; + private javax.swing.JTextField nameTextField; + private javax.swing.JButton openButton; + private javax.swing.JLabel original; + private javax.swing.JPanel originalPanel; + private javax.swing.JScrollPane outputScrollPane; + private javax.swing.JTextArea outputTextArea; + private javax.swing.JLabel preview; + private javax.swing.JPanel previewPanel; + private javax.swing.JLabel scaleLabel; + private javax.swing.JSlider scaleSlider; + private javax.swing.JRadioButton singleFileModeRadioButton; + private javax.swing.JSlider thresholdSlider; + private javax.swing.JCheckBox wrapCheckbox; + private javax.swing.JLabel wrapLabel; + // End of variables declaration//GEN-END:variables +} diff --git a/Camera.c b/Camera.c index 5b5c9c7..7428d30 100644 --- a/Camera.c +++ b/Camera.c @@ -43,7 +43,7 @@ TYPE_COLLISION_BLOCK CameraApplyCoordinatesToCoordinates( TYPE_CAMERA* ptrCamera } void CameraApplyCoordinatesToSprite(TYPE_CAMERA* ptrCamera, - TYPE_SPRITE * spr, + TYPE_SPRITE* spr, uint16_t x, uint16_t y ) { diff --git a/Camera.h b/Camera.h index 66a9fad..cbefc6b 100644 --- a/Camera.h +++ b/Camera.h @@ -42,7 +42,7 @@ void CameraInit(TYPE_CAMERA* ptrCamera); void CameraHandler(TYPE_CAMERA* ptrCamera); void CameraSetLock(TYPE_CAMERA* ptrCamera, bool value); void CameraApplyCoordinatesToSprite( TYPE_CAMERA* ptrCamera, - TYPE_SPRITE * spr, + TYPE_SPRITE* spr, uint16_t x, uint16_t y ); TYPE_COLLISION_BLOCK CameraApplyCoordinatesToCoordinates( TYPE_CAMERA* ptrCamera, diff --git a/Exe/POCKET.ELF b/Exe/POCKET.ELF index eb822fe..94e29f1 100755 Binary files a/Exe/POCKET.ELF and b/Exe/POCKET.ELF differ diff --git a/Exe/POCKET.HEX b/Exe/POCKET.HEX index a7fbb1b..f911339 100644 --- a/Exe/POCKET.HEX +++ b/Exe/POCKET.HEX @@ -1,1314 +1,1334 @@ -:100000000C9439030C9461030C9461030C94610308 -:100010000C9461030C9461030C9461030C946103D0 -:100020000C9461030C9461030C9461030C94DF1E27 -:100030000C9461030C9461030C9461030C946103B0 -:100040000C94C41F0C9461030C9461030C94610321 -:100050000C9461030C9461030C9461030C94610390 -:100060000C9461030C946103506F636B65742045BD +:100000000C9483030C94AB030C94AB030C94AB03E0 +:100010000C94AB030C94AB030C94AB030C94AB03A8 +:100020000C94AB030C94AB030C94AB030C947D1FAA +:100030000C94AB030C94AB030C94AB030C94AB0388 +:100040000C9462200C94AB030C94AB030C94AB03A4 +:100050000C94AB030C94AB030C94AB030C94AB0368 +:100060000C94AB030C94AB03506F636B6574204529 :100070006D70697265730080007B00517569740052 :10008000526573756D65000808FC848884A2D10AE6 :10009000044661696C656420746F206372656174E5 :1000A0006520756E697421004661696C6564207411 :1000B0006F20637265617465206275696C64696E36 -:1000C00067210018180000000000FEFE00FEFE0080 -:1000D0003E3E00FEFE00FEFE001E1E001E1E001E16 -:1000E0001E001E1E001E1E001E1E001E1E001E1EC6 -:1000F000001E1E001E1E001E1E001E1E00FEFE0014 -:10010000FEFE003E3E00FEFE00FEFE00FE1818E76A -:1001100000E7BD00BDE7FFE7BD00BD81FF81E7004F -:10012000E7A500A5BDFFBDA500A5A500A5A500A547 -:10013000A500A5A500A5A500A5A500A5A500A5E766 -:1001400000E7BD00BDE7FFE7BD00BD81FF8181186D -:1001500081812481FFFFFF0808003C4299A56618B1 -:1001600000080860BCC299A5671D02910180017852 -:1001700001730151756974004F7074696F6E73007B -:100180004D756C7469706C617965722067616D651D -:100190000053696E676C6520706C617965722067C9 -:1001A000616D6500030307050705040505040503E4 -:1001B00006030207020201020203020E090E0E0DDF -:1001C0000E0E0F0E070507050307050F05070507A8 -:1001D00006070102050200070202070002070200EB -:1001E00002070200070603060707020205050201CF -:1001F00002020402000502020500060705050705C4 -:10020000020302020602000000000B0003000307C5 -:10021000050704070105020507070400030000079E -:1002200005050700050005020702000C0002020296 -:10023000000400040201070507050704010704057F -:100240000702030207040701070606010107070763 -:1002500007030307000500000D0002050005050562 -:100260000005020107030F09030603060707020240 -:10027000050507070207070507030107050607022B -:10028000070507050404030702050704040703071D -:10029000070106070507070303070503070306040D -:1002A0000701010701070407030403070607050206 -:1002B0000501060101070400070501020405070006 -:1002C00002010208080800030006030607070202ED -:1002D00005050705020707050703010705060702CD -:1002E00007050705040403070205070404070307BD -:1002F00007010607050707030307050307030604AD -:1003000007010107010704070304030706070502A5 -:1003100005010601010704020705000700050702A1 -:1003200006020307050703053F213F1208120A10C2 -:100330000A0E1C0E0C1E0C141A14161F161E131E69 -:100340001E1B1E1E1F1E3F213F3A2F3A173D173F0F -:10035000213F181F02040A041F0E04040E1F0A1F67 -:100360000A0E0E1F04110E2E252E2F2A2E262929A5 -:10037000021F02081F08150E04040E150E15151B8A -:10038000151B040604040C04000000001700030001 -:10039000031F0A1F16371A1904130A153A0003001F -:1003A000000E11110E000A040A040E0400300004AD -:1003B00004040010001804031F111F121F101D1544 -:1003C0001711151F07041F17151D1F151D01011FEC -:1003D0001F151F17151F000A00003200040A110A1A -:1003E0000A0A110A040115020E11171E051E1F1517 -:1003F0000A0E110A1F110E1F15111F05010E111DE6 -:100400001F041F111F1108100F1F041B1F10101FA6 -:10041000061F1E040F0E110E1F09060E112E1F05BA -:100420001A121509011F011F101F0F180F1F0C1F93 -:100430001B041B031C03191513001F1103041811BF -:100440001F000201022020200001020C121E1F12B8 -:100450000C0C12120C121F0C1A14041E05242A1E56 -:100460001F021C141D1020201D1F0814111F101E18 -:10047000041E1E021C0C120C3E0A040C123E1E042A -:100480000214160A020F120E101E0E100E1E081E67 -:10049000120C1226281E322A26041E21001F0021BB -:1004A0001E040102013F213F0A4E6F205344206386 -:1004B000617264206F720A6E6F204C4F4144455246 -:1004C0002E4845580A0A153A45786974001D204699 -:1004D0006C617368696E670A20206C6F6164657275 -:1004E0002E2E2E0A0A444F4E2754205455524E2089 -:1004F0004F464621000A0A153A49676E6F72650039 -:100500006D560A0A504C45415345205455524E20D1 -:100510004F464620004C4F572042415454455259B3 -:1005200021200017534400161378001613140015E9 -:1005300010200015201000540A03E181867F3E1828 -:100540006D830F0F0E0183866033186DC3198F18EA -:1005500003C38E6033186DE330CF1803C39E60363B -:1005600030CDE360CF3006C79E7E3E30CDB360CF46 -:10057000300CC6F6603330D9B660CF33CFCCF660DE -:1005800061B0DB1E60CF30D86CE6C061B0DB1E61AD -:100590008F19986CC6C063B19B0E330F0FB078C62D -:1005A000FF7E1F1B061E0F05008930080238024916 -:1005B0007868140000F6E8DBCFC3B8AEA49B928A3B -:1005C000827B746E68625C57524E4945413E3A37B1 -:1005D00034312E2C29272523211F1D1C1A191716EB -:1005E0001514131211100F0E0D0C0B0A0908070633 -:1005F00045006801000005006801380100000500A1 -:100600003801680100000E060A060101FF0301011E -:10061000F7030000000700020100000304060000C9 -:1006200000000000000001020408102040800102C8 -:100630000408102001020408102004040404040427 -:100640000404020202020202030303030303000084 -:1006500000002300260029000000000025002800DB -:100660002B0000000000240027002A007403C403AC -:10067000C80311241FBECFEFD8E0DEBFCDBF11E00D -:10068000A0E0B1E0E8E9F1E502C005900D92A835DF -:10069000B107D9F727E0A8E5B1E001C01D92AF3559 -:1006A000B207E1F713E0C8E3D3E004C02197FE01ED -:1006B0000E943024C633D107C9F70E9463030C940B -:1006C000BF280C9400000E9465200E944B0488E51E -:1006D00091E00E94FC1B68E670E088E591E00E94D2 -:1006E0007F1B0E94750FF7CF1092A9011092A801ED -:1006F0008CE491E09093A7018093A601089588EE81 -:1007000091E00E946C0781E08093E80187E890E027 -:100710009093E7018093E60182E08093E5011092D7 -:10072000E3011092E40186E28093DF0184E180938B -:10073000E0010E94080586E090E00E941A068823E6 -:1007400049F042E067E770E088E591E00E94BA185E -:100750008111089588EE91E00E949A0B0E944E0646 -:1007600081110E94CC030E9410058823E1F30E94AE -:100770001A0588EE91E00E94D60A8FED91E00E9462 -:100780002A050E94E803D7CF88EE91E00C945E061C -:1007900088EE91E00C945F068091ED04811117C002 -:1007A00081E08093ED043091EE042091EF0480917C -:1007B000F0048091F1048091F2048091F30480911F -:1007C000F4048091F504832F922F0C94C025089592 -:1007D0002091EE043091EF044091F0045091F10427 -:1007E0006091F2047091F3048091F4049091F50407 -:1007F000A1E00E9424242093EE043093EF04409360 -:10080000F0045093F1046093F2047093F304809326 -:10081000F4049093F50408958F929F92AF92BF9243 -:10082000CF92DF92EF92FF924B015C0169017A0156 -:100830000E94BB25BC01990F880B990BC818D908D9 -:10084000EA08FB08A70196012F5F3F4F4F4F5F4F0C -:100850000E94D823680D791D8A1D9B1DFF90EF9083 -:10086000DF90CF90BF90AF909F908F900895EBE86E -:10087000F4E013861286118610861082118212828D -:10088000138214821582168217823C9684E0EB3E16 -:10089000F80779F708951092EE041092EF04109281 -:1008A000F0041092F1041092F2041092F3041092EA -:1008B000F4041092F5041092EC040E943704109294 -:1008C000EB040895EF92FF920F931F93CF93DF9362 -:1008D000CDB7DEB72C970FB6F894DEBF0FBECDBFF5 -:1008E00049835A836B837C839E83EF82F8860987D2 -:1008F0001A873C8769817A814F815885240F352F6B -:10090000311D62177307C8F4860F972F911D481782 -:10091000590798F46B817C8149855A858C85840FB1 -:10092000952F911D6817790740F42E81260F372FD8 -:10093000311D81E04217530708F080E081702C964A -:100940000FB6F894DEBF0FBECDBFDF91CF911F91E0 -:100950000F91FF90EF90089550E0480F511D87FDD3 -:100960005A9557FD0CC0843554F430E0260F311DE4 -:1009700067FD3A9537FD03C081E060330CF080E0FD -:100980000895DC01643508F042C0403308F03FC0F0 -:1009900090968C919097E62F062E000CFF0B242F3B -:1009A00025952595259594E52902E00DF11D112445 -:1009B000E05BFA4F2081342F37708230A1F4822F10 -:1009C00090E0032E02C0959587950A94E2F78095F2 -:1009D0008170882399F081E090E001C0880F3A95FA -:1009E000EAF7822B13C08330A1F71C968C91642701 -:1009F000062E000C770B682760FDEDCF81E090E0BC -:100A000001C0880F3A95EAF7809582238083089584 -:100A10001092AC0166E273E086EA91E00C94251531 -:100A200088E591E00E94021891E0811101C090E0F8 -:100A3000892F089560E086EA91E00E94271086EAF7 -:100A400091E00C941610FC01238142816181808128 -:100A50000C94AC04EF920F931F93CF93DF93EC01B0 -:100A60000E9423058823E1F01091C60140E06E81C9 -:100A700086EA91E00E9478102F813885ED800C8104 -:100A80004981688186EA91E00E943E14612F86EADE -:100A900091E0DF91CF911F910F91EF900C94741022 -:100AA000DF91CF911F910F91EF900895FC018491F8 -:100AB00008950196FC01849108954CE3BC0188E5FA -:100AC00091E00C94DA160F931F93CF93DF938C0170 -:100AD000C091C401D091C50122974093AF012093EA -:100AE000B00186EA91E00E94251540E061E086EAC7 -:100AF00091E00E947810B80186EA91E00E942E22CF -:100B0000209749F0BE0186EA91E0DF91CF911F91D5 -:100B10000F910C942515DF91CF911F910F9108959E -:100B2000FF920F931F93CF93DF93D82F162FC42FCD -:100B3000F22E242F0E94AC048823C1F00091C6013C -:100B40006F2D86EA91E00E9474102C2F412F6D2F9B -:100B500086EA91E00E940511602F86EA91E0DF911C -:100B6000CF911F910F91FF900C947410DF91CF9152 -:100B70001F910F91FF900895EF92FF920F931F9393 -:100B8000CF93DF93C82FD62F142FF22E0E94AC04E0 -:100B90008823D1F0E090C601602F86EA91E00E94A0 -:100BA00074100F2D212F4D2F6C2F86EA91E00E949B -:100BB000B4106E2D86EA91E0DF91CF911F910F91D5 -:100BC000FF90EF900C947410DF91CF911F910F91D3 -:100BD000FF90EF900895EF92FF920F931F93CF93A2 -:100BE000DF93C82FD62F142FF22E0E94AC04882337 -:100BF000D1F0E090C601602F86EA91E00E94741067 -:100C00000F2D212F4D2F6C2F86EA91E00E94DC10D2 -:100C10006E2D86EA91E0DF91CF911F910F91FF90A9 -:100C2000EF900C947410DF91CF911F910F91FF9072 -:100C3000EF900895682F82E691E00E94CB0F91E03B -:100C4000811101C090E0892F0895CF93C62F682F9E -:100C500082E691E00E94EA0F91E0C81708F090E068 -:100C6000892FCF91089560E00C94250681E090E0F3 -:100C70000E943306811110C083E090E00E94330689 -:100C800081110AC090E080E00E943306811104C007 -:100C900082E090E00C94330681E008950E943606CD -:100CA00081110AC084E090E00E943306811104C0E3 -:100CB00085E090E00C94330681E00895089508954E -:100CC0000F931F93CF93DF93CDB7DEB728970FB65F -:100CD000F894DEBF0FBECDBF162F00E028E044E53C -:100CE0006BE280E00E94EB051F921F9386E091E08B -:100CF0009F938F931F9288E08F938E010F5F1F4FFA -:100D00001F930F930E94D2252CE244E064EA71E025 -:100D1000C8010E9463050FB6F894DEBF0FBECDBFB9 -:100D200028960FB6F894DEBF0FBECDBFDF91CF91EE -:100D30001F910F910895CF92DF92FF920F931F930F -:100D4000CF93DF93CDB7DEB760970FB6F894DEBFD1 -:100D50000FBECDBF6C0160E086EA91E00E94741086 -:100D600005E024E540E060E086EA91E00E94DC10C6 -:100D7000F60181891F928F938CE091E09F938F936E -:100D80001F9280E1F82EFF928E010F5F1F4F1F937D -:100D90000F930E94D22521E042E064EA71E0C8018D -:100DA0000E946305F60182891F928F9381E191E091 -:100DB0009F938F931F92FF921F930F930E94D225B0 -:100DC00021E046E164EA71E0C8010E946305F60192 -:100DD00083891F928F9386E191E09F938F931F9257 -:100DE000FF921F930F930E94D22521E04AE264EA0A -:100DF00071E0C8010E9463050FB6F894DEBF0FBE14 -:100E0000CDBF60960FB6F894DEBF0FBECDBFDF91A9 -:100E1000CF911F910F91FF90DF90CF900895CF92C7 -:100E2000DF92EF92FF920F931F93CF93DF9300D047 -:100E300000D000D0CDB7DEB76B0109831A832B83B6 -:100E40003C837C012CE6E21A2DEFF20AF701408187 -:100E5000403208F03FC054E1242F30E08C01549F11 -:100E6000000D111D1124F801658F2F5F3F4F529F18 -:100E7000B001539F700D1124860F971F29813A816D -:100E8000FC01318320838B819C81F801978B868BB9 -:100E90008C2D0E942B0EF801848F81E083A3F2E059 -:100EA000CF16D1040CF480E0F80181A3F701808112 -:100EB0008F5F808381E026960FB6F894DEBF0FBE69 -:100EC000CDBFDF91CF911F910F91FF90EF90DF90F9 -:100ED000CF90089580E0EFCFEF92FF920F931F9392 -:100EE000CF93DF9300D000D000D0CDB7DEB77C0128 -:100EF0008C010C561D4FD8011C92FC01E256FD4F8F -:100F00008FEF8083C7018B569D4F0E94BC0B0E94C0 -:100F1000A50CF701749684E1DF01982F1D929A9534 -:100F2000E9F77496E017F107B9F789E1D70151960F -:100F30008C93519782E352968C9352978BE45396FD -:100F40008C9324E130E040E050E060E070E0CB01C1 -:100F50000E940C047A83698324E130E040E050E091 -:100F600060E070E0CB010E940C04262F7C836B8331 -:100F700009811A813C814D815E8162E070E0C70188 -:100F80000E940F07811104C088EA90E00E945D056D -:100F900028E330E040E050E060E370E080E090E083 -:100FA0000E940C047A83698328E330E040E050E03B -:100FB00060E370E080E090E00E940C047C836B832F -:100FC00080E00E94F90C8D8380E00E94030DF70100 -:100FD000EF55FD4F10823196108232971082339771 -:100FE000108209811A812B813C814D81582F70E03C -:100FF00060E0C7010E940F07811110C081E990E0F5 -:1010000026960FB6F894DEBF0FBECDBFDF91CF910D -:101010001F910F91FF90EF900C945D0526960FB6EF -:10102000F894DEBF0FBECDBFDF91CF911F910F911E -:10103000FF90EF900895CF93DF9300D000D000D0C1 -:10104000CDB7DEB7FC01E956FD4F2081318144E187 -:1010500050E0421B530B8B569D4FFC0180819181C8 -:1010600026E230E0281B390B3A8329835C834B83CB -:101070003A815C8168E078E080E090E026960FB6E7 -:10108000F894DEBF0FBECDBFDF91CF9108953F92A0 -:101090004F925F926F927F928F929F92AF92BF9288 -:1010A000CF92DF92EF92FF920F931F93CF93DF9334 -:1010B00000D000D000D0CDB7DEB75C018C01912C00 -:1010C00088248A9444244A94542C3201F80183A140 -:1010D000882309F444C084A1811141C0C5010E9444 -:1010E0001B0829833A834B835C836D837E83F801DD -:1010F000C488D588E688F788858D0E94F90C382E3B -:10110000F801858D0E94030D29813A81C21AD30A04 -:10111000232D30E035952795C20ED31E2B813C81BF -:10112000E21AF30A90E095958795E80EF91ECC9C9B -:10113000C001CD9C900D900D1124EE9C9001EF9C70 -:10114000300D300D1124820F931FB0E0A0E0841504 -:101150009505A605B70518F4892C2C013D010C5EF8 -:101160001F4F9394F0E29F12B1CFF501E256FD4F6D -:10117000808226960FB6F894DEBF0FBECDBFDF91FA -:10118000CF911F910F91FF90EF90DF90CF90BF9084 -:10119000AF909F908F907F906F905F904F903F9017 -:1011A0000895FC01E356FD4F2081222351F0339630 -:1011B0002081211106C031968081853010F48F5F27 -:1011C00080830895BF92CF92DF92EF92FF920F93A8 -:1011D0001F93CF93DF9300D000D000D0CDB7DEB700 -:1011E0007C016B01FC01EE55FD4F8081823009F0DE -:1011F00047C0FB0181850E94F90C182FF6018185FB -:101200000E94030D082FF601B080812F90E09C0111 -:1012100035952795280F391F032E000C440B550BCD -:10122000612F70E090E080E00E940C04B60EF601A1 -:101230001281802F90E09C0135952795280F391F4A -:10124000032E000C440B550B602F70E090E080E003 -:101250000E940C041E821D828B2D90E00B2D9A8320 +:1000C00067210018181F80007E0000F80000F00073 +:1000D00000E00000E00004E00004E00004E2E004CE +:1000E000E28004E28004E28004E28004E28004E230 +:1000F000E004E0600CE00010E00000E00000E0013F +:1001000080F00180F801807E01801F818018180333 +:10011000FFC00C003037FFEC780016AFFFF5A800E9 +:1001200015A8FF15A88115A8FFD5AB8155AAA5D59F +:10013000AB8155AAA555AB81D5A89915A8FF15A6E1 +:10014000006591C3898C423183C3C1404202304271 +:100150000C0C423003C3C018180000000000FEFE63 +:1001600000FEFE003E3E00FEFE00FEFE001E1E00E3 +:100170001E1E001E1E001E1E001E1E001E1E001E35 +:100180001E001E1E001E1E001E1E001E1E001E1E25 +:1001900000FEFE00FEFE003E3E00FEFE00FEFE00F3 +:1001A000FE1818E700E7BD00BDE7FFE7BD00BD8111 +:1001B000FF81E700E7A500A5BDFFBDA500A5A5003F +:1001C000A5A500A5A500A5A500A5A500A5A500A518 +:1001D000A500A5E700E7BD00BDE7FFE7BD00BD81C5 +:1001E000FF81811881812481FFFFFF0808003C42C4 +:1001F00099A5661800080860BCC299A5671D02256C +:100200000214020C02070251756974004F70746980 +:100210006F6E73004D756C7469706C6179657220D6 +:1002200067616D650053696E676C6520706C6179FC +:1002300065722067616D6500030307050705040506 +:100240000504050306030207020201020203020E6F +:10025000090E0E0D0E0E0F0E070507050307050FFD +:10026000050705070607010205020007020207004D +:100270000207020002070200070603060707020240 +:10028000050502010202040200050202050006073C +:1002900005050705020302020602000000000B002C +:1002A000030003070507040701050205070704000B +:1002B0000300000705050700050005020702000C02 +:1002C00000020202000400040201070507050704FA +:1002D00001070405070203020704070107060601D8 +:1002E0000107070707030307000500000D000205CB +:1002F000000505050005020107030F0903060306B3 +:10030000070702020505070702070705070301079C +:10031000050607020705070504040307020507048D +:10032000040703070701060705070703030705037B +:100330000703060407010107010704070304030775 +:100340000607050205010601010704000705010271 +:10035000040507000201020808080003000603065E +:10036000070702020505070502070705070301073E +:10037000050607020705070504040307020507042D +:10038000040703070701060705070703030705031B +:100390000703060407010107010704070304030715 +:1003A000060705020501060101070402070500070B +:1003B0000005070206020307050703053F213F1258 +:1003C00008120A100A0E1C0E0C1E0C141A14161F0A +:1003D000161E131E1E1B1E1E1F1E3F213F3A2F3AC4 +:1003E000173D173F213F181F02040A041F0E040483 +:1003F0000E1F0A1F0A0E0E1F04110E2E252E2F2A65 +:100400002E262929021F02081F08150E04040E15A6 +:100410000E15151B151B040604040C040000000037 +:1004200017000300031F0A1F16371A1904130A15B1 +:100430003A000300000E11110E000A040A040E0413 +:100440000030000404040010001804031F111F12E0 +:100450001F101D151711151F07041F17151D1F1538 +:100460001D01011F1F151F17151F000A0000320074 +:10047000040A110A0A0A110A040115020E11171EB4 +:10048000051E1F150A0E110A1F110E1F15111F053B +:10049000010E111D1F041F111F1108100F1F041B37 +:1004A0001F10101F061F1E040F0E110E1F09060E2F +:1004B000112E1F051A121509011F011F101F0F18F9 +:1004C0000F1F0C1F1B041B031C03191513001F1106 +:1004D000030418111F000201022020200001020C59 +:1004E000121E1F120C0C12120C121F0C1A14041ED6 +:1004F00005242A1E1F021C141D1020201D1F081475 +:10050000111F101E041E1E021C0C120C3E0A040CAD +:10051000123E1E040214160A020F120E101E0E10B6 +:100520000E1E081E120C1226281E322A26041E2118 +:10053000001F00211E040102013F213F0A4E6F20CF +:1005400053442063617264206F720A6E6F204C4FB7 +:10055000414445522E4845580A0A153A457869746F +:10056000001D20466C617368696E670A20206C6FFD +:10057000616465722E2E2E0A0A444F4E2754205471 +:1005800055524E204F464621000A0A153A49676ED9 +:100590006F7265006D560A0A504C45415345205410 +:1005A00055524E204F464620004C4F572042415452 +:1005B0005445525921200017534400161378001651 +:1005C0001314001510200015201000540A03E181B7 +:1005D000867F3E186D830F0F0E0183866033186D82 +:1005E000C3198F1803C38E6033186DE330CF18031F +:1005F000C39E603630CDE360CF3006C79E7E3E306E +:10060000CDB360CF300CC6F6603330D9B660CF338F +:10061000CFCCF66061B0DB1E60CF30D86CE6C06135 +:10062000B0DB1E618F19986CC6C063B19B0E330F8F +:100630000FB078C6FF7E1F1B061E0F05008930080D +:10064000023802497868140000F6E8DBCFC3B8AE80 +:10065000A49B928A827B746E68625C57524E4945B5 +:10066000413E3A3734312E2C29272523211F1D1CCA +:100670001A1917161514131211100F0E0D0C0B0A60 +:1006800009080706450068010000050068013801F7 +:1006900000000500380168010000A2069E06010165 +:1006A000FF030101F703000000070002010000033F +:1006B00004060000000000000000010204081020F1 +:1006C00040800102040810200102040810200404E4 +:1006D00004040404040402020202020203030303EA +:1006E0000303000000002300260029000000000092 +:1006F000250028002B0000000000240027002A000D +:10070000BE030E04120411241FBECFEFD8E0DEBFDB +:10071000CDBF11E0A0E0B1E0E4EDF2E502C005904C +:100720000D92AE35B107D9F727E0AEE5B1E001C0D3 +:100730001D92A837B207E1F713E0C2E8D3E004C086 +:100740002197FE010E94CE24C038D107C9F70E942C +:10075000AD030C945D290C9400000E9403210E94BB +:1007600095048EE591E00E949A1C68E670E08EE5A3 +:1007700091E00E941D1C0E94CC0FF7CF1092AF0198 +:100780001092AE0183E591E09093AD018093AC01AE +:1007900008958EEE91E00E94710781E08093EE0152 +:1007A00087E890E09093ED018093EC0182E08093E4 +:1007B000EB011092E9011092EA0186E28093E501D3 +:1007C00084E18093E6010E940B0586E090E00E94A0 +:1007D0001F06882349F042E067E770E08EE591E06C +:1007E0000E945819811108958EEE91E00E94CB0B62 +:1007F0000E94530681110E9416040E94130588234B +:10080000E1F30E941D058EEE91E00E94070B85EE3C +:1008100091E00E942D050E943204D7CF8EEE91E028 +:100820000C9463068EEE91E00C9464068091F404BF +:10083000811117C081E08093F4043091F504209178 +:10084000F6048091F7048091F8048091F904809176 +:10085000FA048091FB048091FC04832F922F0C9466 +:100860005E2608952091F5043091F6044091F70436 +:100870005091F8046091F9047091FA048091FB049E +:100880009091FC04A1E00E94C2242093F5043093CF +:10089000F6044093F7045093F8046093F9047093BE +:1008A000FA048093FB049093FC0408958F929F9226 +:1008B000AF92BF92CF92DF92EF92FF924B015C0119 +:1008C00069017A010E945926BC01990F880B990B86 +:1008D000C818D908EA08FB08A70196012F5F3F4F07 +:1008E0004F4F5F4F0E947624680D791D8A1D9B1D16 +:1008F000FF90EF90DF90CF90BF90AF909F908F9040 +:100900000895E2E9F4E013861286118610861082BB +:1009100011821282138214821582168217823C96EB +:1009200084E0E23FF80779F708951092F5041092F9 +:10093000F6041092F7041092F8041092F904109241 +:10094000FA041092FB041092FC041092F3040E942B +:1009500081041092F2040895EF92FF920F931F9377 +:10096000CF93DF93CDB7DEB72C970FB6F894DEBFE9 +:100970000FBECDBF49835A836B837C839E83EF82F6 +:10098000F88609871A873C8769817A814F81588563 +:10099000240F352F311D62177307C8F4860F972F68 +:1009A000911D4817590798F46B817C8149855A85B8 +:1009B0008C85840F952F911D6817790740F42E813F +:1009C000260F372F311D81E04217530708F080E0D2 +:1009D00081702C960FB6F894DEBF0FBECDBFDF91AD +:1009E000CF911F910F91FF90EF90089550E0480F25 +:1009F000511D87FD5A9557FD0CC0843554F430E0E5 +:100A0000260F311D67FD3A9537FD03C081E0603345 +:100A10000CF080E008951092B2016AEB73E08CEA6A +:100A200091E00C94C3158EE591E00E94A01891E02E +:100A3000811101C090E0892F089560E08CEA91E077 +:100A40000E94C5108CEA91E00C94B410FC01238143 +:100A50004281618180810C94F604EF920F931F9381 +:100A6000CF93DF93EC01009701F10E9426058823C4 +:100A7000E1F01091CC0140E06E818CEA91E00E949F +:100A800016112F813885ED800C81498168818CEAAF +:100A900091E00E94DC14612F8CEA91E0DF91CF910C +:100AA0001F910F91EF900C941211DF91CF911F9134 +:100AB0000F91EF900895FC01849108950196FC0137 +:100AC000849108954CE3BC018EE591E00C94781775 +:100AD0000F931F93CF93DF938C01C091CA01D091E4 +:100AE000CB0122974093B5012093B6018CEA91E0A7 +:100AF0000E94C31540E061E08CEA91E00E9416116B +:100B0000B8018CEA91E00E94CC22209749F0BE0106 +:100B10008CEA91E0DF91CF911F910F910C94C31556 +:100B2000DF91CF911F910F910895FF920F931F9323 +:100B3000CF93DF93D82F162FC42FF22E242F0E948D +:100B4000F6048823C1F00091CC016F2D8CEA91E06E +:100B50000E9412112C2F412F6D2F8CEA91E00E94E0 +:100B6000A311602F8CEA91E0DF91CF911F910F913B +:100B7000FF900C941211DF91CF911F910F91FF9074 +:100B80000895EF92FF920F931F93CF93DF93C82F97 +:100B9000D62F142FF22E0E94F6048823D1F0E09075 +:100BA000CC01602F8CEA91E00E9412110F2D212FB1 +:100BB0004D2F6C2F8CEA91E00E9452116E2D8CEA21 +:100BC00091E0DF91CF911F910F91FF90EF900C94E6 +:100BD0001211DF91CF911F910F91FF90EF90089527 +:100BE000EF92FF920F931F93CF93DF93C82FD62FCF +:100BF000142FF22E0E94F6048823D1F0E090CC014D +:100C0000602F8CEA91E00E9412110F2D212F4D2FA1 +:100C10006C2F8CEA91E00E947A116E2D8CEA91E0A3 +:100C2000DF91CF911F910F91FF90EF900C941211D3 +:100C3000DF91CF911F910F91FF90EF900895682F52 +:100C400088E691E00E94221091E0811101C090E0BD +:100C5000892F0895CF93C62F682F88E691E00E94D0 +:100C6000411091E0C81708F090E0892FCF910895C6 +:100C700060E00C942A0681E090E00E943806811121 +:100C800010C083E090E00E94380681110AC090E015 +:100C900080E00E943806811104C082E090E00C944C +:100CA000380681E008950E943B0681110AC084E065 +:100CB00090E00E943806811104C085E090E00C9419 +:100CC000380681E00895089508950F931F93CF93F8 +:100CD000DF93CDB7DEB728970FB6F894DEBF0FBE0F +:100CE000CDBF162F00E028E044E56BE280E00E94D3 +:100CF000F0051F921F9386E091E09F938F931F92C0 +:100D000088E08F938E010F5F1F4F1F930F930E94F8 +:100D100070262CE244E068E372E0C8010E94680596 +:100D20000FB6F894DEBF0FBECDBF28960FB6F8946D +:100D3000DEBF0FBECDBFDF91CF911F910F91089500 +:100D4000CF92DF92FF920F931F93CF93DF93CDB794 +:100D5000DEB760970FB6F894DEBF0FBECDBF6C0153 +:100D600060E08CEA91E00E94121105E024E540E089 +:100D700060E08CEA91E00E947A11F60181891F926D +:100D80008F938CE091E09F938F931F9280E1F82ED8 +:100D9000FF928E010F5F1F4F1F930F930E947026CB +:100DA00021E042E068E372E0C8010E946805F601B4 +:100DB00082891F928F9381E191E09F938F931F927D +:100DC000FF921F930F930E94702621E046E168E393 +:100DD00072E0C8010E946805F60183891F928F9313 +:100DE00086E191E09F938F931F92FF921F930F9341 +:100DF0000E94702621E04AE268E372E0C8010E9486 +:100E000068050FB6F894DEBF0FBECDBF60960FB673 +:100E1000F894DEBF0FBECDBFDF91CF911F910F9130 +:100E2000FF90DF90CF900895CF92DF92EF92FF92E4 +:100E30000F931F93CF93DF9300D000D000D0CDB796 +:100E4000DEB76B0109831A832B833C837C012CE67C +:100E5000E21A2DEFF20AF7014081403208F03FC05C +:100E600054E1242F30E08C01549F000D111D1124FA +:100E7000F801658F2F5F3F4F529FB001539F700D58 +:100E80001124860F971F29813A81FC013183208329 +:100E90008B819C81F801978B868B8C2D0E947C0E18 +:100EA000F801848F81E083A3F2E0CF16D1040CF423 +:100EB00080E0F80181A3F70180818F5F808381E06A +:100EC00026960FB6F894DEBF0FBECDBFDF91CF914F +:100ED0001F910F91FF90EF90DF90CF90089580E0E9 +:100EE000EFCFEF92FF920F931F93CF93DF9300D03A +:100EF00000D000D0CDB7DEB77C018C010C561D4F61 +:100F0000D8011C92FC01E256FD4F8FEF8083C70190 +:100F10008B569D4F0E94ED0B0E94D60CF7017496E4 +:100F200084E1DF01982F1D929A95E9F77496E017F6 +:100F3000F107B9F789E1D70151968C93519782E374 +:100F400052968C9352978BE453968C9324E130E025 +:100F500040E050E060E070E0CB010E9456047A83EC +:100F6000698324E130E040E050E060E070E0CB01D4 +:100F70000E945604262F7C836B8309811A813C8151 +:100F80004D815E8164E070E0C7010E941407811109 +:100F900004C088EA90E00E94620528E330E040E067 +:100FA00050E060E370E080E090E00E9456047A83B5 +:100FB000698328E330E040E050E060E370E080E0E7 +:100FC00090E00E9456047C836B8380E00E944A0D6F +:100FD0008D8380E00E94540DF701EF55FD4F108284 +:100FE00031961082329710823397108209811A81CC +:100FF0002B813C814D81582F70E060E0C7010E9439 +:101000001407811110C081E990E026960FB6F8947C +:10101000DEBF0FBECDBFDF91CF911F910F91FF902B +:10102000EF900C94620526960FB6F894DEBF0FBEC3 +:10103000CDBFDF91CF911F910F91FF90EF90089559 +:10104000CF93DF9300D000D000D0CDB7DEB7FC0146 +:10105000E956FD4F2081318144E150E0421B530BA2 +:101060008B569D4FFC018081918126E230E0281B48 +:10107000390B3A8329835C834B833A815C8168E036 +:1010800078E080E090E026960FB6F894DEBF0FBEC1 +:10109000CDBFDF91CF9108953F924F925F926F92B3 +:1010A0007F928F929F92AF92BF92CF92DF92EF92F8 +:1010B000FF920F931F93CF93DF9300D000D000D007 +:1010C000CDB7DEB75C018C01912C88248A9444242E +:1010D0004A94542C3201F80183A1882309F444C0B6 +:1010E00084A1811141C0C5010E94200829833A834F +:1010F0004B835C836D837E83F801C488D588E68842 +:10110000F788858D0E944A0D382EF801858D0E9442 +:10111000540D29813A81C21AD30A232D30E0359526 +:101120002795C20ED31E2B813C81E21AF30A90E070 +:1011300095958795E80EF91ECC9CC001CD9C900D2D +:10114000900D1124EE9C9001EF9C300D300D112478 +:10115000820F931FB0E0A0E084159505A605B705A2 +:1011600018F4892C2C013D010C5E1F4F9394F0E282 +:101170009F12B1CFF501E256FD4F808226960FB641 +:10118000F894DEBF0FBECDBFDF91CF911F910F91BD +:10119000FF90EF90DF90CF90BF90AF909F908F9097 +:1011A0007F906F905F904F903F900895FC01E356C1 +:1011B000FD4F2081222351F033962081211106C05A +:1011C00031968081853010F48F5F808308958F92EF +:1011D0009F92BF92CF92DF92EF92FF920F931F9355 +:1011E000CF93DF9300D000D000D0CDB7DEB77C0125 +:1011F0004B016A01FB0181850E944A0D182FF40101 +:1012000081850E94540DB82EF4010081812F90E059 +:101210009C0135952795280F391F032E000C440B90 +:10122000550B612F70E090E080E00E945604060F9D +:10123000F40112818B2D90E09C0135952795280FA4 +:10124000391F032E000C440B550B6B2D70E090E002 +:1012500080E00E9456041E821D82802F90E09A83B7 :101260008983160F612F70E0212F7C836B831A8195 -:101270003C8140E05E8170E060E0C7010E940F07A2 -:1012800026960FB6F894DEBF0FBECDBFDF91CF918B -:101290001F910F91FF90EF90DF90CF90BF90089536 -:1012A0000F931F93CF93DF93EC01CF55DD4F288130 -:1012B0008C0100561D4F253018F5FC01E256FD4FFC -:1012C00020812F3F81F0FC0134E12302E00DF11D6C -:1012D000112421E024A3FC01E356FD4F20838E5509 -:1012E0009D4FFC011082188281E09881953008F4AE -:1012F00080E0F8018083DF91CF911F910F910895D5 -:10130000F8012081222381F3FC0130E020E044A198 -:10131000442399F0FC01EE55FD4F4081423021F706 -:101320002F5F3F4F44E1429FB001439F700D112456 -:10133000680F791F0E94E208D7CF2F5F3F4F749646 -:101340002032310521F7D0CFCF93DF93EC01C35684 -:10135000DD4F28812223D9F0DC01A156BD4F2C910D -:101360002530C0F0FC019C0120583D4F44A14111A3 -:1013700014A27496E217F307C9F71C921882FC01B5 -:10138000E056FD4F10828F559D4FFC011082DF917A -:10139000CF9108952F5F2C93FACFCF92DF92EF92E7 -:1013A000FF920F931F93CF93DF9300D000D000D014 -:1013B000CDB7DEB78C01FC01E356FD4F8081882359 -:1013C00009F1C8010E941B0829833A834B835C837F -:1013D0006D837E83F801680120E8C21A2DEFD20ADE -:1013E00084A19F012C5E3F4F7901882339F04B8106 -:1013F0005C8169817A81C9010E94310EF701EC1488 -:10140000FD0471F7F801E156FD4F108226960FB6E4 -:10141000F894DEBF0FBECDBFDF91CF911F910F912A -:10142000FF90EF90DF90CF900895EF92FF920F938F -:101430001F93CF93DF93FC01E056FD4F20812223C1 -:1014400049F1EC017C0180E8E81A8DEFF80A8E0181 -:101450000E551D4F8CA164968823C9F0CE010E94C1 -:10146000590FF80140819FEF940F282F30E0491762 -:1014700071F0993008F097E0B901092E02C0759516 -:1014800067950A94E2F760FF0CC0F8019083CE15CF -:10149000DF0501F7DF91CF911F910F91FF90EF9042 -:1014A00008959150E4CFEF92FF920F931F93CF9343 -:1014B000DF93FC01E056FD4F2081222349F1EC012E -:1014C0007C0180E8E81A8DEFF80A8E010E551D4F59 -:1014D0008CA164968823C9F0CE010E94590FF801AF -:1014E000408191E0940F282F30E0491771F0983037 -:1014F00008F090E0B901092E02C0759567950A942D -:10150000E2F760FF0CC0F8019083CE15DF0501F70C -:10151000DF91CF911F910F91FF90EF9008959F5F02 -:10152000E4CF0F931F93CF93DF93EC01FC01E056C0 -:10153000FD4F80818823A9F1FE0190E080E024A185 -:101540000196222351F144E1489F9001499F300DBB -:101550001124CE01820F931F0E94590F90E08E013B -:101560000E551D4FF801208102C0959587952A954B -:10157000E2F780FD03C0CE010E94530AF80180818A -:1015800090E00E94610F2CE248E264EA71E0DF9192 -:10159000CF911F910F910C94630574968032910541 -:1015A00071F6DF91CF911F910F9108958F929F92C5 -:1015B000AF92BF92CF92DF92EF92FF920F931F9361 -:1015C000CF93DF93EC018C010C5E1F4FF12CE12CCB -:1015D000912C6C0182E6C81A8DEFD80A5E01EBE609 -:1015E000AE1AEDEFBE0AF80187858823D9F0F6011F -:1015F00080818F3F39F0082E000C990B41E08E1549 -:101600009F0509F040E0B501C8010E940D0DF801E9 -:101610008088882039F0911005C06085CE010E9435 -:101620006006982CFFEFEF1AFF0A0C5E1F4F80E256 -:10163000E816F104C1F68881882339F1992099F0E0 -:1016400001E023E04AE06CE284E40E94BC05FE0174 -:10165000EF55FD4F4081442331F0440F23E06CE20D -:1016600084E40E94EB05CE010E94910ACE01DF9135 -:10167000CF911F910F91FF90EF90DF90CF90BF908F -:10168000AF909F908F900C949B06DF91CF911F910C -:101690000F91FF90EF90DF90CF90BF90AF909F9011 -:1016A0008F900895CF93DF93EC0184E090E00E9447 -:1016B0003306882329F0CE01DF91CF910C94D10815 -:1016C00084E090E00E941A06882329F0CE01DF9181 -:1016D000CF910C94500985E090E00E943306882356 -:1016E00029F0CE01DF91CF910C94A40985E090E020 -:1016F0000E941A06882329F0CE01DF91CF910C9425 -:10170000CD0990E080E00E941A06882329F0CE01DE -:10171000DF91CF910C94150A82E090E00E941A06A6 -:10172000882329F0CE01DF91CF910C94530ADF91E9 -:10173000CF9108950F931F93CF93DF93EC018C010A -:101740000B561D4FFC01E056FD4F6081C8010E9401 -:10175000A20CC8010E94040CCE010E94470860E25E -:1017600070E0CE0144960E94390ECE01DF91CF91F8 -:101770001F910F910C94520BFC0111821082138265 -:1017800012821482158283E0868317820895CF9394 -:10179000DF93CDB7DEB72C970FB6F894DEBF0FBE40 -:1017A000CDBF1C861B86FC0122813381420F531F53 -:1017B00080819181680F791F78876F835A87498765 -:1017C00086E0FE013796DE01119601900D928A9512 -:1017D000E1F729813A814B815C816D817E8180E0D6 -:1017E00090E02C960FB6F894DEBF0FBECDBFDF9110 -:1017F000CF910895FC019081490FDB014C938281C8 -:10180000280F11962C930895CF93DF93EC018F81CD -:10181000882319F01C821D821BC08E818330D8F46E -:101820008F5F8E832C8188819981820F911D27FD86 -:101830009A9597FF80C0998388832D818A819B81A7 -:10184000820F911D27FD9A9597FF79C09B838A830C -:10185000DF91CF9108951E820E943606882369F198 -:1018600090E080E00E943306882329F08C8187FF76 -:1018700047C08E5F8C8381E090E00E94330688230E -:1018800029F08D8187FF41C08E5F8D8383E090E0DA -:101890000E943306882331F08D8118160CF03AC06F -:1018A00082508D8382E090E00E943306882329F0E5 -:1018B0008C8118169CF582508C8390E080E00E9409 -:1018C000330681110BC082E090E00E943306811143 -:1018D00005C08C81181634F581508C8381E090E02E -:1018E0000E94330681119ECF83E090E00E94330670 -:1018F000811198CF8D811816CCF481508D8392CFB1 -:1019000085300CF0B8CF8F5FB5CF85300CF0BECFEF -:101910008F5FBBCF8C3F34F28150C3CF8C3F6CF2D2 -:101920008150CACF8823D1F28F5FD7CF882309F4A3 -:1019300079CF8F5FE3CF198218821C827ECF1B8202 -:101940001A8269CFFC0167830895FF920F931F935A -:10195000CF93DF9303E215E087E591E0F8019087EC -:1019600087830E945605F801828387E591E00E94F3 -:101970005905F801838315821482FF24F394F682BB -:10198000C6EFD4E081E691E098878F830E945605E8 -:101990008A8381E691E00E9459058B831D821C8217 -:1019A000FE828DE091E0F801928F818F0E945605B2 -:1019B000F801848B8DE091E00E945905F801858B38 -:1019C000178A168AF08E83EC90E09A8F898F0E9496 -:1019D00056058C8B83EC90E00E9459058D8B1F8AF5 -:1019E0001E8A83E0888FDF91CF911F910F91FF9026 -:1019F000089599E0899FF0011124ED5DFA4F8781E8 -:101A000090850C94560599E0899FF0011124ED5DB5 -:101A1000FA4F878190850C9459058F929F92AF92CF -:101A2000BF92CF92DF92EF92FF920F931F93CF93CB -:101A3000DF9300D000D000D0CDB7DEB77C016B01C2 -:101A4000842EDC011F968C911F97882309F480C097 -:101A500019969C90E92DF0E0B9E09B9E800111243D -:101A6000D7011D968C911D978111B3C01E968C9144 -:101A7000882309F480C00A501B4FF8011482158294 -:101A8000882351F0D70153968C9153978F5F8530FF -:101A900008F074C053968C93D7011A968D919C913F -:101AA0001B978130910509F48AC008F484C0823004 -:101AB000910509F46AC0039709F473C0F701228104 -:101AC000338140815181B801C6010E94FA0BC801DF -:101AD0000E942A05811005C0D70150968C91882359 -:101AE000B9F1F7014281538160817181C6010E9481 -:101AF000C70B29833A834B835C83C980DA80AB8030 -:101B0000BC80D70150968C9101E0811101C003E0A7 -:101B1000892D0E94F90C182F892D0E94030DF701C1 -:101B20009585992309F477C0282F26952695280FA7 -:101B3000412F46954695410F8695869586956A2D47 -:101B4000681B1695169516958C2D811B0E94BC0559 -:101B500026960FB6F894DEBF0FBECDBFDF91CF91B2 -:101B60001F910F91FF90EF90DF90CF90BF90AF90BB -:101B70009F908F9008950D5D1A4F7FCFF701138AC4 -:101B8000848591E08927848787CF82E0F801858367 -:101B9000D7011C968C91882309F490CF83E085832C -:101BA0008DCFF7018485882309F488CF81E0D8019F -:101BB00015968C9383CF81E0F8018483E8CF81E090 -:101BC000F80184831C968C91882309F477CF82E0F6 -:101BD000E6CFC8018A509B4F5C01EE0FFF1FE95E04 -:101BE000FE4F818112962D913C911397280F311D44 -:101BF00087FD3A9580814D915C91480F511D87FD7D -:101C00005A95B501C6010E94FA0BC5010E942A052A -:101C10000D5D1A4F53CF682F66956A0D7B2D711D90 -:101C2000812F8695202F412F8C0D9D2D911D26965D -:101C30000FB6F894DEBF0FBECDBFDF91CF911F91DD -:101C40000F91FF90EF90DF90CF90BF90AF909F905B -:101C50008F900C949005E82FF0E0ED5BFE4F8081B3 -:101C60000895FC01758364835783468381E08687EA -:101C700008952F923F924F925F926F927F928F9230 -:101C80009F92AF92BF92CF92DF92EF92FF920F930B -:101C90001F93CF93DF93CDB7DEB762970FB6F8945B -:101CA000DEBF0FBECDBF382E292E7E876D87C82E92 -:101CB000D92E912C812C4D855E8584169506C9F40C -:101CC00062960FB6F894DEBF0FBECDBFDF91CF9105 -:101CD0001F910F91FF90EF90DF90CF90BF90AF904A -:101CE0009F908F907F906F905F904F903F902F903C -:101CF0000895D6011F968C911F97882309F4D2C0AE -:101D00001E968C911E97882309F4CCC04D915C914E -:101D100011971996EC911997F0E0E25CFE4F508014 -:101D2000252D30E014966D917C911597FA01E21BF8 -:101D3000F30B6E177F07A0F51B961C921E921A9745 -:101D4000452C4194982FD60112966D917C91139752 -:101D500016964D915C911797FB01E21BF30B4E1702 -:101D60005F0760F5E2E0F0E01B96FC93EE931A97B4 -:101D70005194D6011E968C93882309F493C0A32C0A -:101D8000B22C712C612C442D042C000C550B588B5B -:101D90004F87852D052C000C990B9A8B898B23C0BE -:101DA000420F531F412C90E04617570760F641E061 -:101DB00050E0F60153874287452CC4CF260F371FCA -:101DC0002417350738F4E3E0F0E01B96FC93EE931C -:101DD0001A97CFCF892F512CCCCFFFEF6F1A7F0AE4 -:101DE00024E1A20EB11CAD85BE856A167B0609F4FE -:101DF00045C0F601808191812F853889820F931F1C -:101E000098878F838281938149895A89840F951F8E -:101E10009A87898781850E94F90C8B87D60119964C -:101E20008C910E94030D8C87F50187858823A9F288 -:101E30008614970491F2808191819A8389839C838F -:101E40008B8381850E94F90C8D83D50119968C9125 -:101E50000E94030D8E83E980FA800B811C812D8105 -:101E6000382F4F81588569857A858B859C850E949E -:101E70006204882309F4B1CFF6011686F60186853F -:101E8000882381F080819181840D911D47FC9A9572 -:101E90009183808382819381850D911D57FC9A9552 -:101EA00093838283FFEF8F1A9F0A24E1C20ED11C15 -:101EB00002CFDC011996EC91F0E0E15EFE4F8081EB -:101EC0000895880F991FFC01E85CFE4F8081918185 -:101ED0000895BC016F5F7F4F80E1FB0111928A95ED -:101EE000E9F788E591E00C94571C43E06BE671E05C -:101EF00088E591E00E94BA18811106C088EE91E051 -:101F00000E94690F0C947F030895FC0188E0808390 -:101F100089E0818387E0828386E0838384E0848311 -:101F200082E0858381E186830895FF920F931F935A -:101F3000CF93DF93EC018C01095F1F4FFF24FA94CC -:101F400062E088810E94412188810E94AB212F811B -:101F5000892B81F42F5F2F8360E088810E944121CB -:101F60002196C017D10761F7DF91CF911F910F9193 -:101F7000FF9008952223A1F32F3F11F41F82ECCF8D -:101F8000FF82EACFFC01E60FF11D81E097819130DD -:101F900009F080E00895FC01E60FF11D81E09781D2 -:101FA0009F3F09F080E00895860F911DFC01878115 -:101FB000423038F49FEF980F81E09E3F50F080E070 -:101FC00008C08F3FE1F3642F0E94A42381E0913089 -:101FD000B1F70895860F911DFC0187818F3F09F4A9 -:101FE00080E008958EBD0DB407FEFDCF8EB5089537 -:101FF0001F93CF93DF93EC01162FF89460E08F8549 -:102000000E947D21888918161CF460E00E947D21C1 -:10201000812F0E94F20F888918161CF461E00E943B -:102020007D217894DF91CF911F910895E0E5F5E04F -:1020300028EF31E0DF01A9011D9241505040E1F746 -:10204000DC0119961C9219971A961C92089548EF74 -:1020500051E06FEF7FEF80E595E00C94CB25CF92B8 -:10206000DF92EF92FF920F931F93CF93DF93EC01D8 -:102070008C858F5F8C8780E5E82E85E0F82E10E058 -:10208000612F6064CE010E94F80F60E8CE010E94CB -:10209000F80F61E08F850E947D21888918161CF455 -:1020A00060E00E947D21670104E5F60181916F01E6 -:1020B0000E94F20F0150C9F7888918161CF461E0DC -:1020C0000E947D211F5FF4E5EF0EF11C1630C1F672 -:1020D00060E4CE01DF91CF911F910F91FF90EF90BF -:1020E000DF90CF900C94F80FFC0160A361A30895DA -:1020F000FC0160A341A30895EF92FF920F931F93F9 -:10210000CF93DF938C01D62FF42EE22EC0E0CE15B4 -:1021100044F44F2D4C0F6D2FC8010E94C104CF5FB6 -:10212000F6CFDF91CF911F910F91FF90EF9008951F -:10213000EF92FF920F931F93CF93DF938C01F62EB4 -:10214000D42FE22EC0E0CE1544F46F2D6C0F4D2F2E -:10215000C8010E94C104CF5FF6CFDF91CF911F91DC -:102160000F91FF90EF900895EF92FF920F931F93BE -:10217000CF93DF937C01162FD42FC22F0E9498108B -:102180004FEF400F4D0F2C2F612FC7010E94981069 -:10219000202F4D2F612FC7010E947C106FEF6C0F15 -:1021A000610F202F4D2FC701DF91CF911F910F910C -:1021B000FF90EF900C947C10DF92EF92FF920F93C0 -:1021C0001F93CF93DF937C01D62FD22EC42F002EE6 -:1021D000000C110B040F111D47FD1A958C2F0C2EAE -:1021E000000C990B8017910744F42D2D4C2F6D2F67 -:1021F000C7010E949810CF5FF1CFDF91CF911F915F -:102200000F91FF90EF90DF9008959F92AF92BF9251 -:10221000CF92DF92EF92FF920F931F93CF93DF93B2 -:102220008C01E62EF42EC22F81E0D82ED21AC22EB7 -:10223000C194CC0C422F4F0DC8010E94C1044F2DF8 -:102240004C1B6E2DC8010E94C1046C2F6E0D4F2DCA -:10225000C8010E94C1046E2D6C1B4F2DC8010E9445 -:10226000C104D0E0DC170CF044C0D7FC04C0C1505E -:10227000C394C394DC0CDF5F8D2F880F8F5FD80E63 -:102280009E2C9D0EBF2CBC0E4B2D692DC8010E94AB -:10229000C104AE2CAD1A4B2D6A2DC8010E94C10499 -:1022A000BF2CBC1A4B2D692DC8010E94C1044B2DB7 -:1022B0006A2DC8010E94C104BF2CBD0E4B2DAE2C4F -:1022C000AC0E6A2DC8010E94C1044B2DBE2CBC1A55 -:1022D0006B2DC8010E94C1049F2C9D1A492D6A2DA7 -:1022E000C8010E94C104492D6B2DC8010E94C10480 -:1022F000B9CFDF91CF911F910F91FF90EF90DF90B9 -:10230000CF90BF90AF909F9008958F929F92AF9281 -:10231000BF92CF92DF92EF92FF920F931F93CF93D2 -:10232000DF937C01162FD42EC22F81E0C82EC21A53 -:10233000B22EB194BB0CD0E0802F8470A82E802FD9 -:102340008270982E802F8870882E0170DC170CF018 -:102350004DC0C7FC04C0C150B394B394CB0CDF5F35 -:102360008D2F880F8F5FC80EAA2071F04D2D4C0F56 -:10237000612F6D0FC7010E94C1044D2D4D0F6C2FB1 -:10238000610FC7010E94C104992071F04D2D4C1BB3 -:10239000612F6D0FC7010E94C1044D2D4D1B6C2F85 -:1023A000610FC7010E94C104882071F04D2D4D0FAF -:1023B000612F6C1BC7010E94C1044D2D4C0F612F72 -:1023C0006D1BC7010E94C104002309F4BFCF4D2D2E -:1023D0004D1B612F6C1BC7010E94C1044D2D4C1B6E -:1023E000612F6D1BC7010E94C104B0CFDF91CF9157 -:1023F0001F910F91FF90EF90DF90CF90BF90AF9023 -:102400009F908F9008957F928F929F92AF92BF92EC -:10241000CF92DF92EF92FF920F931F93CF93DF93B0 -:102420005C01C62E942EC22F11E0121BD22ED19425 -:10243000DD0C83E0F82ED0E0802F8170782E882488 -:1024400083948E0C0270DC17ACF517FD04C0C150EC -:10245000D394D3941D0DDF5F1F0D772099F02C2F9F -:10246000220F280D492D4C1B6C2D6D0FC5010E94AC -:102470007C102E2D2F0D492D4D1B6C2F6C0DC50181 -:102480000E947C10002399F02C2F220F280D492D3B -:102490004C1B6C2D6D1BC5010E947C102E2D2F0D29 -:1024A000492D4D1B6C2D6C1BC5010E947C10F394B3 -:1024B000F394C9CFDF91CF911F910F91FF90EF90CF -:1024C000DF90CF90BF90AF909F908F907F900895B6 -:1024D0009F92AF92BF92CF92DF92EF92FF920F93B3 -:1024E0001F93CF93DF93EC01B62E142FD22EAE2C78 -:1024F000AA0C922E9A18CE2CC60E292D6C2D0E9455 -:102500009810FF24FA94F00EF10E292D4F2D6C2D0A -:10251000CE010E9498100A191E0D202F412F6B2DFD -:10252000CE010E947C10DB0C6FEF6D0D202F412F30 -:10253000CE010E947C1001E02E2D412F6C2DCE018A -:102540000E9485118E2D8095D80E02E02E2D412FF0 -:102550006D2DCE010E948511FE1804E02E2D4F2D09 -:102560006D2DCE010E94851108E02E2D4F2D6C2D72 -:10257000CE010E948511DF91CF911F910F91FF90A5 -:10258000EF90DF90CF90BF90AF909F900895AF9263 -:10259000BF92CF92DF92EF92FF920F931F93CF9350 -:1025A000DF936C01C62FF42EA22ED02F1E2DEE0C21 -:1025B000B12EB60E2E196B2D0E94DC10D150DE19F3 -:1025C000F10E6FEF6C0F6A0D611BED2E01E0212FF4 -:1025D0004F2DC6010E94031202E0212F4F2D6B2DBB -:1025E000C6010E940312DF91CF911F910F91FF90BE -:1025F000EF90DF90CF90BF90AF9008952F923F92D1 -:102600005F926F927F928F929F92AF92BF92CF9282 -:10261000DF92EF92FF920F931F93CF93DF93EC0122 -:10262000F901E4903196849164350CF015C10E2CBB -:10263000000CFF08062F062E000C110BF701E00F0F -:10264000F11F1E161F060CF007C140330CF004C129 -:10265000A82FC42E042E000CDD085601A80EB11CB4 -:1026600087FDBA941A141B040CF0F6C02E5F3F4F7E -:10267000570197E0A90EB11CB7FE04C05701BEE098 -:10268000AB0EB11CB3E0B594A794BA95E1F747FF40 -:102690000AC0A42FA80FAC9CC001AD9C900D1124C2 -:1026A000281B390B40E08A2F0A2E000C990B840F4F -:1026B000911D47FD9A95C19714F0A0E3A41BF8A0C3 -:1026C00067FD60E0E535F10514F0E4E5F0E09E2FEC -:1026D000CC85C427C62E062E000CDD08F601E01BB3 -:1026E000F10B8F014F01F7E08F229924E0E8F0E031 -:1026F00002C0F595E7958A94E2F77E2F17FF02C096 -:10270000095F1F4FF3E015950795FA95E1F7200F44 -:10271000311F542F577081E001C0880F5A95EAF796 -:10272000459545954595F601B4E54B02E00DF11D43 -:102730001124AF01405B5A4FD0E02A2EAA0F330874 -:10274000EE24E394BB24D21513040CF085C0F901E8 -:102750005490F1E0FF121AC06901962E8A01E72F0A -:10276000991608F057C08E2E852021F0D8018C9044 -:10277000882A8C92E69531F4BFEFCB1ADB0AF6017A -:102780005490E0E893940F5F1F4FEACFF1101CC004 -:10279000782E70946901962E8A01E72F991608F019 -:1027A00039C08E2E852021F0D8018C9087208C9204 -:1027B000E69531F4BFEFCB1ADB0AF6015490E0E85E -:1027C00093940F5F1F4FEACFF3E0FF122CC0782ED7 -:1027D00070946901862E8A01972E8916D0F4E92D0E -:1027E000E52141F0D801EC916C2E682460FE0FC009 -:1027F000E82BEC93969439F4BFEFCB1ADB0AF60181 -:102800005490E0E89E2E83940F5F1F4FE6CFE721A0 -:10281000F0CFCE25880F19F44C5A5F4F81E0DF5F6F -:102820002A0D3B1D90CF6901962E8A01E72F99163C -:1028300088F78E2E852021F0D8018C9088268C92E6 -:10284000E69531F4BFEFCB1ADB0AF6015490E0E8CD -:1028500093940F5F1F4FEBCFDF91CF911F910F919B -:10286000FF90EF90DF90CF90BF90AF909F908F90B0 -:102870007F906F905F903F902F9008952F923F929E -:102880004F925F926F927F928F929F92AF92BF9280 -:10289000CF92DF92EF92FF920F931F93CF93DF932C -:1028A00000D000D000D01F92CDB7DEB74C01462E2D -:1028B000342E69018E2D01111DC0E1101BC0C40111 -:1028C00027960FB6F894DEBF0FBECDBFDF91CF9134 -:1028D0001F910F91FF90EF90DF90CF90BF90AF903E -:1028E0009F908F907F906F905F904F903F902F9030 -:1028F0000C94FE12F60154903196E490A52CB12C64 -:102900009501295F3F4FA90133E0559547953A95C9 -:10291000E1F75B834A830370F12CEE2DF0E0FD8339 -:10292000EC835A941FEF1E0D2F2D0F2C000C330B30 -:102930002A153B050CF070C0F982F7FE03C0F7E0E2 -:10294000FF0DF983298125952595259529839F2DAF -:10295000977897FF03C09150986F9F5F20E8622E91 -:10296000712C02C0759467949A95E2F7212C4981E5 -:10297000042E000C550B4E5F5F4F5F834E83222D5C -:10298000022C000C330BEC81FD812E173F070CF05D -:1029900041C04A815B81429FF001439FF00D529FED -:1029A000F00D11242E813F81E20FF31FEC0DFD1D70 -:1029B000E491F0E0E621F721EF2B41F1023069F0DC -:1029C000612F62194F2D033061F0452D4F19622D93 -:1029D000013039F0422D6F2D04C0652D6F19412F44 -:1029E00042198823A9F0382F3370398380FF03C040 -:1029F000552D561B652F81FF03C08E2D841B482F3C -:102A0000640D430DC4010E94C10489812394B7CF92 -:102A10001982F6CFF39488CF27960FB6F894DEBFCD -:102A20000FBECDBFDF91CF911F910F91FF90EF901F -:102A3000DF90CF90BF90AF909F908F907F906F90DE -:102A40005F904F903F902F900895DC01FB0184919F -:102A50008F5F14968C9314973196E491EF5F1596DF -:102A6000EC9315976E5F7F4F5F967C936E935E97A6 -:102A70000895EF920F93CF93DF93EC014E876D870C -:102A80002F87E98A088B81E0888788A319A28F8322 -:102A900066E273E0CE010E9425150E94612381E069 -:102AA0000E94772385E00E9485238CE00E9480238A -:102AB00061E08E850E94412161E08D850E94412167 -:102AC00061E08F850E944121898918161CF461E01C -:102AD0000E944121888918161CF461E00E9441215E -:102AE000898918166CF460E00E947D216AE070E02C -:102AF00080E090E00E943F2061E089890E947D2172 -:102B00008D85082E000C990BFC01E65CF94FE491D1 -:102B1000F0E0EE0FFF1FE85AF94F259134913D8BFD -:102B20002C8BFC01EA5DF94FE491EB8F8E85082E2A -:102B3000000C990BFC01E65CF94FE491F0E0EE0F1C -:102B4000FF1FE85AF94F259134913B8B2A8BFC01EA -:102B5000EA5DF94FE491EA8F8889082E000C990B01 -:102B6000FC01E65CF94FE491F0E0EE0FFF1FE85A3C -:102B7000F94F259134913F8B2E8BFC01EA5DF94F83 -:102B8000E491EC8F8F85082E000C990BFC01E65C1C -:102B9000F94FE491F0E0EE0FFF1FE85AF94F25914D -:102BA0003491398F288FFC01EA5DF94FE491ED8F64 -:102BB00061E2CE010E94F80F64E1CE010E94F80F9D -:102BC0008B8587FF02C08FE78B876B856068CE019E -:102BD0000E94F80F60E2CE010E94F80F6CE0CE0177 -:102BE0000E94F80FCE01DF91CF910F91EF900C94DE -:102BF0002F104F925F926F927F928F929F92AF921F -:102C0000BF92CF92DF92EF92FF920F931F93CF93D9 -:102C1000DF93EC01862EF42E102F83E586170CF43B -:102C200085C08FE284170CF481C04C814150550B54 -:102C3000049FC001059F900D1124860F911D67FD13 -:102C40009A95181619060CF071C03D818F2D0F2C26 -:102C5000000C990B039F800D911D11241816190665 -:102C60000CF064C078A0E62E912CC22ED12C292D18 -:102C7000092C000C330B8C8190E0281739070CF0DD -:102C800054C00197E0E02817390771F0C89EF001A1 -:102C9000C99EF00DD89EF00D11242E0F3F1FEE8D12 -:102CA000FF8DE20FF31FE4915F2C612C492C480C3F -:102CB0002D81862D062C000C990B2817190691F1F1 -:102CC0008CF1AE2EB12CE0FF16C0113061F4462D10 -:102CD0004F0D642DCE010E94C104F501F595E795D5 -:102CE0006394510EE5CF012F212F452D6E2DCE017E -:102CF0000E94DC10F2CF89A198A1891771F388A3F3 -:102D0000113041F4462D4F0D642DCE010E94C104B7 -:102D100078A2E3CF012F212F452D6E2DCE010E94E9 -:102D2000DC10F6CF9394E10EA2CF78A2DF91CF9181 -:102D30001F910F91FF90EF90DF90CF90BF90AF90D9 -:102D40009F908F907F906F905F904F9008950F931A -:102D5000CF93DF93EC01262F6A3049F428859D81BB -:102D60008A85299F800D11248A8719861DC06D30A0 -:102D7000D9F008854A8569850E94F91528853C8126 -:102D80008985239F800D112489879F81992361F074 -:102D9000082E000C990B44E550E0239F401951097F -:102DA000112448175907DCF281E090E0DF91CF91C0 -:102DB0000F910895FC01EC57FF4F718360838A5790 -:102DC0009F4F445FFC01408308956F927F928F92E2 -:102DD0009F92AF92BF92CF92DF92EF920F93CF93D9 -:102DE000DF934C015C0186E8A80EB11CD5018C91E3 -:102DF000882309F44AC0CCE0C81B8C3008F0C0E03E -:102E0000F401EA5AFF4F81E080836401BEE4CB0EF7 -:102E1000D11C60E0C6010E9474103401E3E56E0E1F -:102E2000711CD3018C9103E0080FDDE24D2F481B8C -:102E30004C0F83E0E82E24E560E0C6010E94C71233 -:102E400061E0C6010E947410F301808103E0080F65 -:102E50004D2F481B4C0F24E560E0C6010E9468120C -:102E6000F401E95AFF4F84E080833196D3018C91BD -:102E7000C81BC15DC083BC9660817181C6010E9480 -:102E80000B22F501808181508083DF91CF910F91DA -:102E9000EF90DF90CF90BF90AF909F908F907F90FA -:102EA0006F900895CF92DF92FF920F931F93CF936D -:102EB000DF93EC018C8D9D8D892B01F18E01025BDE -:102EC0001F4F40E061E0C8010E947810FE01E95AFE -:102ED000FF4FDE01AE5ABF4F9C9185E5891B808371 -:102EE00031961082698D613009F46DC078F0888D5B -:102EF000653008F082C06B5F811175C0DF91CF91A2 -:102F00001F910F91FF90DF90CF900895CE0185968D -:102F10000E94AC1E81E0FE01EA5AFF4F808366E208 -:102F200073E0C8010E9425151D8E1C8EFE01EC5A0F -:102F3000FF4F108288EAF82E6E018AE0C80ED11C7D -:102F4000CE010E9402188823D9F365E175E0C8011B -:102F50000E940B226A8D7B8D4AE050E0C8010E94DE -:102F60001A2360E075E0C8010E940B226F2D629564 -:102F70006F7070E04AE050E0C8010E94062365EFE0 -:102F800074E0C8010E940B2264E0C6010E94C20FD7 -:102F90008111B4CFFA94F110D3CF60E0CE010E943A -:102FA0001F1F83B7817F846083BF83B7816083BF26 -:102FB00083B7816083BF889583B78E7F83BF83B7D4 -:102FC0008E7F83BFBDCFCF58DF4F88819981AA8183 -:102FD000BB818F709927AA27BB2767E00897A105B7 -:102FE000B10508F068E7C801DF91CF911F910F91FB -:102FF000FF90DF90CF900C943622882309F47ECF87 -:103000006FE2F1CF8F929F92AF92BF92CF92DF92F9 -:10301000EF92FF920F931F93CF93DF93EC017C010C -:1030200080E8E80EF11CF70180809180A280B380D7 -:103030000E940E20861A970AA80AB90A6E01FFE7B5 -:10304000CF0ED11CF601808190E0B0E0A0E08E01AF -:1030500005581F4F88159905AA05BB0508F04AC0F9 -:10306000F80180819181A281B381892B8A2B8B2BDE -:1030700009F440C00E940E20F6012081620F711DEC -:10308000811D911DF70160837183828393833F9734 -:1030900080819181A281B3810196A11DB11D8083A0 -:1030A0009183A283B383F80110821182128213826A -:1030B0000E941A20FE01E958FF4F608371838283CA -:1030C0009383CE010E94231FCE010A960E94950F82 -:1030D000CE0148960E948C1F81E0DF91CF911F9115 -:1030E0000F91FF90EF90DF90CF90BF90AF909F90A7 -:1030F0008F900895F80180819181A281B381892BFD -:103100008A2B8B2BA9F57E01F5E2EF0EF11CC7018E -:103110000E94671DC7010E94DA1DC7010E949E1E02 -:10312000CE010E94E516CE010E9452177E018EE468 -:10313000E80EF11CC7010E942F10FE01EC5AFF4F50 -:103140008081811103C0C7010E9416100E941A20BD -:10315000F8016083718382839383FE01EB58FF4FF4 -:10316000C958DF4F28813981621B730B71836083DB -:1031700080E0B3CF2F923F924F925F926F927F92F7 -:103180008F929F92AF92BF92CF92DF92EF92FF9277 -:103190000F931F93CF93DF93CDB7DEB765970FB62D -:1031A000F894DEBF0FBECDBF6C016A8B7B8B4B8367 -:1031B000FC01EC5AFF4F10822FEF2D831C821D8AD9 -:1031C00010E31C8A3C013AE0630E711C842F90E0EE -:1031D0009F838E832601E3E54E0E511C4601F5E2E6 -:1031E0008F0E911C9601295A3F4F39872887C601B7 -:1031F000885A9F4F9B878A87F601EA5AFF4FFF87BD -:10320000EE8722503109398B288B0A971C01C601A1 -:103210000E9402188823D9F364E0C3010E94C20F00 -:10322000012F110F110B882399F0F201F081F19514 -:103230002B81F29F202D112422502D8B64E0C3019D -:103240000E94C20F811193C0C4010E94071F94C045 -:1032500065E0C3010E94C20F8111E7CF66E0C301A0 -:103260000E94C20F8111E1CF8C81811185C044E0A1 -:1032700063E0C3010E94D40F882331F09C899F5FD3 -:103280009C8BC4010E940B1F44E061E0C3010E94BB -:10329000D40F882331F0EC89E150EC8BC4010E94FB -:1032A0000B1FFC898F2F0F2E000C990B2E813F8155 -:1032B0008217930709F46BC0F7FF03C03B813150BD -:1032C0003C8BF2018081F4E0F80F2C89829FF01989 -:1032D0001124FD8B9D89090F111D97FD1A9517FF6C -:1032E00002C00F5F1F4FF801F595E795FA83E98358 -:1032F0000981102FE885F9851082EA85FB85008316 -:1033000021E0EE85FF852083E889F9891082EA882B -:10331000FB88B12CA12C2C89022E000C330B3D878D -:103320002C878E819F818A159B0599F1EC85FD85FF -:10333000EA15FB0579F423E0E885F9852083F2019D -:103340008081F02F2C89289FF00D11248F2FEA8582 -:10335000FB858083F70165917491C1010E94512220 -:10336000FFEFAF1ABF0A22E0E20EF11CDACFC40170 -:103370000E94031F3C893D83C8013D89831B91093D -:1033800037FD9395029764F181E08C83A3CF1C8A6B -:1033900098CF60E0C1010E947410F20180814981E0 -:1033A000FC89F89F400D1124415024E560E0C101E3 -:1033B0000E94981061E0C1010E947410F2018081A6 -:1033C00003E0080F4981FC898F9F400D1124425072 -:1033D00083E0E82E24E560E0C1010E94681217CF67 -:1033E0008D8165960FB6F894DEBF0FBECDBFDF911D -:1033F000CF911F910F91FF90EF90DF90CF90BF90F2 -:10340000AF909F908F907F906F905F904F903F9084 -:103410002F9008950F931F93CF93DF93EC018C01AE -:10342000025B1F4FC8010E9416106DEC74E0C801CA -:103430000E940B22C8010E942F1083E00E94852366 -:1034400080E591E0EEEFFFE30995FE01EC5AFF4FB6 -:10345000108268EA74E0C8010E945122C8010E94EB -:103460002F102A96CE010E94950F64E0CE010E9493 -:10347000C20F811107C062E370E080E090E00E941B -:103480003F20F0CFDF91CF911F910F9108952F92A0 -:103490003F924F925F926F927F928F929F92AF92E4 -:1034A000BF92CF92DF92EF92FF920F931F93CF9331 -:1034B000DF93CDB7DEB729970FB6F894DEBF0FBE06 -:1034C000CDBF998788877B836A832A013C0180E787 -:1034D000680E711CF3018081882309F4F7C081E034 -:1034E000E885F985EA5AFF4F8083E885F985EB5A2C -:1034F000FF4F1082E885F985EC5AFF4F1082E8856E -:10350000F985108E8F01025B1F4F61E0C8010E9498 -:103510007410888599858D5A9F4F9F838E83A884C8 -:10352000B98497E5A90EB11CE884F984E8E5EE0EAC -:10353000F11C88849984F2E58F0E911C8885998509 -:103540008F589F4F9D838C83288439849AE0290E5D -:10355000311CC884D984E5E2CE0ED11C88859985BA -:103560000E9402188823D1F3EA81FB81F491F98348 -:10357000FF2321F0EE81FF81F081F98327E335E01D -:1035800040E060E0C8010E94FE124114510439F08D -:103590004981445F920160E0C8010E94FE12F5017A -:1035A00010828CE0F70180836A817B81C8010E94D0 -:1035B0000B22F4018081982F990F990F891B8D5A46 -:1035C000F5018083EE81FF818081982F990F990FFB -:1035D000891B835DF7018083EC81FD81808163E33A -:1035E00075E084FD02C06FE275E0C8010E945122BF -:1035F000F4018081982F990F990F891B8D5AF5013D -:103600008083F70180818F5F8083E885F98582A5BB -:103610006BE275E0811102C067E275E0C8010E94AB -:103620005122F4018081982F990F990F891B8D5A8F -:10363000F5018083F70180818F5F808363E275E00D -:10364000C8010E94512265E0C1010E94C20F882377 -:1036500051F0E885F98562A56F5FC6010E940F1FD2 -:10366000C6010E940B1F64E0C1010E94C20F8111BC -:103670001FC0F3012081422F50E070E060E0EC8138 -:10368000FD8180819181A281B38184179507A6076E -:10369000B70710F02F3F61F466E0C1010E94C20F2E -:1036A000882309F45BCF888599850E940A1A56CF32 -:1036B0008FEFF301808360E0C6010E94A11EC60166 -:1036C0000E94031F81E0E885F985808F29960FB657 -:1036D000F894DEBF0FBECDBFDF91CF911F910F9148 -:1036E000FF90EF90DF90CF90BF90AF909F908F9022 -:1036F0007F906F905F904F903F902F90089550E093 -:1037000040E00C94471AE0E8F7E72591349181E016 -:103710002130304C09F080E00895CF93DF93EC0125 -:103720000E94831B9E01275A3F4FDE01A059BF4FC5 -:10373000882309F440C0E6E9F7E78491F901808322 -:10374000E7E9F7E7E491EC83E8E9F7E7E491ED8353 -:10375000E9E9F7E7859194919F838E83EBE9F7E799 -:103760008591949199878887EDE9F7E7E491EBA734 -:10377000EEE9F7E7E491EAA7EFE9F7E7E491EC93E4 -:10378000E0EAF7E7859194919D8F8C8FE2EAF7E765 -:10379000859194919F8F8E8FE4EAF7E785919491BC -:1037A00099A388A3E6EAF7E7859194919BA38AA35E -:1037B000DF91CF9108958CE3F90180831C828FEF14 -:1037C0008D8320E233E03F832E8324ED33E039877D -:1037D000288791E09BA79AA78C938CEA9DE09D8F08 -:1037E0008C8F8EED9DE09F8F8E8F84E79EE099A356 -:1037F00088A38CE39FE0DACFCF92DF92EF920F9312 -:10380000CF93DF93EC01FC01E158FF4F82E380830B -:10381000349781E090E0A0E0B0E080839183A283C0 -:10382000B3833B978FEF8083CE010E948D1BCE0127 -:103830000E941B1F6FEFCE010E941F1F6E018AE0C6 -:10384000C80ED11CC6010E94850FC6010E94950FAB -:10385000CE0148960E94821F8EE0E82E0FE020E104 -:103860004BE06DE0CE01825B9F4F0E943915A5961B -:10387000CE010E94A01C65E0C6010E94C20F8823F1 -:1038800051F060E0CE01DF91CF910F91EF90DF908A -:10389000CF900C940F1F40E067EA75E0CE01DF91F6 -:1038A000CF910F91EF90DF90CF900C94341DCF9378 -:1038B000DF93D62FC72F0E94831B882359F0AD2F8B -:1038C000BC2FEBE8F7E784918D933196E53987E7D4 -:1038D000F807C9F7DF91CF910895CF93DF93DC010B -:1038E00070E0660F771F1F96ED91FC915097E60FE1 -:1038F000F71F2591349190963C932E935F97F90191 -:103900004591549114968C911497849F402D1124C5 -:1039100091964C939197F901C591D4916D2F70E0D8 -:103920004617170629F020F0F90125913491432F0D -:10393000849F402D112492964C93DF91CF9108954E -:1039400021E0FC01248324E020A726E036E0308B30 -:10395000278760E00E946D1C61E070E083E00E94B8 -:10396000BB20E1EBF0E08081887F81608083F89468 -:1039700010928000E1E8F0E0108210928500109231 -:10398000840088E191E09093890080938800808191 -:1039900088608083808181608083EFE6F0E08081B1 -:1039A00082608083789408950F93FC01011107C011 -:1039B0006230D9F030F4662379F0613091F00F91E4 -:1039C00008956330C9F06430D1F76481649F402D5D -:1039D0001124458F268FF3CF4B3008F04AE0468BF9 -:1039E000EECF642F0F910C946D1C6481649F402D69 -:1039F0001124418F228FE3CF6481649F402D1124D5 -:103A0000438F248FDCCF80915407882329F0809145 -:103A100051078093B400089580E0FBCFFC01178A22 -:103A2000158A14A213A2108E1092510710925207F9 -:103A3000109254070C94031D0F931F93CF93DF93A1 -:103A4000EC018B010E940E1D1E870D871B8A1A8AAE -:103A500081E0898389E08E8B198E1B8E1D8EDF910C -:103A6000CF911F910F910895411102C00C941C1D1C -:103A70000895CF93DF93EC01611115C088818823ED -:103A800091F0898181110FC0E9858E2F90E0880F18 -:103A9000991FEF81F885E80FF91F859194918F3F69 -:103AA000980721F41882DF91CF9108959C87992778 -:103AB000880F991FEA85FB85E80FF91F65917491BE -:103AC000CE010E941C1D89858F5F8987ECCF60E045 -:103AD0000C94391D0F93CF93DF93EC01611166C0F5 -:103AE0008981882309F462C08D8981115FC08D8529 -:103AF0009E85EA89FB89EE0FFF1FE80FF91F4591AC -:103B000054914115510541F42989213021F51B8A31 -:103B10001A8AFC0145915491BA017695679576957C -:103B20006795862F40FF2EC0252F26952695269532 -:103B3000205186E0569547958A95E1F74F716F7051 -:103B400000E0CE010E94D41CEA89FB893196FB8BF0 -:103B5000EA8BCF010AC019828881882369F060E06E -:103B6000CE010E94391D8A899B89880F991FED8596 -:103B7000FE85E80FF91FCECFCE01DF91CF910F91D7 -:103B80000C940E1D8F738C8B8C81859F802D11243E -:103B90008D8B1DA21CA21BA281E08F8B80935407EA -:103BA000188E8A899B8901969B8B8A8BDF91CF9196 -:103BB0000F91089560E00C946A1DCF93DF93EC01A0 -:103BC0006111B3C08F89882309F4AFC08D89811139 -:103BD00005C0CE01DF91CF910C940E1D81508D8BCD -:103BE0008DA1811134C02BA13CA12F5F3F4FC90192 -:103BF000880F991FEF8DF8A1E80FF91F8591949117 -:103C0000482F47704EA3492F469546954FA3AC01C8 -:103C100064E0569547956A95E1F74F739C81499FFB -:103C2000402D11244DA383FB882780F980935007F2 -:103C30003CA32BA389A190E02817390740F02AA1C3 -:103C4000222309F475C0821B91099CA38BA38DA12B -:103C500081508DA3888D31E0380F388F4C892FA18A -:103C6000240F8C85280F2A836B8D662361F070E00A -:103C7000832F032E000C990B0E94C4238C8D869FEA -:103C8000200D11242A838A8190E0CB966BE370E0AB -:103C90000E94C4238A832E892B83698D662371F049 -:103CA000062E000C770B832F032E000C990B0E941D -:103CB000C4238A8D869F200D11242B836D8D66234E -:103CC00089F0832F330F990B70E00E94C423CB013E -:103CD00062E070E00E94C4232E8D9B81289F900D8E -:103CE00011249B834F3341F18B818A300CF089E0A2 -:103CF00087FD80E08B83F894EA81F0E0EB54FA4F83 -:103D0000E491E09353078D8198A5899F802D11241C -:103D10009B81899F802D11249EA1899F802D112434 -:103D200080935207809351077894DF91CF91089543 -:103D3000CE010E940E1D8BCF1B82DDCF60E00C9464 -:103D4000DD1DCF93DF93EC01611103C00E940E1DB6 -:103D50001982DF91CF910895CF93DF93EC010E94F8 -:103D60000E1D1982DF91CF9108956091520766234D -:103D700029F1809155078F5F8093550790915307E4 -:103D80008917E0F081E090915407911180E08093D1 -:103D900054071092550780915007882369F080914D -:103DA000040193E4899F802D1124895B8093040191 -:103DB0000E94A423909351070C94031D08951F9211 -:103DC0000F920FB60F9211242F933F934F935F934F -:103DD0006F937F938F939F93AF93BF93EF93FF93D3 -:103DE0000E94B51EFF91EF91BF91AF919F918F916E -:103DF0007F916F915F914F913F912F910F900FBEE7 -:103E00000F901F9018956EEF75E00C941C1D66EFD7 -:103E100075E00C941C1D60EF75E00C941C1DFC01FA -:103E2000862F660F990B668170E06F5F7F4F0E944F -:103E3000C4238583089521E0FC012083089570E068 -:103E400085E00C94BB20AF92BF92CF92DF92EF92AD -:103E5000FF920F931F93CF93DF93EC0189819A8197 -:103E60002FE0289F8001299F100D112485E10E94D9 -:103E7000A020800F911F24E0969587952A95E1F761 -:103E80009A8389832881222391F1EC81AD80B12C22 -:103E9000D12CC12CA885B9857D0110E000E06E8190 -:103EA0007F819B0150E040E08617970728F0BC0116 -:103EB000A817B90708F4BD0190E080E01F921F9297 -:103EC0001F92EF930E9420236B830F900F900F900F -:103ED0000F9070E085E0DF91CF911F910F91FF90DF -:103EE000EF90DF90CF90BF90AF900C94BB20DF910C -:103EF000CF911F910F91FF90EF90DF90CF90BF90E7 -:103F0000AF900895FC018CE39FE09383828384E06B -:103F1000818381E084870895CF93DF93EC018C81C6 -:103F20009D81892B21F18C858F7139F584E10E9467 -:103F3000A020BC01990F880B990B0E94762426EED5 -:103F40003FE34EEC50E40E9402250E9445249B0171 -:103F50007B836A83672BA9F084E08983FE01349612 -:103F600080E0419151912417350720F48983DF9136 -:103F7000CF9108958F5F8430A1F78C858F5F8C87F8 -:103F8000F6CF8FEF8983F9CF1F920F920FB60F9262 -:103F900011242F933F938F939F93AF93BF9380915F -:103FA000570790915807A0915907B0915A0730913F -:103FB000560723E0230F2D3758F50196A11DB11D9B -:103FC000209356078093570790935807A09359075B -:103FD000B0935A0780915B0790915C07A0915D07B1 -:103FE000B0915E070196A11DB11D80935B07909370 -:103FF0005C07A0935D07B0935E07BF91AF919F915F -:104000008F913F912F910F900FBE0F901F90189599 -:1040100026E8230F0296A11DB11DD2CF2FB7F89429 -:1040200060915707709158078091590790915A07EE -:104030002FBF08953FB7F89480915B0790915C077C -:10404000A0915D07B0915E0726B5A89B05C02F3FE4 -:1040500019F00196A11DB11D3FBFBA2FA92F982FAE -:104060008827BC01CD01620F711D811D911D42E0A9 -:10407000660F771F881F991F4A95D1F70895CF9231 -:10408000DF92EF92FF92CF93DF936B017C010E944E -:104090001A20EB01C114D104E104F10439F4DF91D9 -:1040A000CF91FF90EF90DF90CF9008950E941A205B -:1040B0006C1B7D0B683E734068F381E0C81AD10821 -:1040C000E108F108C851DC4FE5CF789484B58260EF -:1040D00084BD84B5816084BD85B5826085BD85B5AC -:1040E000816085BDEEE6F0E0808181608083E1E85B -:1040F000F0E0108280818260808380818160808393 -:10410000E0E8F0E0808181608083E1EBF0E0808195 -:1041100084608083E0EBF0E0808181608083EAE767 -:10412000F0E08081846080838081826080838081F0 -:10413000816080838081806880831092C1000895AF -:104140008E3008F08E502091050190E4299F900157 -:1041500011248770822B80937C0080917A00806488 -:1041600080937A0080917A0086FDFCCF8091780060 -:104170009091790008951F93CF93DF93182FEB014F -:1041800061E00E944121209739F460E0812FDF91A6 -:10419000CF911F910C947D21CF3FD10511F461E0A7 -:1041A000F5CFE12FF0E0EE5EF94FE491E33031F12D -:1041B00040F4E130B1F0E230E1F0C038D1057CF7F5 -:1041C000E4CFE63029F1E73059F1E430B1F78091DE -:1041D0008000806280938000D0938B00C0938A001F -:1041E00004C084B5806884BDC7BDDF91CF911F91A5 -:1041F000089584B5806284BDC8BDF7CF80918000EA -:10420000806880938000D0938900C0938800EDCFB0 -:104210008091B00080688093B000C093B300E5CF78 -:104220008091B00080628093B000C093B400DDCF75 -:10423000833081F028F4813099F08230A9F008951C -:104240008630A9F08730C9F08430B1F480918000C5 -:104250008F7D03C0809180008F77809380000895C8 -:1042600084B58F7784BD089584B58F7DFBCF809111 -:10427000B0008F778093B00008958091B0008F7D5B -:10428000F9CFCF93DF9390E0FC01EA5DF94F2491E1 -:10429000865C994FFC0184918823C9F090E0880FD7 -:1042A000991FFC01EE59F94FA591B491FC01E85A10 -:1042B000F94FC591D49161110DC09FB7F8948C91BD -:1042C000209582238C938881282328839FBFDF91A8 -:1042D000CF910895623051F49FB7F8943C91822FAA -:1042E000809583238C93E8812E2BEFCF8FB7F894A2 -:1042F000EC912E2B2C938FBFEACF1F93CF93DF939C -:10430000162F282F30E0F901EE5EF94F8491F90164 -:10431000EA5DF94FD491F901E65CF94FC491CC23E1 -:10432000A1F081110E941821EC2FF0E0EE0FFF1F89 -:10433000E85AF94FA591B4918FB7F894EC91111107 -:1043400008C0D095DE23DC938FBFDF91CF911F9102 -:104350000895DE2BF8CFCF93DF93282F30E0F901BB -:10436000EE5EF94F8491F901EA5DF94FD491F901BC -:10437000E65CF94FC491CC23A1F081110E94182171 -:10438000EC2FF0E0EE0FFF1FE25BF94FA591B49127 -:10439000EC91ED2381E090E009F480E0DF91CF9192 -:1043A000089580E090E0FACFCF92DF92EF92FF92F3 -:1043B0000F931F93CF93DF936C01EB017B01E40E0E -:1043C000F51E10E000E0CE15DF0561F06991D60121 -:1043D000ED91FC910190F081E02DC6010995080F47 -:1043E000191FF1CFC801DF91CF911F910F91FF905D -:1043F000EF90DF90CF900895FB0101900020E9F746 -:104400003197AF01461B570BDC01ED91FC91028007 -:10441000F381E02D0994EF92FF920F931F93CF93B6 -:10442000DF937C018B01D0E0C0E0F80164910F5F65 -:104430001F4F662359F0D701ED91FC910190F08157 -:10444000E02DC7010995C80FD91FEFCFCE01DF912D -:10445000CF911F910F91FF90EF9008956115710515 -:1044600011F00C94FC2190E080E00895DC01ED91C6 -:10447000FC910190F081E02D09940F931F93CF934D -:10448000DF93EC016DE00E9436228C016AE0CE01E0 -:104490000E943622800F911FDF91CF911F910F91C3 -:1044A00008950F931F93CF93DF93EC010E940B228B -:1044B0008C01CE010E943D22800F911FDF91CF9190 -:1044C0001F910F9108958F929F92AF92BF92CF92BA -:1044D000DF92EF92FF920F931F93CF93DF93CDB7AD -:1044E000DEB7A1970FB6F894DEBF0FBECDBF6C014B -:1044F000142FE52FCB01022F19A2223008F40AE075 -:104500007E0121E2E20EF11C802E912CB12CA12C17 -:10451000612F7E2FA50194010E94D823029F1019BC -:1045200011241A303CF5105DF70112937F01122F10 -:10453000E32FCA01232B242B252B51F790E080E099 -:10454000E114F10421F0B701C6010E94FC21A196FB -:104550000FB6F894DEBF0FBECDBFDF91CF911F9194 -:104560000F91FF90EF90DF90CF90BF90AF909F9012 -:104570008F900895195CD8CFCF92DF92EF92FF927F -:104580000F931F93CF93DF93EC016A017B012115F9 -:10459000310579F4E881F9810190F081E02D642FF3 -:1045A000DF91CF911F910F91FF90EF90DF90CF900F -:1045B00009942A303105E9F42AE0F7FE1AC06DE2C9 -:1045C0000E9436228C0144275527BA014C195D09F7 -:1045D0006E097F092AE0CE010E946322800F911F9D -:1045E000DF91CF911F910F91FF90EF90DF90CF90CF -:1045F0000895B701A601CE01DF91CF911F910F91D0 -:10460000FF90EF90DF90CF900C9463229A01AB0162 -:10461000770F660B770B0C94BC222115310541F402 -:10462000DC01ED91FC910190F081E02D642F099463 -:104630000C9463229A01AB0170E060E00C940D23AE -:104640004F925F926F927F92AF92BF92CF92DF9222 -:10465000EF92FF920F931F93CF93DF93CDB7DEB707 -:1046600029013A019B01AC01241935094609570972 -:1046700089899A89AB89BC89BC01CD016A197B09FA -:104680008C099D090E949423A801970124193509DA -:10469000460957090E94FA23CA01B9016A0D7B1D18 -:1046A0008C1D9D1DDF91CF911F910F91FF90EF9079 -:1046B000DF90CF90BF90AF907F906F905F904F90C2 -:1046C000089561E08AE00E947D2161E08AE00E9415 -:1046D00041218CB580618CBD8CB580648CBD61E05E -:1046E0008DE00E94412161E08BE00C944121811119 -:1046F00004C08CB580628CBD08958CB58F7DFBCFD6 -:104700009CB5937F892B8CBD08959CB59C7F282FE9 -:104710002370922B9CBD9DB582FB222720F9892F07 -:104720008E7F822B8DBD0895DB018F939F930E9416 -:104730001924BF91AF91A29F800D911DA39F900D51 -:10474000B29F900D11240895991B79E004C0991F20 -:10475000961708F0961B881F7A95C9F780950895DB -:10476000AA1BBB1B51E107C0AA1FBB1FA617B70797 -:1047700010F0A61BB70B881F991F5A95A9F78095B3 -:104780009095BC01CD01089597FB072E16F4009477 -:1047900007D077FD09D00E94B02307FC05D03EF476 -:1047A000909581959F4F0895709561957F4F0895DD -:1047B000A1E21A2EAA1BBB1BFD010DC0AA1FBB1F25 -:1047C000EE1FFF1FA217B307E407F50720F0A21B97 -:1047D000B30BE40BF50B661F771F881F991F1A9404 -:1047E00069F760957095809590959B01AC01BD012E -:1047F000CF010895052E97FB1EF400940E9411240A -:1048000057FD07D00E94D82307FC03D04EF40C9428 -:10481000112450954095309521953F4F4F4F5F4F54 -:10482000089590958095709561957F4F8F4F9F4F1C -:1048300008950E943624A59F900DB49F900DA49FCB -:10484000800D911D112408950024A7FD00942A0FC6 -:10485000301D401D501D601D701D801D901D089550 -:10486000EE0FFF1F0590F491E02D0994A29FB00177 -:10487000B39FC001A39F700D811D1124911DB29F94 -:10488000700D811D1124911D08950E94E12488F06E -:104890009F5798F0B92F9927B751B0F0E1F0660F04 -:1048A000771F881F991F1AF0BA95C9F714C0B13045 -:1048B00091F00E94FB24B1E008950C94FB24672F33 -:1048C000782F8827B85F39F0B93FCCF38695779574 -:1048D0006795B395D9F73EF490958095709561955D -:1048E0007F4F8F4F9F4F0895E89409C097FB3EF488 -:1048F00090958095709561957F4F8F4F9F4F99232D -:10490000A9F0F92F96E9BB279395F69587957795AA -:104910006795B795F111F8CFFAF4BB0F11F460FF6A -:104920001BC06F5F7F4F8F4F9F4F16C0882311F0C2 -:1049300096E911C0772321F09EE8872F762F05C0D6 -:10494000662371F096E8862F70E060E02AF09A9571 -:10495000660F771F881FDAF7880F9695879597F966 -:10496000089597F99F6780E870E060E008959FEFF1 -:1049700080EC089500240A941616170618060906F6 -:10498000089500240A9412161306140605060895C5 -:10499000092E0394000C11F4882352F0BB0F40F44D -:1049A000BF2B11F460FF04C06F5F7F4F8F4F9F4F8D -:1049B000089557FD9058440F551F59F05F3F71F00F -:1049C0004795880F97FB991F61F09F3F79F0879576 -:1049D0000895121613061406551FF2CF4695F1DFFF -:1049E00008C0161617061806991FF1CF869571058F -:1049F000610508940895E894BB2766277727CB01C3 -:104A000097F908950E9415250C94C8240E94BA2491 -:104A100038F00E94C12420F0952311F00C94B124A9 -:104A20000C94B72411240C94FC240E94D92470F314 -:104A3000959FC1F3950F50E0551F629FF001729F43 -:104A4000BB27F00DB11D639FAA27F00DB11DAA1F52 -:104A5000649F6627B00DA11D661F829F2227B00D9F -:104A6000A11D621F739FB00DA11D621F839FA00D2A -:104A7000611D221F749F3327A00D611D231F849F7A -:104A8000600D211D822F762F6A2F11249F575040D1 -:104A90009AF0F1F088234AF0EE0FFF1FBB1F661F4C -:104AA000771F881F91505040A9F79E3F510580F015 -:104AB0000C94B1240C94FC245F3FE4F3983ED4F3AF -:104AC000869577956795B795F795E7959F5FC1F7B9 -:104AD000FE2B880F911D9695879597F908958F92D3 -:104AE0009F92AF92BF92CF92DF92EF92FF92CF93BD -:104AF000DF93EC01688179818A819B816115710561 -:104B00008105910521F464E279ED8BE597E02DE1D3 -:104B100033EF41E050E00E94FA2349015A019B0122 -:104B2000AC01A7EAB1E40E9419246B017C01ACEE50 -:104B3000B4EFA50194010E948328DC01CB018C0D08 -:104B40009D1DAE1DBF1DB7FF03C00197A109B04851 -:104B500088839983AA83BB839F77DF91CF91FF904E -:104B6000EF90DF90CF90BF90AF909F908F9008957F -:104B70000E946F25089580E091E00E946F250895BE -:104B8000B0E0A0E08093000190930101A0930201A6 -:104B9000B09303010895DC0101C06D934150504072 -:104BA000E0F70895AEE0B0E0E8EDF5E20C94962869 -:104BB0000D891E898F89988D26E02C831A8309839D -:104BC00097FF02C080E090E801979E838D83AE013D -:104BD000455E5F4F698D7A8DCE0101960E94022657 -:104BE0004D815E8157FD0AC02F81388542175307DA -:104BF0000CF49A01020F131FF80110822E96E4E0C4 -:104C00000C94B228ABE0B0E0E8E0F6E20C9488281F -:104C10007C013B018A01FC0117821682838181FF9E -:104C2000C8C1CE0101965C01F7019381F30193FDA8 -:104C3000859193FF81913F01882309F453C1853207 -:104C400039F493FD859193FF81913F01853229F4D9 -:104C5000B70190E00E94F227E7CF912C212C312C54 -:104C6000FFE1F31538F08B3211F190F4803209F145 -:104C7000833229F137FC3CC020ED280F2A3050F553 -:104C800036FE20C08AE0989E200D1124922E06C088 -:104C90008D3291F0803371F7689430F8F30193FD11 -:104CA000859193FF81913F018111DACF21C06894F2 -:104CB00031F8689432F8F2CF689433F8EFCF689403 -:104CC00034F8ECCFEAE02E9E200D1124222E6894B9 -:104CD00035F8E4CF8E3229F436FC04C1689436F8F6 -:104CE000DDCF8C3619F4689437F8D8CF8836B1F216 -:104CF000982F9F7D95549330E0F08336A1F1833750 -:104D0000C1F1833509F063C02801F2E04F0E511C58 -:104D1000F801C080D180692D70E036FC02C06FEFD1 -:104D20007FEFC6010E94DC274C01689437F88201AE -:104D30000AC00C5F1F4FFFE3F98388248394912CF2 -:104D40006501E89437F833FE2DC0522C811491048C -:104D500071F5552009F468CFB70180E290E00E9418 -:104D6000F2275A94F6CFF801808189830E5F1F4F96 -:104D7000E4CF2801F2E04F0E511CF801C080D18031 -:104D8000692D70E036FC02C06FEF7FEFC6010E9414 -:104D9000E7274C018201D5CFB70180E290E00E9465 -:104DA000F2272A942814190409F0B0F7CECFF6019F -:104DB00037FC859137FE81916F01B70190E00E9429 -:104DC000F22751105A94F1E08F1A9108BFCF843620 -:104DD00019F0893609F077C0F80137FE6BC06081A1 -:104DE0007181828193810C5F1F4FF32DFF763F2EDF -:104DF00097FF09C090958095709561957F4F8F4F73 -:104E00009F4F689437F82AE030E0A5010E942228DD -:104E1000C82ECA188C2C432C36FE0CC0E89440F8DF -:104E2000C91440F434FE05C032FC03C0F32DFE7EED -:104E30004F2E892C44FE95C0FE01EC0DF11D8081A2 -:104E4000803309F087C0242D297E422E842D88705E -:104E5000582E43FC95C040FE8FC09C2C821418F441 -:104E60002C0C922C981844FE91C0B70180E390E07E -:104E70000E94F22742FE09C088E790E041FE02C08E -:104E800088E590E0B7010E94F227C91408F48AC0AF -:104E9000CA94D12C9FEFC91AD90ACA0CDB1CF6019F -:104EA00082916F01B70190E00E94F227AC14BD041B -:104EB000B1F74FCF60817181072E000C880B990BE1 -:104EC0000E5F1F4F92CFD32CE894D4F82AE030E045 -:104ED000853739F1232D297FD22E8F3601F148F401 -:104EE0008835A9F0F701868197812B96E2E10C9431 -:104EF000A428803749F08837A9F7D4FE02C0689407 -:104F0000D2F820E130E00DC06894D4F8F6CF34FE3A -:104F100003C0822F8660D82E20E132E002C028E054 -:104F200030E0F801D7FE0FC06081718182819381EA -:104F30000C5F1F4FA5010E942228C82ECA183D2CC5 -:104F4000E89437F867CF6081718190E080E00E5F70 -:104F50001F4FF0CF42FC02C0839478CF8394839498 -:104F600075CF842D867809F471CFF6CFB70180E232 -:104F700090E00E94F22783948214C0F3512C73CFE7 -:104F8000522C5818821408F46ECFF8CF842D8678EE -:104F900009F47BCF8BE241FE80E247FC8DE2B70152 -:104FA00090E071CFB70180E390E00E94F2279A94DD -:104FB0006CCF8FEF9FEF99CFFC010590615070404F -:104FC0000110D8F7809590958E0F9F1F0895FC01D2 -:104FD0006150704001900110D8F7809590958E0F28 -:104FE0009F1F08950F931F93CF93DF93182F092FBF -:104FF000EB018B8181FD09C01FEF0FEF812F902FF7 -:10500000DF91CF911F910F91089582FF14C02E81DF -:105010003F818C819D81281739073CF4E881F98113 -:10502000CF0101969983888310838E819F81019699 -:105030009F838E83E3CFE885F985812F0995892B9E -:10504000A1F3DACFFA01AA27283051F1203181F1FA -:10505000E8946F936E7F6E5F7F4F8F4F9F4FAF4F80 -:10506000B1E03ED0B4E03CD0670F781F891F9A1F93 -:10507000A11D680F791F8A1F911DA11D6A0F711D47 -:10508000811D911DA11D20D009F468943F912AE053 -:10509000269F11243019305D3193DEF6CF0108953B -:1050A000462F4770405D4193B3E00FD0C9F7F6CF6C -:1050B000462F4F70405D4A3318F0495D31FD405234 -:1050C000419302D0A9F7EACFB4E0A69597958795CA -:1050D00077956795BA95C9F70097610571050895A9 -:1050E0009B01AC010A2E0694579547953795279555 -:1050F000BA95C9F7620F731F841F951FA01D0895ED -:10510000B7FF0C9419240E941924821B930B089555 -:105110002F923F924F925F926F927F928F929F92C7 -:10512000AF92BF92CF92DF92EF92FF920F931F93B5 -:10513000CF93DF93CDB7DEB7CA1BDB0B0FB6F89466 -:10514000DEBF0FBECDBF09942A88398848885F84A6 -:105150006E847D848C849B84AA84B984C884DF8017 -:10516000EE80FD800C811B81AA81B981CE0FD11DFB -:105170000FB6F894DEBF0FBECDBFED01089513E06A -:10518000C8E3D3E004C0FE010E9430242196C93355 -:08519000D107C9F7F894FFCF25 -:1051980001000000010148503D257500573D256478 -:1051A80000473D256400463D256400FA00000003E1 -:1051B800000400004255494C440041545441434BBB -:1051C800004352454154450024012A0131010100A0 -:1051D800000000190064000000000000A716D42198 -:0851E8004C4F41444552000008 -:04000003000006C62D +:101270003C8140E05E81B601C7010E9414072696BA +:101280000FB6F894DEBF0FBECDBFDF91CF911F9197 +:101290000F91FF90EF90DF90CF90BF909F908F9035 +:1012A0000895CF92DF92EF92FF920F931F93CF9307 +:1012B000DF9300D000D000D0CDB7DEB77C016A014B +:1012C0000E94200889019A01AB01B601C7010E9462 +:1012D000140726960FB6F894DEBF0FBECDBFDF9180 +:1012E000CF911F910F91FF90EF90DF90CF900895D5 +:1012F0000F931F93CF93DF93EC01CF55DD4F2881E0 +:101300008C0100561D4F253018F5FC01E256FD4FAB +:1013100020812F3F81F0FC0134E12302E00DF11D1B +:10132000112421E024A3FC01E356FD4F20838E55B8 +:101330009D4FFC011082188281E09881953008F45D +:1013400080E0F8018083DF91CF911F910F91089584 +:10135000F8012081222381F3FC0130E020E044A148 +:101360002F5F3F4F4423E1F044E1429FB001439F90 +:10137000700D1124680F791FFC01ED55FD4F10828F +:1013800031972081222339F02230B1F650E040E03D +:101390000E94E708D1CF42E050E00E945109CCCF33 +:1013A000749620323105D9F6C7CFCF93DF93EC0185 +:1013B000C356DD4F28812223D9F0DC01A156BD4F51 +:1013C0002C912530C0F0FC019C0120583D4F44A1D8 +:1013D000411114A27496E217F307C9F71C92188200 +:1013E000FC01E056FD4F10828F559D4FFC0110828D +:1013F000DF91CF9108952F5F2C93FACFCF92DF9298 +:10140000EF92FF920F931F93CF93DF9300D000D002 +:1014100000D0CDB7DEB78C01FC01E356FD4F8081D3 +:10142000882309F1C8010E94200829833A834B834D +:101430005C836D837E83F801680120E8C21A2DEF7A +:10144000D20A84A19F012C5E3F4F7901882339F095 +:101450004B815C8169817A81C9010E94820EF7010A +:10146000EC14FD0471F7F801E156FD4F1082269649 +:101470000FB6F894DEBF0FBECDBFDF91CF911F91A5 +:101480000F91FF90EF90DF90CF900895EF92FF9231 +:101490000F931F93CF93DF93FC01E056FD4F208104 +:1014A000222349F1EC017C0180E8E81A8DEFF80A6B +:1014B0008E010E551D4F8CA164968823C9F0CE0174 +:1014C0000E94B00FF80140819FEF940F282F30E069 +:1014D000491771F0993008F097E0B901092E02C060 +:1014E000759567950A94E2F760FF0CC0F801908348 +:1014F000CE15DF0501F7DF91CF911F910F91FF907E +:10150000EF9008959150E4CFEF92FF920F931F93C5 +:10151000CF93DF93FC01E056FD4F2081222349F158 +:10152000EC017C0180E8E81A8DEFF80A8E010E5577 +:101530001D4F8CA164968823C9F0CE010E94B00F84 +:10154000F801408191E0940F282F30E0491771F0A5 +:10155000983008F090E0B901092E02C075956795A2 +:101560000A94E2F760FF0CC0F8019083CE15DF0506 +:1015700001F7DF91CF911F910F91FF90EF900895A8 +:101580009F5FE4CF0F931F93CF93DF93EC01FC0198 +:10159000E056FD4F80818823A9F1FE0190E080E0B4 +:1015A00024A10196222351F144E1489F9001499FD3 +:1015B000300D1124CE01820F931F0E94B00F90E0D6 +:1015C0008E010E551D4FF801208102C0959587951B +:1015D0002A95E2F780FD03C0CE010E94840AF8013B +:1015E000808190E00E94B80F2CE248E268E372E04C +:1015F000DF91CF911F910F910C9468057496803202 +:10160000910571F6DF91CF911F910F9108958F92FF +:101610009F92AF92BF92CF92DF92EF92FF920F9381 +:101620001F93CF93DF93EC018C010C5E1F4FF12CC5 +:10163000E12C912C6C0182E6C81A8DEFD80A5E016C +:10164000EBE6AE1AEDEFBE0AF80187858823D9F0E4 +:10165000F60180818F3F39F0082E000C990B41E094 +:101660008E159F0509F040E0B501C8010E945E0D8E +:10167000F8018088882039F0911005C06085CE017E +:101680000E946506982CFFEFEF1AFF0A0C5E1F4FB1 +:1016900080E2E816F104C1F68881882339F19920A7 +:1016A00099F001E023E04AE06CE284E40E94C10585 +:1016B000FE01EF55FD4F4081442331F0440F23E0FC +:1016C0006CE284E40E94F005CE010E94C20ACE01C1 +:1016D000DF91CF911F910F91FF90EF90DF90CF900E +:1016E000BF90AF909F908F900C94A006DF91CF9108 +:1016F0001F910F91FF90EF90DF90CF90BF90AF9030 +:101700009F908F900895CF93DF93EC0184E090E059 +:101710000E943806882329F0CE01DF91CF910C94E6 +:10172000D60884E090E00E941F06882329F0CE01AD +:10173000DF91CF910C94780985E090E00E94380603 +:10174000882329F0CE01DF91CF910C94D50985E053 +:1017500090E00E941F06882329F0CE01DF91CF91EF +:101760000C94FE0990E080E00E941F06882329F077 +:10177000CE01DF91CF910C94460A82E090E00E9466 +:101780001F06882329F0CE01DF91CF910C94840AA3 +:10179000DF91CF9108950F931F93CF93DF93EC01C7 +:1017A0008C010B561D4FFC01E056FD4F6081C801B6 +:1017B0000E94D30CC8010E94350CCE010E944C0837 +:1017C00060E270E0CE0144960E948A0ECE01DF9165 +:1017D000CF911F910F910C94830BFC011182108209 +:1017E000138212821482158283E086831782089501 +:1017F000CF93DF93CDB7DEB72C970FB6F894DEBF4B +:101800000FBECDBF1C861B86FC0122813381420F97 +:10181000531F80819181680F791F78876F835A8762 +:10182000498786E0FE013796DE01119601900D9200 +:101830008A95E1F729813A814B815C816D817E81B6 +:1018400080E090E02C960FB6F894DEBF0FBECDBFBF +:10185000DF91CF910895FC019081490FDB014C93FA +:101860008281280F11962C930895CF93DF93EC017A +:101870008F81882319F01C821D821BC08E818330CA +:10188000D8F48F5F8E832C8188819981820F911D7E +:1018900027FD9A9597FF80C0998388832D818A813F +:1018A0009B81820F911D27FD9A9597FF79C09B839D +:1018B0008A83DF91CF9108951E820E943B06882380 +:1018C00069F190E080E00E943806882329F08C813D +:1018D00087FF47C08E5F8C8381E090E00E943806CE +:1018E000882329F08D8187FF41C08E5F8D8383E03F +:1018F00090E00E943806882331F08D8118160CF094 +:101900003AC082508D8382E090E00E94380688239E +:1019100029F08C8118169CF582508C8390E080E031 +:101920000E94380681110BC082E090E00E943806C8 +:10193000811105C08C81181634F581508C8381E0AB +:1019400090E00E94380681119ECF83E090E00E94D3 +:101950003806811198CF8D811816CCF481508D8373 +:1019600092CF85300CF0B8CF8F5FB5CF85300CF0BB +:10197000BECF8F5FBBCF8C3F34F28150C3CF8C3F43 +:101980006CF28150CACF8823D1F28F5FD7CF8823E2 +:1019900009F479CF8F5FE3CF198218821C827ECF42 +:1019A0001B821A8269CFFC0167830895FF920F930F +:1019B0001F93CF93DF9303E315E08BEE91E0F801E3 +:1019C000908787830E945B05F80182838BEE91E00C +:1019D0000E945E05F801838315821482FF24F3942C +:1019E000F682CDEFD4E085EF91E098878F830E9457 +:1019F0005B058A8385EF91E00E945E058B831D82E3 +:101A00001C82FE8281EA91E0F801928F818F0E9410 +:101A10005B05F801848B81EA91E00E945E05F80184 +:101A2000858B178A168AF08E8DE091E094A783A7A4 +:101A30000E945B05F80186A38DE091E00E945E059F +:101A4000F80187A311A610A6F2A687E591E09A8F68 +:101A5000898F0E945B058C8B87E591E00E945E0573 +:101A60008D8B1F8A1E8A13E0188F83EC90E09CA751 +:101A70008BA70E945B058EA383EC90E00E945E051D +:101A80008FA319A618A61AA7DF91CF911F910F91C6 +:101A9000FF90089599E0899FF0011124ED5CFA4FC1 +:101AA000878190850C945B0599E0899FF001112452 +:101AB000ED5CFA4F878190850C945E058F929F9222 +:101AC000AF92BF92CF92DF92EF92FF920F931F934C +:101AD000CF93DF9300D000D000D0CDB7DEB77C012C +:101AE0006B01842EDC011F968C911F97882309F4CB +:101AF00080C019969C90E92DF0E0B9E09B9E800192 +:101B00001124D7011D968C911D978111B3C01E968B +:101B10008C91882309F480C003501B4FF801148274 +:101B20001582882351F0D70153968C9153978F5F7C +:101B3000853008F074C053968C93D7011A968D9116 +:101B40009C911B978130910509F48AC008F484C0E8 +:101B50008230910509F46AC0039709F473C0F70154 +:101B60002281338140815181B801C6010E942B0C32 +:101B7000C8010E942D05811005C0D70150968C9197 +:101B80008823B9F1F7014281538160817181C601D7 +:101B90000E94F80B29833A834B835C83C980DA80E7 +:101BA000AB80BC80D70150968C9101E0811101C0BF +:101BB00003E0892D0E944A0D182F892D0E94540D93 +:101BC000F7019585992309F477C0282F2695269546 +:101BD000280F412F46954695410F86958695869507 +:101BE0006A2D681B1695169516958C2D811B0E94E3 +:101BF000C10526960FB6F894DEBF0FBECDBFDF91AC +:101C0000CF911F910F91FF90EF90DF90CF90BF90F9 +:101C1000AF909F908F9008950D5C1A4F7FCFF70182 +:101C2000138A848591E08927848787CF82E0F80131 +:101C30008583D7011C968C91882309F490CF83E08B +:101C400085838DCFF7018485882309F488CF81E0CF +:101C5000D80115968C9383CF81E0F8018483E8CF77 +:101C600081E0F80184831C968C91882309F477CF56 +:101C700082E0E6CFC80183509B4F5C01EE0FFF1F4F +:101C8000E95EFE4F818112962D913C911397280FAA +:101C9000311D87FD3A9580814D915C91480F511D12 +:101CA00087FD5A95B501C6010E942B0CC5010E9403 +:101CB0002D050D5C1A4F53CF682F66956A0D7B2D4D +:101CC000711D812F8695202F412F8C0D9D2D911DEB +:101CD00026960FB6F894DEBF0FBECDBFDF91CF9131 +:101CE0001F910F91FF90EF90DF90CF90BF90AF903A +:101CF0009F908F900C949505E82FF0E0E75BFE4FE6 +:101D000080810895FC01758364835783468381E055 +:101D1000868708952F923F924F925F926F927F92A3 +:101D20008F929F92AF92BF92CF92DF92EF92FF92EB +:101D30000F931F93CF93DF93CDB7DEB762970FB6A4 +:101D4000F894DEBF0FBECDBF882E592E7E876D87DB +:101D5000C82ED92E312C212C8D859E85281639062A +:101D6000C9F462960FB6F894DEBF0FBECDBFDF9107 +:101D7000CF911F910F91FF90EF90DF90CF90BF9088 +:101D8000AF909F908F907F906F905F904F903F901B +:101D90002F900895D6011F968C911F97882309F4E0 +:101DA000D8C01E96BC901E97BB2009F4D2C0ED91FE +:101DB000FC91119719968C91A82FB0E0AD5BBE4FA6 +:101DC0004C90842D90E0D60114966D917C911597DE +:101DD0009F01281B390B6217730788F51B961C920D +:101DE0001E921A97942C9194D60112964D915C9163 +:101DF000139716962D913C91DA01A81BB90B2A175F +:101E00003B0760F522E030E0F601338722874194FA +:101E1000D6011E96BC92BB2009F49BC0A82CB52C01 +:101E2000712C612C292D092C000C330B388B2F873A +:101E3000842D042C000C990B9A8B898B28C09F0150 +:101E4000280F391F912C2617370770F621E030E054 +:101E50001B963C932E931A97942CC6CF840F951FF4 +:101E60008217930740F4E3E0F0E0D6011B96FC9361 +:101E7000EE931A97CDCF9E2E961A442E421AB12C6D +:101E8000C7CFBFEF6B1A7B0AE4E1AE0EB11CAD8584 +:101E9000BE856A167B0609F448C0F60180819181EF +:101EA0002F853889820F931F98878F838281938132 +:101EB000A989BA898A0F9B1F9A87898781850E9481 +:101EC0004A0D8B87F60181850E94540D8C87D501C0 +:101ED0001F968C911F978823A1F22614370489F24C +:101EE0008D919C9111979A8389839C838B831996FA +:101EF0008C910E944A0D8D83F50181850E94540DBD +:101F00008E83E980FA800B811C812D81382F4F81CF +:101F1000588569857A858B859C850E94AC048823C9 +:101F200009F4AFCFD6011E961C92F6018685882350 +:101F300081F080819181890D911D97FC9A95918303 +:101F4000808382819381840D911D47FC9A959383B0 +:101F50008283FFEF2F1A3F0A24E1C20ED11CFCCE70 +:101F6000DC011996EC91F0E0EF5DFE4F8081089561 +:101F7000880F991FFC01E35CFE4F808191810895D9 +:101F8000BC016F5F7F4F80E1FB0111928A95E9F7F9 +:101F90008EE591E00C94F51C43E06FEF71E08EE567 +:101FA00091E00E945819811106C08EEE91E00E94C6 +:101FB000C00F0C94C9030895FC0188E0808389E078 +:101FC000818387E0828386E0838384E0848382E068 +:101FD000858381E186830895FF920F931F93CF93AA +:101FE000DF93EC018C01095F1F4FFF24FA9462E03C +:101FF00088810E94DF2188810E9449222F81892BBC +:1020000081F42F5F2F8360E088810E94DF21219679 +:10201000C017D10761F7DF91CF911F910F91FF900A +:1020200008952223A1F32F3F11F41F82ECCFFF82EA +:10203000EACFFC01E60FF11D81E09781913009F0B4 +:1020400080E00895FC01E60FF11D81E097819F3F3C +:1020500009F080E00895860F911DFC0187814230D0 +:1020600038F49FEF980F81E09E3F50F080E008C069 +:102070008F3FE1F3642F0E94422481E09130B1F759 +:102080000895860F911DFC0187818F3F09F480E040 +:1020900008958EBD0DB407FEFDCF8EB50895DC0109 +:1020A000643508F042C0403308F03FC090968C91F0 +:1020B0009097E62F062E000CFF0B242F25952595D3 +:1020C000259594E52902E00DF11D1124E759FA4FF9 +:1020D0002081342F37708230A1F4822F90E0032EBC +:1020E00002C0959587950A94E2F7809581708823C0 +:1020F00099F081E090E001C0880F3A95EAF7822BD1 +:1021000013C08330A1F71C968C916427062E000C17 +:10211000770B682760FDEDCF81E090E001C0880F6C +:102120003A95EAF780958223808308951F93CF9391 +:10213000DF93EC01162FF89460E08F850E941B223C +:10214000888918161CF460E00E941B22812F0E94CF +:102150004910888918161CF461E00E941B227894AB +:10216000DF91CF911F910895E9E6F5E028EF31E086 +:10217000DF01A9011D9241505040E1F7DC011996A1 +:102180001C9219971A961C92089548EF51E06FEF30 +:102190007FEF89E695E00C946926CF92DF92EF926B +:1021A000FF920F931F93CF93DF93EC018C858F5F8A +:1021B0008C8789E6E82E85E0F82E10E0612F6064B8 +:1021C000CE010E94961060E8CE010E94961061E058 +:1021D0008F850E941B22888918161CF460E00E94DB +:1021E0001B22670104E5F60181916F010E944910ED +:1021F0000150C9F7888918161CF461E00E941B225F +:102200001F5FF4E5EF0EF11C1630C1F660E4CE015D +:10221000DF91CF911F910F91FF90EF90DF90CF90C2 +:102220000C949610FC0160A361A30895FC0160A3C7 +:1022300041A30895EF92FF920F931F93CF93DF93E3 +:102240008C01D62FF42EE22EC0E0CE1544F44F2D93 +:102250004C0F6D2FC8010E944F10CF5FF6CFDF915A +:10226000CF911F910F91FF90EF900895EF92FF9201 +:102270000F931F93CF93DF938C01F62ED42FE22E72 +:10228000C0E0CE1544F46F2D6C0F4D2FC8010E9495 +:102290004F10CF5FF6CFDF91CF911F910F91FF903D +:1022A000EF900895EF92FF920F931F93CF93DF93D8 +:1022B0007C01162FD42FC22F0E9436114FEF400FF2 +:1022C0004D0F2C2F612FC7010E943611202F4D2F4B +:1022D000612FC7010E941A116FEF6C0F610F202F41 +:1022E0004D2FC701DF91CF911F910F91FF90EF907C +:1022F0000C941A11DF92EF92FF920F931F93CF93DA +:10230000DF937C01D62FD22EC42F002E000C110B90 +:10231000040F111D47FD1A958C2F0C2E000C990BE4 +:102320008017910744F42D2D4C2F6D2FC7010E946B +:102330003611CF5FF1CFDF91CF911F910F91FF90B9 +:10234000EF90DF9008959F92AF92BF92CF92DF926D +:10235000EF92FF920F931F93CF93DF938C01E62EA2 +:10236000F42EC22F81E0D82ED21AC22EC194CC0CEA +:10237000422F4F0DC8010E944F104F2D4C1B6E2D48 +:10238000C8010E944F106C2F6E0D4F2DC8010E9486 +:102390004F106E2D6C1B4F2DC8010E944F10D0E0C6 +:1023A000DC170CF044C0D7FC04C0C150C394C394E4 +:1023B000DC0CDF5F8D2F880F8F5FD80E9E2C9D0E5B +:1023C000BF2CBC0E4B2D692DC8010E944F10AE2CA6 +:1023D000AD1A4B2D6A2DC8010E944F10BF2CBC1A9C +:1023E0004B2D692DC8010E944F104B2D6A2DC8013D +:1023F0000E944F10BF2CBD0E4B2DAE2CAC0E6A2D83 +:10240000C8010E944F104B2DBE2CBC1A6B2DC80169 +:102410000E944F109F2C9D1A492D6A2DC8010E94C1 +:102420004F10492D6B2DC8010E944F10B9CFDF917D +:10243000CF911F910F91FF90EF90DF90CF90BF90C1 +:10244000AF909F9008958F929F92AF92BF92CF923C +:10245000DF92EF92FF920F931F93CF93DF937C0154 +:10246000162FD42EC22F81E0C82EC21AB22EB194DC +:10247000BB0CD0E0802F8470A82E802F8270982E05 +:10248000802F8870882E0170DC170CF04DC0C7FCBF +:1024900004C0C150B394B394CB0CDF5F8D2F880F71 +:1024A0008F5FC80EAA2071F04D2D4C0F612F6D0F5C +:1024B000C7010E944F104D2D4D0F6C2F610FC701AA +:1024C0000E944F10992071F04D2D4C1B612F6D0F04 +:1024D000C7010E944F104D2D4D1B6C2F610FC7017E +:1024E0000E944F10882071F04D2D4D0F612F6C1BF5 +:1024F000C7010E944F104D2D4C0F612F6D1BC7015E +:102500000E944F10002309F4BFCF4D2D4D1B612FAA +:102510006C1BC7010E944F104D2D4C1B612F6D1B72 +:10252000C7010E944F10B0CFDF91CF911F910F9143 +:10253000FF90EF90DF90CF90BF90AF909F908F90E3 +:1025400008957F928F929F92AF92BF92CF92DF9227 +:10255000EF92FF920F931F93CF93DF935C01C62EF0 +:10256000942EC22F11E0121BD22ED194DD0C83E0E9 +:10257000F82ED0E0802F8170782E882483948E0CE2 +:102580000270DC17ACF517FD04C0C150D394D3948E +:102590001D0DDF5F1F0D772099F02C2F220F280DC6 +:1025A000492D4C1B6C2D6D0FC5010E941A112E2D4B +:1025B0002F0D492D4D1B6C2F6C0DC5010E941A115A +:1025C000002399F02C2F220F280D492D4C1B6C2D28 +:1025D0006D1BC5010E941A112E2D2F0D492D4D1B6B +:1025E0006C2D6C1BC5010E941A11F394F394C9CF92 +:1025F000DF91CF911F910F91FF90EF90DF90CF90DF +:10260000BF90AF909F908F907F9008959F92AF92D0 +:10261000BF92CF92DF92EF92FF920F931F93CF93CF +:10262000DF93EC01B62E142FD22EAE2CAA0C922ED4 +:102630009A18CE2CC60E292D6C2D0E943611FF241F +:10264000FA94F00EF10E292D4F2D6C2DCE010E9423 +:1026500036110A191E0D202F412F6B2DCE010E941D +:102660001A11DB0C6FEF6D0D202F412FCE010E9450 +:102670001A1101E02E2D412F6C2DCE010E94231244 +:102680008E2D8095D80E02E02E2D412F6D2DCE017E +:102690000E942312FE1804E02E2D4F2D6D2DCE0129 +:1026A0000E94231208E02E2D4F2D6C2DCE010E948A +:1026B0002312DF91CF911F910F91FF90EF90DF9048 +:1026C000CF90BF90AF909F900895AF92BF92CF925E +:1026D000DF92EF92FF920F931F93CF93DF936C01E2 +:1026E000C62FF42EA22ED02F1E2DEE0CB12EB60E1C +:1026F0002E196B2D0E947A11D150DE19F10E6FEF59 +:102700006C0F6A0D611BED2E01E0212F4F2DC601CC +:102710000E94A11202E0212F4F2D6B2DC6010E94B5 +:10272000A112DF91CF911F910F91FF90EF90DF9059 +:10273000CF90BF90AF9008952F923F925F926F928B +:102740007F928F929F92AF92BF92CF92DF92EF9241 +:10275000FF920F931F93CF93DF93EC01F901E49065 +:102760003196849164350CF015C10E2C000CFF08D5 +:10277000062F062E000C110BF701E00FF11F1E169D +:102780001F060CF007C140330CF004C1A82FC42E63 +:10279000042E000CDD085601A80EB11C87FDBA946A +:1027A0001A141B040CF0F6C02E5F3F4F570197E040 +:1027B000A90EB11CB7FE04C05701BEE0AB0EB11CA0 +:1027C000B3E0B594A794BA95E1F747FF0AC0A42FE8 +:1027D000A80FAC9CC001AD9C900D1124281B390B97 +:1027E00040E08A2F0A2E000C990B840F911D47FDA3 +:1027F0009A95C19714F0A0E3A41BF8A067FD60E0D0 +:10280000E535F10514F0E4E5F0E09E2FCC85C42712 +:10281000C62E062E000CDD08F601E01BF10B8F0121 +:102820004F01F7E08F229924E0E8F0E002C0F5952F +:10283000E7958A94E2F77E2F17FF02C0095F1F4FCA +:10284000F3E015950795FA95E1F7200F311F542F06 +:10285000577081E001C0880F5A95EAF74595459574 +:102860004595F601B4E54B02E00DF11D1124AF01D1 +:1028700047595A4FD0E02A2EAA0F3308EE24E3948A +:10288000BB24D21513040CF085C0F9015490F1E07B +:10289000FF121AC06901962E8A01E72F991608F0D7 +:1028A00057C08E2E852021F0D8018C90882A8C92DA +:1028B000E69531F4BFEFCB1ADB0AF6015490E0E85D +:1028C00093940F5F1F4FEACFF1101CC0782E7094C5 +:1028D0006901962E8A01E72F991608F039C08E2ECD +:1028E000852021F0D8018C9087208C92E69531F4D8 +:1028F000BFEFCB1ADB0AF6015490E0E893940F5F28 +:102900001F4FEACFF3E0FF122CC0782E70946901BC +:10291000862E8A01972E8916D0F4E92DE52141F003 +:10292000D801EC916C2E682460FE0FC0E82BEC936C +:10293000969439F4BFEFCB1ADB0AF6015490E0E825 +:102940009E2E83940F5F1F4FE6CFE721F0CFCE2559 +:10295000880F19F44C5A5F4F81E0DF5F2A0D3B1D51 +:1029600090CF6901962E8A01E72F991688F78E2E4F +:10297000852021F0D8018C9088268C92E69531F440 +:10298000BFEFCB1ADB0AF6015490E0E893940F5F97 +:102990001F4FEBCFDF91CF911F910F91FF90EF90E1 +:1029A000DF90CF90BF90AF909F908F907F906F906F +:1029B0005F903F902F9008952F923F924F925F9299 +:1029C0006F927F928F929F92AF92BF92CF92DF923F +:1029D000EF92FF920F931F93CF93DF9300D000D01D +:1029E00000D01F92CDB7DEB74C01462E342E6901C0 +:1029F0008E2D01111DC0E1101BC0C40127960FB61A +:102A0000F894DEBF0FBECDBFDF91CF911F910F9124 +:102A1000FF90EF90DF90CF90BF90AF909F908F90FE +:102A20007F906F905F904F903F902F900C949C13ED +:102A3000F60154903196E490A52CB12C9501295FB4 +:102A40003F4FA90133E0559547953A95E1F75B83F0 +:102A50004A830370F12CEE2DF0E0FD83EC835A9451 +:102A60001FEF1E0D2F2D0F2C000C330B2A153B05CD +:102A70000CF070C0F982F7FE03C0F7E0FF0DF98398 +:102A8000298125952595259529839F2D977897FF51 +:102A900003C09150986F9F5F20E8622E712C02C096 +:102AA000759467949A95E2F7212C4981042E000CC5 +:102AB000550B4E5F5F4F5F834E83222D022C000C1F +:102AC000330BEC81FD812E173F070CF041C04A818A +:102AD0005B81429FF001439FF00D529FF00D112446 +:102AE0002E813F81E20FF31FEC0DFD1DE491F0E01C +:102AF000E621F721EF2B41F1023069F0612F6219D5 +:102B00004F2D033061F0452D4F19622D013039F002 +:102B1000422D6F2D04C0652D6F19412F4219882356 +:102B2000A9F0382F3370398380FF03C0552D561B11 +:102B3000652F81FF03C08E2D841B482F640D430D2C +:102B4000C4010E944F1089812394B7CF1982F6CF18 +:102B5000F39488CF27960FB6F894DEBF0FBECDBF93 +:102B6000DF91CF911F910F91FF90EF90DF90CF9069 +:102B7000BF90AF909F908F907F906F905F904F909D +:102B80003F902F900895DC01FB0184918F5F149694 +:102B90008C9314973196E491EF5F1596EC9315970B +:102BA0006E5F7F4F5F967C936E935E970895EF9272 +:102BB0000F93CF93DF93EC014E876D872F87E98AC0 +:102BC000088B81E0888788A319A28F836AEB73E062 +:102BD000CE010E94C3150E94FF2381E00E941524AC +:102BE00085E00E9423248CE00E941E2461E08E85F3 +:102BF0000E94DF2161E08D850E94DF2161E08F85E9 +:102C00000E94DF21898918161CF461E00E94DF21EF +:102C1000888918161CF461E00E94DF218989181642 +:102C20006CF460E00E941B226AE070E080E090E0BB +:102C30000E94DD2061E089890E941B228D85082E7B +:102C4000000C990BFC01E253F94FE491F0E0EE0F18 +:102C5000FF1FE451F94F259134913D8B2C8BFC01E2 +:102C6000E654F94FE491EB8F8E85082E000C990BFA +:102C7000FC01E253F94FE491F0E0EE0FFF1FE45145 +:102C8000F94F259134913B8B2A8BFC01E654F94F87 +:102C9000E491EA8F8889082E000C990BFC01E2531D +:102CA000F94FE491F0E0EE0FFF1FE451F94F259149 +:102CB00034913F8B2E8BFC01E654F94FE491EC8F5D +:102CC0008F85082E000C990BFC01E253F94FE4911B +:102CD000F0E0EE0FFF1FE451F94F25913491398F49 +:102CE000288FFC01E654F94FE491ED8F61E2CE01AB +:102CF0000E94961064E1CE010E9496108B8587FF9A +:102D000002C08FE78B876B856068CE010E949610AA +:102D100060E2CE010E9496106CE0CE010E949610F7 +:102D2000CE01DF91CF910F91EF900C94CD104F9287 +:102D30005F926F927F928F929F92AF92BF92CF924B +:102D4000DF92EF92FF920F931F93CF93DF93EC01EB +:102D5000862EF42E102F83E586170CF485C08FE2A3 +:102D600084170CF481C04C814150550B049FC00165 +:102D7000059F900D1124860F911D67FD9A951816D9 +:102D800019060CF071C03D818F2D0F2C000C990B92 +:102D9000039F800D911D1124181619060CF064C0B4 +:102DA00078A0E62E912CC22ED12C292D092C000CB6 +:102DB000330B8C8190E0281739070CF054C0019731 +:102DC000E0E02817390771F0C89EF001C99EF00DA8 +:102DD000D89EF00D11242E0F3F1FEE8DFF8DE20FB8 +:102DE000F31FE4915F2C612C492C480C2D81862D1A +:102DF000062C000C990B2817190691F18CF1AE2EB8 +:102E0000B12CE0FF16C0113061F4462D4F0D642D3A +:102E1000CE010E944F10F501F595E7956394510E90 +:102E2000E5CF012F212F452D6E2DCE010E947A1165 +:102E3000F2CF89A198A1891771F388A3113041F4C9 +:102E4000462D4F0D642DCE010E944F1078A2E3CF86 +:102E5000012F212F452D6E2DCE010E947A11F6CF24 +:102E60009394E10EA2CF78A2DF91CF911F910F91A1 +:102E7000FF90EF90DF90CF90BF90AF909F908F909A +:102E80007F906F905F904F9008950F93CF93DF9353 +:102E9000EC01262F6A3049F428859D818A85299F77 +:102EA000800D11248A8719861DC06D30D9F00885E0 +:102EB0004A8569850E94971628853C818985239FCC +:102EC000800D112489879F81992361F0082E000CC1 +:102ED000990B44E550E0239F4019510911244817EC +:102EE0005907DCF281E090E0DF91CF910F910895D6 +:102EF000FC01EC57FF4F718360838A579F4F445FFB +:102F0000FC01408308956F927F928F929F92AF92BF +:102F1000BF92CF92DF92EF920F93CF93DF934C014A +:102F20005C0186E8A80EB11CD5018C91882309F4B8 +:102F30004AC0CCE0C81B8C3008F0C0E0F401EA5A6B +:102F4000FF4F81E080836401BEE4CB0ED11C60E0C2 +:102F5000C6010E9412113401E3E56E0E711CD3010B +:102F60008C9103E0080FDDE24D2F481B4C0F83E0EE +:102F7000E82E24E560E0C6010E94651361E0C60109 +:102F80000E941211F301808103E0080F4D2F481BAE +:102F90004C0F24E560E0C6010E940613F401E95AD3 +:102FA000FF4F84E080833196D3018C91C81BC15DB3 +:102FB000C083BC9660817181C6010E94A922F5017F +:102FC000808181508083DF91CF910F91EF90DF90CE +:102FD000CF90BF90AF909F908F907F906F9008950B +:102FE000CF92DF92FF920F931F93CF93DF93EC0169 +:102FF0008C8D9D8D892B01F18E01025B1F4F40E06E +:1030000061E0C8010E941611FE01E95AFF4FDE017E +:10301000AE5ABF4F9C9185E5891B80833196108203 +:10302000698D613009F46DC078F0888D653008F0E5 +:1030300082C06B5F811175C0DF91CF911F910F919D +:10304000FF90DF90CF900895CE0185960E944A1F91 +:1030500081E0FE01EA5AFF4F80836AEB73E0C8010A +:103060000E94C3151D8E1C8EFE01EC5AFF4F10826C +:1030700088EAF82E6E018AE0C80ED11CCE010E94AB +:10308000A0188823D9F369EA75E0C8010E94A92233 +:103090006A8D7B8D4AE050E0C8010E94B82364E944 +:1030A00075E0C8010E94A9226F2D62956F7070E0D3 +:1030B0004AE050E0C8010E94A42369E875E0C80115 +:1030C0000E94A92264E0C6010E9419108111B4CFA8 +:1030D000FA94F110D3CF60E0CE010E94BD1F83B7F8 +:1030E000817F846083BF83B7816083BF83B7816042 +:1030F00083BF889583B78E7F83BF83B78E7F83BF5F +:10310000BDCFCF58DF4F88819981AA81BB818F7055 +:103110009927AA27BB2767E00897A105B10508F002 +:1031200068E7C801DF91CF911F910F91FF90DF9069 +:10313000CF900C94D422882309F47ECF6FE2F1CF94 +:103140008F929F92AF92BF92CF92DF92EF92FF92B7 +:103150000F931F93CF93DF93EC017C0180E8E80E7F +:10316000F11CF70180809180A280B3800E94AC2086 +:10317000861A970AA80AB90A6E01FFE7CF0ED11C7A +:10318000F601808190E0B0E0A0E08E0105581F4F6D +:1031900088159905AA05BB0508F04AC0F801808189 +:1031A0009181A281B381892B8A2B8B2B09F440C09A +:1031B0000E94AC20F6012081620F711D811D911DBE +:1031C000F70160837183828393833F97808191812C +:1031D000A281B3810196A11DB11D80839183A28339 +:1031E000B383F80110821182128213820E94B820E8 +:1031F000FE01E958FF4F6083718382839383CE0180 +:103200000E94C11FCE010A960E94EC0FCE01489683 +:103210000E942A2081E0DF91CF911F910F91FF90B2 +:10322000EF90DF90CF90BF90AF909F908F900895D8 +:10323000F80180819181A281B381892B8A2B8B2B0C +:10324000A9F57E01F5E2EF0EF11CC7010E94051EF3 +:10325000C7010E94781EC7010E943C1FCE010E9438 +:103260008317CE010E94F0177E018EE4E80EF11C58 +:10327000C7010E94CD10FE01EC5AFF4F80818111E1 +:1032800003C0C7010E94B4100E94B820F8016083F7 +:10329000718382839383FE01EB58FF4FC958DF4F40 +:1032A00028813981621B730B7183608380E0B3CF07 +:1032B0002F923F924F925F926F927F928F929F9246 +:1032C000AF92BF92CF92DF92EF92FF920F931F9334 +:1032D000CF93DF93CDB7DEB765970FB6F894DEBF17 +:1032E0000FBECDBF6C016A8B7B8B4B83FC01EC5A0C +:1032F000FF4F10822FEF2D831C821D8A10E31C8A42 +:103300003C013AE0630E711C842F90E09F838E8312 +:103310002601E3E54E0E511C4601F5E28F0E911C8D +:103320009601295A3F4F39872887C601885A9F4FEF +:103330009B878A87F601EA5AFF4FFF87EE87225064 +:103340003109398B288B0A971C01C6010E94A018ED +:103350008823D9F364E0C3010E941910012F110FD3 +:10336000110B882399F0F201F081F1952B81F29FE6 +:10337000202D112422502D8B64E0C3010E941910CE +:10338000811193C0C4010E94A51F94C065E0C301D0 +:103390000E9419108111E7CF66E0C3010E94191045 +:1033A0008111E1CF8C81811185C044E063E0C301CC +:1033B0000E942B10882331F09C899F5F9C8BC40155 +:1033C0000E94A91F44E061E0C3010E942B108823E2 +:1033D00031F0EC89E150EC8BC4010E94A91FFC89FB +:1033E0008F2F0F2E000C990B2E813F818217930790 +:1033F00009F46BC0F7FF03C03B8131503C8BF201F5 +:103400008081F4E0F80F2C89829FF0191124FD8B44 +:103410009D89090F111D97FD1A9517FF02C00F5FB7 +:103420001F4FF801F595E795FA83E9830981102F7D +:10343000E885F9851082EA85FB85008321E0EE8529 +:10344000FF852083E889F9891082EA88FB88B12CFE +:10345000A12C2C89022E000C330B3D872C878E81EA +:103460009F818A159B0599F1EC85FD85EA15FB0581 +:1034700079F423E0E885F9852083F2018081F02F3B +:103480002C89289FF00D11248F2FEA85FB858083DE +:10349000F70165917491C1010E94EF22FFEFAF1A0D +:1034A000BF0A22E0E20EF11CDACFC4010E94A11F84 +:1034B0003C893D83C8013D89831B910937FD939564 +:1034C000029764F181E08C83A3CF1C8A98CF60E0DF +:1034D000C1010E941211F20180814981FC89F89F8B +:1034E000400D1124415024E560E0C1010E943611D5 +:1034F00061E0C1010E941211F201808103E0080F16 +:103500004981FC898F9F400D1124425083E0E82EB1 +:1035100024E560E0C1010E94061317CF8D816596F6 +:103520000FB6F894DEBF0FBECDBFDF91CF911F91D4 +:103530000F91FF90EF90DF90CF90BF90AF909F9052 +:103540008F907F906F905F904F903F902F90089555 +:103550000F931F93CF93DF93EC018C01025B1F4FFE +:10356000C8010E94B41061E675E0C8010E94A9225A +:10357000C8010E94CD1083E00E94232487E591E0DA +:10358000EEEFFFE30995FE01EC5AFF4F10826CE36A +:1035900075E0C8010E94EF22C8010E94CD102A9652 +:1035A000CE010E94EC0F64E0CE010E94191081113F +:1035B00007C062E370E080E090E00E94DD20F0CF81 +:1035C000DF91CF911F910F9108952F923F924F92CB +:1035D0005F926F927F928F929F92AF92BF92CF92A3 +:1035E000DF92EF92FF920F931F93CF93DF93CDB7AC +:1035F000DEB729970FB6F894DEBF0FBECDBF99870F +:1036000088877B836A832A013C0180E7680E711CEE +:10361000F3018081882309F4F7C081E0E885F9850A +:10362000EA5AFF4F8083E885F985EB5AFF4F1082F5 +:10363000E885F985EC5AFF4F1082E885F985108EF0 +:103640008F01025B1F4F61E0C8010E941211888543 +:1036500099858D5A9F4F9F838E83A884B98497E55F +:10366000A90EB11CE884F984E8E5EE0EF11C88840B +:103670009984F2E58F0E911C888599858F589F4F0C +:103680009D838C83288439849AE0290E311CC88458 +:10369000D984E5E2CE0ED11C888599850E94A018B8 +:1036A0008823D1F3EA81FB81F491F983FF2321F090 +:1036B000EE81FF81F081F9832BEC35E040E060E0A2 +:1036C000C8010E949C134114510439F04981445FA0 +:1036D000920160E0C8010E949C13F50110828CE009 +:1036E000F70180836A817B81C8010E94A922F401CD +:1036F0008081982F990F990F891B8D5AF50180832E +:10370000EE81FF818081982F990F990F891B835D2E +:10371000F7018083EC81FD81808167EC75E084FD99 +:1037200002C063EC75E0C8010E94EF22F4018081C1 +:10373000982F990F990F891B8D5AF5018083F701F6 +:1037400080818F5F8083E885F98582A56FEB75E0C6 +:10375000811102C06BEB75E0C8010E94EF22F401F9 +:103760008081982F990F990F891B8D5AF5018083BD +:10377000F70180818F5F808367EB75E0C8010E944D +:10378000EF2265E0C1010E941910882351F0E885FD +:10379000F98562A56F5FC6010E94AD1FC6010E9438 +:1037A000A91F64E0C1010E94191081111FC0F3011B +:1037B0002081422F50E070E060E0EC81FD8180814B +:1037C0009181A281B38184179507A607B70710F0EE +:1037D0002F3F61F466E0C1010E941910882309F4AB +:1037E0005BCF888599850E94A81A56CF8FEFF30189 +:1037F000808360E0C6010E943F1FC6010E94A11F96 +:1038000081E0E885F985808F29960FB6F894DEBFB0 +:103810000FBECDBFDF91CF911F910F91FF90EF9021 +:10382000DF90CF90BF90AF909F908F907F906F90E0 +:103830005F904F903F902F90089550E040E00C949F +:10384000E51AE0E8F7E72591349181E02130304C2A +:1038500009F080E00895CF93DF93EC010E94211CD2 +:103860009E01275A3F4FDE01A059BF4F882309F41C +:1038700040C0E6E9F7E78491F9018083E7E9F7E7DB +:10388000E491EC83E8E9F7E7E491ED83E9E9F7E710 +:10389000859194919F838E83EBE9F7E785919491CD +:1038A00099878887EDE9F7E7E491EBA7EEE9F7E779 +:1038B000E491EAA7EFE9F7E7E491EC93E0EAF7E7B0 +:1038C000859194919D8F8C8FE2EAF7E78591949191 +:1038D0009F8F8E8FE4EAF7E78591949199A388A34F +:1038E000E6EAF7E7859194919BA38AA3DF91CF91B4 +:1038F00008958CE3F90180831C828FEF8D8320E291 +:1039000033E03F832E8324ED33E03987288791E02D +:103910009BA79AA78C938CEA9DE09D8F8C8F8EED50 +:103920009DE09F8F8E8F84E79EE099A388A38CE310 +:103930009FE0DACFCF92DF92EF920F93CF93DF9396 +:10394000EC01FC01E158FF4F82E38083349781E072 +:1039500090E0A0E0B0E080839183A283B3833B97A3 +:103960008FEF8083CE010E942B1CCE010E94B91FD5 +:103970006FEFCE010E94BD1F6E018AE0C80ED11C00 +:10398000C6010E94DC0FC6010E94EC0FCE014896D2 +:103990000E9420208EE0E82E0FE020E14BE06DE059 +:1039A000CE01825B9F4F0E94D715A596CE010E9443 +:1039B0003E1D65E0C6010E941910882351F060E0A9 +:1039C000CE01DF91CF910F91EF90DF90CF900C94CB +:1039D000AD1F40E06BE376E0CE01DF91CF910F9118 +:1039E000EF90DF90CF900C94D21DCF93DF93D62F22 +:1039F000C72F0E94211C882359F0AD2FBC2FEBE864 +:103A0000F7E784918D933196E53987E7F807C9F791 +:103A1000DF91CF910895CF93DF93DC0170E0660FC3 +:103A2000771F1F96ED91FC915097E60FF71F259198 +:103A3000349190963C932E935F97F9014591549160 +:103A400014968C911497849F402D112491964C9339 +:103A50009197F901C591D4916D2F70E04617170623 +:103A600029F020F0F90125913491432F849F402DB6 +:103A7000112492964C93DF91CF91089521E0FC019F +:103A8000248324E020A72AE936E0308B278760E0F2 +:103A90000E940B1D61E070E083E00E945921E1EB80 +:103AA000F0E08081887F81608083F89410928000AC +:103AB000E1E8F0E01082109285001092840088E125 +:103AC00091E0909389008093880080818860808352 +:103AD000808181608083EFE6F0E080818260808376 +:103AE000789408950F93FC01011107C06230D9F05A +:103AF00030F4662379F0613091F00F9108956330CE +:103B0000C9F06430D1F76481649F402D1124458F42 +:103B1000268FF3CF4B3008F04AE0468BEECF642F70 +:103B20000F910C940B1D6481649F402D1124418FD3 +:103B3000228FE3CF6481649F402D1124438F248F13 +:103B4000DCCF80916D07882329F080916A078093EC +:103B5000B400089580E0FBCFFC01178A158A14A2F7 +:103B600013A2108E10926A0710926B0710926D07C5 +:103B70000C94A11D0F931F93CF93DF93EC018B0146 +:103B80000E94AC1D1E870D871B8A1A8A81E08983DB +:103B900089E08E8B198E1B8E1D8EDF91CF911F9128 +:103BA0000F910895411102C00C94BA1D0895CF934E +:103BB000DF93EC01611115C08881882391F0898120 +:103BC00081110FC0E9858E2F90E0880F991FEF813A +:103BD000F885E80FF91F859194918F3F980721F49C +:103BE0001882DF91CF9108959C879927880F991F9C +:103BF000EA85FB85E80FF91F65917491CE010E945B +:103C0000BA1D89858F5F8987ECCF60E00C94D71D42 +:103C10000F93CF93DF93EC01611166C089818823F4 +:103C200009F462C08D8981115FC08D859E85EA8906 +:103C3000FB89EE0FFF1FE80FF91F459154914115C5 +:103C4000510541F42989213021F51B8A1A8AFC018A +:103C500045915491BA017695679576956795862F2B +:103C600040FF2EC0252F269526952695205186E0CB +:103C7000569547958A95E1F74F716F7000E0CE0138 +:103C80000E94721DEA89FB893196FB8BEA8BCF017A +:103C90000AC019828881882369F060E0CE010E9401 +:103CA000D71D8A899B89880F991FED85FE85E80FAE +:103CB000F91FCECFCE01DF91CF910F910C94AC1DA7 +:103CC0008F738C8B8C81859F802D11248D8B1DA2F1 +:103CD0001CA21BA281E08F8B80936D07188E8A89AE +:103CE0009B8901969B8B8A8BDF91CF910F910895D1 +:103CF00060E00C94081ECF93DF93EC016111B3C018 +:103D00008F89882309F4AFC08D89811105C0CE0148 +:103D1000DF91CF910C94AC1D81508D8B8DA18111C1 +:103D200034C02BA13CA12F5F3F4FC901880F991FC1 +:103D3000EF8DF8A1E80FF91F85919491482F4770F6 +:103D40004EA3492F469546954FA3AC0164E0569586 +:103D500047956A95E1F74F739C81499F402D112447 +:103D60004DA383FB882780F9809369073CA32BA38D +:103D700089A190E02817390740F02AA1222309F4ED +:103D800075C0821B91099CA38BA38DA181508DA32B +:103D9000888D31E0380F388F4C892FA1240F8C8506 +:103DA000280F2A836B8D662361F070E0832F032E2A +:103DB000000C990B0E9462248C8D869F200D11248B +:103DC0002A838A8190E0CB966BE370E00E946224A4 +:103DD0008A832E892B83698D662371F0062E000C51 +:103DE000770B832F032E000C990B0E9462248A8D7F +:103DF000869F200D11242B836D8D662389F0832FE0 +:103E0000330F990B70E00E946224CB0162E070E0F6 +:103E10000E9462242E8D9B81289F900D11249B83EC +:103E20004F3341F18B818A300CF089E087FD80E0CF +:103E30008B83F894EA81F0E0E75BF94FE491E0933B +:103E40006C078D8198A5899F802D11249B81899F66 +:103E5000802D11249EA1899F802D112480936B07B2 +:103E600080936A077894DF91CF910895CE010E94E4 +:103E7000AC1D8BCF1B82DDCF60E00C947B1ECF93FB +:103E8000DF93EC01611103C00E94AC1D1982DF9128 +:103E9000CF910895CF93DF93EC010E94AC1D19825E +:103EA000DF91CF91089560916B07662329F180918E +:103EB0006E078F5F80936E0790916C078917E0F013 +:103EC00081E090916D07911180E080936D071092D1 +:103ED0006E0780916907882369F08091040193E45B +:103EE000899F802D1124895B809304010E944224C4 +:103EF00090936A070C94A11D08951F920F920FB61C +:103F00000F9211242F933F934F935F936F937F935F +:103F10008F939F93AF93BF93EF93FF930E94531F91 +:103F2000FF91EF91BF91AF919F918F917F916F9191 +:103F30005F914F913F912F910F900FBE0F901F9067 +:103F4000189562E976E00C94BA1D6AE876E00C9464 +:103F5000BA1D64E876E00C94BA1DFC01862F660F4A +:103F6000990B668170E06F5F7F4F0E9462248583AA +:103F7000089521E0FC012083089570E085E00C9411 +:103F80005921AF92BF92CF92DF92EF92FF920F939F +:103F90001F93CF93DF93EC0189819A812FE0289FB3 +:103FA0008001299F100D112485E10E943E21800F80 +:103FB000911F24E0969587952A95E1F79A83898346 +:103FC0002881222391F1EC81AD80B12CD12CC12C20 +:103FD000A885B9857D0110E000E06E817F819B019D +:103FE00050E040E08617970728F0BC01A817B907F2 +:103FF00008F4BD0190E080E01F921F921F92EF93A2 +:104000000E94BE236B830F900F900F900F9070E073 +:1040100085E0DF91CF911F910F91FF90EF90DF909E +:10402000CF90BF90AF900C945921DF91CF911F9109 +:104030000F91FF90EF90DF90CF90BF90AF900895D9 +:10404000FC018CE39FE09383828384E0818381E0A1 +:1040500084870895CF93DF93EC018C819D81892B18 +:1040600021F18C858F7139F584E10E943E21BC01DC +:10407000990F880B990B0E94142526EE3FE34EEC16 +:1040800050E40E94A0250E94E3249B017B836A8365 +:10409000672BA9F084E08983FE01349680E041918A +:1040A00051912417350720F48983DF91CF9108952A +:1040B0008F5F8430A1F78C858F5F8C87F6CF8FEF71 +:1040C0008983F9CF1F920F920FB60F9211242F936D +:1040D0003F938F939F93AF93BF938091700790917D +:1040E0007107A0917207B091730730916F0723E0B9 +:1040F000230F2D3758F50196A11DB11D20936F0791 +:104100008093700790937107A0937207B093730721 +:104110008091740790917507A0917607B091770709 +:104120000196A11DB11D8093740790937507A0930C +:104130007607B0937707BF91AF919F918F913F9191 +:104140002F910F900FBE0F901F90189526E8230F08 +:104150000296A11DB11DD2CF2FB7F89460917007C0 +:104160007091710780917207909173072FBF089526 +:104170003FB7F8948091740790917507A0917607E6 +:10418000B091770726B5A89B05C02F3F19F001967F +:10419000A11DB11D3FBFBA2FA92F982F8827BC01A1 +:1041A000CD01620F711D811D911D42E0660F771FC9 +:1041B000881F991F4A95D1F70895CF92DF92EF9209 +:1041C000FF92CF93DF936B017C010E94B820EB013B +:1041D000C114D104E104F10439F4DF91CF91FF90CF +:1041E000EF90DF90CF9008950E94B8206C1B7D0B5C +:1041F000683E734068F381E0C81AD108E108F1080D +:10420000C851DC4FE5CF789484B5826084BD84B515 +:10421000816084BD85B5826085BD85B5816085BDC1 +:10422000EEE6F0E0808181608083E1E8F0E01082DA +:10423000808182608083808181608083E0E8F0E01B +:10424000808181608083E1EBF0E080818460808305 +:10425000E0EBF0E0808181608083EAE7F0E080813C +:10426000846080838081826080838081816080839C +:104270008081806880831092C10008958E3008F09C +:104280008E502091050190E4299F900111248770A0 +:10429000822B80937C0080917A00806480937A00E6 +:1042A00080917A0086FDFCCF809178009091790012 +:1042B00008951F93CF93DF93182FEB0161E00E94C5 +:1042C000DF21209739F460E0812FDF91CF911F919A +:1042D0000C941B22CF3FD10511F461E0F5CFE12F03 +:1042E000F0E0EA55F94FE491E33031F140F4E13088 +:1042F000B1F0E230E1F0C038D1057CF7E4CFE63030 +:1043000029F1E73059F1E430B1F780918000806203 +:1043100080938000D0938B00C0938A0004C084B542 +:10432000806884BDC7BDDF91CF911F91089584B58A +:10433000806284BDC8BDF7CF809180008068809383 +:104340008000D0938900C0938800EDCF8091B000A9 +:1043500080688093B000C093B300E5CF8091B00037 +:1043600080628093B000C093B400DDCF833081F0D1 +:1043700028F4813099F08230A9F008958630A9F0B0 +:104380008730C9F08430B1F4809180008F7D03C004 +:10439000809180008F7780938000089584B58F7717 +:1043A00084BD089584B58F7DFBCF8091B0008F7759 +:1043B0008093B00008958091B0008F7DF9CFCF93A6 +:1043C000DF9390E0FC01E654F94F24918253994F1A +:1043D000FC0184918823C9F090E0880F991FFC01AB +:1043E000EA50F94FA591B491FC01E451F94FC59100 +:1043F000D49161110DC09FB7F8948C9120958223C0 +:104400008C938881282328839FBFDF91CF910895C3 +:10441000623051F49FB7F8943C91822F80958323AA +:104420008C93E8812E2BEFCF8FB7F894EC912E2B45 +:104430002C938FBFEACF1F93CF93DF93162F282F94 +:1044400030E0F901EA55F94F8491F901E654F94F4A +:10445000D491F901E253F94FC491CC23A1F0811119 +:104460000E94B621EC2FF0E0EE0FFF1FE451F94F50 +:10447000A591B4918FB7F894EC91111108C0D09523 +:10448000DE23DC938FBFDF91CF911F910895DE2B48 +:10449000F8CFCF93DF93282F30E0F901EA55F94F99 +:1044A0008491F901E654F94FD491F901E253F94F9F +:1044B000C491CC23A1F081110E94B621EC2FF0E031 +:1044C000EE0FFF1FEE51F94FA591B491EC91ED2342 +:1044D00081E090E009F480E0DF91CF91089580E0E1 +:1044E00090E0FACFCF92DF92EF92FF920F931F935B +:1044F000CF93DF936C01EB017B01E40EF51E10E01E +:1045000000E0CE15DF0561F06991D601ED91FC91D7 +:104510000190F081E02DC6010995080F191FF1CF18 +:10452000C801DF91CF911F910F91FF90EF90DF9025 +:10453000CF900895FB0101900020E9F73197AF017A +:10454000461B570BDC01ED91FC910280F381E02DBD +:104550000994EF92FF920F931F93CF93DF937C0107 +:104560008B01D0E0C0E0F80164910F5F1F4F66231C +:1045700059F0D701ED91FC910190F081E02DC70138 +:104580000995C80FD91FEFCFCE01DF91CF911F91B1 +:104590000F91FF90EF9008956115710511F00C9443 +:1045A0009A2290E080E00895DC01ED91FC91019069 +:1045B000F081E02D09940F931F93CF93DF93EC01CB +:1045C0006DE00E94D4228C016AE0CE010E94D422C8 +:1045D000800F911FDF91CF911F910F9108950F933D +:1045E0001F93CF93DF93EC010E94A9228C01CE018F +:1045F0000E94DB22800F911FDF91CF911F910F91BD +:1046000008958F929F92AF92BF92CF92DF92EF92D6 +:10461000FF920F931F93CF93DF93CDB7DEB7A19790 +:104620000FB6F894DEBF0FBECDBF6C01142FE52F7F +:10463000CB01022F19A2223008F40AE07E0121E208 +:10464000E20EF11C802E912CB12CA12C612F7E2F1B +:10465000A50194010E947624029F101911241A309A +:104660003CF5105DF70112937F01122FE32FCA0171 +:10467000232B242B252B51F790E080E0E114F1044B +:1046800021F0B701C6010E949A22A1960FB6F894B4 +:10469000DEBF0FBECDBFDF91CF911F910F91FF9075 +:1046A000EF90DF90CF90BF90AF909F908F90089544 +:1046B000195CD8CFCF92DF92EF92FF920F931F93A6 +:1046C000CF93DF93EC016A017B012115310579F469 +:1046D000E881F9810190F081E02D642FDF91CF9185 +:1046E0001F910F91FF90EF90DF90CF9009942A30A7 +:1046F0003105E9F42AE0F7FE1AC06DE20E94D422E7 +:104700008C0144275527BA014C195D096E097F09B0 +:104710002AE0CE010E940123800F911FDF91CF91EB +:104720001F910F91FF90EF90DF90CF900895B70108 +:10473000A601CE01DF91CF911F910F91FF90EF90D5 +:10474000DF90CF900C9401239A01AB01770F660B99 +:10475000770B0C945A232115310541F4DC01ED91BE +:10476000FC910190F081E02D642F09940C940123B9 +:104770009A01AB0170E060E00C94AB234F925F9222 +:104780006F927F92AF92BF92CF92DF92EF92FF92A1 +:104790000F931F93CF93DF93CDB7DEB729013A0173 +:1047A0009B01AC01241935094609570989899A8961 +:1047B000AB89BC89BC01CD016A197B098C099D09B3 +:1047C0000E943224A8019701241935094609570986 +:1047D0000E949824CA01B9016A0D7B1D8C1D9D1D84 +:1047E000DF91CF911F910F91FF90EF90DF90CF90CD +:1047F000BF90AF907F906F905F904F90089561E071 +:104800008AE00E941B2261E08AE00E94DF218CB5D1 +:1048100080618CBD8CB580648CBD61E08DE00E94B0 +:10482000DF2161E08BE00C94DF21811104C08CB5A5 +:1048300080628CBD08958CB58F7DFBCF9CB5937F36 +:10484000892B8CBD08959CB59C7F282F2370922BBB +:104850009CBD9DB582FB222720F9892F8E7F822B5C +:104860008DBD0895DB018F939F930E94B724BF9164 +:10487000AF91A29F800D911DA39F900DB29F900DAF +:1048800011240895991B79E004C0991F961708F028 +:10489000961B881F7A95C9F780950895AA1BBB1BA4 +:1048A00051E107C0AA1FBB1FA617B70710F0A61B30 +:1048B000B70B881F991F5A95A9F780959095BC0151 +:1048C000CD01089597FB072E16F4009407D077FDCD +:1048D00009D00E944E2407FC05D03EF490958195A6 +:1048E0009F4F0895709561957F4F0895A1E21A2E0C +:1048F000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F84 +:10490000A217B307E407F50720F0A21BB30BE40BD3 +:10491000F50B661F771F881F991F1A9469F760951A +:104920007095809590959B01AC01BD01CF010895D4 +:10493000052E97FB1EF400940E94AF2457FD07D06C +:104940000E94762407FC03D04EF40C94AF245095BB +:104950004095309521953F4F4F4F5F4F089590956B +:104960008095709561957F4F8F4F9F4F08950E945E +:10497000D424A59F900DB49F900DA49F800D911DF0 +:10498000112408950024A7FD00942A0F301D401D16 +:10499000501D601D701D801D901D0895EE0FFF1F9E +:1049A0000590F491E02D0994A29FB001B39FC0013E +:1049B000A39F700D811D1124911DB29F700D811D4B +:1049C0001124911D08950E947F2588F09F5798F02B +:1049D000B92F9927B751B0F0E1F0660F771F881F04 +:1049E000991F1AF0BA95C9F714C0B13091F00E941E +:1049F0009925B1E008950C949925672F782F882781 +:104A0000B85F39F0B93FCCF3869577956795B39544 +:104A1000D9F73EF490958095709561957F4F8F4FB3 +:104A20009F4F0895E89409C097FB3EF490958095B8 +:104A3000709561957F4F8F4F9F4F9923A9F0F92F64 +:104A400096E9BB279395F695879577956795B795E2 +:104A5000F111F8CFFAF4BB0F11F460FF1BC06F5FC8 +:104A60007F4F8F4F9F4F16C0882311F096E911C0DA +:104A7000772321F09EE8872F762F05C0662371F0FB +:104A800096E8862F70E060E02AF09A95660F771F0F +:104A9000881FDAF7880F9695879597F9089597F903 +:104AA0009F6780E870E060E008959FEF80EC0895D4 +:104AB00000240A94161617061806090608950024FD +:104AC0000A9412161306140605060895092E039477 +:104AD000000C11F4882352F0BB0F40F4BF2B11F4EB +:104AE00060FF04C06F5F7F4F8F4F9F4F089557FD4A +:104AF0009058440F551F59F05F3F71F04795880F4C +:104B000097FB991F61F09F3F79F0879508951216E2 +:104B100013061406551FF2CF4695F1DF08C016168E +:104B200017061806991FF1CF86957105610508943F +:104B30000895E894BB2766277727CB0197F9089556 +:104B40000E94B3250C9466250E94582538F00E94D7 +:104B50005F2520F0952311F00C944F250C945525DA +:104B600011240C949A250E94772570F3959FC1F328 +:104B7000950F50E0551F629FF001729FBB27F00D0B +:104B8000B11D639FAA27F00DB11DAA1F649F662760 +:104B9000B00DA11D661F829F2227B00DA11D621FAF +:104BA000739FB00DA11D621F839FA00D611D221F69 +:104BB000749F3327A00D611D231F849F600D211D4D +:104BC000822F762F6A2F11249F5750409AF0F1F0D0 +:104BD00088234AF0EE0FFF1FBB1F661F771F881F39 +:104BE00091505040A9F79E3F510580F00C944F25FD +:104BF0000C949A255F3FE4F3983ED4F3869577951D +:104C00006795B795F795E7959F5FC1F7FE2B880FDE +:104C1000911D9695879597F908958F929F92AF92DF +:104C2000BF92CF92DF92EF92FF92CF93DF93EC018E +:104C3000688179818A819B81611571058105910562 +:104C400021F464E279ED8BE597E02DE133EF41E06B +:104C500050E00E94982449015A019B01AC01A7EA47 +:104C6000B1E40E94B7246B017C01ACEEB4EFA50166 +:104C700094010E942129DC01CB018C0D9D1DAE1DEC +:104C8000BF1DB7FF03C00197A109B048888399836E +:104C9000AA83BB839F77DF91CF91FF90EF90DF9046 +:104CA000CF90BF90AF909F908F9008950E940D2657 +:104CB000089580E091E00E940D260895B0E0A0E004 +:104CC0008093000190930101A0930201B09303012E +:104CD0000895DC0101C06D9341505040E0F7089504 +:104CE000AEE0B0E0E6E7F6E20C9434290D891E89C7 +:104CF0008F89988D26E02C831A83098397FF02C041 +:104D000080E090E801979E838D83AE01455E5F4F02 +:104D1000698D7A8DCE0101960E94A0264D815E811B +:104D200057FD0AC02F813885421753070CF49A01AA +:104D3000020F131FF80110822E96E4E00C94502904 +:104D4000ABE0B0E0E6EAF6E20C9426297C013B01F8 +:104D50008A01FC0117821682838181FFC8C1CE01BE +:104D600001965C01F7019381F30193FD859193FF17 +:104D700081913F01882309F453C1853239F493FDB1 +:104D8000859193FF81913F01853229F4B70190E02D +:104D90000E949028E7CF912C212C312CFFE1F315B4 +:104DA00038F08B3211F190F4803209F1833229F11D +:104DB00037FC3CC020ED280F2A3050F536FE20C0CD +:104DC0008AE0989E200D1124922E06C08D3291F01B +:104DD000803371F7689430F8F30193FD859193FF68 +:104DE00081913F018111DACF21C0689431F8689434 +:104DF00032F8F2CF689433F8EFCF689434F8ECCF00 +:104E0000EAE02E9E200D1124222E689435F8E4CF7E +:104E10008E3229F436FC04C1689436F8DDCF8C3626 +:104E200019F4689437F8D8CF8836B1F2982F9F7D5F +:104E300095549330E0F08336A1F18337C1F1833587 +:104E400009F063C02801F2E04F0E511CF801C08048 +:104E5000D180692D70E036FC02C06FEF7FEFC60194 +:104E60000E947A284C01689437F882010AC00C5FCE +:104E70001F4FFFE3F98388248394912C6501E89404 +:104E800037F833FE2DC0522C8114910471F5552052 +:104E900009F468CFB70180E290E00E9490285A940C +:104EA000F6CFF801808189830E5F1F4FE4CF280180 +:104EB000F2E04F0E511CF801C080D180692D70E0E6 +:104EC00036FC02C06FEF7FEFC6010E9485284C01BF +:104ED0008201D5CFB70180E290E00E9490282A9409 +:104EE0002814190409F0B0F7CECFF60137FC8591EC +:104EF00037FE81916F01B70190E00E949028511018 +:104F00005A94F1E08F1A9108BFCF843619F0893690 +:104F100009F077C0F80137FE6BC060817181828132 +:104F200093810C5F1F4FF32DFF763F2E97FF09C033 +:104F300090958095709561957F4F8F4F9F4F6894A6 +:104F400037F82AE030E0A5010E94C028C82ECA1810 +:104F50008C2C432C36FE0CC0E89440F8C91440F465 +:104F600034FE05C032FC03C0F32DFE7E4F2E892C8B +:104F700044FE95C0FE01EC0DF11D8081803309F0E7 +:104F800087C0242D297E422E842D8870582E43FC04 +:104F900095C040FE8FC09C2C821418F42C0C922CCF +:104FA000981844FE91C0B70180E390E00E949028D9 +:104FB00042FE09C088E790E041FE02C088E590E02B +:104FC000B7010E949028C91408F48AC0CA94D12C51 +:104FD0009FEFC91AD90ACA0CDB1CF60182916F0136 +:104FE000B70190E00E949028AC14BD04B1F74FCFF8 +:104FF00060817181072E000C880B990B0E5F1F4F8B +:1050000092CFD32CE894D4F82AE030E0853739F1F8 +:10501000232D297FD22E8F3601F148F48835A9F04F +:10502000F701868197812B96E2E10C944229803723 +:1050300049F08837A9F7D4FE02C06894D2F820E17D +:1050400030E00DC06894D4F8F6CF34FE03C0822F50 +:105050008660D82E20E132E002C028E030E0F8017E +:10506000D7FE0FC060817181828193810C5F1F4FD9 +:10507000A5010E94C028C82ECA183D2CE89437F814 +:1050800067CF6081718190E080E00E5F1F4FF0CFAD +:1050900042FC02C0839478CF8394839475CF842D8F +:1050A000867809F471CFF6CFB70180E290E00E94D4 +:1050B000902883948214C0F3512C73CF522C58182B +:1050C000821408F46ECFF8CF842D867809F47BCF54 +:1050D0008BE241FE80E247FC8DE2B70190E071CFA8 +:1050E000B70180E390E00E9490289A946CCF8FEFF4 +:1050F0009FEF99CFFC010590615070400110D8F7E7 +:10510000809590958E0F9F1F0895FC01615070400F +:1051100001900110D8F7809590958E0F9F1F0895EC +:105120000F931F93CF93DF93182F092FEB018B81E0 +:1051300081FD09C01FEF0FEF812F902FDF91CF91DD +:105140001F910F91089582FF14C02E813F818C81A1 +:105150009D81281739073CF4E881F981CF01019638 +:105160009983888310838E819F8101969F838E838C +:10517000E3CFE885F985812F0995892BA1F3DACF53 +:10518000FA01AA27283051F1203181F1E8946F9378 +:105190006E7F6E5F7F4F8F4F9F4FAF4FB1E03ED01E +:1051A000B4E03CD0670F781F891F9A1FA11D680FBC +:1051B000791F8A1F911DA11D6A0F711D811D911DEF +:1051C000A11D20D009F468943F912AE0269F112464 +:1051D0003019305D3193DEF6CF010895462F4770C8 +:1051E000405D4193B3E00FD0C9F7F6CF462F4F7023 +:1051F000405D4A3318F0495D31FD4052419302D081 +:10520000A9F7EACFB4E0A695979587957795679526 +:10521000BA95C9F700976105710508959B01AC0126 +:105220000A2E06945795479537952795BA95C9F74D +:10523000620F731F841F951FA01D0895B7FF0C9464 +:10524000B7240E94B724821B930B08952F923F929C +:105250004F925F926F927F928F929F92AF92BF9286 +:10526000CF92DF92EF92FF920F931F93CF93DF9332 +:10527000CDB7DEB7CA1BDB0B0FB6F894DEBF0FBE8F +:10528000CDBF09942A88398848885F846E847D84DC +:105290008C849B84AA84B984C884DF80EE80FD80DE +:1052A0000C811B81AA81B981CE0FD11D0FB6F89454 +:1052B000DEBF0FBECDBFED01089513E0C2E8D3E01D +:1052C00004C0FE010E94CE242196C338D107C9F73D +:0452D000F894FFCF80 +:1052D40001000000010148503D257500573D25643B +:1052E40000473D256400463D256400FA000000FDAA +:1052F40000030004000400422E4241525200415473 +:105304005441434B00432E504541532E0027012E58 +:1053140001350101000000000019006400C800000C +:0E532400000000451772224C4F4144455200D4 +:040000030000075A98 :00000001FF diff --git a/Exe/POCKET.MAP b/Exe/POCKET.MAP index 1423d72..38ad2e5 100644 --- a/Exe/POCKET.MAP +++ b/Exe/POCKET.MAP @@ -3,7 +3,7 @@ Archive member included to satisfy reference by file (symbol) ../lib/libgamebuino.a(Buttons.o) Obj/Pad.o (_ZN7Buttons8releasedEh) ../lib/libgamebuino.a(Display.o) - Obj/Gfx.o (_displayBuffer) + Obj/Gfx.o (_ZN7Display5clearEv) ../lib/libgamebuino.a(font3x3.o) Obj/Player.o (font3x3) ../lib/libgamebuino.a(font3x5.o) @@ -231,14 +231,11 @@ Discarded input sections 0x0000000000000000 0x1c Obj/System.o .text.SystemArrayCompare 0x0000000000000000 0x34 Obj/System.o - .group 0x0000000000000000 0x8 Obj/Gfx.o .text 0x0000000000000000 0x0 Obj/Gfx.o .data 0x0000000000000000 0x0 Obj/Gfx.o .bss 0x0000000000000000 0x0 Obj/Gfx.o .text.GfxShowKeyboard 0x0000000000000000 0xc Obj/Gfx.o - .text.GfxRenderTiles - 0x0000000000000000 0xbe Obj/Gfx.o .text.GfxPrintText 0x0000000000000000 0xc Obj/Gfx.o .text.GfxDrawLine @@ -277,8 +274,6 @@ Discarded input sections .text 0x0000000000000000 0x0 ../lib/libgamebuino.a(Display.o) .data 0x0000000000000000 0x0 ../lib/libgamebuino.a(Display.o) .bss 0x0000000000000000 0x0 ../lib/libgamebuino.a(Display.o) - .text._ZN7Display9drawPixelEaa - 0x0000000000000000 0x8e ../lib/libgamebuino.a(Display.o) .text._ZN7Display4dataEh 0x0000000000000000 0x3c ../lib/libgamebuino.a(Display.o) .text._ZN7Display11setContrastEh @@ -1297,7 +1292,7 @@ END GROUP .rela.plt *(.rela.plt) -.text 0x0000000000000000 0x5198 +.text 0x0000000000000000 0x52d4 *(.vectors) .vectors 0x0000000000000000 0x68 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/crtatmega328p.o 0x0000000000000000 __vectors @@ -1327,744 +1322,753 @@ END GROUP 0x0000000000000091 0x17 Obj/Player.o .progmem.data._ZZN6Player4InitEvE3__c 0x00000000000000a8 0x1b Obj/Player.o - .progmem.data.BarracksShadowSpr_Data + .progmem.data.TownCentreShadowSprData 0x00000000000000c3 0x4a Obj/Unit.o - 0x00000000000000c3 BarracksShadowSpr_Data - .progmem.data.BarracksSpr_Data + 0x00000000000000c3 TownCentreShadowSprData + .progmem.data.TownCentreSprData 0x000000000000010d 0x4a Obj/Unit.o - 0x000000000000010d BarracksSpr_Data + 0x000000000000010d TownCentreSprData + .progmem.data.BarracksShadowSpr_Data + 0x0000000000000157 0x4a Obj/Unit.o + 0x0000000000000157 BarracksShadowSpr_Data + .progmem.data.BarracksSpr_Data + 0x00000000000001a1 0x4a Obj/Unit.o + 0x00000000000001a1 BarracksSpr_Data .progmem.data.Peasant_SprData - 0x0000000000000157 0xa Obj/Unit.o - 0x0000000000000157 Peasant_SprData + 0x00000000000001eb 0xa Obj/Unit.o + 0x00000000000001eb Peasant_SprData .progmem.data.Peasant_Walking_SprData - 0x0000000000000161 0xa Obj/Unit.o - 0x0000000000000161 Peasant_Walking_SprData + 0x00000000000001f5 0xa Obj/Unit.o + 0x00000000000001f5 Peasant_Walking_SprData .progmem.data._ZL15MainMenuOptions - 0x000000000000016b 0x8 Obj/Menu.o + 0x00000000000001ff 0x8 Obj/Menu.o .progmem.data._ZL16MainMenuOption_3 - 0x0000000000000173 0x5 Obj/Menu.o + 0x0000000000000207 0x5 Obj/Menu.o .progmem.data._ZL16MainMenuOption_2 - 0x0000000000000178 0x8 Obj/Menu.o + 0x000000000000020c 0x8 Obj/Menu.o .progmem.data._ZL16MainMenuOption_1 - 0x0000000000000180 0x11 Obj/Menu.o + 0x0000000000000214 0x11 Obj/Menu.o .progmem.data._ZL16MainMenuOption_0 - 0x0000000000000191 0x13 Obj/Menu.o + 0x0000000000000225 0x13 Obj/Menu.o .progmem.data.font3x3 - 0x00000000000001a4 0x182 ../lib/libgamebuino.a(font3x3.o) - 0x00000000000001a4 font3x3 + 0x0000000000000238 0x182 ../lib/libgamebuino.a(font3x3.o) + 0x0000000000000238 font3x3 .progmem.data.font3x5 - 0x0000000000000326 0x182 ../lib/libgamebuino.a(font3x5.o) - 0x0000000000000326 font3x5 + 0x00000000000003ba 0x182 ../lib/libgamebuino.a(font3x5.o) + 0x00000000000003ba font3x5 .progmem.data._ZZN9Gamebuino10changeGameEvE3__c_0 - 0x00000000000004a8 0x25 ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000000053c 0x25 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino10changeGameEvE3__c - 0x00000000000004cd 0x28 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000000561 0x28 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino14displayBatteryEvE3__c_1 - 0x00000000000004f5 0xb ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000000589 0xb ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino14displayBatteryEvE3__c_0 - 0x0000000000000500 0x15 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000000594 0x15 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino14displayBatteryEvE3__c - 0x0000000000000515 0xe ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000005a9 0xe ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c_3 - 0x0000000000000523 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000005b7 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c_2 - 0x0000000000000527 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000005bb 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c_1 - 0x000000000000052b 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000005bf 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c_0 - 0x000000000000052f 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000005c3 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKhE3__c - 0x0000000000000533 0x4 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000005c7 0x4 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZL13gamebuinoLogo - 0x0000000000000537 0x70 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000005cb 0x70 ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZL12startupSound - 0x00000000000005a7 0xe ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000000063b 0xe ../lib/libgamebuino.a(Gamebuino.o) .progmem.data._ZL12_halfPeriods - 0x00000000000005b5 0x3b ../lib/libgamebuino.a(Sound.o) + 0x0000000000000649 0x3b ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL9playTickP - 0x00000000000005f0 0x6 ../lib/libgamebuino.a(Sound.o) + 0x0000000000000684 0x6 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL17playCancelPattern - 0x00000000000005f6 0x8 ../lib/libgamebuino.a(Sound.o) + 0x000000000000068a 0x8 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL13playOKPattern - 0x00000000000005fe 0x8 ../lib/libgamebuino.a(Sound.o) + 0x0000000000000692 0x8 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL18defaultInstruments - 0x0000000000000606 0x4 ../lib/libgamebuino.a(Sound.o) + 0x000000000000069a 0x4 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL15noiseInstrument - 0x000000000000060a 0x4 ../lib/libgamebuino.a(Sound.o) + 0x000000000000069e 0x4 ../lib/libgamebuino.a(Sound.o) .progmem.data._ZL20squareWaveInstrument - 0x000000000000060e 0x4 ../lib/libgamebuino.a(Sound.o) + 0x00000000000006a2 0x4 ../lib/libgamebuino.a(Sound.o) .progmem.data.digital_pin_to_timer_PGM - 0x0000000000000612 0x14 ../lib/libarduino.a(wiring_digital.o) - 0x0000000000000612 digital_pin_to_timer_PGM + 0x00000000000006a6 0x14 ../lib/libarduino.a(wiring_digital.o) + 0x00000000000006a6 digital_pin_to_timer_PGM .progmem.data.digital_pin_to_bit_mask_PGM - 0x0000000000000626 0x14 ../lib/libarduino.a(wiring_digital.o) - 0x0000000000000626 digital_pin_to_bit_mask_PGM + 0x00000000000006ba 0x14 ../lib/libarduino.a(wiring_digital.o) + 0x00000000000006ba digital_pin_to_bit_mask_PGM .progmem.data.digital_pin_to_port_PGM - 0x000000000000063a 0x14 ../lib/libarduino.a(wiring_digital.o) - 0x000000000000063a digital_pin_to_port_PGM + 0x00000000000006ce 0x14 ../lib/libarduino.a(wiring_digital.o) + 0x00000000000006ce digital_pin_to_port_PGM .progmem.data.port_to_input_PGM - 0x000000000000064e 0xa ../lib/libarduino.a(wiring_digital.o) - 0x000000000000064e port_to_input_PGM + 0x00000000000006e2 0xa ../lib/libarduino.a(wiring_digital.o) + 0x00000000000006e2 port_to_input_PGM .progmem.data.port_to_output_PGM - 0x0000000000000658 0xa ../lib/libarduino.a(wiring_digital.o) - 0x0000000000000658 port_to_output_PGM + 0x00000000000006ec 0xa ../lib/libarduino.a(wiring_digital.o) + 0x00000000000006ec port_to_output_PGM .progmem.data.port_to_mode_PGM - 0x0000000000000662 0xa ../lib/libarduino.a(wiring_digital.o) - 0x0000000000000662 port_to_mode_PGM - 0x000000000000066c . = ALIGN (0x2) + 0x00000000000006f6 0xa ../lib/libarduino.a(wiring_digital.o) + 0x00000000000006f6 port_to_mode_PGM + 0x0000000000000700 . = ALIGN (0x2) *(.lowtext) *(.lowtext*) - 0x000000000000066c __ctors_start = . + 0x0000000000000700 __ctors_start = . *(.ctors) - .ctors 0x000000000000066c 0x2 Obj/main.o - .ctors 0x000000000000066e 0x2 Obj/Gameplay.o - 0x0000000000000670 __ctors_end = . - 0x0000000000000670 __dtors_start = . + .ctors 0x0000000000000700 0x2 Obj/main.o + .ctors 0x0000000000000702 0x2 Obj/Gameplay.o + 0x0000000000000704 __ctors_end = . + 0x0000000000000704 __dtors_start = . *(.dtors) - .dtors 0x0000000000000670 0x2 Obj/Gameplay.o - 0x0000000000000672 __dtors_end = . + .dtors 0x0000000000000704 0x2 Obj/Gameplay.o + 0x0000000000000706 __dtors_end = . SORT(*)(.ctors) SORT(*)(.dtors) *(.init0) - .init0 0x0000000000000672 0x0 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/crtatmega328p.o - 0x0000000000000672 __init + .init0 0x0000000000000706 0x0 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/crtatmega328p.o + 0x0000000000000706 __init *(.init0) *(.init1) *(.init1) *(.init2) - .init2 0x0000000000000672 0xc /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/crtatmega328p.o + .init2 0x0000000000000706 0xc /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/crtatmega328p.o *(.init2) *(.init3) *(.init3) *(.init4) - .init4 0x000000000000067e 0x16 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_copy_data.o) - 0x000000000000067e __do_copy_data - .init4 0x0000000000000694 0x10 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_clear_bss.o) - 0x0000000000000694 __do_clear_bss + .init4 0x0000000000000712 0x16 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_copy_data.o) + 0x0000000000000712 __do_copy_data + .init4 0x0000000000000728 0x10 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_clear_bss.o) + 0x0000000000000728 __do_clear_bss *(.init4) *(.init5) *(.init5) *(.init6) - .init6 0x00000000000006a4 0x16 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_ctors.o) - 0x00000000000006a4 __do_global_ctors + .init6 0x0000000000000738 0x16 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_ctors.o) + 0x0000000000000738 __do_global_ctors *(.init6) *(.init7) *(.init7) *(.init8) *(.init8) *(.init9) - .init9 0x00000000000006ba 0x8 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/crtatmega328p.o + .init9 0x000000000000074e 0x8 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/crtatmega328p.o *(.init9) *(.text) - .text 0x00000000000006c2 0x4 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/crtatmega328p.o - 0x00000000000006c2 __vector_22 - 0x00000000000006c2 __vector_1 - 0x00000000000006c2 __vector_24 - 0x00000000000006c2 __vector_12 - 0x00000000000006c2 __bad_interrupt - 0x00000000000006c2 __vector_6 - 0x00000000000006c2 __vector_3 - 0x00000000000006c2 __vector_23 - 0x00000000000006c2 __vector_25 - 0x00000000000006c2 __vector_13 - 0x00000000000006c2 __vector_17 - 0x00000000000006c2 __vector_19 - 0x00000000000006c2 __vector_7 - 0x00000000000006c2 __vector_5 - 0x00000000000006c2 __vector_4 - 0x00000000000006c2 __vector_9 - 0x00000000000006c2 __vector_2 - 0x00000000000006c2 __vector_21 - 0x00000000000006c2 __vector_15 - 0x00000000000006c2 __vector_8 - 0x00000000000006c2 __vector_14 - 0x00000000000006c2 __vector_10 - 0x00000000000006c2 __vector_18 - 0x00000000000006c2 __vector_20 - 0x00000000000006c6 . = ALIGN (0x2) + .text 0x0000000000000756 0x4 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/crtatmega328p.o + 0x0000000000000756 __vector_22 + 0x0000000000000756 __vector_1 + 0x0000000000000756 __vector_24 + 0x0000000000000756 __vector_12 + 0x0000000000000756 __bad_interrupt + 0x0000000000000756 __vector_6 + 0x0000000000000756 __vector_3 + 0x0000000000000756 __vector_23 + 0x0000000000000756 __vector_25 + 0x0000000000000756 __vector_13 + 0x0000000000000756 __vector_17 + 0x0000000000000756 __vector_19 + 0x0000000000000756 __vector_7 + 0x0000000000000756 __vector_5 + 0x0000000000000756 __vector_4 + 0x0000000000000756 __vector_9 + 0x0000000000000756 __vector_2 + 0x0000000000000756 __vector_21 + 0x0000000000000756 __vector_15 + 0x0000000000000756 __vector_8 + 0x0000000000000756 __vector_14 + 0x0000000000000756 __vector_10 + 0x0000000000000756 __vector_18 + 0x0000000000000756 __vector_20 + 0x000000000000075a . = ALIGN (0x2) *(.text.*) .text.startup.main - 0x00000000000006c6 0x22 Obj/main.o - 0x00000000000006c6 main + 0x000000000000075a 0x22 Obj/main.o + 0x000000000000075a main .text.startup._GLOBAL__sub_I_gb - 0x00000000000006e8 0x16 Obj/main.o + 0x000000000000077c 0x16 Obj/main.o .text._Z8GameInitv - 0x00000000000006fe 0x8a Obj/Gameplay.o - 0x00000000000006fe _Z8GameInitv + 0x0000000000000792 0x8a Obj/Gameplay.o + 0x0000000000000792 _Z8GameInitv .text.startup._GLOBAL__sub_I_GamePlayers - 0x0000000000000788 0x8 Obj/Gameplay.o + 0x000000000000081c 0x8 Obj/Gameplay.o .text.exit._GLOBAL__sub_D_GamePlayers - 0x0000000000000790 0x8 Obj/Gameplay.o + 0x0000000000000824 0x8 Obj/Gameplay.o .text.SystemSetRandSeed - 0x0000000000000798 0x38 Obj/System.o - 0x0000000000000798 SystemSetRandSeed + 0x000000000000082c 0x38 Obj/System.o + 0x000000000000082c SystemSetRandSeed .text.SystemIncreaseGlobalTimer - 0x00000000000007d0 0x48 Obj/System.o - 0x00000000000007d0 SystemIncreaseGlobalTimer + 0x0000000000000864 0x48 Obj/System.o + 0x0000000000000864 SystemIncreaseGlobalTimer .text.SystemRand - 0x0000000000000818 0x56 Obj/System.o - 0x0000000000000818 SystemRand + 0x00000000000008ac 0x56 Obj/System.o + 0x00000000000008ac SystemRand .text.SystemResetTimers - 0x000000000000086e 0x28 Obj/System.o - 0x000000000000086e SystemResetTimers + 0x0000000000000902 0x28 Obj/System.o + 0x0000000000000902 SystemResetTimers .text.SystemInit - 0x0000000000000896 0x2e Obj/System.o - 0x0000000000000896 SystemInit + 0x000000000000092a 0x2e Obj/System.o + 0x000000000000092a SystemInit .text.SystemCollisionCheck - 0x00000000000008c4 0x94 Obj/System.o - 0x00000000000008c4 SystemCollisionCheck + 0x0000000000000958 0x94 Obj/System.o + 0x0000000000000958 SystemCollisionCheck .text._ZL21GfxIsInsideScreenAreaaahh - 0x0000000000000958 0x2a Obj/Gfx.o - .text._ZN7Display9drawPixelEaa - 0x0000000000000982 0x8e Obj/Gfx.o - 0x0000000000000982 _ZN7Display9drawPixelEaa - .text.GfxInit 0x0000000000000a10 0x10 Obj/Gfx.o - 0x0000000000000a10 GfxInit + 0x00000000000009ec 0x2a Obj/Gfx.o + .text.GfxInit 0x0000000000000a16 0x10 Obj/Gfx.o + 0x0000000000000a16 GfxInit .text.GfxRefreshNeeded - 0x0000000000000a20 0x14 Obj/Gfx.o - 0x0000000000000a20 GfxRefreshNeeded + 0x0000000000000a26 0x14 Obj/Gfx.o + 0x0000000000000a26 GfxRefreshNeeded .text.GfxClearScreen - 0x0000000000000a34 0x12 Obj/Gfx.o - 0x0000000000000a34 GfxClearScreen + 0x0000000000000a3a 0x12 Obj/Gfx.o + 0x0000000000000a3a GfxClearScreen .text.GfxIsSpriteInsideScreenArea - 0x0000000000000a46 0xe Obj/Gfx.o - 0x0000000000000a46 GfxIsSpriteInsideScreenArea + 0x0000000000000a4c 0xe Obj/Gfx.o + 0x0000000000000a4c GfxIsSpriteInsideScreenArea .text.GfxDrawSprite - 0x0000000000000a54 0x58 Obj/Gfx.o - 0x0000000000000a54 GfxDrawSprite + 0x0000000000000a5a 0x5c Obj/Gfx.o + 0x0000000000000a5a GfxDrawSprite .text.GfxGetWidthFromSpriteData - 0x0000000000000aac 0x6 Obj/Gfx.o - 0x0000000000000aac GfxGetWidthFromSpriteData + 0x0000000000000ab6 0x6 Obj/Gfx.o + 0x0000000000000ab6 GfxGetWidthFromSpriteData .text.GfxGetHeightFromSpriteData - 0x0000000000000ab2 0x8 Obj/Gfx.o - 0x0000000000000ab2 GfxGetHeightFromSpriteData + 0x0000000000000abc 0x8 Obj/Gfx.o + 0x0000000000000abc GfxGetHeightFromSpriteData .text.GfxPrintText_Flash - 0x0000000000000aba 0xc Obj/Gfx.o - 0x0000000000000aba GfxPrintText_Flash + 0x0000000000000ac4 0xc Obj/Gfx.o + 0x0000000000000ac4 GfxPrintText_Flash .text.GfxPrintTextFont - 0x0000000000000ac6 0x5a Obj/Gfx.o - 0x0000000000000ac6 GfxPrintTextFont + 0x0000000000000ad0 0x5a Obj/Gfx.o + 0x0000000000000ad0 GfxPrintTextFont .text.GfxDrawCircle - 0x0000000000000b20 0x58 Obj/Gfx.o - 0x0000000000000b20 GfxDrawCircle + 0x0000000000000b2a 0x58 Obj/Gfx.o + 0x0000000000000b2a GfxDrawCircle .text.GfxDrawRectangle - 0x0000000000000b78 0x5e Obj/Gfx.o - 0x0000000000000b78 GfxDrawRectangle + 0x0000000000000b82 0x5e Obj/Gfx.o + 0x0000000000000b82 GfxDrawRectangle .text.GfxFillRectangle - 0x0000000000000bd6 0x5e Obj/Gfx.o - 0x0000000000000bd6 GfxFillRectangle + 0x0000000000000be0 0x5e Obj/Gfx.o + 0x0000000000000be0 GfxFillRectangle .text.PadButtonReleased - 0x0000000000000c34 0x16 Obj/Pad.o - 0x0000000000000c34 PadButtonReleased + 0x0000000000000c3e 0x16 Obj/Pad.o + 0x0000000000000c3e PadButtonReleased .text.PadButtonPressedFrames - 0x0000000000000c4a 0x1c Obj/Pad.o - 0x0000000000000c4a PadButtonPressedFrames + 0x0000000000000c54 0x1c Obj/Pad.o + 0x0000000000000c54 PadButtonPressedFrames .text.PadButtonPressed - 0x0000000000000c66 0x6 Obj/Pad.o - 0x0000000000000c66 PadButtonPressed + 0x0000000000000c70 0x6 Obj/Pad.o + 0x0000000000000c70 PadButtonPressed .text.PadDirectionKeyPressed - 0x0000000000000c6c 0x30 Obj/Pad.o - 0x0000000000000c6c PadDirectionKeyPressed + 0x0000000000000c76 0x30 Obj/Pad.o + 0x0000000000000c76 PadDirectionKeyPressed .text.PadAnyKeyPressed - 0x0000000000000c9c 0x20 Obj/Pad.o - 0x0000000000000c9c PadAnyKeyPressed + 0x0000000000000ca6 0x20 Obj/Pad.o + 0x0000000000000ca6 PadAnyKeyPressed .text._ZN6PlayerC2Ev - 0x0000000000000cbc 0x2 Obj/Player.o - 0x0000000000000cbc _ZN6PlayerC2Ev - 0x0000000000000cbc _ZN6PlayerC1Ev + 0x0000000000000cc6 0x2 Obj/Player.o + 0x0000000000000cc6 _ZN6PlayerC2Ev + 0x0000000000000cc6 _ZN6PlayerC1Ev .text._ZN6PlayerD2Ev - 0x0000000000000cbe 0x2 Obj/Player.o - 0x0000000000000cbe _ZN6PlayerD2Ev - 0x0000000000000cbe _ZN6PlayerD1Ev + 0x0000000000000cc8 0x2 Obj/Player.o + 0x0000000000000cc8 _ZN6PlayerD2Ev + 0x0000000000000cc8 _ZN6PlayerD1Ev .text._ZN6Player10showHealthEh - 0x0000000000000cc0 0x76 Obj/Player.o - 0x0000000000000cc0 _ZN6Player10showHealthEh + 0x0000000000000cca 0x76 Obj/Player.o + 0x0000000000000cca _ZN6Player10showHealthEh .text._ZN6Player13ShowResourcesEv - 0x0000000000000d36 0xe8 Obj/Player.o - 0x0000000000000d36 _ZN6Player13ShowResourcesEv + 0x0000000000000d40 0xe8 Obj/Player.o + 0x0000000000000d40 _ZN6Player13ShowResourcesEv .text._ZN6Player10createUnitE8t_unitid16t_CollisionBlock - 0x0000000000000e1e 0xba Obj/Player.o - 0x0000000000000e1e _ZN6Player10createUnitE8t_unitid16t_CollisionBlock + 0x0000000000000e28 0xba Obj/Player.o + 0x0000000000000e28 _ZN6Player10createUnitE8t_unitid16t_CollisionBlock .text._ZN6Player4InitEv - 0x0000000000000ed8 0x15e Obj/Player.o - 0x0000000000000ed8 _ZN6Player4InitEv + 0x0000000000000ee2 0x15e Obj/Player.o + 0x0000000000000ee2 _ZN6Player4InitEv .text._ZN6Player12GetCursorPosEv - 0x0000000000001036 0x58 Obj/Player.o - 0x0000000000001036 _ZN6Player12GetCursorPosEv + 0x0000000000001040 0x58 Obj/Player.o + 0x0000000000001040 _ZN6Player12GetCursorPosEv .text._ZN6Player21UnitBuildingSelectionEv - 0x000000000000108e 0x114 Obj/Player.o - 0x000000000000108e _ZN6Player21UnitBuildingSelectionEv + 0x0000000000001098 0x114 Obj/Player.o + 0x0000000000001098 _ZN6Player21UnitBuildingSelectionEv .text._ZN6Player14ButtonAPressedEv - 0x00000000000011a2 0x22 Obj/Player.o - 0x00000000000011a2 _ZN6Player14ButtonAPressedEv - .text._ZN6Player16ActionCreateUnitEP6t_Unit - 0x00000000000011c4 0xdc Obj/Player.o - 0x00000000000011c4 _ZN6Player16ActionCreateUnitEP6t_Unit + 0x00000000000011ac 0x22 Obj/Player.o + 0x00000000000011ac _ZN6Player14ButtonAPressedEv + .text._ZN6Player16ActionCreateUnitEP6t_Unit8t_unitid + 0x00000000000011ce 0xd4 Obj/Player.o + 0x00000000000011ce _ZN6Player16ActionCreateUnitEP6t_Unit8t_unitid + .text._ZN6Player20ActionCreateBuildingEP6t_Unit8t_unitid + 0x00000000000012a2 0x4e Obj/Player.o + 0x00000000000012a2 _ZN6Player20ActionCreateBuildingEP6t_Unit8t_unitid .text._ZN6Player15ButtonAReleasedEv - 0x00000000000012a0 0xa8 Obj/Player.o - 0x00000000000012a0 _ZN6Player15ButtonAReleasedEv + 0x00000000000012f0 0xba Obj/Player.o + 0x00000000000012f0 _ZN6Player15ButtonAReleasedEv .text._ZN6Player14ButtonBPressedEv - 0x0000000000001348 0x52 Obj/Player.o - 0x0000000000001348 _ZN6Player14ButtonBPressedEv + 0x00000000000013aa 0x52 Obj/Player.o + 0x00000000000013aa _ZN6Player14ButtonBPressedEv .text._ZN6Player15ButtonBReleasedEv - 0x000000000000139a 0x90 Obj/Player.o - 0x000000000000139a _ZN6Player15ButtonBReleasedEv + 0x00000000000013fc 0x90 Obj/Player.o + 0x00000000000013fc _ZN6Player15ButtonBReleasedEv .text._ZN6Player18ButtonLeftReleasedEv - 0x000000000000142a 0x7c Obj/Player.o - 0x000000000000142a _ZN6Player18ButtonLeftReleasedEv + 0x000000000000148c 0x7c Obj/Player.o + 0x000000000000148c _ZN6Player18ButtonLeftReleasedEv .text._ZN6Player28IncreaseShowActionsMenuIndexEv - 0x00000000000014a6 0x7c Obj/Player.o - 0x00000000000014a6 _ZN6Player28IncreaseShowActionsMenuIndexEv + 0x0000000000001508 0x7c Obj/Player.o + 0x0000000000001508 _ZN6Player28IncreaseShowActionsMenuIndexEv .text._ZN6Player11ActionsMenuEv - 0x0000000000001522 0x8a Obj/Player.o - 0x0000000000001522 _ZN6Player11ActionsMenuEv + 0x0000000000001584 0x8a Obj/Player.o + 0x0000000000001584 _ZN6Player11ActionsMenuEv .text._ZN6Player11DrawHandlerEv - 0x00000000000015ac 0xf8 Obj/Player.o - 0x00000000000015ac _ZN6Player11DrawHandlerEv + 0x000000000000160e 0xf8 Obj/Player.o + 0x000000000000160e _ZN6Player11DrawHandlerEv .text._ZN6Player13ButtonHandlerEv - 0x00000000000016a4 0x90 Obj/Player.o - 0x00000000000016a4 _ZN6Player13ButtonHandlerEv + 0x0000000000001706 0x90 Obj/Player.o + 0x0000000000001706 _ZN6Player13ButtonHandlerEv .text._ZN6Player7HandlerEv - 0x0000000000001734 0x44 Obj/Player.o - 0x0000000000001734 _ZN6Player7HandlerEv + 0x0000000000001796 0x44 Obj/Player.o + 0x0000000000001796 _ZN6Player7HandlerEv .text.CameraInit - 0x0000000000001778 0x16 Obj/Camera.o - 0x0000000000001778 CameraInit + 0x00000000000017da 0x16 Obj/Camera.o + 0x00000000000017da CameraInit .text.CameraApplyCoordinatesToCoordinates - 0x000000000000178e 0x66 Obj/Camera.o - 0x000000000000178e CameraApplyCoordinatesToCoordinates + 0x00000000000017f0 0x66 Obj/Camera.o + 0x00000000000017f0 CameraApplyCoordinatesToCoordinates .text.CameraApplyCoordinatesToSprite - 0x00000000000017f4 0x14 Obj/Camera.o - 0x00000000000017f4 CameraApplyCoordinatesToSprite + 0x0000000000001856 0x14 Obj/Camera.o + 0x0000000000001856 CameraApplyCoordinatesToSprite .text.CameraHandler - 0x0000000000001808 0x13c Obj/Camera.o - 0x0000000000001808 CameraHandler + 0x000000000000186a 0x13c Obj/Camera.o + 0x000000000000186a CameraHandler .text.CameraSetLock - 0x0000000000001944 0x6 Obj/Camera.o - 0x0000000000001944 CameraSetLock + 0x00000000000019a6 0x6 Obj/Camera.o + 0x00000000000019a6 CameraSetLock .text.UnitInit - 0x000000000000194a 0xa8 Obj/Unit.o - 0x000000000000194a UnitInit + 0x00000000000019ac 0xe8 Obj/Unit.o + 0x00000000000019ac UnitInit .text.UnitGetWidthFromID - 0x00000000000019f2 0x14 Obj/Unit.o - 0x00000000000019f2 UnitGetWidthFromID + 0x0000000000001a94 0x14 Obj/Unit.o + 0x0000000000001a94 UnitGetWidthFromID .text.UnitGetHeightFromID - 0x0000000000001a06 0x14 Obj/Unit.o - 0x0000000000001a06 UnitGetHeightFromID + 0x0000000000001aa8 0x14 Obj/Unit.o + 0x0000000000001aa8 UnitGetHeightFromID .text.UnitDraw - 0x0000000000001a1a 0x23c Obj/Unit.o - 0x0000000000001a1a UnitDraw + 0x0000000000001abc 0x23c Obj/Unit.o + 0x0000000000001abc UnitDraw .text.UnitGetHpFromID - 0x0000000000001c56 0xc Obj/Unit.o - 0x0000000000001c56 UnitGetHpFromID + 0x0000000000001cf8 0xc Obj/Unit.o + 0x0000000000001cf8 UnitGetHpFromID .text.UnitMoveTo - 0x0000000000001c62 0x10 Obj/Unit.o - 0x0000000000001c62 UnitMoveTo + 0x0000000000001d04 0x10 Obj/Unit.o + 0x0000000000001d04 UnitMoveTo .text.UnitHandler - 0x0000000000001c72 0x240 Obj/Unit.o - 0x0000000000001c72 UnitHandler + 0x0000000000001d14 0x24c Obj/Unit.o + 0x0000000000001d14 UnitHandler .text.UnitGetAvailableActions - 0x0000000000001eb2 0x10 Obj/Unit.o - 0x0000000000001eb2 UnitGetAvailableActions + 0x0000000000001f60 0x10 Obj/Unit.o + 0x0000000000001f60 UnitGetAvailableActions .text.UnitGetActionString - 0x0000000000001ec2 0x10 Obj/Unit.o - 0x0000000000001ec2 UnitGetActionString + 0x0000000000001f70 0x10 Obj/Unit.o + 0x0000000000001f70 UnitGetActionString .text._Z17MenuGetPlayerNameP6Player - 0x0000000000001ed2 0x18 Obj/Menu.o - 0x0000000000001ed2 _Z17MenuGetPlayerNameP6Player + 0x0000000000001f80 0x18 Obj/Menu.o + 0x0000000000001f80 _Z17MenuGetPlayerNameP6Player .text._Z8MainMenuv - 0x0000000000001eea 0x20 Obj/Menu.o - 0x0000000000001eea _Z8MainMenuv + 0x0000000000001f98 0x20 Obj/Menu.o + 0x0000000000001f98 _Z8MainMenuv .text._ZN7Buttons5beginEv - 0x0000000000001f0a 0x20 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000001f0a _ZN7Buttons5beginEv + 0x0000000000001fb8 0x20 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000001fb8 _ZN7Buttons5beginEv .text._ZN7Buttons6updateEv - 0x0000000000001f2a 0x5a ../lib/libgamebuino.a(Buttons.o) - 0x0000000000001f2a _ZN7Buttons6updateEv + 0x0000000000001fd8 0x5a ../lib/libgamebuino.a(Buttons.o) + 0x0000000000001fd8 _ZN7Buttons6updateEv .text._ZN7Buttons7pressedEh - 0x0000000000001f84 0x12 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000001f84 _ZN7Buttons7pressedEh + 0x0000000000002032 0x12 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000002032 _ZN7Buttons7pressedEh .text._ZN7Buttons8releasedEh - 0x0000000000001f96 0x12 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000001f96 _ZN7Buttons8releasedEh + 0x0000000000002044 0x12 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000002044 _ZN7Buttons8releasedEh .text._ZN7Buttons6repeatEhh - 0x0000000000001fa8 0x2c ../lib/libgamebuino.a(Buttons.o) - 0x0000000000001fa8 _ZN7Buttons6repeatEhh + 0x0000000000002056 0x2c ../lib/libgamebuino.a(Buttons.o) + 0x0000000000002056 _ZN7Buttons6repeatEhh .text._ZN7Buttons8timeHeldEh - 0x0000000000001fd4 0x10 ../lib/libgamebuino.a(Buttons.o) - 0x0000000000001fd4 _ZN7Buttons8timeHeldEh + 0x0000000000002082 0x10 ../lib/libgamebuino.a(Buttons.o) + 0x0000000000002082 _ZN7Buttons8timeHeldEh .text._ZN8SPIClass8transferEh - 0x0000000000001fe4 0xc ../lib/libgamebuino.a(Display.o) - 0x0000000000001fe4 _ZN8SPIClass8transferEh + 0x0000000000002092 0xc ../lib/libgamebuino.a(Display.o) + 0x0000000000002092 _ZN8SPIClass8transferEh + .text._ZN7Display9drawPixelEaa + 0x000000000000209e 0x8e ../lib/libgamebuino.a(Display.o) + 0x000000000000209e _ZN7Display9drawPixelEaa .text._ZN7Display7commandEh - 0x0000000000001ff0 0x3c ../lib/libgamebuino.a(Display.o) - 0x0000000000001ff0 _ZN7Display7commandEh + 0x000000000000212c 0x3c ../lib/libgamebuino.a(Display.o) + 0x000000000000212c _ZN7Display7commandEh .text._ZN7Display5clearEv - 0x000000000000202c 0x22 ../lib/libgamebuino.a(Display.o) - 0x000000000000202c _ZN7Display5clearEv + 0x0000000000002168 0x22 ../lib/libgamebuino.a(Display.o) + 0x0000000000002168 _ZN7Display5clearEv .text._ZN7Display10fillScreenEh - 0x000000000000204e 0x10 ../lib/libgamebuino.a(Display.o) - 0x000000000000204e _ZN7Display10fillScreenEh + 0x000000000000218a 0x10 ../lib/libgamebuino.a(Display.o) + 0x000000000000218a _ZN7Display10fillScreenEh .text._ZN7Display6updateEv - 0x000000000000205e 0x8a ../lib/libgamebuino.a(Display.o) - 0x000000000000205e _ZN7Display6updateEv + 0x000000000000219a 0x8a ../lib/libgamebuino.a(Display.o) + 0x000000000000219a _ZN7Display6updateEv .text._ZN7Display8setColorEa - 0x00000000000020e8 0x8 ../lib/libgamebuino.a(Display.o) - 0x00000000000020e8 _ZN7Display8setColorEa + 0x0000000000002224 0x8 ../lib/libgamebuino.a(Display.o) + 0x0000000000002224 _ZN7Display8setColorEa .text._ZN7Display8setColorEaa - 0x00000000000020f0 0x8 ../lib/libgamebuino.a(Display.o) - 0x00000000000020f0 _ZN7Display8setColorEaa + 0x000000000000222c 0x8 ../lib/libgamebuino.a(Display.o) + 0x000000000000222c _ZN7Display8setColorEaa .text._ZN7Display13drawFastVLineEaaa - 0x00000000000020f8 0x38 ../lib/libgamebuino.a(Display.o) - 0x00000000000020f8 _ZN7Display13drawFastVLineEaaa + 0x0000000000002234 0x38 ../lib/libgamebuino.a(Display.o) + 0x0000000000002234 _ZN7Display13drawFastVLineEaaa .text._ZN7Display13drawFastHLineEaaa - 0x0000000000002130 0x38 ../lib/libgamebuino.a(Display.o) - 0x0000000000002130 _ZN7Display13drawFastHLineEaaa + 0x000000000000226c 0x38 ../lib/libgamebuino.a(Display.o) + 0x000000000000226c _ZN7Display13drawFastHLineEaaa .text._ZN7Display8drawRectEaaaa - 0x0000000000002168 0x50 ../lib/libgamebuino.a(Display.o) - 0x0000000000002168 _ZN7Display8drawRectEaaaa + 0x00000000000022a4 0x50 ../lib/libgamebuino.a(Display.o) + 0x00000000000022a4 _ZN7Display8drawRectEaaaa .text._ZN7Display8fillRectEaaaa - 0x00000000000021b8 0x52 ../lib/libgamebuino.a(Display.o) - 0x00000000000021b8 _ZN7Display8fillRectEaaaa + 0x00000000000022f4 0x52 ../lib/libgamebuino.a(Display.o) + 0x00000000000022f4 _ZN7Display8fillRectEaaaa .text._ZN7Display10drawCircleEaaa - 0x000000000000220a 0x100 ../lib/libgamebuino.a(Display.o) - 0x000000000000220a _ZN7Display10drawCircleEaaa + 0x0000000000002346 0x100 ../lib/libgamebuino.a(Display.o) + 0x0000000000002346 _ZN7Display10drawCircleEaaa .text._ZN7Display16drawCircleHelperEaaah - 0x000000000000230a 0xfc ../lib/libgamebuino.a(Display.o) - 0x000000000000230a _ZN7Display16drawCircleHelperEaaah + 0x0000000000002446 0xfc ../lib/libgamebuino.a(Display.o) + 0x0000000000002446 _ZN7Display16drawCircleHelperEaaah .text._ZN7Display16fillCircleHelperEaaaha - 0x0000000000002406 0xca ../lib/libgamebuino.a(Display.o) - 0x0000000000002406 _ZN7Display16fillCircleHelperEaaaha + 0x0000000000002542 0xca ../lib/libgamebuino.a(Display.o) + 0x0000000000002542 _ZN7Display16fillCircleHelperEaaaha .text._ZN7Display13drawRoundRectEaaaaa - 0x00000000000024d0 0xbe ../lib/libgamebuino.a(Display.o) - 0x00000000000024d0 _ZN7Display13drawRoundRectEaaaaa + 0x000000000000260c 0xbe ../lib/libgamebuino.a(Display.o) + 0x000000000000260c _ZN7Display13drawRoundRectEaaaaa .text._ZN7Display13fillRoundRectEaaaaa - 0x000000000000258e 0x6e ../lib/libgamebuino.a(Display.o) - 0x000000000000258e _ZN7Display13fillRoundRectEaaaaa + 0x00000000000026ca 0x6e ../lib/libgamebuino.a(Display.o) + 0x00000000000026ca _ZN7Display13fillRoundRectEaaaaa .text._ZN7Display10drawBitmapEaaPKh - 0x00000000000025fc 0x280 ../lib/libgamebuino.a(Display.o) - 0x00000000000025fc _ZN7Display10drawBitmapEaaPKh + 0x0000000000002738 0x280 ../lib/libgamebuino.a(Display.o) + 0x0000000000002738 _ZN7Display10drawBitmapEaaPKh .text._ZN7Display10drawBitmapEaaPKhhh - 0x000000000000287c 0x1ce ../lib/libgamebuino.a(Display.o) - 0x000000000000287c _ZN7Display10drawBitmapEaaPKhhh + 0x00000000000029b8 0x1ce ../lib/libgamebuino.a(Display.o) + 0x00000000000029b8 _ZN7Display10drawBitmapEaaPKhhh .text._ZN7Display7setFontEPKh - 0x0000000000002a4a 0x28 ../lib/libgamebuino.a(Display.o) - 0x0000000000002a4a _ZN7Display7setFontEPKh + 0x0000000000002b86 0x28 ../lib/libgamebuino.a(Display.o) + 0x0000000000002b86 _ZN7Display7setFontEPKh .text._ZN7Display5beginEaaaaa - 0x0000000000002a72 0x180 ../lib/libgamebuino.a(Display.o) - 0x0000000000002a72 _ZN7Display5beginEaaaaa + 0x0000000000002bae 0x180 ../lib/libgamebuino.a(Display.o) + 0x0000000000002bae _ZN7Display5beginEaaaaa .text._ZN7Display8drawCharEaahh - 0x0000000000002bf2 0x15c ../lib/libgamebuino.a(Display.o) - 0x0000000000002bf2 _ZN7Display8drawCharEaahh + 0x0000000000002d2e 0x15c ../lib/libgamebuino.a(Display.o) + 0x0000000000002d2e _ZN7Display8drawCharEaahh .text._ZN7Display5writeEh - 0x0000000000002d4e 0x66 ../lib/libgamebuino.a(Display.o) - 0x0000000000002d4e _ZN7Display5writeEh + 0x0000000000002e8a 0x66 ../lib/libgamebuino.a(Display.o) + 0x0000000000002e8a _ZN7Display5writeEh .text._ZN9Gamebuino5popupEPK19__FlashStringHelperh - 0x0000000000002db4 0x16 ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000002db4 _ZN9Gamebuino5popupEPK19__FlashStringHelperh + 0x0000000000002ef0 0x16 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000002ef0 _ZN9Gamebuino5popupEPK19__FlashStringHelperh .text._ZN9Gamebuino11updatePopupEv - 0x0000000000002dca 0xda ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000002dca _ZN9Gamebuino11updatePopupEv + 0x0000000000002f06 0xda ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000002f06 _ZN9Gamebuino11updatePopupEv .text._ZN9Gamebuino14displayBatteryEv - 0x0000000000002ea4 0x160 ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000002ea4 _ZN9Gamebuino14displayBatteryEv + 0x0000000000002fe0 0x160 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000002fe0 _ZN9Gamebuino14displayBatteryEv .text._ZN9Gamebuino6updateEv - 0x0000000000003004 0x170 ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000003004 _ZN9Gamebuino6updateEv + 0x0000000000003140 0x170 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000003140 _ZN9Gamebuino6updateEv .text._ZN9Gamebuino4menuEPKPKch - 0x0000000000003174 0x2a0 ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000003174 _ZN9Gamebuino4menuEPKPKch + 0x00000000000032b0 0x2a0 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000032b0 _ZN9Gamebuino4menuEPKPKch .text._ZN9Gamebuino10changeGameEv - 0x0000000000003414 0x7a ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000003414 _ZN9Gamebuino10changeGameEv + 0x0000000000003550 0x7a ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000003550 _ZN9Gamebuino10changeGameEv .text._ZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKh - 0x000000000000348e 0x270 ../lib/libgamebuino.a(Gamebuino.o) - 0x000000000000348e _ZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKh + 0x00000000000035ca 0x270 ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000035ca _ZN9Gamebuino11titleScreenEPK19__FlashStringHelperPKh .text._ZN9Gamebuino11titleScreenEPK19__FlashStringHelper - 0x00000000000036fe 0x8 ../lib/libgamebuino.a(Gamebuino.o) - 0x00000000000036fe _ZN9Gamebuino11titleScreenEPK19__FlashStringHelper + 0x000000000000383a 0x8 ../lib/libgamebuino.a(Gamebuino.o) + 0x000000000000383a _ZN9Gamebuino11titleScreenEPK19__FlashStringHelper .text._ZN9Gamebuino17settingsAvailableEv - 0x0000000000003706 0x14 ../lib/libgamebuino.a(Gamebuino.o) - 0x0000000000003706 _ZN9Gamebuino17settingsAvailableEv + 0x0000000000003842 0x14 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000003842 _ZN9Gamebuino17settingsAvailableEv .text._ZN9Gamebuino12readSettingsEv - 0x000000000000371a 0xde ../lib/libgamebuino.a(Gamebuino.o) - 0x000000000000371a _ZN9Gamebuino12readSettingsEv + 0x0000000000003856 0xde ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000003856 _ZN9Gamebuino12readSettingsEv .text._ZN9Gamebuino5beginEv - 0x00000000000037f8 0xb6 ../lib/libgamebuino.a(Gamebuino.o) - 0x00000000000037f8 _ZN9Gamebuino5beginEv + 0x0000000000003934 0xb6 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000003934 _ZN9Gamebuino5beginEv .text._ZN9Gamebuino14getDefaultNameEPc - 0x00000000000038ae 0x2c ../lib/libgamebuino.a(Gamebuino.o) - 0x00000000000038ae _ZN9Gamebuino14getDefaultNameEPc + 0x00000000000039ea 0x2c ../lib/libgamebuino.a(Gamebuino.o) + 0x00000000000039ea _ZN9Gamebuino14getDefaultNameEPc .text._ZN5Sound7commandEhhah.part.0 - 0x00000000000038da 0x66 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003a16 0x66 ../lib/libgamebuino.a(Sound.o) .text._ZN5Sound5beginEv - 0x0000000000003940 0x68 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003940 _ZN5Sound5beginEv + 0x0000000000003a7c 0x68 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003a7c _ZN5Sound5beginEv .text._ZN5Sound7commandEhhah - 0x00000000000039a8 0x5e ../lib/libgamebuino.a(Sound.o) - 0x00000000000039a8 _ZN5Sound7commandEhhah + 0x0000000000003ae4 0x5e ../lib/libgamebuino.a(Sound.o) + 0x0000000000003ae4 _ZN5Sound7commandEhhah .text._ZN5Sound12updateOutputEv - 0x0000000000003a06 0x16 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003a06 _ZN5Sound12updateOutputEv + 0x0000000000003b42 0x16 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003b42 _ZN5Sound12updateOutputEv .text._ZN5Sound8stopNoteEh.part.2 - 0x0000000000003a1c 0x1c ../lib/libgamebuino.a(Sound.o) + 0x0000000000003b58 0x1c ../lib/libgamebuino.a(Sound.o) .text._ZN5Sound11playPatternEPKjh.part.5 - 0x0000000000003a38 0x30 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003b74 0x30 ../lib/libgamebuino.a(Sound.o) .text._ZN5Sound11playPatternEPKjh - 0x0000000000003a68 0xa ../lib/libgamebuino.a(Sound.o) - 0x0000000000003a68 _ZN5Sound11playPatternEPKjh + 0x0000000000003ba4 0xa ../lib/libgamebuino.a(Sound.o) + 0x0000000000003ba4 _ZN5Sound11playPatternEPKjh .text._ZN5Sound11updateTrackEh - 0x0000000000003a72 0x5c ../lib/libgamebuino.a(Sound.o) - 0x0000000000003a72 _ZN5Sound11updateTrackEh + 0x0000000000003bae 0x5c ../lib/libgamebuino.a(Sound.o) + 0x0000000000003bae _ZN5Sound11updateTrackEh .text._ZN5Sound11updateTrackEv - 0x0000000000003ace 0x6 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003ace _ZN5Sound11updateTrackEv + 0x0000000000003c0a 0x6 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003c0a _ZN5Sound11updateTrackEv .text._ZN5Sound13updatePatternEh - 0x0000000000003ad4 0xe0 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003ad4 _ZN5Sound13updatePatternEh + 0x0000000000003c10 0xe0 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003c10 _ZN5Sound13updatePatternEh .text._ZN5Sound13updatePatternEv - 0x0000000000003bb4 0x6 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003bb4 _ZN5Sound13updatePatternEv + 0x0000000000003cf0 0x6 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003cf0 _ZN5Sound13updatePatternEv .text._ZN5Sound10updateNoteEh - 0x0000000000003bba 0x182 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003bba _ZN5Sound10updateNoteEh + 0x0000000000003cf6 0x182 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003cf6 _ZN5Sound10updateNoteEh .text._ZN5Sound10updateNoteEv - 0x0000000000003d3c 0x6 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003d3c _ZN5Sound10updateNoteEv + 0x0000000000003e78 0x6 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003e78 _ZN5Sound10updateNoteEv .text._ZN5Sound11stopPatternEh - 0x0000000000003d42 0x16 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003d42 _ZN5Sound11stopPatternEh + 0x0000000000003e7e 0x16 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003e7e _ZN5Sound11stopPatternEh .text._ZN5Sound11stopPatternEv - 0x0000000000003d58 0x12 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003d58 _ZN5Sound11stopPatternEv + 0x0000000000003e94 0x12 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003e94 _ZN5Sound11stopPatternEv .text._ZN5Sound14generateOutputEv - 0x0000000000003d6a 0x54 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003d6a _ZN5Sound14generateOutputEv + 0x0000000000003ea6 0x54 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003ea6 _ZN5Sound14generateOutputEv .text.__vector_11 - 0x0000000000003dbe 0x48 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003dbe __vector_11 + 0x0000000000003efa 0x48 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003efa __vector_11 .text._ZN5Sound6playOKEv - 0x0000000000003e06 0x8 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003e06 _ZN5Sound6playOKEv + 0x0000000000003f42 0x8 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003f42 _ZN5Sound6playOKEv .text._ZN5Sound10playCancelEv - 0x0000000000003e0e 0x8 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003e0e _ZN5Sound10playCancelEv + 0x0000000000003f4a 0x8 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003f4a _ZN5Sound10playCancelEv .text._ZN5Sound8playTickEv - 0x0000000000003e16 0x8 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003e16 _ZN5Sound8playTickEv + 0x0000000000003f52 0x8 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003f52 _ZN5Sound8playTickEv .text._ZN5Sound9setVolumeEa - 0x0000000000003e1e 0x18 ../lib/libgamebuino.a(Sound.o) - 0x0000000000003e1e _ZN5Sound9setVolumeEa + 0x0000000000003f5a 0x18 ../lib/libgamebuino.a(Sound.o) + 0x0000000000003f5a _ZN5Sound9setVolumeEa .text._ZN9Backlight5beginEv - 0x0000000000003e36 0x8 ../lib/libgamebuino.a(Backlight.o) - 0x0000000000003e36 _ZN9Backlight5beginEv + 0x0000000000003f72 0x8 ../lib/libgamebuino.a(Backlight.o) + 0x0000000000003f72 _ZN9Backlight5beginEv .text._ZN9Backlight3setEh - 0x0000000000003e3e 0x8 ../lib/libgamebuino.a(Backlight.o) - 0x0000000000003e3e _ZN9Backlight3setEh + 0x0000000000003f7a 0x8 ../lib/libgamebuino.a(Backlight.o) + 0x0000000000003f7a _ZN9Backlight3setEh .text._ZN9Backlight6updateEv - 0x0000000000003e46 0xbe ../lib/libgamebuino.a(Backlight.o) - 0x0000000000003e46 _ZN9Backlight6updateEv + 0x0000000000003f82 0xbe ../lib/libgamebuino.a(Backlight.o) + 0x0000000000003f82 _ZN9Backlight6updateEv .text._ZN7Battery5beginEv - 0x0000000000003f04 0x14 ../lib/libgamebuino.a(Battery.o) - 0x0000000000003f04 _ZN7Battery5beginEv + 0x0000000000004040 0x14 ../lib/libgamebuino.a(Battery.o) + 0x0000000000004040 _ZN7Battery5beginEv .text._ZN7Battery6updateEv - 0x0000000000003f18 0x70 ../lib/libgamebuino.a(Battery.o) - 0x0000000000003f18 _ZN7Battery6updateEv + 0x0000000000004054 0x70 ../lib/libgamebuino.a(Battery.o) + 0x0000000000004054 _ZN7Battery6updateEv .text.__vector_16 - 0x0000000000003f88 0x94 ../lib/libarduino.a(wiring.o) - 0x0000000000003f88 __vector_16 - .text.millis 0x000000000000401c 0x18 ../lib/libarduino.a(wiring.o) - 0x000000000000401c millis - .text.micros 0x0000000000004034 0x4a ../lib/libarduino.a(wiring.o) - 0x0000000000004034 micros - .text.delay 0x000000000000407e 0x4c ../lib/libarduino.a(wiring.o) - 0x000000000000407e delay - .text.init 0x00000000000040ca 0x76 ../lib/libarduino.a(wiring.o) - 0x00000000000040ca init + 0x00000000000040c4 0x94 ../lib/libarduino.a(wiring.o) + 0x00000000000040c4 __vector_16 + .text.millis 0x0000000000004158 0x18 ../lib/libarduino.a(wiring.o) + 0x0000000000004158 millis + .text.micros 0x0000000000004170 0x4a ../lib/libarduino.a(wiring.o) + 0x0000000000004170 micros + .text.delay 0x00000000000041ba 0x4c ../lib/libarduino.a(wiring.o) + 0x00000000000041ba delay + .text.init 0x0000000000004206 0x76 ../lib/libarduino.a(wiring.o) + 0x0000000000004206 init .text.analogRead - 0x0000000000004140 0x36 ../lib/libarduino.a(wiring_analog.o) - 0x0000000000004140 analogRead + 0x000000000000427c 0x36 ../lib/libarduino.a(wiring_analog.o) + 0x000000000000427c analogRead .text.analogWrite - 0x0000000000004176 0xba ../lib/libarduino.a(wiring_analog.o) - 0x0000000000004176 analogWrite + 0x00000000000042b2 0xba ../lib/libarduino.a(wiring_analog.o) + 0x00000000000042b2 analogWrite .text.turnOffPWM - 0x0000000000004230 0x52 ../lib/libarduino.a(wiring_digital.o) - .text.pinMode 0x0000000000004282 0x78 ../lib/libarduino.a(wiring_digital.o) - 0x0000000000004282 pinMode + 0x000000000000436c 0x52 ../lib/libarduino.a(wiring_digital.o) + .text.pinMode 0x00000000000043be 0x78 ../lib/libarduino.a(wiring_digital.o) + 0x00000000000043be pinMode .text.digitalWrite - 0x00000000000042fa 0x5c ../lib/libarduino.a(wiring_digital.o) - 0x00000000000042fa digitalWrite + 0x0000000000004436 0x5c ../lib/libarduino.a(wiring_digital.o) + 0x0000000000004436 digitalWrite .text.digitalRead - 0x0000000000004356 0x52 ../lib/libarduino.a(wiring_digital.o) - 0x0000000000004356 digitalRead + 0x0000000000004492 0x52 ../lib/libarduino.a(wiring_digital.o) + 0x0000000000004492 digitalRead .text._ZN5Print5writeEPKhj - 0x00000000000043a8 0x50 ../lib/libarduino.a(Print.o) - 0x00000000000043a8 _ZN5Print5writeEPKhj + 0x00000000000044e4 0x50 ../lib/libarduino.a(Print.o) + 0x00000000000044e4 _ZN5Print5writeEPKhj .text._ZN5Print5writeEPKc.part.1 - 0x00000000000043f8 0x1e ../lib/libarduino.a(Print.o) + 0x0000000000004534 0x1e ../lib/libarduino.a(Print.o) .text._ZN5Print5printEPK19__FlashStringHelper - 0x0000000000004416 0x46 ../lib/libarduino.a(Print.o) - 0x0000000000004416 _ZN5Print5printEPK19__FlashStringHelper + 0x0000000000004552 0x46 ../lib/libarduino.a(Print.o) + 0x0000000000004552 _ZN5Print5printEPK19__FlashStringHelper .text._ZN5Print5printEPKc - 0x000000000000445c 0x10 ../lib/libarduino.a(Print.o) - 0x000000000000445c _ZN5Print5printEPKc + 0x0000000000004598 0x10 ../lib/libarduino.a(Print.o) + 0x0000000000004598 _ZN5Print5printEPKc .text._ZN5Print5printEc - 0x000000000000446c 0xe ../lib/libarduino.a(Print.o) - 0x000000000000446c _ZN5Print5printEc + 0x00000000000045a8 0xe ../lib/libarduino.a(Print.o) + 0x00000000000045a8 _ZN5Print5printEc .text._ZN5Print7printlnEv - 0x000000000000447a 0x28 ../lib/libarduino.a(Print.o) - 0x000000000000447a _ZN5Print7printlnEv + 0x00000000000045b6 0x28 ../lib/libarduino.a(Print.o) + 0x00000000000045b6 _ZN5Print7printlnEv .text._ZN5Print7printlnEPK19__FlashStringHelper - 0x00000000000044a2 0x24 ../lib/libarduino.a(Print.o) - 0x00000000000044a2 _ZN5Print7printlnEPK19__FlashStringHelper + 0x00000000000045de 0x24 ../lib/libarduino.a(Print.o) + 0x00000000000045de _ZN5Print7printlnEPK19__FlashStringHelper .text._ZN5Print11printNumberEmh - 0x00000000000044c6 0xb2 ../lib/libarduino.a(Print.o) - 0x00000000000044c6 _ZN5Print11printNumberEmh + 0x0000000000004602 0xb2 ../lib/libarduino.a(Print.o) + 0x0000000000004602 _ZN5Print11printNumberEmh .text._ZN5Print5printEli - 0x0000000000004578 0x94 ../lib/libarduino.a(Print.o) - 0x0000000000004578 _ZN5Print5printEli + 0x00000000000046b4 0x94 ../lib/libarduino.a(Print.o) + 0x00000000000046b4 _ZN5Print5printEli .text._ZN5Print5printEii - 0x000000000000460c 0xe ../lib/libarduino.a(Print.o) - 0x000000000000460c _ZN5Print5printEii + 0x0000000000004748 0xe ../lib/libarduino.a(Print.o) + 0x0000000000004748 _ZN5Print5printEii .text._ZN5Print5printEmi - 0x000000000000461a 0x1a ../lib/libarduino.a(Print.o) - 0x000000000000461a _ZN5Print5printEmi + 0x0000000000004756 0x1a ../lib/libarduino.a(Print.o) + 0x0000000000004756 _ZN5Print5printEmi .text._ZN5Print5printEji - 0x0000000000004634 0xc ../lib/libarduino.a(Print.o) - 0x0000000000004634 _ZN5Print5printEji + 0x0000000000004770 0xc ../lib/libarduino.a(Print.o) + 0x0000000000004770 _ZN5Print5printEji .text._Z3maplllll - 0x0000000000004640 0x82 ../lib/libarduino.a(WMath.o) - 0x0000000000004640 _Z3maplllll + 0x000000000000477c 0x82 ../lib/libarduino.a(WMath.o) + 0x000000000000477c _Z3maplllll .text._ZN8SPIClass5beginEv - 0x00000000000046c2 0x2c ../lib/libarduino.a(SPI.o) - 0x00000000000046c2 _ZN8SPIClass5beginEv + 0x00000000000047fe 0x2c ../lib/libarduino.a(SPI.o) + 0x00000000000047fe _ZN8SPIClass5beginEv .text._ZN8SPIClass11setBitOrderEh - 0x00000000000046ee 0x12 ../lib/libarduino.a(SPI.o) - 0x00000000000046ee _ZN8SPIClass11setBitOrderEh + 0x000000000000482a 0x12 ../lib/libarduino.a(SPI.o) + 0x000000000000482a _ZN8SPIClass11setBitOrderEh .text._ZN8SPIClass11setDataModeEh - 0x0000000000004700 0xa ../lib/libarduino.a(SPI.o) - 0x0000000000004700 _ZN8SPIClass11setDataModeEh + 0x000000000000483c 0xa ../lib/libarduino.a(SPI.o) + 0x000000000000483c _ZN8SPIClass11setDataModeEh .text._ZN8SPIClass15setClockDividerEh - 0x000000000000470a 0x1e ../lib/libarduino.a(SPI.o) - 0x000000000000470a _ZN8SPIClass15setClockDividerEh + 0x0000000000004846 0x1e ../lib/libarduino.a(SPI.o) + 0x0000000000004846 _ZN8SPIClass15setClockDividerEh .text.libgcc.mul - 0x0000000000004728 0x20 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_mulsi3.o) - 0x0000000000004728 __mulsi3 + 0x0000000000004864 0x20 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_mulsi3.o) + 0x0000000000004864 __mulsi3 .text.libgcc.div - 0x0000000000004748 0x18 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_udivmodqi4.o) - 0x0000000000004748 __udivmodqi4 + 0x0000000000004884 0x18 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_udivmodqi4.o) + 0x0000000000004884 __udivmodqi4 .text.libgcc.div - 0x0000000000004760 0x28 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_udivmodhi4.o) - 0x0000000000004760 __udivmodhi4 + 0x000000000000489c 0x28 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_udivmodhi4.o) + 0x000000000000489c __udivmodhi4 .text.libgcc.div - 0x0000000000004788 0x28 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_divmodhi4.o) - 0x0000000000004788 __divmodhi4 - 0x0000000000004788 _div + 0x00000000000048c4 0x28 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_divmodhi4.o) + 0x00000000000048c4 __divmodhi4 + 0x00000000000048c4 _div .text.libgcc.div - 0x00000000000047b0 0x44 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_udivmodsi4.o) - 0x00000000000047b0 __udivmodsi4 + 0x00000000000048ec 0x44 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_udivmodsi4.o) + 0x00000000000048ec __udivmodsi4 .text.libgcc.div - 0x00000000000047f4 0x2e /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_divmodsi4.o) - 0x00000000000047f4 __divmodsi4 + 0x0000000000004930 0x2e /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_divmodsi4.o) + 0x0000000000004930 __divmodsi4 .text.libgcc.div - 0x0000000000004822 0x10 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_negsi2.o) - 0x0000000000004822 __negsi2 + 0x000000000000495e 0x10 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_negsi2.o) + 0x000000000000495e __negsi2 .text.libgcc.mul - 0x0000000000004832 0x16 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_muluhisi3.o) - 0x0000000000004832 __muluhisi3 - .text.libgcc 0x0000000000004848 0x18 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_adddi3_s8.o) - 0x0000000000004848 __adddi3_s8 - .text.libgcc 0x0000000000004860 0xc /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_tablejump2.o) - 0x0000000000004860 __tablejump2__ + 0x000000000000496e 0x16 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_muluhisi3.o) + 0x000000000000496e __muluhisi3 + .text.libgcc 0x0000000000004984 0x18 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_adddi3_s8.o) + 0x0000000000004984 __adddi3_s8 + .text.libgcc 0x000000000000499c 0xc /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_tablejump2.o) + 0x000000000000499c __tablejump2__ .text.libgcc.mul - 0x000000000000486c 0x1e /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_umulhisi3.o) - 0x000000000000486c __umulhisi3 + 0x00000000000049a8 0x1e /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_umulhisi3.o) + 0x00000000000049a8 __umulhisi3 .text.avr-libc.fplib - 0x000000000000488a 0x5e /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fixunssfsi.o) - 0x000000000000488a __fixunssfsi + 0x00000000000049c6 0x5e /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fixunssfsi.o) + 0x00000000000049c6 __fixunssfsi .text.avr-libc.fplib - 0x00000000000048e8 0x7a /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(floatsisf.o) - 0x00000000000048e8 __floatunsisf - 0x00000000000048ec __floatsisf + 0x0000000000004a24 0x7a /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(floatsisf.o) + 0x0000000000004a24 __floatunsisf + 0x0000000000004a28 __floatsisf .text.avr-libc.fplib - 0x0000000000004962 0xc /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_inf.o) - 0x0000000000004962 __fp_inf + 0x0000000000004a9e 0xc /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_inf.o) + 0x0000000000004a9e __fp_inf .text.avr-libc.fplib - 0x000000000000496e 0x6 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_nan.o) - 0x000000000000496e __fp_nan + 0x0000000000004aaa 0x6 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_nan.o) + 0x0000000000004aaa __fp_nan .text.avr-libc.fplib - 0x0000000000004974 0xe /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_pscA.o) - 0x0000000000004974 __fp_pscA + 0x0000000000004ab0 0xe /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_pscA.o) + 0x0000000000004ab0 __fp_pscA .text.avr-libc.fplib - 0x0000000000004982 0xe /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_pscB.o) - 0x0000000000004982 __fp_pscB + 0x0000000000004abe 0xe /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_pscB.o) + 0x0000000000004abe __fp_pscB .text.avr-libc.fplib - 0x0000000000004990 0x22 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_round.o) - 0x0000000000004990 __fp_round + 0x0000000000004acc 0x22 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_round.o) + 0x0000000000004acc __fp_round .text.avr-libc.fplib - 0x00000000000049b2 0x44 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_split3.o) - 0x00000000000049b2 __fp_split3 - 0x00000000000049c2 __fp_splitA + 0x0000000000004aee 0x44 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_split3.o) + 0x0000000000004aee __fp_split3 + 0x0000000000004afe __fp_splitA .text.avr-libc.fplib - 0x00000000000049f6 0xe /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_zero.o) - 0x00000000000049f6 __fp_zero - 0x00000000000049f8 __fp_szero + 0x0000000000004b32 0xe /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(fp_zero.o) + 0x0000000000004b32 __fp_zero + 0x0000000000004b34 __fp_szero .text.avr-libc.fplib - 0x0000000000004a04 0x8 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(mulsf3.o) - 0x0000000000004a04 __mulsf3 + 0x0000000000004b40 0x8 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(mulsf3.o) + 0x0000000000004b40 __mulsf3 .text.avr-libc.fplib - 0x0000000000004a0c 0xd2 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(mulsf3x.o) - 0x0000000000004a2a __mulsf3x - 0x0000000000004a30 __mulsf3_pse + 0x0000000000004b48 0xd2 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libm.a(mulsf3x.o) + 0x0000000000004b66 __mulsf3x + 0x0000000000004b6c __mulsf3_pse .text.avr-libc - 0x0000000000004ade 0xb8 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(rand.o) - 0x0000000000004b70 rand_r - 0x0000000000004b76 rand - 0x0000000000004b80 srand + 0x0000000000004c1a 0xb8 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(rand.o) + 0x0000000000004cac rand_r + 0x0000000000004cb2 rand + 0x0000000000004cbc srand .text.avr-libc - 0x0000000000004b96 0xe /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(memset.o) - 0x0000000000004b96 memset + 0x0000000000004cd2 0xe /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(memset.o) + 0x0000000000004cd2 memset .text.avr-libc - 0x0000000000004ba4 0x60 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(snprintf.o) - 0x0000000000004ba4 snprintf + 0x0000000000004ce0 0x60 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(snprintf.o) + 0x0000000000004ce0 snprintf .text.avr-libc - 0x0000000000004c04 0x3b4 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) - 0x0000000000004c04 vfprintf + 0x0000000000004d40 0x3b4 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(vfprintf_std.o) + 0x0000000000004d40 vfprintf .text.avr-libc - 0x0000000000004fb8 0x16 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(strnlen_P.o) - 0x0000000000004fb8 strnlen_P + 0x00000000000050f4 0x16 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(strnlen_P.o) + 0x00000000000050f4 strnlen_P .text.avr-libc - 0x0000000000004fce 0x16 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(strnlen.o) - 0x0000000000004fce strnlen + 0x000000000000510a 0x16 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(strnlen.o) + 0x000000000000510a strnlen .text.avr-libc - 0x0000000000004fe4 0x60 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(fputc.o) - 0x0000000000004fe4 fputc + 0x0000000000005120 0x60 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(fputc.o) + 0x0000000000005120 fputc .text.avr-libc - 0x0000000000005044 0xbc /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(ultoa_invert.o) - 0x0000000000005044 __ultoa_invert + 0x0000000000005180 0xbc /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(ultoa_invert.o) + 0x0000000000005180 __ultoa_invert .text.libgcc.mul - 0x0000000000005100 0x10 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_mulshisi3.o) - 0x0000000000005100 __mulshisi3 - 0x0000000000005106 __mulohisi3 + 0x000000000000523c 0x10 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_mulshisi3.o) + 0x000000000000523c __mulshisi3 + 0x0000000000005242 __mulohisi3 .text.libgcc.prologue - 0x0000000000005110 0x38 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_prologue.o) - 0x0000000000005110 __prologue_saves__ + 0x000000000000524c 0x38 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_prologue.o) + 0x000000000000524c __prologue_saves__ .text.libgcc.prologue - 0x0000000000005148 0x36 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_epilogue.o) - 0x0000000000005148 __epilogue_restores__ - 0x000000000000517e . = ALIGN (0x2) + 0x0000000000005284 0x36 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_epilogue.o) + 0x0000000000005284 __epilogue_restores__ + 0x00000000000052ba . = ALIGN (0x2) *(.fini9) - .fini9 0x000000000000517e 0x0 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_exit.o) - 0x000000000000517e exit - 0x000000000000517e _exit + .fini9 0x00000000000052ba 0x0 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_exit.o) + 0x00000000000052ba exit + 0x00000000000052ba _exit *(.fini9) *(.fini8) *(.fini8) *(.fini7) *(.fini7) *(.fini6) - .fini6 0x000000000000517e 0x16 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_dtors.o) - 0x000000000000517e __do_global_dtors + .fini6 0x00000000000052ba 0x16 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_dtors.o) + 0x00000000000052ba __do_global_dtors *(.fini6) *(.fini5) *(.fini5) @@ -2077,16 +2081,16 @@ END GROUP *(.fini1) *(.fini1) *(.fini0) - .fini0 0x0000000000005194 0x4 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_exit.o) + .fini0 0x00000000000052d0 0x4 /usr/local/avr/lib/gcc/avr/7.2.0/avr5/libgcc.a(_exit.o) *(.fini0) *(.hightext) *(.hightext*) - 0x0000000000005198 . = ALIGN (0x2) + 0x00000000000052d4 . = ALIGN (0x2) *(.jumptables) *(.jumptables*) - 0x0000000000005198 _etext = . + 0x00000000000052d4 _etext = . -.data 0x0000000000800100 0x58 load address 0x0000000000005198 +.data 0x0000000000800100 0x5e load address 0x00000000000052d4 0x0000000000800100 PROVIDE (__data_start, .) *(.data) .data 0x0000000000800100 0x4 /usr/local/avr/lib/gcc/avr/7.2.0/../../../../avr/lib/avr5/libc.a(rand.o) @@ -2104,93 +2108,92 @@ END GROUP .rodata._ZN6Player13ShowResourcesEv.str1.1 0x000000000080010c 0xf Obj/Player.o .rodata.UnitShadowOffsetTable - 0x000000000080011b 0x4 Obj/Unit.o + 0x000000000080011b 0x6 Obj/Unit.o .rodata.UnitActionsTable - 0x000000000080011f 0x5 Obj/Unit.o + 0x0000000000800121 0x6 Obj/Unit.o .rodata.str1.1 - 0x0000000000800124 0x14 Obj/Unit.o + 0x0000000000800127 0x16 Obj/Unit.o .rodata.UnitActionsTable_Level - 0x0000000000800138 0x6 Obj/Unit.o + 0x000000000080013d 0x6 Obj/Unit.o .rodata.UnitSpeedTable - 0x000000000080013e 0x5 Obj/Unit.o + 0x0000000000800143 0x6 Obj/Unit.o .rodata.UnitHPTable - 0x0000000000800143 0x5 Obj/Unit.o + 0x0000000000800149 0x6 Obj/Unit.o .rodata._ZTV7Display - 0x0000000000800148 0x8 ../lib/libgamebuino.a(Display.o) - 0x0000000000800148 _ZTV7Display + 0x000000000080014f 0x8 ../lib/libgamebuino.a(Display.o) + 0x000000000080014f _ZTV7Display .rodata._ZN9Gamebuino10changeGameEv.str1.1 - 0x0000000000800150 0x7 ../lib/libgamebuino.a(Gamebuino.o) + 0x0000000000800157 0x7 ../lib/libgamebuino.a(Gamebuino.o) *(.gnu.linkonce.r*) - 0x0000000000800158 . = ALIGN (0x2) - *fill* 0x0000000000800157 0x1 - 0x0000000000800158 _edata = . - 0x0000000000800158 PROVIDE (__data_end, .) + 0x000000000080015e . = ALIGN (0x2) + 0x000000000080015e _edata = . + 0x000000000080015e PROVIDE (__data_end, .) -.bss 0x0000000000800158 0x607 - 0x0000000000800158 PROVIDE (__bss_start, .) +.bss 0x000000000080015e 0x61a + 0x000000000080015e PROVIDE (__bss_start, .) *(.bss) *(.bss*) - .bss.gb 0x0000000000800158 0x87 Obj/main.o - 0x0000000000800158 gb + .bss.gb 0x000000000080015e 0x87 Obj/main.o + 0x000000000080015e gb .bss._ZL8MouseSpr - 0x00000000008001df 0x9 Obj/Gameplay.o + 0x00000000008001e5 0x9 Obj/Gameplay.o .bss.GamePlayers - 0x00000000008001e8 0x2a3 Obj/Gameplay.o - 0x00000000008001e8 GamePlayers + 0x00000000008001ee 0x2a4 Obj/Gameplay.o + 0x00000000008001ee GamePlayers .bss.timer_array - 0x000000000080048b 0x60 Obj/System.o + 0x0000000000800492 0x60 Obj/System.o .bss.system_busy - 0x00000000008004eb 0x1 Obj/System.o + 0x00000000008004f2 0x1 Obj/System.o .bss.one_second_timer - 0x00000000008004ec 0x1 Obj/System.o + 0x00000000008004f3 0x1 Obj/System.o .bss.rand_seed - 0x00000000008004ed 0x1 Obj/System.o + 0x00000000008004f4 0x1 Obj/System.o .bss.global_timer - 0x00000000008004ee 0x8 Obj/System.o + 0x00000000008004f5 0x8 Obj/System.o .bss.UnitWalkingShadowSprTable - 0x00000000008004f6 0x2d Obj/Unit.o + 0x00000000008004fd 0x36 Obj/Unit.o .bss.UnitSprTable - 0x0000000000800523 0x2d Obj/Unit.o + 0x0000000000800533 0x36 Obj/Unit.o .bss._displayBuffer - 0x0000000000800550 0x200 ../lib/libgamebuino.a(Display.o) - 0x0000000000800550 _displayBuffer + 0x0000000000800569 0x200 ../lib/libgamebuino.a(Display.o) + 0x0000000000800569 _displayBuffer .bss._chanNoise - 0x0000000000800750 0x1 ../lib/libgamebuino.a(Sound.o) - 0x0000000000800750 _chanNoise + 0x0000000000800769 0x1 ../lib/libgamebuino.a(Sound.o) + 0x0000000000800769 _chanNoise .bss._chanOutput - 0x0000000000800751 0x1 ../lib/libgamebuino.a(Sound.o) - 0x0000000000800751 _chanOutput + 0x000000000080076a 0x1 ../lib/libgamebuino.a(Sound.o) + 0x000000000080076a _chanOutput .bss._chanOutputVolume - 0x0000000000800752 0x1 ../lib/libgamebuino.a(Sound.o) - 0x0000000000800752 _chanOutputVolume + 0x000000000080076b 0x1 ../lib/libgamebuino.a(Sound.o) + 0x000000000080076b _chanOutputVolume .bss._chanHalfPeriod - 0x0000000000800753 0x1 ../lib/libgamebuino.a(Sound.o) - 0x0000000000800753 _chanHalfPeriod + 0x000000000080076c 0x1 ../lib/libgamebuino.a(Sound.o) + 0x000000000080076c _chanHalfPeriod .bss._chanState - 0x0000000000800754 0x1 ../lib/libgamebuino.a(Sound.o) - 0x0000000000800754 _chanState + 0x000000000080076d 0x1 ../lib/libgamebuino.a(Sound.o) + 0x000000000080076d _chanState .bss._chanCount - 0x0000000000800755 0x1 ../lib/libgamebuino.a(Sound.o) - 0x0000000000800755 _chanCount + 0x000000000080076e 0x1 ../lib/libgamebuino.a(Sound.o) + 0x000000000080076e _chanCount .bss.timer0_fract - 0x0000000000800756 0x1 ../lib/libarduino.a(wiring.o) + 0x000000000080076f 0x1 ../lib/libarduino.a(wiring.o) .bss.timer0_millis - 0x0000000000800757 0x4 ../lib/libarduino.a(wiring.o) - 0x0000000000800757 timer0_millis + 0x0000000000800770 0x4 ../lib/libarduino.a(wiring.o) + 0x0000000000800770 timer0_millis .bss.timer0_overflow_count - 0x000000000080075b 0x4 ../lib/libarduino.a(wiring.o) - 0x000000000080075b timer0_overflow_count + 0x0000000000800774 0x4 ../lib/libarduino.a(wiring.o) + 0x0000000000800774 timer0_overflow_count *(COMMON) - 0x000000000080075f PROVIDE (__bss_end, .) - 0x0000000000005198 __data_load_start = LOADADDR (.data) - 0x00000000000051f0 __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x0000000000800778 PROVIDE (__bss_end, .) + 0x00000000000052d4 __data_load_start = LOADADDR (.data) + 0x0000000000005332 __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x000000000080075f 0x0 +.noinit 0x0000000000800778 0x0 [!provide] PROVIDE (__noinit_start, .) *(.noinit*) [!provide] PROVIDE (__noinit_end, .) - 0x000000000080075f _end = . - 0x000000000080075f PROVIDE (__heap_start, .) + 0x0000000000800778 _end = . + 0x0000000000800778 PROVIDE (__heap_start, .) .eeprom 0x0000000000810000 0x0 *(.eeprom*) diff --git a/Gameplay.cpp b/Gameplay.cpp index bcada48..aceca8f 100644 --- a/Gameplay.cpp +++ b/Gameplay.cpp @@ -3,8 +3,9 @@ * **************************************/ #include "Gameplay.h" -#include "MouseSpr.c" +#include "MouseSpr.i" #include "Pad.h" +#include "Camera.h" /* ************************************** * Defines * @@ -24,7 +25,7 @@ static const char PauseMenuOption_0[] PROGMEM = "Resume"; static const char PauseMenuOption_1[] PROGMEM = "Quit"; static TYPE_SPRITE MouseSpr; -static const char* const PauseMenuOptions[] PROGMEM = {PauseMenuOption_0, +static const char* const PauseMenuOptions[] PROGMEM = { PauseMenuOption_0, PauseMenuOption_1 }; /* ************************************** @@ -36,48 +37,9 @@ static void GameGraphics(void); static bool GamePause(void); static void GameLoop(void); -/* - -const byte TowerSpr[] PROGMEM = {16,32, -0xF,0xF0, -0x8,0x10, -0x8,0x10, -0xF,0xF0, -0x8,0x10, -0x8,0x10, -0x8,0x10, -0x8,0x10, -0x1B,0xD8, -0x2A,0x54, -0x4A,0x52, -0xFB,0xDF, -0x8,0x10, -0x8,0x10, -0x8,0x10, -0x9,0x90, -0x9,0x90, -0x8,0x10, -0x8,0x10, -0x8,0x10, -0x8,0x10, -0x9,0x90, -0x9,0x90, -0x8,0x10, -0x8,0x10, -0x8,0x10, -0x8,0x10, -0x8,0x10, -0xB,0xD0, -0xA,0x50, -0xA,0x50, -0xF,0xF0, -};*/ - void GameInit(void) { - uint8_t i; - - for (i = 0; i < GAME_MAX_PLAYERS; i++) + for (uint8_t i = 0; i < GAME_MAX_PLAYERS; i++) { GamePlayers[i].Init(); } @@ -100,7 +62,6 @@ bool GamePause(void) { if (PadButtonReleased(PAD_C) == true) { - //int8_t menu(const char* const* items, uint8_t length); uint8_t choice = gb.menu(PauseMenuOptions, 2); if (choice != 0) diff --git a/Gameplay.h b/Gameplay.h index 98bb76d..b7179c2 100644 --- a/Gameplay.h +++ b/Gameplay.h @@ -12,7 +12,11 @@ * Defines * * **************************************/ -#define GAME_MAX_PLAYERS 1 +#define GAME_MAX_PLAYERS 1 + +/* ************************************** + * Structs and enums * + * **************************************/ /* ************************************** * Global prototypes * diff --git a/Gfx.cpp b/Gfx.cpp index 77664b4..45ad6a4 100644 --- a/Gfx.cpp +++ b/Gfx.cpp @@ -24,8 +24,13 @@ void GfxInit(void) gb.display.setFont(font3x5); } -void GfxDrawSprite(TYPE_SPRITE * ptrSprite) +void GfxDrawSprite(TYPE_SPRITE* ptrSprite) { + if (ptrSprite == NULL) + { + return; + } + if (GfxIsSpriteInsideScreenArea(ptrSprite) == true) { int8_t orig_color = gb.display.getColor(); @@ -84,7 +89,7 @@ bool GfxIsInsideScreenArea(int8_t x, int8_t y, uint8_t w, uint8_t h) return false; } -bool GfxIsSpriteInsideScreenArea(TYPE_SPRITE * spr) +bool GfxIsSpriteInsideScreenArea(TYPE_SPRITE* spr) { return GfxIsInsideScreenArea(spr->x, spr->y, spr->w, spr->h); } @@ -125,50 +130,6 @@ void GfxPrintTextFont(const char* str, const uint8_t* font, uint8_t x, uint8_t y } } -void GfxRenderTiles(TYPE_CAMERA* ptrCamera) -{ - gb.display.setColor(GFX_GRAY); - - if (ptrCamera == NULL) - { - return; - } - - for (int i = 0; i < Y_SCREEN_RESOLUTION; i+=8) - { - for (int j = 0; j < X_SCREEN_RESOLUTION; j++) - { - //if (j & 1) - //{ - int x = j + ptrCamera->X_Offset; - int y = i + ptrCamera->Y_Offset; - - if ((x >= 0) && (y >= 0)) - { - gb.display.drawPixel(j + ptrCamera->X_Offset, i + ptrCamera->Y_Offset); - } - //} - } - } - - for (int i = 0; i < X_SCREEN_RESOLUTION; i+=8) - { - for (int j = 0; j < Y_SCREEN_RESOLUTION; j++) - { - //if (j & 1) - //{ - int x = j + ptrCamera->X_Offset; - int y = i + ptrCamera->Y_Offset; - - if ((x >= 0) && (y >= 0)) - { - gb.display.drawPixel(i + ptrCamera->X_Offset, j + ptrCamera->Y_Offset); - } - //} - } - } -} - void GfxPrintText(const char* str, uint8_t x, uint8_t y) { GfxPrintTextFont(str, font3x5, x, y); diff --git a/Gfx.h b/Gfx.h index 7617f62..e42e25b 100644 --- a/Gfx.h +++ b/Gfx.h @@ -59,7 +59,7 @@ typedef struct t_Camera TYPE_CAMERA; * Global prototypes * *************************************/ -void GfxDrawSprite(TYPE_SPRITE * ptrSprite); +void GfxDrawSprite(TYPE_SPRITE* ptrSprite); void GfxDrawCircle(uint16_t x, uint16_t y, uint8_t radius, int8_t color); void GfxDrawRectangle(uint8_t x, uint8_t y, uint8_t w, uint8_t h, int8_t color); void GfxFillRectangle(uint8_t x, uint8_t y, uint8_t w, uint8_t h, int8_t color); @@ -68,7 +68,7 @@ bool GfxRefreshNeeded(void); void GfxShowKeyboard(char* str, uint8_t length); uint8_t GfxGetWidthFromSpriteData(const uint8_t* sprData); uint8_t GfxGetHeightFromSpriteData(const uint8_t* sprData); -bool GfxIsSpriteInsideScreenArea(TYPE_SPRITE * spr); +bool GfxIsSpriteInsideScreenArea(TYPE_SPRITE* spr); void GfxClearScreen(void); #ifdef __cplusplus void GfxPrintText_Flash(const __FlashStringHelper * str); @@ -76,7 +76,6 @@ void GfxPrintText_Flash(const __FlashStringHelper * str); void GfxPrintText(const char* str, uint8_t x, uint8_t y); void GfxPrintTextFont(const char* str, const uint8_t* font, uint8_t x, uint8_t y); void GfxInit(void); -void GfxRenderTiles(TYPE_CAMERA* ptrCamera); #ifdef __cplusplus } diff --git a/Libs/libarduino/Makefile b/Libs/libarduino/Makefile index a3f5e1d..4f05c46 100644 --- a/Libs/libarduino/Makefile +++ b/Libs/libarduino/Makefile @@ -21,7 +21,7 @@ $(LIBNAME): $(OBJECTS) %.o: %.cpp $(CXX) $< -o $@ $(INCLUDE) $(DEFINE) $(CC_FLAGS) - + %.o: %.c $(CC) $< -o $@ $(INCLUDE) $(DEFINE) $(CC_FLAGS) diff --git a/Libs/libgamebuino/Makefile b/Libs/libgamebuino/Makefile index 28b1e4a..ae98d12 100644 --- a/Libs/libgamebuino/Makefile +++ b/Libs/libgamebuino/Makefile @@ -30,5 +30,5 @@ $(LIBNAME): $(OBJECTS) clean: rm -f $(OBJECTS) rm -f $(LIBS_FOLDER)/$(LIBNAME) - + .PHONY: default clean diff --git a/Libs/petit_fatfs/Makefile b/Libs/petit_fatfs/Makefile index 0d95ef8..6e96f51 100644 --- a/Libs/petit_fatfs/Makefile +++ b/Libs/petit_fatfs/Makefile @@ -12,7 +12,7 @@ LIBNAME=lib$(PROJECT).a OBJECTS=mmc.o petit_fatfs.o pff.o default: $(LIBNAME) - + $(LIBNAME): $(OBJECTS) avr-ar rcs $@ $^ mkdir -p $(INCLUDE_FOLDER)/$(PROJECT) @@ -22,12 +22,12 @@ $(LIBNAME): $(OBJECTS) %.o: %.cpp $(CXX) $< -o $@ $(DEFINE) $(INCLUDE) $(CC_FLAGS) - + %.o: %.c $(CC) $< -o $@ $(DEFINE) $(INCLUDE) $(CC_FLAGS) clean: rm -f $(OBJECTS) rm -f $(LIBS_FOLDER)/$(LIBNAME) - + .PHONY: default clean diff --git a/Libs/tinyFAT/Makefile b/Libs/tinyFAT/Makefile index b99505f..734ff67 100644 --- a/Libs/tinyFAT/Makefile +++ b/Libs/tinyFAT/Makefile @@ -21,7 +21,7 @@ $(LIBNAME): $(OBJECTS) %.o: %.cpp $(CXX) $< -o $@ $(INCLUDE) $(DEFINE) $(CC_FLAGS) - + %.o: %.c $(CC) $< -o $@ $(INCLUDE) $(DEFINE) $(CC_FLAGS) diff --git a/MouseSpr.c b/MouseSpr.i similarity index 100% rename from MouseSpr.c rename to MouseSpr.i diff --git a/PeasantSpr.inc b/PeasantSpr.i similarity index 100% rename from PeasantSpr.inc rename to PeasantSpr.i diff --git a/Player.cpp b/Player.cpp index b9c05a4..4295da1 100644 --- a/Player.cpp +++ b/Player.cpp @@ -5,7 +5,7 @@ #include "Player.h" #include "Pad.h" #include "Unit.h" -#include +#include "Gameplay.h" /* ************************************** * Defines * @@ -53,7 +53,7 @@ void Player::Init(void) cb.x = SystemRand(0, 20); cb.y = SystemRand(0, 20); - if (createUnit(BARRACKS, cb) == false) + if (createUnit(TOWN_CENTER, cb) == false) { GfxPrintText_Flash(F("Failed to create building!")); } @@ -104,8 +104,6 @@ void Player::DrawHandler(void) uint8_t i; bool bAnyoneSelected = false; - //GfxRenderTiles(&Camera); - for (i = 0; i < PLAYER_MAX_UNITS_BUILDINGS; i++) { TYPE_UNIT* u = &units[i]; @@ -318,7 +316,7 @@ void Player::ActionsMenu(void) IncreaseShowActionsMenuIndex(); } - UNIT_ACTION action = (UNIT_ACTION) (showActionsMenu_index); + UNIT_ACTION action = (UNIT_ACTION)(showActionsMenu_index); const char* str = UnitGetActionString(action); @@ -371,8 +369,6 @@ void Player::ButtonHandler(void) { ButtonRightReleased(); } - - } void Player::ButtonAPressed(void) @@ -418,10 +414,19 @@ void Player::ButtonAReleased(void) if (ptrUnit->selected == true) { + showActionsMenu_counterLevel1 = 0; + switch (showActionsMenu_index) { - case ACTION_CREATE_UNIT: - ActionCreateUnit(ptrUnit); + case ACTION_CREATE_PEASANT: + ActionCreateUnit(ptrUnit, PEASANT); + break; + + case ACTION_BUILD_BARRACKS: + ActionCreateBuilding(ptrUnit, BARRACKS); + break; + + default: break; } @@ -433,18 +438,22 @@ void Player::ButtonAReleased(void) showActionsMenu = (showActionsMenu_counter < ACCEPT_UNIT_BUILDING_OPTIONS_FRAMES)? false: true; } -void Player::ActionCreateUnit(TYPE_UNIT* ptrUnit) +void Player::ActionCreateUnit(TYPE_UNIT* ptrUnit, TYPE_UNIT_ID unit) { - if (showActionsMenu_index == ACTION_CREATE_UNIT) - { - uint8_t w = UnitGetWidthFromID(ptrUnit->id); - uint8_t h = UnitGetHeightFromID(ptrUnit->id); - uint8_t new_pos_x = ptrUnit->x + SystemRand(w, w + (w >> 1)); - uint8_t new_pos_y = ptrUnit->y + SystemRand(h, h + (h >> 1)); - TYPE_COLLISION_BLOCK cb = {.x = new_pos_x, .y = new_pos_y}; + uint8_t w = UnitGetWidthFromID(ptrUnit->id); + uint8_t h = UnitGetHeightFromID(ptrUnit->id); + uint8_t new_pos_x = ptrUnit->x + SystemRand(w, w + (w >> 1)); + uint8_t new_pos_y = ptrUnit->y + SystemRand(h, h + (h >> 1)); + TYPE_COLLISION_BLOCK cb = {.x = new_pos_x, .y = new_pos_y}; - createUnit(PEASANT, cb); - } + createUnit(unit, cb); +} + +void Player::ActionCreateBuilding(TYPE_UNIT* ptrUnit, TYPE_UNIT_ID bldg) +{ + TYPE_COLLISION_BLOCK cb = GetCursorPos(); + + createUnit(bldg, cb); } void Player::ButtonBPressed(void) diff --git a/Player.h b/Player.h index 36b5e94..07101ed 100644 --- a/Player.h +++ b/Player.h @@ -61,6 +61,9 @@ class Player // Camera handling TYPE_CAMERA Camera; + // Map rendering + void RenderMap(void); + // Button pressed/released events void ButtonLeftReleased(void); void ButtonRightReleased(void); @@ -85,10 +88,12 @@ class Player bool showActionsMenu; uint8_t showActionsMenu_counter; uint8_t showActionsMenu_index; + uint8_t showActionsMenu_counterLevel1; void IncreaseShowActionsMenuIndex(); // Action callbacks - void ActionCreateUnit (TYPE_UNIT* ptrUnit); + void ActionCreateUnit(TYPE_UNIT* ptrUnit, TYPE_UNIT_ID unit); + void ActionCreateBuilding(TYPE_UNIT* ptrUnit, TYPE_UNIT_ID bldg); }; #endif // __cplusplus diff --git a/Sprites/.directory b/Sprites/.directory new file mode 100644 index 0000000..1f60e19 --- /dev/null +++ b/Sprites/.directory @@ -0,0 +1,4 @@ +[Dolphin] +PreviewsShown=true +Timestamp=2017,11,5,4,13,19 +Version=3 diff --git a/Sprites/TownCentre.bmp b/Sprites/TownCentre.bmp new file mode 100644 index 0000000..b2203d4 Binary files /dev/null and b/Sprites/TownCentre.bmp differ diff --git a/Sprites/TownCentreShadow.bmp b/Sprites/TownCentreShadow.bmp new file mode 100644 index 0000000..cb7dc6c Binary files /dev/null and b/Sprites/TownCentreShadow.bmp differ diff --git a/TowerSpr.i b/TowerSpr.i new file mode 100644 index 0000000..ea693de --- /dev/null +++ b/TowerSpr.i @@ -0,0 +1,33 @@ +const byte TowerSpr[] PROGMEM = { 16,32, + 0xF,0xF0, + 0x8,0x10, + 0x8,0x10, + 0xF,0xF0, + 0x8,0x10, + 0x8,0x10, + 0x8,0x10, + 0x8,0x10, + 0x1B,0xD8, + 0x2A,0x54, + 0x4A,0x52, + 0xFB,0xDF, + 0x8,0x10, + 0x8,0x10, + 0x8,0x10, + 0x9,0x90, + 0x9,0x90, + 0x8,0x10, + 0x8,0x10, + 0x8,0x10, + 0x8,0x10, + 0x9,0x90, + 0x9,0x90, + 0x8,0x10, + 0x8,0x10, + 0x8,0x10, + 0x8,0x10, + 0x8,0x10, + 0xB,0xD0, + 0xA,0x50, + 0xA,0x50, + 0xF,0xF0, }; diff --git a/TownCentre.i b/TownCentre.i new file mode 100644 index 0000000..6d78342 --- /dev/null +++ b/TownCentre.i @@ -0,0 +1,53 @@ +const uint8_t TownCentreSprData[] PROGMEM = {24,24, +0x3,0xFF,0xC0, +0xC,0x0,0x30, +0x37,0xFF,0xEC, +0x78,0x0,0x16, +0xAF,0xFF,0xF5, +0xA8,0x0,0x15, +0xA8,0xFF,0x15, +0xA8,0x81,0x15, +0xA8,0xFF,0xD5, +0xAB,0x81,0x55, +0xAA,0xA5,0xD5, +0xAB,0x81,0x55, +0xAA,0xA5,0x55, +0xAB,0x81,0xD5, +0xA8,0x99,0x15, +0xA8,0xFF,0x15, +0xA6,0x0,0x65, +0x91,0xC3,0x89, +0x8C,0x42,0x31, +0x83,0xC3,0xC1, +0x40,0x42,0x2, +0x30,0x42,0xC, +0xC,0x42,0x30, +0x3,0xC3,0xC0, +}; + +const uint8_t TownCentreShadowSprData[] PROGMEM = {24,24, +0x1F,0x80,0x0, +0x7E,0x0,0x0, +0xF8,0x0,0x0, +0xF0,0x0,0x0, +0xE0,0x0,0x0, +0xE0,0x0,0x4, +0xE0,0x0,0x4, +0xE0,0x0,0x4, +0xE2,0xE0,0x4, +0xE2,0x80,0x4, +0xE2,0x80,0x4, +0xE2,0x80,0x4, +0xE2,0x80,0x4, +0xE2,0x80,0x4, +0xE2,0xE0,0x4, +0xE0,0x60,0xC, +0xE0,0x0,0x10, +0xE0,0x0,0x0, +0xE0,0x0,0x0, +0xE0,0x1,0x80, +0xF0,0x1,0x80, +0xF8,0x1,0x80, +0x7E,0x1,0x80, +0x1F,0x81,0x80, +}; diff --git a/Unit.c b/Unit.c index 7d12666..26beae0 100644 --- a/Unit.c +++ b/Unit.c @@ -3,8 +3,9 @@ * **************************************/ #include "Unit.h" -#include "PeasantSpr.inc" -#include "BarracksSpr.inc" +#include "PeasantSpr.i" +#include "BarracksSpr.i" +#include "TownCentre.i" /* ************************************** * Defines * @@ -30,33 +31,32 @@ struct t_coordinates /* Tables */ static uint8_t const UnitHPTable[MAX_UNITS_BUILDINGS] = { [PEASANT] = 25 , - [BARRACKS] = 100 }; -static uint8_t const UnitSpeedTable[MAX_UNITS_BUILDINGS] = { [PEASANT] = 1 , - [BARRACKS] = 0 }; + [BARRACKS] = 100, + [TOWN_CENTER] = 200 }; -static const char* const UnitActionsTable_Level[MAX_ACTIONS] = { [ACTION_BUILD] = "BUILD", - [ACTION_ATTACK] = "ATTACK", - [ACTION_CREATE_UNIT] = "CREATE"}; +static uint8_t const UnitSpeedTable[MAX_UNITS_BUILDINGS] = { [PEASANT] = 1, + [BARRACKS] = 0, + [TOWN_CENTER] = 0 }; -static uint8_t const UnitActionsTable[MAX_UNITS_BUILDINGS] = { [PEASANT] = ((1 << ACTION_BUILD) | (1 << ACTION_ATTACK)), - [BARRACKS] = (1 << ACTION_CREATE_UNIT) }; +static const char* const UnitActionsTable_Level[MAX_ACTIONS] = { [ACTION_BUILD_BARRACKS] = "B.BARR", + [ACTION_ATTACK] = "ATTACK", + [ACTION_CREATE_PEASANT] = "C.PEAS."}; + +static uint8_t const UnitActionsTable[MAX_UNITS_BUILDINGS] = { [PEASANT] = ((1 << ACTION_BUILD_BARRACKS) | (1 << ACTION_ATTACK)), + [BARRACKS] = (1 << ACTION_CREATE_PEASANT), + [TOWN_CENTER] = (1 << ACTION_CREATE_PEASANT) }; // ************** // Sprite tables // ************** static TYPE_SPRITE UnitSprTable[MAX_UNITS_BUILDINGS]; static TYPE_SPRITE UnitWalkingShadowSprTable[MAX_UNITS_BUILDINGS]; -static const struct t_coordinates UnitShadowOffsetTable[MAX_BUILDING_ID - FIRST_BUILDING_ID] = { [BARRACKS - FIRST_BUILDING_ID] = {.x = -6, .y = 0} }; +static const struct t_coordinates UnitShadowOffsetTable[MAX_BUILDING_ID - FIRST_BUILDING_ID] = { [BARRACKS - FIRST_BUILDING_ID] = {.x = -6, .y = 0}, + [TOWN_CENTER - FIRST_BUILDING_ID] = {.x = -3, .y = 0} }; void UnitInit(void) { - enum - { - BARRACKS_SHADOW_OFFSET_X = -8, - BARRACKS_SHADOW_OFFSET_Y = 0 - }; - - UnitSprTable[PEASANT].Data = Peasant_SprData; + UnitSprTable[PEASANT].Data = Peasant_SprData; UnitSprTable[PEASANT].w = GfxGetWidthFromSpriteData(Peasant_SprData); UnitSprTable[PEASANT].h = GfxGetHeightFromSpriteData(Peasant_SprData); UnitSprTable[PEASANT].flip = 0; @@ -77,18 +77,32 @@ void UnitInit(void) UnitSprTable[BARRACKS].rotation = 0; UnitSprTable[BARRACKS].color = GFX_BLACK; + UnitSprTable[TOWN_CENTER].Data = TownCentreSprData; + UnitSprTable[TOWN_CENTER].w = GfxGetWidthFromSpriteData(TownCentreSprData); + UnitSprTable[TOWN_CENTER].h = GfxGetHeightFromSpriteData(TownCentreSprData); + UnitSprTable[TOWN_CENTER].flip = 0; + UnitSprTable[TOWN_CENTER].rotation = 0; + UnitSprTable[TOWN_CENTER].color = GFX_BLACK; + UnitWalkingShadowSprTable[BARRACKS].Data = BarracksShadowSpr_Data; UnitWalkingShadowSprTable[BARRACKS].w = GfxGetWidthFromSpriteData(BarracksShadowSpr_Data); UnitWalkingShadowSprTable[BARRACKS].h = GfxGetHeightFromSpriteData(BarracksShadowSpr_Data); UnitWalkingShadowSprTable[BARRACKS].flip = 0; UnitWalkingShadowSprTable[BARRACKS].rotation = 0; UnitWalkingShadowSprTable[BARRACKS].color = GFX_GRAY; + + UnitWalkingShadowSprTable[TOWN_CENTER].Data = TownCentreShadowSprData; + UnitWalkingShadowSprTable[TOWN_CENTER].w = GfxGetWidthFromSpriteData(TownCentreShadowSprData); + UnitWalkingShadowSprTable[TOWN_CENTER].h = GfxGetHeightFromSpriteData(TownCentreShadowSprData); + UnitWalkingShadowSprTable[TOWN_CENTER].flip = 0; + UnitWalkingShadowSprTable[TOWN_CENTER].rotation = 0; + UnitWalkingShadowSprTable[TOWN_CENTER].color = GFX_GRAY; } void UnitDraw(TYPE_UNIT* ptrUnit, TYPE_CAMERA* ptrCamera, bool bHighlighted) { uint8_t id = ptrUnit->id; - TYPE_SPRITE * ptrSpr; + TYPE_SPRITE* ptrSpr; if (ptrUnit->alive == false) { @@ -156,10 +170,6 @@ void UnitDraw(TYPE_UNIT* ptrUnit, TYPE_CAMERA* ptrCamera, bool bHighlighted) ptrSpr->flip |= GFX_FLIPV; } break; - - default: - // Invalid direction - break; } } else @@ -244,7 +254,7 @@ void UnitHandler(TYPE_UNIT* unitArray, size_t sz) } - bool bMoving = false; + bool bMoving = true; if (ptrUnit->walking == true) { @@ -256,14 +266,12 @@ void UnitHandler(TYPE_UNIT* unitArray, size_t sz) ptrUnit->dir = DIRECTION_LEFT; x_d = -UnitSpeedTable[ptrUnit->id]; //~ ptrUnit->x -= UnitSpeedTable[ptrUnit->id]; - bMoving = true; } else if ( (ptrUnit->x + UnitSpeedTable[ptrUnit->id]) < ptrUnit->target_x) { ptrUnit->dir = DIRECTION_RIGHT; x_d = UnitSpeedTable[ptrUnit->id]; //~ ptrUnit->x += UnitSpeedTable[ptrUnit->id]; - bMoving = true; } if ( (ptrUnit->y - UnitSpeedTable[ptrUnit->id]) > ptrUnit->target_y) @@ -271,14 +279,18 @@ void UnitHandler(TYPE_UNIT* unitArray, size_t sz) ptrUnit->dir = DIRECTION_UP; y_d = -UnitSpeedTable[ptrUnit->id]; //~ ptrUnit->y -= UnitSpeedTable[ptrUnit->id]; - bMoving = true; } else if ( (ptrUnit->y + UnitSpeedTable[ptrUnit->id]) < ptrUnit->target_y) { ptrUnit->dir = DIRECTION_DOWN; y_d = UnitSpeedTable[ptrUnit->id]; //~ ptrUnit->y += UnitSpeedTable[ptrUnit->id]; - bMoving = true; + } + else + { + x_d = ptrUnit->x - ptrUnit->target_x; + y_d = ptrUnit->y - ptrUnit->target_y; + bMoving = false; } ptrUnit->walking = bMoving; @@ -298,7 +310,7 @@ void UnitHandler(TYPE_UNIT* unitArray, size_t sz) .w = UnitGetWidthFromID(ptrUnit->id), .h = UnitGetHeightFromID(ptrUnit->id) }; TYPE_COLLISION_BLOCK ou; - + if (ptrOtherUnit->alive == false) { continue; @@ -315,7 +327,7 @@ void UnitHandler(TYPE_UNIT* unitArray, size_t sz) ou.y = ptrOtherUnit->x; ou.w = UnitGetWidthFromID(ptrOtherUnit->id); ou.h = UnitGetHeightFromID(ptrOtherUnit->id); - + if (SystemCollisionCheck(cu, ou) == true) { ptrUnit->walking = false; @@ -323,7 +335,7 @@ void UnitHandler(TYPE_UNIT* unitArray, size_t sz) } } } - + if (ptrUnit->walking == true) { // If no collision is detected, keep moving to the new position diff --git a/Unit.h b/Unit.h index eecdbcd..86bd6f7 100644 --- a/Unit.h +++ b/Unit.h @@ -58,6 +58,7 @@ typedef enum t_unitid // Buildings BARRACKS, TOWER, + TOWN_CENTER, MAX_BUILDING_ID, @@ -75,9 +76,9 @@ typedef struct typedef enum t_availableactions { - ACTION_BUILD, + ACTION_BUILD_BARRACKS, ACTION_ATTACK, - ACTION_CREATE_UNIT, + ACTION_CREATE_PEASANT, MAX_ACTIONS }UNIT_ACTION;