From c24b7503bc4f05dd700eca5bcc593e04d3c89720 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Sun, 25 Nov 2018 18:22:43 +0100 Subject: :hammer: Tidy up script --- bin/luxcena-neo-cli.sh | 105 +++++++++++++++++++++++++++++++------------------ 1 file changed, 66 insertions(+), 39 deletions(-) (limited to 'bin/luxcena-neo-cli.sh') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 034d713..761459e 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -5,6 +5,38 @@ usage() { exit 1 } +function die() { + tput setaf 1 + printf "\n\nInstall failed.\n" + printf "Check the logfile at '/tmp/lucxena-neo.install.log'.\n" + printf "Use this command to see the last 30 lines of the file;\n" + printf " tail -n 30 /tmp/luxcena-neo.install.log" + tput sgr0 + exit 1 +} + +function dlgYN() { + tput sc + tput setaf 4 + printf "$1 (y/n)? " + while : + do + read -n 1 -p "" YNQuestionAnswer + if [[ $YNQuestionAnswer == "y" ]]; then + tput rc; tput el + printf ". $1?: \e[0;32mYes\e[0m\n" + tput sc + eval $2=1 # Set parameter 2 of input to the return value + break + elif [[ $YNQuestionAnswer == "n" ]]; then + tput rc; tput el + printf ". $1?: \e[0;31mNo\e[0m\n" + eval $2=0 # Set parameter 2 of input to the return value + break + fi + done +} + while getopts ":a:" o; do case "${o}" in a ) @@ -25,14 +57,23 @@ if [ "$action" == "update" ]; then tput sgr0 printf '\e[93m%s\e[0m\n\n' "-------------------" - sudo systemctl stop lxucena-neo + if [ "$EUID" -ne 0 ]; then + echo "You need to run this script as root." + echo "Try running with 'sudo ./bin/install.sh'" + exit 1 + fi + + systemctl stop lxucena-neo oldDir=$PWD - cd ~/luxcena-neo-install - git pull - export NODE_ENV=production - npm i --only=production + cd /home/lux-neo/luxcena-neo-install + runuser -l 'lux-neo' -c 'git pull' + runuser -l 'lux-neo' -c 'export NODE_ENV=production' + runuser -l 'lux-neo' -c 'npm i --only=production' cd $oldDir - sudo systemctl start luxcena-neo + printf "Update complete, run these commands to finish it completly:\n" + printf "sudo /home/lux-neo/luxcena-neo-install/bin/post-update.sh\n" + printf "sudo systemctl luxcena-neo start\n" + systemctl start luxcena-neo elif [ "$action" == "uninstall" ]; then tput setab 1 @@ -42,43 +83,29 @@ elif [ "$action" == "uninstall" ]; then tput setaf 8 printf "By uninstalling Luxcena-Neo you will loose all you data, including your scripts.\n\n" - tput sc - tput setaf 4 - printf ". Are you sure you want to uninstall (y/n)? " - while : - do - read -n 1 -p "" YNQuestionAnswer - if [[ $YNQuestionAnswer == "y" ]]; then - tput rc; tput el - printf ". Are you sure you want to uninstall? \e[0;32mYes\e[0m\n" - tput sc - sudo systemctl stop luxcena-neo || { printf "\n\nUninstall failed.\n"; exit 1; } - rm -rf ~/luxcena-neo-install || { printf "\n\nUninstall failed.\n"; exit 1; } - sudo rm /etc/systemd/system/luxcena-neo.service || { printf "\n\nUninstall failed.\n"; exit 1; } - tput rc; tput ed + dlgYN "Are you sure you want to uninstall?" res + if [ $res -eq 1 ]; then + systemctl stop luxcena-neo + deluser lux-neo + rm -rf /home/lux-neo + rm /etc/systemd/system/luxcena-neo.service - tput setaf 2 - printf "\nEverything should now be gone. To remove the last piece, enter this command:\n" - tput sgr0 - tput smso - printf "sudo rm /bin/luxcena-neo\n\n" - tput sgr0 - tput setaf 8 - printf "Well, some dependencies still exists. Those are:\n" - printf " - rpi_ws281x-library\n" - printf " - packages (nodejs scons python-dev swig)\n" - break - elif [[ $YNQuestionAnswer == "n" ]]; then - tput rc; tput el - printf ". Are you sure you want to uninstall? \e[0;31mNo\e[0m\n" - break - fi - done + tput setaf 2 + printf "\nEverything should now be gone. To remove the last piece, enter this command:\n" + tput sgr0 + tput smso + printf "sudo rm /bin/luxcena-neo\n\n" + tput sgr0 + tput setaf 8 + printf "Well, some dependencies still exists. Those are:\n" + printf " - rpi_ws281x-library\n" + printf " - packages (nodejs scons python-dev swig)\n" + fi elif [ "$action" == "start" ]; then - sudo systemctl start luxcena-neo + systemctl start luxcena-neo elif [ "$action" == "stop" ]; then - sudo systemctl stop luxcena-neo + systemctl stop luxcena-neo else usage fi -- cgit v1.2.3 From 101745c6a4a2c6a186be48182d48814177840c65 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 29 Nov 2018 23:14:58 +0100 Subject: :construction: Chenged things, and written some docs --- app.js | 13 +- bin/install.sh | 20 +- bin/luxcena-neo-cli.sh | 6 +- bin/post-update.sh | 1 - docs/Contributing/Modules/CompileAndRun.md | 58 ++ docs/README.md | 2 + docs/SUMMARY.md | 10 + docs/Usage/CLI.md | 26 + docs/Usage/Configuration.md | 78 +++ docs/Usage/Install.md | 32 + docs/Usage/README.md | 11 + docs/_book/Contributing/Modules/CompileAndRun.html | 413 +++++++++++++ docs/_book/Usage/CLI.html | 405 ++++++++++++ docs/_book/Usage/Configuration.html | 441 +++++++++++++ docs/_book/Usage/Install.html | 417 +++++++++++++ docs/_book/Usage/index.html | 397 ++++++++++++ .../gitbook/fonts/fontawesome/FontAwesome.otf | Bin 0 -> 124988 bytes .../fonts/fontawesome/fontawesome-webfont.eot | Bin 0 -> 76518 bytes .../fonts/fontawesome/fontawesome-webfont.svg | 685 +++++++++++++++++++++ .../fonts/fontawesome/fontawesome-webfont.ttf | Bin 0 -> 152796 bytes .../fonts/fontawesome/fontawesome-webfont.woff | Bin 0 -> 90412 bytes .../fonts/fontawesome/fontawesome-webfont.woff2 | Bin 0 -> 71896 bytes docs/_book/gitbook/gitbook-plugin-api/api.css | 106 ++++ docs/_book/gitbook/gitbook-plugin-api/api.js | 7 + docs/_book/gitbook/gitbook-plugin-code/plugin.css | 37 ++ docs/_book/gitbook/gitbook-plugin-code/plugin.js | 91 +++ .../gitbook/gitbook-plugin-comment/plugin.css | 143 +++++ .../_book/gitbook/gitbook-plugin-comment/plugin.js | 47 ++ .../gitbook/gitbook-plugin-emphasize/plugin.css | 14 + .../gitbook-plugin-fontsettings/fontsettings.js | 240 ++++++++ .../gitbook-plugin-fontsettings/website.css | 291 +++++++++ docs/_book/gitbook/gitbook-plugin-github/plugin.js | 14 + .../gitbook/gitbook-plugin-highlight/ebook.css | 135 ++++ .../gitbook/gitbook-plugin-highlight/website.css | 434 +++++++++++++ .../gitbook/gitbook-plugin-hints/plugin-hints.css | 9 + .../gitbook/gitbook-plugin-livereload/plugin.js | 11 + docs/_book/gitbook/gitbook-plugin-lunr/lunr.min.js | 7 + .../gitbook/gitbook-plugin-lunr/search-lunr.js | 59 ++ .../service-worker-registration.js | 62 ++ .../gitbook-plugin-pretty-term/terminal.css | 31 + .../gitbook/gitbook-plugin-pretty-term/terminal.js | 33 + .../gitbook/gitbook-plugin-search/lunr.min.js | 7 + .../gitbook/gitbook-plugin-search/search-engine.js | 50 ++ .../_book/gitbook/gitbook-plugin-search/search.css | 35 ++ docs/_book/gitbook/gitbook-plugin-search/search.js | 213 +++++++ .../gitbook/gitbook-plugin-sharing/buttons.js | 90 +++ docs/_book/gitbook/gitbook.js | 4 + .../images/apple-touch-icon-precomposed-152.png | Bin 0 -> 4817 bytes docs/_book/gitbook/images/favicon.ico | Bin 0 -> 4286 bytes docs/_book/gitbook/style.css | 9 + docs/_book/gitbook/theme.js | 4 + docs/_book/index.html | 385 ++++++++++++ docs/_book/search_index.json | 1 + docs/_book/service-worker.js | 268 ++++++++ docs/book.json | 10 + .../pythonSupportFiles/LuxcenaNeo/Strip.py | 25 +- 56 files changed, 5865 insertions(+), 22 deletions(-) create mode 100644 docs/Contributing/Modules/CompileAndRun.md create mode 100644 docs/README.md create mode 100644 docs/SUMMARY.md create mode 100644 docs/Usage/CLI.md create mode 100644 docs/Usage/Configuration.md create mode 100644 docs/Usage/Install.md create mode 100644 docs/Usage/README.md create mode 100644 docs/_book/Contributing/Modules/CompileAndRun.html create mode 100644 docs/_book/Usage/CLI.html create mode 100644 docs/_book/Usage/Configuration.html create mode 100644 docs/_book/Usage/Install.html create mode 100644 docs/_book/Usage/index.html create mode 100644 docs/_book/gitbook/fonts/fontawesome/FontAwesome.otf create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff create mode 100644 docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 create mode 100644 docs/_book/gitbook/gitbook-plugin-api/api.css create mode 100644 docs/_book/gitbook/gitbook-plugin-api/api.js create mode 100644 docs/_book/gitbook/gitbook-plugin-code/plugin.css create mode 100644 docs/_book/gitbook/gitbook-plugin-code/plugin.js create mode 100644 docs/_book/gitbook/gitbook-plugin-comment/plugin.css create mode 100644 docs/_book/gitbook/gitbook-plugin-comment/plugin.js create mode 100644 docs/_book/gitbook/gitbook-plugin-emphasize/plugin.css create mode 100644 docs/_book/gitbook/gitbook-plugin-fontsettings/fontsettings.js create mode 100644 docs/_book/gitbook/gitbook-plugin-fontsettings/website.css create mode 100644 docs/_book/gitbook/gitbook-plugin-github/plugin.js create mode 100644 docs/_book/gitbook/gitbook-plugin-highlight/ebook.css create mode 100644 docs/_book/gitbook/gitbook-plugin-highlight/website.css create mode 100644 docs/_book/gitbook/gitbook-plugin-hints/plugin-hints.css create mode 100644 docs/_book/gitbook/gitbook-plugin-livereload/plugin.js create mode 100644 docs/_book/gitbook/gitbook-plugin-lunr/lunr.min.js create mode 100644 docs/_book/gitbook/gitbook-plugin-lunr/search-lunr.js create mode 100644 docs/_book/gitbook/gitbook-plugin-offline/service-worker-registration.js create mode 100644 docs/_book/gitbook/gitbook-plugin-pretty-term/terminal.css create mode 100644 docs/_book/gitbook/gitbook-plugin-pretty-term/terminal.js create mode 100644 docs/_book/gitbook/gitbook-plugin-search/lunr.min.js create mode 100644 docs/_book/gitbook/gitbook-plugin-search/search-engine.js create mode 100644 docs/_book/gitbook/gitbook-plugin-search/search.css create mode 100644 docs/_book/gitbook/gitbook-plugin-search/search.js create mode 100644 docs/_book/gitbook/gitbook-plugin-sharing/buttons.js create mode 100644 docs/_book/gitbook/gitbook.js create mode 100644 docs/_book/gitbook/images/apple-touch-icon-precomposed-152.png create mode 100644 docs/_book/gitbook/images/favicon.ico create mode 100644 docs/_book/gitbook/style.css create mode 100644 docs/_book/gitbook/theme.js create mode 100644 docs/_book/index.html create mode 100644 docs/_book/search_index.json create mode 100644 docs/_book/service-worker.js create mode 100644 docs/book.json (limited to 'bin/luxcena-neo-cli.sh') diff --git a/app.js b/app.js index 5cdfcbd..264a0c1 100644 --- a/app.js +++ b/app.js @@ -7,7 +7,7 @@ let io = require("socket.io").listen(server); // Firstly we set up all globals, check that the usrData dir exists, if not, we run the setup let srcDir = __dirname; -let installDir = "/home/lux-neo/install/" +let installDir = "/home/lux-neo/" if (process.argv.length >= 3) { installDir = process.argv[2]; } let dataDir = installDir + "/userdata/"; if (!fse.existsSync(dataDir)) { throw new Error("APPDIR not found! Exiting..."); } @@ -55,21 +55,22 @@ fse.ensureDirSync(dataDir + "/usrCode/"); fse.ensureDirSync(dataDir + "/remoteCode/"); // Generate config-files if (!fse.existsSync(dataDir + "/config/versionChecker.json")) { - fse.writeJsonSync(dataDir + "/config/versionChecker.json", { + fse.writeFileSync(dataDir + "/config/versionChecker.json", JSON.stringify({ "branch": "dev", "checkInterval": 5 - }) + }, null, 4)); } if (!fse.existsSync(dataDir + "/config/strip.json")) { - fse.writeJsonSync(dataDir + "/config/strip.json", { - "segments": [9, 8, 8, 8, 8, 8, 4], + fse.writeFileSync(dataDir + "/config/strip.json", JSON.stringify({ + "segments": [], + "matrix": [], "segmentConfiguration": "snake", "led_pin": 18, "led_freq_hz": 800000, "led_dma": 10, "led_invert": false, "led_channel": 0 - }) + }, null, 4)); } diff --git a/bin/install.sh b/bin/install.sh index 005f073..cd4f07b 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -111,19 +111,19 @@ tput setaf 8 printf '%s\n' " - Making app-dir (/bin/luxcena-neo)..." tput sgr0 userDir=$(eval echo "~$username") -mkdir -p "$userDir/install" &>> $LOG || die -chown $username:$username "$userDir/install" &>> $LOG || die -mkdir -p "$userDir/install/src" &>> $LOG || die -chown $username:$username "$userDir/install/src" &>> $LOG || die -mkdir -p "$userDir/install/userdata" &>> $LOG || die -chown $username:$username "$userDir/install/userdata" &>> $LOG || die +#mkdir -p "$userDir/install" &>> $LOG || die +#chown $username:$username "$userDir/install" &>> $LOG || die +mkdir -p "$userDir/src" &>> $LOG || die +chown $username:$username "$userDir/src" &>> $LOG || die +mkdir -p "$userDir/userdata" &>> $LOG || die +chown $username:$username "$userDir/userdata" &>> $LOG || die # Third we copy the source into the correct swap-folder tput setaf 8 printf '%s\n' " - Copying sourceCode to app-dir..." tput sgr0 -cp -r . "$userDir/install/src" &>> $LOG || die -chown -R $username:$username "$userDir/install/src" &>> $LOG || die +cp -r . "$userDir/src" &>> $LOG || die +chown -R $username:$username "$userDir/src" &>> $LOG || die # fourth we run npm i tput setaf 8 @@ -131,7 +131,7 @@ printf '%s\n' " - Running npm i..." tput sgr0 tput sc export NODE_ENV=production &>> $LOG || die -runuser -l $username -c 'npm --prefix ~/install/src install ~/install/src --only=production' &>> $LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? +runuser -l $username -c 'npm --prefix ~/src install ~/src --only=production' &>> $LOG || die # This is probably a bit overkill to have --only=... but better safe than sorry? tput rc; tput ed # fourth we copy the cli to our bin folder @@ -139,7 +139,7 @@ tput setaf 8 printf '%s\n' " - Adding cli-script..." tput sgr0 cp bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh &>> $LOG || die -ln -sf /usr/bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo &>> $LOG || die +ln -sf /usr/bin/luxcena-neo-cli.sh /usr/bin/lux-neo &>> $LOG || die tput rc; tput ed # Fifth we add the service files diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 761459e..5d960c0 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -71,7 +71,7 @@ if [ "$action" == "update" ]; then runuser -l 'lux-neo' -c 'npm i --only=production' cd $oldDir printf "Update complete, run these commands to finish it completly:\n" - printf "sudo /home/lux-neo/luxcena-neo-install/bin/post-update.sh\n" + printf "sudo /home/lux-neo/install/src/bin/post-update.sh\n" printf "sudo systemctl luxcena-neo start\n" systemctl start luxcena-neo @@ -100,8 +100,12 @@ elif [ "$action" == "uninstall" ]; then printf "Well, some dependencies still exists. Those are:\n" printf " - rpi_ws281x-library\n" printf " - packages (nodejs scons python-dev swig)\n" + tput sgr0 fi +elif [ "$action" == "conf" ]; then + nano /home/lux-neo/luxcena-neo-install/userdata/config/strip.json + elif [ "$action" == "start" ]; then systemctl start luxcena-neo elif [ "$action" == "stop" ]; then diff --git a/bin/post-update.sh b/bin/post-update.sh index e0e8bc1..59b1fe9 100644 --- a/bin/post-update.sh +++ b/bin/post-update.sh @@ -1,5 +1,4 @@ -cd /home/lux-neo/luxcena-neo-install cp bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh echo "Post-update done..." diff --git a/docs/Contributing/Modules/CompileAndRun.md b/docs/Contributing/Modules/CompileAndRun.md new file mode 100644 index 0000000..535ed5f --- /dev/null +++ b/docs/Contributing/Modules/CompileAndRun.md @@ -0,0 +1,58 @@ +## Index +--- +## Locals + +### var `pythonSupportFiles` + +Points to the files for our python support code. They should be in a subdir of the module itself. + +## Exported + +### class `Python` + +This is exported as Python, just so that we could add other languages later. Used to build and run python-scripts with our support-code. + +### method `Python.constructor` + +Takes one parameter, which is the full path to the folder where the script is located. + +When initializing the class, this will be called. Can be done like this: + +```javascript +new compileRun.Python(global.DirSwap + "/usrData/usrCode/example"); +``` + +### method `Python.compile` + +This deletes old build-folder, and makes a new one. It then moves all required files into the build-folder, making us ready for running the script. + +### method `Python.run` + +Spawns a new process, starting entry.py in our build-folder. It also attaches event-listners on our class-object. All of them is in the example below: + +```javascript +let sc = new compileRun.Python(global.DirSwap + "/usrData/usrCode/example"); +​ +// When data is printed from the python-script +sc.on("stdout::data", (_stdout) => { }); +// Last write when script closes, any exiting messages +sc.on("stdout::end", (_stdout) => { }); +// When something is printed from the python-script to the error-out. Usually when a `throw` is called +sc.on("stderr::out", (_stderr) => { }); +// Last words when process is dying from an error :`( +sc.on("stderr::end", (_stderr) => { }); +// When script exits, _code is the exit-code +sc.on("close", (_code) => { }); +``` + +## Python + +This is the support-files for user-made scripts. + +## Entry.py + +The entry-point when running a script. A file called script.py, containing the user-script, should be placed next to this file. Starting it should be done like this (Where app-root is where our app.js is located): + +``` +python entry.py +``` diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..3d07efe --- /dev/null +++ b/docs/README.md @@ -0,0 +1,2 @@ +# Introduction + diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md new file mode 100644 index 0000000..84228c7 --- /dev/null +++ b/docs/SUMMARY.md @@ -0,0 +1,10 @@ +# Summary + +* [Introduction](README.md) +* [Usage](Usage/README.md) + * [Install](Usage/Install.md) + * [Configuration](Usage/Configuration.md) + * [CLI](Usage/CLI.md) +* Contributing + * Modules + * [CompileAndRun](Contributing/Modules/CompileAndRun.md) diff --git a/docs/Usage/CLI.md b/docs/Usage/CLI.md new file mode 100644 index 0000000..f689a3d --- /dev/null +++ b/docs/Usage/CLI.md @@ -0,0 +1,26 @@ +# Command line interface +--- + +This gets installed in the `/usr/bin` directory, and can be called by: +```bash +$ luxcena-neo.sh +``` +or is alias +```bash +$ lux-neo +``` +{% hint style='danger' %} +This CLI assumes root access, so please run it with `sudo` +{% endhint %} + +## Options +#### `sudo lux-neo uninstall` +Uninstall the whole thing. You will have to remove this script yourself. +#### `sudo lux-neo update` +Update to the newest version on the current branch. +#### `sudo lux-neo conf` +Open the strip-config in `nano`. +#### `sudo lux-neo start` +Start the server. +#### `sudo lux-neo stop` +Stop the server. diff --git a/docs/Usage/Configuration.md b/docs/Usage/Configuration.md new file mode 100644 index 0000000..c9750d0 --- /dev/null +++ b/docs/Usage/Configuration.md @@ -0,0 +1,78 @@ +# Configuration + +How to setup luxcena-neo to work with your setup + +--- + +```bash +$ sudo lux-neo conf +``` + +When running the command above, a config file should appear in the editor 'nano'. +```json +{ + "led_count": 53, + "segments": [], + "matrix": [], + "segmentConfiguration": "snake", + "led_pin": 18, + "led_freq_hz": 800000, + "led_dma": 10, + "led_invert": false, + "led_channel": 0 +} +``` +{% hint style='tip' %} +If you rather want to use vim or another editor, the file is at `/home/lux-neo/userdata/config/strip.json` +{% endhint %} + +## led_count + +This is the number of LED's you want to control. + +## segments + +This is a simple list, here you should add the lenghts of all your segments. Please enter the "real" length, and don't start counting from 0. If you just want one segment, you should just have one element in the list, which is the number of led's you are controlling. + +When summing this list, it should check out with the "led-count"-option. + +## matrix + +This is a two dimensonal array, used to arrange the segments in a matrix of your likings. Here you enter the segment-number to represent them. In the example above, all the segments are in one line. If you want to have them in a square, it could look like this: + +```json +"segments": [10, 10, 10, 10, 10, 10, 10, 10, 10], +"matrix": [ + [0, 1, 2], + [3, 4, 5], + [6, 7, 8] +] +``` +{% hint style='danger' %} +If you don't have a reference to all the segments or something, the matrix setup will fail. And fall back to 'segmentsconfiguration' +{% endhint %} + +## segmentconfiguration + +If the matrix-option is empty or badly setup. The matrix will be set up using one of these defaults: + +``` +"snake": +"line": +"random": +``` + +## led_pin +If using the luxcena-shield, you shouldn't have to worry about this option. But set it to the GPIO-port connected to your pixel's din-port. + +## led_dma +{% hint style='danger' %} +If using a newer RPi (3 or newer), leave this as 10! Or your file-system might crash. +{% endhint %} +This is the dma-channel used to generate the data-stream. If you for some reason need channel 10 for something else, you can change it. But i strongly recommend leaving it to 10! + +## led_invert +This should not be touched, unless you are using a inverting level converter. + +## led_channel +Leave this as default unless you know what you are doing. diff --git a/docs/Usage/Install.md b/docs/Usage/Install.md new file mode 100644 index 0000000..ced241a --- /dev/null +++ b/docs/Usage/Install.md @@ -0,0 +1,32 @@ +# Installation + +If you want to install luxcena-neo to use it, these are the instructions: + +--- + +## Requirements +* The luxcena-shield +* Access to the raspberry pi (SSH or direct) +* Root access (preferably through the `sudo` command) + +## Install +1. Start with logging into your Raspberry Pi +2. Run these commands +```bash +$ git clone https://github.com/JakobST1n/Luxcena-Neo +$ cd Luxcena-Neo +$ sudo ./bin/install.sh +``` +3. Follow the instructions on screen. You should answer yes to most of the questions. +4. The install-process might seem to hang, but there is just no output being sent to the console. If you want to see a bit more verbose output. Open another terminal session, and run this command: +```bash +$ tail -n 10 -f /tmp/luxcena-neo.install.log +``` +This is also where you will find possible reasons for a failed install. +4. Luxcena-Neo should now be installed. Start it with this command +```bash +$ luxcena-neo start +``` + +## Troubleshooting +We haven't encountered any troubles yet, but once we do, we will post fix'es here. diff --git a/docs/Usage/README.md b/docs/Usage/README.md new file mode 100644 index 0000000..ce62034 --- /dev/null +++ b/docs/Usage/README.md @@ -0,0 +1,11 @@ +# Usage + + +## [Install](/Usage/Install.md) +Want to install luxcena-neo? This is the guide! + +## [Configuration](/Usage/Configuration.md) +Just installed luxcena-neo, or you have changed your setup? This is the guide! + +## [CLI](/Usage/CLI.md) +Ready to start the thing? Or change something? diff --git a/docs/_book/Contributing/Modules/CompileAndRun.html b/docs/_book/Contributing/Modules/CompileAndRun.html new file mode 100644 index 0000000..b1c3f48 --- /dev/null +++ b/docs/_book/Contributing/Modules/CompileAndRun.html @@ -0,0 +1,413 @@ + + + + + + + CompileAndRun · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + +
+
+ +
+
+ +
+ +

Index

+
+

Locals

+

var pythonSupportFiles

+

Points to the files for our python support code. They should be in a subdir of the module itself.

+

Exported

+

class Python

+

This is exported as Python, just so that we could add other languages later. Used to build and run python-scripts with our support-code.

+

method Python.constructor

+

Takes one parameter, which is the full path to the folder where the script is located.

+

When initializing the class, this will be called. Can be done like this:

+
new compileRun.Python(global.DirSwap + "/usrData/usrCode/example");
+
+

method Python.compile

+

This deletes old build-folder, and makes a new one. It then moves all required files into the build-folder, making us ready for running the script.

+

method Python.run

+

Spawns a new process, starting entry.py in our build-folder. It also attaches event-listners on our class-object. All of them is in the example below:

+
let sc = new compileRun.Python(global.DirSwap + "/usrData/usrCode/example");
+​
+// When data is printed from the python-script
+sc.on("stdout::data", (_stdout) => { });
+// Last write when script closes, any exiting messages
+sc.on("stdout::end", (_stdout) => { });
+// When something is printed from the python-script to the error-out. Usually when a `throw` is called
+sc.on("stderr::out", (_stderr) => { });
+// Last words when process is dying from an error :`(
+sc.on("stderr::end", (_stderr) => { });
+// When script exits, _code is the exit-code
+sc.on("close", (_code) => { });
+
+

Python

+

This is the support-files for user-made scripts.

+

Entry.py

+

The entry-point when running a script. A file called script.py, containing the user-script, should be placed next to this file. Starting it should be done like this (Where app-root is where our app.js is located):

+
python entry.py <pathToAppRoot>
+
+ +
+ +
+
+
+ +

results matching ""

+
    + +
    +
    + +

    No results matching ""

    + +
    +
    +
    + +
    +
    + +
    + + + + + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/Usage/CLI.html b/docs/_book/Usage/CLI.html new file mode 100644 index 0000000..d56a2f6 --- /dev/null +++ b/docs/_book/Usage/CLI.html @@ -0,0 +1,405 @@ + + + + + + + CLI · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + +
    +
    + +
    +
    + +
    + +

    Command line interface

    +
    +

    This gets installed in the /usr/bin directory, and can be called by:

    +
    $ luxcena-neo.sh
    +
    +

    or is alias

    +
    $ lux-neo
    +
    +

    This CLI assumes root access, so please run it with sudo

    +

    +

    Options

    +

    sudo lux-neo uninstall

    +

    Uninstall the whole thing. You will have to remove this script yourself.

    +

    sudo lux-neo update

    +

    Update to the newest version on the current branch.

    +

    sudo lux-neo conf

    +

    Open the strip-config in nano.

    +

    sudo lux-neo start

    +

    Start the server.

    +

    sudo lux-neo stop

    +

    Stop the server.

    + + +
    + +
    +
    +
    + +

    results matching ""

    +
      + +
      +
      + +

      No results matching ""

      + +
      +
      +
      + +
      +
      + +
      + + + + + + + + + + +
      + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/Usage/Configuration.html b/docs/_book/Usage/Configuration.html new file mode 100644 index 0000000..ec2a8cc --- /dev/null +++ b/docs/_book/Usage/Configuration.html @@ -0,0 +1,441 @@ + + + + + + + Configuration · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + +
      + +
      + +
      + + + + + + + + +
      +
      + +
      +
      + +
      + +

      Configuration

      +

      How to setup luxcena-neo to work with your setup

      +
      +
      $ sudo lux-neo conf
      +
      +

      When running the command above, a config file should appear in the editor 'nano'.

      +
      {
      +    "led_count": 53,
      +    "segments": [],
      +    "matrix": [],
      +    "segmentConfiguration": "snake",
      +    "led_pin": 18,
      +    "led_freq_hz": 800000,
      +    "led_dma": 10,
      +    "led_invert": false,
      +    "led_channel": 0
      +}
      +
      +

      If you rather want to use vim or another editor, the file is at /home/lux-neo/userdata/config/strip.json

      +

      +

      led_count

      +

      This is the number of LED's you want to control.

      +

      segments

      +

      This is a simple list, here you should add the lenghts of all your segments. Please enter the "real" length, and don't start counting from 0. If you just want one segment, you should just have one element in the list, which is the number of led's you are controlling.

      +

      When summing this list, it should check out with the "led-count"-option.

      +

      matrix

      +

      This is a two dimensonal array, used to arrange the segments in a matrix of your likings. Here you enter the segment-number to represent them. In the example above, all the segments are in one line. If you want to have them in a square, it could look like this:

      +
      "segments": [10, 10, 10, 10, 10, 10, 10, 10, 10],
      +"matrix": [
      +    [0, 1, 2],
      +    [3, 4, 5],
      +    [6, 7, 8]
      +]
      +
      +

      If you don't have a reference to all the segments or something, the matrix setup will fail. And fall back to 'segmentsconfiguration'

      +

      +

      segmentconfiguration

      +

      If the matrix-option is empty or badly setup. The matrix will be set up using one of these defaults:

      +
      "snake":
      +"line":
      +"random":
      +

      led_pin

      +

      If using the luxcena-shield, you shouldn't have to worry about this option. But set it to the GPIO-port connected to your pixel's din-port.

      +

      led_dma

      +

      If using a newer RPi (3 or newer), leave this as 10! Or your file-system might crash.

      +
      +This is the dma-channel used to generate the data-stream. If you for some reason need channel 10 for something else, you can change it. But i strongly recommend leaving it to 10!

      +

      led_invert

      +

      This should not be touched, unless you are using a inverting level converter.

      +

      led_channel

      +

      Leave this as default unless you know what you are doing.

      + + +
      + +
      +
      +
      + +

      results matching ""

      +
        + +
        +
        + +

        No results matching ""

        + +
        +
        +
        + +
        +
        + +
        + + + + + + + + + + + + + + +
        + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/Usage/Install.html b/docs/_book/Usage/Install.html new file mode 100644 index 0000000..a3af5e1 --- /dev/null +++ b/docs/_book/Usage/Install.html @@ -0,0 +1,417 @@ + + + + + + + Install · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        + + + + + + + + +
        + +
        + +
        + + + + + + + + +
        +
        + +
        +
        + +
        + +

        Installation

        +

        If you want to install luxcena-neo to use it, these are the instructions:

        +
        +

        Requirements

        +
          +
        • The luxcena-shield
        • +
        • Access to the raspberry pi (SSH or direct)
        • +
        • Root access (preferably through the sudo command)
        • +
        +

        Install

        +
          +
        1. Start with logging into your Raspberry Pi
        2. +
        3. Run these commands
          $ git clone https://github.com/JakobST1n/Luxcena-Neo
          +$ cd Luxcena-Neo
          +$ sudo ./bin/install.sh
          +
          +
        4. +
        5. Follow the instructions on screen. You should answer yes to most of the questions.
        6. +
        7. The install-process might seem to hang, but there is just no output being sent to the console. If you want to see a bit more verbose output. Open another terminal session, and run this command:
          $ tail -n 10 -f /tmp/luxcena-neo.install.log
          +
          +This is also where you will find possible reasons for a failed install.
        8. +
        9. Luxcena-Neo should now be installed. Start it with this command
          $ luxcena-neo start
          +
          +
        10. +
        +

        Troubleshooting

        +

        We haven't encountered any troubles yet, but once we do, we will post fix'es here.

        + + +
        + +
        +
        +
        + +

        results matching ""

        +
          + +
          +
          + +

          No results matching ""

          + +
          +
          +
          + +
          +
          + +
          + + + + + + + + + + + + + + +
          + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/Usage/index.html b/docs/_book/Usage/index.html new file mode 100644 index 0000000..a461209 --- /dev/null +++ b/docs/_book/Usage/index.html @@ -0,0 +1,397 @@ + + + + + + + Usage · Luxcena-Neo wiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + +
          + +
          + +
          + + + + + + + + +
          +
          + +
          +
          + +
          + +

          Usage

          +

          Install

          +

          Want to install luxcena-neo? This is the guide!

          +

          Configuration

          +

          Just installed luxcena-neo, or you have changed your setup? This is the guide!

          +

          CLI

          +

          Ready to start the thing? Or change something?

          + + +
          + +
          +
          +
          + +

          results matching ""

          +
            + +
            +
            + +

            No results matching ""

            + +
            +
            +
            + +
            +
            + +
            + + + + + + + + + + + + + + +
            + + +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/gitbook/fonts/fontawesome/FontAwesome.otf b/docs/_book/gitbook/fonts/fontawesome/FontAwesome.otf new file mode 100644 index 0000000..d4de13e Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/FontAwesome.otf differ diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot new file mode 100644 index 0000000..c7b00d2 Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot differ diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg new file mode 100644 index 0000000..8b66187 --- /dev/null +++ b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.svg @@ -0,0 +1,685 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf new file mode 100644 index 0000000..f221e50 Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf differ diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff new file mode 100644 index 0000000..6e7483c Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff differ diff --git a/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 new file mode 100644 index 0000000..7eb74fd Binary files /dev/null and b/docs/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 differ diff --git a/docs/_book/gitbook/gitbook-plugin-api/api.css b/docs/_book/gitbook/gitbook-plugin-api/api.css new file mode 100644 index 0000000..4bcd88e --- /dev/null +++ b/docs/_book/gitbook/gitbook-plugin-api/api.css @@ -0,0 +1,106 @@ +.markdown-section { + overflow: visible !important; +} + +.api-container { + margin: 0px 0px; + box-shadow: 0px 1px 3px rgba(0,0,0,0.25); + transition: margin 300ms, box-shadow 300ms; +} + +.api-container.expanded { + margin: 0px -16px; + box-shadow: 0px 6px 16px rgba(0,0,0,0.25); +} + +.api-container .api-header { + line-height: 26px; + padding: 10px; + border-bottom: 1px solid #EEEEEE; + cursor: pointer; + display: flex; + flex-direction: row; +} + +.api-container .api-header small { + background-color: #444444; + background-image: linear-gradient(45deg, rgba(0,0,0,0) 50%, rgba(0, 0, 0, 0.1) 50%); + color: #FFFFFF; + font-size: 9px !important; + margin-right: 8px; + padding: 0px 4px; + font-weight: bold; + display: block; + line-height: 28px; + height: 28px; + width: 46px; + text-align: center; +} + +.api-container .api-header small.get { + background-color: #226ca0; +} + +.api-container .api-header small.put { + background-color: #a08022; +} + +.api-container .api-header small.post { + background-color: #46a022; +} + +.api-container .api-header small.delete { + background-color: #a02222; +} + +.api-container .api-header h2 { + display: block; + flex: 1; + margin: 0; + padding: 0; + font-size: 16px; + font-weight: normal; + white-space: nowrap; + line-height: 28px; + height: 26px; +} + +.api-container .api-header span { + display: block; + color: #266D9E; + font-size: 11px; + padding: 0px 8px; + border: 1px solid #266D9E; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-left: 10px; +} + +.api-container .api-content { + height: 0px; + overflow: hidden; +} + +.api-container .api-content div { + padding: 20px 20px 10px 20px; +} + +.api-container .api-content div h3 { + padding: 14px 0px; + margin: 0px; + border-top: 1px solid #EEE; + color: #537186; + font-size: 13px; + text-transform: uppercase; + letter-spacing: 1px; +} + +.api-container .api-content div pre { + line-height: 18px; + font-size: 15px; +} + +.api-container.expanded .api-content { + height: auto; +} diff --git a/docs/_book/gitbook/gitbook-plugin-api/api.js b/docs/_book/gitbook/gitbook-plugin-api/api.js new file mode 100644 index 0000000..ebf6acf --- /dev/null +++ b/docs/_book/gitbook/gitbook-plugin-api/api.js @@ -0,0 +1,7 @@ +require(["gitbook"], function(gitbook) { + gitbook.events.bind("page.change", function() { + $(".api-header").click(function(event) { + $(event.currentTarget).parent().toggleClass('expanded'); + }); + }); +}); diff --git a/docs/_book/gitbook/gitbook-plugin-code/plugin.css b/docs/_book/gitbook/gitbook-plugin-code/plugin.css new file mode 100644 index 0000000..a68fcdc --- /dev/null +++ b/docs/_book/gitbook/gitbook-plugin-code/plugin.css @@ -0,0 +1,37 @@ +#code-textarea { + height: 0; + position: fixed; + top: -1000px; + width: 0; +} + +.code-wrapper { + position: relative; +} + +.code-wrapper i { + color: #c1c7cd; + cursor: pointer; + font-size: 12px; + font-weight: bold; + position: absolute; + right: 1em; + top: 1em; +} + +.code-wrapper pre { + background: #f7f8f9; + border-radius: 3px; + counter-reset: line; + font-size: 15px; +} + +.code-wrapper pre > code > span.code-line:before { + counter-increment: line; + color: #c1c7cd; + content: counter(line); + display: inline-block; + font-size: 12px; + margin-right: 1.5em; + width: 1em; +} diff --git a/docs/_book/gitbook/gitbook-plugin-code/plugin.js b/docs/_book/gitbook/gitbook-plugin-code/plugin.js new file mode 100644 index 0000000..555d724 --- /dev/null +++ b/docs/_book/gitbook/gitbook-plugin-code/plugin.js @@ -0,0 +1,91 @@ +require(['gitbook', 'jQuery'], function(gitbook, $) { + + const TERMINAL_HOOK = '**[terminal]' + + var pluginConfig = {}; + var timeouts = {}; + + function addCopyButton(wrapper) { + wrapper.append( + $('') + .click(function() { + copyCommand($(this)); + }) + ); + } + + function addCopyTextarea() { + + /* Add also the text area that will allow to copy */ + $('body').append('",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Qe=te.documentElement,Je=/^key/,Ke=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ze=/^([^.]*)(?:\.(.+)|)/;de.event={global:{},add:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.get(e);if(m)for(n.handler&&(i=n,n=i.handler,o=i.selector),o&&de.find.matchesSelector(Qe,o),n.guid||(n.guid=de.guid++),(u=m.events)||(u=m.events={}),(s=m.handle)||(s=m.handle=function(t){return"undefined"!=typeof de&&de.event.triggered!==t.type?de.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(qe)||[""],c=t.length;c--;)a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h&&(f=de.event.special[h]||{},h=(o?f.delegateType:f.bindType)||h,f=de.event.special[h]||{},l=de.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&de.expr.match.needsContext.test(o),namespace:d.join(".")},i),(p=u[h])||(p=u[h]=[],p.delegateCount=0,f.setup&&f.setup.call(e,r,d,s)!==!1||e.addEventListener&&e.addEventListener(h,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,l):p.push(l),de.event.global[h]=!0)},remove:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.hasData(e)&&Fe.get(e);if(m&&(u=m.events)){for(t=(t||"").match(qe)||[""],c=t.length;c--;)if(a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){for(f=de.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=u[h]||[],a=a[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=i=p.length;i--;)l=p[i],!o&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(p.splice(i,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(e,l));s&&!p.length&&(f.teardown&&f.teardown.call(e,d,m.handle)!==!1||de.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)de.event.remove(e,h+t[c],n,r,!0);de.isEmptyObject(u)&&Fe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,o,i,s,a=de.event.fix(e),u=new Array(arguments.length),c=(Fe.get(this,"events")||{})[a.type]||[],l=de.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(i=[],s={},n=0;n-1:de.find(o,this,null,[c]).length),s[o]&&i.push(r);i.length&&a.push({elem:c,handlers:i})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,tt=/\s*$/g;de.extend({htmlPrefilter:function(e){return e.replace(et,"<$1>")},clone:function(e,t,n){var r,o,i,s,a=e.cloneNode(!0),u=de.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||de.isXMLDoc(e)))for(s=v(a),i=v(e),r=0,o=i.length;r0&&y(s,!u&&v(e,"script")),a},cleanData:function(e){for(var t,n,r,o=de.event.special,i=0;void 0!==(n=e[i]);i++)if(He(n)){if(t=n[Fe.expando]){if(t.events)for(r in t.events)o[r]?de.event.remove(n,r):de.removeEvent(n,r,t.handle);n[Fe.expando]=void 0}n[Re.expando]&&(n[Re.expando]=void 0)}}}),de.fn.extend({detach:function(e){return q(this,e,!0)},remove:function(e){return q(this,e)},text:function(e){return Le(this,function(e){return void 0===e?de.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.appendChild(e)}})},prepend:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(de.cleanData(v(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return de.clone(this,e,t)})},html:function(e){return Le(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!tt.test(e)&&!Ge[(Xe.exec(e)||["",""])[1].toLowerCase()]){e=de.htmlPrefilter(e);try{for(;n1)}}),de.Tween=I,I.prototype={constructor:I,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||de.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(de.cssNumber[n]?"":"px")},cur:function(){var e=I.propHooks[this.prop];return e&&e.get?e.get(this):I.propHooks._default.get(this)},run:function(e){var t,n=I.propHooks[this.prop];return this.options.duration?this.pos=t=de.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):I.propHooks._default.set(this),this}},I.prototype.init.prototype=I.prototype,I.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=de.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){de.fx.step[e.prop]?de.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[de.cssProps[e.prop]]&&!de.cssHooks[e.prop]?e.elem[e.prop]=e.now:de.style(e.elem,e.prop,e.now+e.unit)}}},I.propHooks.scrollTop=I.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},de.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},de.fx=I.prototype.init,de.fx.step={};var ht,dt,gt=/^(?:toggle|show|hide)$/,mt=/queueHooks$/;de.Animation=de.extend(U,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return d(n.elem,e,$e.exec(t),n),n}]},tweener:function(e,t){de.isFunction(e)?(t=e,e=["*"]):e=e.match(qe);for(var n,r=0,o=e.length;r1)},removeAttr:function(e){return this.each(function(){de.removeAttr(this,e)})}}),de.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return"undefined"==typeof e.getAttribute?de.prop(e,t,n):(1===i&&de.isXMLDoc(e)||(o=de.attrHooks[t.toLowerCase()]||(de.expr.match.bool.test(t)?vt:void 0)),void 0!==n?null===n?void de.removeAttr(e,t):o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):o&&"get"in o&&null!==(r=o.get(e,t))?r:(r=de.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&de.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(qe);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),vt={set:function(e,t,n){return t===!1?de.removeAttr(e,n):e.setAttribute(n,n),n}},de.each(de.expr.match.bool.source.match(/\w+/g),function(e,t){var n=yt[t]||de.find.attr;yt[t]=function(e,t,r){var o,i,s=t.toLowerCase();return r||(i=yt[s],yt[s]=o,o=null!=n(e,t,r)?s:null,yt[s]=i),o}});var xt=/^(?:input|select|textarea|button)$/i,bt=/^(?:a|area)$/i;de.fn.extend({prop:function(e,t){return Le(this,de.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[de.propFix[e]||e]})}}),de.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&de.isXMLDoc(e)||(t=de.propFix[t]||t,o=de.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=de.find.attr(e,"tabindex");return t?parseInt(t,10):xt.test(e.nodeName)||bt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),pe.optSelected||(de.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),de.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){de.propFix[this.toLowerCase()]=this}),de.fn.extend({addClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).addClass(e.call(this,t,X(this)))});if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).removeClass(e.call(this,t,X(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):de.isFunction(e)?this.each(function(n){de(this).toggleClass(e.call(this,n,X(this),t),t)}):this.each(function(){var t,r,o,i;if("string"===n)for(r=0,o=de(this),i=e.match(qe)||[];t=i[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||(t=X(this),t&&Fe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Fe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+z(X(n))+" ").indexOf(t)>-1)return!0;return!1}});var wt=/\r/g;de.fn.extend({val:function(e){var t,n,r,o=this[0];{if(arguments.length)return r=de.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=r?e.call(this,n,de(this).val()):e,null==o?o="":"number"==typeof o?o+="":de.isArray(o)&&(o=de.map(o,function(e){return null==e?"":e+""})),t=de.valHooks[this.type]||de.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))});if(o)return t=de.valHooks[o.type]||de.valHooks[o.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(wt,""):null==n?"":n)}}}),de.extend({valHooks:{option:{get:function(e){var t=de.find.attr(e,"value");return null!=t?t:z(de.text(e))}},select:{get:function(e){var t,n,r,o=e.options,i=e.selectedIndex,s="select-one"===e.type,a=s?null:[],u=s?i+1:o.length;for(r=i<0?u:s?i:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),de.each(["radio","checkbox"],function(){de.valHooks[this]={set:function(e,t){if(de.isArray(t))return e.checked=de.inArray(de(e).val(),t)>-1}},pe.checkOn||(de.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Tt=/^(?:focusinfocus|focusoutblur)$/;de.extend(de.event,{trigger:function(t,n,r,o){var i,s,a,u,c,l,f,p=[r||te],h=ce.call(t,"type")?t.type:t,d=ce.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||te,3!==r.nodeType&&8!==r.nodeType&&!Tt.test(h+de.event.triggered)&&(h.indexOf(".")>-1&&(d=h.split("."),h=d.shift(),d.sort()),c=h.indexOf(":")<0&&"on"+h,t=t[de.expando]?t:new de.Event(h,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=d.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:de.makeArray(n,[t]),f=de.event.special[h]||{},o||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!o&&!f.noBubble&&!de.isWindow(r)){for(u=f.delegateType||h,Tt.test(u+h)||(s=s.parentNode);s;s=s.parentNode)p.push(s),a=s;a===(r.ownerDocument||te)&&p.push(a.defaultView||a.parentWindow||e)}for(i=0;(s=p[i++])&&!t.isPropagationStopped();)t.type=i>1?u:f.bindType||h,l=(Fe.get(s,"events")||{})[t.type]&&Fe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&He(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=h,o||t.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),n)!==!1||!He(r)||c&&de.isFunction(r[h])&&!de.isWindow(r)&&(a=r[c],a&&(r[c]=null),de.event.triggered=h,r[h](),de.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=de.extend(new de.Event,n,{type:e,isSimulated:!0});de.event.trigger(r,null,t)}}),de.fn.extend({trigger:function(e,t){return this.each(function(){de.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return de.event.trigger(e,t,n,!0)}}),de.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){de.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),de.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||de.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){de.event.simulate(t,e.target,de.event.fix(e))};de.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=Fe.access(r,t);o||r.addEventListener(e,n,!0),Fe.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=Fe.access(r,t)-1;o?Fe.access(r,t,o):(r.removeEventListener(e,n,!0),Fe.remove(r,t))}}});var Ct=e.location,jt=de.now(),kt=/\?/;de.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||de.error("Invalid XML: "+t),n};var Et=/\[\]$/,St=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;de.param=function(e,t){var n,r=[],o=function(e,t){var n=de.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(de.isArray(e)||e.jquery&&!de.isPlainObject(e))de.each(e,function(){o(this.name,this.value)});else for(n in e)V(n,e[n],t,o);return r.join("&")},de.fn.extend({serialize:function(){return de.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=de.prop(this,"elements");return e?de.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!de(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!ze.test(e))}).map(function(e,t){var n=de(this).val();return null==n?null:de.isArray(n)?de.map(n,function(e){return{name:t.name,value:e.replace(St,"\r\n")}}):{name:t.name,value:n.replace(St,"\r\n")}}).get()}});var qt=/%20/g,Dt=/#.*$/,Ot=/([?&])_=[^&]*/,Lt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ht=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ft=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Pt={},Mt="*/".concat("*"),$t=te.createElement("a");$t.href=Ct.href,de.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Ht.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":de.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Q(Q(e,de.ajaxSettings),t):Q(de.ajaxSettings,e)},ajaxPrefilter:G(It),ajaxTransport:G(Pt),ajax:function(t,n){function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=void 0,s=a||"",C.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=J(d,C,r)),b=K(d,b,C,c),c?(d.ifModified&&(w=C.getResponseHeader("Last-Modified"),w&&(de.lastModified[i]=w),w=C.getResponseHeader("etag"),w&&(de.etag[i]=w)),204===t||"HEAD"===d.type?T="nocontent":304===t?T="notmodified":(T=b.state,p=b.data,h=b.error,c=!h)):(h=T,!t&&T||(T="error",t<0&&(t=0))),C.status=t,C.statusText=(n||T)+"",c?v.resolveWith(g,[p,T,C]):v.rejectWith(g,[C,T,h]),C.statusCode(x),x=void 0,f&&m.trigger(c?"ajaxSuccess":"ajaxError",[C,d,c?p:h]),y.fireWith(g,[C,T]),f&&(m.trigger("ajaxComplete",[C,d]),--de.active||de.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var o,i,s,a,u,c,l,f,p,h,d=de.ajaxSetup({},n),g=d.context||d,m=d.context&&(g.nodeType||g.jquery)?de(g):de.event,v=de.Deferred(),y=de.Callbacks("once memory"),x=d.statusCode||{},b={},w={},T="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=Lt.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)C.always(e[C.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return o&&o.abort(t),r(0,t),this}};if(v.promise(C),d.url=((t||d.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=(d.dataType||"*").toLowerCase().match(qe)||[""],null==d.crossDomain){c=te.createElement("a");try{c.href=d.url,c.href=c.href,d.crossDomain=$t.protocol+"//"+$t.host!=c.protocol+"//"+c.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=de.param(d.data,d.traditional)),Y(It,d,n,C),l)return C;f=de.event&&d.global,f&&0===de.active++&&de.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ft.test(d.type),i=d.url.replace(Dt,""),d.hasContent?d.data&&d.processData&&0===(d.contentType||"").indexOf("application/x-www-form-urlencoded")&&(d.data=d.data.replace(qt,"+")):(h=d.url.slice(i.length),d.data&&(i+=(kt.test(i)?"&":"?")+d.data,delete d.data),d.cache===!1&&(i=i.replace(Ot,"$1"),h=(kt.test(i)?"&":"?")+"_="+jt++ +h),d.url=i+h),d.ifModified&&(de.lastModified[i]&&C.setRequestHeader("If-Modified-Since",de.lastModified[i]),de.etag[i]&&C.setRequestHeader("If-None-Match",de.etag[i])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",d.contentType),C.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Mt+"; q=0.01":""):d.accepts["*"]);for(p in d.headers)C.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(g,C,d)===!1||l))return C.abort();if(T="abort",y.add(d.complete),C.done(d.success),C.fail(d.error),o=Y(Pt,d,n,C)){if(C.readyState=1,f&&m.trigger("ajaxSend",[C,d]),l)return C;d.async&&d.timeout>0&&(u=e.setTimeout(function(){C.abort("timeout")},d.timeout));try{l=!1,o.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return C},getJSON:function(e,t,n){return de.get(e,t,n,"json")},getScript:function(e,t){return de.get(e,void 0,t,"script")}}),de.each(["get","post"],function(e,t){de[t]=function(e,n,r,o){return de.isFunction(n)&&(o=o||r,r=n,n=void 0),de.ajax(de.extend({url:e,type:t,dataType:o,data:n,success:r},de.isPlainObject(e)&&e))}}),de._evalUrl=function(e){return de.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},de.fn.extend({wrapAll:function(e){var t;return this[0]&&(de.isFunction(e)&&(e=e.call(this[0])),t=de(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return de.isFunction(e)?this.each(function(t){de(this).wrapInner(e.call(this,t))}):this.each(function(){var t=de(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=de.isFunction(e);return this.each(function(n){de(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){de(this).replaceWith(this.childNodes)}),this}}),de.expr.pseudos.hidden=function(e){return!de.expr.pseudos.visible(e)},de.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},de.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Wt={0:200,1223:204},Bt=de.ajaxSettings.xhr();pe.cors=!!Bt&&"withCredentials"in Bt,pe.ajax=Bt=!!Bt,de.ajaxTransport(function(t){var n,r;if(pe.cors||Bt&&!t.crossDomain)return{send:function(o,i){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(s in o)a.setRequestHeader(s,o[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?i(0,"error"):i(a.status,a.statusText):i(Wt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),de.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),de.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return de.globalEval(e),e}}}),de.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),de.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,o){t=de(" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_book/search_index.json b/docs/_book/search_index.json new file mode 100644 index 0000000..0d84795 --- /dev/null +++ b/docs/_book/search_index.json @@ -0,0 +1 @@ +{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["introduct"],"Usage/":["chang","cli","configur","guide!","instal","luxcena","neo,","neo?","readi","setup?","something?","start","thing?","usag","want"],"Usage/Install.html":["$","(prefer","(ssh","./bin/install.sh","/tmp/luxcena","10","access","anoth","answer","be","bit","cd","clone","command$","command)","command:$","commands$","console.","direct)","do,","encount","f","fail","find","fix'","follow","git","hang,","haven't","here.","https://github.com/jakobst1n/luxcena","instal","install.","installed.","instruct","instructions:","it,","log","luxcena","more","n","neo","neo.install.log","now","onc","open","output","output.","pi","possibl","post","process","questions.","raspberri","reason","requir","root","run","screen.","see","seem","sent","session,","shield","start","sudo","tail","termin","through","troubl","troubleshoot","us","verbos","want","ye","yet,"],"Usage/Configuration.html":["\"led","\"led_channel\":","\"led_count\":","\"led_dma\":","\"led_freq_hz\":","\"led_invert\":","\"led_pin\":","\"line\":","\"matrix\":","\"random\":","\"real\"","\"segmentconfiguration\":","\"segments\":","\"snake\",","\"snake\":","$","'nano'.","'segmentsconfiguration'","(3","/home/lux","0","0.","1,","10","10!","10,","10],","18,","2],","4,","53,","5],","7,","800000,","8]","[","[0,","[10,","[3,","[6,","[],","]","above,","add","anoth","appear","arrang","array,","back","badli","chang","channel","check","command","conf","config","configur","connect","control.","controlling.","converter.","count","count\"","crash.","data","default","defaults:","dimenson","din","dma","doing.","don't","editor","editor,","element","else,","empti","enter","exampl","fail.","fall","false,","file","gener","gpio","here","invert","it.","know","leav","led'","led_channel","led_count","led_dma","led_invert","led_pin","lenght","length,","level","likings.","line.","list,","look","lux","luxcena","matrix","need","neo","neo/userdata/config/strip.json","newer","newer),","number","on","option","option.","out","pixel'","pleas","port","port.","reason","recommend","refer","repres","rpi","run","segment","segment,","segmentconfigur","segments.","set","setup","setup.","shield,","shouldn't","simpl","someth","something,","square,","start","stream.","strongli","sudo","sum","system","them.","this:","touched,","two","unless","up","us","vim","want","work","worri","{","}"],"Usage/CLI.html":["$","/usr/bin","access,","alia","assum","branch.","by:","call","cli","command","conf","config","current","directory,","get","instal","interfac","line","lux","luxcena","nano.","neo","neo.sh","newest","open","option","pleas","remov","root","run","script","server.","start","stop","strip","sudo","thing.","uninstal","updat","version","whole","yourself."],"Contributing/Modules/CompileAndRun.html":["\"/usrdata/usrcode/example\");","(_code)","(_stderr)","(_stdout)","(where","+","//",":`(","=","=>","_code","`throw`","add","app","app.j","attach","below:","build","call","called.","class","class,","closes,","code","code.","compileandrun","compilerun.python(global.dirswap","contain","data","delet","done","dy","entri","entry.pi","error","event","exampl","exit","exits,","export","file","file.","folder","folder,","folder.","full","index","initi","itself.","languag","last","later.","listner","local","located):","located.","made","make","messag","method","modul","move","new","next","object.","old","on","one.","out.","parameter,","path","place","point","print","process","process,","python","python,","python.compil","python.constructor","python.run","pythonsupportfil","readi","requir","root","run","sc","sc.on(\"close\",","sc.on(\"stderr::end\",","sc.on(\"stderr::out\",","sc.on(\"stdout::data\",","sc.on(\"stdout::end\",","script","script,","script.","script.py,","scripts.","someth","spawn","start","subdir","support","take","this:","us","user","usual","var","word","write","{","});","​"]},"length":6},"tokenStore":{"root":{"0":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"1":{"0":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"!":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.0380952380952381}}},"]":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"8":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"2":{"docs":{},"]":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"4":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"5":{"3":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{},"]":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"7":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"8":{"0":{"0":{"0":{"0":{"0":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"]":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":11}}}}}}}},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"Usage/":{"ref":"Usage/","tf":0.15},"Usage/Install.html":{"ref":"Usage/Install.html","tf":10.041666666666666},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},"l":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},":":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"t":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"Usage/":{"ref":"Usage/","tf":0.1},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"l":{"docs":{},"i":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":10.015873015873016}}},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},"i":{"docs":{},"g":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},"u":{"docs":{},"r":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":10.004761904761905}}}}}}},"s":{"docs":{},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},"$":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},")":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},":":{"docs":{},"$":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"s":{"docs":{},"$":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":10}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},".":{"docs":{},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"g":{"docs":{},"l":{"docs":{},"o":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"\"":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"d":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"d":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"r":{"docs":{},"a":{"docs":{},"s":{"docs":{},"h":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}}},"g":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"!":{"docs":{"Usage/":{"ref":"Usage/","tf":0.1}}}}}}},"i":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}},"p":{"docs":{},"i":{"docs":{},"o":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"l":{"docs":{},"u":{"docs":{},"x":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.09523809523809523}},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{"Usage/":{"ref":"Usage/","tf":0.1},"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.052083333333333336},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"o":{"docs":{},"g":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"o":{"docs":{},"k":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},")":{"docs":{},":":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"v":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285}}}},"d":{"docs":{},"'":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}},"_":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"d":{"docs":{},"m":{"docs":{},"a":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"p":{"docs":{},"i":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"n":{"docs":{},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"t":{"docs":{},"h":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"n":{"docs":{},"e":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"s":{"docs":{},"t":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"u":{"docs":{},"a":{"docs":{},"g":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"s":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"e":{"docs":{},"o":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.052083333333333336},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.09523809523809523}},",":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},"?":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}},"s":{"docs":{},"h":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"/":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},".":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"w":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.022727272727272728}},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},")":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"s":{"docs":{},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}},"x":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"o":{"docs":{},"w":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"u":{"docs":{},"m":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285}}}}}}},"a":{"docs":{},"n":{"docs":{},"o":{"docs":{},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"r":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"m":{"docs":{},"o":{"docs":{},"v":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}},"a":{"docs":{},"s":{"docs":{},"p":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332}}}}}}}}}},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"u":{"docs":{},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.017045454545454544}}}},"p":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}},"u":{"docs":{},"p":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285}},"?":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"m":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"n":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"g":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.023809523809523808}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"s":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}}}}}}},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"?":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.03125},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"m":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"i":{"docs":{},"p":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"o":{"docs":{},"p":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}}}},"c":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"n":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.03409090909090909}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}},"p":{"docs":{},"y":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"s":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},".":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},":":{"docs":{},":":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},":":{"docs":{},":":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"\"":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"i":{"docs":{},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"u":{"docs":{},"d":{"docs":{},"o":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.09523809523809523}}}},"m":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"b":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.017045454545454544}}}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"q":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"p":{"docs":{},"a":{"docs":{},"w":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"?":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05}}},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"s":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"g":{"docs":{},"h":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"e":{"docs":{},"m":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"k":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"b":{"docs":{},"l":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"e":{"docs":{},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"w":{"docs":{},"o":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"u":{"docs":{},"s":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.03333333333333333},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"a":{"docs":{},"g":{"docs":{"Usage/":{"ref":"Usage/","tf":10.05}}}},"e":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"n":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}}}}}}}},"p":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}}}}}},"w":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/":{"ref":"Usage/","tf":0.05},"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.01904761904761905}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"r":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"d":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"h":{"docs":{},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"$":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.031746031746031744}}},"(":{"3":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"s":{"docs":{},"s":{"docs":{},"h":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},")":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},")":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},".":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}}}}}}},"/":{"docs":{},"t":{"docs":{},"m":{"docs":{},"p":{"docs":{},"/":{"docs":{},"l":{"docs":{},"u":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"l":{"docs":{},"u":{"docs":{},"x":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"u":{"docs":{},"s":{"docs":{},"r":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}}},"/":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.028409090909090908}}}},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332}},",":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"h":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"s":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"b":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}},"d":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"p":{"docs":{},"p":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},".":{"docs":{},"j":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"y":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"l":{"docs":{},"i":{"docs":{},"a":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}},"t":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"b":{"docs":{},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},":":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"i":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"d":{"docs":{},"l":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"y":{"docs":{},":":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.022727272727272728}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},")":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"o":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"s":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"m":{"docs":{},"a":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"y":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}},"r":{"docs":{},"i":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}},"y":{"docs":{},".":{"docs":{},"p":{"docs":{},"i":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.017045454545454544}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"s":{"docs":{},"e":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"i":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}},"s":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}}},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"f":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"l":{"docs":{},"l":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"s":{"docs":{},"e":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"x":{"docs":{},"'":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"l":{"docs":{},"e":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.014285714285714285},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.022727272727272728}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"j":{"docs":{},"a":{"docs":{},"k":{"docs":{},"o":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"1":{"docs":{},"n":{"docs":{},"/":{"docs":{},"l":{"docs":{},"u":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"v":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"a":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"x":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.023809523809523808}}}}}},"d":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"k":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.017045454545454544}}}}}}}},"o":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.01904761904761905},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},"c":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}},"e":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}}},"u":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"l":{"docs":{},"d":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"p":{"docs":{},"i":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.020833333333333332}},"x":{"docs":{},"e":{"docs":{},"l":{"docs":{},"'":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"b":{"docs":{},"l":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}},"t":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}},"r":{"docs":{},"t":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}},"t":{"docs":{},"h":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.03977272727272727}},",":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}}}}}}}}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},".":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}},"i":{"docs":{},"m":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"a":{"docs":{},"r":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"y":{"docs":{},"e":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}},"t":{"docs":{},",":{"docs":{"Usage/Install.html":{"ref":"Usage/Install.html","tf":0.010416666666666666}}}}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{},".":{"docs":{"Usage/CLI.html":{"ref":"Usage/CLI.html","tf":0.015873015873015872}}}}}}}}}}},"\"":{"docs":{},"l":{"docs":{},"e":{"docs":{},"d":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"_":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"d":{"docs":{},"m":{"docs":{},"a":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"_":{"docs":{},"h":{"docs":{},"z":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"p":{"docs":{},"i":{"docs":{},"n":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"x":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"m":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"l":{"docs":{},"\"":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}},"s":{"docs":{},"e":{"docs":{},"g":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}}}}}}}},"s":{"docs":{},"\"":{"docs":{},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}}}}}}}},"n":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},":":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"r":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"/":{"docs":{},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"'":{"docs":{},"n":{"docs":{},"a":{"docs":{},"n":{"docs":{},"o":{"docs":{},"'":{"docs":{},".":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}},"s":{"docs":{},"e":{"docs":{},"g":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"'":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}}}}}}}}}}}}}}}}}}}}},"[":{"0":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"1":{"0":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{}},"3":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"6":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}},"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},"]":{"docs":{},",":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.009523809523809525}}}}},"]":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}}}}}},"{":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762},"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.028409090909090908}}},"}":{"docs":{"Usage/Configuration.html":{"ref":"Usage/Configuration.html","tf":0.004761904761904762}},")":{"docs":{},";":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.028409090909090908}}}}},"+":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.011363636363636364}}},":":{"docs":{},"`":{"docs":{},"(":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}},"=":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}},">":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.028409090909090908}}}},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}},"`":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{},"`":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}}}}}}},"​":{"docs":{"Contributing/Modules/CompileAndRun.html":{"ref":"Contributing/Modules/CompileAndRun.html","tf":0.005681818181818182}}}},"length":805},"corpusTokens":["\"/usrdata/usrcode/example\");","\"led","\"led_channel\":","\"led_count\":","\"led_dma\":","\"led_freq_hz\":","\"led_invert\":","\"led_pin\":","\"line\":","\"matrix\":","\"random\":","\"real\"","\"segmentconfiguration\":","\"segments\":","\"snake\",","\"snake\":","$","'nano'.","'segmentsconfiguration'","(3","(_code)","(_stderr)","(_stdout)","(prefer","(ssh","(where","+","./bin/install.sh","//","/home/lux","/tmp/luxcena","/usr/bin","0","0.","1,","10","10!","10,","10],","18,","2],","4,","53,","5],","7,","800000,","8]",":`(","=","=>","[","[0,","[10,","[3,","[6,","[],","]","_code","`throw`","above,","access","access,","add","alia","anoth","answer","app","app.j","appear","arrang","array,","assum","attach","back","badli","be","below:","bit","branch.","build","by:","call","called.","cd","chang","channel","check","class","class,","cli","clone","closes,","code","code.","command","command$","command)","command:$","commands$","compileandrun","compilerun.python(global.dirswap","conf","config","configur","connect","console.","contain","control.","controlling.","converter.","count","count\"","crash.","current","data","default","defaults:","delet","dimenson","din","direct)","directory,","dma","do,","doing.","don't","done","dy","editor","editor,","element","else,","empti","encount","enter","entri","entry.pi","error","event","exampl","exit","exits,","export","f","fail","fail.","fall","false,","file","file.","find","fix'","folder","folder,","folder.","follow","full","gener","get","git","gpio","guide!","hang,","haven't","here","here.","https://github.com/jakobst1n/luxcena","index","initi","instal","install.","installed.","instruct","instructions:","interfac","introduct","invert","it,","it.","itself.","know","languag","last","later.","leav","led'","led_channel","led_count","led_dma","led_invert","led_pin","lenght","length,","level","likings.","line","line.","list,","listner","local","located):","located.","log","look","lux","luxcena","made","make","matrix","messag","method","modul","more","move","n","nano.","need","neo","neo,","neo.install.log","neo.sh","neo/userdata/config/strip.json","neo?","new","newer","newer),","newest","next","now","number","object.","old","on","onc","one.","open","option","option.","out","out.","output","output.","parameter,","path","pi","pixel'","place","pleas","point","port","port.","possibl","post","print","process","process,","python","python,","python.compil","python.constructor","python.run","pythonsupportfil","questions.","raspberri","readi","reason","recommend","refer","remov","repres","requir","root","rpi","run","sc","sc.on(\"close\",","sc.on(\"stderr::end\",","sc.on(\"stderr::out\",","sc.on(\"stdout::data\",","sc.on(\"stdout::end\",","screen.","script","script,","script.","script.py,","scripts.","see","seem","segment","segment,","segmentconfigur","segments.","sent","server.","session,","set","setup","setup.","setup?","shield","shield,","shouldn't","simpl","someth","something,","something?","spawn","square,","start","stop","stream.","strip","strongli","subdir","sudo","sum","support","system","tail","take","termin","them.","thing.","thing?","this:","through","touched,","troubl","troubleshoot","two","uninstal","unless","up","updat","us","usag","user","usual","var","verbos","version","vim","want","whole","word","work","worri","write","ye","yet,","yourself.","{","}","});","​"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"Introduction","keywords":"","body":"Introduction\n"},"Usage/":{"url":"Usage/","title":"Usage","keywords":"","body":"Usage\nInstall\nWant to install luxcena-neo? This is the guide!\nConfiguration\nJust installed luxcena-neo, or you have changed your setup? This is the guide!\nCLI\nReady to start the thing? Or change something?\n"},"Usage/Install.html":{"url":"Usage/Install.html","title":"Install","keywords":"","body":"Installation\nIf you want to install luxcena-neo to use it, these are the instructions:\n\nRequirements\n\nThe luxcena-shield\nAccess to the raspberry pi (SSH or direct)\nRoot access (preferably through the sudo command)\n\nInstall\n\nStart with logging into your Raspberry Pi\nRun these commands$ git clone https://github.com/JakobST1n/Luxcena-Neo\n$ cd Luxcena-Neo\n$ sudo ./bin/install.sh\n\n\nFollow the instructions on screen. You should answer yes to most of the questions.\nThe install-process might seem to hang, but there is just no output being sent to the console. If you want to see a bit more verbose output. Open another terminal session, and run this command:$ tail -n 10 -f /tmp/luxcena-neo.install.log\n\nThis is also where you will find possible reasons for a failed install.\nLuxcena-Neo should now be installed. Start it with this command$ luxcena-neo start\n\n\n\nTroubleshooting\nWe haven't encountered any troubles yet, but once we do, we will post fix'es here.\n"},"Usage/Configuration.html":{"url":"Usage/Configuration.html","title":"Configuration","keywords":"","body":"Configuration\nHow to setup luxcena-neo to work with your setup\n\n$ sudo lux-neo conf\n\nWhen running the command above, a config file should appear in the editor 'nano'.\n{\n \"led_count\": 53,\n \"segments\": [],\n \"matrix\": [],\n \"segmentConfiguration\": \"snake\",\n \"led_pin\": 18,\n \"led_freq_hz\": 800000,\n \"led_dma\": 10,\n \"led_invert\": false,\n \"led_channel\": 0\n}\n\nIf you rather want to use vim or another editor, the file is at /home/lux-neo/userdata/config/strip.json\n\nled_count\nThis is the number of LED's you want to control.\nsegments\nThis is a simple list, here you should add the lenghts of all your segments. Please enter the \"real\" length, and don't start counting from 0. If you just want one segment, you should just have one element in the list, which is the number of led's you are controlling.\nWhen summing this list, it should check out with the \"led-count\"-option.\nmatrix\nThis is a two dimensonal array, used to arrange the segments in a matrix of your likings. Here you enter the segment-number to represent them. In the example above, all the segments are in one line. If you want to have them in a square, it could look like this:\n\"segments\": [10, 10, 10, 10, 10, 10, 10, 10, 10],\n\"matrix\": [\n [0, 1, 2],\n [3, 4, 5],\n [6, 7, 8]\n]\n\nIf you don't have a reference to all the segments or something, the matrix setup will fail. And fall back to 'segmentsconfiguration'\n\nsegmentconfiguration\nIf the matrix-option is empty or badly setup. The matrix will be set up using one of these defaults:\n\"snake\":\n\"line\":\n\"random\":\nled_pin\nIf using the luxcena-shield, you shouldn't have to worry about this option. But set it to the GPIO-port connected to your pixel's din-port.\nled_dma\nIf using a newer RPi (3 or newer), leave this as 10! Or your file-system might crash.\n\nThis is the dma-channel used to generate the data-stream. If you for some reason need channel 10 for something else, you can change it. But i strongly recommend leaving it to 10!\nled_invert\nThis should not be touched, unless you are using a inverting level converter.\nled_channel\nLeave this as default unless you know what you are doing.\n"},"Usage/CLI.html":{"url":"Usage/CLI.html","title":"CLI","keywords":"","body":"Command line interface\n\nThis gets installed in the /usr/bin directory, and can be called by:\n$ luxcena-neo.sh\n\nor is alias\n$ lux-neo\n\nThis CLI assumes root access, so please run it with sudo\n\nOptions\nsudo lux-neo uninstall\nUninstall the whole thing. You will have to remove this script yourself.\nsudo lux-neo update\nUpdate to the newest version on the current branch.\nsudo lux-neo conf\nOpen the strip-config in nano.\nsudo lux-neo start\nStart the server.\nsudo lux-neo stop\nStop the server.\n"},"Contributing/Modules/CompileAndRun.html":{"url":"Contributing/Modules/CompileAndRun.html","title":"CompileAndRun","keywords":"","body":"Index\n\nLocals\nvar pythonSupportFiles\nPoints to the files for our python support code. They should be in a subdir of the module itself.\nExported\nclass Python\nThis is exported as Python, just so that we could add other languages later. Used to build and run python-scripts with our support-code.\nmethod Python.constructor\nTakes one parameter, which is the full path to the folder where the script is located.\nWhen initializing the class, this will be called. Can be done like this:\nnew compileRun.Python(global.DirSwap + \"/usrData/usrCode/example\");\n\nmethod Python.compile\nThis deletes old build-folder, and makes a new one. It then moves all required files into the build-folder, making us ready for running the script.\nmethod Python.run\nSpawns a new process, starting entry.py in our build-folder. It also attaches event-listners on our class-object. All of them is in the example below:\nlet sc = new compileRun.Python(global.DirSwap + \"/usrData/usrCode/example\");\n​\n// When data is printed from the python-script\nsc.on(\"stdout::data\", (_stdout) => { });\n// Last write when script closes, any exiting messages\nsc.on(\"stdout::end\", (_stdout) => { });\n// When something is printed from the python-script to the error-out. Usually when a `throw` is called\nsc.on(\"stderr::out\", (_stderr) => { });\n// Last words when process is dying from an error :`(\nsc.on(\"stderr::end\", (_stderr) => { });\n// When script exits, _code is the exit-code\nsc.on(\"close\", (_code) => { });\n\nPython\nThis is the support-files for user-made scripts.\nEntry.py\nThe entry-point when running a script. A file called script.py, containing the user-script, should be placed next to this file. Starting it should be done like this (Where app-root is where our app.js is located):\npython entry.py \n"}}} \ No newline at end of file diff --git a/docs/_book/service-worker.js b/docs/_book/service-worker.js new file mode 100644 index 0000000..33b41cc --- /dev/null +++ b/docs/_book/service-worker.js @@ -0,0 +1,268 @@ +/** + * Copyright 2016 Google Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +// DO NOT EDIT THIS GENERATED OUTPUT DIRECTLY! +// This file should be overwritten as part of your build process. +// If you need to extend the behavior of the generated service worker, the best approach is to write +// additional code and include it using the importScripts option: +// https://github.com/GoogleChrome/sw-precache#importscripts-arraystring +// +// Alternatively, it's possible to make changes to the underlying template file and then use that as the +// new base for generating output, via the templateFilePath option: +// https://github.com/GoogleChrome/sw-precache#templatefilepath-string +// +// If you go that route, make sure that whenever you update your sw-precache dependency, you reconcile any +// changes made to this original template file with your modified copy. + +// This generated service worker JavaScript will precache your site's resources. +// The code needs to be saved in a .js file at the top-level of your site, and registered +// from your pages in order to be used. See +// https://github.com/googlechrome/sw-precache/blob/master/demo/app/js/service-worker-registration.js +// for an example of how you can register this script and handle various service worker events. + +/* eslint-env worker, serviceworker */ +/* eslint-disable indent, no-unused-vars, no-multiple-empty-lines, max-nested-callbacks, space-before-function-paren, quotes, comma-spacing */ +'use strict'; + +var precacheConfig = [["/Contributing/Modules/CompileAndRun.html","d56c0c18391e35ed0d86b3c6b668f79a"],["/Usage/CLI.html","a0333969eb1b171327f4016a5dbf451c"],["/Usage/Configuration.html","f4b4b0796b174beb62948b8c80fd7363"],["/Usage/Install.html","ee494f0c3c4ad33d139e6f3c5113b52f"],["/Usage/index.html","ad4c537f60d4dd0ea998ded7aa4027bd"],["/gitbook/fonts/fontawesome/fontawesome-webfont.eot","25a32416abee198dd821b0b17a198a8f"],["/gitbook/fonts/fontawesome/fontawesome-webfont.svg","d7c639084f684d66a1bc66855d193ed8"],["/gitbook/fonts/fontawesome/fontawesome-webfont.ttf","1dc35d25e61d819a9c357074014867ab"],["/gitbook/fonts/fontawesome/fontawesome-webfont.woff","c8ddf1e5e5bf3682bc7bebf30f394148"],["/gitbook/gitbook-plugin-api/api.css","ad443308d0937629d2811cff9053e0c2"],["/gitbook/gitbook-plugin-api/api.js","b592adcca0c3d691f3a351b05e62c77a"],["/gitbook/gitbook-plugin-code/plugin.css","81aeb06c3e8d1c221773e63fe05f737a"],["/gitbook/gitbook-plugin-code/plugin.js","2a3bab062a1c3446333f10c60e8643a1"],["/gitbook/gitbook-plugin-comment/plugin.css","5291855572a41c85319d21a4b45f2eee"],["/gitbook/gitbook-plugin-comment/plugin.js","dc48b2f0bd1e4bdd1ad03d60d32c9bd6"],["/gitbook/gitbook-plugin-emphasize/plugin.css","6c90145b226c807ebbb334bb7d94d8ee"],["/gitbook/gitbook-plugin-fontsettings/fontsettings.js","fab8f6412ce18bb367635b1bcae503ca"],["/gitbook/gitbook-plugin-fontsettings/website.css","056a6db3eef3553a78f3b7e02356b2e7"],["/gitbook/gitbook-plugin-github/plugin.js","93ff35be0de181d440c84e8f6d76ab45"],["/gitbook/gitbook-plugin-highlight/ebook.css","fa203ae16ad9f01f4d20061fb9e7a6cc"],["/gitbook/gitbook-plugin-highlight/website.css","acce01e3e11cbd4b3882e7732d81f954"],["/gitbook/gitbook-plugin-hints/plugin-hints.css","35cad665bf4ba951a2f3a1d3253b6089"],["/gitbook/gitbook-plugin-livereload/plugin.js","9e48eceeaa9ee3f1f734eddd3dfe04da"],["/gitbook/gitbook-plugin-lunr/lunr.min.js","9424f087f85dc7be8f7c7bc35b720f26"],["/gitbook/gitbook-plugin-lunr/search-lunr.js","4e91f557c3d72be045b9e146c2bc90bc"],["/gitbook/gitbook-plugin-offline/service-worker-registration.js","0b4c35226075896152de214f8860b76e"],["/gitbook/gitbook-plugin-pretty-term/terminal.css","02c933b557fe724dcadd3dfa43dfc33c"],["/gitbook/gitbook-plugin-pretty-term/terminal.js","424e08c8a0b2f3d9e6706f15af29a714"],["/gitbook/gitbook-plugin-search/lunr.min.js","9424f087f85dc7be8f7c7bc35b720f26"],["/gitbook/gitbook-plugin-search/search-engine.js","59ed9456a958a2930326955747048f8a"],["/gitbook/gitbook-plugin-search/search.css","6c8330e8aadd979bb37f872182257bdd"],["/gitbook/gitbook-plugin-search/search.js","5ba7dbf7c0e78b02dc48f83d55729e36"],["/gitbook/gitbook-plugin-sharing/buttons.js","e7c1c051d685b9e7530c1a6675e6b119"],["/gitbook/gitbook.js","e53bf9037b1d1c9810486ef4c5493624"],["/gitbook/images/apple-touch-icon-precomposed-152.png","59313d171157503f5de7fd7e07f3c495"],["/gitbook/style.css","88a3a50e3559bc577c1be0de4fcc6c6d"],["/gitbook/theme.js","176e71ac3bf185b7f08e0f6cb919f1e8"],["/index.html","5447a536c53fe2867b9d030ff8b6ec01"]]; +var cacheName = 'sw-precache-v3--' + (self.registration ? self.registration.scope : ''); + + +var ignoreUrlParametersMatching = [/^utm_/]; + + + +var addDirectoryIndex = function (originalUrl, index) { + var url = new URL(originalUrl); + if (url.pathname.slice(-1) === '/') { + url.pathname += index; + } + return url.toString(); + }; + +var cleanResponse = function (originalResponse) { + // If this is not a redirected response, then we don't have to do anything. + if (!originalResponse.redirected) { + return Promise.resolve(originalResponse); + } + + // Firefox 50 and below doesn't support the Response.body stream, so we may + // need to read the entire body to memory as a Blob. + var bodyPromise = 'body' in originalResponse ? + Promise.resolve(originalResponse.body) : + originalResponse.blob(); + + return bodyPromise.then(function(body) { + // new Response() is happy when passed either a stream or a Blob. + return new Response(body, { + headers: originalResponse.headers, + status: originalResponse.status, + statusText: originalResponse.statusText + }); + }); + }; + +var createCacheKey = function (originalUrl, paramName, paramValue, + dontCacheBustUrlsMatching) { + // Create a new URL object to avoid modifying originalUrl. + var url = new URL(originalUrl); + + // If dontCacheBustUrlsMatching is not set, or if we don't have a match, + // then add in the extra cache-busting URL parameter. + if (!dontCacheBustUrlsMatching || + !(url.pathname.match(dontCacheBustUrlsMatching))) { + url.search += (url.search ? '&' : '') + + encodeURIComponent(paramName) + '=' + encodeURIComponent(paramValue); + } + + return url.toString(); + }; + +var isPathWhitelisted = function (whitelist, absoluteUrlString) { + // If the whitelist is empty, then consider all URLs to be whitelisted. + if (whitelist.length === 0) { + return true; + } + + // Otherwise compare each path regex to the path of the URL passed in. + var path = (new URL(absoluteUrlString)).pathname; + return whitelist.some(function(whitelistedPathRegex) { + return path.match(whitelistedPathRegex); + }); + }; + +var stripIgnoredUrlParameters = function (originalUrl, + ignoreUrlParametersMatching) { + var url = new URL(originalUrl); + // Remove the hash; see https://github.com/GoogleChrome/sw-precache/issues/290 + url.hash = ''; + + url.search = url.search.slice(1) // Exclude initial '?' + .split('&') // Split into an array of 'key=value' strings + .map(function(kv) { + return kv.split('='); // Split each 'key=value' string into a [key, value] array + }) + .filter(function(kv) { + return ignoreUrlParametersMatching.every(function(ignoredRegex) { + return !ignoredRegex.test(kv[0]); // Return true iff the key doesn't match any of the regexes. + }); + }) + .map(function(kv) { + return kv.join('='); // Join each [key, value] array into a 'key=value' string + }) + .join('&'); // Join the array of 'key=value' strings into a string with '&' in between each + + return url.toString(); + }; + + +var hashParamName = '_sw-precache'; +var urlsToCacheKeys = new Map( + precacheConfig.map(function(item) { + var relativeUrl = item[0]; + var hash = item[1]; + var absoluteUrl = new URL(relativeUrl, self.location); + var cacheKey = createCacheKey(absoluteUrl, hashParamName, hash, false); + return [absoluteUrl.toString(), cacheKey]; + }) +); + +function setOfCachedUrls(cache) { + return cache.keys().then(function(requests) { + return requests.map(function(request) { + return request.url; + }); + }).then(function(urls) { + return new Set(urls); + }); +} + +self.addEventListener('install', function(event) { + event.waitUntil( + caches.open(cacheName).then(function(cache) { + return setOfCachedUrls(cache).then(function(cachedUrls) { + return Promise.all( + Array.from(urlsToCacheKeys.values()).map(function(cacheKey) { + // If we don't have a key matching url in the cache already, add it. + if (!cachedUrls.has(cacheKey)) { + var request = new Request(cacheKey, {credentials: 'same-origin'}); + return fetch(request).then(function(response) { + // Bail out of installation unless we get back a 200 OK for + // every request. + if (!response.ok) { + throw new Error('Request for ' + cacheKey + ' returned a ' + + 'response with status ' + response.status); + } + + return cleanResponse(response).then(function(responseToCache) { + return cache.put(cacheKey, responseToCache); + }); + }); + } + }) + ); + }); + }).then(function() { + + // Force the SW to transition from installing -> active state + return self.skipWaiting(); + + }) + ); +}); + +self.addEventListener('activate', function(event) { + var setOfExpectedUrls = new Set(urlsToCacheKeys.values()); + + event.waitUntil( + caches.open(cacheName).then(function(cache) { + return cache.keys().then(function(existingRequests) { + return Promise.all( + existingRequests.map(function(existingRequest) { + if (!setOfExpectedUrls.has(existingRequest.url)) { + return cache.delete(existingRequest); + } + }) + ); + }); + }).then(function() { + + return self.clients.claim(); + + }) + ); +}); + + +self.addEventListener('fetch', function(event) { + if (event.request.method === 'GET') { + // Should we call event.respondWith() inside this fetch event handler? + // This needs to be determined synchronously, which will give other fetch + // handlers a chance to handle the request if need be. + var shouldRespond; + + // First, remove all the ignored parameters and hash fragment, and see if we + // have that URL in our cache. If so, great! shouldRespond will be true. + var url = stripIgnoredUrlParameters(event.request.url, ignoreUrlParametersMatching); + shouldRespond = urlsToCacheKeys.has(url); + + // If shouldRespond is false, check again, this time with 'index.html' + // (or whatever the directoryIndex option is set to) at the end. + var directoryIndex = 'index.html'; + if (!shouldRespond && directoryIndex) { + url = addDirectoryIndex(url, directoryIndex); + shouldRespond = urlsToCacheKeys.has(url); + } + + // If shouldRespond is still false, check to see if this is a navigation + // request, and if so, whether the URL matches navigateFallbackWhitelist. + var navigateFallback = ''; + if (!shouldRespond && + navigateFallback && + (event.request.mode === 'navigate') && + isPathWhitelisted([], event.request.url)) { + url = new URL(navigateFallback, self.location).toString(); + shouldRespond = urlsToCacheKeys.has(url); + } + + // If shouldRespond was set to true at any point, then call + // event.respondWith(), using the appropriate cache key. + if (shouldRespond) { + event.respondWith( + caches.open(cacheName).then(function(cache) { + return cache.match(urlsToCacheKeys.get(url)).then(function(response) { + if (response) { + return response; + } + throw Error('The cached response that was expected is missing.'); + }); + }).catch(function(e) { + // Fall back to just fetch()ing the request if some unexpected error + // prevented the cached response from being valid. + console.warn('Couldn\'t serve response for "%s" from cache: %O', event.request.url, e); + return fetch(event.request); + }) + ); + } + } +}); + + + + + + + diff --git a/docs/book.json b/docs/book.json new file mode 100644 index 0000000..71f8e87 --- /dev/null +++ b/docs/book.json @@ -0,0 +1,10 @@ +{ + "title": "Luxcena-Neo wiki", + "author": "JakobST1n", + "plugins": ["code", "pretty-term", "hints", "comment", "github", "emphasize", "api", "offline"], + "pluginsConfig": { + "github": { + "url": "https://github.com/jakobst1n/lucena-neo" + } + } +} diff --git a/src/compileAndRun/pythonSupportFiles/LuxcenaNeo/Strip.py b/src/compileAndRun/pythonSupportFiles/LuxcenaNeo/Strip.py index f9c94a0..9d45457 100644 --- a/src/compileAndRun/pythonSupportFiles/LuxcenaNeo/Strip.py +++ b/src/compileAndRun/pythonSupportFiles/LuxcenaNeo/Strip.py @@ -1,5 +1,10 @@ from neopixel import * +class Matrix: + + def __init__(self, matrix, segments): + self.t = [] + class Strip: def __init__(self, stripConf): @@ -8,10 +13,10 @@ class Strip: self.LED_FREQ_HZ = stripConf["led_freq_hz"] # LED signal frequency in hertz (usually 800khz) self.LED_CHANNEL = stripConf["led_channel"] # Set to '1' for GPIOs 13, 19, 41, 45, 53 - self.LED_INVERT = stripConf["led_invert"] # True to invert the signal, (when using NPN transistor level shift) - self.LED_PIN = stripConf["led_pin"] # 18 uses PWM, 10 uses SPI /dev/spidev0.0 - self.LED_DMA = stripConf["led_dma"] # DMA channel for generating the signal, on the newer ones, try 10 - self.LED_COUNT = sum(self.SEGMENTS) # Number of LEDs in strip + self.LED_INVERT = stripConf["led_invert"] # True to invert the signal, (when using NPN transistor level shift) + self.LED_PIN = stripConf["led_pin"] # 18 uses PWM, 10 uses SPI /dev/spidev0.0 + self.LED_DMA = stripConf["led_dma"] # DMA channel for generating the signal, on the newer ones, try 10 + self.LED_COUNT = sum(self.SEGMENTS) # Number of LEDs in strip self.LED_BRIGHTNESS = 255 @@ -28,6 +33,12 @@ class Strip: self.strip.begin() + # Setup matrix + try: + pixelMatrix = new Matrix(stripConf["matrix"], self.segments) + except: + print("Something went wrong while setting up your self-defined matrix.") + def show(self): """Update the display with the data from the LED buffer.""" self.strip.show() @@ -77,3 +88,9 @@ def Color(red, green, blue, white = 0): and 255 is the highest intensity. """ return (white << 24) | (red << 16)| (green << 8) | blue + +def hexColor(value): + value = value.lstrip('#') + lv = len(value) + rgb = tuple(int(value[i:i+lv/3], 16) for i in range(0, lv, lv/3)) + return (0 << 24) | (rgb[1] << 16) | (rgb[0] << 8) | rgb[2] -- cgit v1.2.3 From 1cb8124568ba28477ba5a574abc086d085fbd109 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 29 Nov 2018 23:23:23 +0100 Subject: :hammer: Change path to install --- bin/luxcena-neo-cli.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'bin/luxcena-neo-cli.sh') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 5d960c0..d3302ed 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -65,13 +65,13 @@ if [ "$action" == "update" ]; then systemctl stop lxucena-neo oldDir=$PWD - cd /home/lux-neo/luxcena-neo-install + cd /home/lux-neo/src runuser -l 'lux-neo' -c 'git pull' runuser -l 'lux-neo' -c 'export NODE_ENV=production' runuser -l 'lux-neo' -c 'npm i --only=production' cd $oldDir printf "Update complete, run these commands to finish it completly:\n" - printf "sudo /home/lux-neo/install/src/bin/post-update.sh\n" + printf "sudo /home/lux-neo/src/bin/post-update.sh\n" printf "sudo systemctl luxcena-neo start\n" systemctl start luxcena-neo -- cgit v1.2.3 From aa36d8d64acf8cfabe0602c2727a0ae7d8472860 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Thu, 29 Nov 2018 23:38:16 +0100 Subject: :hammer: More paths --- bin/luxcena-neo-cli.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin/luxcena-neo-cli.sh') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index d3302ed..dddf0cb 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -104,7 +104,7 @@ elif [ "$action" == "uninstall" ]; then fi elif [ "$action" == "conf" ]; then - nano /home/lux-neo/luxcena-neo-install/userdata/config/strip.json + nano /home/lux-neo/userdata/config/strip.json elif [ "$action" == "start" ]; then systemctl start luxcena-neo -- cgit v1.2.3 From 5c133c750682d8d15c7fdcf5a57fc02aedc9303d Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Fri, 30 Nov 2018 10:44:17 +0100 Subject: :construction: Realizing runuser runs in a seperate session each time --- bin/luxcena-neo-cli.sh | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'bin/luxcena-neo-cli.sh') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index dddf0cb..a8384db 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -64,12 +64,8 @@ if [ "$action" == "update" ]; then fi systemctl stop lxucena-neo - oldDir=$PWD - cd /home/lux-neo/src - runuser -l 'lux-neo' -c 'git pull' - runuser -l 'lux-neo' -c 'export NODE_ENV=production' - runuser -l 'lux-neo' -c 'npm i --only=production' - cd $oldDir + runuser -l 'lux-neo' -c 'git -C ~/src pull' + runuser -l 'lux-neo' -c 'export NODE_ENV=production; npm --prefix ~/src install ~/src --only=production' printf "Update complete, run these commands to finish it completly:\n" printf "sudo /home/lux-neo/src/bin/post-update.sh\n" printf "sudo systemctl luxcena-neo start\n" -- cgit v1.2.3 From 949dd6a5b0d6fce587a51904acabe3e2191924f9 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Fri, 30 Nov 2018 10:46:56 +0100 Subject: :construction: Make simple shortcut to view service status --- bin/luxcena-neo-cli.sh | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'bin/luxcena-neo-cli.sh') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index a8384db..763bbbe 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -106,6 +106,10 @@ elif [ "$action" == "start" ]; then systemctl start luxcena-neo elif [ "$action" == "stop" ]; then systemctl stop luxcena-neo +elif [ "$action" == "status" ]; then + printf '\e[93m%s\e[0m\n' "---Service status------------------" + systemctl status luxcena-neo + printf '\e[93m%s\e[0m\n' "-----------------------------------" else usage fi -- cgit v1.2.3 From ae98cf39c956033c98dcf6d11be4df95f58fff47 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Fri, 30 Nov 2018 10:58:10 +0100 Subject: :construction: CLI is now self-updating! Realized that shell scripts are loaded into memory before being run. this means we can both make it update itself, and delete itself. --- bin/luxcena-neo-cli.sh | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'bin/luxcena-neo-cli.sh') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 763bbbe..5521749 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -66,9 +66,11 @@ if [ "$action" == "update" ]; then systemctl stop lxucena-neo runuser -l 'lux-neo' -c 'git -C ~/src pull' runuser -l 'lux-neo' -c 'export NODE_ENV=production; npm --prefix ~/src install ~/src --only=production' - printf "Update complete, run these commands to finish it completly:\n" - printf "sudo /home/lux-neo/src/bin/post-update.sh\n" - printf "sudo systemctl luxcena-neo start\n" + cp /home/lux-neo/src/bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh + printf "Update complete.\n" + #printf "Update complete, run these commands to finish it completly:\n" + #printf "sudo /home/lux-neo/src/bin/post-update.sh\n" + #printf "sudo systemctl luxcena-neo start\n" systemctl start luxcena-neo elif [ "$action" == "uninstall" ]; then @@ -85,12 +87,12 @@ elif [ "$action" == "uninstall" ]; then deluser lux-neo rm -rf /home/lux-neo rm /etc/systemd/system/luxcena-neo.service + rm /usr/bin/luxcena-neo.sh + rm /usr/bin/lux-neo + tput setaf 2 - printf "\nEverything should now be gone. To remove the last piece, enter this command:\n" - tput sgr0 - tput smso - printf "sudo rm /bin/luxcena-neo\n\n" + printf "\nEverything should now be gone.\n" tput sgr0 tput setaf 8 printf "Well, some dependencies still exists. Those are:\n" -- cgit v1.2.3 From a9151cb4ccf612680b605936395a8c67d5b7e433 Mon Sep 17 00:00:00 2001 From: Jakob Stendahl Date: Fri, 30 Nov 2018 10:59:11 +0100 Subject: :bug: Typo making service not stop while updating --- bin/luxcena-neo-cli.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin/luxcena-neo-cli.sh') diff --git a/bin/luxcena-neo-cli.sh b/bin/luxcena-neo-cli.sh index 5521749..180b0c4 100755 --- a/bin/luxcena-neo-cli.sh +++ b/bin/luxcena-neo-cli.sh @@ -63,7 +63,7 @@ if [ "$action" == "update" ]; then exit 1 fi - systemctl stop lxucena-neo + systemctl stop luxcena-neo runuser -l 'lux-neo' -c 'git -C ~/src pull' runuser -l 'lux-neo' -c 'export NODE_ENV=production; npm --prefix ~/src install ~/src --only=production' cp /home/lux-neo/src/bin/luxcena-neo-cli.sh /usr/bin/luxcena-neo-cli.sh -- cgit v1.2.3