diff options
| author | Petr Mrázek <peterix@gmail.com> | 2017-05-13 01:24:15 +0200 |
|---|---|---|
| committer | Petr Mrázek <peterix@gmail.com> | 2017-05-13 01:24:15 +0200 |
| commit | 868669a497fd08524eec6d31ac483f431b95198c (patch) | |
| tree | a46fa4fa4e6baaf14720f10b3a2d09df3c98aaf6 /application | |
| parent | 4cf4110d9dc694d2c28feca38656925980b57a4d (diff) | |
| download | PrismLauncher-868669a497fd08524eec6d31ac483f431b95198c.tar.gz PrismLauncher-868669a497fd08524eec6d31ac483f431b95198c.tar.bz2 PrismLauncher-868669a497fd08524eec6d31ac483f431b95198c.zip | |
NOISSUE add a linux system packaging install layout
Diffstat (limited to 'application')
| -rw-r--r-- | application/CMakeLists.txt | 50 | ||||
| -rw-r--r-- | application/MultiMC.cpp | 19 | ||||
| -rwxr-xr-x | application/package/linux/multimc.desktop | 11 | ||||
| -rw-r--r-- | application/package/ubuntu/multimc/DEBIAN/control | 11 | ||||
| -rwxr-xr-x | application/package/ubuntu/multimc/DEBIAN/postrm | 3 | ||||
| -rw-r--r-- | application/package/ubuntu/multimc/opt/multimc/icon.svg | 1993 | ||||
| -rwxr-xr-x | application/package/ubuntu/multimc/opt/multimc/run.sh | 33 | ||||
| -rwxr-xr-x | application/package/ubuntu/multimc/usr/share/applications/multimc.desktop | 16 | ||||
| -rw-r--r-- | application/package/ubuntu/readme.md | 12 |
9 files changed, 64 insertions, 2084 deletions
diff --git a/application/CMakeLists.txt b/application/CMakeLists.txt index 2ae8b1c5..9c1ca3cd 100644 --- a/application/CMakeLists.txt +++ b/application/CMakeLists.txt @@ -304,8 +304,8 @@ target_link_libraries(MultiMC MultiMC_gui ${QUAZIP_LIBRARIES} hoedown MultiMC_ra ######## Packaging/install paths setup ######## # How to install the build results -set(MultiMC_LAYOUT "auto" CACHE STRING "The layout for MultiMC installation (auto, win-bundle, lin-bundle, mac-bundle, lin-nodeps)") -set_property(CACHE MultiMC_LAYOUT PROPERTY STRINGS auto win-bundle lin-bundle mac-bundle lin-nodeps) +set(MultiMC_LAYOUT "auto" CACHE STRING "The layout for MultiMC installation (auto, win-bundle, lin-bundle, lin-nodeps, lin-system, mac-bundle)") +set_property(CACHE MultiMC_LAYOUT PROPERTY STRINGS auto win-bundle lin-bundle lin-nodeps lin-system mac-bundle) if(MultiMC_LAYOUT STREQUAL "auto") if(UNIX AND APPLE) @@ -326,6 +326,7 @@ if(MultiMC_LAYOUT_REAL STREQUAL "mac-bundle") set(LIBRARY_DEST_DIR "MultiMC.app/Contents/MacOS") set(PLUGIN_DEST_DIR "MultiMC.app/Contents/MacOS") set(RESOURCES_DEST_DIR "MultiMC.app/Contents/Resources") + set(JARS_DEST_DIR "MultiMC.app/Contents/MacOS") set(BUNDLE_DEST_DIR ".") @@ -346,7 +347,7 @@ if(MultiMC_LAYOUT_REAL STREQUAL "mac-bundle") set(DIRS ${QT_LIBS_DIR} ${QT_LIBEXECS_DIR} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) # install as bundle - set(INSTALL_BUNDLE TRUE) + set(INSTALL_BUNDLE "full") # Add the icon install(FILES resources/MultiMC.icns DESTINATION ${RESOURCES_DEST_DIR}) @@ -357,6 +358,7 @@ elseif(MultiMC_LAYOUT_REAL STREQUAL "lin-bundle") set(PLUGIN_DEST_DIR "plugins") set(BUNDLE_DEST_DIR ".") set(RESOURCES_DEST_DIR ".") + set(JARS_DEST_DIR "bin") # Apps to bundle set(APPS "\${CMAKE_INSTALL_PREFIX}/bin/MultiMC") @@ -365,7 +367,7 @@ elseif(MultiMC_LAYOUT_REAL STREQUAL "lin-bundle") set(DIRS ${QT_LIBS_DIR} ${QT_LIBEXECS_DIR} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) # install as bundle - set(INSTALL_BUNDLE TRUE) + set(INSTALL_BUNDLE "full") # Set RPATH SET_TARGET_PROPERTIES(MultiMC PROPERTIES INSTALL_RPATH "$ORIGIN/") @@ -379,9 +381,10 @@ elseif(MultiMC_LAYOUT_REAL STREQUAL "lin-nodeps") set(PLUGIN_DEST_DIR "plugins") set(BUNDLE_DEST_DIR ".") set(RESOURCES_DEST_DIR ".") + set(JARS_DEST_DIR "bin") - # do not install as bundle - set(INSTALL_BUNDLE FALSE) + # install as bundle with no dependencies included + set(INSTALL_BUNDLE "nodeps") # Set RPATH SET_TARGET_PROPERTIES(MultiMC PROPERTIES INSTALL_RPATH "$ORIGIN/") @@ -389,12 +392,30 @@ elseif(MultiMC_LAYOUT_REAL STREQUAL "lin-nodeps") # Install basic runner script install(PROGRAMS package/linux/MultiMC DESTINATION ${BUNDLE_DEST_DIR}) +elseif(MultiMC_LAYOUT_REAL STREQUAL "lin-system") + set(MultiMC_BINARY_DEST_DIR "usr/bin" CACHE STRING "Relative path from packaging root to the binary directory") + set(MultiMC_LIBRARY_DEST_DIR "usr/lib" CACHE STRING "Relative path from packaging root to the library directory") + set(MultiMC_SHARE_DEST_DIR "usr/share/multimc5" CACHE STRING "Relative path from packaging root to the shared data directory") + set(JARS_DEST_DIR "${MultiMC_SHARE_DEST_DIR}") + + set(BINARY_DEST_DIR ${MultiMC_BINARY_DEST_DIR}) + set(LIBRARY_DEST_DIR ${MultiMC_LIBRARY_DEST_DIR}) + + MESSAGE(STATUS "Compiling for linux system with ${MultiMC_SHARE_DEST_DIR} and MULTIMC_LINUX_DATADIR") + set_target_properties(MultiMC PROPERTIES OUTPUT_NAME "multimc5") + target_compile_definitions(MultiMC PRIVATE "-DMULTIMC_JARS_LOCATION=/${MultiMC_SHARE_DEST_DIR}/jars" "-DMULTIMC_LINUX_DATADIR" + ) + + # install as bundle with no dependencies included + set(INSTALL_BUNDLE "nodeps") + elseif(MultiMC_LAYOUT_REAL STREQUAL "win-bundle") set(BINARY_DEST_DIR ".") set(LIBRARY_DEST_DIR ".") set(PLUGIN_DEST_DIR ".") set(BUNDLE_DEST_DIR ".") set(RESOURCES_DEST_DIR ".") + set(JARS_DEST_DIR ".") # Apps to bundle set(APPS "\${CMAKE_INSTALL_PREFIX}/MultiMC.exe") @@ -403,7 +424,7 @@ elseif(MultiMC_LAYOUT_REAL STREQUAL "win-bundle") set(DIRS ${QT_LIBS_DIR} ${QT_LIBEXECS_DIR} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) # install as bundle - set(INSTALL_BUNDLE TRUE) + set(INSTALL_BUNDLE "full") else() message(FATAL_ERROR "No sensible install layout set.") endif() @@ -417,12 +438,11 @@ install(TARGETS MultiMC RUNTIME DESTINATION ${BINARY_DEST_DIR} COMPONENT Runtime ) -#### jars needed for testing java and launching Minecraft #### -install_jar(JavaCheck "${BINARY_DEST_DIR}/jars") -install_jar(NewLaunch "${BINARY_DEST_DIR}/jars") +install_jar(JavaCheck "${JARS_DEST_DIR}/jars") +install_jar(NewLaunch "${JARS_DEST_DIR}/jars") -#### Shared libraries and dependencies #### -if(NOT INSTALL_BUNDLE) +#### Dependency installations #### +if(INSTALL_BUNDLE STREQUAL "nodeps") # Just our own stuff # FIXME: this does not remove RPATH. install( @@ -437,7 +457,7 @@ if(NOT INSTALL_BUNDLE) DESTINATION ${LIBRARY_DEST_DIR} ) -else() +elseif(INSTALL_BUNDLE STREQUAL "full") # Add qt.conf - this makes Qt stop looking for things outside the bundle install( CODE "file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${RESOURCES_DEST_DIR}/qt.conf\" \" \")" @@ -450,7 +470,7 @@ else() DIRECTORY "${QT_PLUGINS_DIR}/imageformats" DESTINATION ${PLUGIN_DEST_DIR} COMPONENT Runtime - REGEX "tga|tiff|mng" EXCLUDE + REGEX "tga|tiff|mng|webp" EXCLUDE ) # Icon engines install( @@ -472,7 +492,7 @@ else() DIRECTORY "${QT_PLUGINS_DIR}/imageformats" DESTINATION ${PLUGIN_DEST_DIR} COMPONENT Runtime - REGEX "tga|tiff|mng" EXCLUDE + REGEX "tga|tiff|mng|webp" EXCLUDE REGEX "d\\." EXCLUDE REGEX "_debug\\." EXCLUDE REGEX "\\.dSYM" EXCLUDE diff --git a/application/MultiMC.cpp b/application/MultiMC.cpp index 52755e84..495b14a0 100644 --- a/application/MultiMC.cpp +++ b/application/MultiMC.cpp @@ -79,6 +79,9 @@ #include <stdio.h> #endif +#define STRINGIFY(x) #x +#define TOSTRING(x) STRINGIFY(x) + static const QLatin1String liveCheckFile("live.check"); using namespace Commandline; @@ -138,7 +141,7 @@ MultiMC::MultiMC(int &argc, char **argv) : QApplication(argc, argv) parser.addShortOpt("version", 'V'); parser.addDocumentation("version", "display program version and exit."); // --dir - parser.addOption("dir", applicationDirPath()); + parser.addOption("dir"); parser.addShortOpt("dir", 'd'); parser.addDocumentation("dir", "use the supplied folder as MultiMC root instead of " "the binary location (use '.' for current)"); @@ -199,8 +202,19 @@ MultiMC::MultiMC(int &argc, char **argv) : QApplication(argc, argv) } else { +#ifdef MULTIMC_LINUX_DATADIR + QString xdgDataHome = QFile::decodeName(qgetenv("XDG_DATA_HOME")); + if (xdgDataHome.isEmpty()) + xdgDataHome = QDir::homePath() + QLatin1String("/.local/share"); + dataPath = xdgDataHome + "/multimc"; + printf("BLAH %s", xdgDataHome.toStdString().c_str()); + + adjustedBy += "XDG standard " + dataPath; + +#else dataPath = applicationDirPath(); adjustedBy += "Fallback to binary path " + dataPath; +#endif } if (!FS::ensureFolderPathExists(dataPath)) @@ -297,6 +311,9 @@ MultiMC::MultiMC(int &argc, char **argv) : QApplication(argc, argv) { qDebug() << "ID of instance to launch : " << m_instanceIdToLaunch; } +#ifdef MULTIMC_JARS_LOCATION + ENV.setJarsPath( TOSTRING(MULTIMC_JARS_LOCATION) ); +#endif do // once { diff --git a/application/package/linux/multimc.desktop b/application/package/linux/multimc.desktop new file mode 100755 index 00000000..ad18381e --- /dev/null +++ b/application/package/linux/multimc.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Encoding=UTF-8 +Name=MultiMC +GenericName=Minecraft launcher +Comment=Free, open source launcher and instance manager for Minecraft. +Type=Application +Terminal=false +Exec=multimc +Icon=multimc +Categories=Application;Game diff --git a/application/package/ubuntu/multimc/DEBIAN/control b/application/package/ubuntu/multimc/DEBIAN/control deleted file mode 100644 index a0300e99..00000000 --- a/application/package/ubuntu/multimc/DEBIAN/control +++ /dev/null @@ -1,11 +0,0 @@ -Package: multimc -Version: 1.1-2 -Architecture: all -Maintainer: Petr Mrázek <peterix@gmail.com> -Section: games -Priority: optional -Installed-Size: 75 -Depends: zenity, default-jre -Homepage: http://multimc.org -Description: A local install wrapper for MultiMC - diff --git a/application/package/ubuntu/multimc/DEBIAN/postrm b/application/package/ubuntu/multimc/DEBIAN/postrm deleted file mode 100755 index f9bbc8a7..00000000 --- a/application/package/ubuntu/multimc/DEBIAN/postrm +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -set -e -update-desktop-database diff --git a/application/package/ubuntu/multimc/opt/multimc/icon.svg b/application/package/ubuntu/multimc/opt/multimc/icon.svg deleted file mode 100644 index 178509ac..00000000 --- a/application/package/ubuntu/multimc/opt/multimc/icon.svg +++ /dev/null @@ -1,1993 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="64px" - height="64px" - id="svg4427" - version="1.1" - inkscape:version="0.48.4 r9939" - sodipodi:docname="multimc.svg" - inkscape:export-filename="/home/peterix/projects/MultiMC4/src/resources/insticons/infinity128.png" - inkscape:export-xdpi="180" - inkscape:export-ydpi="180"> - <defs - id="defs4429"> - <linearGradient - id="linearGradient5668" - inkscape:collect="always"> - <stop - id="stop5670" - offset="0" - style="stop-color:#75b54b;stop-opacity:1;" /> - <stop - id="stop5672" - offset="1" - style="stop-color:#75b54b;stop-opacity:0.6" /> - </linearGradient> - <linearGradient - id="linearGradient5084" - inkscape:collect="always"> - <stop - id="stop5086" - offset="0" - style="stop-color:#000000;stop-opacity:0.8" /> - <stop - id="stop5088" - offset="1" - style="stop-color:#000000;stop-opacity:0.35" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient5668" - id="linearGradient5072" - x1="6.7342591" - y1="28.510933" - x2="50.506943" - y2="61.773685" - gradientUnits="userSpaceOnUse" - gradientTransform="translate(-0.01532073,-0.00938002)" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient5084" - id="linearGradient5082" - x1="14.312115" - y1="9.7948904" - x2="44.097023" - y2="82.973114" - gradientUnits="userSpaceOnUse" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient5668" - id="linearGradient3281" - gradientUnits="userSpaceOnUse" - gradientTransform="translate(-0.01532073,-0.00938002)" - x1="6.7342591" - y1="28.510933" - x2="50.506943" - y2="61.773685" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient5668" - id="linearGradient3283" - gradientUnits="userSpaceOnUse" - gradientTransform="translate(-0.01532073,-0.00938002)" - x1="6.7342591" - y1="28.510933" - x2="50.506943" - y2="61.773685" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient5668" - id="linearGradient3286" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(1.1879555,0,0,0.84178237,-0.01820035,-0.00789594)" - x1="6.7342591" - y1="28.510933" - x2="50.506943" - y2="61.773685" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient5084" - id="linearGradient3288" - gradientUnits="userSpaceOnUse" - x1="14.312115" - y1="9.7948904" - x2="44.097023" - y2="82.973114" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient5084" - id="linearGradient3290" - gradientUnits="userSpaceOnUse" - x1="14.312115" - y1="9.7948904" - x2="44.097023" - y2="82.973114" /> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient5084" - id="linearGradient3293" - gradientUnits="userSpaceOnUse" - x1="14.312115" - y1="9.7948904" - x2="44.097023" - y2="82.973114" - gradientTransform="scale(1.1879555,0.84178237)" /> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="0.0" - inkscape:pageshadow="2" - inkscape:zoom="6" - inkscape:cx="10.09561" - inkscape:cy="35.232628" - inkscape:current-layer="layer1" - showgrid="false" - inkscape:document-units="px" - inkscape:grid-bbox="true" - inkscape:window-width="1607" - inkscape:window-height="1030" - inkscape:window-x="1676" - inkscape:window-y="-3" - inkscape:window-maximized="1"> - <inkscape:grid - type="xygrid" - id="grid4446" - empspacing="16" - visible="true" - enabled="true" - snapvisiblegridlinesonly="true" - spacingx="4px" - spacingy="4px" /> - </sodipodi:namedview> - <metadata - id="metadata4432"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <g - id="layer1" - inkscape:label="Layer 1" - inkscape:groupmode="layer"> - <rect - style="opacity:0.34999999999999998;fill:#552200;fill-opacity:1;stroke:none" - id="rect5674" - width="64.125" - height="64" - x="-0.125" - y="0.1249999" /> - <rect - style="fill:#74b44a;fill-opacity:1;stroke:none" - id="rect4448" - width="4" - height="4" - x="0" - y="0" /> - <rect - y="0" - x="4" - height="4" - width="4" - id="rect4450" - style="fill:#76b64c;fill-opacity:1;stroke:none" /> - <rect - style="fill:#73b349;fill-opacity:1;stroke:none" - id="rect4452" - width="4" - height="4" - x="8" - y="0" /> - <rect - y="0" - x="12" - height="4" - width="4" - id="rect4454" - style="fill:#66a63c;fill-opacity:1;stroke:none" /> - <rect - style="fill:#66a63c;fill-opacity:1;stroke:none" - id="rect4456" - width="4" - height="4" - x="16" - y="0" /> - <rect - y="0" - x="20" - height="4" - width="4" - id="rect4458" - style="fill:#6faf45;fill-opacity:1;stroke:none" /> - <rect - y="4" - x="0" - height="4" - width="4" - id="rect4460" - style="fill:#75b54b;fill-opacity:1;stroke:none" /> - <rect - style="fill:#6cac42;fill-opacity:1;stroke:none" - id="rect4462" - width="4" - height="4" - x="4" - y="4" /> - <rect - y="4" - x="8" - height="4" - width="4" - id="rect4464" - style="fill:#8ab95a;fill-opacity:1;stroke:none" /> - <rect - style="fill:#81b051;fill-opacity:1;stroke:none" - id="rect4466" - width="4" - height="4" - x="12" - y="4" /> - <rect - y="4" - x="16" - height="4" - width="4" - id="rect4468" - style="fill:#83b253;fill-opacity:1;stroke:none" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4470" - width="4" - height="4" - x="20" - y="4" /> - <rect - y="0" - x="24" - height="4" - width="4" - id="rect4472" - style="fill:#5f9f35;fill-opacity:1;stroke:none" /> - <rect - style="fill:#6cac42;fill-opacity:1;stroke:none" - id="rect4474" - width="4" - height="4" - x="28" - y="0" /> - <rect - y="0" - x="32" - height="4" - width="4" - id="rect4476" - style="fill:#7ebe54;fill-opacity:1;stroke:none" /> - <rect - style="fill:#76b64c;fill-opacity:1;stroke:none" - id="rect4478" - width="4" - height="4" - x="36" - y="0" /> - <rect - y="0" - x="40" - height="4" - width="4" - id="rect4480" - style="fill:#6aaa40;fill-opacity:1;stroke:none" /> - <rect - style="fill:#67a73d;fill-opacity:1;stroke:none" - id="rect4482" - width="4" - height="4" - x="44" - y="0" /> - <rect - style="fill:#68a83e;fill-opacity:1;stroke:none" - id="rect4484" - width="4" - height="4" - x="24" - y="4" /> - <rect - y="4" - x="28" - height="4" - width="4" - id="rect4486" - style="fill:#62a238;fill-opacity:1;stroke:none" /> - <rect - style="fill:#5f9f35;fill-opacity:1;stroke:none" - id="rect4488" - width="4" - height="4" - x="32" - y="4" /> - <rect - y="4" - x="36" - height="4" - width="4" - id="rect4490" - style="fill:#93c263;fill-opacity:1;stroke:none" /> - <rect - style="fill:#90bf60;fill-opacity:1;stroke:none" - id="rect4492" - width="4" - height="4" - x="40" - y="4" /> - <rect - y="4" - x="44" - height="4" - width="4" - id="rect4494" - style="fill:#73b349;fill-opacity:1;stroke:none" /> - <rect - style="fill:#69a93f;fill-opacity:1;stroke:none" - id="rect4496" - width="4" - height="4" - x="48" - y="0" /> - <rect - y="0" - x="52" - height="4" - width="4" - id="rect4498" - style="fill:#61a137;fill-opacity:1;stroke:none" /> - <rect - style="fill:#509026;fill-opacity:1;stroke:none" - id="rect4500" - width="4" - height="4" - x="56" - y="0" /> - <rect - y="0" - x="60" - height="4" - width="4" - id="rect4502" - style="fill:#6dad43;fill-opacity:1;stroke:none" /> - <rect - y="4" - x="48" - height="4" - width="4" - id="rect4508" - style="fill:#61a137;fill-opacity:1;stroke:none" /> - <rect - style="fill:#6cac42;fill-opacity:1;stroke:none" - id="rect4510" - width="4" - height="4" - x="52" - y="4" /> - <rect - y="4" - x="56" - height="4" - width="4" - id="rect4512" - style="fill:#67a73d;fill-opacity:1;stroke:none" /> - <rect - style="fill:#6bab41;fill-opacity:1;stroke:none" - id="rect4514" - width="4" - height="4" - x="60" - y="4" /> - <rect - y="8" - x="0" - height="4" - width="4" - id="rect4520" - style="fill:#8dbc5d;fill-opacity:1;stroke:none" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4522" - width="4" - height="4" - x="4" - y="8" /> - <rect - y="8" - x="8" - height="4" - width="4" - id="rect4524" - style="fill:#9ccb6c;fill-opacity:1;stroke:none" /> - <rect - style="fill:#64a43a;fill-opacity:1;stroke:none" - id="rect4526" - width="4" - height="4" - x="12" - y="8" /> - <rect - y="8" - x="16" - height="4" - width="4" - id="rect4528" - style="fill:#69a93f;fill-opacity:1;stroke:none" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4530" - width="4" - height="4" - x="20" - y="8" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4532" - width="4" - height="4" - x="0" - y="12" /> - <rect - y="12" - x="4" - height="4" - width="4" - id="rect4534" - style="fill:#6c6c6c;fill-opacity:1;stroke:none" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4536" - width="4" - height="4" - x="8" - y="12" /> - <rect - y="12" - x="12" - height="4" - width="4" - id="rect4538" - style="fill:#593d29;fill-opacity:1;stroke:none" /> - <rect - style="fill:#71b147;fill-opacity:1;stroke:none" - id="rect4540" - width="4" - height="4" - x="16" - y="12" /> - <rect - y="12" - x="20" - height="4" - width="4" - id="rect4542" - style="fill:#593d29;fill-opacity:1;stroke:none" /> - <rect - style="fill:#70b046;fill-opacity:1;stroke:none" - id="rect4544" - width="4" - height="4" - x="24" - y="8" /> - <rect - y="8" - x="28" - height="4" - width="4" - id="rect4546" - style="fill:#593d29;fill-opacity:1;stroke:none" /> - <rect - style="fill:#74b44a;fill-opacity:1;stroke:none" - id="rect4548" - width="4" - height="4" - x="32" - y="8" /> - <rect - y="8" - x="36" - height="4" - width="4" - id="rect4550" - style="fill:#7fbf55;fill-opacity:1;stroke:none" /> - <rect - style="fill:#92c162;fill-opacity:1;stroke:none" - id="rect4552" - width="4" - height="4" - x="40" - y="8" /> - <rect - y="8" - x="44" - height="4" - width="4" - id="rect4554" - style="fill:#97c667;fill-opacity:1;stroke:none" /> - <rect - y="12" - x="24" - height="4" - width="4" - id="rect4556" - style="fill:#593d29;fill-opacity:1;stroke:none" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4558" - width="4" - height="4" - x="28" - y="12" /> - <rect - y="12" - x="32" - height="4" - width="4" - id="rect4560" - style="fill:#5f9f35;fill-opacity:1;stroke:none" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4562" - width="4" - height="4" - x="36" - y="12" /> - <rect - y="12" - x="40" - height="4" - width="4" - id="rect4564" - style="fill:#6dad43;fill-opacity:1;stroke:none" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4566" - width="4" - height="4" - x="44" - y="12" /> - <rect - y="8" - x="48" - height="4" - width="4" - id="rect4568" - style="fill:#593d29;fill-opacity:1;stroke:none" /> - <rect - style="fill:#57972d;fill-opacity:1;stroke:none" - id="rect4570" - width="4" - height="4" - x="52" - y="8" /> - <rect - y="8" - x="56" - height="4" - width="4" - id="rect4572" - style="fill:#60a036;fill-opacity:1;stroke:none" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4574" - width="4" - height="4" - x="60" - y="8" /> - <rect - style="fill:#79553a;fill-opacity:1;stroke:none" - id="rect4576" - width="4" - height="4" - x="48" - y="12" /> - <rect - y="12" - x="52" - height="4" - width="4" - id="rect4578" - style="fill:#593d29;fill-opacity:1;stroke:none" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4580" - width="4" - height="4" - x="56" - y="12" /> - <rect - y="12" - x="60" - height="4" - width="4" - id="rect4582" - style="fill:#79553a;fill-opacity:1;stroke:none" /> - <rect - y="16" - x="0" - height="4" - width="4" - id="rect4584" - style="fill:#966c4a;fill-opacity:1;stroke:none" /> - <rect - style="fill:#79553a;fill-opacity:1;stroke:none" - id="rect4586" - width="4" - height="4" - x="4" - y="16" /> - <rect - y="16" - x="8" - height="4" - width="4" - id="rect4588" - style="fill:#966c4a;fill-opacity:1;stroke:none" /> - <rect - style="fill:#b9855c;fill-opacity:1;stroke:none" - id="rect4590" - width="4" - height="4" - x="12" - y="16" /> - <rect - y="16" - x="16" - height="4" - width="4" - id="rect4592" - style="fill:#593d29;fill-opacity:1;stroke:none" /> - <rect - style="fill:#966c4a;fill-opacity:1;stroke:none" - id="rect4594" - width="4" - height="4" - x="20" - y="16" /> - <rect - style="fill:#79553a;fill-opacity:1;stroke:none" - id="rect4596" - width="4" - height="4" - x="0" - y="20" /> - <rect - y="20" - x="4" - height="4" - width="4" - id="rect4598" - style="fill:#593d29;fill-opacity:1;stroke:none" /> - <rect - style="fill:#966c4a;fill-opacity:1;stroke:none" - id="rect4600" - width="4" - height="4" - x="8" - y="20" /> - <rect - y="20" - x="12" - height="4" - width="4" - id="rect4602" - style="fill:#966c4a;fill-opacity:1;stroke:none" /> - <rect - style="fill:#79553a;fill-opacity:1;stroke:none" - id="rect4604" - width="4" - height="4" - x="16" - y="20" /> - <rect - y="20" - x="20" - height="4" - width="4" - id="rect4606" - style="fill:#966c4a;fill-opacity:1;stroke:none" /> - <rect - style="fill:#79553a;fill-opacity:1;stroke:none" - id="rect4608" - width="4" - height="4" - x="24" - y="16" /> - <rect - y="16" - x="28" - height="4" - width="4" - id="rect4610" - style="fill:#79553a;fill-opacity:1;stroke:none" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4612" - width="4" - height="4" - x="32" - y="16" /> - <rect - y="16" - x="36" - height="4" - width="4" - id="rect4614" - style="fill:#593d29;fill-opacity:1;stroke:none" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4616" - width="4" - height="4" - x="40" - y="16" /> - <rect - y="16" - x="44" - height="4" - width="4" - id="rect4618" - style="fill:#6c6c6c;fill-opacity:1;stroke:none" /> - <rect - y="20" - x="24" - height="4" - width="4" - id="rect4620" - style="fill:#593d29;fill-opacity:1;stroke:none" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4622" - width="4" - height="4" - x="28" - y="20" /> - <rect - y="20" - x="32" - height="4" - width="4" - id="rect4624" - style="fill:#593d29;fill-opacity:1;stroke:none" /> - <rect - style="fill:#79553a;fill-opacity:1;stroke:none" - id="rect4626" - width="4" - height="4" - x="36" - y="20" /> - <rect - y="20" - x="40" - height="4" - width="4" - id="rect4628" - style="fill:#79553a;fill-opacity:1;stroke:none" /> - <rect - style="fill:#593d29;fill-opacity:1;stroke:none" - id="rect4630" - width="4" - height="4" - x="44" - y="20" /> - <rect - y="16" - x="48" - height="4" - width="4" - id="rect4632" - style="fill:#79553a;fill-opacity:1;stroke:none" /> - <rect - style="fill:#966c4a;fill-opacity:1;stroke:none" - id="rect4634" - width="4" - height="4" - x="52" - y="16" /> - <rect - y="16" - x="56" - height="4" - width="4" - id="rect4636" - style="fill:#593d29;fill-opacity:1;stroke:none" /> - <rect - style="fill:#79553a;fill-opacity:1;stroke:none" - id="rect4638" - width="4" - height="4" - x="60" - y="16" /> - <rect - style="fill:#79553a;fill-opacity:1;stroke:none" - id="rect4640" - width="4" - height="4" - x="48" - y="20" /> - <rect - y="20" - x="52" - height="4" - width="4" - id="rect4642" - style="fill:#79553a;fill-opacity:1;stroke:none" /> - <rect - style="fill:#79553a;fill-opacity:1;stroke:none" - id="rect4644" - width="4" - |
