From 28851f39ad306bb7da574c36962fb27812ba18ec Mon Sep 17 00:00:00 2001 From: Volga Date: Thu, 10 Sep 2020 13:56:57 +0300 Subject: [PATCH 01/11] docs: add notice --- docs/ru/assemble_4_2.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/ru/assemble_4_2.md b/docs/ru/assemble_4_2.md index 0da703710..76c4166b8 100644 --- a/docs/ru/assemble_4_2.md +++ b/docs/ru/assemble_4_2.md @@ -174,6 +174,12 @@ 5. На деку захвата установите дальномер с помощью самоконтрящихся гаек и винтов М3х8, и приклейте радиоприемник с помощью двустороннего скотча. + > **Сaution** Обратите внимание, что крепящие гайки расположены обратной стороны от платы дальномера, как на схеме, иначе есть большая вероятность повредить плату. + + + + > **Hint** Также плата может быть закреплена на саморезы М2 в соседние отверстия. + 6. Установите 4 стойки 20мм и закрепите их с помощью винтов М3х8. From c6a238c67192d6d42fc01876c3ee45e02960fbfe Mon Sep 17 00:00:00 2001 From: Volga Date: Thu, 10 Sep 2020 14:46:58 +0300 Subject: [PATCH 02/11] docs: fixed gpio port assignment --- docs/ru/gpio.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/ru/gpio.md b/docs/ru/gpio.md index 43cbb8aac..1d6ca5611 100644 --- a/docs/ru/gpio.md +++ b/docs/ru/gpio.md @@ -4,6 +4,10 @@ GPIO (General-Purpose Input/Output) – это тип пинов на Raspberry > **Info** Используйте [распиновку](https://pinout.xyz), чтобы понять, какие из пинов на Raspberry Pi поддерживают GPIO и ШИМ. + + +> **Info** Для того, чтобы не создавалось конфликтов при использовании портов *GPIO* в образе закрыт доступ для портов 0, 1, 2, 3, 14, 15, на которые выведены интерфейсы подключения I2C и UART. + Для работы с GPIO на [образе для RPi](image.md) предустановлена библиотека [`pigpio`](http://abyz.me.uk/rpi/pigpio/). Чтобы взаимодействовать с этой библиотекой, запустите соответствующий демон: ```bash @@ -77,7 +81,7 @@ pi.set_servo_pulsewidth(13, 2000) ![GPIO Mosfet Magnet Connection](../assets/gpio_mosfet_magnet.png) -Для подключения электромагнита используйте полевой транзистор (MOSFET). Подключите транзистор к одному из GPIO-пинов Raspberry Pi. Для управления магнитом, подключенным к 15 пину, используйте такой код: +Для подключения электромагнита используйте полевой транзистор (MOSFET). Подключите транзистор к одному из GPIO-пинов Raspberry Pi. Для управления магнитом, подключенным к 18 пину, используйте такой код: ```python import time @@ -85,14 +89,14 @@ import pigpio pi = pigpio.pi() -# устанавливаем режим 15 пина на вывод -pi.set_mode(15, pigpio.OUTPUT) +# устанавливаем режим 18 пина на вывод +pi.set_mode(18, pigpio.OUTPUT) # включаем электромагнит -pi.write(15, 1) +pi.write(18, 1) time.sleep(2) # отключаем электромагнит -pi.write(15, 0) +pi.write(18, 0) ``` From 2f6125ce54ee315de604ce174f66e6ea266cbb22 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Wed, 30 Sep 2020 17:07:03 +0300 Subject: [PATCH 03/11] Implement block programming (using Blockly) (#272) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Clover Blockly: add first blocks set * Adjust Blockly settings * Fix get_position output type * Add screenshot * Rename readme.md to README.md * Resize screenshot * Add package.xml * Little change * Fixes * Add python_compressed to blockly * Implement some of the Clover blocks in Python * Make Python indentation 4 spaces * Fixes to Python blocks implementation * Implement set_velocity block in Python * Implement wait_arrival block in Python * Fix indentation in Python implementation of blocks * Fix * Fix land_wait template * Set reserved words in Python * Change default frame_id to aruco_map in get_position block * Fix * Move blocks definitions to blocks.js * Get rid of missing favicon error * Simplify navigate * Rearrange layout, add tabs * Generate Python code * Small style change * -console.log * Code style * Use modules * Move modules to the header * Correct order for ROS definitions + generating "backend" code * Fix rangefinder_distance block * simple_offboard: commands to change only yaw and yaw rate * Implement set_yaw block * Start working on Blockly documentation * Implement print block with a topic * Unneeded code * Little fixes * Fix indentation * Fixes * Fix wait_arival, get_distance * Implement running Blockly programs, implement prompt block, fixes * Add land button * Little change * Fix reserved words + little fixes * +x for main.py * Simplify run button * Auto-save and load workspace * Make land button work * Handle exceptions * Minor change * Add help URL for blocks * Fix * Implement arrived block * Mark blockly and highlight.js as linguist-vendored * Add forgotten CMakeLists.txt * Add wait checkbox to set_yaw block * Disable run button when disconnected * Add message and service files * Add some comments * Add tooltip to some blocks * Implement GPIO blocks * Don’t latch print message to prevent duplication * Prevent duplication prompts * Add ROS init code to backend code anyways * Make GPIO blocks color a constant * Minor fix * More correctly update blocks on input value changes * Minor fixes * Remove unneeded readonly attribute * Add marker ID shadow blocks to toolbox * Add lacking reserved words * Fix frame id generation for complex marker id expressions * Consider frame_id in set_yaw block * Shorten ros module import * Implement stop service * Disable and enable run button correctly * Don’t print KeyboardInterrupt exceptions * Put notifications to notifications element * Add 'running' mark * Disable signal in backend python code * Sleep a little bit to let rospy initialize publishers * Remove accidental code * Make ROS namespace and private namespace constants * editorconfig-lint: don’t check Blockly code * Use private namespace constant in Python generator * Implement ~running topic to display current program status more robustly * Make navigate tolerance and sleep time constants * Make set_leds and and set_effect services proxies persistent * Replace a number with constant * Limit ~block topic publishing rate Otherwise messages get queued making the frontend to freeze * Improve internal documentation * Append 'map' to frames list * Return degrees in get_attitude block * Move getting yaw in a separate block * Improve block tooltips * Add some more files to editorconfig-lint excludes * Add get_yaw block to toolbox * Implement get_time block * Implement ~store and ~load services for storing user programs * Set auto_arm only in take_off block * Minor CSS fixes * Make 'Python' tab textarea-like * Implement saving and loading programs * Adjust styles * Retrieve only .xml files in load service * Forgotten code * Documentation on store and load services * Add some examples * Add blocks programming arg to launch file * Update docs * Add package’s dependencies * Add dependency * Add title to select * Fix syntax * Minor fix in docs * Add forgotten roslib.js * Run user program in the same process * Use print function for print block in Python 2 * Add variables example * Fix url * Add functions example * Fix set_servo block * Fix gpio_read block * Update blocks screenshot * Update docs * Update docs * Fix set_effect block * Minor fix in example * Add setpoint block, remove set_velocity from toolbox * Remove unused modules * Unused variable * Add English article skeleton * Clarify backend node link error * Remove unused variable * Update documentation * Fix link to documentation * Add Blockly logo * Update English article * Add Blocks programming link to the main page * Minor change * Add catkin_install_python to CMakeLists.txt * Make navigate tolerance and sleep time configurable * Add minor todo * Add blockly examples directory to editorconfig-lint excludes * Rename main node to clover_blocks * Add a warning to the old blocks programming article * Fix editorconfig-lint exclude --- .gitattributes | 2 + .gitignore | 2 + .travis.yml | 2 +- clover/launch/clover.launch | 4 + clover/src/simple_offboard.cpp | 111 +- clover/www/index.html | 1 + clover_blocks/CMakeLists.txt | 87 + clover_blocks/README.md | 52 + clover_blocks/msg/Prompt.msg | 2 + clover_blocks/package.xml | 48 + clover_blocks/programs/examples/aruco-map.xml | 73 + .../programs/examples/aruco-marker.xml | 64 + .../programs/examples/flight-led.xml | 97 + clover_blocks/programs/examples/functions.xml | 184 + .../programs/examples/led-compass.xml | 106 + clover_blocks/programs/examples/led.xml | 30 + clover_blocks/programs/examples/rotation.xml | 88 + .../programs/examples/simple-flight.xml | 86 + .../programs/examples/takeoff-land.xml | 60 + clover_blocks/programs/examples/variables.xml | 137 + clover_blocks/screenshot.png | Bin 0 -> 186901 bytes clover_blocks/src/clover_blocks | 176 + clover_blocks/srv/Load.srv | 5 + clover_blocks/srv/Run.srv | 4 + clover_blocks/srv/Store.srv | 5 + clover_blocks/www/blockly/LICENSE | 202 + clover_blocks/www/blockly/README.md | 60 + .../www/blockly/blockly_compressed.js | 1409 +++++ .../www/blockly/blockly_compressed.js.map | 1 + .../www/blockly/blocks_compressed.js | 182 + .../www/blockly/blocks_compressed.js.map | 1 + clover_blocks/www/blockly/media/1x1.gif | Bin 0 -> 43 bytes clover_blocks/www/blockly/media/click.mp3 | Bin 0 -> 2304 bytes clover_blocks/www/blockly/media/click.ogg | Bin 0 -> 4865 bytes clover_blocks/www/blockly/media/click.wav | Bin 0 -> 3782 bytes clover_blocks/www/blockly/media/delete.mp3 | Bin 0 -> 3123 bytes clover_blocks/www/blockly/media/delete.ogg | Bin 0 -> 5731 bytes clover_blocks/www/blockly/media/delete.wav | Bin 0 -> 9164 bytes .../www/blockly/media/disconnect.mp3 | Bin 0 -> 1586 bytes .../www/blockly/media/disconnect.ogg | Bin 0 -> 4404 bytes .../www/blockly/media/disconnect.wav | Bin 0 -> 1492 bytes .../www/blockly/media/dropdown-arrow.svg | 1 + .../www/blockly/media/handclosed.cur | Bin 0 -> 326 bytes .../www/blockly/media/handdelete.cur | Bin 0 -> 766 bytes clover_blocks/www/blockly/media/handopen.cur | Bin 0 -> 198 bytes clover_blocks/www/blockly/media/pilcrow.png | Bin 0 -> 1010 bytes clover_blocks/www/blockly/media/quote0.png | Bin 0 -> 771 bytes clover_blocks/www/blockly/media/quote1.png | Bin 0 -> 738 bytes clover_blocks/www/blockly/media/sprites.png | Bin 0 -> 2595 bytes clover_blocks/www/blockly/media/sprites.svg | 74 + clover_blocks/www/blockly/msg/js/en.js | 434 ++ .../www/blockly/python_compressed.js | 98 + .../www/blockly/python_compressed.js.map | 1 + clover_blocks/www/blocks.js | 564 ++ clover_blocks/www/highlight/highlight.pack.js | 6 + .../www/highlight/styles/monokai-sublime.css | 83 + clover_blocks/www/index.html | 483 ++ clover_blocks/www/main.css | 136 + clover_blocks/www/main.js | 313 ++ clover_blocks/www/python.js | 434 ++ clover_blocks/www/ros.js | 59 + clover_blocks/www/roslib.js | 4560 +++++++++++++++++ docs/assets/blocks/blockly.svg | 209 + docs/assets/blocks/blocks.png | Bin 0 -> 259605 bytes docs/assets/blocks/get-position.png | Bin 0 -> 10332 bytes docs/assets/blocks/land.png | Bin 0 -> 4638 bytes docs/assets/blocks/navigate.png | Bin 0 -> 34657 bytes docs/assets/blocks/random-color.png | Bin 0 -> 15385 bytes docs/assets/blocks/save.png | Bin 0 -> 18195 bytes docs/assets/blocks/set-effect.png | Bin 0 -> 11545 bytes docs/assets/blocks/take-off.png | Bin 0 -> 8583 bytes docs/assets/blocks/wait-arrival.png | Bin 0 -> 4204 bytes docs/assets/blocks/wait.png | Bin 0 -> 8168 bytes docs/en/SUMMARY.md | 1 + docs/en/blocks.md | 110 + docs/ru/SUMMARY.md | 1 + docs/ru/blocks.md | 110 + docs/ru/clever_blocks.md | 2 + docs/ru/leds.md | 2 +- 79 files changed, 10931 insertions(+), 31 deletions(-) create mode 100644 clover_blocks/CMakeLists.txt create mode 100644 clover_blocks/README.md create mode 100644 clover_blocks/msg/Prompt.msg create mode 100644 clover_blocks/package.xml create mode 100644 clover_blocks/programs/examples/aruco-map.xml create mode 100644 clover_blocks/programs/examples/aruco-marker.xml create mode 100644 clover_blocks/programs/examples/flight-led.xml create mode 100644 clover_blocks/programs/examples/functions.xml create mode 100644 clover_blocks/programs/examples/led-compass.xml create mode 100644 clover_blocks/programs/examples/led.xml create mode 100644 clover_blocks/programs/examples/rotation.xml create mode 100644 clover_blocks/programs/examples/simple-flight.xml create mode 100644 clover_blocks/programs/examples/takeoff-land.xml create mode 100644 clover_blocks/programs/examples/variables.xml create mode 100644 clover_blocks/screenshot.png create mode 100755 clover_blocks/src/clover_blocks create mode 100644 clover_blocks/srv/Load.srv create mode 100644 clover_blocks/srv/Run.srv create mode 100644 clover_blocks/srv/Store.srv create mode 100755 clover_blocks/www/blockly/LICENSE create mode 100755 clover_blocks/www/blockly/README.md create mode 100755 clover_blocks/www/blockly/blockly_compressed.js create mode 100755 clover_blocks/www/blockly/blockly_compressed.js.map create mode 100755 clover_blocks/www/blockly/blocks_compressed.js create mode 100755 clover_blocks/www/blockly/blocks_compressed.js.map create mode 100755 clover_blocks/www/blockly/media/1x1.gif create mode 100755 clover_blocks/www/blockly/media/click.mp3 create mode 100755 clover_blocks/www/blockly/media/click.ogg create mode 100755 clover_blocks/www/blockly/media/click.wav create mode 100755 clover_blocks/www/blockly/media/delete.mp3 create mode 100755 clover_blocks/www/blockly/media/delete.ogg create mode 100755 clover_blocks/www/blockly/media/delete.wav create mode 100755 clover_blocks/www/blockly/media/disconnect.mp3 create mode 100755 clover_blocks/www/blockly/media/disconnect.ogg create mode 100755 clover_blocks/www/blockly/media/disconnect.wav create mode 100755 clover_blocks/www/blockly/media/dropdown-arrow.svg create mode 100755 clover_blocks/www/blockly/media/handclosed.cur create mode 100755 clover_blocks/www/blockly/media/handdelete.cur create mode 100755 clover_blocks/www/blockly/media/handopen.cur create mode 100755 clover_blocks/www/blockly/media/pilcrow.png create mode 100755 clover_blocks/www/blockly/media/quote0.png create mode 100755 clover_blocks/www/blockly/media/quote1.png create mode 100755 clover_blocks/www/blockly/media/sprites.png create mode 100755 clover_blocks/www/blockly/media/sprites.svg create mode 100755 clover_blocks/www/blockly/msg/js/en.js create mode 100755 clover_blocks/www/blockly/python_compressed.js create mode 100755 clover_blocks/www/blockly/python_compressed.js.map create mode 100644 clover_blocks/www/blocks.js create mode 100644 clover_blocks/www/highlight/highlight.pack.js create mode 100644 clover_blocks/www/highlight/styles/monokai-sublime.css create mode 100644 clover_blocks/www/index.html create mode 100644 clover_blocks/www/main.css create mode 100644 clover_blocks/www/main.js create mode 100644 clover_blocks/www/python.js create mode 100644 clover_blocks/www/ros.js create mode 100644 clover_blocks/www/roslib.js create mode 100644 docs/assets/blocks/blockly.svg create mode 100644 docs/assets/blocks/blocks.png create mode 100644 docs/assets/blocks/get-position.png create mode 100644 docs/assets/blocks/land.png create mode 100644 docs/assets/blocks/navigate.png create mode 100644 docs/assets/blocks/random-color.png create mode 100644 docs/assets/blocks/save.png create mode 100644 docs/assets/blocks/set-effect.png create mode 100644 docs/assets/blocks/take-off.png create mode 100644 docs/assets/blocks/wait-arrival.png create mode 100644 docs/assets/blocks/wait.png create mode 100644 docs/en/blocks.md create mode 100644 docs/ru/blocks.md diff --git a/.gitattributes b/.gitattributes index 401887acf..58abc7474 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,3 +4,5 @@ eventemitter2.js linguist-vendored ros3d.js linguist-vendored three.min.js linguist-vendored aruco_pose/vendor/* linguist-vendored +blockly/* linguist-vendored +highlight/* linguist-vendored diff --git a/.gitignore b/.gitignore index c502f90f9..a50caecca 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ node_modules/ _book/ package-lock.json +clover_blocks/programs/*.* +!clover_blocks/programs/examples/* diff --git a/.travis.yml b/.travis.yml index 5ba46df94..1ed7862cf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -107,7 +107,7 @@ jobs: - wget https://github.com/okalachev/editorconfig-checker/releases/download/1.2.1-disable-spaces-amount/ec-linux-amd64 - chmod +x ec-linux-amd64 script: - - ./ec-linux-amd64 -spaces-after-tabs -e "roslib.js|ros3d.js|eventemitter2.js|draw.cpp|BinUtils.swift|\.idea|apps/android/app|Assets.xcassets|test_parser_pass.txt|test_node_failure.txt|aruco_pose/vendor|\.stl|\.dxf|\.dae" + - ./ec-linux-amd64 -spaces-after-tabs -e "roslib.js|ros3d.js|eventemitter2.js|draw.cpp|BinUtils.swift|\.idea|apps/android/app|blockly/|clover_blocks/programs/|highlight/|python.js|Assets.xcassets|test_parser_pass.txt|test_node_failure.txt|aruco_pose/vendor|\.stl|\.dxf|\.dae" stages: - Build # More info there diff --git a/clover/launch/clover.launch b/clover/launch/clover.launch index 196490bc5..a3e3ba8eb 100644 --- a/clover/launch/clover.launch +++ b/clover/launch/clover.launch @@ -10,6 +10,7 @@ + @@ -81,6 +82,9 @@ + + + diff --git a/clover/src/simple_offboard.cpp b/clover/src/simple_offboard.cpp index bc926b5a2..13534666c 100644 --- a/clover/src/simple_offboard.cpp +++ b/clover/src/simple_offboard.cpp @@ -46,6 +46,7 @@ #include using std::string; +using std::isnan; using namespace geometry_msgs; using namespace sensor_msgs; using namespace clover; @@ -507,25 +508,84 @@ bool serve(enum setpoint_type_t sp_type, float x, float y, float z, float vx, fl if (busy) throw std::runtime_error("Busy"); - ENSURE_FINITE(x); - ENSURE_FINITE(y); - ENSURE_FINITE(z); - ENSURE_FINITE(vx); - ENSURE_FINITE(vy); - ENSURE_FINITE(vz); - ENSURE_FINITE(pitch); - ENSURE_FINITE(roll); - ENSURE_FINITE(pitch_rate); - ENSURE_FINITE(roll_rate); - ENSURE_FINITE(lat); - ENSURE_FINITE(lon); - ENSURE_FINITE(thrust); - busy = true; // Checks checkState(); + // default frame is local frame + if (frame_id.empty()) + frame_id = local_frame; + + // look up for reference frame + auto search = reference_frames.find(frame_id); + const string& reference_frame = search == reference_frames.end() ? frame_id : search->second; + + // Serve "partial" commands + + if (!auto_arm && std::isfinite(yaw) && + isnan(x) && isnan(y) && isnan(z) && isnan(vx) && isnan(vy) && isnan(vz) && + isnan(pitch) && isnan(roll) && isnan(thrust) && + isnan(lat) && isnan(lon)) { + // change only the yaw + if (setpoint_type == POSITION || setpoint_type == NAVIGATE || setpoint_type == NAVIGATE_GLOBAL || setpoint_type == VELOCITY) { + if (!waitTransform(setpoint_position.header.frame_id, frame_id, stamp, transform_timeout)) + throw std::runtime_error("Can't transform from " + frame_id + " to " + setpoint_position.header.frame_id); + + message = "Changing yaw only"; + + QuaternionStamped q; + q.header.frame_id = frame_id; + q.header.stamp = stamp; + q.quaternion = tf::createQuaternionMsgFromYaw(yaw); // TODO: pitch=0, roll=0 is not totally correct + setpoint_position.pose.orientation = tf_buffer.transform(q, setpoint_position.header.frame_id).quaternion; + setpoint_yaw_type = YAW; + goto publish_setpoint; + } else { + throw std::runtime_error("Setting yaw is possible only when position or velocity setpoints active"); + } + } + + if (!auto_arm && std::isfinite(yaw_rate) && + isnan(x) && isnan(y) && isnan(z) && isnan(vx) && isnan(vy) && isnan(vz) && + isnan(pitch) && isnan(roll) && isnan(yaw) && isnan(thrust) && + isnan(lat) && isnan(lon)) { + // change only the yaw rate + if (setpoint_type == POSITION || setpoint_type == NAVIGATE || setpoint_type == NAVIGATE_GLOBAL || setpoint_type == VELOCITY) { + message = "Changing yaw rate only"; + + setpoint_yaw_type = YAW_RATE; + setpoint_yaw_rate = yaw_rate; + goto publish_setpoint; + } else { + throw std::runtime_error("Setting yaw rate is possible only when position or velocity setpoints active"); + } + } + + // Serve normal commands + + if (sp_type == NAVIGATE || sp_type == POSITION) { + ENSURE_FINITE(x); + ENSURE_FINITE(y); + ENSURE_FINITE(z); + } else if (sp_type == NAVIGATE_GLOBAL) { + ENSURE_FINITE(lat); + ENSURE_FINITE(lon); + ENSURE_FINITE(z); + } else if (sp_type == VELOCITY) { + ENSURE_FINITE(vx); + ENSURE_FINITE(vy); + ENSURE_FINITE(vz); + } else if (sp_type == ATTITUDE) { + ENSURE_FINITE(pitch); + ENSURE_FINITE(roll); + ENSURE_FINITE(thrust); + } else if (sp_type == RATES) { + ENSURE_FINITE(pitch_rate); + ENSURE_FINITE(roll_rate); + ENSURE_FINITE(thrust); + } + if (sp_type == NAVIGATE || sp_type == NAVIGATE_GLOBAL) { if (TIMEOUT(local_position, local_position_timeout)) throw std::runtime_error("No local position, check settings"); @@ -550,14 +610,6 @@ bool serve(enum setpoint_type_t sp_type, float x, float y, float z, float vx, fl throw std::runtime_error("No global position"); } - // default frame is local frame - if (frame_id.empty()) - frame_id = local_frame; - - // look up for reference frame - auto search = reference_frames.find(frame_id); - const string& reference_frame = search == reference_frames.end() ? frame_id : search->second; - if (sp_type == NAVIGATE || sp_type == NAVIGATE_GLOBAL || sp_type == POSITION || sp_type == VELOCITY || sp_type == ATTITUDE) { // make sure transform from frame_id to reference frame available if (!waitTransform(reference_frame, frame_id, stamp, transform_timeout)) @@ -625,7 +677,7 @@ bool serve(enum setpoint_type_t sp_type, float x, float y, float z, float vx, fl } else { setpoint_yaw_type = YAW; setpoint_yaw_rate = 0; - ps.pose.orientation = tf::createQuaternionMsgFromRollPitchYaw(roll, pitch, yaw); + ps.pose.orientation = tf::createQuaternionMsgFromYaw(yaw); } tf_buffer.transform(ps, setpoint_position, reference_frame); @@ -653,6 +705,7 @@ bool serve(enum setpoint_type_t sp_type, float x, float y, float z, float vx, fl wait_armed = auto_arm; +publish_setpoint: publish(stamp); // calculate initial transformed messages first setpoint_timer.start(); @@ -693,27 +746,27 @@ bool serve(enum setpoint_type_t sp_type, float x, float y, float z, float vx, fl } bool navigate(Navigate::Request& req, Navigate::Response& res) { - return serve(NAVIGATE, req.x, req.y, req.z, 0, 0, 0, 0, 0, req.yaw, 0, 0, req.yaw_rate, 0, 0, 0, req.speed, req.frame_id, req.auto_arm, res.success, res.message); + return serve(NAVIGATE, req.x, req.y, req.z, NAN, NAN, NAN, NAN, NAN, req.yaw, NAN, NAN, req.yaw_rate, NAN, NAN, NAN, req.speed, req.frame_id, req.auto_arm, res.success, res.message); } bool navigateGlobal(NavigateGlobal::Request& req, NavigateGlobal::Response& res) { - return serve(NAVIGATE_GLOBAL, 0, 0, req.z, 0, 0, 0, 0, 0, req.yaw, 0, 0, req.yaw_rate, req.lat, req.lon, 0, req.speed, req.frame_id, req.auto_arm, res.success, res.message); + return serve(NAVIGATE_GLOBAL, NAN, NAN, req.z, NAN, NAN, NAN, NAN, NAN, req.yaw, NAN, NAN, req.yaw_rate, req.lat, req.lon, NAN, req.speed, req.frame_id, req.auto_arm, res.success, res.message); } bool setPosition(SetPosition::Request& req, SetPosition::Response& res) { - return serve(POSITION, req.x, req.y, req.z, 0, 0, 0, 0, 0, req.yaw, 0, 0, req.yaw_rate, 0, 0, 0, 0, req.frame_id, req.auto_arm, res.success, res.message); + return serve(POSITION, req.x, req.y, req.z, NAN, NAN, NAN, NAN, NAN, req.yaw, NAN, NAN, req.yaw_rate, NAN, NAN, NAN, NAN, req.frame_id, req.auto_arm, res.success, res.message); } bool setVelocity(SetVelocity::Request& req, SetVelocity::Response& res) { - return serve(VELOCITY, 0, 0, 0, req.vx, req.vy, req.vz, 0, 0, req.yaw, 0, 0, req.yaw_rate, 0, 0, 0, 0, req.frame_id, req.auto_arm, res.success, res.message); + return serve(VELOCITY, NAN, NAN, NAN, req.vx, req.vy, req.vz, NAN, NAN, req.yaw, NAN, NAN, req.yaw_rate, NAN, NAN, NAN, NAN, req.frame_id, req.auto_arm, res.success, res.message); } bool setAttitude(SetAttitude::Request& req, SetAttitude::Response& res) { - return serve(ATTITUDE, 0, 0, 0, 0, 0, 0, req.pitch, req.roll, req.yaw, 0, 0, 0, 0, 0, req.thrust, 0, req.frame_id, req.auto_arm, res.success, res.message); + return serve(ATTITUDE, NAN, NAN, NAN, NAN, NAN, NAN, req.pitch, req.roll, req.yaw, NAN, NAN, NAN, NAN, NAN, req.thrust, NAN, req.frame_id, req.auto_arm, res.success, res.message); } bool setRates(SetRates::Request& req, SetRates::Response& res) { - return serve(RATES, 0, 0, 0, 0, 0, 0, 0, 0, 0, req.pitch_rate, req.roll_rate, req.yaw_rate, 0, 0, req.thrust, 0, "", req.auto_arm, res.success, res.message); + return serve(RATES, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, NAN, req.pitch_rate, req.roll_rate, req.yaw_rate, NAN, NAN, req.thrust, NAN, "", req.auto_arm, res.success, res.message); } bool land(std_srvs::Trigger::Request& req, std_srvs::Trigger::Response& res) diff --git a/clover/www/index.html b/clover/www/index.html index 2234aefcd..fe0a6eaa3 100644 --- a/clover/www/index.html +++ b/clover/www/index.html @@ -6,6 +6,7 @@

Clover Drone Kit Tools

  • Open web terminal (Butterfly)
  • View 3D visualization (ros3djs)
  • 3D visualization for markers map (ros3djs)
  • +
  • Blocks programming (Blockly)
  • diff --git a/clover_blocks/CMakeLists.txt b/clover_blocks/CMakeLists.txt new file mode 100644 index 000000000..437e4cf4d --- /dev/null +++ b/clover_blocks/CMakeLists.txt @@ -0,0 +1,87 @@ +cmake_minimum_required(VERSION 2.8.3) +project(clover_blocks) + +find_package(catkin REQUIRED COMPONENTS message_generation) + +add_message_files( + FILES + Prompt.msg +) + +add_service_files( + FILES + Run.srv + Load.srv + Store.srv +) + +generate_messages( + DEPENDENCIES + # std_msgs # Or other packages containing msgs +) + +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES roslaunch_editor + CATKIN_DEPENDS message_runtime +# DEPENDS system_lib +) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +# install(PROGRAMS +# scripts/my_python_script +# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark executables for installation +## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html +# install(TARGETS ${PROJECT_NAME}_node +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark libraries for installation +## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html +# install(TARGETS ${PROJECT_NAME} +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +catkin_install_python(PROGRAMS src/clover_blocks + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_roslaunch_editor.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/clover_blocks/README.md b/clover_blocks/README.md new file mode 100644 index 000000000..7dbca3ca2 --- /dev/null +++ b/clover_blocks/README.md @@ -0,0 +1,52 @@ +# clover_blocks + +Blockly programming support for Clover. + + + +See user documentation at the [main Clover documentation site](https://clover.coex.tech/en/blocks.html). + +Internal package documentation is given below. + +## Frontend + +The frontend files are located in [`www`](./www/) subdirectory. The frontend application uses [`roblib.js`](http://wiki.ros.org/roslibjs) library for communicating with backend node and other ROS resources. + +## `clover_blocks` node + +`clover_blocks` is the blocks programming backend, implementing all the services and topics needed for running Blockly-generated Python script. + +### Services + +* `~run` ([*clover_blocks/Run*](srv/Run.srv)) – run Blockly-generated program (in Python). +* `~stop` ([*std_srvs/Trigger*](http://docs.ros.org/melodic/api/std_srvs/html/srv/Trigger.html)) – terminate the running program. +* `~store` ([*clover_blocks/load*](srv/Store.srv)) – store a user program (to `/programs` by default). +* `~load` ([*clover_blocks/load*](srv/Load.srv)) – load all the stored programs. + +### Parameters + +* `~programs_dir` (*string*) – directory for user programs. + +Parameters read by frontend: + +* `~navigate_tolerance` (*float*) – distance tolerance in meters, used for navigate-like blocks (default: 0.2). +* `~sleep_time` (*float*) – duration of sleep in loop cycles, used for navigate-like blocks (default: 0.2). + +These parameters also can be set as URL GET-parameters, for example: + +``` +http:///clover_blocks/?navigate_tolerance=0.5&sleep_time=0.1 +``` + +### Topics + +#### Published + +* `~running` ([*std_msgs/Bool*](http://docs.ros.org/melodic/api/std_msgs/html/msg/Bool.html)) – indicates if the program is currently running. +* `~block` ([*std_msgs/String*](http://docs.ros.org/melodic/api/std_msgs/html/msg/String.html)) – current executing block (maximum topic rate is limited). +* `~error` ([*std_msgs/String*](http://docs.ros.org/melodic/api/std_msgs/html/msg/String.html)) – user program errors and exceptions. +* `~prompt` ([*clover_blocks/Prompt*](msg/Prompt.msg)) – user input request (includes random request ID string). + +This topic is published from the frontend side: + +* `~prompt/` ([*std_msgs/String*](http://docs.ros.org/melodic/api/std_msgs/html/msg/String.html)) – user input response. diff --git a/clover_blocks/msg/Prompt.msg b/clover_blocks/msg/Prompt.msg new file mode 100644 index 000000000..8780a54c9 --- /dev/null +++ b/clover_blocks/msg/Prompt.msg @@ -0,0 +1,2 @@ +string message # message for prompt +string id # user response should be published to ~input/ topic diff --git a/clover_blocks/package.xml b/clover_blocks/package.xml new file mode 100644 index 000000000..4dbecbd96 --- /dev/null +++ b/clover_blocks/package.xml @@ -0,0 +1,48 @@ + + + clover_blocks + 0.0.0 + Blockly programming support for Clover + Oleg Kalachev + MIT + + + + https://github.com/CopterExpress/clover + + + + Oleg Kalachev + + + + + + + + + + + + + + + + + + + + + + catkin + + message_generation + message_runtime + rospy + + + + + + + diff --git a/clover_blocks/programs/examples/aruco-map.xml b/clover_blocks/programs/examples/aruco-map.xml new file mode 100644 index 000000000..b4925a420 --- /dev/null +++ b/clover_blocks/programs/examples/aruco-map.xml @@ -0,0 +1,73 @@ + + + TRUE + + + 1.5 + + + + + + + 10 + + + + + ARUCO_MAP + TRUE + + + 0 + + + + NUMBER + + + Enter X + + + + + + + 0 + + + + NUMBER + + + Enter Y + + + + + + + 1.5 + + + + + 0 + + + + + 0.5 + + + + + + + TRUE + + + + + + diff --git a/clover_blocks/programs/examples/aruco-marker.xml b/clover_blocks/programs/examples/aruco-marker.xml new file mode 100644 index 000000000..3875911ac --- /dev/null +++ b/clover_blocks/programs/examples/aruco-marker.xml @@ -0,0 +1,64 @@ + + + TRUE + + + 1.5 + + + + + + + 3 + + + + + ARUCO + TRUE + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + NUMBER + + + Enter marker ID + + + + + + + 0.5 + + + + + + + TRUE + + + + + + \ No newline at end of file diff --git a/clover_blocks/programs/examples/flight-led.xml b/clover_blocks/programs/examples/flight-led.xml new file mode 100644 index 000000000..0fa65d45c --- /dev/null +++ b/clover_blocks/programs/examples/flight-led.xml @@ -0,0 +1,97 @@ + + + TRUE + + + 1 + + + + + FILL + + + #ff0000 + + + + + BODY + TRUE + + + 1 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0.5 + + + + + FILL + + + #3333ff + + + + + BODY + TRUE + + + -1 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0.5 + + + + + TRUE + + + + + + + + + + + + \ No newline at end of file diff --git a/clover_blocks/programs/examples/functions.xml b/clover_blocks/programs/examples/functions.xml new file mode 100644 index 000000000..6f5ddb694 --- /dev/null +++ b/clover_blocks/programs/examples/functions.xml @@ -0,0 +1,184 @@ + + + start_x + start_y + start_z + + + memorize position + Describe this function... + + + start_x + + + X + MAP + + + 0 + + + + + + + start_y + + + Y + MAP + + + 0 + + + + + + + start_z + + + Z + MAP + + + 0 + + + + + + + + + + + + + TRUE + + + 2 + + + + + + + + ARUCO_MAP + TRUE + + + 0 + + + + NUMBER + + + Input X + + + + + + + 0 + + + + NUMBER + + + Input Y + + + + + + + 2 + + + + + 0 + + + + + 0.5 + + + + + + + Point reached. Going back. + + + + + + + + TRUE + + + + + + + + + + + + + navigate to memorized position + Describe this function... + + + BODY + TRUE + + + 0 + + + start_x + + + + + 0 + + + start_y + + + + + 0 + + + start_z + + + + + 0 + + + + + 0.5 + + + + + + \ No newline at end of file diff --git a/clover_blocks/programs/examples/led-compass.xml b/clover_blocks/programs/examples/led-compass.xml new file mode 100644 index 000000000..a6c48cc34 --- /dev/null +++ b/clover_blocks/programs/examples/led-compass.xml @@ -0,0 +1,106 @@ + + + led_count + + + led_count + + + 58 + + + + + WHILE + + + TRUE + + + + + FILL + + + #000000 + + + + + + + 0 + + + MULTIPLY + + + 1 + + + DIVIDE + + + 1 + + + ADD + + + 1 + + + MAP + + + 0 + + + + + + + 180 + + + + + + + 360 + + + + + + + 1 + + + led_count + + + + + + + #3366ff + + + + + + + 0.1 + + + + + + + + + + + + diff --git a/clover_blocks/programs/examples/led.xml b/clover_blocks/programs/examples/led.xml new file mode 100644 index 000000000..1ac9d8a07 --- /dev/null +++ b/clover_blocks/programs/examples/led.xml @@ -0,0 +1,30 @@ + + + WHILE + + + TRUE + + + + + WIPE + + + #ff0000 + + + + + + + + 1 + + + + + + + + \ No newline at end of file diff --git a/clover_blocks/programs/examples/rotation.xml b/clover_blocks/programs/examples/rotation.xml new file mode 100644 index 000000000..2520c3315 --- /dev/null +++ b/clover_blocks/programs/examples/rotation.xml @@ -0,0 +1,88 @@ + + + TRUE + + + 1 + + + + + BODY + TRUE + + + 1 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0.5 + + + + + body + TRUE + + + 180 + + + + + BODY + TRUE + + + 1 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0.5 + + + + + TRUE + + + + + + + + + + \ No newline at end of file diff --git a/clover_blocks/programs/examples/simple-flight.xml b/clover_blocks/programs/examples/simple-flight.xml new file mode 100644 index 000000000..2e6436d68 --- /dev/null +++ b/clover_blocks/programs/examples/simple-flight.xml @@ -0,0 +1,86 @@ + + + TRUE + + + 1 + + + + NUMBER + + + Enter flight altitude + + + + + + + BODY + TRUE + + + 1 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0.5 + + + + + BODY + TRUE + + + -1 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0.5 + + + + + TRUE + + + + + + + + \ No newline at end of file diff --git a/clover_blocks/programs/examples/takeoff-land.xml b/clover_blocks/programs/examples/takeoff-land.xml new file mode 100644 index 000000000..1c4472cf4 --- /dev/null +++ b/clover_blocks/programs/examples/takeoff-land.xml @@ -0,0 +1,60 @@ + + + + + Start mission + + + + + TRUE + + + 1 + + + + + + + Take off complete, wait + + + + + + + 3 + + + + + + + Land + + + + + TRUE + + + + + Mission finished + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/clover_blocks/programs/examples/variables.xml b/clover_blocks/programs/examples/variables.xml new file mode 100644 index 000000000..aa468b4c7 --- /dev/null +++ b/clover_blocks/programs/examples/variables.xml @@ -0,0 +1,137 @@ + + + start_x + start_y + + + TRUE + + + 1.5 + + + + + start_x + + + X + ARUCO_MAP + + + 0 + + + + + + + start_y + + + Y + ARUCO_MAP + + + 0 + + + + + + + + + Fly to point 0, 0 + + + + + ARUCO_MAP + TRUE + + + 0 + + + + + 0 + + + + + 1.5 + + + + + 0 + + + + + 0.5 + + + + + + + Fly to initial point + + + + + ARUCO_MAP + TRUE + + + 0 + + + start_x + + + + + 0 + + + start_y + + + + + 1.5 + + + + + 0 + + + + + 0.5 + + + + + TRUE + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/clover_blocks/screenshot.png b/clover_blocks/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..b97d19528d72df6c96662daefb8acd380721c691 GIT binary patch literal 186901 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 z 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

    BSgGku^+j;4U?L$ z;6d>V>0W)zB+NnszFe-$}`y=YCKfHr7L#~T1N1Nz=C~9 zUvYacRD)q3uFT0mSJ74{553l==CLg>uf-gp(l4fdL4#x^kNnSEQP?T4&iYvR?VmDx z(#xHEkcMctIu#-{X;U6tYo8iK7H>)$UOVzF_r?5q`USrkbk}M}`ubBG z=RH-f=j{=f#K zixR2=vp;fm^-AlWrB-4`WCm>DKhU^q{iZO+s7@MLEs2kh z6WH>W!r2H_DX?JkSWq0zuV?=v=pB}B_4fe4ey(qqQVrZT;|qfG{tp0NK%u__)zKSj zRwg}L_Zf!q=_45za})B)T!;;m4I*tr>na#GvYOrr8M=o32&QzYp|%X3S~nW$d_^4& zcZcE2SMMhvx(>rejKTEGQ3gAdZC#E}Ubz>|t|QS@TgmvM)o5TDF$9vfc_?*jtR=i@ zi$GJ=T5R2%gY1FX7&K-w)~$G%@hu5ViPM$8rG-d90Lp-pju9ItFX54xa`Zglu}^T) zF-IWQ9m-HU{%X7(`K==o+0-R%NkU9k%O(ORUXTr+#{;8)Rk}*Ne zG;orKG7L*|awP4NBXRNn{S_s5--mP0yBO}QvAF#w|A&*$FTrIu{t+8bn?YwtnK=El zAJE&g6qK#0j87YatB;^fE;lmTT#?Lw3D)hX#Ydm6#+b8?!v9|SJ0AS&gP4Eb6$~d9 zikatKh&SncsZSi=A&p_U;IxyF9MAiO9cpS0!sMe*#h-uPh#%j0lZI~6RX6+;KRA9O zwVJ77O?p~url-gFFgBeunHxS__z6d2Qr{3<^qq@Q&7GUee|Q5fJ9ieP`>j+v4!ma7 zCwcP@HMG_I`p<`NAbwwxvhFK`?pKX-=un{7Qb5wuYQ`{@Dz8AK)OUBa<`q&&_M=L2 zgcKsJkS}-1f48f~6yoB65+MPv+ zQ95i$=M3}^qJW(Bc-9?^t#Up$URs(n^6Ze~jp-PqSmfh#%%BWE|EG=B}j zU8PT|8R%Xi`%Fn#GbKW8A@NAc8jg^*2CDO}qJtDkh2l-v61|7x`;35#>Z}#{D+vfg z=pQE9I3kiwYAZouFu{xcGH;_}7J-srO1BJiF7(JS9Ri*SeW%djQX~OqG0O74q8H#4 z^MY@sUFk0CG2Vd{L#~bSTWJs1P-7&T7UR#!b6Q=mkcfFi`` z$Z&k}+W&CY^-tja_y2F~$z!Lmy)}gsI6sZFyQhl@$rMaJ>wz>v!858J)sTp03uHtOCfg zZ45DZ6S}X;@Xo&6I{lgoL{p9x0BXl#DCuQ(I;*%G_gPr1ww8=#Gt| zn(+&N!{yIJVExmVn0vgD^O2ZH)kF5NT@Bk_r0PSLWM5J@yC%Z}(T#6yRVh|~^sFYN zJ&Qb4Z_nL?^M3p=`VSsSnrN(nYH2Ux95@u{)f5mQ-L`F;@vfVhnQ7EuNx&bLE>{YU}XBQ=(^VDPzPG4#&943iLz;^kiHR0{!L<6wj~$D+6}mr_is)N+H3?;#5S1RSe2 zXc+U*O(4PVvTdI;7eNiBYT+(jqqHQHLBn}JRqt45`0UW|G=%egYCAa!q9@x>I?vGy z&rU%ha;tCIznXIbYxMZ)CV;3ZT8*j#N=2C`EGp9g7%}{+CxrEw4*M!no)Fe!4I<2h zylAMcGQeSHUN{KbzFta6T^vJ|#Bn$r7i|*D3iI&6sx`Rh#y{cOU*C-Zsj&vQhVC)O zrahWK-x{mHQZR~hHxe+?p%bNW{-9K)_K6OLc2c7y%|v@ry(H%oesVK_^AeqyLdj{N zi76_2g@%U_AXc+A0xtq8dCfJceLkqtOVFicV4pcJDR2yq` zP(O0eWalv%eIKSz-*}9c7j0LluRmqnEa14~lNb_*G}agti`43~f9rd5tj#KJBye+Q z+t;76PO4A4EN5qXQ;U<=p}@gHfu^P=#%*pgfK5(}x`H|zWXfBwVwu|SI^|P%82y$# zs((2ht1f{+0a?{AfU0Dd?=AG{c*^#c9y$GRC~yc;KpVW?sx~AK>O&8kX{g>_h)mDpL-v8 zcrtYIrvmiI`MaLu@AkTVV-%Qf;ii#`;BnG$ zhS#a9Mw`b{fi_k7*XQ5JwF8+ z^)0WufmCw^EEU&Opj65K-BDj(kJ8doqpGX&{z+0%sqiX{jNOKRS^vD>=CK1zzfI~p zZ67uipf($#`Uhjh!yjS8bK$5js9~H$I{k1|cn_O3a5xN9>gr&aeuIj{KnF--EF@j^(B^gH7q3zJCIBlH%n&^ByYCu? zqiE#|$fsVin1jHz1gJQ`DN$7btd&4clG1%i-KPWRr7PIuTy*OHE@;xNeyOfbmF=Na z*UbDaK)dH8l}~xFYDMn4kCDGoVO*#lyXS&VjsO&p>hVubZo}6f{-?)jC>3-`&_f(a zX#mPQrw(=s=v|?ZE^>IJV|^Pf3_9Qo1RQl;lF>j(V%39TwC{5}i-r8=#`F1Gq?NXqf ztJi@)Al1*k0j1yWFnX$WF#wWY2DhsOTLe-lk~Z2%O3l$+BP;(+sUybSco23TDtj?~ zoDVT;;Z(WhTxkd8o6f^tG=2zXl{&e+R`+CLZMuIrH)iuBVAa-r74VXC(xE^vr+}V4 zvK5uhsP)dUz+xbvsOy&50q+PN2g;-2Do>#6%CBo`OE#whrcqH*2AK91GC9Dsx6Fjo zkHdlja+ncH51hvC$a$9@7IS{M57O}a`ZkZ7~pz15yt>?AImO0B)iD= z@pl}xpW4?0=~O#uuPI(yK?>ZPs%H)rvPQ3r0cpSTT<(p);X8$=tv=G z1W0#PPv=qx_Ll=p4=lZ%)(&?H@EOzfL36m1#2NpgO#$JtR&N{K-e)kBOA+l*D<}Yw z4Pnoy;vU-6b4KS-;BcdWWe(tNuBQ_-2D{x|;=@Ji*iE$s?H;XrBcr{$Avo6@3J5^T zldhelT5E@k3B)hTX_3On*mk0JIen`xUF)jGt81!DWt2zGk>tTwNnkY)h&30#g%1aq zehWnZrcG*b?e9h8w6Qm{)Okm1Z%R6O9SR)k6p$HTQ)LU1hRi@&a5J`SDMWO50@YX@ zV0x&}y)!0ht^@xj)H z=`U~cUA#AYayU+14h0TA3h>6DDJ8;EU3fWn1sK>6k#o-h{kR@{V{v-yP{5(Uex(3k zrF2r?if{sl*<)s4b5#jruy#+HvyC2|w{BXsU;F1&e(+O3{O0KNe#nSTG=uTyKmCt; za-{zC`X6^~!{+S;L>1aa&WWVfE9qxfO#oe&!y-vq1vXW0WMrf%*A>XB9odztE=fnF z!t0->Yu#P@W&if?yZ^C$y(hj^uLDebf|3Wg4tdkkqSPYXAB#gbhto#)C$-7XY1qmMV2 zET>1i-^|igo3Xd+bG{u4bftjS$m*i)-28AMF*3%incl|lN|jftwgRRV6%|G`S7Bbd zCIMFc32ds2#-U?LL%U)FNlPm$D@_%Wsw%&ox(iGX6gF^xsXa3X!M7HLTuSHW=9-0< zotI~Y`+&KLGV9in?JIJq1O93m7T$Eh7#-81qWtH16m z4;>;j=;2`)Hl1|bJ-gn+jrQW|^!#g3CO%14?D`E&_2IAXoa4N8>Iuv3? z(o)r}Hug3JYGZHf*i(Ml!1~|$d&=)z?*$Z)q|_Gk`|F7JWY?TFx=&5FJHqT($;+;8 zbB8hNKJA>Ghb9FSwv>^Oc1rv5BHXDG=Y*kv0rmu9O)UyJLt+~ygWmz@en^u{sy|KZ6pt^KT<9FP5?c0pmrNo44b444w;gpc-ooc6! zBl}GEzXdEcMYdGTE@{_qty%kQ$9D@Ivgy8ZvoCfYyG%!}&PR5>&S!haFT3x7`nbDm z`_y~i^T1GD54=4kPOz7D!Cu-BOG3W8QM{5CT2C(uyI!XaL*j0Ig!sM0x>dl*=9RAQQTC1D9AU8=nvG!d}J5ispL`(zP7fT*6JbWnUMrt}+% zcy5fzUiaG|t>R3wJ4QwO+nyf13+oy^SYMQjPYZL5^z<9`iS^YJFu4d)LO94^j#X4{ z=6R+1W`$fJfccha|Bc4hO9~5=*4EdfZ(Ne}cd@Oe91)C1Do`lUA4>H^@i#Vr>Q1*c zJG#f*yw~JJNkG$1s>h`|`A=Y|Ytr?Eh-f56#TqqY3+#}`Vm}R^<(vDCa@K}O8{64^ zvL1eB92}2b@9xX=%vJSW4_*^DT~+!BWS&D>)8_uwN#@b`_Njl?_*7PNDtefW0W%Y- zJ8;q!FM(D?eGSSRYJ7CrIj`s?O$c?*-;=w_>-o!Oje{%$h<7f&$1@stZ{>F-9Zg6` zFmqE{S_=Ki(UI&=1rq%wpZ?>JI&3}fEqUy%si`sZB2cQjb|rD$BcYhVzYQJl5B#Bi zIKZ?!v(d})*b8EREeij7{f~Q+4F2`{A0KROSp5}i>LiB(hbaZf7__ytqO7$Xm8VBy zOK2&Q%fm2mQw$RF!buc?Rx*i)*j*xdSqUX{VIeNW@UQDrfJ&t(Vf@x{N&OHFFVBl+!6$LL|C_r?az!c zG^?08aD-uEKis|^(WKA5(S}cR&S$^qID*|e)OwpypYHMq0xB7? z2?k*1Rh6Qup|1U@lN1$$l<0UgG&N#-Wl1Nh3h=}el=dM=*1KFhmVG}rHPjR2^1c;{ z^G}8`4?$RX=TIL0S*&B$$a^=G8g8vpy{B~eK&3{46A84S@o;Q4wI0$#=4Jwtdmg9kh%@36%{^37SH#}yiJ$(Du>wmn5V&<~H z`mH3Na$qFTDYaTTJ`y;!!KNgtc1Rf6lM0{;bW7?g$#9?$GTrHeoyWiL{>S$9p89rx zX-`q|0M@fV7sLS^#v#;H$AfK8gEB9-K-u*o+|$PEo+@{)I~4d9D4<<=Ph|~iN4LVA z5sT0rRVYblMClQY=-)RA>8o9+q|7iXlxlJeHfS?^yX&f?REDqNy}~_llU33Wo7E8* z&{^?#$}7fFw~yIf7o(wzytcbCs?;uLcHT`9OZusH^qdu&q&DpK)OV@m%1dZiXbesn zG?F{gCHRU?(1OVL*<%Z3`^C*cxb%qAaMq|{tfdaWdhQ{t@w6hAyWnor{oWE zG;aU?Ye;H)e4lKB(r`3VYUj_$*&CLf7(ySNRJV1W6jDXLWS7y;j_VqqmBD`3bgGm6 z3U>uz#Y>Olm5o{W<&CE!xUGp}uqw98_?qz5YyS$|zFmLUvUaKNd`m*6ZjVUshc(4{ zs3YTT){(EUJ%_eRwbqKxX)f(YuZxUwRec4fj+%#?r%b`S%b&x|Uv0v9*<%sY=D{Zg z8{vu=id#=P8+kcP@qZt^LFSk-c`1Rj*HWOq+ViUZNoJ>HN%O2e=!{l@-8YkgAC{!n z`lZqN18vdDu1oc*ec!a10`{8Lk3eO$zU-wCsPA@pl~ujE7ySFDG1>QK*ZS4w?vnam zQBj2x$B#x79lS^iG%TYZvJz8_)cf7C&ykjt+-ZI9u0CCpR4tR6HdzFh6$C0qMVRN+ zR(ec4`cuoGo@=7aTfI|NA(Vb669CzC6kUQSy=`tN#@~K@J3il3jHbF8Zm#LxZ6g?R zp}u+(vPNBwKmFx8Xm3Vy78Rhn&Woh9RK&W2@bXbUQ>3dH3pHtiV3(@nabR#Z1|0dk{*T*npObQwrn>l|PhpB4k z`gq2yEz(WiaVtG_R%oF1RS5#p2=t4m`e~Tkto=9w)QzPDXz(^+Ktd`KSWbP-h)KlP z)Rri!t@JD1(eA;1B;XkzA8&xDB%syR)kYesap{^rFcmmelH(+){R)r@#QM*h$Q!L1QNy2*RxEs zuS_YWCW@sR=VI6`UN37RBg;;Okr|DrR4j=3n^>35MUmkxVScG`Mlil&qRUMNw+d|` z*|_?sld)yXax8e`SqzQu!-go0V7+bpZVGl|(qMwp=2|RR{vHY_E{!G=;bA|@2`bfo zINM9&xPpA(NNT?>jysq@r;-wg1on>@(9lajCYtTXQBu&t>r$olPudL^KoUR>p#(~W zT6_{3F(o0qu7^#B#D-FwP=aZmYaw%Ju9L}YCESq2L*<*PHmvbT+QV)bCa}3#J*PTr zT@l_dipMY64;N|1?34(#uuWcPdrF3BC6g>kjWS4Lq_)g;=8?Ll7%A1SzNzfKCe^9- z!l=e6NlIl!J;$VaH3Du85R@>qJmQT?br6~0W>j;Iqe2*RfgH5@U(@748T;tvcMTck z21*>hV3+dO~Rj zqR@-#+*JAF^-!wKw^AIYEs{!tp?c1z=n@kePN{wf%Th&_WxXv;DCOL0P3yP%E*eNG zrM9&GD_FjX-w`2URIvqVrS+$Ezp%Gkj3qz~I`X=#Kz zW&odOJR@mjFgF%RBi#$UY~3q-j)jEreyv%L$s?!ZUyGLEv=c{jGppXzApjYwdzDG| zYRA2!dyeyo6(4prYaXg!!{;sDcw zX||lc9=sIb!?u-beGz?Q5SGJ^0(m9;ga zs;rh0Km}zFLtSMBK#4>|NGl5S%gFJCQM!`Cwy8o_Scpb4oKbP{WQw9#UI5sI;Z(P5 zBS0z4Eufk)L4X3jN4wE%)CCEy!d#}_s)}kp+uVrb4t`_=0SuY!HiD{(I@(Lc$Dyit z2LWCU#_39YL_8*vUWJr+ z=QT8PQz956lKNs?OFcH_uf#o7Tc|o%fy^kJ2&QHY zq*`+oRuyeU9;HMvWX5gDrrPIYA0w0cb6zS@&=SJ+*&jhI4OpJH5rwT`IHCVo#D|3< zzoG!kDS3|}or1{Z=TiNBYT957Ce52X)mUA!mFwMu^l&#pX9FVKi8!@?HrHYZifc;o z1=mq^OE98&FP63jVMgXiWV5V?W!IN%#~P~6CUX-+fHRTz$=sAIBvFmCiep?=oQnc7 zx(Q_Z8#ylx+%TD*In0cupmGNaiFJlYx{*^=Mkw8i0#75xkrpEfEWO-#SznTeuWG28 z%f8uT7ySb!&W$!B+}t>dCZnzV_8jV1n>sO(Tw??ndzyRIuQKu6tm#WoDmBlX@*S4V zAq%?+x}=_~x!PEgZzOGYTmF6PfJ(lzzJ;Srp3qug)||OG@4|URWmJtdvg3|?>SqIE zGkd5Z5f>YY;(~nCd%RRdjz?lbEIY_`US&yX>uRb{SrVzDR$||k?)v|w8we%A}5MNo@WbRD? zZ_&&{RojL}ZotIHn)^!kb}j3wBFGMlPT;1ArP8dYlb$c3q`l}>m|sHLv>`Sjk@Scs z@6*Up*mtJssQK7w4tTbKYq5@-M0#$CU(%+gHesZ)tBnS24#|aqz-gEOInagNhR5xD$DUQb4S#)q0UoLH;)UbSz{GeUw?QB^ z3X4}fk5$cyxOdJO$cVJ0cVc~1=D`nN!h_|Fc!_0>NDQGwH5lnp5$Y1vp$bvZ7>W_8 zDdsnOj1N{U!n`HR@Y3}2FgrVq0NF#kwHV*^7QFr0LOiz3iyLRpCR5jjetk#b_T&Wo zn5wO1Ai!+%A~-w=H=cM7;??)0A-M0HYjEQ;f5Et+vvBqFBaM{SS0UzY{Q`en{3=RA z`rx_~&PNb|X$XNsd{_`3dgZTpv9bYa6jd0e-4yaYGz^nU7LOpJrJ)RWo;MGDkG}}{ zOP|2vm31cP$=Ce~S6_E7VuHN*_jiv*(1m};)#n{cU_|MRw*=QsJ|34nu>dC?I|MI3 z@Dse-FdidXH{Hg3hecRgx#H{~ci{J%ReW-wXaAUD>n_!xh?Wg!;4 zxXijfY7QRy^UWAOD2=~cu=%r(@UwHSLXmY9{brqqTYq^4Mhwfsj#Z!If_azVir?Rc z`+xo$9COPbaqAT)BS=yyANZC;$pV?ydh%7{`_c?kl0+tTcgaQ0bpwTzHy&{+CS^q9 zp+yhk$5g9aF!e;7G-Lo)Z&-}$KX@4fQYPb<^Ug-m_RsKSz6ZBVKMJpX@iO`hJOTYF zGHgQ{es;{9oUN=YRTRtUc>aY1)s6tnX~Zrn3KsSgH(cSoSWi zId(o)`C7l`x~q9Kfb&3;4NAl7xas%c?{31qkG|u}0o?z>n>g)w-ZOkg?hH=-i0&&< zO&k6#<;BLvG&P#Grfz~UUi0$#wY8!c)tpz^+NaPSTxrkSSSH&c@u7Q2_lh)SY#^>< zfl~Y0!8*``8&)5zRCoG)*ioQOPC^oZP4BG4XA8f;l4qA<*{iFml4y})2W?oI`2r#L zdDzj$8SueP0lfq%QsS;QC39x|l4A>yy0fyySV#p|yXQ%CVzP;9vUic$|7gp0BqjF8 zC6kXrXp6_Fj0T6rA~T`|@2z?ti}Gu5$8o0_Q2NoTcX8{YC-BC`4M=90E2bZZWJ(1L zfC-I)+gpZ*-hBZ}^L8LEE`y*n9`CMv8;>tr3@X^+$l(()+s!@O7QOfxJI>XF|Bz{a z=#%$R-V}o4C(p&v(dBsflck2aDlFQ9M;E^j4;3}V>bDV8g^*Ey`STA@!#$?j>H<7Y zaNL|Q3Rle_C~c|1(;q#L+unEqD|VD)*no++Wb_fJrNpY4Omh-#s#@y{v0&NjSkDJU z9D%+-X-5)${eJVXjZ)3HlotH&!3S~Fm49K`cW}oauE(o?{Vmq5-+@p{mUU?j8B_H9%_g0YU z4}ptnVp#bGS_Yher#b$o7Cnh+Yu><>H$H?KO76C__rgKx#+}hNKVR3<4Wz zM_SWnfk(=I@$~X{P)ypjHkRY5k6*<`_FWx}bVuXsoaOj`Z$6Jt3yKjR*B5h#4o9x1 z!EC~q%9&3aGCPt9&Hw;F07*naRAQvV+;M2E+KT($U4Yf4rz$2e7p|m;{-=BJ{0as^Dm~BAm>z}=fpS|)J z7OeT2n?Y$fVaQl4q~!1WR9hA(-LPd9{`&5V_^hCu_LmW)98lR} zL+?C;e=PZ!64of3HEk}Ai=$Qm)mbHF+g*~%cO<2&me<&wa|V*0?VQU3BHFl6sF@Hh zm{bCk?8I~=(Oy)5)%L<0L4Z1t=hI^njK|$Tbp<-7`yyg6u;I()c>A^2@YbR?@YZW@ z;GNgsz`_?7V(YdNN(KqBjXLgPEXj|+`(Licl26~kT<$;r?EaV08aV(jy!SM~xxDLd zPvOSz9*63!t8w}ClhAhRtyuE)I;>o?96z419jDE_65EPAR6(bfM{Fa0OHlf~e>{oB zznM?^`^*H`CvDg?RTUUedi>RQ;ES!>ux=aI${p9?`twev7645v*eBlgsI6xYWhcq!mYS|qvGqKZG*u3+Dz)jr()sQ1sn?OXA0=S9vaq$tuL*|=IUnDtq;cB zH&2zh67oJ-g^&NX3E};z7AJ!tCpi>2$S9zYFh)|kd*Rg{MR>lawAFgJ+70 z@IunH7?U;#C&WavUe(@+M?QESH|6HwhM*)&%Sy-EjmvPuC$Hkm@HC7XI1ZDOqiBan zJ0@Rm7k#z}H?7-w)2G$U=gcm3y>O7FW=Bx5N`H>nQ# z?8a3%bMmnW^Hk#EmG9x{IX^Q%?Cme!#Pw@dVrqC0R?(L0UuRx`G5v-iYh4bRDzcw+ zxblZLAH~9|7L1ExNB}Y(7JKOHP=GHY)OAomqY{0D9txk!fk5r_wps;M{ZPAb}20Fnubo{0+al@d}I`Gmu(&nYiGhq4?+K zD%>oFl^X=WTwHqDxk!p3Fc^@5EB|vhmVWQ2$lrb)YCe6#T)*VP(~uO+%?4K*F8S>P zcx(Q(*q--)7(j2P<;-!*BlqIela4?$r6ZQ~(?&H^Rb&U3ZdgT?SIgE{_Lu5wE7kS9 z1jnZhoo0ZaesdK3+c~LB0)hFm{H?ff+-USk$i#WkwdhN=NsT@_HVxU4sTf1`aSjU0 zw{J#7|DmR$VAgxr#?Nul^m#}Ms>2iOKSpxG(X?-)mP^rE{FIWY64D|kC;?OY90xa5 zp=BSeWcNn)rwS#eOT#;-qm7FU!`KmphMfRw(b zeL3`TQ6=>0b?>5}wgO|KT9HLC{pFS~k(*P52iC1bsw)bs=@jRTQ6m@{ClvEyvoNu5 zIvT3CQy#w+e>9Qyq(Kx{#}M?&v#%1H zFe<%nsqvr==zu!%gIs%h%xFuPnxx(f#O^ zTy~wn?YI2|qx&Ur4fMtL{@>O3?r*lyo`E*5LpYyI83Tu5a7H2){_7!p$={2Aeg!u~ zV$ec6VnI3>rFu*BG{|j{S_V?)9do7OEJhV&I^Gy!HWx4IhRC?g+JTiX>-UVep`oBnGJ5m^3UEu0WUm#+Yd3ie;nF^hv1igc@8ff zc{W@$qbS_48uz}Chkw2MGG616!^IPS&S7&9>yl^b*L_U+5z%AySgUle)}JISHI!A1e8 z56NjtPpn{Vr0d00QdveJAMF^U6Y&)tJQUORDVr)}x<@1pL2C_GlvQ9}OftQ3QkR%% zTUjopw{gg%jao5nxpvS7Y78YMG2*bq(Y1PL2iS@;V^hdHT6bG5nX^=P5>BG?401Ni zCpAFJ;S4!9Y%MFpk?eycojLS|s3fnPqsS;JNo{Q;o$W}@$I=!9M_Tj=k0wOrZ!*kB zMWrJxT=KzYtSQXJ3`%ZN3BC&&OHe>2axm?+EC(udGE-fGt(25br8AcnGQ4)3dwMoV zZjjlBo<(Up+DNIMqz5LkFLu&1s6CP4qtdL8;UsA&RUDF;K{Y!{C1}gYGbU>o9guiE z9@>r4-BcKzZxDOS-b;>PQoc6@(RAF_NIRzxGLLbI$)-#r=c;lCfi6D61GoMho_aEq zq;E^<*XDXP?dp(bvAP+V=`^WpKw}eKQyIyV)h9VgicieKnPXj8wDt=Wu{(0$BRgg< zC7P!Voq|DBq4pY3VAW+R@A4twfO)d!<*L>y;OD!M=g?YhDV4n{;1@c8-mO5qlk?x5%E_1H9YI0p9{hd=PIrlATs1zWIS z^+zb8bC~5jw&HtZr{Ss5$0Lqw*y;&arT_rjjOB^#WhIpMhhS_hrRcOB-9ZWOFm6`J z{x#Ok-Bga_suM5AH5|8WEQ4u}tdtm&N|3gOM}Foi=1S)e<6nVxu-`NZdI_LNS|-(C zTT&!@Lp_t^nOF9#l0a%z34F^&vD=AtRDV)|EAII>etID#oPKKNx|c#ZCk8N@p-iU+ z2JJ@c7($A+>CN02Fl6AfL=I|{yzFNq%@rzT$If*3FMo_?+F673xLS!sner-jaDAkj z<52^+*+q}n^|XNwp`$V@abt#Ka`E}lFEb7c|MLKrzW)JUe(NLaa?BJ9?ECI@-TvIh zVLt^nTWGJ`$oSH7D5UIsYH=gQ?q3s~yix9G&g*LX^MVJhyziuOK#xeMuG|jvzZO{p z#0p))n;$6|eN=>r>g(m&asr;X?{|3V?_SOirP|zuUr@~TyQ&a35~zl;1A4;jZWSnw zu$&zYp$)&lXdZ2xJ(QSA3qkh7gZOM0IL#^Bfoe+gt#^=V`mp)XI+wlap_Ck8dMM4N zGnQUWfnciq)UK<+&>zmgq$B&lTULs9?p=cB)JVn|BV*9$&o%byp*Wp$D9}y;F@wQ$ z{6SwrMrzR$;8c|h=4n%343wm(HUnd9({!tl<8qS$Z6L$cp%o^FDVC(5mEcL9J(VnJ zsmf4&mFFACT-g;$1yD9^vWrt&x?t6yWA?&uXO`WLJvQZQvVotnbxrJ_`fMeto%!X} zX=^OX!mxg#dvwXeTG9vv-((@E0YA(JsM znNERty}kc-hj;p>G>tSar}LJa9r?%}kcktsxJkf`jW^bQg$aX(V?@8n3^@^sjX8AU z<7vh*9Yf(fQvxcY7@Blkkc3X_!OOYrSbxl?y#7ga(;8xV*(5ixKD!n%(yCvcb~Rq> zyrh5hbj`3eOLI08kXT-#<%wF}n^zZ?;q{V@sIM)=jI3-7N$ZCpR7XB(LIwuJMB;AFUXB9mt%N|i6MX8!=+oNzw9M6uLN+i=hQGisAbZYt6-K6<2 zQ_nF)aI-6j5@fU5eRI{!d(>M0%1H+_{2ff`e2~-=RMH5~MKfKulE~QXt>cfm`0fv` zgw(~Gxq!kb&AsZ{7NiUsMn_qaM=GBx(7n-dKg)*G#r_no{sc!%o`ckrF2z09+>9IU z`V)%2UXJg4_bSt8Q-MC%o@Uj$Pc$08WPbYf&%Uh1=u2jN99L5{!E}lsgYSM1k)5cu zW~GdxekqxfzT?v_xCld%!r&ng4dpt%>dNcjV%VNgI_R>?nnJtykQd%eIj@Idl$HOi#>CI&>(|vDy!vF*ze~DA4OD5X3F_#^MH~pE(9cpF0vQ z+?8MWv)8ck;aYgs*V5*MFH66dL9ZKt(;4$1D#S7dXz^GKqLO~w{FpiCyC4-ZLMbx+DfoaMf|u4e zVMe+o6{xANLaP{bCNCM_6?D2HcCG6eRjoDX^RV7Lp_D1E!;B^8zJl8n|X6eK-3g~nst2gSEhSW+DNmVwKyI_&@KwOq*NoY(c z7Z#EeB^M=N_89EZ_)R4lY=%5B83-;I1_Q5th_dQNL{Q~8+||a|o*PW_X?@}mo0~IM_}4qumuOJoMxl8StOgZ(~cZSW_M`}{XK`5tvUL_qUh4G#7a6pp{2dJQfc-Vf(}@Hi&Ca4)|1{C|w}JCTz8A5J+Ne?9Rm ztljh;rZ0LBNsr%+C3N-_78y?!^uY#{uG{np2L11Doc!*8@F^vBS~XsR%k7?W)Uq4> zQZs139g5dV^U*&l3xi2-X%o~pdua0~37-oe(w=zsTmNF;9>$loP3+q+q|scZnv2(e z6|(A`l7N<3i@b+y+U=C7nSvntX$;q#X2w3}%vp!Cu|@4}g9 z%*E6RV+nF=%sDr0I8{{7gwA!uz#ZZCX(lj(;%zDU`sbz!wh8s+3r(ZVqR8lIYBV%r z{ih#M+)0n#+`x*8%>;7(fz3rV^qd|=d+RW4+mvI~MVsz~c&-1hn z>&}^PlLA_|PI4&VP+)&jfNzMlM!syQCU^YhQ;frrdTv8c{Nb^f@>AMg@gZHeIgfUx ztI!$~PFt`&JhAs@U!A%g3hWgH2)oGJ1T_Yso?!#rjAbfD%`n;g79-K(X@ZC9rD0_1 z6f<#8Nj5?f{KX{>!XHk$2p{JbVA_yLNTD#~iw$e>a)TGY5o1Hs#GffCsfU3a2%6A*r<^Peg-J7#hm$FH_R(R zA+LGKjJJ2dC$;dB$&?yk#);!_|E)J+DjlE1wN>CBKe*m>v`rFAm91M%kFIC%$QprE zf|aCFYbS4g4pomWd%9Kv72s3+@ppg4g%_WKrlL*w$#r+)^#8jDebSQcN2sD;Rwa}{Hw5VpRrpyGw>^}g%@)wj3nENKdDah9`MUAz}k_tt_UPJr&{~!m;c(6O1d2s#W*k_ z@NZ}+rHb)-WRDq+Kc9XLj$QK=`lS!UtU%ovPRA!F2IIZFd`uWH zp8kG;%^cJAhDZpY-ZJlEs!e{*Seuy`olZMEPchchld06V2WO4I3p3AVEX#g4Zs>5+ z-E?m1%!pZz#ajw6Z(tVgm~$b{;(atedo))mW9@c>Qg(O&W| zF#mfv6zH@_NgLRMF{adu~RSX%Ng2X;4rk+P1egds$OvPufJcVCB{5i5`9!*V- z5R932Jci&GnDfKm;LSVv94X&`>rVQCDbqkz=Jc^+@ss)SxZs$R@$?%{U|<>@b^ZM| z-1X4gcwy;z23YIv*H}7|eu?nbS$!7Oa^8IRlmEPFt`(D3$^X1L;d~tQ6mWp)K|h7g z0D3(I_=MFWki=wRv)%Cc$S;^2CL3{~X59NTb%3eQAr-O$h z1uQ0lz8aAj!u2dQHZt2{I@<_{Y9$FQD`!m4eh7+-W*kpR4R@c!sLGtGiVjNR5(eOc z^r0-k_>(!G+ zI!-$1I30Fu+qP|^W7|BjosMnWwr%6Y&OOije$TjfeB=IFHO`;2R_)qVwdY!MuK1^+ zU-cInP4^C5%?7_o=Qiv7Pjwn>R=t5Num_c0RvkZJtI{6g^?635nKLctg%!MF^~RTL z;^ZkRt^4f^0rUzvtuGAj4O)STPD*63wEY-ggHqPXAVd*=`Yk!A)Oe8uNJlWPkQ>cl@@i2Nxs` z+{)*JOPP=Az^S{>n7;KNp?k?q@tVXTjvY*DPMpGAt(agpM%W8i2$#NJ+M{_#b5`Q@ zeYI_cS+HAa{-E{gZ$5yeiG^eDbyf)0iL5*6Qe$ZZhst#%X0+VY5|XzsJd+3unCyN- zAB$#+Qy6FTc~UeAO59sjoMKp-`W(Pz`)prX54GgGi2=Iq2Kj97Y<=KiWZmJcE6H*J zOR?>C3QQT>MUf=P-!r^Me}_ipg~+f>CxWq}z3@1KSeL}+HA>$qoQ|@Gcoxz8kik&X zJq_CX%wXFaI-zwBj`ogu?CS3~{72xZ>&x{hP3X{VbS_P-47&`?Xjk~;2oF_fd(29S ztCm~A)E%)H&8OAM$2|~*>r*R|w5gZijk^*~-OC&L9gt0^%}?h!_^VZ*_sGO?J!TLMvH>*ggBMQ#SD1*ZQi7`3OAV~RpD_WFCJ=C*P z@T0>Kc^8lo5w`A`$~KPW#>4vULsEGXV4;PXo)n!A1=oErgg}Rpj>-GjVr;v2-!6?= z<4k@C!1Q~LmnEkDImUWKSubL&htmKibDABrx9JHPVUj6Hzy&?T_+Y7SjNHf~Y{;iY zjyo;1Ys{fI8frhMKa1&U`l6-i!_55s;}$63skR`dytxq)fvmh=Uqaa2)2|m98O1Vd z8#h|+;^!*fCrl zs=#5f;;HKX0oT#^`1awsMoVvcLp;rZBdTjpwAuBHW!R*y%6EV2aH15c6TbS!5IGZZuakl$j$oL&TKDTnL*F+C++JI6y{;7q z%x(`ST5&VyBYqQ*^0$?|zsw+I(bALMBYZd0x%)%)hd}s^& z1C`Kumnf^Z&^~zgLBxt}0cCYZyNAR1 zG!qR1T zQNe&CoS=u*CR6PgDi>Vx_&w7s1+fECV99C*{=e)kQay!~rr8=ns>-c1p_-_(4 zwZ)?_u$i*a@LVIAzEF6$Zq#Co2tuPYEuRwaIt7R`HDkWQr7yTV(v%zD@3$CGr z7dvEz4NXB=C*C17EOO}l_Pj8DKT6i6?m^mA<^9>P6f0`k8WdfFMISer{Y^+z9z`ue zIRS|onVe*%%?iH9oKiWOtjGwtyH!pcN;Ja7YVT=de$uKB;lWPIg4c-A>N`BTd9uWi zEFP`0b)Wor0|#+fu0?TPs;;`P>{xg#W}*a{Ozg7Ak(eof3w3TOk!BiET2Io7fqIn&8Rmb9L{aNi& zNhbseyK3$2u*sqfDQ|?>DaEVxZ)#Y%V1-|_NQb*xOsw;HdEp2P%|B7_@nz9A2@H=a zOmk~mOuEM3tyE867ungBVGlZ#bTlNejZ3FU$>bZ@Fz+3w4-0UcIQ>^uPZ@7Zbz46* z$sf=o3`)M=rd`_3@mf=Byesl-ekWa*f?yrNYOe?lizu>SU!uR#Y?%1$^k~B}K2Q$* zOH>&6ME)YY%WdC4&Q zeycduOvC_1=*LoSA@60UFr~Uoomnd8SF z@@mGfPjm=jf60fFIig*6ySV@tg_*V?;M^i$^n{iFRh|&ihb8?hWauP@H@H}&uP2OU zV7ZZSb8S3_bQCXe*=l~ql9Ldo-fLc^arS$lZS4d;DN=)?Aj`nL|0S#@F&*`_amI}m z%nXu$w${IDW;j{+`ZO>7QXI1p*B z7?0|Rrl-CjoX}8B>Qx~T_0OHGK}Vz^QI-;RoHJ<+?}Rk-6S=MqWdIUC8J>EAfcm5X zq*i&6zfbl#$2~Y8XZ~vLO<~f~&j$)pHYwFTS z|83cO>y2}%F4+S~jm*j@h0d|*8Y>-7Jw_~K?>8ft657bq+K15@Cu^)}vf2^j;2|O~ zi0@9)v+faxTni}m;sdIB3Oeo=?J6{r%tw{C>}TOT4LZu1UK^EL9~T%y4_VL-fw(a6B~Ry;C7lJ;zUf z%2%3^HBYf)QAS$XiWZy-o?_l%54nFxpLjBitm4X*)_e~v5*^wO%AlR@vf?b9=23R2 zsbRy{O-9p`REGIRf9;}cGpLCqQt+TV%k=}5{89RkU1hW19FL+(Iy&ZUc13h&%KcdO zs3CrnE*j~9JE4LgWj08q`WJb&uQTHwI@F8|Gjpbbd{%ssHaoZ_2G1Xz1~cc<_{4OF zaz*_*6veqz>BppYJ5)OR4LQ+Xjn{J35wq%QZ);+6RGEv^ewOoA5G7{^HZa&B`d5lB zwwl6$iq08e$*ouTB5}NPJ!ano@TKT*RBMSb!MOfDO9crm$0?Cu4Z6~ zgu-8zNG)+F)lH6=iboX%ZxZL5DSjocnS|sZj)hu`mg_V6NKsYbuy+RwInwQVF{0Pa z6-&UjA-!MO3MldMj__b1Vv*r9WvJY`ZZTkOsnvaGoGG9{h-j>xh# z$Ffvb{7m|u6ji${gD+3WXa};&>o<&-BXI0#=Z-yv&XHnJG9s(Y(_s^f>utb5h@PjK zi?K|IoK+k}It3FJ@Oi8F%9f+Z-cZQ_<$73O)$azd)z^IW3BID4Yp_`{c(?*DTvOD{s^?@3f_m@ts!Sf|(*WJ*%B9uu zL**~s7nFv&OU2H@RV=!n2|YgN7G<$aOJ0<#oH_HhzYuN(p;GV;VY`2J{*x^QDISD_ z-|$pyJjo4`TbVpT(`)im8;MeFS~h_gO9%zje~02D&M@94ij#yDd(8$))~#n`FgP*q zWQy9}1u0tIPmFI$(5kkdl_S%|MPw%_UC{6fwO^(u(5aAS;Qb+sWsT7yYW&7G)9c~k zk}0gooN4)T`}Py&+eqNUmxKP^rN{Bt^G=Ifj(smjE;fcO|JIu406y1fSWxNaT)6}i z#x44KkZ$+h8$w6Jjw;@c7=Fy{?qvKsuOOBW9?W`>{6Z_l$=j9}ZCBVyJQ`h)j`})p zE6)4um5&6Bs3hT#QRT4HzaL^@Nw5Id!yQ+y)t0ff>~&91w+qC;Zo1!2_y+;&&h-`a ztNd{djD0!%p2DG%)Mm<(IJL}Eih$>%Dc%?trBLw-(qJ_^2Nwg^qlcsGqAbzNu@8A^ zA(yzWuf<6_f0c@GMovH%x$*EiaW-TBt2+sf1A-icNuk`CT+K4al>mh=3s`2VbHCs&e!ewSKR38Z6}dUq zd^tg$(T?!-0ru-tvBhm8Vd|uMqsM5BuC{ndWUu#~mZid0;$K4_aOR?@%c*2R$`F-} zBEF*x@WKMPnuJL?p4j>CG4Hwh%lA0QeCR?OfOEi{$kFriMpZzfO5FHs*F9wex}$pn<#5#5pLJ&_WNR@g6S+!#A&t!nM~Rutu|a1QLw zUBDBc&+5rl=KQ^ic*kX^Br>~lO0SSDzj^-a?S>FyUTZ2y`=~pYPw)Hj<+Q`Wc`8{-S9i<9yA`NCFPcQUTVGqNFK2ttLkY>v2BNWCdJEiLO~%jNxh;y+RgD}sJ19jRN1 zrIlHTd39e(7QIA7f}fL=l)fwk9^Oc&K0TNXlF7)(h~VxSdT`+>DJ!SmJX{F{!z#9T zi9>~}5H9KZyjMLI1jwX9NP=D1lYgm0-+Z`Oo1h6r&p|hpEsBdnDT=Z|Qf4(bcl+H~ zH6|>mLv(71DKy?ww2_k$fAA;IcUMy7ytunqQIz0!6g|_$vKzM$BzIM#^_q!uLP6tS zQv=znLk??4pIRIZ_WD)b#~j`(qCEB~OwoQb;tz51{UbK~z zj8=biwU_<1`&&?u3N&kv?srs8I4w9LL7w(sT?$&r)GvYOHp*amkfLtl#Gxq#sa2=1 z;A*v+rd=?E(BrP&_gN+%WWc_rg7a8r*j6{6uo`!*_`L9bU;1^se#-rO8e&( z%Ip4UhHASZk-_#`(jdT_%vF9gM`Jtc%!X&eZ!432_zUhAmt--q=IiL9#~_CtSNP%c zFbTmIy({s#wVye`ZWdrKv!4+;%+6+j9RSqdS|Ns-H2qlL;aofNrJpo4e65C;@$JbN z=^^lk28Sdk$W5&0Prto9-%tJYU|uU*73buvqnwba`nyt6S?R9)ewLN`@uIvP(%?xu zMcX*Csfr$%n3$;OY&B3uv|{(S4j^1wQd2`8uomT5n#iC?(v5+vs|ODce;NkPd%s=8 z;n{Q3dGgV_^B|5JpG^|rHFl`d{&3brH_z&SouK+NyFDv_JH$Ok#K)gUqh?Bt_)3rW zSl!vv1Y4TQh`tPpPSLtGjH{5EGu`f>iYM4@4BKR%Q?j#4ftRvZLT!XwaMzNL2S02@ z=n7e7MhL~WXf)h(#Taa5ZZ7{4xDr3SC+Ku#mZuT7(DPWvC6maVavnuZNvXK2boD)B zxH2oN9Dy5uXod52lJm+p$T{x{#|8uTa-mF>GIMTmkrZ#vET&FBJ=^yWUEqvkQ|g5T zZi!;U^bJNBk7J3Zcw9Vp81ectWx5Pq>d2Q&#g}X+KLF)189x>@QPV6;grSvy|NFdx zNgjyISZdp-vWJ_a{sqdb`cR%M-LaC0qHl|m5qbZW!l@J#%S69zqL!+?_J~vB6PDQh zZO^kBSFLLNS0WGQmNOd)E3&cx>*{Xfn&p|9-1eGtumeK>lI5fP^z!I_$iha^)*G29 zRh9k2hydEZO0fRfbc(N)crLT@{?w+O2q*GP0Ts&@d^k>N?3 zXtru|XQeKL6*z(1FsK}F1i1scKcPyVIp06^Yo%JBIN!UPsE{QsUYr8MS{T-5L3X@c zhN@z1VGq^8xUm3aQ`Ixo{)vn1aMVf?WEtx?YU*uN0kY$XD@h=0YT{&I4vIHBg|dzs zWT(bY`)5Ia%tNpG9|!QP6S-5VBvvdfTqWWUj&9yw$K#3ZwsjIRc;$b}nA(j#uQ-f4 z0Wp;>57Q;4K@KR5%8&q{=SrqWD#gCu>c{=c!rsw?mMaf*Yz=5p1)uz43Vy z#QZ}Zz6N{EQ=?ZW|53H=R-c3|fZF+))BiUpep$MDZ0jojE68HV0LubbNAUD4qtPfQ zb%OoF!6Dzk?n%a!g*`19_w*SNNHFi_Zhq;XqE9i-PgrS-WY%45xbDX(#smZnQTYy- z^i=vV^(4t6BF)}yPqBQP)gdH+4D>}p0%sKORzn}WaHgyo&YD$fU8xPdI6YN(l;JY8 zt+gv&_ih|%bOR@OdA%P3%bs=vTsh=C~f7W;A-`GSePo9{_ zzKZ6eJ&0H4{z0Hgm!FfPJMus_J#BMa9*Swrccu)=r+I z$+F%0)j4X2O|~1YJEN~ORyPZ=D&Bb&$G zIcYrEm#po|CPG!r=w6)DLCb<74X(+A*%9`in7}?kH+J4N!(7vvpdAYsgZq%^q1GvU zC{8zm_bfUt8pL+uH~)MkRu48JZV#gJ5@|nvpTE+?_G)lYq7c`Pa-19;(9Pn|@xvKN zW^+RD!00ccx?Wh5Z{zyV@a}`FQU@Dg&5!PM60}#oK3Zn7)jdu#=ay~-Ogd=;%1UTl zHcJ9SLQsWShb!gCRivf|Y`i;+=mMr~$gyTvYoe$D@_00O;$)1Z5u;OR>J`pv<>+bK zWf%ai4GtA<^}-@Bl}2d@Abh%sd+V?ha7^HW`CRyXdf8xf*g7hKkWg&Rs?R1u3ZxFk z|8wC(>K?PiURk5TZk&gaVYPqAj7y(+wVZLbG|N80!~74oN;=weqTBq}^tb)DJ0XA2 zA{O9-h6W>yK?c()O3laaKS&km#OI%3NS`FQk60mMDXB+hbK!$~z9D}hs&~Oyt+_ptlsNDAn9KCtuBOO# zaUngl#?l0x+fP_@bc!k~ax0PNRRs&Euo)KCo8)9e;K0HkHGyNxbCI)Pyp#wrxVR_0 zITgnrj&#JOyI#4q>vmCa(`tiS`!P`uG#W!=2BL22U(X8(CRCQd5F4m@yC8+1TPy}y z(cSb<)7CcT;G2eEHDzeRBP6zoV}BBmT;8^B7npttYGFS-e|)o;j)&4F>C@ces7sr=s$hxoZ8QqWp@JME-4N1iuO6dI z8;_2bXXY9(Y+5(J7f%d~hYscRLyJEYlYYXTShLvQ2qMA!_nCusvFYz^01MYr+yq)T2lCa_{&BvOb4{)j%y0CRumZ@XVvO8gK?C<&Fk|_+incfs{G%-f`5q$m6A*R z1lEhPD1HIF??kxvc6_H4)IfSbpJqnT$Gm8{B8U}YxTrf*>WcB`QH2dbPBK?s`7awmM|CL zh-^kCmCcWWJa{qnjwtJVhWFfSJD(?H^Xb%w17|Xe(*l6U$}H%k`vQ&1>W*_!rDB~7s`M!BxSq8{+%EidLs!jO^u5~f zQvEyALbfBz`+**fa#M79p7^(f;P2J6i+JzOU81JSZlT}hnu0RStDi{_3^&n%i zgY77&O+M8S#KUSR?9VrbG-vrGBztF#3(|9MZ^U8S;FpC4asqjdRg}SY#Y2DG@+exH zklR@_wZ~j#y4a?hAYJZ|BJW$QU@n#NjyG2-_6DR&u+zmcZPB6ry~3^zKd_tjVA0^} zou)H-C7lSy%3tzW&W3%qS$%z5UI-poA#yI`5;%`Q;cHfp`DQgIy1{HrTD&SR;j@R; zi0Y3X{5~mzKkr_&yB^tH2riq?Xr5kzWS3p9_^x*tK74j#@y(9~QS;PG!O~TmRYE7) zyl!xS^>;|T*8_au`Ib+pC~JqLm$i8zhep6$+Yy-OXGz6V_7%5pAI4J8ULje+UBWcK z&e2hJvt-!p=gUj>b!?r?pxBY~`k#AaOdTiGtf##(wa<{E>(rKX;ErWyWRiCkiesZ3 zS*LW~-5c#Ew5-pEfg@9Asn7{x=O?s|$1w@l&F$9COqVCB3-9Z%h8~&uhp5k#QTmUa zf+chCa-8$^w@8$Nt&ax?*PATS>+vhRUj3@|fNY*eEN}uBCS1{@EV63_4+NOkWZ?J} z{s5UuM<_t&R(Dx)qu;t6;kT~$-R>>h>{`I#qvrJHd~hSTM+1iSm5uONCCk%^R;UkX z8V|JpIf?$WE1_)bGprXRK}^N8@p2_=g~($pS;N7kZ4yaNr5!GbP5CCEfC~^ffe$X< zJ>q+y0Wv;G%afIMiFAM6vvY(NeOhw2a-P7RMyu>6VZ^Cr2Dssq|B_uwSqj%K^pkIY z+D>xyf}IABU#c-W0XBd`xN2U&8S>f|;HmP}c5xA{U;N$7;j3;>u%=6I3(oQCUf+<9 zJ^CRY3q}jtTFIJq23~>u(-SP?@!40IX1wf{V}XPtPJNCW;?aAC%&Y#>iiA`RE={MDb0rmg^6pI3e@=U(LMZ`{jomvycoH@tQi%xW4szBwbomb{OG zZ>P_aKpvQuQ#XWmac)oB_Gi}Sm%O?iVvO6uLikby%1qJ-YN#=l%wUWwukV7x`Fn*n zD{0W#pmkK}_J!v(OG}{*r|W$ufbH;_NH5Q3j6JD^?d@D^eT!RQFIbQ`N%_9{`P8yH zFBgt*j?44G!Ka(MO55*(m$!yKjJ0ltlX9XXg9&=y%|P!K}q=!kj9sqA1 zmpT@M>Otyy&R)zRB`PhKZY(qKc{y1s0nj$KiV8+jY^s|AFvp$x}nAB|=J zHNdJ*4r4+|i|;6HkkP|jJa2&b<%qUa?rdD-`-txUT_CM6)lG333k{ zo0QQl>K#Y7>B0s(m|kgI%Hc~ulIjh~nN@eWyR`$Q{N5Uu#z58R?o`!Eu$JlS*9z_Z z*mGfE?KdiI&XBurPG$F(>C?ewjDf_KQbQ7yX<2I!k0cTDb${{7%+Pfa+H|aha=O)q zD15n%mShb8+<&~AvNa3^KGCtxG>!=L&DDt4ek_HArir=QK|A>97j&zI&cQV}GxU#I z=*lP30`VzC?{A3(t+u4>3JQ;HLs88%-QERwp4>8sJ9ythe1;}IUy*EDFP%LvbZG_c z^zpo1)>i)1G^IvVV?lVJo1^^75)$hPbItR4sqm;iSosVo>%7tC^0|7X2eeP~WJla& zM@vq=U^+=7DBO;e9S`@A(ZJ^BIl~Bigo?oz)2A3k-t40<>^QKl2RYDK_E&0iUXSyB z_*-6f;Hql98m`~ez@D)Ez^ol3Trh;wOK4slzIgA==LJbEydv{BOjtJqZ(Z`ri@(rv z{h_{es?mm^p@#ZF&-;KRWNkMZ*!||ubU2@-8i{s9J(MKcWKcW-pvx?CJE9qU3nG^A zB6fWIeFAe}EcibMj4#q~#+OgLTO%PV8C2@$T}KXiRn?-K;#d4uvK^NPXRNc7$y7$s z75!ZEef^nHV>eC?Os5L~eZ`Cu*&4cjT4eM&D)^iP!E8{R^bJOcMvJLps!}q1N5mnQ^16wL3^GnB8z&qYxh)VvmAWU#wuXa|dhgfVO`J|I8wrX*hC1Qyoi+yP= zWr2hAK_-Z^_z3P6Ki$GqFn=~msSs+{@z$BR}xbV>UnnW&!Y0aQwvn@ zhr1!WDMgGOOMFg5V5l!qZE|+{> zrdRR$-mghF@00@c55n{9W?GVW<~?k>qq;UjX??D7_Gj#Q`ESxhqr+f}K&|K#rWN?T z-I0K&eZ0Nq+3gUz?{{c_R>iph58G7}9&&yl}-jln$qt)CHZ*Xf4`PY zlD>SR-=f&MH?1FIx%tpffcic(KVo`FJmUe{&h0yu0%n4eg@IC#Hi{hjCK~ZFl7AzS z*p^|gm&fU2`?=kv*_jkA$LKb9r$?V1Zxho$@YxK*iLR|51W_`Nwt`^xDk~tKQ(M(|{8FhZK?a?EQ)R^Fa|TM2m()g9BtH?>nGq zO|(h2)06w3E8EWiVl3&7&3f2(;t!&o3cIdfs@O*Qr?+uAq=Ze!m~Yp*mA&x1Z)6$u zCJ+d`yId6ZoR!auK6{f>IxuZ*5H4@8AwZ=g4Xvl#vyrvs0;zA$;$M6oXLoCzcY$+l zHUj*{gfwiYbZ|~r{eq7lxTap$oPVYP!YSG#t2>2`k((Q?LuZO-m5b#X5xO5ARjwEP zXvD+ZuGgLTyOmAiKQNf`;!W&WG>NopK5tE3whv`Jaa3F=Z8|^d$hi(+)l_r~xTa@h zr4!jms%nY4pv!2vq@;<_jA$MFZ}Si|IKMSe`}_wP{AbDd)x-Qz)x;AWrM-0LOvQ*7 z#{cv_+noxc=qAkCTa+)qjj8Ss&on(WyJx(}?jsjqf5tY_aDDR9=2ZcXNOu`@ zASd*#o^RXKs>|V=$}sZcbo_SotvtM;P5~N$!F$QMdHS3WR;vLoEn_v;Pb9~y>wbPV ztT^vXhcS+^9qZB27$fPfpu{a=9&m*ei_apUVmNZL%eJr1SSI5S@H@^u5Osd$)!eI0 z_0kLZ>fJCVDS2fnaY-otJ&?1*Y;`^|eC|+x#hkL{=o7CW)uqFak;e^lQOmxb0>7}x zP4n}Ef`xnCZ=FKa$RBsLZ#Ry+LPRw#tk_(7`X%BzOz-EBf^J4*23LmN+sbf(lUXF~ zR_)8!AK{#s!3gx-Qrb5d>CboCr|qIoft=)>#;T3L?5vrfsn4Z~r@K}~IW3I{#0<|0 z6hJwVy57-Y(%y~aL_L#Cif5m5hW*1rv&oPQ*Ztcq+sz#Qz%8gF7pIRWEKTQ)D%TP9 zMHjkH*NetH8t2Yw<4&I9q_7=7o@M}`e|@yUbl3FrMfq)vwW?>iS~<+Oo2+SmV&i1TF~{56Xqo(ZsAJS(*PAlqF{0%(l2b$D?D^m~O+(!~ z&P;gbOQuwtC>o-*fA^z6J_GRe4QF3Gx?A_c^XCkyl)+bO)^f5n)BPO}TCa*yy_2XCA%6RV13{hSkMMFcPts?PZ18`4+7ztj~C=)w_AFs~`eLQ-R^HzehFA{uP(`KScAZ;ue&8N@f z*VqjzBw)>OXG&s58MYi@jE^TU3^U86DWsZrB`+%4h-e=mDb`XFx__BzD+ozKgCQu& z5P}7uEQ&Crbl)jixbC6$r_+k&>(UoFsqc|qwOf@<^pItHb8yi_t-^@s50+)Y)!@x{WaKUy1yA7fS zp$-@4BHN<4F_)zj;b$P38Vxv~ua7&k`*Tpfh@|4ANrjG{Yi~)p#}ATB{}m3Rw5MO? z@r^}tN+*~~q2BtAAH}FtI8s-V)QnRVLqwW_Yn2iB)iQ#^U5)|J}dD0 z?fU_@vO)IaoTb*^Xj{cVY%aoU78q-kcmz|z)0+roE~K1PM{|*#UICP4N4;R}g-MtL zw}4fdPqh>vFC%qDUmCX*LY&m(psT!2PSuUyLT zHZb;!mBDfo)2uR1;B;uXg~)&9^iQ4%0ylKd9{jiG6MvYmj*$piQj!x|>m{d@6cqws zxU2wm!Xd}?mzC3gqzRVVh>ex!`IQ7=ueZBOc8PqE=~VvZh9yF#5;??QOTRvD_Gbri9_l2X1fhb(u$JY*r|XUR2#ktE?8|;`hS&wKwd6Y3hIzP^zQd zq*OjjIZgv#k&=;6LU_x=6Dk;hDe~OTu$-}whmKN|1JN8xCO_4BmDB+ONw;D%*B)GiNb)D4%QD<|?UYSKlx) zO&DZpl5e{1%zUq&MiKVhB>69z^iQTP6;%&;RNJ*>jnd`BcqSSV!qCgFYK@I?HZ6*Z@u zRFhA8>dWR`)MckF&SmDLq#k8D5f%g9eUc_h;Q>YWVGzmSKe-qJ$imbw5p3vr=RHQY zCiv2Hy_MAOQ8u@rava>Xo8e@$uuynA3S!TZz?c-CVo7bu*1Pjz4htkzk zZjT>he@UV4Cg6gOig7kS`g^M}{B+ll0SZb27)63=fU1?1?&uFV5#s`yHJO(Z0!2kP zR}^C*mY{#;>OXfENJv*W(g>-({E@u+_I6JNKp~Hv9QYhXYTI=!xiNrhs$Ww>qts+V zTE&Fp@nkpt0xOTX6~S;{!?D%Ml-}<+o)c9%k)u$+NlII~Aap;Ij}Hc~hs{r%#rpb@ zzc6o}twX-Ux$uBa`8D!;;ebIo^0Q2&aU8j@8p$uzbeeL5RALEam9XLdLfA4j(lCYE zAT(I!hcqmM`le)3z~3dKu?ozg#B;XgZxITOLjp->Vndo~VVloScdB`wpzvcy zb{+SA3zA}p)%F>-DTp!%$iF`Ip(hfjgCaD8EGDZ?P_w`u!q-A}>jJQ{`i7p)Em!{Zn^8rw(w~}3Qg=IfIrP8YHd6A|~U~uXlD-7*BUO0!m z{F2ME9GzqxMFHK_F^TxVXOO~0R5yQH4EB?c#ORNitUc`! z;qG(Nr-|)a>nEm2-{I+_NfQGbt0l%s-2v6%q;amC>FPDUMzp`1VolF*ad4DqAAE1# z*^BD%wmsVcb8hLGq&UrwNC2V(n>MX1(6-yzFNAWnf?ximCKVMGWlx*=#AP&qht5s) z0~-r#{_8M}TPOMRNGOWX$$FTyy^+EYv9DQEPp6v$rOxNQCgv%2uCc=Y9uqtJh}|$! z&X(wh6x@?X_2C@8Zv$O+BM2rpLWTJFem~>h4eum8YKc{4eUpg^ka%O#N6VIMSJFrO zU*r0f?(i$t4Vxw`%h4=F?;4lbkhq#J#{8peR6Ov=qudy->D=Y1&hMQdwo z1BRs#+0=HO$84Bn_N{9Z&IQr)B^uPPS#kwB687Ky0%E@K78@rH*(mJ>sjfWJY<) zWR!t>>p=CH>i0ac`sp11!B*Bd)I_rt25jkVGK zs9T}-W#QORw_iupn}KN3j&zg@2)(?ZRhdm>-C%V5G6o#z!7!gqFNa$#0+p})Oo{wm z3bOP+8O8poE`gIGCC6&Xm8oWYH*$)0OO0kDJtj>9{GKD>+Ev^15r^udKj+n0(M8p* z%BAz~{4$OJE8B;STpVAY(KYqtvS8B`IknCy9$W7mQjC&KTkPnteg*Mi4S4GuT3)(6 z1Exg&Bt8a})qEp03_k@~sX;iDf68tk;^~D!WjI` zLHCvO*m`MiZX^2L$7s$AG9;%XwVeQgKV$CC@VQ0m2hsx+|Kl^=+!JeOItws^DxsSd zsGn9&a$Mwva0=jMT#)?)6ISQKj3zvdL0FOgkoi6fDWva#*)os2xOOOD){iI&hRB*T z#@d5IPbG1|#8Y4U3(>8`*?qO`${-qg(Mw{c-%vIV2|>}N(5r>$XN&gWqj3xmCk=*l z`qqU4BP8~TxYQ`kzbLG_psx=`3kWt{W9BMcPfQNjp+3;}KBqrevUYaHPn%%v2l$XY}=omsQXFi8laM4cNSD!^RNS8 zAnEH2fK6S&Hv!n;*{8`ZVr z#k|_HE3k1_XPWdtshKeaE%JK8ed#U1qRysh)Mewd4tc>EFZXlfvUm2=g-V940Z-QJ zg8$s+dvENRc6?OE4UZ=Dwc@IN8Zw=!II@IAS;Eo0d=}u8F-fmE7ZZ2tDzKyU3;Ii} zQ5C5!z64Vo5;g4@nY@MaSO=zme3f+ignu;mTJ_Gt68$bb2odIq=KWy%aVWP5Gd3Y- z691JDlz#NwQHPs@z;SM^rLG!^2r7&2pM7p1jwG@yx~XMoX<_++!9Fv0mWO{fe8W%| z)KIVZ-}yzr1*hUrkGY9#YgdBvkXRuaMa2TT|HV1l(nH8d9-x3#%_0vQyN*Z>-LWg7 zl8b6zk&+8EXUWDjU+WR{wMl9@E8Rl#9}qV@InUrbqeXZ{E=)JGq=_2YBToA{&w45v zI(YoGgXgIi>?uvVxaCPL12}WA{IbpHder7MJW^!dg?smlXcK|9*Nyn8II_YwX(BZ1 zr`krFqKtyqCSF<(HIm9kfVJ>lkcdF6srWr2lzuKtVEev47GYJw0;DF4&koQVrJRbb zghm%X@lnwYCArZc9R;(LXVjEo&VLeOf8j>K`_$Wtve0~dg=b;NqQ@xw94ZX#D*B7n zJ_%#IS{N0PfLlTyx2w!^?jPbi^1w=XMz?!W`4&AGw_ED#cs8c>r=YRYonq?0mI0*3 zIbMSSsOZ^Lc$pUOx}*b37~1;veIgqGjmCE0d>QT#g`{1>~?d&%=)7PA-bWcL{wO3SrALnRV|gL$y{j8rhaHwAoED?n#_Z z=VwNK@qZ52|6C@GeuAN=zQ4bp4j9A_kXOl%UWuq`XB~?np7S4U3cnfHjgAf9Jv>mz zT8fLqJPjDIqz6FHS@CerHUE z1v0xL<3t;a%CVQ3h&_o`?@h>o|n*5z{jvq;EbhF%nG^Zvfgvb{8cD^KK_Vlf$n2T-&ARG;{ zhY&-9)v*_!p+`rI8i%y!Ctd#Gz6M2hKx`$Uqt!Wos8ASnHe?0amn%9sCjs~dUX033 zeaEg9h}o9v_%8?^=3UsuJcZv{h_gH*IFYYod2{*N%!p^nr!7l(f4@ z#Mpzt@Ik@I_F|ynyr7$=r9mtvRJ@A`tn5L4*)f)X=^r#HFSnm{!jRKZE8~VD%vOal z%-3N|sxwqPSR2M>Z>wHFYUI2=oGZ*Ayjm{5@wj_FG$6C>ShA zN=z)V>0EJt`z2L(KQ7jWfCYX|{T(5?*KHX^%l&rdc)b}7(d*KUjko#-sN2!WFnrtf zF}2T-2cXSvl~!g5nM`GG#g;2FD4QLTdB?fjM<2QpAm-ovd-nd~QP{j_IZ+g~i#;U`up;<6g~LR{tMwYMSh}+eLeS4TN>u#+>#eKu1RRiaG9#z5i+261Y z%o|-1_fgAse!Po$hLu;9=i8GL4~@&LjZ;V?7#BpvCBaJOP>(R``uFqeUDB7kfcq|e zFfXAa9n{0IbnQ}UD6H1kSl=R&)i|BXxn;~&Sy_3}U4{rZ{*l(9L>d}L0rF{ZJx-K$ z{i@;rwD(ofbtKD{B8yoTgDqyV$QE17%*@Odvn;Zh87*dJW?5`8SF(aZ+GAK z?wXI8x8`Hc$2p}^RaR2$jEvY3_0{V&U^fGGD}>1{rd~5Z*|pIdO(ydDHmNH4!0;n5 z-ZFbCH!2Te%r?_{+XQ=yiTaedUNj4c`F_Bv78hPu8s!P%fW}Y!=$_LcY()(meGrip7T4)U4fUb4Acv*JNihCuo=*UZLx< zr|=-Vdt4lT57)rq7h8XKR4qz0$+!HZ<(k>4Yemb|109{8-jta#()j+cCgzOo{0q*8 zplYI><#xpz{$tMtv#y)Ad+gyf^)N$YFXZ-zgAJ^_vqGiw0yBK*xtc%O1ggT`&FfXp z21w*ivs-1&xw%u-biP}<4Kz+`hKz%(P>_%c_!`QrkY|ZT8>&&P_!29lJ6X0S3W?FNTr%c0SCaTF!lqFO~IyRO;b{2T?v^s+kE2OX2NbB$SW#StZZ zH+7oM2cxVstwiVJ9#6ABI|4EsK<=2Yb*|iLv<@>XQeTZLER3%Fy`i zFK)V?i{E^9TT4%*VA@?K>?Z3xW>}!E;h!vyTX9)ncH7K;x`~<5Z!;Ha=~PdAGM1}S zRfXfQqpZ8ec*Q(w4I%AufX&>#Cun2OR&t{moI7-`*WXhVKbQgNb?8Kz=1K(oIA{8K zOZJ|L>l>=}ls5HR#HY6gK#1Eh{?`w+4ScYdqZtv%T$)x(k2It$zD>kdT`|g<5y~0Q z#BI(ay(Uk~8E3uHY0??s`|{k^rW;xRT3XORJu8NmtmfqhHSK`+vC1ka=Ey{%-_sWdJq(u+aSlH=aY zYE(sp+=BK(NVm!i+ADJHER? zjAR=OU1wn?(=A5=U(!-wPK;F67AYk^T9gT-p7nZ11Zfg#ju?iYt1v}F0d>KMt7fQprdU^?^>um|u|MX}ZB^K(4D(Fjn(u~w7Q?>^37V36QaGnXpr z3(h_tXx;mGF~nt~@ZIlYp9gbX7(u@A;rhHSKXauF1uxstrS_|hG*)LJ4fP~^x1TNO zUW-d1clpdZqw8V{^aUNsAyf>;Rs;lhy2a5Qoc>|&__n4cnk+)s#q4G5D?;Ln=09X| zR&mCZk9AkyO-#1xCi4a{@0&b;I9dWp+>92ta`hgW3FW>Y35r)kg^1h*G-@(`vKHWs z+56J8twu6z1m;dKFo3-p6i#8Kk+O$}$|FKa@g+3r+NE%XV=>#DQet*YXV&e#)lu&h zOM+2484?AL>~?;8r;InjAq^k+Q^R@U#Mkk+u&@`Em%A|qFzx;!Wb^NmOomxBSE9Hf z_G%;se;FwgvB5ZxV}Q+1lD*4kVl7xQ*S@8_f+Wi-%WOK&*@V=jaQ1h#g!&Rpq!e5J zyi^dokP8y#4B^LnUCZ0D3Z(_FkkF1i>S1WZTBp$8L45+a&JC5|t&&Vq5Wy8-SR zX+l(I&74@dDRwi?RJ&BXy~JJ8N7*T^@i1B$ukxRE`AQyoz*_8{CvS)LkXDtIxxR2G z&((x-)_&NkVMaiwD5Crtr(xoH&K3|UulZ%rm3(CMptmEv^UE9-cAxwKLFbB;Gb&Qr z9Z}b--U4kgt(D`C->KLt{90Aok4)V~1)oi_)R*klXO}nD zI)nvH1KATqb7Av!6CR(R^L0T$fOgZ^o#PIEo}qKz?MufGJ8EVZ-5p1zj++wRG3x zD_mH4eb#;`B(SaAb3XcdBlBq;mPSK?H(l}Ey-?MK_-HF$JW&!tF#ybS6Md{Vq0Ixl?0H|fvSb?tkGme^X4#fBjsr6PO)VrM z&RCQAMe+N!)QhtO;pHCe{*nF<%6R_jW!z9(;r%vK(d-tUd%Et=JYN1@4+ASQk_2W^2GEH>GvRKnecSa!3>F!jcJMX>tx7^kC)9al|z2~M1ri}C_$Ew5HUcsIj;2K&gf z8i6Z+RPgSHS_yYCZmS1>4WbDF*wjdZAc(ZqCbn%i2QN{KAT>3}b%R`5qamS1iyL^b zH77Pgf2j;T+0pS~@BK>atMj!KW5?`BU3t)tNCpG~+* zX4AX_vg5O^zvUK^)0OeReVfT){qopH= zw%r9?FxRn!GYco*>ua(=Bb4PLhpfuSET8^oTQ|~SJ}~#?0yf?`$iO7BAM1u1yG`9qLkK{d}~Ys(}Yv}aswRE7EB{}#e@N0BgyfP*6dBtEWKD-ve1>)lSO@^N@V-- zk;akm55mfXjNj&{7)|$=VC~mvWe0AqA|UQ zSS06>f)8ytjZ-WW(<}njP?KF_%%IV6@vt!C&T=O@SkpD_-hHxBLlFgb@`S86x;CcU(& z))M&%oB*dBM|5W_I^sT?Z3J&b0k<%JKPt`$>g%=20kcaTw44HK}=>I5HhdZR+#i- z9#m&vRtS0#7>{`qjJ+s)D~qQsa|-rC(C}oU2Gz&bAMn=2aNu>G4Un1@ayNwO??cGD z)~(vXeF;e4!|i>Ab5pt_Vm<4XoHdJ_(o+@8y|09g>bRWT6l>ueZbNRoz3UIX3EXY1 z$$~Y!B-lQ`ybPcfBG|5cyM25{Rx}ybNf?1z(4ze>aS`+u#2$+sYB&4=IKTuc-{fln z+;-@0@Lt|>Wxqlx{&hYbFJu{~AqCk>%}PSnFxK6y80!Vm9AM``n8{c57!X$Jq!`eC zDTcof7u4>j5>>>OJZ&G_la;`!8UGH~0v*w>m4u)ng#pSeP&U8S*@BlFbN0I0o3s=` z-3Py<`EITuv?{ZXQc5$_QqXZOr2pFXZdZTxo@7`G%$`p8fzyWPk(&#;l88Zsr{)r* zhfm9a$z?IjTtpMkT~>DWAfh!Pm((+P^V`>+{Wjlx+v2uw$$6=1{#!jA$_eRtTRU9# ztp`4>Rs7uqmsidD*L!y)bblz2I$o&I-~Buvky&KfvS;&4A_3yaVO&W1HI)eWCL;OCCB(4;xd^h$cC&pnU)(lgE|=-3*;mnalu+OomZQn zOlSzgmWn^g)$6iUN6VUZJv3mYMK)RMXWY&unN!MhL6#N>REL73iC@QlS}j}J z=1gx0X-NP~zaL@kvm_MecLU!MNj1A_?0%)&msNWgZJPXC1&uiVh5(BC;~$h!-a2H4 z~ZdEv+K*tf}mj3Eyi=46ALEtzyR-Yl?i9_I2^~&rZ79GdriMRA8v5dsdB4x zqjSXY1ri5|t)5{khu(zfjK1V5I~mQue7oIfW$0aq&=dK6ojwvO>!TFWS4%} z_uaAAPh{91M4j|ZjRjPoDixxMZ~FIHUDCQi} z&L^HXP*D0j*44_fLpY{QfYz98<)NK*`>aFS#fVM-gKy@)5 zlw9e2bxNK%6viSsgdeoOBKtq!*7%QJ6^*fPV9~Q^l2fJe{psiC?7p%I=fDUz#{a1^xYzDcdu>3C z`~e9IG$kzlD3e9?Qtd$$%`zX18{Zk3;4%Xh^6uFf7ojJT^Nk(G?ZOjT+Hl< zj}ZnmE%IHxc&0Z_AD*!Aw_uGLQK0fADhNS+&fxaa3h4%z%DPP&rli}4#+>NKJAh6=G!;T7r< zdz^s{z^~eCA}$_suBW7=lm$>JfMj6YT?!Gt{Z;4i?Mq8bIv+K(wKJ-arE0@Bd-QK` zZYGb8j@B8&dSjj_`z8@K1f-lo=F6s{*cFR=ljYdHOwk?(rpDYXAm5yLzDEd@K)<|= zX;)TQtyd^(f4x?*^!fAWFQ&oy6Qq=alNrn&e%-ptkM(dEn z71RzCJ(SPm%8-(k-#`bAXrR!}#|7vIv^K-8bllOu+`w>U{@6RyY=I`!T^PG>be1a!53BX zV6&>wPvJnMSE-8gT^}=c8qHF|zF@5AMQ(WEckv^BF7yz}tz5Ia2NFE5`C=8c*x8fw z?(G`F`mRDs{~*=7N~p1{{iBPby`fU6&YM&Lvd&WaL~Ipu_qd6YTY> z0cnXGd8F$o|6bF&Z7%RRb>VXb~qA^oGB%u9eyunQ4RGb!q@Fnv#GLFaAQK+hT*%b4nxyL zi##iQX8lExb~ray*6fofPnA!Csrvzj3oBhWWMQ2#bMCv1a~f)H-}|;RK2(%H{2ISmtrA(mII&UOL|q)UFp4_RtD}uO{X@;SPUB_3gZk|DMEPKK#yB~=g+!=7* zo@5Amm=d(Kft-t->(JM9^Qu?$r>j*~pae)}xwdJ&;&!Wh*#7wm0t7*mU8KF6h44BR(~?vy@amLXl=+-X#8{?hT}n|Q z3rJH$?HvK*%Y^prOHd~!Sfi+L%l9i+&h%sO2`k}6cFjdY+xD5aD#?1O`ymkNm9egS z(X)y$VoEixnLvmj!t$Eq&I9wLh`U5I>o!~%*0*OX< zFwxs1o?v7l*qvWx-y^Ai9Wp@h1Z1dq~|jz zp6vwQQoMv@pGNtw(I=v z)KzFYQJyYq5Qkk^^l&FM>SWD7VlU8w$daEOrM33I1V5Yf) zm8^lZOsURcd2_=NRE&I2LaY7@e7vuKP*JJ+zKJOv-lHX(ZkixiXvZpZ@g6BcdMjak z&q_F|S`z48~^)CUPjMKMwH(hi`Ed^mRF%ps53B5oT;bW!7aX94TCpi~=T~ zU@iKRwWEykGDy?1dDpHwm-E_#x-MOHmpNSr4r<;b^DrWT_Mr5@@af@xN4)VuEW?qt zSud{kLfD{rFepxO5oflLcq2Y52PB8%dZ+Lk?_2{$y4KZq4Wm#o9I)H&of z1c{OXG%T<~&42jjexH^;BppjmcMcT+zBk_xXPC(PS*T$mN&IMcg@9BFB`TVsP1WWy z@9Oc&mfRROO9T`>VD{-UIqmI_7H_(CkTTEaHQzsWQ`_{eAo72#jOlX~LgZS9&V`AL zrH<+QGBMof@?$CCbFZ%OGt6edbZc&u-ep2x%EV;tj}|azNY-^Ir=Re2F|QEfHL3cW zh>^1IeNRo6C(g3|j(*=@!2;K7n5F zXiZ$^U4KAc{-Q`C*fhD4e((4l2?dvl+KSH);_cN`^-%%Suh<@8M{`ws9-)Y8wwJlo zL}=LK8p6zc%oAd$Ut36qoxi}dVXfdr$T%&_Fo3vyL@2u(MjD@X0rj-$zcRbQPFM+k zHEnn*KZ{&_xr8rFhVmlZzX$@jKJ#?EXlJp{u0h{KnvfHvz=}BNM@pLW(JX1L6zI!+ zyTLBo7X9KiTQ9$S3v!{RVyJ3HOG^omtuhKn&9y9V@omO@!bU1{1LLSeC@yRNSpLRS zO^EEBg#ud6)Ux*?)GT$)Xj~gB)ti15)@P!NhacZ4%ewPvEw}y6Wfe#U~Y74e^4?UET$7)QWRufO$(J#*1#wr zGvCbSG@j(p^1TC=QKPp11rvQyN3^81T7uqXzERA6!%J<&nbN0K?yfC-5YcLOv zMMl6X+Fp%R+6;w~<-o75ZR-D2;11tjiEGV03t?_cDb=$58qece@6uw?cZRE*B2_zt z)L22cz#0NnEr86RTF*e3gI!HnMn>MhdsGdidXb0qz)C;`^2zn57EXp3ox=W92%7X0 zmepg|j;vy0Ac$n%>&1}S95Pi{C}*Nv5-9TKUxWU;g_jo+;>9|M_5fz2BN03b4@$5) zJjuhx%v|6QY?Oyl$*u_IuGL_EC{hkbzkEftQ13Xg$rt0ED)Phsi5We*JJd!;Pb(%) zATy!oYuLLed}}Y{t^TP@cPT_jr<=^9JFU5d_$)I|I>?m!HAOB*7h1V0QBAifePP{N zwDdMvH83(U1G)5W?gpH@tvhHtHl6ciyAPx?rauaM&GK2KRa@kiXn5zz3@bjE#IJI- z&OLrtQb{FgqtyJ2oCphwRvNR&H-x3>GAmrze6Qi4iC?0xpVuXL4*MHOyiD(?2gx>i z6La&By?SzYpzR`2-nO68l%qpF7rB$JPtlmt9HPF$@Fn5oKkVFeU!WHFtQaJR;dKc* zQdpt8n#OAJa3E!WWYgKm{Kja7Vqtmz^Q@%HbdGRrg5^Rf!+4J%c$n{LSmf!{LI+W7 z?{0e7$o|rx3+0H!=T3oTt>&eVNSxmwdsPKaxjl_#+1WQc(`S>3_JYDiC;sGm|5jJt z00;x6Wq44rGyW9s^W^BrVoi15Ysoag5BGK*X4+2|o)9CNdGvCC)Vp(>bzXVf99Nmt3 zpwM-%+hv*}gEObcZRks`B#4ICwti%D(Hdx`&Qbs;9xowzyP{l}fuZ}m{x8*7=BKz1 zAvZ=jJN>m^jEqO@Db-j~DjSZ{OUIaKR~tf3*shBNO%YN(93fD<4)%_v@f7KMqNLlk zM@{TbY`ouEWfmUNxPfqxmb*$kC)_Y|48u;`TZnf=yb0eWGzHH+;_j1Blzunn#2$#L zrxTd*{%UbD=MZT!KHTA~C} zP1h=%+>h{0te06fTA&UIxh|mv;#OH5T}m+RJ*ueaifHtOfv;tkY|t>U7Qa^YkB{6( zbToufE)dWsyzO$ZVIU|Y`4%r*1?(%^fQ>s3_@lRe-e}`J{GgMb7`diOuAitODp1E` zYrTDy_3hXLD!TZFpswG(q0p#N@@%DT9m&r9XJ=;v^YX|@#dbzg@*(!^>+9<4F-Jy5 z6*6iIB)VXE03P>p@EKRH2gp!v)9KtNFdJ4^z`ZV_t1t*QFy_T z3EVi3uDqnfS9=-Oe)0ZM^~L~a}}*ZkesGVeNBUk?wF zpHR}0^H;A6L5&_D01O2!G`yPF;a+X7H^tH_f@oJ0;IK2fu4&`` zvR)D`=8a{JTebmo3_sKTgkzr}Y+8x1cr5aXx%4t8fcBh0_h2Cm(3_F+*l!!&=bUeK zXqv3J=rXZBS`ahn1yl$3A<1KE`by5d<~z|rx^7zz$S&sq+tG3$6DtzSLra)L1*?ws zKEqz?J2>0p!~#l8VAq4$b-#4B7`>E#;a_`%RFb~%uUU=nDPQ>4ZM}2RFZ}Birl;4y z<x_wAVs za}$)8C*4>x_pIG?scR`^50LJ@FHZ!desI*Vzqot<7+X8YF{n2qV4fhQ{C$y8lQsKD z1pg)3CR}lkMb-^;u?bO7y}zO!>$sbrB6C#FViy%-$}U$I)t?ax>GQ*bCe6^3yVc3L zi@@V`lXFL6jSNLPkdxipR$QMgTOL=bi`2_k4unU#%u??v9Vkk}okhctYy%XZi+kv@cNpEAshw6`6)q=f`3d zL)@00(Vl3m(VJ9=(6fTRz}Se1M1DSLj`tB-;bMOn*MCz4S7k^Um=415ikP<={5zOY z7$AzQ=(LjCwAcT#j{w#MojO!xU3T@c)Ef1_-u@fu+9nbiS=Ti(RpbNwuQp`JH+F)6 zU}lL5d{p>V5F#QNr{94L9MGm(Cc1uVh<|7$N@(w22igp53afgEif#P;pWev8+htHC zbq4n665znW!Of0bwFsiMm5Sq(3>bYA891Mw?Z`1r4^4}6BO_!PX@dWs2kE-o%)Wn^q*z9^#P-J`$#$4CG=GcOLr{lf#} z`}YN$=>axV{yBsUs`iLTNZHNJxLW1P(>)Ja;BE@wKHg$d%-ga4lnGlm^T3vP^qPs{ z=ojS^DCYMb_eRqhGnST)Kn-@)Uw7g0?Obixow^X}N3bqFBWPU#GFz5Y!|CKtVz;^} zS%xsADdvmg{99+SqOKk{&>+wIVjrzdwPpw{q6JCndr_TOB(#=m7@L~zIX?+;yie1v zCj7#XhF~nZK=JS0y=qlY^Ez9waC~oF?bUe`$yN;s$F)2tbh<8W};?H3Nxq z`ZX>79GH$yKJVU4LTFVyoUHH8Y<~KeZY>*Z=U9dtTcYtsv24rP7gam4;EU3+nWgwHs4WK%c=m0KfQAo%fyMn#r`~fYH(hMGW&|gm(j1_%nBfr z-#8_LnB9nOmSv;9j5&5}r=mdE&} zO~i|iR^1;q+<}1{#2$!l>5GZ@s`(#6bp=|f>E?m1 zn1k^Zgi14Ll^GOyl>Q$|tw*k$(;FfzD~BpmWYgIn1kTSCz7s?UbDgb*=r@6DSI7yQ zDflazrM^!9Tz7!BcZ(A_Cj6hUde5M@{p*>QM!xOJC||r_{)mz9l9jNORCuyaeP$*| zZ*MPZ1Da#-qGq!jvQeu6Wb^vb9U>zjsY`m1FZVrJWGW=~9O;nAK;ot=<8L}AV+U7F9+mzWnos!1jplP8BTd`4 zAI*-6hOG3jB+>sH>(1g^g|VEI6B{HH6eBx(5oe-QzPv-Vr2D4)V)xAfjRcU9 zx!26p)N~=s!7CMs+YU%#uyJ|wDh)?|fC~oHaq;5S`1kLb0(;-TN7{{4hol1;`aUe_ zIy++_2J(A+$qC=I_x}&N6}l38*ru&+Txvv{vdSKFbiXkZb@^;a8i&*8S4E3QN}nT} zXV0(gSL&;G4c3NE&h}RyoR24(O~#2FtTR$w*ISt!xZ%^rmzU|fm>HiB=ex-zF!O|l zLeWeuq-UD}bwWD9qb?gz8{~v(K+_`r4{96#qhj$dWk+6mtyW^-E`Qr^&CR)PtUL)e zU@ol8chcpY7$Xl3lTHCK-+m$UVtiw7E|^Y#4tUi-_wePburk@Y{5Wshacs=B8XR(c z;Jrv9VMP^UVQ4!qJB}9@_g{8JznnzH{2_6+^p?YsDfi>jT;#KcQ~3$36QNEXD+=om z8w*?4FPNkXV3ND-uze)E963$NuU*_fe20HJ(m7Siil-u+jXp^QzE7LS2xdq#ZPU~K zH=W`w1R3F5f=N-30jqyoJOE`t6^uy2IKEuvpNs3usw4_*U(+BW4>7?0TyFlbc|rRm zk-qJ+H@XXU_^%4}^M?Na5B%Ti($k-d%{S=ypo}3NX&gV{p!wI1r#KZ z5)us*L{6UR-0d5mb`9OIjKu06EVI&%QqxU&n8clSt3p7)px=6ffFYqIrlh!uIA71T z;Y%;UFfo?O@7>ikH#Z*&i{N_dl~kO=-4bIftK7YMj0&YLc?5eF=|flY1ohgii72KE zUn#%4{YEz$7__(XPhh*mLCM zaE9`TzW0tWP%LC|mB@vDNwVc2i%Ohe@*DkWi)RYH>{=l&Hqr`ihoBh%4lRuCHWDE^A$nXQzmgn-NCJcczv@ zkRn8QEWK_SD+1+tt$q$^P9nYG_5=L4>lqf}T)a65cRswhNBF*q%~3)+xu{3xB@1E9 zVAOFY+WPmv8*lC)y=c)YDl#OufNy{g%m3LpEk zK6a_-ZegAZzbpH9vHSKll=>(34M$bTvyR@v31i1NAt1iL$?$JqzL+|C?6-8=5GcGL zpb*G^eEE37F)$uE{j{cHf-nS=Ad70PE5RR4Sdi2*M=wJ zfHsO##&iPj#j$aB#~U3R>mC`AJUSa9k&B;-QA+w!R#M^zSohXdE{{v=$SuWG>xVY- zwGtD#9gx0r|Fy5+#dLIa30pj$ni@V)IY}C#nvnauR$Wagu3Qn9|Hc!9NgH*O(c)>%X|@rYGylwyaVWEi#GufnnzYhFPW!pwtFJbrzB z%`-wcbt%Zp{ZYIvP=qWLScldwFPTe9OVQter`=;kgom4S2L;EW?Mq`RsSNbbFmk;tF*qN`M#NNIhUuWksNs#{_p-eMsK}&Z@@lraB%Fcz%4wvz&8oH zJfyhq9nZ`toxN(bn^kC|aRRpQ%PU8@0+|TyWWa;0@8#%2soN=(RL<}$2*5dc{<;kO z)+)Q7mCs>^ot+UI47y1Mk{*}Jm@#6978?@5cNtOLAt5CFoGtLy7T zkB@gu070(aUoPUex^@ghhxTur0?hP^ni^)No#7xN84MjgHH#dH_@MHCQ(aP?EpLeD4zZ!YLAb$$qK* zJE}Kc^f8lksrwOrrN7reBG6lddMlaow;J3>W}mFPisL>LbPihg2EMr~bww-W$uY<@ z|FG3L-%=-ms|b3aKQ#UAmKM-g`i)DDO#zu^IbT!XRCx>_{q-M_xBbA~&4xH-w@xfLn7yf+@YsdI$IeVldlvn4Oq$_ypH_Hg%cKxd2!Av zcvtHGgK^|aN$W#NOiavrIHhHc6ROgY5DuZzySz=Q_8$YWD{}c7BpIAMBs`W9@x5kM z5v9F@W)gpCs&TK_C{u6O0ctyulC(AH1s?VT6cp5&*AE@UY?LZ^P7vTDDkvpT#;5c7 Fe*wF9QOy7V literal 0 HcmV?d00001 diff --git a/clover_blocks/src/clover_blocks b/clover_blocks/src/clover_blocks new file mode 100755 index 000000000..6b7df118f --- /dev/null +++ b/clover_blocks/src/clover_blocks @@ -0,0 +1,176 @@ +#!/usr/bin/env python + +from __future__ import print_function + +import rospy +import os +import threading +import re +import uuid +from std_msgs.msg import Bool, String +from std_srvs.srv import Trigger +from clover_blocks.msg import Prompt +from clover_blocks.srv import Run, Load, Store + + +rospy.init_node('clover_blocks') + +stop = None +block = '' +published_block = None +running_lock = threading.Lock() + +running_pub = rospy.Publisher('~running', Bool, queue_size=1, latch=True) +block_pub = rospy.Publisher('~block', String, queue_size=1, latch=True) +print_pub = rospy.Publisher('~print', String, queue_size=10) +prompt_pub = rospy.Publisher('~prompt', Prompt, queue_size=10) +error_pub = rospy.Publisher('~error', String, queue_size=10) + + +running_pub.publish(False) + + +class Stop(Exception): + pass + + +def publish_block(event): + global published_block, block + if published_block != block: + block_pub.publish(block) + published_block = block + + +rospy.Timer(rospy.Duration(rospy.get_param('block_rate', 0.2)), publish_block) + + +def change_block(_block): + global block + block = _block + if stop: raise Stop + + +rospy_sleep = rospy.sleep + + +def sleep(duration): + time_start = rospy.get_time() + + if isinstance(duration, rospy.Duration): + duration = duration.to_sec() + + time_until = time_start + duration + + while not rospy.is_shutdown(): + if stop: raise Stop # check stop condition every half-second + if (time_until - rospy.get_time()) > 0.5: + print('sleep 0.5') + rospy_sleep(0.5) + else: + rospy_sleep(time_until - rospy.get_time()) + return + + +rospy.sleep = sleep +rospy.init_node = lambda *args, **kwargs: None + + +def _print(s): + rospy.loginfo(str(s)) + print_pub.publish(str(s)) + + +def _input(s): + rospy.loginfo('Input with message %s', s) + prompt_id = str(uuid.uuid4()).replace('-', '') + prompt_pub.publish(message=str(s), id=prompt_id) + return rospy.wait_for_message('~input/' + prompt_id, String, timeout=30).data; + + +def run(req): + if not running_lock.acquire(False): + return {'message': 'Already running'} + + try: + rospy.loginfo('Run program') + running_pub.publish(True) + + def program_thread(): + global stop + stop = False + g = {'rospy': rospy, + '_b': change_block, + 'print': _print, + 'raw_input': _input} + try: + exec req.code in g + except Stop: + rospy.loginfo('Program forced to stop') + except Exception as e: + rospy.logerr(str(e)) + error_pub.publish(str(e)) + + rospy.loginfo('Program terminated') + running_lock.release() + running_pub.publish(False) + change_block('') + + t = threading.Thread(target=program_thread) + t.start() + + return {'success': True} + + except Exception as e: + running_lock.release() + return {'message': str(e)} + + +def stop(req): + global stop + rospy.loginfo('Stop program') + stop = True + return {'success': True} + + +programs_path = rospy.get_param('~programs_dir', os.path.dirname(os.path.abspath(__file__)) + '/../programs') + + +def load(req): + res = {'names': [], 'programs': [], 'success': True} + try: + for currentpath, folders, files in os.walk(programs_path): + for f in files: + if not f.endswith('.xml'): + continue + filename = os.path.join(currentpath, f) + res['names'].append(os.path.relpath(filename, programs_path)) + res['programs'].append(open(filename, 'r').read()) + return res + except Exception as e: + rospy.logerr(e) + return {'names': [], 'programs': [], 'message': str(e)} + + +name_regexp = re.compile(r'^[a-zA-Z-_.]{0,20}$') + +def store(req): + if not name_regexp.match(req.name): + return {'message': 'Bad program name'} + + filename = os.path.abspath(os.path.join(programs_path, req.name)) + try: + open(filename, 'w').write(req.program) + return {'success': True, 'message': 'Stored to ' + filename} + except Exception as e: + rospy.logerr(e) + return {'names': [], 'programs': [], 'message': str(e)} + + +rospy.Service('~run', Run, run) +rospy.Service('~stop', Trigger, stop) +rospy.Service('~load', Load, load) +rospy.Service('~store', Store, store) + + +rospy.loginfo('Ready') +rospy.spin() diff --git a/clover_blocks/srv/Load.srv b/clover_blocks/srv/Load.srv new file mode 100644 index 000000000..83216015e --- /dev/null +++ b/clover_blocks/srv/Load.srv @@ -0,0 +1,5 @@ +--- +bool success +string message +string[] names +string[] programs diff --git a/clover_blocks/srv/Run.srv b/clover_blocks/srv/Run.srv new file mode 100644 index 000000000..60d6b9d06 --- /dev/null +++ b/clover_blocks/srv/Run.srv @@ -0,0 +1,4 @@ +string code # code in Python +--- +bool success +string message diff --git a/clover_blocks/srv/Store.srv b/clover_blocks/srv/Store.srv new file mode 100644 index 000000000..876a0d7a0 --- /dev/null +++ b/clover_blocks/srv/Store.srv @@ -0,0 +1,5 @@ +string name +string program +--- +bool success +string message diff --git a/clover_blocks/www/blockly/LICENSE b/clover_blocks/www/blockly/LICENSE new file mode 100755 index 000000000..d64569567 --- /dev/null +++ b/clover_blocks/www/blockly/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/clover_blocks/www/blockly/README.md b/clover_blocks/www/blockly/README.md new file mode 100755 index 000000000..4897fa84a --- /dev/null +++ b/clover_blocks/www/blockly/README.md @@ -0,0 +1,60 @@ +# Blockly [![Build Status]( https://travis-ci.org/google/blockly.svg?branch=master)](https://travis-ci.org/google/blockly) + + +Google's Blockly is a web-based, visual programming editor. Users can drag +blocks together to build programs. All code is free and open source. + +**The project page is https://developers.google.com/blockly/** + +![](https://developers.google.com/blockly/images/sample.png) + +Blockly has an active [developer forum](https://groups.google.com/forum/#!forum/blockly). Please drop by and say hello. Show us your prototypes early; collectively we have a lot of experience and can offer hints which will save you time. We actively monitor the forums and typically respond to questions within 2 working days. + +Help us focus our development efforts by telling us [what you are doing with +Blockly](https://developers.google.com/blockly/registration). The questionnaire only takes +a few minutes and will help us better support the Blockly community. + +Cross-browser Testing Platform and Open Source <3 Provided by [Sauce Labs](https://saucelabs.com) + +We support IE11 and test it using [BrowserStack](https://browserstack.com) + +Want to contribute? Great! First, read [our guidelines for contributors](https://developers.google.com/blockly/guides/modify/contributing). + +## Releases + +The next major release will be **June 26th, 2020**. + +We release by pushing the latest code to the master branch, followed by updating our [docs](https://developers.google.com/blockly) and [demo pages](https://blockly-demo.appspot.com). We typically release a new version of Blockly once a quarter (every 3 months). If there are breaking bugs, such as a crash when performing a standard action or a rendering issue that makes Blockly unusable, we will cherry-pick fixes to master between releases to fix them. The [releases page](https://github.com/google/blockly/releases) has a list of all releases. + +Releases are tagged by the release date (YYYYMMDD) with a leading '2.' and a trailing '.0' in case we ever need a major or minor version (such as [2.20190722.1](https://github.com/google/blockly/tree/2.20190722.1)). If you're using npm, you can install the ``blockly`` package on npm: +```bash +npm install blockly +``` + +### New APIs + +Once a new API is merged into master it is considered beta until the following release. We generally try to avoid changing an API after it has been merged to master, but sometimes we need to make changes after seeing how an API is used. If an API has been around for at least two releases we'll do our best to avoid breaking it. + +Unreleased APIs may change radically. Anything that is in `develop` but not `master` is subject to change without warning. + +### Branches + +There are two main branches for Blockly. + +**[master](https://github.com/google/blockly)** - This is the (mostly) stable current release of Blockly. + +**[develop](https://github.com/google/blockly/tree/develop)** - This is where most of our work happens. Pull requests should always be made against develop. This branch will generally be usable, but may be less stable than the master branch. Once something is in develop we expect it to merge to master in the next release. + +**other branches:** - Larger changes may have their own branches until they are good enough for people to try out. These will be developed separately until we think they are almost ready for release. These branches typically get merged into develop immediately after a release to allow extra time for testing. + +## Issues and Milestones + +We typically triage all bugs within 2 working days, which includes adding any appropriate labels and assigning it to a milestone. Please keep in mind, we are a small team so even feature requests that everyone agrees on may not be prioritized. + +### Milestones + +**Upcoming release** - The upcoming release milestone is for all bugs we plan on fixing before the next release. This typically has the form of `year_quarter_release` (such as `2019_q2_release`). Some bugs will be added to this release when they are triaged, others may be added closer to a release. + +**Bug Bash Backlog** - These are bugs that we're still prioritizing. They haven't been added to a specific release yet, but we'll consider them for each release depending on relative priority and available time. + +**Icebox** - These are bugs that we do not intend to spend time on. They are either too much work or minor enough that we don't expect them to ever take priority. We are still happy to accept pull requests for these bugs. diff --git a/clover_blocks/www/blockly/blockly_compressed.js b/clover_blocks/www/blockly/blockly_compressed.js new file mode 100755 index 000000000..9a7272d60 --- /dev/null +++ b/clover_blocks/www/blockly/blockly_compressed.js @@ -0,0 +1,1409 @@ +// Do not edit this file; automatically generated by gulp. + +/* eslint-disable */ +;(function(root, factory) { + if (typeof define === 'function' && define.amd) { // AMD + define([], factory); + } else if (typeof exports === 'object') { // Node.js + module.exports = factory(); + } else { // Browser + root.Blockly = factory(); + } +}(this, function() { + 'use strict';var Blockly={constants:{},LINE_MODE_MULTIPLIER:40,PAGE_MODE_MULTIPLIER:125,DRAG_RADIUS:5,FLYOUT_DRAG_RADIUS:10,SNAP_RADIUS:28};Blockly.CONNECTING_SNAP_RADIUS=Blockly.SNAP_RADIUS;Blockly.CURRENT_CONNECTION_PREFERENCE=8;Blockly.BUMP_DELAY=250;Blockly.BUMP_RANDOMNESS=10;Blockly.COLLAPSE_CHARS=30;Blockly.LONGPRESS=750;Blockly.SOUND_LIMIT=100;Blockly.DRAG_STACK=!0;Blockly.HSV_SATURATION=.45;Blockly.HSV_VALUE=.65;Blockly.SPRITE={width:96,height:124,url:"sprites.png"};Blockly.INPUT_VALUE=1; +Blockly.OUTPUT_VALUE=2;Blockly.NEXT_STATEMENT=3;Blockly.PREVIOUS_STATEMENT=4;Blockly.DUMMY_INPUT=5;Blockly.ALIGN_LEFT=-1;Blockly.ALIGN_CENTRE=0;Blockly.ALIGN_RIGHT=1;Blockly.DRAG_NONE=0;Blockly.DRAG_STICKY=1;Blockly.DRAG_BEGIN=1;Blockly.DRAG_FREE=2;Blockly.OPPOSITE_TYPE=[];Blockly.OPPOSITE_TYPE[Blockly.INPUT_VALUE]=Blockly.OUTPUT_VALUE;Blockly.OPPOSITE_TYPE[Blockly.OUTPUT_VALUE]=Blockly.INPUT_VALUE;Blockly.OPPOSITE_TYPE[Blockly.NEXT_STATEMENT]=Blockly.PREVIOUS_STATEMENT; +Blockly.OPPOSITE_TYPE[Blockly.PREVIOUS_STATEMENT]=Blockly.NEXT_STATEMENT;Blockly.TOOLBOX_AT_TOP=0;Blockly.TOOLBOX_AT_BOTTOM=1;Blockly.TOOLBOX_AT_LEFT=2;Blockly.TOOLBOX_AT_RIGHT=3;Blockly.DELETE_AREA_NONE=null;Blockly.DELETE_AREA_TRASH=1;Blockly.DELETE_AREA_TOOLBOX=2;Blockly.VARIABLE_CATEGORY_NAME="VARIABLE";Blockly.VARIABLE_DYNAMIC_CATEGORY_NAME="VARIABLE_DYNAMIC";Blockly.PROCEDURE_CATEGORY_NAME="PROCEDURE";Blockly.RENAME_VARIABLE_ID="RENAME_VARIABLE_ID";Blockly.DELETE_VARIABLE_ID="DELETE_VARIABLE_ID";Blockly.utils={};Blockly.utils.global=function(){return"object"===typeof self?self:"object"===typeof window?window:"object"===typeof global?global:this}();Blockly.Msg={};Blockly.utils.global.Blockly||(Blockly.utils.global.Blockly={});Blockly.utils.global.Blockly.Msg||(Blockly.utils.global.Blockly.Msg=Blockly.Msg);Blockly.utils.colour={}; +Blockly.utils.colour.parse=function(a){a=String(a).toLowerCase().trim();var b=Blockly.utils.colour.names[a];if(b)return b;b="0x"==a.substring(0,2)?"#"+a.substring(2):a;b="#"==b[0]?b:"#"+b;if(/^#[0-9a-f]{6}$/.test(b))return b;if(/^#[0-9a-f]{3}$/.test(b))return["#",b[1],b[1],b[2],b[2],b[3],b[3]].join("");var c=a.match(/^(?:rgb)?\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/);return c&&(a=Number(c[1]),b=Number(c[2]),c=Number(c[3]),0<=a&&256>a&&0<=b&&256>b&&0<=c&&256>c)?Blockly.utils.colour.rgbToHex(a,b, +c):null};Blockly.utils.colour.rgbToHex=function(a,b,c){b=a<<16|b<<8|c;return 16>a?"#"+(16777216|b).toString(16).substr(1):"#"+b.toString(16)};Blockly.utils.colour.hexToRgb=function(a){a=Blockly.utils.colour.parse(a);if(!a)return[0,0,0];a=parseInt(a.substr(1),16);return[a>>16,a>>8&255,a&255]}; +Blockly.utils.colour.hsvToHex=function(a,b,c){var d=0,e=0,f=0;if(0==b)f=e=d=c;else{var g=Math.floor(a/60),h=a/60-g;a=c*(1-b);var k=c*(1-b*h);b=c*(1-b*(1-h));switch(g){case 1:d=k;e=c;f=a;break;case 2:d=a;e=c;f=b;break;case 3:d=a;e=k;f=c;break;case 4:d=b;e=a;f=c;break;case 5:d=c;e=a;f=k;break;case 6:case 0:d=c,e=b,f=a}}return Blockly.utils.colour.rgbToHex(Math.floor(d),Math.floor(e),Math.floor(f))}; +Blockly.utils.colour.blend=function(a,b,c){a=Blockly.utils.colour.parse(a);if(!a)return null;b=Blockly.utils.colour.parse(b);if(!b)return null;a=Blockly.utils.colour.hexToRgb(a);b=Blockly.utils.colour.hexToRgb(b);return Blockly.utils.colour.rgbToHex(Math.round(b[0]+c*(a[0]-b[0])),Math.round(b[1]+c*(a[1]-b[1])),Math.round(b[2]+c*(a[2]-b[2])))}; +Blockly.utils.colour.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00"};Blockly.utils.Coordinate=function(a,b){this.x=a;this.y=b};Blockly.utils.Coordinate.equals=function(a,b){return a==b?!0:a&&b?a.x==b.x&&a.y==b.y:!1};Blockly.utils.Coordinate.distance=function(a,b){var c=a.x-b.x;a=a.y-b.y;return Math.sqrt(c*c+a*a)};Blockly.utils.Coordinate.magnitude=function(a){return Math.sqrt(a.x*a.x+a.y*a.y)};Blockly.utils.Coordinate.difference=function(a,b){return new Blockly.utils.Coordinate(a.x-b.x,a.y-b.y)}; +Blockly.utils.Coordinate.sum=function(a,b){return new Blockly.utils.Coordinate(a.x+b.x,a.y+b.y)};Blockly.utils.Coordinate.prototype.scale=function(a){this.x*=a;this.y*=a;return this};Blockly.utils.Coordinate.prototype.translate=function(a,b){this.x+=a;this.y+=b;return this};Blockly.utils.Rect=function(a,b,c,d){this.top=a;this.bottom=b;this.left=c;this.right=d};Blockly.utils.Rect.prototype.contains=function(a,b){return a>=this.left&&a<=this.right&&b>=this.top&&b<=this.bottom};Blockly.utils.string={};Blockly.utils.string.startsWith=function(a,b){return 0==a.lastIndexOf(b,0)};Blockly.utils.string.shortestStringLength=function(a){return a.length?a.reduce(function(a,c){return a.lengthb&&(b=c[d].length);d=-Infinity;var e=1;do{var f=d;var g=a;a=[];var h=c.length/e,k=1;for(d=0;df);return g}; +Blockly.utils.string.wrapScore_=function(a,b,c){for(var d=[0],e=[],f=0;fd&&(d=h,e=g)}return e?Blockly.utils.string.wrapMutate_(a,e,c):b};Blockly.utils.string.wrapToText_=function(a,b){for(var c=[],d=0;d=h?(e=2,f=h,(h=a.join(""))&&c.push(h),a.length=0):"{"==h?e=3:(a.push("%",h),e=0):2==e?"0"<=h&&"9">=h?f+=h:(c.push(parseInt(f,10)),g--,e=0):3==e&&(""==h?(a.splice(0,0,"%{"),g--,e=0):"}"!=h?a.push(h):(e=a.join(""),/[A-Z]\w*/i.test(e)?(h=e.toUpperCase(), +(h=Blockly.utils.string.startsWith(h,"BKY_")?h.substring(4):null)&&h in Blockly.Msg?(e=Blockly.Msg[h],"string"==typeof e?Array.prototype.push.apply(c,Blockly.utils.tokenizeInterpolation_(e,b)):b?c.push(String(e)):c.push(e)):c.push("%{"+e+"}")):c.push("%{"+e+"}"),e=a.length=0))}(h=a.join(""))&&c.push(h);b=[];for(g=a.length=0;gc;c++)b[c]=Blockly.utils.genUid.soup_.charAt(Math.random()*a);return b.join("")};Blockly.utils.genUid.soup_="!#$%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +Blockly.utils.is3dSupported=function(){if(void 0!==Blockly.utils.is3dSupported.cached_)return Blockly.utils.is3dSupported.cached_;if(!Blockly.utils.global.getComputedStyle)return!1;var a=document.createElement("p"),b="none",c={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.insertBefore(a,null);for(var d in c)if(void 0!==a.style[d]){a.style[d]="translate3d(1px,1px,1px)";b=Blockly.utils.global.getComputedStyle(a); +if(!b)return document.body.removeChild(a),!1;b=b.getPropertyValue(c[d])}document.body.removeChild(a);Blockly.utils.is3dSupported.cached_="none"!==b;return Blockly.utils.is3dSupported.cached_};Blockly.utils.runAfterPageLoad=function(a){if("object"!=typeof document)throw Error("Blockly.utils.runAfterPageLoad() requires browser document.");if("complete"==document.readyState)a();else var b=setInterval(function(){"complete"==document.readyState&&(clearInterval(b),a())},10)}; +Blockly.utils.getViewportBBox=function(){var a=Blockly.utils.style.getViewportPageOffset();return new Blockly.utils.Rect(a.y,document.documentElement.clientHeight+a.y,a.x,document.documentElement.clientWidth+a.x)};Blockly.utils.arrayRemove=function(a,b){b=a.indexOf(b);if(-1==b)return!1;a.splice(b,1);return!0}; +Blockly.utils.getDocumentScroll=function(){var a=document.documentElement,b=window;return Blockly.utils.userAgent.IE&&b.pageYOffset!=a.scrollTop?new Blockly.utils.Coordinate(a.scrollLeft,a.scrollTop):new Blockly.utils.Coordinate(b.pageXOffset||a.scrollLeft,b.pageYOffset||a.scrollTop)};Blockly.utils.getBlockTypeCounts=function(a,b){var c=Object.create(null),d=a.getDescendants(!0);b&&(a=a.getNextBlock())&&(a=d.indexOf(a),d.splice(a,d.length-a));for(a=0;b=d[a];a++)c[b.type]?c[b.type]++:c[b.type]=1;return c}; +Blockly.utils.screenToWsCoordinates=function(a,b){var c=b.x;b=b.y;var d=a.getInjectionDiv().getBoundingClientRect();c=new Blockly.utils.Coordinate(c-d.left,b-d.top);b=a.getOriginOffsetInPixels();return Blockly.utils.Coordinate.difference(c,b).scale(1/a.scale)}; +Blockly.utils.parseBlockColour=function(a){var b="string"==typeof a?Blockly.utils.replaceMessageReferences(a):a,c=Number(b);if(!isNaN(c)&&0<=c&&360>=c)return{hue:c,hex:Blockly.utils.colour.hsvToHex(c,Blockly.HSV_SATURATION,255*Blockly.HSV_VALUE)};if(c=Blockly.utils.colour.parse(b))return{hue:null,hex:c};c='Invalid colour: "'+b+'"';a!=b&&(c+=' (from "'+a+'")');throw Error(c);};Blockly.Events={};Blockly.Events.group_="";Blockly.Events.recordUndo=!0;Blockly.Events.disabled_=0;Blockly.Events.CREATE="create";Blockly.Events.BLOCK_CREATE=Blockly.Events.CREATE;Blockly.Events.DELETE="delete";Blockly.Events.BLOCK_DELETE=Blockly.Events.DELETE;Blockly.Events.CHANGE="change";Blockly.Events.BLOCK_CHANGE=Blockly.Events.CHANGE;Blockly.Events.MOVE="move";Blockly.Events.BLOCK_MOVE=Blockly.Events.MOVE;Blockly.Events.VAR_CREATE="var_create";Blockly.Events.VAR_DELETE="var_delete"; +Blockly.Events.VAR_RENAME="var_rename";Blockly.Events.UI="ui";Blockly.Events.COMMENT_CREATE="comment_create";Blockly.Events.COMMENT_DELETE="comment_delete";Blockly.Events.COMMENT_CHANGE="comment_change";Blockly.Events.COMMENT_MOVE="comment_move";Blockly.Events.FINISHED_LOADING="finished_loading";Blockly.Events.BUMP_EVENTS=[Blockly.Events.BLOCK_CREATE,Blockly.Events.BLOCK_MOVE,Blockly.Events.COMMENT_CREATE,Blockly.Events.COMMENT_MOVE];Blockly.Events.FIRE_QUEUE_=[]; +Blockly.Events.fire=function(a){Blockly.Events.isEnabled()&&(Blockly.Events.FIRE_QUEUE_.length||setTimeout(Blockly.Events.fireNow_,0),Blockly.Events.FIRE_QUEUE_.push(a))};Blockly.Events.fireNow_=function(){for(var a=Blockly.Events.filter(Blockly.Events.FIRE_QUEUE_,!0),b=Blockly.Events.FIRE_QUEUE_.length=0,c;c=a[b];b++)if(c.workspaceId){var d=Blockly.Workspace.getById(c.workspaceId);d&&d.fireChangeListener(c)}}; +Blockly.Events.filter=function(a,b){a=a.slice();b||a.reverse();for(var c=[],d=Object.create(null),e=0,f;f=a[e];e++)if(!f.isNull()){var g=[f.type,f.blockId,f.workspaceId].join(" "),h=d[g],k=h?h.event:null;if(!h)d[g]={event:f,index:e},c.push(f);else if(f.type==Blockly.Events.MOVE&&h.index==e-1)k.newParentId=f.newParentId,k.newInputName=f.newInputName,k.newCoordinate=f.newCoordinate,h.index=e;else if(f.type==Blockly.Events.CHANGE&&f.element==k.element&&f.name==k.name)k.newValue=f.newValue;else if(f.type!= +Blockly.Events.UI||"click"!=f.element||"commentOpen"!=k.element&&"mutatorOpen"!=k.element&&"warningOpen"!=k.element)d[g]={event:f,index:1},c.push(f)}a=c.filter(function(a){return!a.isNull()});b||a.reverse();for(e=1;f=a[e];e++)f.type==Blockly.Events.CHANGE&&"mutation"==f.element&&a.unshift(a.splice(e,1)[0]);return a};Blockly.Events.clearPendingUndo=function(){for(var a=0,b;b=Blockly.Events.FIRE_QUEUE_[a];a++)b.recordUndo=!1};Blockly.Events.disable=function(){Blockly.Events.disabled_++}; +Blockly.Events.enable=function(){Blockly.Events.disabled_--};Blockly.Events.isEnabled=function(){return 0==Blockly.Events.disabled_};Blockly.Events.getGroup=function(){return Blockly.Events.group_};Blockly.Events.setGroup=function(a){Blockly.Events.group_="boolean"==typeof a?a?Blockly.utils.genUid():"":a};Blockly.Events.getDescendantIds=function(a){var b=[];a=a.getDescendants(!1);for(var c=0,d;d=a[c];c++)b[c]=d.id;return b}; +Blockly.Events.fromJson=function(a,b){switch(a.type){case Blockly.Events.CREATE:var c=new Blockly.Events.Create(null);break;case Blockly.Events.DELETE:c=new Blockly.Events.Delete(null);break;case Blockly.Events.CHANGE:c=new Blockly.Events.Change(null,"","","","");break;case Blockly.Events.MOVE:c=new Blockly.Events.Move(null);break;case Blockly.Events.VAR_CREATE:c=new Blockly.Events.VarCreate(null);break;case Blockly.Events.VAR_DELETE:c=new Blockly.Events.VarDelete(null);break;case Blockly.Events.VAR_RENAME:c= +new Blockly.Events.VarRename(null,"");break;case Blockly.Events.UI:c=new Blockly.Events.Ui(null,"","","");break;case Blockly.Events.COMMENT_CREATE:c=new Blockly.Events.CommentCreate(null);break;case Blockly.Events.COMMENT_CHANGE:c=new Blockly.Events.CommentChange(null,"","");break;case Blockly.Events.COMMENT_MOVE:c=new Blockly.Events.CommentMove(null);break;case Blockly.Events.COMMENT_DELETE:c=new Blockly.Events.CommentDelete(null);break;case Blockly.Events.FINISHED_LOADING:c=new Blockly.Events.FinishedLoading(b); +break;default:throw Error("Unknown event type.");}c.fromJson(a);c.workspaceId=b.id;return c}; +Blockly.Events.disableOrphans=function(a){if((a.type==Blockly.Events.MOVE||a.type==Blockly.Events.CREATE)&&a.workspaceId){var b=Blockly.Workspace.getById(a.workspaceId);if(a=b.getBlockById(a.blockId)){var c=a.getParent();if(c&&c.isEnabled())for(b=a.getDescendants(!1),a=0;c=b[a];a++)c.setEnabled(!0);else if((a.outputConnection||a.previousConnection)&&!b.isDragging()){do a.setEnabled(!1),a=a.getNextBlock();while(a)}}}};Blockly.Events.Abstract=function(){this.workspaceId=void 0;this.group=Blockly.Events.getGroup();this.recordUndo=Blockly.Events.recordUndo};Blockly.Events.Abstract.prototype.toJson=function(){var a={type:this.type};this.group&&(a.group=this.group);return a};Blockly.Events.Abstract.prototype.fromJson=function(a){this.group=a.group};Blockly.Events.Abstract.prototype.isNull=function(){return!1};Blockly.Events.Abstract.prototype.run=function(a){}; +Blockly.Events.Abstract.prototype.getEventWorkspace_=function(){if(this.workspaceId)var a=Blockly.Workspace.getById(this.workspaceId);if(!a)throw Error("Workspace is null. Event must have been generated from real Blockly events.");return a};Blockly.utils.object={};Blockly.utils.object.inherits=function(a,b){a.superClass_=b.prototype;a.prototype=Object.create(b.prototype);a.prototype.constructor=a};Blockly.utils.object.mixin=function(a,b){for(var c in b)a[c]=b[c]};Blockly.utils.object.deepMerge=function(a,b){for(var c in b)a[c]=null!=b[c]&&"object"===typeof b[c]?Blockly.utils.object.deepMerge(a[c]||Object.create(null),b[c]):b[c];return a};Blockly.utils.object.values=function(a){return Object.values?Object.values(a):Object.keys(a).map(function(b){return a[b]})};Blockly.Events.Ui=function(a,b,c,d){Blockly.Events.Ui.superClass_.constructor.call(this);this.blockId=a?a.id:null;this.workspaceId=a?a.workspace.id:void 0;this.element=b;this.oldValue=c;this.newValue=d;this.recordUndo=!1};Blockly.utils.object.inherits(Blockly.Events.Ui,Blockly.Events.Abstract);Blockly.Events.Ui.prototype.type=Blockly.Events.UI; +Blockly.Events.Ui.prototype.toJson=function(){var a=Blockly.Events.Ui.superClass_.toJson.call(this);a.element=this.element;void 0!==this.newValue&&(a.newValue=this.newValue);this.blockId&&(a.blockId=this.blockId);return a};Blockly.Events.Ui.prototype.fromJson=function(a){Blockly.Events.Ui.superClass_.fromJson.call(this,a);this.element=a.element;this.newValue=a.newValue;this.blockId=a.blockId};Blockly.utils.dom={};Blockly.utils.dom.SVG_NS="http://www.w3.org/2000/svg";Blockly.utils.dom.HTML_NS="http://www.w3.org/1999/xhtml";Blockly.utils.dom.XLINK_NS="http://www.w3.org/1999/xlink";Blockly.utils.dom.NodeType={ELEMENT_NODE:1,TEXT_NODE:3,COMMENT_NODE:8,DOCUMENT_POSITION_CONTAINED_BY:16};Blockly.utils.dom.cacheWidths_=null;Blockly.utils.dom.cacheReference_=0;Blockly.utils.dom.canvasContext_=null; +Blockly.utils.dom.createSvgElement=function(a,b,c){a=document.createElementNS(Blockly.utils.dom.SVG_NS,a);for(var d in b)a.setAttribute(d,b[d]);document.body.runtimeStyle&&(a.runtimeStyle=a.currentStyle=a.style);c&&c.appendChild(a);return a};Blockly.utils.dom.addClass=function(a,b){var c=a.getAttribute("class")||"";if(-1!=(" "+c+" ").indexOf(" "+b+" "))return!1;c&&(c+=" ");a.setAttribute("class",c+b);return!0}; +Blockly.utils.dom.removeClass=function(a,b){var c=a.getAttribute("class");if(-1==(" "+c+" ").indexOf(" "+b+" "))return!1;c=c.split(/\s+/);for(var d=0;db||b>this.getChildCount())throw Error(Blockly.Component.Error.CHILD_INDEX_OUT_OF_BOUNDS);this.childIndex_[a.getId()]=a;if(a.getParent()==this){var d=this.children_.indexOf(a);-1>>/g,a),a=document.createElement("style"),a.id="blockly-common-style",c=document.createTextNode(c),a.appendChild(c),document.head.insertBefore(a,document.head.firstChild))}};Blockly.Css.setCursor=function(a){console.warn("Deprecated call to Blockly.Css.setCursor. See issue #981 for context")}; +Blockly.Css.CONTENT=[".blocklySvg {","background-color: #fff;","outline: none;","overflow: hidden;","position: absolute;","display: block;","}",".blocklyWidgetDiv {","display: none;","position: absolute;","z-index: 99999;","}",".injectionDiv {","height: 100%;","position: relative;","overflow: hidden;","touch-action: none;","}",".blocklyNonSelectable {","user-select: none;","-ms-user-select: none;","-webkit-user-select: none;","}",".blocklyWsDragSurface {","display: none;","position: absolute;","top: 0;", +"left: 0;","}",".blocklyWsDragSurface.blocklyOverflowVisible {","overflow: visible;","}",".blocklyBlockDragSurface {","display: none;","position: absolute;","top: 0;","left: 0;","right: 0;","bottom: 0;","overflow: visible !important;","z-index: 50;","}",".blocklyBlockCanvas.blocklyCanvasTransitioning,",".blocklyBubbleCanvas.blocklyCanvasTransitioning {","transition: transform .5s;","}",".blocklyTooltipDiv {","background-color: #ffffc7;","border: 1px solid #ddc;","box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15);", +"color: #000;","display: none;","font: 9pt sans-serif;","opacity: .9;","padding: 2px;","position: absolute;","z-index: 100000;","}",".blocklyDropDownDiv {","position: absolute;","left: 0;","top: 0;","z-index: 1000;","display: none;","border: 1px solid;","border-color: #dadce0;","background-color: #fff;","border-radius: 2px;","padding: 4px;","box-shadow: 0 0 3px 1px rgba(0,0,0,.3);","}",".blocklyDropDownDiv.blocklyFocused {","box-shadow: 0 0 6px 1px rgba(0,0,0,.3);","}",".blocklyDropDownContent {", +"max-height: 300px;","overflow: auto;","overflow-x: hidden;","}",".blocklyDropDownArrow {","position: absolute;","left: 0;","top: 0;","width: 16px;","height: 16px;","z-index: -1;","background-color: inherit;","border-color: inherit;","}",".blocklyDropDownButton {","display: inline-block;","float: left;","padding: 0;","margin: 4px;","border-radius: 4px;","outline: none;","border: 1px solid;","transition: box-shadow .1s;","cursor: pointer;","}",".blocklyArrowTop {","border-top: 1px solid;","border-left: 1px solid;", +"border-top-left-radius: 4px;","border-color: inherit;","}",".blocklyArrowBottom {","border-bottom: 1px solid;","border-right: 1px solid;","border-bottom-right-radius: 4px;","border-color: inherit;","}",".blocklyResizeSE {","cursor: se-resize;","fill: #aaa;","}",".blocklyResizeSW {","cursor: sw-resize;","fill: #aaa;","}",".blocklyResizeLine {","stroke: #515A5A;","stroke-width: 1;","}",".blocklyHighlightedConnectionPath {","fill: none;","stroke: #fc3;","stroke-width: 4px;","}",".blocklyPathLight {", +"fill: none;","stroke-linecap: round;","stroke-width: 1;","}",".blocklySelected>.blocklyPathLight {","display: none;","}",".blocklyDraggable {",'cursor: url("<<>>/handopen.cur"), auto;',"cursor: grab;","cursor: -webkit-grab;","}",".blocklyDragging {",'cursor: url("<<>>/handclosed.cur"), auto;',"cursor: grabbing;","cursor: -webkit-grabbing;","}",".blocklyDraggable:active {",'cursor: url("<<>>/handclosed.cur"), auto;',"cursor: grabbing;","cursor: -webkit-grabbing;","}",".blocklyBlockDragSurface .blocklyDraggable {", +'cursor: url("<<>>/handclosed.cur"), auto;',"cursor: grabbing;","cursor: -webkit-grabbing;","}",".blocklyDragging.blocklyDraggingDelete {",'cursor: url("<<>>/handdelete.cur"), auto;',"}",".blocklyDragging>.blocklyPath,",".blocklyDragging>.blocklyPathLight {","fill-opacity: .8;","stroke-opacity: .8;","}",".blocklyDragging>.blocklyPathDark {","display: none;","}",".blocklyDisabled>.blocklyPath {","fill-opacity: .5;","stroke-opacity: .5;","}",".blocklyDisabled>.blocklyPathLight,",".blocklyDisabled>.blocklyPathDark {", +"display: none;","}",".blocklyInsertionMarker>.blocklyPath,",".blocklyInsertionMarker>.blocklyPathLight,",".blocklyInsertionMarker>.blocklyPathDark {","fill-opacity: .2;","stroke: none;","}",".blocklyMultilineText {","font-family: monospace;","}",".blocklyNonEditableText>text {","pointer-events: none;","}",".blocklyFlyout {","position: absolute;","z-index: 20;","}",".blocklyText text {","cursor: default;","}",".blocklySvg text,",".blocklyBlockDragSurface text {","user-select: none;","-ms-user-select: none;", +"-webkit-user-select: none;","cursor: inherit;","}",".blocklyHidden {","display: none;","}",".blocklyFieldDropdown:not(.blocklyHidden) {","display: block;","}",".blocklyIconGroup {","cursor: default;","}",".blocklyIconGroup:not(:hover),",".blocklyIconGroupReadonly {","opacity: .6;","}",".blocklyIconShape {","fill: #00f;","stroke: #fff;","stroke-width: 1px;","}",".blocklyIconSymbol {","fill: #fff;","}",".blocklyMinimalBody {","margin: 0;","padding: 0;","}",".blocklyHtmlInput {","border: none;","border-radius: 4px;", +"height: 100%;","margin: 0;","outline: none;","padding: 0;","width: 100%;","text-align: center;","display: block;","box-sizing: border-box;","}",".blocklyHtmlInput::-ms-clear {","display: none;","}",".blocklyMainBackground {","stroke-width: 1;","stroke: #c6c6c6;","}",".blocklyMutatorBackground {","fill: #fff;","stroke: #ddd;","stroke-width: 1;","}",".blocklyFlyoutBackground {","fill: #ddd;","fill-opacity: .8;","}",".blocklyMainWorkspaceScrollbar {","z-index: 20;","}",".blocklyFlyoutScrollbar {","z-index: 30;", +"}",".blocklyScrollbarHorizontal,",".blocklyScrollbarVertical {","position: absolute;","outline: none;","}",".blocklyScrollbarBackground {","opacity: 0;","}",".blocklyScrollbarHandle {","fill: #ccc;","}",".blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,",".blocklyScrollbarHandle:hover {","fill: #bbb;","}",".blocklyFlyout .blocklyScrollbarHandle {","fill: #bbb;","}",".blocklyFlyout .blocklyScrollbarBackground:hover+.blocklyScrollbarHandle,",".blocklyFlyout .blocklyScrollbarHandle:hover {", +"fill: #aaa;","}",".blocklyInvalidInput {","background: #faa;","}",".blocklyVerticalMarker {","stroke-width: 3px;","fill: rgba(255,255,255,.5);","pointer-events: none;","}",".blocklyComputeCanvas {","position: absolute;","width: 0;","height: 0;","}",".blocklyNoPointerEvents {","pointer-events: none;","}",".blocklyContextMenu {","border-radius: 4px;","max-height: 100%;","}",".blocklyDropdownMenu {","border-radius: 2px;","padding: 0 !important;","}",".blocklyDropdownMenu .blocklyMenuItem {","padding-left: 28px;", +"}",".blocklyDropdownMenu .blocklyMenuItemRtl {","padding-left: 5px;","padding-right: 28px;","}",".blocklyWidgetDiv .blocklyMenu {","background: #fff;","border: 1px solid transparent;","box-shadow: 0 0 3px 1px rgba(0,0,0,.3);","font: normal 13px Arial, sans-serif;","margin: 0;","outline: none;","padding: 4px 0;","position: absolute;","overflow-y: auto;","overflow-x: hidden;","max-height: 100%;","z-index: 20000;","}",".blocklyWidgetDiv .blocklyMenu.blocklyFocused {","box-shadow: 0 0 6px 1px rgba(0,0,0,.3);", +"}",".blocklyDropDownDiv .blocklyMenu {",'font: normal 13px "Helvetica Neue", Helvetica, sans-serif;',"outline: none;","z-index: 20000;","}",".blocklyMenuItem {","border: none;","color: #000;","cursor: pointer;","list-style: none;","margin: 0;","min-width: 7em;","padding: 6px 15px;","white-space: nowrap;","}",".blocklyMenuItemDisabled {","color: #ccc;","cursor: inherit;","}",".blocklyMenuItemHighlight {","background-color: rgba(0,0,0,.1);","}",".blocklyMenuItemCheckbox {","height: 16px;","position: absolute;", +"width: 16px;","}",".blocklyMenuItemSelected .blocklyMenuItemCheckbox {","background: url(<<>>/sprites.png) no-repeat -48px -16px;","float: left;","margin-left: -24px;","position: static;","}",".blocklyMenuItemRtl .blocklyMenuItemCheckbox {","float: right;","margin-right: -24px;","}"];Blockly.utils.math={};Blockly.utils.math.toRadians=function(a){return a*Math.PI/180};Blockly.utils.math.toDegrees=function(a){return 180*a/Math.PI};Blockly.utils.math.clamp=function(a,b,c){if(ce.top?Blockly.DropDownDiv.getPositionAboveMetrics_(c,d,e,f):b+f.heightdocument.documentElement.clientTop?Blockly.DropDownDiv.getPositionAboveMetrics_(c, +d,e,f):Blockly.DropDownDiv.getPositionTopOfPageMetrics_(a,e,f)};Blockly.DropDownDiv.getPositionBelowMetrics_=function(a,b,c,d){a=Blockly.DropDownDiv.getPositionX(a,c.left,c.right,d.width);return{initialX:a.divX,initialY:b,finalX:a.divX,finalY:b+Blockly.DropDownDiv.PADDING_Y,arrowX:a.arrowX,arrowY:-(Blockly.DropDownDiv.ARROW_SIZE/2+Blockly.DropDownDiv.BORDER_SIZE),arrowAtTop:!0,arrowVisible:!0}}; +Blockly.DropDownDiv.getPositionAboveMetrics_=function(a,b,c,d){a=Blockly.DropDownDiv.getPositionX(a,c.left,c.right,d.width);return{initialX:a.divX,initialY:b-d.height,finalX:a.divX,finalY:b-d.height-Blockly.DropDownDiv.PADDING_Y,arrowX:a.arrowX,arrowY:d.height-2*Blockly.DropDownDiv.BORDER_SIZE-Blockly.DropDownDiv.ARROW_SIZE/2,arrowAtTop:!1,arrowVisible:!0}}; +Blockly.DropDownDiv.getPositionTopOfPageMetrics_=function(a,b,c){a=Blockly.DropDownDiv.getPositionX(a,b.left,b.right,c.width);return{initialX:a.divX,initialY:0,finalX:a.divX,finalY:0,arrowAtTop:null,arrowX:null,arrowY:null,arrowVisible:!1}}; +Blockly.DropDownDiv.getPositionX=function(a,b,c,d){var e=a;a=Blockly.utils.math.clamp(b,a-d/2,c-d);e-=Blockly.DropDownDiv.ARROW_SIZE/2;b=Blockly.DropDownDiv.ARROW_HORIZONTAL_PADDING;d=Blockly.utils.math.clamp(b,e-a,d-b-Blockly.DropDownDiv.ARROW_SIZE);return{arrowX:d,divX:a}};Blockly.DropDownDiv.isVisible=function(){return!!Blockly.DropDownDiv.owner_}; +Blockly.DropDownDiv.hideIfOwner=function(a,b){return Blockly.DropDownDiv.owner_===a?(b?Blockly.DropDownDiv.hideWithoutAnimation():Blockly.DropDownDiv.hide(),!0):!1}; +Blockly.DropDownDiv.hide=function(){var a=Blockly.DropDownDiv.DIV_;a.style.transform="translate(0, 0)";a.style.opacity=0;Blockly.DropDownDiv.animateOutTimer_=setTimeout(function(){Blockly.DropDownDiv.hideWithoutAnimation()},1E3*Blockly.DropDownDiv.ANIMATION_TIME);Blockly.DropDownDiv.onHide_&&(Blockly.DropDownDiv.onHide_(),Blockly.DropDownDiv.onHide_=null)}; +Blockly.DropDownDiv.hideWithoutAnimation=function(){if(Blockly.DropDownDiv.isVisible()){Blockly.DropDownDiv.animateOutTimer_&&clearTimeout(Blockly.DropDownDiv.animateOutTimer_);var a=Blockly.DropDownDiv.DIV_;a.style.transform="";a.style.left="";a.style.top="";a.style.opacity=0;a.style.display="none";a.style.backgroundColor="";a.style.borderColor="";Blockly.DropDownDiv.onHide_&&(Blockly.DropDownDiv.onHide_(),Blockly.DropDownDiv.onHide_=null);Blockly.DropDownDiv.clearContent();Blockly.DropDownDiv.owner_= +null;Blockly.DropDownDiv.rendererClassName_&&(Blockly.utils.dom.removeClass(a,Blockly.DropDownDiv.rendererClassName_),Blockly.DropDownDiv.rendererClassName_="");Blockly.DropDownDiv.themeClassName_&&(Blockly.utils.dom.removeClass(a,Blockly.DropDownDiv.themeClassName_),Blockly.DropDownDiv.themeClassName_="");Blockly.getMainWorkspace().markFocused()}}; +Blockly.DropDownDiv.positionInternal_=function(a,b,c,d){a=Blockly.DropDownDiv.getPositionMetrics_(a,b,c,d);a.arrowVisible?(Blockly.DropDownDiv.arrow_.style.display="",Blockly.DropDownDiv.arrow_.style.transform="translate("+a.arrowX+"px,"+a.arrowY+"px) rotate(45deg)",Blockly.DropDownDiv.arrow_.setAttribute("class",a.arrowAtTop?"blocklyDropDownArrow blocklyArrowTop":"blocklyDropDownArrow blocklyArrowBottom")):Blockly.DropDownDiv.arrow_.style.display="none";b=Math.floor(a.initialX);c=Math.floor(a.initialY); +d=Math.floor(a.finalX);var e=Math.floor(a.finalY),f=Blockly.DropDownDiv.DIV_;f.style.left=b+"px";f.style.top=c+"px";f.style.display="block";f.style.opacity=1;f.style.transform="translate("+(d-b)+"px,"+(e-c)+"px)";return!!a.arrowAtTop}; +Blockly.DropDownDiv.repositionForWindowResize=function(){if(Blockly.DropDownDiv.owner_){var a=Blockly.DropDownDiv.owner_,b=a.getSourceBlock();a=Blockly.DropDownDiv.positionToField_?Blockly.DropDownDiv.getScaledBboxOfField_(a):Blockly.DropDownDiv.getScaledBboxOfBlock_(b);b=a.left+(a.right-a.left)/2;Blockly.DropDownDiv.positionInternal_(b,a.bottom,b,a.top)}else Blockly.DropDownDiv.hide()};Blockly.Grid=function(a,b){this.gridPattern_=a;this.spacing_=b.spacing;this.length_=b.length;this.line2_=(this.line1_=a.firstChild)&&this.line1_.nextSibling;this.snapToGrid_=b.snap};Blockly.Grid.prototype.scale_=1;Blockly.Grid.prototype.dispose=function(){this.gridPattern_=null};Blockly.Grid.prototype.shouldSnap=function(){return this.snapToGrid_};Blockly.Grid.prototype.getSpacing=function(){return this.spacing_};Blockly.Grid.prototype.getPatternId=function(){return this.gridPattern_.id}; +Blockly.Grid.prototype.update=function(a){this.scale_=a;var b=this.spacing_*a||100;this.gridPattern_.setAttribute("width",b);this.gridPattern_.setAttribute("height",b);b=Math.floor(this.spacing_/2)+.5;var c=b-this.length_/2,d=b+this.length_/2;b*=a;c*=a;d*=a;this.setLineAttributes_(this.line1_,a,c,d,b,b);this.setLineAttributes_(this.line2_,a,b,b,c,d)}; +Blockly.Grid.prototype.setLineAttributes_=function(a,b,c,d,e,f){a&&(a.setAttribute("stroke-width",b),a.setAttribute("x1",c),a.setAttribute("y1",e),a.setAttribute("x2",d),a.setAttribute("y2",f))};Blockly.Grid.prototype.moveTo=function(a,b){this.gridPattern_.setAttribute("x",a);this.gridPattern_.setAttribute("y",b);(Blockly.utils.userAgent.IE||Blockly.utils.userAgent.EDGE)&&this.update(this.scale_)}; +Blockly.Grid.createDom=function(a,b,c){a=Blockly.utils.dom.createSvgElement("pattern",{id:"blocklyGridPattern"+a,patternUnits:"userSpaceOnUse"},c);0b.indexOf(d))throw Error(d+" is not a valid modifier key.");};Blockly.user.keyMap.createSerializedKey=function(a,b){var c="",d=Blockly.utils.object.values(Blockly.user.keyMap.modifierKeys);Blockly.user.keyMap.checkModifiers_(b,d);for(var e=0,f;f=d[e];e++)-1");b.domToMutation(d)}Blockly.Events.fire(new Blockly.Events.Change(b,"mutation",null,c,a));break;default:console.warn("Unknown change type: "+this.element)}else console.warn("Can't change non-existent block: "+this.blockId)}; +Blockly.Events.Create=function(a){a&&(Blockly.Events.Create.superClass_.constructor.call(this,a),this.xml=a.workspace.rendered?Blockly.Xml.blockToDomWithXY(a):Blockly.Xml.blockToDom(a),this.ids=Blockly.Events.getDescendantIds(a))};Blockly.utils.object.inherits(Blockly.Events.Create,Blockly.Events.BlockBase);Blockly.Events.BlockCreate=Blockly.Events.Create;Blockly.Events.Create.prototype.type=Blockly.Events.CREATE; +Blockly.Events.Create.prototype.toJson=function(){var a=Blockly.Events.Create.superClass_.toJson.call(this);a.xml=Blockly.Xml.domToText(this.xml);a.ids=this.ids;return a};Blockly.Events.Create.prototype.fromJson=function(a){Blockly.Events.Create.superClass_.fromJson.call(this,a);this.xml=Blockly.Xml.textToDom(a.xml);this.ids=a.ids}; +Blockly.Events.Create.prototype.run=function(a){var b=this.getEventWorkspace_();if(a)a=Blockly.utils.xml.createElement("xml"),a.appendChild(this.xml),Blockly.Xml.domToWorkspace(a,b);else{a=0;for(var c;c=this.ids[a];a++){var d=b.getBlockById(c);d?d.dispose(!1):c==this.blockId&&console.warn("Can't uncreate non-existent block: "+c)}}}; +Blockly.Events.Delete=function(a){if(a){if(a.getParent())throw Error("Connected blocks cannot be deleted.");Blockly.Events.Delete.superClass_.constructor.call(this,a);this.oldXml=a.workspace.rendered?Blockly.Xml.blockToDomWithXY(a):Blockly.Xml.blockToDom(a);this.ids=Blockly.Events.getDescendantIds(a)}};Blockly.utils.object.inherits(Blockly.Events.Delete,Blockly.Events.BlockBase);Blockly.Events.BlockDelete=Blockly.Events.Delete;Blockly.Events.Delete.prototype.type=Blockly.Events.DELETE; +Blockly.Events.Delete.prototype.toJson=function(){var a=Blockly.Events.Delete.superClass_.toJson.call(this);a.ids=this.ids;return a};Blockly.Events.Delete.prototype.fromJson=function(a){Blockly.Events.Delete.superClass_.fromJson.call(this,a);this.ids=a.ids}; +Blockly.Events.Delete.prototype.run=function(a){var b=this.getEventWorkspace_();if(a){a=0;for(var c;c=this.ids[a];a++){var d=b.getBlockById(c);d?d.dispose(!1):c==this.blockId&&console.warn("Can't delete non-existent block: "+c)}}else a=Blockly.utils.xml.createElement("xml"),a.appendChild(this.oldXml),Blockly.Xml.domToWorkspace(a,b)}; +Blockly.Events.Move=function(a){a&&(Blockly.Events.Move.superClass_.constructor.call(this,a),a=this.currentLocation_(),this.oldParentId=a.parentId,this.oldInputName=a.inputName,this.oldCoordinate=a.coordinate)};Blockly.utils.object.inherits(Blockly.Events.Move,Blockly.Events.BlockBase);Blockly.Events.BlockMove=Blockly.Events.Move;Blockly.Events.Move.prototype.type=Blockly.Events.MOVE; +Blockly.Events.Move.prototype.toJson=function(){var a=Blockly.Events.Move.superClass_.toJson.call(this);this.newParentId&&(a.newParentId=this.newParentId);this.newInputName&&(a.newInputName=this.newInputName);this.newCoordinate&&(a.newCoordinate=Math.round(this.newCoordinate.x)+","+Math.round(this.newCoordinate.y));return a}; +Blockly.Events.Move.prototype.fromJson=function(a){Blockly.Events.Move.superClass_.fromJson.call(this,a);this.newParentId=a.newParentId;this.newInputName=a.newInputName;a.newCoordinate&&(a=a.newCoordinate.split(","),this.newCoordinate=new Blockly.utils.Coordinate(Number(a[0]),Number(a[1])))};Blockly.Events.Move.prototype.recordNew=function(){var a=this.currentLocation_();this.newParentId=a.parentId;this.newInputName=a.inputName;this.newCoordinate=a.coordinate}; +Blockly.Events.Move.prototype.currentLocation_=function(){var a=this.getEventWorkspace_().getBlockById(this.blockId),b={},c=a.getParent();if(c){if(b.parentId=c.id,a=c.getInputWithBlock(a))b.inputName=a.name}else b.coordinate=a.getRelativeToSurfaceXY();return b};Blockly.Events.Move.prototype.isNull=function(){return this.oldParentId==this.newParentId&&this.oldInputName==this.newInputName&&Blockly.utils.Coordinate.equals(this.oldCoordinate,this.newCoordinate)}; +Blockly.Events.Move.prototype.run=function(a){var b=this.getEventWorkspace_(),c=b.getBlockById(this.blockId);if(c){var d=a?this.newParentId:this.oldParentId,e=a?this.newInputName:this.oldInputName;a=a?this.newCoordinate:this.oldCoordinate;var f=null;if(d&&(f=b.getBlockById(d),!f)){console.warn("Can't connect to non-existent block: "+d);return}c.getParent()&&c.unplug();if(a)e=c.getRelativeToSurfaceXY(),c.moveBy(a.x-e.x,a.y-e.y);else{c=c.outputConnection||c.previousConnection;if(e){if(b=f.getInput(e))var g= +b.connection}else c.type==Blockly.PREVIOUS_STATEMENT&&(g=f.nextConnection);g?c.connect(g):console.warn("Can't connect to non-existent input: "+e)}}else console.warn("Can't move non-existent block: "+this.blockId)};Blockly.Events.FinishedLoading=function(a){this.workspaceId=a.id;this.group=Blockly.Events.getGroup();this.recordUndo=!1};Blockly.utils.object.inherits(Blockly.Events.FinishedLoading,Blockly.Events.Ui);Blockly.Events.FinishedLoading.prototype.type=Blockly.Events.FINISHED_LOADING;Blockly.Events.FinishedLoading.prototype.toJson=function(){var a={type:this.type};this.group&&(a.group=this.group);this.workspaceId&&(a.workspaceId=this.workspaceId);return a}; +Blockly.Events.FinishedLoading.prototype.fromJson=function(a){this.workspaceId=a.workspaceId;this.group=a.group};Blockly.Events.VarBase=function(a){Blockly.Events.VarBase.superClass_.constructor.call(this);this.varId=a.getId();this.workspaceId=a.workspace.id};Blockly.utils.object.inherits(Blockly.Events.VarBase,Blockly.Events.Abstract);Blockly.Events.VarBase.prototype.toJson=function(){var a=Blockly.Events.VarBase.superClass_.toJson.call(this);a.varId=this.varId;return a};Blockly.Events.VarBase.prototype.fromJson=function(a){Blockly.Events.VarBase.superClass_.toJson.call(this);this.varId=a.varId}; +Blockly.Events.VarCreate=function(a){a&&(Blockly.Events.VarCreate.superClass_.constructor.call(this,a),this.varType=a.type,this.varName=a.name)};Blockly.utils.object.inherits(Blockly.Events.VarCreate,Blockly.Events.VarBase);Blockly.Events.VarCreate.prototype.type=Blockly.Events.VAR_CREATE;Blockly.Events.VarCreate.prototype.toJson=function(){var a=Blockly.Events.VarCreate.superClass_.toJson.call(this);a.varType=this.varType;a.varName=this.varName;return a}; +Blockly.Events.VarCreate.prototype.fromJson=function(a){Blockly.Events.VarCreate.superClass_.fromJson.call(this,a);this.varType=a.varType;this.varName=a.varName};Blockly.Events.VarCreate.prototype.run=function(a){var b=this.getEventWorkspace_();a?b.createVariable(this.varName,this.varType,this.varId):b.deleteVariableById(this.varId)};Blockly.Events.VarDelete=function(a){a&&(Blockly.Events.VarDelete.superClass_.constructor.call(this,a),this.varType=a.type,this.varName=a.name)}; +Blockly.utils.object.inherits(Blockly.Events.VarDelete,Blockly.Events.VarBase);Blockly.Events.VarDelete.prototype.type=Blockly.Events.VAR_DELETE;Blockly.Events.VarDelete.prototype.toJson=function(){var a=Blockly.Events.VarDelete.superClass_.toJson.call(this);a.varType=this.varType;a.varName=this.varName;return a};Blockly.Events.VarDelete.prototype.fromJson=function(a){Blockly.Events.VarDelete.superClass_.fromJson.call(this,a);this.varType=a.varType;this.varName=a.varName}; +Blockly.Events.VarDelete.prototype.run=function(a){var b=this.getEventWorkspace_();a?b.deleteVariableById(this.varId):b.createVariable(this.varName,this.varType,this.varId)};Blockly.Events.VarRename=function(a,b){a&&(Blockly.Events.VarRename.superClass_.constructor.call(this,a),this.oldName=a.name,this.newName=b)};Blockly.utils.object.inherits(Blockly.Events.VarRename,Blockly.Events.VarBase);Blockly.Events.VarRename.prototype.type=Blockly.Events.VAR_RENAME; +Blockly.Events.VarRename.prototype.toJson=function(){var a=Blockly.Events.VarRename.superClass_.toJson.call(this);a.oldName=this.oldName;a.newName=this.newName;return a};Blockly.Events.VarRename.prototype.fromJson=function(a){Blockly.Events.VarRename.superClass_.fromJson.call(this,a);this.oldName=a.oldName;this.newName=a.newName};Blockly.Events.VarRename.prototype.run=function(a){var b=this.getEventWorkspace_();a?b.renameVariableById(this.varId,this.newName):b.renameVariableById(this.varId,this.oldName)};Blockly.Xml={};Blockly.Xml.workspaceToDom=function(a,b){var c=Blockly.utils.xml.createElement("xml"),d=Blockly.Xml.variablesToDom(Blockly.Variables.allUsedVarModels(a));d.hasChildNodes()&&c.appendChild(d);var e=a.getTopComments(!0);d=0;for(var f;f=e[d];d++)c.appendChild(f.toXmlWithXY(b));a=a.getTopBlocks(!0);for(d=0;e=a[d];d++)c.appendChild(Blockly.Xml.blockToDomWithXY(e,b));return c}; +Blockly.Xml.variablesToDom=function(a){for(var b=Blockly.utils.xml.createElement("variables"),c=0,d;d=a[c];c++){var e=Blockly.utils.xml.createElement("variable");e.appendChild(Blockly.utils.xml.createTextNode(d.name));d.type&&e.setAttribute("type",d.type);e.id=d.getId();b.appendChild(e)}return b}; +Blockly.Xml.blockToDomWithXY=function(a,b){if(a.isInsertionMarker()&&(a=a.getChildren(!1)[0],!a))return new DocumentFragment;var c;a.workspace.RTL&&(c=a.workspace.getWidth());b=Blockly.Xml.blockToDom(a,b);var d=a.getRelativeToSurfaceXY();b.setAttribute("x",Math.round(a.workspace.RTL?c-d.x:d.x));b.setAttribute("y",Math.round(d.y));return b};Blockly.Xml.fieldToDom_=function(a){if(a.isSerializable()){var b=Blockly.utils.xml.createElement("field");b.setAttribute("name",a.name||"");return a.toXml(b)}return null}; +Blockly.Xml.allFieldsToDom_=function(a,b){for(var c=0,d;d=a.inputList[c];c++)for(var e=0,f;f=d.fieldRow[e];e++)(f=Blockly.Xml.fieldToDom_(f))&&b.appendChild(f)}; +Blockly.Xml.blockToDom=function(a,b){if(a.isInsertionMarker())return(a=a.getChildren(!1)[0])?Blockly.Xml.blockToDom(a):new DocumentFragment;var c=Blockly.utils.xml.createElement(a.isShadow()?"shadow":"block");c.setAttribute("type",a.type);b||c.setAttribute("id",a.id);if(a.mutationToDom){var d=a.mutationToDom();d&&(d.hasChildNodes()||d.hasAttributes())&&c.appendChild(d)}Blockly.Xml.allFieldsToDom_(a,c);if(d=a.getCommentText()){var e=a.commentModel.size,f=a.commentModel.pinned,g=Blockly.utils.xml.createElement("comment"); +g.appendChild(Blockly.utils.xml.createTextNode(d));g.setAttribute("pinned",f);g.setAttribute("h",e.height);g.setAttribute("w",e.width);c.appendChild(g)}a.data&&(d=Blockly.utils.xml.createElement("data"),d.appendChild(Blockly.utils.xml.createTextNode(a.data)),c.appendChild(d));for(d=0;e=a.inputList[d];d++){var h;f=!0;if(e.type!=Blockly.DUMMY_INPUT){var k=e.connection.targetBlock();e.type==Blockly.INPUT_VALUE?h=Blockly.utils.xml.createElement("value"):e.type==Blockly.NEXT_STATEMENT&&(h=Blockly.utils.xml.createElement("statement")); +g=e.connection.getShadowDom();!g||k&&k.isShadow()||h.appendChild(Blockly.Xml.cloneShadow_(g,b));k&&(g=Blockly.Xml.blockToDom(k,b),g.nodeType==Blockly.utils.dom.NodeType.ELEMENT_NODE&&(h.appendChild(g),f=!1));h.setAttribute("name",e.name);f||c.appendChild(h)}}void 0!=a.inputsInline&&a.inputsInline!=a.inputsInlineDefault&&c.setAttribute("inline",a.inputsInline);a.isCollapsed()&&c.setAttribute("collapsed",!0);a.isEnabled()||c.setAttribute("disabled",!0);a.isDeletable()||a.isShadow()||c.setAttribute("deletable", +!1);a.isMovable()||a.isShadow()||c.setAttribute("movable",!1);a.isEditable()||c.setAttribute("editable",!1);if(d=a.getNextBlock())g=Blockly.Xml.blockToDom(d,b),g.nodeType==Blockly.utils.dom.NodeType.ELEMENT_NODE&&(h=Blockly.utils.xml.createElement("next"),h.appendChild(g),c.appendChild(h));g=a.nextConnection&&a.nextConnection.getShadowDom();!g||d&&d.isShadow()||h.appendChild(Blockly.Xml.cloneShadow_(g,b));return c}; +Blockly.Xml.cloneShadow_=function(a,b){for(var c=a=a.cloneNode(!0),d;c;)if(b&&"shadow"==c.nodeName&&c.removeAttribute("id"),c.firstChild)c=c.firstChild;else{for(;c&&!c.nextSibling;)d=c,c=c.parentNode,d.nodeType==Blockly.utils.dom.NodeType.TEXT_NODE&&""==d.data.trim()&&c.firstChild!=d&&Blockly.utils.dom.removeNode(d);c&&(d=c,c=c.nextSibling,d.nodeType==Blockly.utils.dom.NodeType.TEXT_NODE&&""==d.data.trim()&&Blockly.utils.dom.removeNode(d))}return a}; +Blockly.Xml.domToText=function(a){a=Blockly.utils.xml.domToText(a);var b=/(<[^/](?:[^>]*[^/])?>[^<]*)\n([^<]*<\/)/;do{var c=a;a=a.replace(b,"$1 $2")}while(a!=c);return a.replace(/<(\w+)([^<]*)\/>/g,"<$1$2>")}; +Blockly.Xml.domToPrettyText=function(a){a=Blockly.Xml.domToText(a).split("<");for(var b="",c=1;c"!=d.slice(-2)&&(b+=" ")}a=a.join("\n");a=a.replace(/(<(\w+)\b[^>]*>[^\n]*)\n *<\/\2>/g,"$1");return a.replace(/^\n/,"")}; +Blockly.Xml.textToDom=function(a){var b=Blockly.utils.xml.textToDomDocument(a);if(!b||!b.documentElement||b.getElementsByTagName("parsererror").length)throw Error("textToDom was unable to parse: "+a);return b.documentElement};Blockly.Xml.clearWorkspaceAndLoadFromXml=function(a,b){b.setResizesEnabled(!1);b.clear();a=Blockly.Xml.domToWorkspace(a,b);b.setResizesEnabled(!0);return a}; +Blockly.Xml.domToWorkspace=function(a,b){if(a instanceof Blockly.Workspace){var c=a;a=b;b=c;console.warn("Deprecated call to Blockly.Xml.domToWorkspace, swap the arguments.")}var d;b.RTL&&(d=b.getWidth());c=[];Blockly.utils.dom.startTextWidthCache();var e=Blockly.Events.getGroup();e||Blockly.Events.setGroup(!0);b.setResizesEnabled&&b.setResizesEnabled(!1);var f=!0;try{for(var g=0,h;h=a.childNodes[g];g++){var k=h.nodeName.toLowerCase(),l=h;if("block"==k||"shadow"==k&&!Blockly.Events.recordUndo){var m= +Blockly.Xml.domToBlock(l,b);c.push(m.id);var n=l.hasAttribute("x")?parseInt(l.getAttribute("x"),10):10,p=l.hasAttribute("y")?parseInt(l.getAttribute("y"),10):10;isNaN(n)||isNaN(p)||m.moveBy(b.RTL?d-n:n,p);f=!1}else{if("shadow"==k)throw TypeError("Shadow block cannot be a top-level block.");if("comment"==k)b.rendered?Blockly.WorkspaceCommentSvg?Blockly.WorkspaceCommentSvg.fromXml(l,b,d):console.warn("Missing require for Blockly.WorkspaceCommentSvg, ignoring workspace comment."):Blockly.WorkspaceComment? +Blockly.WorkspaceComment.fromXml(l,b):console.warn("Missing require for Blockly.WorkspaceComment, ignoring workspace comment.");else if("variables"==k){if(f)Blockly.Xml.domToVariables(l,b);else throw Error("'variables' tag must exist once before block and shadow tag elements in the workspace XML, but it was found in another location.");f=!1}}}}finally{e||Blockly.Events.setGroup(!1),Blockly.utils.dom.stopTextWidthCache()}b.setResizesEnabled&&b.setResizesEnabled(!0);Blockly.Events.fire(new Blockly.Events.FinishedLoading(b)); +return c};Blockly.Xml.appendDomToWorkspace=function(a,b){var c;b.hasOwnProperty("scale")&&(c=b.getBlocksBoundingBox());a=Blockly.Xml.domToWorkspace(a,b);if(c&&c.top!=c.bottom){var d=c.bottom;var e=b.RTL?c.right:c.left;var f=Infinity,g=-Infinity,h=Infinity;for(c=0;cg&&(g=k.x)}d=d-h+10;e=b.RTL?e-g:e-f;for(c=0;c document.");}else a=null;return a};Blockly.Touch={};Blockly.Touch.TOUCH_ENABLED="ontouchstart"in Blockly.utils.global||!!(Blockly.utils.global.document&&document.documentElement&&"ontouchstart"in document.documentElement)||!(!Blockly.utils.global.navigator||!Blockly.utils.global.navigator.maxTouchPoints&&!Blockly.utils.global.navigator.msMaxTouchPoints);Blockly.Touch.touchIdentifier_=null;Blockly.Touch.TOUCH_MAP={}; +Blockly.utils.global.PointerEvent?Blockly.Touch.TOUCH_MAP={mousedown:["pointerdown"],mouseenter:["pointerenter"],mouseleave:["pointerleave"],mousemove:["pointermove"],mouseout:["pointerout"],mouseover:["pointerover"],mouseup:["pointerup","pointercancel"],touchend:["pointerup"],touchcancel:["pointercancel"]}:Blockly.Touch.TOUCH_ENABLED&&(Blockly.Touch.TOUCH_MAP={mousedown:["touchstart"],mousemove:["touchmove"],mouseup:["touchend","touchcancel"]});Blockly.longPid_=0; +Blockly.longStart=function(a,b){Blockly.longStop_();a.changedTouches&&1!=a.changedTouches.length||(Blockly.longPid_=setTimeout(function(){a.changedTouches&&(a.button=2,a.clientX=a.changedTouches[0].clientX,a.clientY=a.changedTouches[0].clientY);b&&b.handleRightClick(a)},Blockly.LONGPRESS))};Blockly.longStop_=function(){Blockly.longPid_&&(clearTimeout(Blockly.longPid_),Blockly.longPid_=0)};Blockly.Touch.clearTouchIdentifier=function(){Blockly.Touch.touchIdentifier_=null}; +Blockly.Touch.shouldHandleEvent=function(a){return!Blockly.Touch.isMouseOrTouchEvent(a)||Blockly.Touch.checkTouchIdentifier(a)};Blockly.Touch.getTouchIdentifierFromEvent=function(a){return void 0!=a.pointerId?a.pointerId:a.changedTouches&&a.changedTouches[0]&&void 0!==a.changedTouches[0].identifier&&null!==a.changedTouches[0].identifier?a.changedTouches[0].identifier:"mouse"}; +Blockly.Touch.checkTouchIdentifier=function(a){var b=Blockly.Touch.getTouchIdentifierFromEvent(a);return void 0!==Blockly.Touch.touchIdentifier_&&null!==Blockly.Touch.touchIdentifier_?Blockly.Touch.touchIdentifier_==b:"mousedown"==a.type||"touchstart"==a.type||"pointerdown"==a.type?(Blockly.Touch.touchIdentifier_=b,!0):!1};Blockly.Touch.setClientFromTouch=function(a){if(Blockly.utils.string.startsWith(a.type,"touch")){var b=a.changedTouches[0];a.clientX=b.clientX;a.clientY=b.clientY}}; +Blockly.Touch.isMouseOrTouchEvent=function(a){return Blockly.utils.string.startsWith(a.type,"touch")||Blockly.utils.string.startsWith(a.type,"mouse")||Blockly.utils.string.startsWith(a.type,"pointer")};Blockly.Touch.isTouchEvent=function(a){return Blockly.utils.string.startsWith(a.type,"touch")||Blockly.utils.string.startsWith(a.type,"pointer")}; +Blockly.Touch.splitEventByTouches=function(a){var b=[];if(a.changedTouches)for(var c=0;c=c+this.handleLength_&&(d+= +e);this.setHandlePosition(this.constrainHandle_(d));this.onScroll_();a.stopPropagation();a.preventDefault()}}; +Blockly.Scrollbar.prototype.onMouseDownHandle_=function(a){this.workspace_.markFocused();this.cleanUp_();Blockly.utils.isRightButton(a)?a.stopPropagation():(this.startDragHandle=this.handlePosition_,this.workspace_.setupDragSurface(),this.startDragMouse_=this.horizontal_?a.clientX:a.clientY,Blockly.Scrollbar.onMouseUpWrapper_=Blockly.bindEventWithChecks_(document,"mouseup",this,this.onMouseUpHandle_),Blockly.Scrollbar.onMouseMoveWrapper_=Blockly.bindEventWithChecks_(document,"mousemove",this,this.onMouseMoveHandle_), +a.stopPropagation(),a.preventDefault())};Blockly.Scrollbar.prototype.onMouseMoveHandle_=function(a){this.setHandlePosition(this.constrainHandle_(this.startDragHandle+((this.horizontal_?a.clientX:a.clientY)-this.startDragMouse_)));this.onScroll_()};Blockly.Scrollbar.prototype.onMouseUpHandle_=function(){this.workspace_.resetDragSurface();Blockly.Touch.clearTouchIdentifier();this.cleanUp_()}; +Blockly.Scrollbar.prototype.cleanUp_=function(){Blockly.hideChaff(!0);Blockly.Scrollbar.onMouseUpWrapper_&&(Blockly.unbindEvent_(Blockly.Scrollbar.onMouseUpWrapper_),Blockly.Scrollbar.onMouseUpWrapper_=null);Blockly.Scrollbar.onMouseMoveWrapper_&&(Blockly.unbindEvent_(Blockly.Scrollbar.onMouseMoveWrapper_),Blockly.Scrollbar.onMouseMoveWrapper_=null)}; +Blockly.Scrollbar.prototype.constrainHandle_=function(a){return a=0>=a||isNaN(a)||this.scrollViewSize_Blockly.Tooltip.RADIUS_OK&&Blockly.Tooltip.hide()}else Blockly.Tooltip.poisonedElement_!=Blockly.Tooltip.element_&&(clearTimeout(Blockly.Tooltip.showPid_),Blockly.Tooltip.lastX_=a.pageX,Blockly.Tooltip.lastY_=a.pageY,Blockly.Tooltip.showPid_=setTimeout(Blockly.Tooltip.show_, +Blockly.Tooltip.HOVER_MS))};Blockly.Tooltip.dispose=function(){Blockly.Tooltip.element_=null;Blockly.Tooltip.poisonedElement_=null;Blockly.Tooltip.hide()};Blockly.Tooltip.hide=function(){Blockly.Tooltip.visible&&(Blockly.Tooltip.visible=!1,Blockly.Tooltip.DIV&&(Blockly.Tooltip.DIV.style.display="none"));Blockly.Tooltip.showPid_&&clearTimeout(Blockly.Tooltip.showPid_)};Blockly.Tooltip.block=function(){Blockly.Tooltip.hide();Blockly.Tooltip.blocked_=!0}; +Blockly.Tooltip.unblock=function(){Blockly.Tooltip.blocked_=!1}; +Blockly.Tooltip.show_=function(){if(!Blockly.Tooltip.blocked_&&(Blockly.Tooltip.poisonedElement_=Blockly.Tooltip.element_,Blockly.Tooltip.DIV)){Blockly.Tooltip.DIV.textContent="";for(var a=Blockly.Tooltip.element_.tooltip;"function"==typeof a;)a=a();a=Blockly.utils.string.wrap(a,Blockly.Tooltip.LIMIT);a=a.split("\n");for(var b=0;bc+window.scrollY&&(e-=Blockly.Tooltip.DIV.offsetHeight+2*Blockly.Tooltip.OFFSET_Y);a?d=Math.max(Blockly.Tooltip.MARGINS-window.scrollX, +d):d+Blockly.Tooltip.DIV.offsetWidth>b+window.scrollX-2*Blockly.Tooltip.MARGINS&&(d=b-Blockly.Tooltip.DIV.offsetWidth-2*Blockly.Tooltip.MARGINS);Blockly.Tooltip.DIV.style.top=e+"px";Blockly.Tooltip.DIV.style.left=d+"px"}};Blockly.WorkspaceDragSurfaceSvg=function(a){this.container_=a;this.createDom()};Blockly.WorkspaceDragSurfaceSvg.prototype.SVG_=null;Blockly.WorkspaceDragSurfaceSvg.prototype.container_=null; +Blockly.WorkspaceDragSurfaceSvg.prototype.createDom=function(){this.SVG_||(this.SVG_=Blockly.utils.dom.createSvgElement("svg",{xmlns:Blockly.utils.dom.SVG_NS,"xmlns:html":Blockly.utils.dom.HTML_NS,"xmlns:xlink":Blockly.utils.dom.XLINK_NS,version:"1.1","class":"blocklyWsDragSurface blocklyOverflowVisible"},null),this.container_.appendChild(this.SVG_))}; +Blockly.WorkspaceDragSurfaceSvg.prototype.translateSurface=function(a,b){a=a.toFixed(0);b=b.toFixed(0);this.SVG_.style.display="block";Blockly.utils.dom.setCssTransform(this.SVG_,"translate3d("+a+"px, "+b+"px, 0px)")};Blockly.WorkspaceDragSurfaceSvg.prototype.getSurfaceTranslation=function(){return Blockly.utils.getRelativeXY(this.SVG_)}; +Blockly.WorkspaceDragSurfaceSvg.prototype.clearAndHide=function(a){if(!a)throw Error("Couldn't clear and hide the drag surface: missing new surface.");var b=this.SVG_.childNodes[0],c=this.SVG_.childNodes[1];if(!(b&&c&&Blockly.utils.dom.hasClass(b,"blocklyBlockCanvas")&&Blockly.utils.dom.hasClass(c,"blocklyBubbleCanvas")))throw Error("Couldn't clear and hide the drag surface. A node was missing.");null!=this.previousSibling_?Blockly.utils.dom.insertAfter(b,this.previousSibling_):a.insertBefore(b,a.firstChild); +Blockly.utils.dom.insertAfter(c,b);this.SVG_.style.display="none";if(this.SVG_.childNodes.length)throw Error("Drag surface was not cleared.");Blockly.utils.dom.setCssTransform(this.SVG_,"");this.previousSibling_=null}; +Blockly.WorkspaceDragSurfaceSvg.prototype.setContentsAndShow=function(a,b,c,d,e,f){if(this.SVG_.childNodes.length)throw Error("Already dragging a block.");this.previousSibling_=c;a.setAttribute("transform","translate(0, 0) scale("+f+")");b.setAttribute("transform","translate(0, 0) scale("+f+")");this.SVG_.setAttribute("width",d);this.SVG_.setAttribute("height",e);this.SVG_.appendChild(a);this.SVG_.appendChild(b);this.SVG_.style.display="block"};Blockly.ASTNode=function(a,b,c){if(!b)throw Error("Cannot create a node without a location.");this.type_=a;this.isConnection_=Blockly.ASTNode.isConnectionType_(a);this.location_=b;this.wsCoordinate_=null;this.processParams_(c||null)};Blockly.ASTNode.types={FIELD:"field",BLOCK:"block",INPUT:"input",OUTPUT:"output",NEXT:"next",PREVIOUS:"previous",STACK:"stack",WORKSPACE:"workspace"};Blockly.ASTNode.NAVIGATE_ALL_FIELDS=!1;Blockly.ASTNode.DEFAULT_OFFSET_Y=-20;Blockly.ASTNode.isConnectionType_=function(a){switch(a){case Blockly.ASTNode.types.PREVIOUS:case Blockly.ASTNode.types.NEXT:case Blockly.ASTNode.types.INPUT:case Blockly.ASTNode.types.OUTPUT:return!0}return!1}; +Blockly.ASTNode.createFieldNode=function(a){return a?new Blockly.ASTNode(Blockly.ASTNode.types.FIELD,a):null}; +Blockly.ASTNode.createConnectionNode=function(a){return a?a.type==Blockly.INPUT_VALUE||a.type==Blockly.NEXT_STATEMENT&&a.getParentInput()?Blockly.ASTNode.createInputNode(a.getParentInput()):a.type==Blockly.NEXT_STATEMENT?new Blockly.ASTNode(Blockly.ASTNode.types.NEXT,a):a.type==Blockly.OUTPUT_VALUE?new Blockly.ASTNode(Blockly.ASTNode.types.OUTPUT,a):a.type==Blockly.PREVIOUS_STATEMENT?new Blockly.ASTNode(Blockly.ASTNode.types.PREVIOUS,a):null:null}; +Blockly.ASTNode.createInputNode=function(a){return a&&a.connection?new Blockly.ASTNode(Blockly.ASTNode.types.INPUT,a.connection):null};Blockly.ASTNode.createBlockNode=function(a){return a?new Blockly.ASTNode(Blockly.ASTNode.types.BLOCK,a):null};Blockly.ASTNode.createStackNode=function(a){return a?new Blockly.ASTNode(Blockly.ASTNode.types.STACK,a):null};Blockly.ASTNode.createWorkspaceNode=function(a,b){return b&&a?new Blockly.ASTNode(Blockly.ASTNode.types.WORKSPACE,a,{wsCoordinate:b}):null}; +Blockly.ASTNode.createTopNode=function(a){var b=a.previousConnection||a.outputConnection;return b?Blockly.ASTNode.createConnectionNode(b):Blockly.ASTNode.createBlockNode(a)};Blockly.ASTNode.prototype.processParams_=function(a){a&&a.wsCoordinate&&(this.wsCoordinate_=a.wsCoordinate)};Blockly.ASTNode.prototype.getLocation=function(){return this.location_};Blockly.ASTNode.prototype.getType=function(){return this.type_};Blockly.ASTNode.prototype.getWsCoordinate=function(){return this.wsCoordinate_}; +Blockly.ASTNode.prototype.isConnection=function(){return this.isConnection_};Blockly.ASTNode.prototype.findNextForInput_=function(){var a=this.location_.getParentInput(),b=a.getSourceBlock();a=b.inputList.indexOf(a)+1;for(var c;c=b.inputList[a];a++){for(var d=c.fieldRow,e=0,f;f=d[e];e++)if(f.isClickable()||Blockly.ASTNode.NAVIGATE_ALL_FIELDS)return Blockly.ASTNode.createFieldNode(f);if(c.connection)return Blockly.ASTNode.createInputNode(c)}return null}; +Blockly.ASTNode.prototype.findNextForField_=function(){var a=this.location_,b=a.getParentInput(),c=a.getSourceBlock(),d=c.inputList.indexOf(b);for(a=b.fieldRow.indexOf(a)+1;b=c.inputList[d];d++){for(var e=b.fieldRow;ac)){var d=b.getSvgXY(a.getSvgRoot());a.outputConnection?(d.x+=(a.RTL?3:-3)*c,d.y+=13*c):a.previousConnection&&(d.x+=(a.RTL?-23:23)*c,d.y+=3*c);a=Blockly.utils.dom.createSvgElement("circle",{cx:d.x,cy:d.y,r:0,fill:"none",stroke:"#888","stroke-width":10},b.getParentSvg());Blockly.blockAnimations.connectionUiStep_(a,new Date,c)}}; +Blockly.blockAnimations.connectionUiStep_=function(a,b,c){var d=(new Date-b)/150;1a.workspace.scale)){var b=a.getHeightWidth().height;b=Math.atan(10/b)/Math.PI*180;a.RTL||(b*=-1);Blockly.blockAnimations.disconnectUiStep_(a.getSvgRoot(),b,new Date)}}; +Blockly.blockAnimations.disconnectUiStep_=function(a,b,c){var d=(new Date-c)/200;1b-Blockly.CURRENT_CONNECTION_PREFERENCE)}if(this.localConnection_||this.closestConnection_)console.error("Only one of localConnection_ and closestConnection_ was set."); +else return!0}else return!(!this.localConnection_||!this.closestConnection_);console.error("Returning true from shouldUpdatePreviews, but it's not clear why.");return!0};Blockly.InsertionMarkerManager.prototype.getCandidate_=function(a){for(var b=this.getStartRadius_(),c=null,d=null,e=0;ethis.remainingCapacityOfType(c))return!1;b+=a[c]}return b>this.remainingCapacity()?!1:!0}; +Blockly.Workspace.prototype.hasBlockLimits=function(){return Infinity!=this.options.maxBlocks||!!this.options.maxInstances};Blockly.Workspace.prototype.undo=function(a){var b=a?this.redoStack_:this.undoStack_,c=a?this.undoStack_:this.redoStack_,d=b.pop();if(d){for(var e=[d];b.length&&d.group&&d.group==b[b.length-1].group;)e.push(b.pop());for(b=0;d=e[b];b++)c.push(d);e=Blockly.Events.filter(e,a);Blockly.Events.recordUndo=!1;try{for(b=0;d=e[b];b++)d.run(a)}finally{Blockly.Events.recordUndo=!0}}}; +Blockly.Workspace.prototype.clearUndo=function(){this.undoStack_.length=0;this.redoStack_.length=0;Blockly.Events.clearPendingUndo()};Blockly.Workspace.prototype.addChangeListener=function(a){this.listeners_.push(a);return a};Blockly.Workspace.prototype.removeChangeListener=function(a){Blockly.utils.arrayRemove(this.listeners_,a)}; +Blockly.Workspace.prototype.fireChangeListener=function(a){if(a.recordUndo)for(this.undoStack_.push(a),this.redoStack_.length=0;this.undoStack_.length>this.MAX_UNDO&&0<=this.MAX_UNDO;)this.undoStack_.shift();for(var b=0,c;c=this.listeners_[b];b++)c(a)};Blockly.Workspace.prototype.getBlockById=function(a){return this.blockDB_[a]||null};Blockly.Workspace.prototype.setBlockById=function(a,b){this.blockDB_[a]=b};Blockly.Workspace.prototype.removeBlockById=function(a){delete this.blockDB_[a]}; +Blockly.Workspace.prototype.getCommentById=function(a){return this.commentDB_[a]||null};Blockly.Workspace.prototype.allInputsFilled=function(a){for(var b=this.getTopBlocks(!1),c=0,d;d=b[c];c++)if(!d.allInputsFilled(a))return!1;return!0};Blockly.Workspace.prototype.getPotentialVariableMap=function(){return this.potentialVariableMap_};Blockly.Workspace.prototype.createPotentialVariableMap=function(){this.potentialVariableMap_=new Blockly.VariableMap(this)}; +Blockly.Workspace.prototype.getVariableMap=function(){return this.variableMap_};Blockly.Workspace.prototype.setVariableMap=function(a){this.variableMap_=a};Blockly.Workspace.WorkspaceDB_=Object.create(null);Blockly.Workspace.getById=function(a){return Blockly.Workspace.WorkspaceDB_[a]||null};Blockly.Workspace.getAll=function(){var a=[],b;for(b in Blockly.Workspace.WorkspaceDB_)a.push(Blockly.Workspace.WorkspaceDB_[b]);return a};Blockly.Bubble=function(a,b,c,d,e,f){this.workspace_=a;this.content_=b;this.shape_=c;this.onMouseDownResizeWrapper_=this.onMouseDownBubbleWrapper_=this.moveCallback_=this.resizeCallback_=null;this.disposed=!1;c=Blockly.Bubble.ARROW_ANGLE;this.workspace_.RTL&&(c=-c);this.arrow_radians_=Blockly.utils.math.toRadians(c);a.getBubbleCanvas().appendChild(this.createDom_(b,!(!e||!f)));this.setAnchorLocation(d);e&&f||(a=this.content_.getBBox(),e=a.width+2*Blockly.Bubble.BORDER_WIDTH,f=a.height+2*Blockly.Bubble.BORDER_WIDTH); +this.setBubbleSize(e,f);this.positionBubble_();this.renderArrow_();this.rendered_=!0};Blockly.Bubble.BORDER_WIDTH=6;Blockly.Bubble.ARROW_THICKNESS=5;Blockly.Bubble.ARROW_ANGLE=20;Blockly.Bubble.ARROW_BEND=4;Blockly.Bubble.ANCHOR_RADIUS=8;Blockly.Bubble.onMouseUpWrapper_=null;Blockly.Bubble.onMouseMoveWrapper_=null; +Blockly.Bubble.unbindDragEvents_=function(){Blockly.Bubble.onMouseUpWrapper_&&(Blockly.unbindEvent_(Blockly.Bubble.onMouseUpWrapper_),Blockly.Bubble.onMouseUpWrapper_=null);Blockly.Bubble.onMouseMoveWrapper_&&(Blockly.unbindEvent_(Blockly.Bubble.onMouseMoveWrapper_),Blockly.Bubble.onMouseMoveWrapper_=null)};Blockly.Bubble.bubbleMouseUp_=function(a){Blockly.Touch.clearTouchIdentifier();Blockly.Bubble.unbindDragEvents_()};Blockly.Bubble.prototype.rendered_=!1;Blockly.Bubble.prototype.anchorXY_=null; +Blockly.Bubble.prototype.relativeLeft_=0;Blockly.Bubble.prototype.relativeTop_=0;Blockly.Bubble.prototype.width_=0;Blockly.Bubble.prototype.height_=0;Blockly.Bubble.prototype.autoLayout_=!0; +Blockly.Bubble.prototype.createDom_=function(a,b){this.bubbleGroup_=Blockly.utils.dom.createSvgElement("g",{},null);var c={filter:"url(#"+this.workspace_.getRenderer().getConstants().embossFilterId+")"};Blockly.utils.userAgent.JAVA_FX&&(c={});c=Blockly.utils.dom.createSvgElement("g",c,this.bubbleGroup_);this.bubbleArrow_=Blockly.utils.dom.createSvgElement("path",{},c);this.bubbleBack_=Blockly.utils.dom.createSvgElement("rect",{"class":"blocklyDraggable",x:0,y:0,rx:Blockly.Bubble.BORDER_WIDTH,ry:Blockly.Bubble.BORDER_WIDTH}, +c);b?(this.resizeGroup_=Blockly.utils.dom.createSvgElement("g",{"class":this.workspace_.RTL?"blocklyResizeSW":"blocklyResizeSE"},this.bubbleGroup_),b=2*Blockly.Bubble.BORDER_WIDTH,Blockly.utils.dom.createSvgElement("polygon",{points:"0,x x,x x,0".replace(/x/g,b.toString())},this.resizeGroup_),Blockly.utils.dom.createSvgElement("line",{"class":"blocklyResizeLine",x1:b/3,y1:b-1,x2:b-1,y2:b/3},this.resizeGroup_),Blockly.utils.dom.createSvgElement("line",{"class":"blocklyResizeLine",x1:2*b/3,y1:b-1,x2:b- +1,y2:2*b/3},this.resizeGroup_)):this.resizeGroup_=null;this.workspace_.options.readOnly||(this.onMouseDownBubbleWrapper_=Blockly.bindEventWithChecks_(this.bubbleBack_,"mousedown",this,this.bubbleMouseDown_),this.resizeGroup_&&(this.onMouseDownResizeWrapper_=Blockly.bindEventWithChecks_(this.resizeGroup_,"mousedown",this,this.resizeMouseDown_)));this.bubbleGroup_.appendChild(a);return this.bubbleGroup_};Blockly.Bubble.prototype.getSvgRoot=function(){return this.bubbleGroup_}; +Blockly.Bubble.prototype.setSvgId=function(a){this.bubbleGroup_.dataset&&(this.bubbleGroup_.dataset.blockId=a)};Blockly.Bubble.prototype.bubbleMouseDown_=function(a){var b=this.workspace_.getGesture(a);b&&b.handleBubbleStart(a,this)};Blockly.Bubble.prototype.showContextMenu=function(a){};Blockly.Bubble.prototype.isDeletable=function(){return!1}; +Blockly.Bubble.prototype.resizeMouseDown_=function(a){this.promote();Blockly.Bubble.unbindDragEvents_();Blockly.utils.isRightButton(a)||(this.workspace_.startDrag(a,new Blockly.utils.Coordinate(this.workspace_.RTL?-this.width_:this.width_,this.height_)),Blockly.Bubble.onMouseUpWrapper_=Blockly.bindEventWithChecks_(document,"mouseup",this,Blockly.Bubble.bubbleMouseUp_),Blockly.Bubble.onMouseMoveWrapper_=Blockly.bindEventWithChecks_(document,"mousemove",this,this.resizeMouseMove_),Blockly.hideChaff()); +a.stopPropagation()};Blockly.Bubble.prototype.resizeMouseMove_=function(a){this.autoLayout_=!1;a=this.workspace_.moveDrag(a);this.setBubbleSize(this.workspace_.RTL?-a.x:a.x,a.y);this.workspace_.RTL&&this.positionBubble_()};Blockly.Bubble.prototype.registerResizeEvent=function(a){this.resizeCallback_=a};Blockly.Bubble.prototype.registerMoveEvent=function(a){this.moveCallback_=a}; +Blockly.Bubble.prototype.promote=function(){var a=this.bubbleGroup_.parentNode;return a.lastChild!==this.bubbleGroup_?(a.appendChild(this.bubbleGroup_),!0):!1};Blockly.Bubble.prototype.setAnchorLocation=function(a){this.anchorXY_=a;this.rendered_&&this.positionBubble_()}; +Blockly.Bubble.prototype.layoutBubble_=function(){var a=this.workspace_.getMetrics();a.viewLeft/=this.workspace_.scale;a.viewWidth/=this.workspace_.scale;a.viewTop/=this.workspace_.scale;a.viewHeight/=this.workspace_.scale;var b=this.getOptimalRelativeLeft_(a),c=this.getOptimalRelativeTop_(a),d=this.shape_.getBBox(),e={x:b,y:-this.height_-this.workspace_.getRenderer().getConstants().MIN_BLOCK_HEIGHT},f={x:-this.width_-30,y:c};c={x:d.width,y:c};var g={x:b,y:d.height};b=d.widtha.viewWidth)return b;if(this.workspace_.RTL)var c=this.anchorXY_.x-b,d=c-this.width_,e=a.viewLeft+a.viewWidth,f=a.viewLeft+Blockly.Scrollbar.scrollbarThickness/this.workspace_.scale;else d=b+this.anchorXY_.x,c=d+this.width_,f=a.viewLeft,e=a.viewLeft+a.viewWidth-Blockly.Scrollbar.scrollbarThickness/this.workspace_.scale;this.workspace_.RTL?de&&(b=-(e-this.anchorXY_.x)): +de&&(b=e-this.anchorXY_.x-this.width_);return b};Blockly.Bubble.prototype.getOptimalRelativeTop_=function(a){var b=-this.height_/4;if(this.height_>a.viewHeight)return b;var c=this.anchorXY_.y+b,d=c+this.height_,e=a.viewTop;a=a.viewTop+a.viewHeight-Blockly.Scrollbar.scrollbarThickness/this.workspace_.scale;var f=this.anchorXY_.y;ca&&(b=a-f-this.height_);return b}; +Blockly.Bubble.prototype.positionBubble_=function(){var a=this.anchorXY_.x;a=this.workspace_.RTL?a-(this.relativeLeft_+this.width_):a+this.relativeLeft_;this.moveTo(a,this.relativeTop_+this.anchorXY_.y)};Blockly.Bubble.prototype.moveTo=function(a,b){this.bubbleGroup_.setAttribute("transform","translate("+a+","+b+")")};Blockly.Bubble.prototype.setDragging=function(a){!a&&this.moveCallback_&&this.moveCallback_()}; +Blockly.Bubble.prototype.getBubbleSize=function(){return new Blockly.utils.Size(this.width_,this.height_)}; +Blockly.Bubble.prototype.setBubbleSize=function(a,b){var c=2*Blockly.Bubble.BORDER_WIDTH;a=Math.max(a,c+45);b=Math.max(b,c+20);this.width_=a;this.height_=b;this.bubbleBack_.setAttribute("width",a);this.bubbleBack_.setAttribute("height",b);this.resizeGroup_&&(this.workspace_.RTL?this.resizeGroup_.setAttribute("transform","translate("+2*Blockly.Bubble.BORDER_WIDTH+","+(b-c)+") scale(-1 1)"):this.resizeGroup_.setAttribute("transform","translate("+(a-c)+","+(b-c)+")"));this.autoLayout_&&this.layoutBubble_(); +this.positionBubble_();this.renderArrow_();this.resizeCallback_&&this.resizeCallback_()}; +Blockly.Bubble.prototype.renderArrow_=function(){var a=[],b=this.width_/2,c=this.height_/2,d=-this.relativeLeft_,e=-this.relativeTop_;if(b==d&&c==e)a.push("M "+b+","+c);else{e-=c;d-=b;this.workspace_.RTL&&(d*=-1);var f=Math.sqrt(e*e+d*d),g=Math.acos(d/f);0>e&&(g=2*Math.PI-g);var h=g+Math.PI/2;h>2*Math.PI&&(h-=2*Math.PI);var k=Math.sin(h),l=Math.cos(h),m=this.getBubbleSize();h=(m.width+m.height)/Blockly.Bubble.ARROW_THICKNESS;h=Math.min(h,m.width,m.height)/4;m=1-Blockly.Bubble.ANCHOR_RADIUS/f;d=b+ +m*d;e=c+m*e;m=b+h*l;var n=c+h*k;b-=h*l;c-=h*k;k=g+this.arrow_radians_;k>2*Math.PI&&(k-=2*Math.PI);g=Math.sin(k)*f/Blockly.Bubble.ARROW_BEND;f=Math.cos(k)*f/Blockly.Bubble.ARROW_BEND;a.push("M"+m+","+n);a.push("C"+(m+f)+","+(n+g)+" "+d+","+e+" "+d+","+e);a.push("C"+d+","+e+" "+(b+f)+","+(c+g)+" "+b+","+c)}a.push("z");this.bubbleArrow_.setAttribute("d",a.join(" "))};Blockly.Bubble.prototype.setColour=function(a){this.bubbleBack_.setAttribute("fill",a);this.bubbleArrow_.setAttribute("fill",a)}; +Blockly.Bubble.prototype.dispose=function(){this.onMouseDownBubbleWrapper_&&Blockly.unbindEvent_(this.onMouseDownBubbleWrapper_);this.onMouseDownResizeWrapper_&&Blockly.unbindEvent_(this.onMouseDownResizeWrapper_);Blockly.Bubble.unbindDragEvents_();Blockly.utils.dom.removeNode(this.bubbleGroup_);this.disposed=!0}; +Blockly.Bubble.prototype.moveDuringDrag=function(a,b){a?a.translateSurface(b.x,b.y):this.moveTo(b.x,b.y);this.relativeLeft_=this.workspace_.RTL?this.anchorXY_.x-b.x-this.width_:b.x-this.anchorXY_.x;this.relativeTop_=b.y-this.anchorXY_.y;this.renderArrow_()};Blockly.Bubble.prototype.getRelativeToSurfaceXY=function(){return new Blockly.utils.Coordinate(this.workspace_.RTL?-this.relativeLeft_+this.anchorXY_.x-this.width_:this.anchorXY_.x+this.relativeLeft_,this.anchorXY_.y+this.relativeTop_)}; +Blockly.Bubble.prototype.setAutoLayout=function(a){this.autoLayout_=a};Blockly.Events.CommentBase=function(a){this.commentId=a.id;this.workspaceId=a.workspace.id;this.group=Blockly.Events.getGroup();this.recordUndo=Blockly.Events.recordUndo};Blockly.utils.object.inherits(Blockly.Events.CommentBase,Blockly.Events.Abstract);Blockly.Events.CommentBase.prototype.toJson=function(){var a=Blockly.Events.CommentBase.superClass_.toJson.call(this);this.commentId&&(a.commentId=this.commentId);return a}; +Blockly.Events.CommentBase.prototype.fromJson=function(a){Blockly.Events.CommentBase.superClass_.fromJson.call(this,a);this.commentId=a.commentId};Blockly.Events.CommentChange=function(a,b,c){a&&(Blockly.Events.CommentChange.superClass_.constructor.call(this,a),this.oldContents_=b,this.newContents_=c)};Blockly.utils.object.inherits(Blockly.Events.CommentChange,Blockly.Events.CommentBase);Blockly.Events.CommentChange.prototype.type=Blockly.Events.COMMENT_CHANGE; +Blockly.Events.CommentChange.prototype.toJson=function(){var a=Blockly.Events.CommentChange.superClass_.toJson.call(this);a.newContents=this.newContents_;return a};Blockly.Events.CommentChange.prototype.fromJson=function(a){Blockly.Events.CommentChange.superClass_.fromJson.call(this,a);this.newContents_=a.newValue};Blockly.Events.CommentChange.prototype.isNull=function(){return this.oldContents_==this.newContents_}; +Blockly.Events.CommentChange.prototype.run=function(a){var b=this.getEventWorkspace_().getCommentById(this.commentId);b?b.setContent(a?this.newContents_:this.oldContents_):console.warn("Can't change non-existent comment: "+this.commentId)};Blockly.Events.CommentCreate=function(a){a&&(Blockly.Events.CommentCreate.superClass_.constructor.call(this,a),this.xml=a.toXmlWithXY())};Blockly.utils.object.inherits(Blockly.Events.CommentCreate,Blockly.Events.CommentBase); +Blockly.Events.CommentCreate.prototype.type=Blockly.Events.COMMENT_CREATE;Blockly.Events.CommentCreate.prototype.toJson=function(){var a=Blockly.Events.CommentCreate.superClass_.toJson.call(this);a.xml=Blockly.Xml.domToText(this.xml);return a};Blockly.Events.CommentCreate.prototype.fromJson=function(a){Blockly.Events.CommentCreate.superClass_.fromJson.call(this,a);this.xml=Blockly.Xml.textToDom(a.xml)}; +Blockly.Events.CommentCreate.prototype.run=function(a){Blockly.Events.CommentCreateDeleteHelper(this,a)};Blockly.Events.CommentCreateDeleteHelper=function(a,b){var c=a.getEventWorkspace_();b?(b=Blockly.utils.xml.createElement("xml"),b.appendChild(a.xml),Blockly.Xml.domToWorkspace(b,c)):(c=c.getCommentById(a.commentId))?c.dispose(!1,!1):console.warn("Can't uncreate non-existent comment: "+a.commentId)}; +Blockly.Events.CommentDelete=function(a){a&&(Blockly.Events.CommentDelete.superClass_.constructor.call(this,a),this.xml=a.toXmlWithXY())};Blockly.utils.object.inherits(Blockly.Events.CommentDelete,Blockly.Events.CommentBase);Blockly.Events.CommentDelete.prototype.type=Blockly.Events.COMMENT_DELETE;Blockly.Events.CommentDelete.prototype.toJson=function(){return Blockly.Events.CommentDelete.superClass_.toJson.call(this)}; +Blockly.Events.CommentDelete.prototype.fromJson=function(a){Blockly.Events.CommentDelete.superClass_.fromJson.call(this,a)};Blockly.Events.CommentDelete.prototype.run=function(a){Blockly.Events.CommentCreateDeleteHelper(this,!a)};Blockly.Events.CommentMove=function(a){a&&(Blockly.Events.CommentMove.superClass_.constructor.call(this,a),this.comment_=a,this.oldCoordinate_=a.getXY(),this.newCoordinate_=null)};Blockly.utils.object.inherits(Blockly.Events.CommentMove,Blockly.Events.CommentBase); +Blockly.Events.CommentMove.prototype.recordNew=function(){if(!this.comment_)throw Error("Tried to record the new position of a comment on the same event twice.");this.newCoordinate_=this.comment_.getXY();this.comment_=null};Blockly.Events.CommentMove.prototype.type=Blockly.Events.COMMENT_MOVE;Blockly.Events.CommentMove.prototype.setOldCoordinate=function(a){this.oldCoordinate_=a}; +Blockly.Events.CommentMove.prototype.toJson=function(){var a=Blockly.Events.CommentMove.superClass_.toJson.call(this);this.newCoordinate_&&(a.newCoordinate=Math.round(this.newCoordinate_.x)+","+Math.round(this.newCoordinate_.y));return a};Blockly.Events.CommentMove.prototype.fromJson=function(a){Blockly.Events.CommentMove.superClass_.fromJson.call(this,a);a.newCoordinate&&(a=a.newCoordinate.split(","),this.newCoordinate_=new Blockly.utils.Coordinate(Number(a[0]),Number(a[1])))}; +Blockly.Events.CommentMove.prototype.isNull=function(){return Blockly.utils.Coordinate.equals(this.oldCoordinate_,this.newCoordinate_)};Blockly.Events.CommentMove.prototype.run=function(a){var b=this.getEventWorkspace_().getCommentById(this.commentId);if(b){a=a?this.newCoordinate_:this.oldCoordinate_;var c=b.getXY();b.moveBy(a.x-c.x,a.y-c.y)}else console.warn("Can't move non-existent comment: "+this.commentId)};Blockly.BubbleDragger=function(a,b){this.draggingBubble_=a;this.workspace_=b;this.deleteArea_=null;this.wouldDeleteBubble_=!1;this.startXY_=this.draggingBubble_.getRelativeToSurfaceXY();this.dragSurface_=Blockly.utils.is3dSupported()&&b.getBlockDragSurface()?b.getBlockDragSurface():null};Blockly.BubbleDragger.prototype.dispose=function(){this.dragSurface_=this.workspace_=this.draggingBubble_=null}; +Blockly.BubbleDragger.prototype.startBubbleDrag=function(){Blockly.Events.getGroup()||Blockly.Events.setGroup(!0);this.workspace_.setResizesEnabled(!1);this.draggingBubble_.setAutoLayout(!1);this.dragSurface_&&this.moveToDragSurface_();this.draggingBubble_.setDragging&&this.draggingBubble_.setDragging(!0);var a=this.workspace_.getToolbox();if(a&&"function"==typeof a.addStyle){var b=this.draggingBubble_.isDeletable()?"blocklyToolboxDelete":"blocklyToolboxGrab";a.addStyle(b)}}; +Blockly.BubbleDragger.prototype.dragBubble=function(a,b){b=this.pixelsToWorkspaceUnits_(b);b=Blockly.utils.Coordinate.sum(this.startXY_,b);this.draggingBubble_.moveDuringDrag(this.dragSurface_,b);this.draggingBubble_.isDeletable()&&(this.deleteArea_=this.workspace_.isDeleteArea(a),this.updateCursorDuringBubbleDrag_())}; +Blockly.BubbleDragger.prototype.maybeDeleteBubble_=function(){var a=this.workspace_.trashcan;this.wouldDeleteBubble_?(a&&setTimeout(a.close.bind(a),100),this.fireMoveEvent_(),this.draggingBubble_.dispose(!1,!0)):a&&a.close();return this.wouldDeleteBubble_}; +Blockly.BubbleDragger.prototype.updateCursorDuringBubbleDrag_=function(){this.wouldDeleteBubble_=this.deleteArea_!=Blockly.DELETE_AREA_NONE;var a=this.workspace_.trashcan;this.wouldDeleteBubble_?(this.draggingBubble_.setDeleteStyle(!0),this.deleteArea_==Blockly.DELETE_AREA_TRASH&&a&&a.setOpen(!0)):(this.draggingBubble_.setDeleteStyle(!1),a&&a.setOpen(!1))}; +Blockly.BubbleDragger.prototype.endBubbleDrag=function(a,b){this.dragBubble(a,b);a=this.pixelsToWorkspaceUnits_(b);a=Blockly.utils.Coordinate.sum(this.startXY_,a);this.draggingBubble_.moveTo(a.x,a.y);this.maybeDeleteBubble_()||(this.dragSurface_&&this.dragSurface_.clearAndHide(this.workspace_.getBubbleCanvas()),this.draggingBubble_.setDragging&&this.draggingBubble_.setDragging(!1),this.fireMoveEvent_());this.workspace_.setResizesEnabled(!0);(a=this.workspace_.getToolbox())&&"function"==typeof a.removeStyle&& +(b=this.draggingBubble_.isDeletable()?"blocklyToolboxDelete":"blocklyToolboxGrab",a.removeStyle(b));Blockly.Events.setGroup(!1)};Blockly.BubbleDragger.prototype.fireMoveEvent_=function(){if(this.draggingBubble_.isComment){var a=new Blockly.Events.CommentMove(this.draggingBubble_);a.setOldCoordinate(this.startXY_);a.recordNew();Blockly.Events.fire(a)}}; +Blockly.BubbleDragger.prototype.pixelsToWorkspaceUnits_=function(a){a=new Blockly.utils.Coordinate(a.x/this.workspace_.scale,a.y/this.workspace_.scale);this.workspace_.isMutator&&a.scale(1/this.workspace_.options.parentWorkspace.scale);return a};Blockly.BubbleDragger.prototype.moveToDragSurface_=function(){this.draggingBubble_.moveTo(0,0);this.dragSurface_.translateSurface(this.startXY_.x,this.startXY_.y);this.dragSurface_.setBlocksAndShow(this.draggingBubble_.getSvgRoot())};Blockly.WorkspaceDragger=function(a){this.workspace_=a;this.startScrollXY_=new Blockly.utils.Coordinate(a.scrollX,a.scrollY)};Blockly.WorkspaceDragger.prototype.dispose=function(){this.workspace_=null};Blockly.WorkspaceDragger.prototype.startDrag=function(){Blockly.selected&&Blockly.selected.unselect();this.workspace_.setupDragSurface()};Blockly.WorkspaceDragger.prototype.endDrag=function(a){this.drag(a);this.workspace_.resetDragSurface()}; +Blockly.WorkspaceDragger.prototype.drag=function(a){a=Blockly.utils.Coordinate.sum(this.startScrollXY_,a);this.workspace_.scroll(a.x,a.y)};Blockly.FlyoutDragger=function(a){Blockly.FlyoutDragger.superClass_.constructor.call(this,a.getWorkspace());this.scrollbar_=a.scrollbar;this.horizontalLayout_=a.horizontalLayout};Blockly.utils.object.inherits(Blockly.FlyoutDragger,Blockly.WorkspaceDragger);Blockly.FlyoutDragger.prototype.drag=function(a){a=Blockly.utils.Coordinate.sum(this.startScrollXY_,a);this.horizontalLayout_?this.scrollbar_.set(-a.x):this.scrollbar_.set(-a.y)};Blockly.Action=function(a,b){this.name=a;this.desc=b};Blockly.navigation={};Blockly.navigation.loggingCallback=null;Blockly.navigation.STATE_FLYOUT=1;Blockly.navigation.STATE_WS=2;Blockly.navigation.STATE_TOOLBOX=3;Blockly.navigation.WS_MOVE_DISTANCE=40;Blockly.navigation.currentState_=Blockly.navigation.STATE_WS; +Blockly.navigation.actionNames={PREVIOUS:"previous",NEXT:"next",IN:"in",OUT:"out",INSERT:"insert",MARK:"mark",DISCONNECT:"disconnect",TOOLBOX:"toolbox",EXIT:"exit",TOGGLE_KEYBOARD_NAV:"toggle_keyboard_nav",MOVE_WS_CURSOR_UP:"move workspace cursor up",MOVE_WS_CURSOR_DOWN:"move workspace cursor down",MOVE_WS_CURSOR_LEFT:"move workspace cursor left",MOVE_WS_CURSOR_RIGHT:"move workspace cursor right"};Blockly.navigation.MARKER_NAME="local_marker_1";Blockly.navigation.getMarker=function(){return Blockly.navigation.getNavigationWorkspace().getMarker(Blockly.navigation.MARKER_NAME)}; +Blockly.navigation.getNavigationWorkspace=function(){return Blockly.getMainWorkspace()};Blockly.navigation.focusToolbox_=function(){var a=Blockly.navigation.getNavigationWorkspace().getToolbox();a&&(Blockly.navigation.currentState_=Blockly.navigation.STATE_TOOLBOX,Blockly.navigation.resetFlyout_(!1),Blockly.navigation.getMarker().getCurNode()||Blockly.navigation.markAtCursor_(),a.selectFirstCategory())}; +Blockly.navigation.focusFlyout_=function(){Blockly.navigation.currentState_=Blockly.navigation.STATE_FLYOUT;var a=Blockly.navigation.getNavigationWorkspace();var b=a.getToolbox();a=b?b.getFlyout():a.getFlyout();Blockly.navigation.getMarker().getCurNode()||Blockly.navigation.markAtCursor_();a&&a.getWorkspace()&&(a=a.getWorkspace().getTopBlocks(!0),0(this.flyout_?Blockly.FLYOUT_DRAG_RADIUS:Blockly.DRAG_RADIUS)}; +Blockly.Gesture.prototype.updateIsDraggingFromFlyout_=function(){return this.targetBlock_&&this.flyout_.isBlockCreatable_(this.targetBlock_)?!this.flyout_.isScrollable()||this.flyout_.isDragTowardWorkspace(this.currentDragDeltaXY_)?(this.startWorkspace_=this.flyout_.targetWorkspace,this.startWorkspace_.updateScreenCalculationsIfScrolled(),Blockly.Events.getGroup()||Blockly.Events.setGroup(!0),this.startBlock_=null,this.targetBlock_=this.flyout_.createBlock(this.targetBlock_),this.targetBlock_.select(), +!0):!1:!1};Blockly.Gesture.prototype.updateIsDraggingBubble_=function(){if(!this.startBubble_)return!1;this.isDraggingBubble_=!0;this.startDraggingBubble_();return!0};Blockly.Gesture.prototype.updateIsDraggingBlock_=function(){if(!this.targetBlock_)return!1;this.flyout_?this.isDraggingBlock_=this.updateIsDraggingFromFlyout_():this.targetBlock_.isMovable()&&(this.isDraggingBlock_=!0);return this.isDraggingBlock_?(this.startDraggingBlock_(),!0):!1}; +Blockly.Gesture.prototype.updateIsDraggingWorkspace_=function(){if(this.flyout_?this.flyout_.isScrollable():this.startWorkspace_&&this.startWorkspace_.isDraggable())this.workspaceDragger_=this.flyout_?new Blockly.FlyoutDragger(this.flyout_):new Blockly.WorkspaceDragger(this.startWorkspace_),this.isDraggingWorkspace_=!0,this.workspaceDragger_.startDrag()}; +Blockly.Gesture.prototype.updateIsDragging_=function(){if(this.calledUpdateIsDragging_)throw Error("updateIsDragging_ should only be called once per gesture.");this.calledUpdateIsDragging_=!0;this.updateIsDraggingBubble_()||this.updateIsDraggingBlock_()||this.updateIsDraggingWorkspace_()}; +Blockly.Gesture.prototype.startDraggingBlock_=function(){this.blockDragger_=new Blockly.BlockDragger(this.targetBlock_,this.startWorkspace_);this.blockDragger_.startBlockDrag(this.currentDragDeltaXY_,this.healStack_);this.blockDragger_.dragBlock(this.mostRecentEvent_,this.currentDragDeltaXY_)}; +Blockly.Gesture.prototype.startDraggingBubble_=function(){this.bubbleDragger_=new Blockly.BubbleDragger(this.startBubble_,this.startWorkspace_);this.bubbleDragger_.startBubbleDrag();this.bubbleDragger_.dragBubble(this.mostRecentEvent_,this.currentDragDeltaXY_)}; +Blockly.Gesture.prototype.doStart=function(a){Blockly.utils.isTargetInput(a)?this.cancel():(this.hasStarted_=!0,Blockly.blockAnimations.disconnectUiStop(),this.startWorkspace_.updateScreenCalculationsIfScrolled(),this.startWorkspace_.isMutator&&this.startWorkspace_.resize(),Blockly.hideChaff(!!this.flyout_),this.startWorkspace_.markFocused(),this.mostRecentEvent_=a,Blockly.Tooltip.block(),this.targetBlock_&&(!this.targetBlock_.isInFlyout&&a.shiftKey&&this.targetBlock_.workspace.keyboardAccessibilityMode? +this.creatorWorkspace_.getCursor().setCurNode(Blockly.ASTNode.createTopNode(this.targetBlock_)):this.targetBlock_.select()),Blockly.utils.isRightButton(a)?this.handleRightClick(a):("touchstart"!=a.type.toLowerCase()&&"pointerdown"!=a.type.toLowerCase()||"mouse"==a.pointerType||Blockly.longStart(a,this),this.mouseDownXY_=new Blockly.utils.Coordinate(a.clientX,a.clientY),this.healStack_=a.altKey||a.ctrlKey||a.metaKey,this.bindMouseEvents(a)))}; +Blockly.Gesture.prototype.bindMouseEvents=function(a){this.onMoveWrapper_=Blockly.bindEventWithChecks_(document,"mousemove",null,this.handleMove.bind(this));this.onUpWrapper_=Blockly.bindEventWithChecks_(document,"mouseup",null,this.handleUp.bind(this));a.preventDefault();a.stopPropagation()}; +Blockly.Gesture.prototype.handleMove=function(a){this.updateFromEvent_(a);this.isDraggingWorkspace_?this.workspaceDragger_.drag(this.currentDragDeltaXY_):this.isDraggingBlock_?this.blockDragger_.dragBlock(this.mostRecentEvent_,this.currentDragDeltaXY_):this.isDraggingBubble_&&this.bubbleDragger_.dragBubble(this.mostRecentEvent_,this.currentDragDeltaXY_);a.preventDefault();a.stopPropagation()}; +Blockly.Gesture.prototype.handleUp=function(a){this.updateFromEvent_(a);Blockly.longStop_();this.isEnding_?console.log("Trying to end a gesture recursively."):(this.isEnding_=!0,this.isDraggingBubble_?this.bubbleDragger_.endBubbleDrag(a,this.currentDragDeltaXY_):this.isDraggingBlock_?this.blockDragger_.endBlockDrag(a,this.currentDragDeltaXY_):this.isDraggingWorkspace_?this.workspaceDragger_.endDrag(this.currentDragDeltaXY_):this.isBubbleClick_()?this.doBubbleClick_():this.isFieldClick_()?this.doFieldClick_(): +this.isBlockClick_()?this.doBlockClick_():this.isWorkspaceClick_()&&this.doWorkspaceClick_(a),a.preventDefault(),a.stopPropagation(),this.dispose())}; +Blockly.Gesture.prototype.cancel=function(){this.isEnding_||(Blockly.longStop_(),this.isDraggingBubble_?this.bubbleDragger_.endBubbleDrag(this.mostRecentEvent_,this.currentDragDeltaXY_):this.isDraggingBlock_?this.blockDragger_.endBlockDrag(this.mostRecentEvent_,this.currentDragDeltaXY_):this.isDraggingWorkspace_&&this.workspaceDragger_.endDrag(this.currentDragDeltaXY_),this.dispose())}; +Blockly.Gesture.prototype.handleRightClick=function(a){this.targetBlock_?(this.bringBlockToFront_(),Blockly.hideChaff(!!this.flyout_),this.targetBlock_.showContextMenu(a)):this.startBubble_?this.startBubble_.showContextMenu(a):this.startWorkspace_&&!this.flyout_&&(Blockly.hideChaff(),this.startWorkspace_.showContextMenu(a));a.preventDefault();a.stopPropagation();this.dispose()}; +Blockly.Gesture.prototype.handleWsStart=function(a,b){if(this.hasStarted_)throw Error("Tried to call gesture.handleWsStart, but the gesture had already been started.");this.setStartWorkspace_(b);this.mostRecentEvent_=a;this.doStart(a);this.startWorkspace_.keyboardAccessibilityMode&&Blockly.navigation.setState(Blockly.navigation.STATE_WS)};Blockly.Gesture.prototype.fireWorkspaceClick_=function(a){var b=new Blockly.Events.Ui(null,"workspaceClick",null,null);b.workspaceId=a.id;Blockly.Events.fire(b)}; +Blockly.Gesture.prototype.handleFlyoutStart=function(a,b){if(this.hasStarted_)throw Error("Tried to call gesture.handleFlyoutStart, but the gesture had already been started.");this.setStartFlyout_(b);this.handleWsStart(a,b.getWorkspace())};Blockly.Gesture.prototype.handleBlockStart=function(a,b){if(this.hasStarted_)throw Error("Tried to call gesture.handleBlockStart, but the gesture had already been started.");this.setStartBlock(b);this.mostRecentEvent_=a}; +Blockly.Gesture.prototype.handleBubbleStart=function(a,b){if(this.hasStarted_)throw Error("Tried to call gesture.handleBubbleStart, but the gesture had already been started.");this.setStartBubble(b);this.mostRecentEvent_=a};Blockly.Gesture.prototype.doBubbleClick_=function(){this.startBubble_.setFocus&&this.startBubble_.setFocus();this.startBubble_.select&&this.startBubble_.select()};Blockly.Gesture.prototype.doFieldClick_=function(){this.startField_.showEditor(this.mostRecentEvent_);this.bringBlockToFront_()}; +Blockly.Gesture.prototype.doBlockClick_=function(){this.flyout_&&this.flyout_.autoClose?this.targetBlock_.isEnabled()&&(Blockly.Events.getGroup()||Blockly.Events.setGroup(!0),this.flyout_.createBlock(this.targetBlock_).scheduleSnapAndBump()):Blockly.Events.fire(new Blockly.Events.Ui(this.startBlock_,"click",void 0,void 0));this.bringBlockToFront_();Blockly.Events.setGroup(!1)}; +Blockly.Gesture.prototype.doWorkspaceClick_=function(a){var b=this.creatorWorkspace_;a.shiftKey&&b.keyboardAccessibilityMode?(a=new Blockly.utils.Coordinate(a.clientX,a.clientY),a=Blockly.utils.screenToWsCoordinates(b,a),a=Blockly.ASTNode.createWorkspaceNode(b,a),b.getCursor().setCurNode(a)):Blockly.selected&&Blockly.selected.unselect();this.fireWorkspaceClick_(b)};Blockly.Gesture.prototype.bringBlockToFront_=function(){this.targetBlock_&&!this.flyout_&&this.targetBlock_.bringToFront()}; +Blockly.Gesture.prototype.setStartField=function(a){if(this.hasStarted_)throw Error("Tried to call gesture.setStartField, but the gesture had already been started.");this.startField_||(this.startField_=a)};Blockly.Gesture.prototype.setStartBubble=function(a){this.startBubble_||(this.startBubble_=a)};Blockly.Gesture.prototype.setStartBlock=function(a){this.startBlock_||this.startBubble_||(this.startBlock_=a,a.isInFlyout&&a!=a.getRootBlock()?this.setTargetBlock_(a.getRootBlock()):this.setTargetBlock_(a))}; +Blockly.Gesture.prototype.setTargetBlock_=function(a){a.isShadow()?this.setTargetBlock_(a.getParent()):this.targetBlock_=a};Blockly.Gesture.prototype.setStartWorkspace_=function(a){this.startWorkspace_||(this.startWorkspace_=a)};Blockly.Gesture.prototype.setStartFlyout_=function(a){this.flyout_||(this.flyout_=a)};Blockly.Gesture.prototype.isBubbleClick_=function(){return!!this.startBubble_&&!this.hasExceededDragRadius_}; +Blockly.Gesture.prototype.isBlockClick_=function(){return!!this.startBlock_&&!this.hasExceededDragRadius_&&!this.isFieldClick_()};Blockly.Gesture.prototype.isFieldClick_=function(){return(this.startField_?this.startField_.isClickable():!1)&&!this.hasExceededDragRadius_&&(!this.flyout_||!this.flyout_.autoClose)};Blockly.Gesture.prototype.isWorkspaceClick_=function(){return!this.startBlock_&&!this.startBubble_&&!this.startField_&&!this.hasExceededDragRadius_}; +Blockly.Gesture.prototype.isDragging=function(){return this.isDraggingWorkspace_||this.isDraggingBlock_||this.isDraggingBubble_};Blockly.Gesture.prototype.hasStarted=function(){return this.hasStarted_};Blockly.Gesture.prototype.getInsertionMarkers=function(){return this.blockDragger_?this.blockDragger_.getInsertionMarkers():[]};Blockly.Gesture.inProgress=function(){for(var a=Blockly.Workspace.getAll(),b=0,c;c=a[b];b++)if(c.currentGesture_)return!0;return!1};Blockly.Field=function(a,b,c){this.value_=this.DEFAULT_VALUE;this.tooltip_=this.validator_=null;this.size_=new Blockly.utils.Size(0,0);this.constants_=this.mouseDownWrapper_=this.textContent_=this.textElement_=this.borderRect_=this.fieldGroup_=this.markerSvg_=this.cursorSvg_=null;c&&this.configure_(c);this.setValue(a);b&&this.setValidator(b)};Blockly.Field.prototype.DEFAULT_VALUE=null;Blockly.Field.prototype.name=void 0;Blockly.Field.prototype.disposed=!1; +Blockly.Field.prototype.maxDisplayLength=50;Blockly.Field.prototype.sourceBlock_=null;Blockly.Field.prototype.isDirty_=!0;Blockly.Field.prototype.visible_=!0;Blockly.Field.prototype.clickTarget_=null;Blockly.Field.NBSP="\u00a0";Blockly.Field.prototype.EDITABLE=!0;Blockly.Field.prototype.SERIALIZABLE=!1;Blockly.Field.prototype.configure_=function(a){var b=a.tooltip;"string"==typeof b&&(b=Blockly.utils.replaceMessageReferences(a.tooltip));b&&this.setTooltip(b)}; +Blockly.Field.prototype.setSourceBlock=function(a){if(this.sourceBlock_)throw Error("Field already bound to a block.");this.sourceBlock_=a};Blockly.Field.prototype.getConstants=function(){!this.constants_&&this.sourceBlock_&&this.sourceBlock_.workspace&&this.sourceBlock_.workspace.rendered&&(this.constants_=this.sourceBlock_.workspace.getRenderer().getConstants());return this.constants_};Blockly.Field.prototype.getSourceBlock=function(){return this.sourceBlock_}; +Blockly.Field.prototype.init=function(){this.fieldGroup_||(this.fieldGroup_=Blockly.utils.dom.createSvgElement("g",{},null),this.isVisible()||(this.fieldGroup_.style.display="none"),this.sourceBlock_.getSvgRoot().appendChild(this.fieldGroup_),this.initView(),this.updateEditable(),this.setTooltip(this.tooltip_),this.bindEvents_(),this.initModel())};Blockly.Field.prototype.initView=function(){this.createBorderRect_();this.createTextElement_()};Blockly.Field.prototype.initModel=function(){}; +Blockly.Field.prototype.createBorderRect_=function(){this.borderRect_=Blockly.utils.dom.createSvgElement("rect",{rx:this.getConstants().FIELD_BORDER_RECT_RADIUS,ry:this.getConstants().FIELD_BORDER_RECT_RADIUS,x:0,y:0,height:this.size_.height,width:this.size_.width,"class":"blocklyFieldRect"},this.fieldGroup_)}; +Blockly.Field.prototype.createTextElement_=function(){this.textElement_=Blockly.utils.dom.createSvgElement("text",{"class":"blocklyText"},this.fieldGroup_);this.getConstants().FIELD_TEXT_BASELINE_CENTER&&this.textElement_.setAttribute("dominant-baseline","central");this.textContent_=document.createTextNode("");this.textElement_.appendChild(this.textContent_)}; +Blockly.Field.prototype.bindEvents_=function(){Blockly.Tooltip.bindMouseEvents(this.getClickTarget_());this.mouseDownWrapper_=Blockly.bindEventWithChecks_(this.getClickTarget_(),"mousedown",this,this.onMouseDown_)};Blockly.Field.prototype.fromXml=function(a){this.setValue(a.textContent)};Blockly.Field.prototype.toXml=function(a){a.textContent=this.getValue();return a}; +Blockly.Field.prototype.dispose=function(){Blockly.DropDownDiv.hideIfOwner(this);Blockly.WidgetDiv.hideIfOwner(this);Blockly.Tooltip.unbindMouseEvents(this.getClickTarget_());this.mouseDownWrapper_&&Blockly.unbindEvent_(this.mouseDownWrapper_);Blockly.utils.dom.removeNode(this.fieldGroup_);this.disposed=!0}; +Blockly.Field.prototype.updateEditable=function(){var a=this.fieldGroup_;this.EDITABLE&&a&&(this.sourceBlock_.isEditable()?(Blockly.utils.dom.addClass(a,"blocklyEditableText"),Blockly.utils.dom.removeClass(a,"blocklyNonEditableText"),a.style.cursor=this.CURSOR):(Blockly.utils.dom.addClass(a,"blocklyNonEditableText"),Blockly.utils.dom.removeClass(a,"blocklyEditableText"),a.style.cursor=""))}; +Blockly.Field.prototype.isClickable=function(){return!!this.sourceBlock_&&this.sourceBlock_.isEditable()&&!!this.showEditor_&&"function"===typeof this.showEditor_};Blockly.Field.prototype.isCurrentlyEditable=function(){return this.EDITABLE&&!!this.sourceBlock_&&this.sourceBlock_.isEditable()}; +Blockly.Field.prototype.isSerializable=function(){var a=!1;this.name&&(this.SERIALIZABLE?a=!0:this.EDITABLE&&(console.warn("Detected an editable field that was not serializable. Please define SERIALIZABLE property as true on all editable custom fields. Proceeding with serialization."),a=!0));return a};Blockly.Field.prototype.isVisible=function(){return this.visible_}; +Blockly.Field.prototype.setVisible=function(a){if(this.visible_!=a){this.visible_=a;var b=this.getSvgRoot();b&&(b.style.display=a?"block":"none")}};Blockly.Field.prototype.setValidator=function(a){this.validator_=a};Blockly.Field.prototype.getValidator=function(){return this.validator_};Blockly.Field.prototype.classValidator=function(a){return a}; +Blockly.Field.prototype.callValidator=function(a){var b=this.classValidator(a);if(null===b)return null;void 0!==b&&(a=b);if(b=this.getValidator()){b=b.call(this,a);if(null===b)return null;void 0!==b&&(a=b)}return a};Blockly.Field.prototype.getSvgRoot=function(){return this.fieldGroup_};Blockly.Field.prototype.applyColour=function(){};Blockly.Field.prototype.render_=function(){this.textContent_&&(this.textContent_.nodeValue=this.getDisplayText_());this.updateSize_()}; +Blockly.Field.prototype.showEditor=function(a){this.isClickable()&&this.showEditor_(a)};Blockly.Field.prototype.updateWidth=function(){console.warn("Deprecated call to updateWidth, call Blockly.Field.updateSize_ to force an update to the size of the field, or Blockly.utils.dom.getTextWidth() to check the size of the field.");this.updateSize_()}; +Blockly.Field.prototype.updateSize_=function(a){var b=this.getConstants();a=void 0!=a?a:this.borderRect_?this.getConstants().FIELD_BORDER_RECT_X_PADDING:0;var c=2*a,d=b.FIELD_TEXT_HEIGHT,e=0;this.textElement_&&(e=Blockly.utils.dom.getFastTextWidth(this.textElement_,b.FIELD_TEXT_FONTSIZE,b.FIELD_TEXT_FONTWEIGHT,b.FIELD_TEXT_FONTFAMILY),c+=e);this.borderRect_&&(d=Math.max(d,b.FIELD_BORDER_RECT_HEIGHT));this.size_.height=d;this.size_.width=c;this.positionTextElement_(a,e);this.positionBorderRect_()}; +Blockly.Field.prototype.positionTextElement_=function(a,b){if(this.textElement_){var c=this.getConstants(),d=this.size_.height/2;this.textElement_.setAttribute("x",this.sourceBlock_.RTL?this.size_.width-b-a:a);this.textElement_.setAttribute("y",c.FIELD_TEXT_BASELINE_CENTER?d:d-c.FIELD_TEXT_HEIGHT/2+c.FIELD_TEXT_BASELINE)}}; +Blockly.Field.prototype.positionBorderRect_=function(){this.borderRect_&&(this.borderRect_.setAttribute("width",this.size_.width),this.borderRect_.setAttribute("height",this.size_.height),this.borderRect_.setAttribute("rx",this.getConstants().FIELD_BORDER_RECT_RADIUS),this.borderRect_.setAttribute("ry",this.getConstants().FIELD_BORDER_RECT_RADIUS))}; +Blockly.Field.prototype.getSize=function(){if(!this.isVisible())return new Blockly.utils.Size(0,0);this.isDirty_?(this.render_(),this.isDirty_=!1):this.visible_&&0==this.size_.width&&(console.warn("Deprecated use of setting size_.width to 0 to rerender a field. Set field.isDirty_ to true instead."),this.render_());return this.size_}; +Blockly.Field.prototype.getScaledBBox=function(){if(this.borderRect_)a=this.borderRect_.getBoundingClientRect(),c=Blockly.utils.style.getPageOffset(this.borderRect_),d=a.width,a=a.height;else{var a=this.sourceBlock_.getHeightWidth(),b=this.sourceBlock_.workspace.scale,c=this.getAbsoluteXY_(),d=a.width*b;a=a.height*b;Blockly.utils.userAgent.GECKO?(c.x+=1.5*b,c.y+=1.5*b):Blockly.utils.userAgent.EDGE||Blockly.utils.userAgent.IE||(c.x-=.5*b,c.y-=.5*b);d+=1*b;a+=1*b}return new Blockly.utils.Rect(c.y,c.y+ +a,c.x,c.x+d)};Blockly.Field.prototype.getDisplayText_=function(){var a=this.getText();if(!a)return Blockly.Field.NBSP;a.length>this.maxDisplayLength&&(a=a.substring(0,this.maxDisplayLength-2)+"\u2026");a=a.replace(/\s/g,Blockly.Field.NBSP);this.sourceBlock_&&this.sourceBlock_.RTL&&(a+="\u200f");return a};Blockly.Field.prototype.getText=function(){if(this.getText_){var a=this.getText_.call(this);if(null!==a)return String(a)}return String(this.getValue())}; +Blockly.Field.prototype.setText=function(a){throw Error("setText method is deprecated");};Blockly.Field.prototype.markDirty=function(){this.isDirty_=!0;this.constants_=null};Blockly.Field.prototype.forceRerender=function(){this.isDirty_=!0;this.sourceBlock_&&this.sourceBlock_.rendered&&(this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours(),this.updateMarkers_())}; +Blockly.Field.prototype.setValue=function(a){if(null!==a){var b=this.doClassValidation_(a);a=this.processValidation_(a,b);if(!(a instanceof Error)){if(b=this.getValidator())if(b=b.call(this,a),a=this.processValidation_(a,b),a instanceof Error)return;b=this.sourceBlock_;if(!b||!b.disposed){var c=this.getValue();c!==a&&(b&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.BlockChange(b,"field",this.name||null,c,a)),this.doValueUpdate_(a),this.isDirty_&&this.forceRerender())}}}}; +Blockly.Field.prototype.processValidation_=function(a,b){if(null===b)return this.doValueInvalid_(a),this.isDirty_&&this.forceRerender(),Error();void 0!==b&&(a=b);return a};Blockly.Field.prototype.getValue=function(){return this.value_};Blockly.Field.prototype.doClassValidation_=function(a){return null===a||void 0===a?null:a=this.classValidator(a)};Blockly.Field.prototype.doValueUpdate_=function(a){this.value_=a;this.isDirty_=!0};Blockly.Field.prototype.doValueInvalid_=function(a){}; +Blockly.Field.prototype.onMouseDown_=function(a){this.sourceBlock_&&this.sourceBlock_.workspace&&(a=this.sourceBlock_.workspace.getGesture(a))&&a.setStartField(this)};Blockly.Field.prototype.setTooltip=function(a){var b=this.getClickTarget_();b?b.tooltip=a||""===a?a:this.sourceBlock_:this.tooltip_=a};Blockly.Field.prototype.getClickTarget_=function(){return this.clickTarget_||this.getSvgRoot()};Blockly.Field.prototype.getAbsoluteXY_=function(){return Blockly.utils.style.getPageOffset(this.getClickTarget_())}; +Blockly.Field.prototype.referencesVariables=function(){return!1};Blockly.Field.prototype.getParentInput=function(){for(var a=null,b=this.sourceBlock_,c=b.inputList,d=0;da||a>this.fieldRow.length)throw Error("index "+a+" out of bounds.");if(!(b||""==b&&c))return a;"string"==typeof b&&(b=new Blockly.FieldLabel(b));b.setSourceBlock(this.sourceBlock_);this.sourceBlock_.rendered&&b.init();b.name=c;b.setVisible(this.isVisible());c=b;c.prefixField&&(a=this.insertFieldAt(a,c.prefixField));this.fieldRow.splice(a,0,b);++a;c.suffixField&&(a=this.insertFieldAt(a,c.suffixField));this.sourceBlock_.rendered&&(this.sourceBlock_= +this.sourceBlock_,this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours());return a};Blockly.Input.prototype.removeField=function(a,b){for(var c=0,d;d=this.fieldRow[c];c++)if(d.name===a)return d.dispose(),this.fieldRow.splice(c,1),this.sourceBlock_.rendered&&(this.sourceBlock_=this.sourceBlock_,this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours()),!0;if(b)return!1;throw Error('Field "'+a+'" not found.');};Blockly.Input.prototype.isVisible=function(){return this.visible_}; +Blockly.Input.prototype.setVisible=function(a){var b=[];if(this.visible_==a)return b;this.visible_=a;for(var c=0,d;d=this.fieldRow[c];c++)d.setVisible(a);this.connection&&(this.connection=this.connection,a?b=this.connection.startTrackingAll():this.connection.stopTrackingAll(),c=this.connection.targetBlock())&&(c.getSvgRoot().style.display=a?"block":"none");return b};Blockly.Input.prototype.markDirty=function(){for(var a=0,b;b=this.fieldRow[a];a++)b.markDirty()}; +Blockly.Input.prototype.setCheck=function(a){if(!this.connection)throw Error("This input does not have a connection.");this.connection.setCheck(a);return this};Blockly.Input.prototype.setAlign=function(a){this.align=a;this.sourceBlock_.rendered&&(this.sourceBlock_=this.sourceBlock_,this.sourceBlock_.render());return this};Blockly.Input.prototype.init=function(){if(this.sourceBlock_.workspace.rendered)for(var a=0;aa&&(e=e.substring(0,a-3)+"...");return e};Blockly.Block.prototype.appendValueInput=function(a){return this.appendInput_(Blockly.INPUT_VALUE,a)};Blockly.Block.prototype.appendStatementInput=function(a){return this.appendInput_(Blockly.NEXT_STATEMENT,a)};Blockly.Block.prototype.appendDummyInput=function(a){return this.appendInput_(Blockly.DUMMY_INPUT,a||"")}; +Blockly.Block.prototype.jsonInit=function(a){var b=a.type?'Block "'+a.type+'": ':"";if(a.output&&a.previousStatement)throw Error(b+"Must not have both an output and a previousStatement.");a.style&&a.style.hat&&(this.hat=a.style.hat,a.style=null);if(a.style&&a.colour)throw Error(b+"Must not have both a colour and a style.");a.style?this.jsonInitStyle_(a,b):this.jsonInitColour_(a,b);for(var c=0;void 0!==a["message"+c];)this.interpolate_(a["message"+c],a["args"+c]||[],a["lastDummyAlign"+c],b),c++;void 0!== +a.inputsInline&&this.setInputsInline(a.inputsInline);void 0!==a.output&&this.setOutput(!0,a.output);void 0!==a.outputShape&&this.setOutputShape(a.outputShape);void 0!==a.previousStatement&&this.setPreviousStatement(!0,a.previousStatement);void 0!==a.nextStatement&&this.setNextStatement(!0,a.nextStatement);void 0!==a.tooltip&&(c=a.tooltip,c=Blockly.utils.replaceMessageReferences(c),this.setTooltip(c));void 0!==a.enableContextMenu&&(c=a.enableContextMenu,this.contextMenu=!!c);void 0!==a.helpUrl&&(c= +a.helpUrl,c=Blockly.utils.replaceMessageReferences(c),this.setHelpUrl(c));"string"==typeof a.extensions&&(console.warn(b+"JSON attribute 'extensions' should be an array of strings. Found raw string in JSON for '"+a.type+"' block."),a.extensions=[a.extensions]);void 0!==a.mutator&&Blockly.Extensions.apply(a.mutator,this,!0);if(Array.isArray(a.extensions))for(a=a.extensions,b=0;b=k||k>b.length)throw Error('Block "'+this.type+'": Message index %'+k+" out of range.");if(f[k])throw Error('Block "'+this.type+'": Message index %'+k+" duplicated.");f[k]=!0;g++;a.push(b[k-1])}else(k=k.trim())&&a.push(k)}if(g!=b.length)throw Error('Block "'+this.type+'": Message does not reference all '+b.length+" arg(s)."); +a.length&&("string"==typeof a[a.length-1]||Blockly.utils.string.startsWith(a[a.length-1].type,"field_"))&&(h={type:"input_dummy"},c&&(h.align=c),a.push(h));c={LEFT:Blockly.ALIGN_LEFT,RIGHT:Blockly.ALIGN_RIGHT,CENTRE:Blockly.ALIGN_CENTRE,CENTER:Blockly.ALIGN_CENTRE};b=[];for(h=0;h=this.inputList.length)throw RangeError("Input index "+a+" out of bounds.");if(b>this.inputList.length)throw RangeError("Reference input "+b+" out of bounds.");var c=this.inputList[a];this.inputList.splice(a,1);aa?this.menuItems_.length:a,-1)};Blockly.Menu.prototype.highlightFirst_=function(){this.highlightHelper_(-1,1)};Blockly.Menu.prototype.highlightLast_=function(){this.highlightHelper_(this.menuItems_.length,-1)};Blockly.Menu.prototype.highlightHelper_=function(a,b){a+=b;for(var c;c=this.menuItems_[a];){if(c.isEnabled()){this.setHighlighted(c);break}a+=b}}; +Blockly.Menu.prototype.handleMouseOver_=function(a){(a=this.getMenuItem_(a.target))&&(a.isEnabled()?this.highlightedItem_!=a&&this.setHighlighted(a):this.setHighlighted(null))};Blockly.Menu.prototype.handleClick_=function(a){var b=this.openingCoords;this.openingCoords=null;if(b&&"number"==typeof a.clientX){var c=new Blockly.utils.Coordinate(a.clientX,a.clientY);if(1>Blockly.utils.Coordinate.distance(b,c))return}(a=this.getMenuItem_(a.target))&&a.performAction()}; +Blockly.Menu.prototype.handleMouseEnter_=function(a){this.focus()};Blockly.Menu.prototype.handleMouseLeave_=function(a){this.getElement()&&(this.blur_(),this.setHighlighted(null))}; +Blockly.Menu.prototype.handleKeyEvent_=function(a){if(this.menuItems_.length&&!(a.shiftKey||a.ctrlKey||a.metaKey||a.altKey)){var b=this.highlightedItem_;switch(a.keyCode){case Blockly.utils.KeyCodes.ENTER:case Blockly.utils.KeyCodes.SPACE:b&&b.performAction();break;case Blockly.utils.KeyCodes.UP:this.highlightPrevious();break;case Blockly.utils.KeyCodes.DOWN:this.highlightNext();break;case Blockly.utils.KeyCodes.PAGE_UP:case Blockly.utils.KeyCodes.HOME:this.highlightFirst_();break;case Blockly.utils.KeyCodes.PAGE_DOWN:case Blockly.utils.KeyCodes.END:this.highlightLast_(); +break;default:return}a.preventDefault();a.stopPropagation()}};Blockly.Menu.prototype.getSize=function(){var a=this.getElement(),b=Blockly.utils.style.getSize(a);b.height=a.scrollHeight;return b};Blockly.MenuItem=function(a,b){this.content_=a;this.value_=b;this.enabled_=!0;this.element_=null;this.rightToLeft_=!1;this.roleName_=null;this.highlight_=this.checked_=this.checkable_=!1;this.actionHandler_=null}; +Blockly.MenuItem.prototype.createDom=function(){var a=document.createElement("div");a.id=Blockly.utils.IdGenerator.getNextUniqueId();this.element_=a;a.className="blocklyMenuItem goog-menuitem "+(this.enabled_?"":"blocklyMenuItemDisabled goog-menuitem-disabled ")+(this.checked_?"blocklyMenuItemSelected goog-option-selected ":"")+(this.highlight_?"blocklyMenuItemHighlight goog-menuitem-highlight ":"")+(this.rightToLeft_?"blocklyMenuItemRtl goog-menuitem-rtl ":"");var b=document.createElement("div"); +b.className="blocklyMenuItemContent goog-menuitem-content";if(this.checkable_){var c=document.createElement("div");c.className="blocklyMenuItemCheckbox goog-menuitem-checkbox";b.appendChild(c)}c=this.content_;"string"==typeof this.content_&&(c=document.createTextNode(this.content_));b.appendChild(c);a.appendChild(b);this.roleName_&&Blockly.utils.aria.setRole(a,this.roleName_);Blockly.utils.aria.setState(a,Blockly.utils.aria.State.SELECTED,this.checkable_&&this.checked_||!1);Blockly.utils.aria.setState(a, +Blockly.utils.aria.State.DISABLED,!this.enabled_);return a};Blockly.MenuItem.prototype.dispose=function(){this.element_=null};Blockly.MenuItem.prototype.getElement=function(){return this.element_};Blockly.MenuItem.prototype.getId=function(){return this.element_.id};Blockly.MenuItem.prototype.getValue=function(){return this.value_};Blockly.MenuItem.prototype.setRightToLeft=function(a){this.rightToLeft_=a};Blockly.MenuItem.prototype.setRole=function(a){this.roleName_=a}; +Blockly.MenuItem.prototype.setCheckable=function(a){this.checkable_=a};Blockly.MenuItem.prototype.setChecked=function(a){this.checked_=a};Blockly.MenuItem.prototype.setHighlighted=function(a){this.highlight_=a;var b=this.getElement();b&&this.isEnabled()&&(a?(Blockly.utils.dom.addClass(b,"blocklyMenuItemHighlight"),Blockly.utils.dom.addClass(b,"goog-menuitem-highlight")):(Blockly.utils.dom.removeClass(b,"blocklyMenuItemHighlight"),Blockly.utils.dom.removeClass(b,"goog-menuitem-highlight")))}; +Blockly.MenuItem.prototype.isEnabled=function(){return this.enabled_};Blockly.MenuItem.prototype.setEnabled=function(a){this.enabled_=a};Blockly.MenuItem.prototype.performAction=function(){this.isEnabled()&&this.actionHandler_&&this.actionHandler_(this)};Blockly.MenuItem.prototype.onAction=function(a,b){this.actionHandler_=a.bind(b)};Blockly.ContextMenu={};Blockly.ContextMenu.currentBlock=null;Blockly.ContextMenu.menu_=null;Blockly.ContextMenu.show=function(a,b,c){Blockly.WidgetDiv.show(Blockly.ContextMenu,c,Blockly.ContextMenu.dispose);if(b.length){var d=Blockly.ContextMenu.populate_(b,c);Blockly.ContextMenu.menu_=d;Blockly.ContextMenu.position_(d,a,c);setTimeout(function(){d.focus()},1);Blockly.ContextMenu.currentBlock=null}else Blockly.ContextMenu.hide()}; +Blockly.ContextMenu.populate_=function(a,b){var c=new Blockly.Menu;c.setRole(Blockly.utils.aria.Role.MENU);for(var d=0,e;e=a[d];d++){var f=new Blockly.MenuItem(e.text);f.setRightToLeft(b);f.setRole(Blockly.utils.aria.Role.MENUITEM);c.addChild(f);f.setEnabled(e.enabled);if(e.enabled)f.onAction(function(a){Blockly.ContextMenu.hide();this.callback()},e)}return c}; +Blockly.ContextMenu.position_=function(a,b,c){var d=Blockly.utils.getViewportBBox();b=new Blockly.utils.Rect(b.clientY+d.top,b.clientY+d.top,b.clientX+d.left,b.clientX+d.left);Blockly.ContextMenu.createWidget_(a);var e=a.getSize();c&&(b.left+=e.width,b.right+=e.width,d.left+=e.width,d.right+=e.width);Blockly.WidgetDiv.positionWithAnchor(d,b,e,c);a.focus()}; +Blockly.ContextMenu.createWidget_=function(a){a.render(Blockly.WidgetDiv.DIV);var b=a.getElement();Blockly.utils.dom.addClass(b,"blocklyContextMenu");Blockly.bindEventWithChecks_(b,"contextmenu",null,Blockly.utils.noEvent);a.focus()};Blockly.ContextMenu.hide=function(){Blockly.WidgetDiv.hideIfOwner(Blockly.ContextMenu);Blockly.ContextMenu.currentBlock=null};Blockly.ContextMenu.dispose=function(){Blockly.ContextMenu.menu_&&(Blockly.ContextMenu.menu_.dispose(),Blockly.ContextMenu.menu_=null)}; +Blockly.ContextMenu.callbackFactory=function(a,b){return function(){Blockly.Events.disable();try{var c=Blockly.Xml.domToBlock(b,a.workspace),d=a.getRelativeToSurfaceXY();d.x=a.RTL?d.x-Blockly.SNAP_RADIUS:d.x+Blockly.SNAP_RADIUS;d.y+=2*Blockly.SNAP_RADIUS;c.moveBy(d.x,d.y)}finally{Blockly.Events.enable()}Blockly.Events.isEnabled()&&!c.isShadow()&&Blockly.Events.fire(new Blockly.Events.BlockCreate(c));c.select()}}; +Blockly.ContextMenu.blockDeleteOption=function(a){var b=a.getDescendants(!1).length,c=a.getNextBlock();c&&(b-=c.getDescendants(!1).length);return{text:1==b?Blockly.Msg.DELETE_BLOCK:Blockly.Msg.DELETE_X_BLOCKS.replace("%1",String(b)),enabled:!0,callback:function(){Blockly.Events.setGroup(!0);a.dispose(!0,!0);Blockly.Events.setGroup(!1)}}};Blockly.ContextMenu.blockHelpOption=function(a){return{enabled:!("function"==typeof a.helpUrl?!a.helpUrl():!a.helpUrl),text:Blockly.Msg.HELP,callback:function(){a.showHelp()}}}; +Blockly.ContextMenu.blockDuplicateOption=function(a){var b=a.isDuplicatable();return{text:Blockly.Msg.DUPLICATE_BLOCK,enabled:b,callback:function(){Blockly.duplicate(a)}}};Blockly.ContextMenu.blockCommentOption=function(a){var b={enabled:!Blockly.utils.userAgent.IE};a.getCommentIcon()?(b.text=Blockly.Msg.REMOVE_COMMENT,b.callback=function(){a.setCommentText(null)}):(b.text=Blockly.Msg.ADD_COMMENT,b.callback=function(){a.setCommentText("")});return b}; +Blockly.ContextMenu.commentDeleteOption=function(a){return{text:Blockly.Msg.REMOVE_COMMENT,enabled:!0,callback:function(){Blockly.Events.setGroup(!0);a.dispose(!0,!0);Blockly.Events.setGroup(!1)}}};Blockly.ContextMenu.commentDuplicateOption=function(a){return{text:Blockly.Msg.DUPLICATE_COMMENT,enabled:!0,callback:function(){Blockly.duplicate(a)}}}; +Blockly.ContextMenu.workspaceCommentOption=function(a,b){if(!Blockly.WorkspaceCommentSvg)throw Error("Missing require for Blockly.WorkspaceCommentSvg");var c={enabled:!Blockly.utils.userAgent.IE};c.text=Blockly.Msg.ADD_COMMENT;c.callback=function(){var c=new Blockly.WorkspaceCommentSvg(a,Blockly.Msg.WORKSPACE_COMMENT_DEFAULT_TEXT,Blockly.WorkspaceCommentSvg.DEFAULT_SIZE,Blockly.WorkspaceCommentSvg.DEFAULT_SIZE),e=a.getInjectionDiv().getBoundingClientRect();e=new Blockly.utils.Coordinate(b.clientX- +e.left,b.clientY-e.top);var f=a.getOriginOffsetInPixels();e=Blockly.utils.Coordinate.difference(e,f);e.scale(1/a.scale);c.moveBy(e.x,e.y);a.rendered&&(c.initSvg(),c.render(),c.select())};return c};Blockly.RenderedConnection=function(a,b){Blockly.RenderedConnection.superClass_.constructor.call(this,a,b);this.db_=a.workspace.connectionDBList[b];this.dbOpposite_=a.workspace.connectionDBList[Blockly.OPPOSITE_TYPE[b]];this.offsetInBlock_=new Blockly.utils.Coordinate(0,0);this.trackedState_=Blockly.RenderedConnection.TrackedState.WILL_TRACK;this.targetConnection=null};Blockly.utils.object.inherits(Blockly.RenderedConnection,Blockly.Connection); +Blockly.RenderedConnection.TrackedState={WILL_TRACK:-1,UNTRACKED:0,TRACKED:1};Blockly.RenderedConnection.prototype.dispose=function(){Blockly.RenderedConnection.superClass_.dispose.call(this);this.trackedState_==Blockly.RenderedConnection.TrackedState.TRACKED&&this.db_.removeConnection(this,this.y)};Blockly.RenderedConnection.prototype.getSourceBlock=function(){return Blockly.RenderedConnection.superClass_.getSourceBlock.call(this)};Blockly.RenderedConnection.prototype.targetBlock=function(){return Blockly.RenderedConnection.superClass_.targetBlock.call(this)}; +Blockly.RenderedConnection.prototype.distanceFrom=function(a){var b=this.x-a.x;a=this.y-a.y;return Math.sqrt(b*b+a*a)}; +Blockly.RenderedConnection.prototype.bumpAwayFrom=function(a){if(!this.sourceBlock_.workspace.isDragging()){var b=this.sourceBlock_.getRootBlock();if(!b.isInFlyout){var c=!1;if(!b.isMovable()){b=a.getSourceBlock().getRootBlock();if(!b.isMovable())return;a=this;c=!0}var d=Blockly.selected==b;d||b.addSelect();var e=a.x+Blockly.SNAP_RADIUS+Math.floor(Math.random()*Blockly.BUMP_RANDOMNESS)-this.x,f=a.y+Blockly.SNAP_RADIUS+Math.floor(Math.random()*Blockly.BUMP_RANDOMNESS)-this.y;c&&(f=-f);b.RTL&&(e=a.x- +Blockly.SNAP_RADIUS-Math.floor(Math.random()*Blockly.BUMP_RANDOMNESS)-this.x);b.moveBy(e,f);d||b.removeSelect()}}}; +Blockly.RenderedConnection.prototype.moveTo=function(a,b){this.trackedState_==Blockly.RenderedConnection.TrackedState.WILL_TRACK?(this.db_.addConnection(this,b),this.trackedState_=Blockly.RenderedConnection.TrackedState.TRACKED):this.trackedState_==Blockly.RenderedConnection.TrackedState.TRACKED&&(this.db_.removeConnection(this,this.y),this.db_.addConnection(this,b));this.x=a;this.y=b};Blockly.RenderedConnection.prototype.moveBy=function(a,b){this.moveTo(this.x+a,this.y+b)}; +Blockly.RenderedConnection.prototype.moveToOffset=function(a){this.moveTo(a.x+this.offsetInBlock_.x,a.y+this.offsetInBlock_.y)};Blockly.RenderedConnection.prototype.setOffsetInBlock=function(a,b){this.offsetInBlock_.x=a;this.offsetInBlock_.y=b};Blockly.RenderedConnection.prototype.getOffsetInBlock=function(){return this.offsetInBlock_}; +Blockly.RenderedConnection.prototype.tighten=function(){var a=this.targetConnection.x-this.x,b=this.targetConnection.y-this.y;if(0!=a||0!=b){var c=this.targetBlock(),d=c.getSvgRoot();if(!d)throw Error("block is not rendered.");d=Blockly.utils.getRelativeXY(d);c.getSvgRoot().setAttribute("transform","translate("+(d.x-a)+","+(d.y-b)+")");c.moveConnections(-a,-b)}};Blockly.RenderedConnection.prototype.closest=function(a,b){return this.dbOpposite_.searchForClosest(this,a,b)}; +Blockly.RenderedConnection.prototype.highlight=function(){var a=this.sourceBlock_.workspace.getRenderer().getConstants();var b=a.shapeFor(this);this.type==Blockly.INPUT_VALUE||this.type==Blockly.OUTPUT_VALUE?(a=a.TAB_OFFSET_FROM_TOP,b=Blockly.utils.svgPaths.moveBy(0,-a)+Blockly.utils.svgPaths.lineOnAxis("v",a)+b.pathDown+Blockly.utils.svgPaths.lineOnAxis("v",a)):(a=a.NOTCH_OFFSET_LEFT-a.CORNER_RADIUS,b=Blockly.utils.svgPaths.moveBy(-a,0)+Blockly.utils.svgPaths.lineOnAxis("h",a)+b.pathLeft+Blockly.utils.svgPaths.lineOnAxis("h", +a));a=this.sourceBlock_.getRelativeToSurfaceXY();Blockly.Connection.highlightedPath_=Blockly.utils.dom.createSvgElement("path",{"class":"blocklyHighlightedConnectionPath",d:b,transform:"translate("+(this.x-a.x)+","+(this.y-a.y)+")"+(this.sourceBlock_.RTL?" scale(-1 1)":"")},this.sourceBlock_.getSvgRoot())};Blockly.RenderedConnection.prototype.unhighlight=function(){Blockly.utils.dom.removeNode(Blockly.Connection.highlightedPath_);delete Blockly.Connection.highlightedPath_}; +Blockly.RenderedConnection.prototype.setTracking=function(a){a&&this.trackedState_==Blockly.RenderedConnection.TrackedState.TRACKED||!a&&this.trackedState_==Blockly.RenderedConnection.TrackedState.UNTRACKED||this.sourceBlock_.isInFlyout||(a?(this.db_.addConnection(this,this.y),this.trackedState_=Blockly.RenderedConnection.TrackedState.TRACKED):(this.trackedState_==Blockly.RenderedConnection.TrackedState.TRACKED&&this.db_.removeConnection(this,this.y),this.trackedState_=Blockly.RenderedConnection.TrackedState.UNTRACKED))}; +Blockly.RenderedConnection.prototype.stopTrackingAll=function(){this.setTracking(!1);if(this.targetConnection)for(var a=this.targetBlock().getDescendants(!1),b=0;bb?!1:Blockly.RenderedConnection.superClass_.isConnectionAllowed.call(this,a)};Blockly.RenderedConnection.prototype.onFailedConnect=function(a){this.bumpAwayFrom(a)}; +Blockly.RenderedConnection.prototype.disconnectInternal_=function(a,b){Blockly.RenderedConnection.superClass_.disconnectInternal_.call(this,a,b);a.rendered&&a.render();b.rendered&&(b.updateDisabled(),b.render(),b.getSvgRoot().style.display="block")}; +Blockly.RenderedConnection.prototype.respawnShadow_=function(){var a=this.getSourceBlock(),b=this.getShadowDom();if(a.workspace&&b&&Blockly.Events.recordUndo){Blockly.RenderedConnection.superClass_.respawnShadow_.call(this);b=this.targetBlock();if(!b)throw Error("Couldn't respawn the shadow block that should exist here.");b.initSvg();b.render(!1);a.rendered&&a.render()}};Blockly.RenderedConnection.prototype.neighbours=function(a){return this.dbOpposite_.getNeighbours(this,a)}; +Blockly.RenderedConnection.prototype.connect_=function(a){Blockly.RenderedConnection.superClass_.connect_.call(this,a);var b=this.getSourceBlock();a=a.getSourceBlock();var c=b.rendered,d=a.rendered;c&&b.updateDisabled();d&&a.updateDisabled();c&&d&&(this.type==Blockly.NEXT_STATEMENT||this.type==Blockly.PREVIOUS_STATEMENT?a.render():b.render());if(b=b.getInputWithBlock(a))b=b.isVisible(),a.getSvgRoot().style.display=b?"block":"none"}; +Blockly.RenderedConnection.prototype.onCheckChanged_=function(){!this.isConnected()||this.targetConnection&&this.checkType(this.targetConnection)||((this.isSuperior()?this.targetBlock():this.sourceBlock_).unplug(),this.sourceBlock_.bumpNeighbours())};Blockly.Marker=function(){this.drawer_=this.curNode_=this.colour=null;this.type="marker"};Blockly.Marker.prototype.setDrawer=function(a){this.drawer_=a};Blockly.Marker.prototype.getDrawer=function(){return this.drawer_};Blockly.Marker.prototype.getCurNode=function(){return this.curNode_};Blockly.Marker.prototype.setCurNode=function(a){var b=this.curNode_;this.curNode_=a;this.drawer_&&this.drawer_.draw(b,this.curNode_)}; +Blockly.Marker.prototype.draw=function(){this.drawer_&&this.drawer_.draw(this.curNode_,this.curNode_)};Blockly.Marker.prototype.hide=function(){this.drawer_&&this.drawer_.hide()};Blockly.Marker.prototype.dispose=function(){this.getDrawer()&&this.getDrawer().dispose()};Blockly.Cursor=function(){Blockly.Cursor.superClass_.constructor.call(this);this.type="cursor"};Blockly.utils.object.inherits(Blockly.Cursor,Blockly.Marker);Blockly.Cursor.prototype.next=function(){var a=this.getCurNode();if(!a)return null;for(a=a.next();a&&a.next()&&(a.getType()==Blockly.ASTNode.types.NEXT||a.getType()==Blockly.ASTNode.types.BLOCK);)a=a.next();a&&this.setCurNode(a);return a}; +Blockly.Cursor.prototype.in=function(){var a=this.getCurNode();if(!a)return null;if(a.getType()==Blockly.ASTNode.types.PREVIOUS||a.getType()==Blockly.ASTNode.types.OUTPUT)a=a.next();(a=a.in())&&this.setCurNode(a);return a};Blockly.Cursor.prototype.prev=function(){var a=this.getCurNode();if(!a)return null;for(a=a.prev();a&&a.prev()&&(a.getType()==Blockly.ASTNode.types.NEXT||a.getType()==Blockly.ASTNode.types.BLOCK);)a=a.prev();a&&this.setCurNode(a);return a}; +Blockly.Cursor.prototype.out=function(){var a=this.getCurNode();if(!a)return null;(a=a.out())&&a.getType()==Blockly.ASTNode.types.BLOCK&&(a=a.prev()||a);a&&this.setCurNode(a);return a}; +Blockly.Cursor.prototype.onBlocklyAction=function(a){if(this.getCurNode()&&this.getCurNode().getType()===Blockly.ASTNode.types.FIELD&&this.getCurNode().getLocation().onBlocklyAction(a))return!0;switch(a.name){case Blockly.navigation.actionNames.PREVIOUS:return this.prev(),!0;case Blockly.navigation.actionNames.OUT:return this.out(),!0;case Blockly.navigation.actionNames.NEXT:return this.next(),!0;case Blockly.navigation.actionNames.IN:return this.in(),!0;default:return!1}};Blockly.BasicCursor=function(){Blockly.BasicCursor.superClass_.constructor.call(this)};Blockly.utils.object.inherits(Blockly.BasicCursor,Blockly.Cursor);Blockly.BasicCursor.prototype.next=function(){var a=this.getCurNode();if(!a)return null;(a=this.getNextNode_(a,this.validNode_))&&this.setCurNode(a);return a};Blockly.BasicCursor.prototype.in=function(){return this.next()}; +Blockly.BasicCursor.prototype.prev=function(){var a=this.getCurNode();if(!a)return null;(a=this.getPreviousNode_(a,this.validNode_))&&this.setCurNode(a);return a};Blockly.BasicCursor.prototype.out=function(){return this.prev()};Blockly.BasicCursor.prototype.getNextNode_=function(a,b){if(!a)return null;var c=a.in()||a.next();if(b(c))return c;if(c)return this.getNextNode_(c,b);a=this.findSiblingOrParent_(a.out());return b(a)?a:a?this.getNextNode_(a,b):null}; +Blockly.BasicCursor.prototype.getPreviousNode_=function(a,b){if(!a)return null;var c=a.prev();c=c?this.getRightMostChild_(c):a.out();return b(c)?c:c?this.getPreviousNode_(c,b):null};Blockly.BasicCursor.prototype.validNode_=function(a){var b=!1;a=a&&a.getType();if(a==Blockly.ASTNode.types.OUTPUT||a==Blockly.ASTNode.types.INPUT||a==Blockly.ASTNode.types.FIELD||a==Blockly.ASTNode.types.NEXT||a==Blockly.ASTNode.types.PREVIOUS||a==Blockly.ASTNode.types.WORKSPACE)b=!0;return b}; +Blockly.BasicCursor.prototype.findSiblingOrParent_=function(a){if(!a)return null;var b=a.next();return b?b:this.findSiblingOrParent_(a.out())};Blockly.BasicCursor.prototype.getRightMostChild_=function(a){if(!a.in())return a;for(a=a.in();a.next();)a=a.next();return this.getRightMostChild_(a)};Blockly.TabNavigateCursor=function(){Blockly.TabNavigateCursor.superClass_.constructor.call(this)};Blockly.utils.object.inherits(Blockly.TabNavigateCursor,Blockly.BasicCursor);Blockly.TabNavigateCursor.prototype.validNode_=function(a){var b=!1,c=a&&a.getType();a&&(a=a.getLocation(),c==Blockly.ASTNode.types.FIELD&&a&&a.isTabNavigable()&&a.isClickable()&&(b=!0));return b};Blockly.BlockSvg=function(a,b,c){this.svgGroup_=Blockly.utils.dom.createSvgElement("g",{},null);this.svgGroup_.translate_="";this.style=a.getRenderer().getConstants().getBlockStyle(null);this.pathObject=a.getRenderer().makePathObject(this.svgGroup_,this.style);this.renderIsInProgress_=this.rendered=!1;this.workspace=a;this.previousConnection=this.nextConnection=this.outputConnection=null;this.useDragSurface_=Blockly.utils.is3dSupported()&&!!a.getBlockDragSurface();var d=this.pathObject.svgPath;d.tooltip= +this;Blockly.Tooltip.bindMouseEvents(d);Blockly.BlockSvg.superClass_.constructor.call(this,a,b,c);this.svgGroup_.dataset&&(this.svgGroup_.dataset.id=this.id)};Blockly.utils.object.inherits(Blockly.BlockSvg,Blockly.Block);Blockly.BlockSvg.prototype.height=0;Blockly.BlockSvg.prototype.width=0;Blockly.BlockSvg.prototype.warningTextDb_=null;Blockly.BlockSvg.INLINE=-1;Blockly.BlockSvg.COLLAPSED_WARNING_ID="TEMP_COLLAPSED_WARNING_"; +Blockly.BlockSvg.prototype.initSvg=function(){if(!this.workspace.rendered)throw TypeError("Workspace is headless.");for(var a=0,b;b=this.inputList[a];a++)b.init();b=this.getIcons();for(a=0;a=this.connections_.length)return-1;b=a.y;for(var d=c;0<=d&&this.connections_[d].y==b;){if(this.connections_[d]==a)return d;d--}for(;ca)c=d;else{b=d;break}}return b};Blockly.ConnectionDB.prototype.removeConnection=function(a,b){a=this.findIndexOfConnection_(a,b);if(-1==a)throw Error("Unable to find connection in connectionDB.");this.connections_.splice(a,1)}; +Blockly.ConnectionDB.prototype.getNeighbours=function(a,b){function c(a){var c=e-d[a].x,g=f-d[a].y;Math.sqrt(c*c+g*g)<=b&&k.push(d[a]);return ga)throw Error("Cannot unsubscribe a workspace that hasn't been subscribed.");this.subscribedWorkspaces_.splice(a,1)}; +Blockly.ThemeManager.prototype.subscribe=function(a,b,c){this.componentDB_[b]||(this.componentDB_[b]=[]);this.componentDB_[b].push({element:a,propertyName:c});b=this.theme_&&this.theme_.getComponentStyle(b);a.style[c]=b||""};Blockly.ThemeManager.prototype.unsubscribe=function(a){if(a)for(var b=Object.keys(this.componentDB_),c=0,d;d=b[c];c++){for(var e=this.componentDB_[d],f=e.length-1;0<=f;f--)e[f].element===a&&e.splice(f,1);this.componentDB_[d].length||delete this.componentDB_[d]}}; +Blockly.ThemeManager.prototype.dispose=function(){this.componentDB_=this.subscribedWorkspaces_=this.theme_=this.owner_=null};Blockly.TouchGesture=function(a,b){Blockly.TouchGesture.superClass_.constructor.call(this,a,b);this.isMultiTouch_=!1;this.cachedPoints_=Object.create(null);this.startDistance_=this.previousScale_=0;this.isPinchZoomEnabled_=this.onStartWrapper_=null};Blockly.utils.object.inherits(Blockly.TouchGesture,Blockly.Gesture);Blockly.TouchGesture.ZOOM_IN_MULTIPLIER=5;Blockly.TouchGesture.ZOOM_OUT_MULTIPLIER=6; +Blockly.TouchGesture.prototype.doStart=function(a){this.isPinchZoomEnabled_=this.startWorkspace_.options.zoomOptions&&this.startWorkspace_.options.zoomOptions.pinch;Blockly.TouchGesture.superClass_.doStart.call(this,a);!this.isEnding_&&Blockly.Touch.isTouchEvent(a)&&this.handleTouchStart(a)}; +Blockly.TouchGesture.prototype.bindMouseEvents=function(a){this.onStartWrapper_=Blockly.bindEventWithChecks_(document,"mousedown",null,this.handleStart.bind(this),!0);this.onMoveWrapper_=Blockly.bindEventWithChecks_(document,"mousemove",null,this.handleMove.bind(this),!0);this.onUpWrapper_=Blockly.bindEventWithChecks_(document,"mouseup",null,this.handleUp.bind(this),!0);a.preventDefault();a.stopPropagation()}; +Blockly.TouchGesture.prototype.handleStart=function(a){!this.isDragging()&&Blockly.Touch.isTouchEvent(a)&&(this.handleTouchStart(a),this.isMultiTouch()&&Blockly.longStop_())};Blockly.TouchGesture.prototype.handleMove=function(a){this.isDragging()?Blockly.Touch.shouldHandleEvent(a)&&Blockly.TouchGesture.superClass_.handleMove.call(this,a):this.isMultiTouch()?(Blockly.Touch.isTouchEvent(a)&&this.handleTouchMove(a),Blockly.longStop_()):Blockly.TouchGesture.superClass_.handleMove.call(this,a)}; +Blockly.TouchGesture.prototype.handleUp=function(a){Blockly.Touch.isTouchEvent(a)&&!this.isDragging()&&this.handleTouchEnd(a);!this.isMultiTouch()||this.isDragging()?Blockly.Touch.shouldHandleEvent(a)&&Blockly.TouchGesture.superClass_.handleUp.call(this,a):(a.preventDefault(),a.stopPropagation(),this.dispose())};Blockly.TouchGesture.prototype.isMultiTouch=function(){return this.isMultiTouch_}; +Blockly.TouchGesture.prototype.dispose=function(){Blockly.TouchGesture.superClass_.dispose.call(this);this.onStartWrapper_&&Blockly.unbindEvent_(this.onStartWrapper_)};Blockly.TouchGesture.prototype.handleTouchStart=function(a){var b=Blockly.Touch.getTouchIdentifierFromEvent(a);this.cachedPoints_[b]=this.getTouchPoint(a);b=Object.keys(this.cachedPoints_);2==b.length&&(this.startDistance_=Blockly.utils.Coordinate.distance(this.cachedPoints_[b[0]],this.cachedPoints_[b[1]]),this.isMultiTouch_=!0,a.preventDefault())}; +Blockly.TouchGesture.prototype.handleTouchMove=function(a){var b=Blockly.Touch.getTouchIdentifierFromEvent(a);this.cachedPoints_[b]=this.getTouchPoint(a);b=Object.keys(this.cachedPoints_);this.isPinchZoomEnabled_&&2===b.length?this.handlePinch_(a):Blockly.TouchGesture.superClass_.handleMove.call(this,a)}; +Blockly.TouchGesture.prototype.handlePinch_=function(a){var b=Object.keys(this.cachedPoints_);b=Blockly.utils.Coordinate.distance(this.cachedPoints_[b[0]],this.cachedPoints_[b[1]])/this.startDistance_;if(0this.previousScale_){var c=b-this.previousScale_;c=0Object.keys(this.cachedPoints_).length&&(this.cachedPoints_=Object.create(null),this.previousScale_=0)};Blockly.TouchGesture.prototype.getTouchPoint=function(a){return this.startWorkspace_?new Blockly.utils.Coordinate(a.pageX?a.pageX:a.changedTouches[0].pageX,a.pageY?a.pageY:a.changedTouches[0].pageY):null};Blockly.WorkspaceAudio=function(a){this.parentWorkspace_=a;this.SOUNDS_=Object.create(null)};Blockly.WorkspaceAudio.prototype.lastSound_=null;Blockly.WorkspaceAudio.prototype.dispose=function(){this.SOUNDS_=this.parentWorkspace_=null}; +Blockly.WorkspaceAudio.prototype.load=function(a,b){if(a.length){try{var c=new Blockly.utils.global.Audio}catch(h){return}for(var d,e=0;e=this.remainingCapacity()||(this.currentGesture_&&this.currentGesture_.cancel(),"comment"==a.tagName.toLowerCase()?this.pasteWorkspaceComment_(a):this.pasteBlock_(a))}; +Blockly.WorkspaceSvg.prototype.pasteBlock_=function(a){Blockly.Events.disable();try{var b=Blockly.Xml.domToBlock(a,this),c=this.getMarker(Blockly.navigation.MARKER_NAME).getCurNode();if(this.keyboardAccessibilityMode&&c&&c.isConnection()){var d=c.getLocation();Blockly.navigation.insertBlock(b,d);return}var e=parseInt(a.getAttribute("x"),10),f=parseInt(a.getAttribute("y"),10);if(!isNaN(e)&&!isNaN(f)){this.RTL&&(e=-e);do{a=!1;var g=this.getAllBlocks(!1);c=0;for(var h;h=g[c];c++){var k=h.getRelativeToSurfaceXY(); +if(1>=Math.abs(e-k.x)&&1>=Math.abs(f-k.y)){a=!0;break}}if(!a){var l=b.getConnections_(!1);c=0;for(var m;m=l[c];c++)if(m.closest(Blockly.SNAP_RADIUS,new Blockly.utils.Coordinate(e,f)).connection){a=!0;break}}a&&(e=this.RTL?e-Blockly.SNAP_RADIUS:e+Blockly.SNAP_RADIUS,f+=2*Blockly.SNAP_RADIUS)}while(a);b.moveBy(e,f)}}finally{Blockly.Events.enable()}Blockly.Events.isEnabled()&&!b.isShadow()&&Blockly.Events.fire(new Blockly.Events.BlockCreate(b));b.select()}; +Blockly.WorkspaceSvg.prototype.pasteWorkspaceComment_=function(a){Blockly.Events.disable();try{var b=Blockly.WorkspaceCommentSvg.fromXml(a,this),c=parseInt(a.getAttribute("x"),10),d=parseInt(a.getAttribute("y"),10);isNaN(c)||isNaN(d)||(this.RTL&&(c=-c),b.moveBy(c+50,d+50))}finally{Blockly.Events.enable()}Blockly.Events.isEnabled();b.select()}; +Blockly.WorkspaceSvg.prototype.refreshToolboxSelection=function(){var a=this.isFlyout?this.targetWorkspace:this;a&&!a.currentGesture_&&a.toolbox_&&a.toolbox_.getFlyout()&&a.toolbox_.refreshSelection()};Blockly.WorkspaceSvg.prototype.renameVariableById=function(a,b){Blockly.WorkspaceSvg.superClass_.renameVariableById.call(this,a,b);this.refreshToolboxSelection()};Blockly.WorkspaceSvg.prototype.deleteVariableById=function(a){Blockly.WorkspaceSvg.superClass_.deleteVariableById.call(this,a);this.refreshToolboxSelection()}; +Blockly.WorkspaceSvg.prototype.createVariable=function(a,b,c){a=Blockly.WorkspaceSvg.superClass_.createVariable.call(this,a,b,c);this.refreshToolboxSelection();return a};Blockly.WorkspaceSvg.prototype.recordDeleteAreas=function(){this.deleteAreaTrash_=this.trashcan&&this.svgGroup_.parentNode?this.trashcan.getClientRect():null;this.deleteAreaToolbox_=this.flyout_?this.flyout_.getClientRect():this.toolbox_&&"function"==typeof this.toolbox_.getClientRect?this.toolbox_.getClientRect():null}; +Blockly.WorkspaceSvg.prototype.isDeleteArea=function(a){return this.deleteAreaTrash_&&this.deleteAreaTrash_.contains(a.clientX,a.clientY)?Blockly.DELETE_AREA_TRASH:this.deleteAreaToolbox_&&this.deleteAreaToolbox_.contains(a.clientX,a.clientY)?Blockly.DELETE_AREA_TOOLBOX:Blockly.DELETE_AREA_NONE};Blockly.WorkspaceSvg.prototype.onMouseDown_=function(a){var b=this.getGesture(a);b&&b.handleWsStart(a,this)}; +Blockly.WorkspaceSvg.prototype.startDrag=function(a,b){a=Blockly.utils.mouseToSvg(a,this.getParentSvg(),this.getInverseScreenCTM());a.x/=this.scale;a.y/=this.scale;this.dragDeltaXY_=Blockly.utils.Coordinate.difference(b,a)};Blockly.WorkspaceSvg.prototype.moveDrag=function(a){a=Blockly.utils.mouseToSvg(a,this.getParentSvg(),this.getInverseScreenCTM());a.x/=this.scale;a.y/=this.scale;return Blockly.utils.Coordinate.sum(this.dragDeltaXY_,a)}; +Blockly.WorkspaceSvg.prototype.isDragging=function(){return null!=this.currentGesture_&&this.currentGesture_.isDragging()};Blockly.WorkspaceSvg.prototype.isDraggable=function(){return this.options.moveOptions&&this.options.moveOptions.drag}; +Blockly.WorkspaceSvg.prototype.isContentBounded=function(){return this.options.moveOptions&&this.options.moveOptions.scrollbars||this.options.moveOptions&&this.options.moveOptions.wheel||this.options.moveOptions&&this.options.moveOptions.drag||this.options.zoomOptions&&this.options.zoomOptions.controls||this.options.zoomOptions&&this.options.zoomOptions.wheel||this.options.zoomOptions&&this.options.zoomOptions.pinch}; +Blockly.WorkspaceSvg.prototype.isMovable=function(){return this.options.moveOptions&&this.options.moveOptions.scrollbars||this.options.moveOptions&&this.options.moveOptions.wheel||this.options.moveOptions&&this.options.moveOptions.drag||this.options.zoomOptions&&this.options.zoomOptions.wheel||this.options.zoomOptions&&this.options.zoomOptions.pinch}; +Blockly.WorkspaceSvg.prototype.onMouseWheel_=function(a){if(Blockly.Gesture.inProgress())a.preventDefault(),a.stopPropagation();else{var b=this.options.zoomOptions&&this.options.zoomOptions.wheel,c=this.options.moveOptions&&this.options.moveOptions.wheel;if(b||c){var d=Blockly.utils.getScrollDeltaPixels(a);!b||!a.ctrlKey&&c?(b=this.scrollX-d.x,c=this.scrollY-d.y,a.shiftKey&&!d.x&&(b=this.scrollX-d.y,c=this.scrollY),this.scroll(b,c)):(d=-d.y/50,b=Blockly.utils.mouseToSvg(a,this.getParentSvg(),this.getInverseScreenCTM()), +this.zoom(b.x,b.y,d));a.preventDefault()}}};Blockly.WorkspaceSvg.prototype.getBlocksBoundingBox=function(){var a=this.getTopBoundedElements();if(!a.length)return new Blockly.utils.Rect(0,0,0,0);for(var b=a[0].getBoundingRectangle(),c=1;cb.bottom&&(b.bottom=d.bottom);d.leftb.right&&(b.right=d.right)}return b}; +Blockly.WorkspaceSvg.prototype.cleanUp=function(){this.setResizesEnabled(!1);Blockly.Events.setGroup(!0);for(var a=this.getTopBlocks(!0),b=0,c=0,d;d=a[c];c++)if(d.isMovable()){var e=d.getRelativeToSurfaceXY();d.moveBy(-e.x,b-e.y);d.snapToGrid();b=d.getRelativeToSurfaceXY().y+d.getHeightWidth().height+this.renderer_.getConstants().MIN_BLOCK_HEIGHT}Blockly.Events.setGroup(!1);this.setResizesEnabled(!0)}; +Blockly.WorkspaceSvg.prototype.showContextMenu=function(a){function b(a){if(a.isDeletable())p=p.concat(a.getDescendants(!1));else{a=a.getChildren(!1);for(var c=0;cp.length?c():Blockly.confirm(Blockly.Msg.DELETE_ALL_BLOCKS.replace("%1",p.length),function(a){a&& +c()})}};d.push(h);this.configureContextMenu&&this.configureContextMenu(d,a);Blockly.ContextMenu.show(a,d,this.RTL)}}; +Blockly.WorkspaceSvg.prototype.updateToolbox=function(a){Array.isArray(a)||(a=Blockly.Options.parseToolboxTree(a));if(a=Blockly.utils.toolbox.convertToolboxToJSON(a)){if(!this.options.languageTree)throw Error("Existing toolbox is null. Can't create new toolbox.");if(Blockly.utils.toolbox.hasCategories(a)){if(!this.toolbox_)throw Error("Existing toolbox has no categories. Can't change mode.");this.options.languageTree=a;this.toolbox_.render(a)}else{if(!this.flyout_)throw Error("Existing toolbox has categories. Can't change mode."); +this.options.languageTree=a;this.flyout_.show(a)}}else if(this.options.languageTree)throw Error("Can't nullify an existing toolbox.");};Blockly.WorkspaceSvg.prototype.markFocused=function(){this.options.parentWorkspace?this.options.parentWorkspace.markFocused():(Blockly.mainWorkspace=this,this.setBrowserFocus())};Blockly.WorkspaceSvg.prototype.setBrowserFocus=function(){document.activeElement&&document.activeElement.blur();try{this.getParentSvg().focus({preventScroll:!0})}catch(a){try{this.getParentSvg().parentNode.setActive()}catch(b){this.getParentSvg().parentNode.focus({preventScroll:!0})}}}; +Blockly.WorkspaceSvg.prototype.zoom=function(a,b,c){c=Math.pow(this.options.zoomOptions.scaleSpeed,c);var d=this.scale*c;if(this.scale!=d){d>this.options.zoomOptions.maxScale?c=this.options.zoomOptions.maxScale/this.scale:dthis.options.zoomOptions.maxScale?a=this.options.zoomOptions.maxScale:this.options.zoomOptions.minScale&&ab.viewBottom||b.contentLeftb.viewRight){c=null;a&&(c=Blockly.Events.getGroup(),Blockly.Events.setGroup(a.group));switch(a.type){case Blockly.Events.BLOCK_CREATE:case Blockly.Events.BLOCK_MOVE:var f= +e.getBlockById(a.blockId);f&&(f=f.getRootBlock());break;case Blockly.Events.COMMENT_CREATE:case Blockly.Events.COMMENT_MOVE:f=e.getCommentById(a.commentId)}if(f){d=f.getBoundingRectangle();d.height=d.bottom-d.top;d.width=d.right-d.left;var m=b.viewTop,n=b.viewBottom-d.height;n=Math.max(m,n);m=Blockly.utils.math.clamp(m,d.top,n)-d.top;n=b.viewLeft;var p=b.viewRight-d.width;b.RTL?n=Math.min(p,n):p=Math.max(n,p);b=Blockly.utils.math.clamp(n,d.left,p)-d.left;f.moveBy(b,m)}a&&(!a.group&&f&&console.log("WARNING: Moved object in bounds but there was no event group. This may break undo."), +null!==c&&Blockly.Events.setGroup(c))}}});Blockly.svgResize(e);Blockly.WidgetDiv.createDom();Blockly.DropDownDiv.createDom();Blockly.Tooltip.createDom();return e}; +Blockly.init_=function(a){var b=a.options,c=a.getParentSvg();Blockly.bindEventWithChecks_(c.parentNode,"contextmenu",null,function(a){Blockly.utils.isTargetInput(a)||a.preventDefault()});c=Blockly.bindEventWithChecks_(window,"resize",null,function(){Blockly.hideChaff(!0);Blockly.svgResize(a)});a.setResizeHandlerWrapper(c);Blockly.inject.bindDocumentEvents_();if(b.languageTree){c=a.getToolbox();var d=a.getFlyout(!0);c?c.init():d&&(d.init(a),d.show(b.languageTree),d.scrollToStart())}c=Blockly.Scrollbar.scrollbarThickness; +b.hasTrashcan&&(c=a.trashcan.init(c));b.zoomOptions&&b.zoomOptions.controls&&a.zoomControls_.init(c);b.moveOptions&&b.moveOptions.scrollbars?(a.scrollbar=new Blockly.ScrollbarPair(a),a.scrollbar.resize()):a.setMetrics({x:.5,y:.5});b.hasSounds&&Blockly.inject.loadSounds_(b.pathToMedia,a)}; +Blockly.inject.bindDocumentEvents_=function(){Blockly.documentEventsBound_||(Blockly.bindEventWithChecks_(document,"scroll",null,function(){for(var a=Blockly.Workspace.getAll(),b=0,c;c=a[b];b++)c.updateInverseScreenCTM&&c.updateInverseScreenCTM()}),Blockly.bindEventWithChecks_(document,"keydown",null,Blockly.onKeyDown),Blockly.bindEvent_(document,"touchend",null,Blockly.longStop_),Blockly.bindEvent_(document,"touchcancel",null,Blockly.longStop_),Blockly.utils.userAgent.IPAD&&Blockly.bindEventWithChecks_(window, +"orientationchange",document,function(){Blockly.svgResize(Blockly.getMainWorkspace())}));Blockly.documentEventsBound_=!0}; +Blockly.inject.loadSounds_=function(a,b){var c=b.getAudioManager();c.load([a+"click.mp3",a+"click.wav",a+"click.ogg"],"click");c.load([a+"disconnect.wav",a+"disconnect.mp3",a+"disconnect.ogg"],"disconnect");c.load([a+"delete.mp3",a+"delete.ogg",a+"delete.wav"],"delete");var d=[];a=function(){for(;d.length;)Blockly.unbindEvent_(d.pop());c.preload()};d.push(Blockly.bindEventWithChecks_(document,"mousemove",null,a,!0));d.push(Blockly.bindEventWithChecks_(document,"touchstart",null,a,!0))};Blockly.Names=function(a,b){this.variablePrefix_=b||"";this.reservedDict_=Object.create(null);if(a)for(a=a.split(","),b=0;b1'),d.appendChild(c),b.push(d));if(Blockly.Blocks.variables_get){a.sort(Blockly.VariableModel.compareByName);c=0;for(var e;e=a[c];c++)d=Blockly.utils.xml.createElement("block"),d.setAttribute("type","variables_get"),d.setAttribute("gap",8),d.appendChild(Blockly.Variables.generateVariableFieldDom(e)),b.push(d)}}return b}; +Blockly.Variables.VAR_LETTER_OPTIONS="ijkmnopqrstuvwxyzabcdefgh";Blockly.Variables.generateUniqueName=function(a){return Blockly.Variables.generateUniqueNameFromOptions(Blockly.Variables.VAR_LETTER_OPTIONS.charAt(0),a.getAllVariableNames())}; +Blockly.Variables.generateUniqueNameFromOptions=function(a,b){if(!b.length)return a;for(var c=Blockly.Variables.VAR_LETTER_OPTIONS,d="",e=c.indexOf(a);;){for(var f=!1,g=0;ge?Blockly.WidgetDiv.positionInternal_(a,0,c.height+e):Blockly.WidgetDiv.positionInternal_(a,e,c.height)};Blockly.WidgetDiv.calculateX_=function(a,b,c,d){if(d)return b=Math.max(b.right-c.width,a.left),Math.min(b,a.right-c.width);b=Math.min(b.left,a.right-c.width);return Math.max(b,a.left)}; +Blockly.WidgetDiv.calculateY_=function(a,b,c){return b.bottom+c.height>=a.bottom?b.top-c.height:b.bottom};Blockly.VERSION="3.20200625.2";Blockly.mainWorkspace=null;Blockly.selected=null;Blockly.draggingConnections=[];Blockly.clipboardXml_=null;Blockly.clipboardSource_=null;Blockly.clipboardTypeCounts_=null;Blockly.cache3dSupported_=null;Blockly.parentContainer=null;Blockly.svgSize=function(a){return new Blockly.utils.Size(a.cachedWidth_,a.cachedHeight_)};Blockly.resizeSvgContents=function(a){a.resizeContents()}; +Blockly.svgResize=function(a){for(;a.options.parentWorkspace;)a=a.options.parentWorkspace;var b=a.getParentSvg(),c=b.parentNode;if(c){var d=c.offsetWidth;c=c.offsetHeight;b.cachedWidth_!=d&&(b.setAttribute("width",d+"px"),b.cachedWidth_=d);b.cachedHeight_!=c&&(b.setAttribute("height",c+"px"),b.cachedHeight_=c);a.resize()}}; +Blockly.onKeyDown=function(a){var b=Blockly.mainWorkspace;if(b&&!(Blockly.utils.isTargetInput(a)||b.rendered&&!b.isVisible()))if(b.options.readOnly)Blockly.navigation.onKeyPress(a);else{var c=!1;if(a.keyCode==Blockly.utils.KeyCodes.ESC)Blockly.hideChaff(),Blockly.navigation.onBlocklyAction(Blockly.navigation.ACTION_EXIT);else{if(!Blockly.Gesture.inProgress()&&Blockly.navigation.onKeyPress(a))return;if(a.keyCode==Blockly.utils.KeyCodes.BACKSPACE||a.keyCode==Blockly.utils.KeyCodes.DELETE){a.preventDefault(); +if(Blockly.Gesture.inProgress())return;Blockly.selected&&Blockly.selected.isDeletable()&&(c=!0)}else if(a.altKey||a.ctrlKey||a.metaKey){if(Blockly.Gesture.inProgress())return;Blockly.selected&&Blockly.selected.isDeletable()&&Blockly.selected.isMovable()&&(a.keyCode==Blockly.utils.KeyCodes.C?(Blockly.hideChaff(),Blockly.copy_(Blockly.selected)):a.keyCode!=Blockly.utils.KeyCodes.X||Blockly.selected.workspace.isFlyout||(Blockly.copy_(Blockly.selected),c=!0));a.keyCode==Blockly.utils.KeyCodes.V?Blockly.clipboardXml_&& +(a=Blockly.clipboardSource_,a.isFlyout&&(a=a.targetWorkspace),Blockly.clipboardTypeCounts_&&a.isCapacityAvailable(Blockly.clipboardTypeCounts_)&&(Blockly.Events.setGroup(!0),a.paste(Blockly.clipboardXml_),Blockly.Events.setGroup(!1))):a.keyCode==Blockly.utils.KeyCodes.Z?(Blockly.hideChaff(),b.undo(a.shiftKey)):a.ctrlKey&&a.keyCode==Blockly.utils.KeyCodes.Y&&(Blockly.hideChaff(),b.undo(!0))}}c&&!Blockly.selected.workspace.isFlyout&&(Blockly.Events.setGroup(!0),Blockly.hideChaff(),Blockly.selected.dispose(!0, +!0),Blockly.Events.setGroup(!1))}};Blockly.copy_=function(a){a=a.toCopyData();Blockly.clipboardXml_=a.xml;Blockly.clipboardSource_=a.source;Blockly.clipboardTypeCounts_=a.typeCounts};Blockly.duplicate=function(a){var b=Blockly.clipboardXml_,c=Blockly.clipboardSource_;Blockly.copy_(a);a.workspace.paste(Blockly.clipboardXml_);Blockly.clipboardXml_=b;Blockly.clipboardSource_=c};Blockly.onContextMenu_=function(a){Blockly.utils.isTargetInput(a)||a.preventDefault()}; +Blockly.hideChaff=function(a){Blockly.Tooltip.hide();Blockly.WidgetDiv.hide();Blockly.DropDownDiv.hideWithoutAnimation();a||(a=Blockly.getMainWorkspace(),a.trashcan&&a.trashcan.flyout&&a.trashcan.flyout.hide(),(a=a.getToolbox())&&a.getFlyout()&&a.getFlyout().autoClose&&a.clearSelection())};Blockly.getMainWorkspace=function(){return Blockly.mainWorkspace};Blockly.alert=function(a,b){alert(a);b&&b()};Blockly.confirm=function(a,b){b(confirm(a))};Blockly.prompt=function(a,b,c){c(prompt(a,b))}; +Blockly.jsonInitFactory_=function(a){return function(){this.jsonInit(a)}}; +Blockly.defineBlocksWithJsonArray=function(a){for(var b=0;b90-b||a>-90-b&&a<-90+b?!0:!1}; +Blockly.HorizontalFlyout.prototype.getClientRect=function(){if(!this.svgGroup_)return null;var a=this.svgGroup_.getBoundingClientRect(),b=a.top;return this.toolboxPosition_==Blockly.TOOLBOX_AT_TOP?new Blockly.utils.Rect(-1E9,b+a.height,-1E9,1E9):new Blockly.utils.Rect(b,1E9,-1E9,1E9)}; +Blockly.HorizontalFlyout.prototype.reflowInternal_=function(){this.workspace_.scale=this.targetWorkspace.scale;for(var a=0,b=this.workspace_.getTopBlocks(!1),c=0,d;d=b[c];c++)a=Math.max(a,d.getHeightWidth().height);a+=1.5*this.MARGIN;a*=this.workspace_.scale;a+=Blockly.Scrollbar.scrollbarThickness;if(this.height_!=a){for(c=0;d=b[c];c++)d.flyoutRect_&&this.moveRectToBlock_(d.flyoutRect_,d);this.height_=a;this.position()}};Blockly.VerticalFlyout=function(a){Blockly.VerticalFlyout.superClass_.constructor.call(this,a)};Blockly.utils.object.inherits(Blockly.VerticalFlyout,Blockly.Flyout); +Blockly.VerticalFlyout.prototype.getMetrics_=function(){if(!this.isVisible())return null;try{var a=this.workspace_.getCanvas().getBBox()}catch(e){a={height:0,y:0,width:0,x:0}}var b=this.SCROLLBAR_PADDING,c=this.height_-2*this.SCROLLBAR_PADDING,d=this.width_;this.RTL||(d-=this.SCROLLBAR_PADDING);return{contentHeight:a.height*this.workspace_.scale+2*this.MARGIN,contentWidth:a.width*this.workspace_.scale+2*this.MARGIN,contentTop:a.y,contentLeft:a.x,viewHeight:c,viewWidth:d,viewTop:-this.workspace_.scrollY+ +a.y,viewLeft:-this.workspace_.scrollX,absoluteTop:b,absoluteLeft:0}};Blockly.VerticalFlyout.prototype.setMetrics_=function(a){var b=this.getMetrics_();b&&("number"==typeof a.y&&(this.workspace_.scrollY=-b.contentHeight*a.y),this.workspace_.translate(this.workspace_.scrollX+b.absoluteLeft,this.workspace_.scrollY+b.absoluteTop))}; +Blockly.VerticalFlyout.prototype.position=function(){if(this.isVisible()){var a=this.targetWorkspace.getMetrics();a&&(this.height_=a.viewHeight,this.setBackgroundPath_(this.width_-this.CORNER_RADIUS,a.viewHeight-2*this.CORNER_RADIUS),this.positionAt_(this.width_,this.height_,this.targetWorkspace.toolboxPosition==this.toolboxPosition_?a.toolboxWidth?this.toolboxPosition_==Blockly.TOOLBOX_AT_LEFT?a.toolboxWidth:a.viewWidth-this.width_:this.toolboxPosition_==Blockly.TOOLBOX_AT_LEFT?0:a.viewWidth:this.toolboxPosition_== +Blockly.TOOLBOX_AT_LEFT?0:a.viewWidth+a.absoluteLeft-this.width_,0))}}; +Blockly.VerticalFlyout.prototype.setBackgroundPath_=function(a,b){var c=this.toolboxPosition_==Blockly.TOOLBOX_AT_RIGHT,d=a+this.CORNER_RADIUS;d=["M "+(c?d:0)+",0"];d.push("h",c?-a:a);d.push("a",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,c?0:1,c?-this.CORNER_RADIUS:this.CORNER_RADIUS,this.CORNER_RADIUS);d.push("v",Math.max(0,b));d.push("a",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,c?0:1,c?this.CORNER_RADIUS:-this.CORNER_RADIUS,this.CORNER_RADIUS);d.push("h",c?a:-a);d.push("z");this.svgBackground_.setAttribute("d", +d.join(" "))};Blockly.VerticalFlyout.prototype.scrollToStart=function(){this.scrollbar.set(0)};Blockly.VerticalFlyout.prototype.wheel_=function(a){var b=Blockly.utils.getScrollDeltaPixels(a);if(b.y){var c=this.getMetrics_();b=c.viewTop-c.contentTop+b.y;b=Math.min(b,c.contentHeight-c.viewHeight);b=Math.max(b,0);this.scrollbar.set(b);Blockly.WidgetDiv.hide();Blockly.DropDownDiv.hideWithoutAnimation()}a.preventDefault();a.stopPropagation()}; +Blockly.VerticalFlyout.prototype.layout_=function(a,b){this.workspace_.scale=this.targetWorkspace.scale;for(var c=this.MARGIN,d=this.RTL?c:c+this.tabWidth_,e=0,f;f=a[e];e++)if("block"==f.type){f=f.block;for(var g=f.getDescendants(!1),h=0,k;k=g[h];h++)k.isInFlyout=!0;f.render();g=f.getSvgRoot();h=f.getHeightWidth();k=f.outputConnection?d-this.tabWidth_:d;f.moveBy(k,c);k=this.createRect_(f,this.RTL?k-h.width:k,c,h,e);this.addBlockListeners_(g,f,k);c+=h.height+b[e]}else"button"==f.type&&(this.initFlyoutButton_(f.button, +d,c),c+=f.button.height+b[e])};Blockly.VerticalFlyout.prototype.isDragTowardWorkspace=function(a){a=Math.atan2(a.y,a.x)/Math.PI*180;var b=this.dragAngleRange_;return a-b||a<-180+b||a>180-b?!0:!1};Blockly.VerticalFlyout.prototype.getClientRect=function(){if(!this.svgGroup_)return null;var a=this.svgGroup_.getBoundingClientRect(),b=a.left;return this.toolboxPosition_==Blockly.TOOLBOX_AT_LEFT?new Blockly.utils.Rect(-1E9,1E9,-1E9,b+a.width):new Blockly.utils.Rect(-1E9,1E9,b,1E9)}; +Blockly.VerticalFlyout.prototype.reflowInternal_=function(){this.workspace_.scale=this.targetWorkspace.scale;for(var a=0,b=this.workspace_.getTopBlocks(!1),c=0,d;d=b[c];c++){var e=d.getHeightWidth().width;d.outputConnection&&(e-=this.tabWidth_);a=Math.max(a,e)}for(c=0;d=this.buttons_[c];c++)a=Math.max(a,d.width);a+=1.5*this.MARGIN+this.tabWidth_;a*=this.workspace_.scale;a+=Blockly.Scrollbar.scrollbarThickness;if(this.width_!=a){for(c=0;d=b[c];c++){if(this.RTL){e=d.getRelativeToSurfaceXY().x;var f= +a/this.workspace_.scale-this.MARGIN;d.outputConnection||(f-=this.tabWidth_);d.moveBy(f-e,0)}d.flyoutRect_&&this.moveRectToBlock_(d.flyoutRect_,d)}if(this.RTL)for(c=0;d=this.buttons_[c];c++)b=d.getPosition().y,d.moveTo(a/this.workspace_.scale-d.width-this.MARGIN-this.tabWidth_,b);this.width_=a;this.position()}};Blockly.FlyoutButton=function(a,b,c,d){this.workspace_=a;this.targetWorkspace_=b;this.text_=c.text;this.position_=new Blockly.utils.Coordinate(0,0);this.isLabel_=d;this.callbackKey_=c.callbackKey||c.callbackkey;this.cssClass_=c["web-class"]||null;this.onMouseUpWrapper_=null};Blockly.FlyoutButton.MARGIN_X=5;Blockly.FlyoutButton.MARGIN_Y=2;Blockly.FlyoutButton.prototype.width=0;Blockly.FlyoutButton.prototype.height=0; +Blockly.FlyoutButton.prototype.createDom=function(){var a=this.isLabel_?"blocklyFlyoutLabel":"blocklyFlyoutButton";this.cssClass_&&(a+=" "+this.cssClass_);this.svgGroup_=Blockly.utils.dom.createSvgElement("g",{"class":a},this.workspace_.getCanvas());if(!this.isLabel_)var b=Blockly.utils.dom.createSvgElement("rect",{"class":"blocklyFlyoutButtonShadow",rx:4,ry:4,x:1,y:1},this.svgGroup_);a=Blockly.utils.dom.createSvgElement("rect",{"class":this.isLabel_?"blocklyFlyoutLabelBackground":"blocklyFlyoutButtonBackground", +rx:4,ry:4},this.svgGroup_);var c=Blockly.utils.dom.createSvgElement("text",{"class":this.isLabel_?"blocklyFlyoutLabelText":"blocklyText",x:0,y:0,"text-anchor":"middle"},this.svgGroup_),d=Blockly.utils.replaceMessageReferences(this.text_);this.workspace_.RTL&&(d+="\u200f");c.textContent=d;this.isLabel_&&(this.svgText_=c,this.workspace_.getThemeManager().subscribe(this.svgText_,"flyoutForegroundColour","fill"));var e=Blockly.utils.style.getComputedStyle(c,"fontSize"),f=Blockly.utils.style.getComputedStyle(c, +"fontWeight"),g=Blockly.utils.style.getComputedStyle(c,"fontFamily");this.width=Blockly.utils.dom.getFastTextWidthWithSizeString(c,e,f,g);d=Blockly.utils.dom.measureFontMetrics(d,e,f,g);this.height=d.height;this.isLabel_||(this.width+=2*Blockly.FlyoutButton.MARGIN_X,this.height+=2*Blockly.FlyoutButton.MARGIN_Y,b.setAttribute("width",this.width),b.setAttribute("height",this.height));a.setAttribute("width",this.width);a.setAttribute("height",this.height);c.setAttribute("x",this.width/2);c.setAttribute("y", +this.height/2-d.height/2+d.baseline);this.updateTransform_();this.onMouseUpWrapper_=Blockly.bindEventWithChecks_(this.svgGroup_,"mouseup",this,this.onMouseUp_);return this.svgGroup_};Blockly.FlyoutButton.prototype.show=function(){this.updateTransform_();this.svgGroup_.setAttribute("display","block")};Blockly.FlyoutButton.prototype.updateTransform_=function(){this.svgGroup_.setAttribute("transform","translate("+this.position_.x+","+this.position_.y+")")}; +Blockly.FlyoutButton.prototype.moveTo=function(a,b){this.position_.x=a;this.position_.y=b;this.updateTransform_()};Blockly.FlyoutButton.prototype.getPosition=function(){return this.position_};Blockly.FlyoutButton.prototype.getTargetWorkspace=function(){return this.targetWorkspace_};Blockly.FlyoutButton.prototype.dispose=function(){this.onMouseUpWrapper_&&Blockly.unbindEvent_(this.onMouseUpWrapper_);this.svgGroup_&&Blockly.utils.dom.removeNode(this.svgGroup_);this.svgText_&&this.workspace_.getThemeManager().unsubscribe(this.svgText_)}; +Blockly.FlyoutButton.prototype.onMouseUp_=function(a){(a=this.targetWorkspace_.getGesture(a))&&a.cancel();this.isLabel_&&this.callbackKey_?console.warn("Labels should not have callbacks. Label text: "+this.text_):this.isLabel_||this.callbackKey_&&this.targetWorkspace_.getButtonCallback(this.callbackKey_)?this.isLabel_||this.targetWorkspace_.getButtonCallback(this.callbackKey_)(this):console.warn("Buttons should have callbacks. Button text: "+this.text_)};Blockly.Css.register(".blocklyFlyoutButton {,fill: #888;,cursor: default;,},.blocklyFlyoutButtonShadow {,fill: #666;,},.blocklyFlyoutButton:hover {,fill: #aaa;,},.blocklyFlyoutLabel {,cursor: default;,},.blocklyFlyoutLabelBackground {,opacity: 0;,}".split(","));Blockly.Generator=function(a){this.name_=a;this.FUNCTION_NAME_PLACEHOLDER_REGEXP_=new RegExp(this.FUNCTION_NAME_PLACEHOLDER_,"g")};Blockly.Generator.NAME_TYPE="generated_function";Blockly.Generator.prototype.INFINITE_LOOP_TRAP=null;Blockly.Generator.prototype.STATEMENT_PREFIX=null;Blockly.Generator.prototype.STATEMENT_SUFFIX=null;Blockly.Generator.prototype.INDENT=" ";Blockly.Generator.prototype.COMMENT_WRAP=60;Blockly.Generator.prototype.ORDER_OVERRIDES=[]; +Blockly.Generator.prototype.workspaceToCode=function(a){a||(console.warn("No workspace specified in workspaceToCode call. Guessing."),a=Blockly.getMainWorkspace());var b=[];this.init(a);a=a.getTopBlocks(!0);for(var c=0,d;d=a[c];c++){var e=this.blockToCode(d);Array.isArray(e)&&(e=e[0]);e&&(d.outputConnection&&(e=this.scrubNakedValue(e),this.STATEMENT_PREFIX&&!d.suppressPrefixSuffix&&(e=this.injectId(this.STATEMENT_PREFIX,d)+e),this.STATEMENT_SUFFIX&&!d.suppressPrefixSuffix&&(e+=this.injectId(this.STATEMENT_SUFFIX, +d))),b.push(e))}b=b.join("\n");b=this.finish(b);b=b.replace(/^\s+\n/,"");b=b.replace(/\n\s+$/,"\n");return b=b.replace(/[ \t]+\n/g,"\n")};Blockly.Generator.prototype.prefixLines=function(a,b){return b+a.replace(/(?!\n$)\n/g,"\n"+b)};Blockly.Generator.prototype.allNestedComments=function(a){var b=[];a=a.getDescendants(!0);for(var c=0;ca&&(a=(a=this.getParent())?a.getDepth()+1:0,this.setDepth_(a));return a};Blockly.tree.BaseNode.prototype.setDepth_=function(a){if(a!=this.depth_){this.depth_=a;var b=this.getRowElement();if(b){var c=this.getPixelIndent_()+"px";this.rightToLeft_?b.style.paddingRight=c:b.style.paddingLeft=c}this.forEachChild(function(b){b.setDepth_(a+1)})}};Blockly.tree.BaseNode.prototype.contains=function(a){for(;a;){if(a==this)return!0;a=a.getParent()}return!1}; +Blockly.tree.BaseNode.prototype.getChildren=function(){var a=[];this.forEachChild(function(b){a.push(b)});return a};Blockly.tree.BaseNode.prototype.getParent=function(){return Blockly.tree.BaseNode.superClass_.getParent.call(this)};Blockly.tree.BaseNode.prototype.getPreviousSibling=function(){return this.previousSibling_};Blockly.tree.BaseNode.prototype.getNextSibling=function(){return this.nextSibling_};Blockly.tree.BaseNode.prototype.isLastSibling=function(){return!this.nextSibling_}; +Blockly.tree.BaseNode.prototype.isSelected=function(){return this.selected_};Blockly.tree.BaseNode.prototype.select=function(){var a=this.getTree();a&&a.setSelectedItem(this)};Blockly.tree.BaseNode.prototype.setSelected=function(a){if(this.selected_!=a){this.selected_=a;this.updateRow();var b=this.getElement();b&&(Blockly.utils.aria.setState(b,Blockly.utils.aria.State.SELECTED,a),a&&(a=this.getTree().getElement(),Blockly.utils.aria.setState(a,Blockly.utils.aria.State.ACTIVEDESCENDANT,this.getId())))}}; +Blockly.tree.BaseNode.prototype.setExpanded=function(a){var b=a!=this.expanded_,c;this.expanded_=a;var d=this.getTree(),e=this.getElement();if(this.hasChildren()){if(!a&&d&&this.contains(d.getSelectedItem())&&this.select(),e){if(c=this.getChildrenElement())Blockly.utils.style.setElementShown(c,a),Blockly.utils.aria.setState(e,Blockly.utils.aria.State.EXPANDED,a),a&&this.isInDocument()&&!c.hasChildNodes()&&(this.forEachChild(function(a){c.appendChild(a.toDom())}),this.forEachChild(function(a){a.enterDocument()})); +this.updateExpandIcon()}}else(c=this.getChildrenElement())&&Blockly.utils.style.setElementShown(c,!1);e&&this.updateIcon_();b&&(a?this.doNodeExpanded():this.doNodeCollapsed())};Blockly.tree.BaseNode.prototype.doNodeExpanded=function(){};Blockly.tree.BaseNode.prototype.doNodeCollapsed=function(){};Blockly.tree.BaseNode.prototype.toggle=function(){this.setExpanded(!this.expanded_)}; +Blockly.tree.BaseNode.prototype.toDom=function(){var a=this.expanded_&&this.hasChildren(),b=document.createElement("div");b.style.backgroundPosition=this.getBackgroundPosition();a||(b.style.display="none");a&&this.forEachChild(function(a){b.appendChild(a.toDom())});a=document.createElement("div");a.id=this.getId();a.appendChild(this.getRowDom());a.appendChild(b);return a};Blockly.tree.BaseNode.prototype.getPixelIndent_=function(){return Math.max(0,(this.getDepth()-1)*this.config_.indentWidth)}; +Blockly.tree.BaseNode.prototype.getRowDom=function(){var a=document.createElement("div");a.className=this.getRowClassName();a.style["padding-"+(this.rightToLeft_?"right":"left")]=this.getPixelIndent_()+"px";a.appendChild(this.getIconDom());a.appendChild(this.getLabelDom());return a};Blockly.tree.BaseNode.prototype.getRowClassName=function(){var a="";this.isSelected()&&(a=" "+(this.config_.cssSelectedRow||""));return this.config_.cssTreeRow+a}; +Blockly.tree.BaseNode.prototype.getLabelDom=function(){var a=document.createElement("span");a.className=this.config_.cssItemLabel||"";a.textContent=this.content;return a};Blockly.tree.BaseNode.prototype.getIconDom=function(){var a=document.createElement("span");a.style.display="inline-block";a.className=this.getCalculatedIconClass();return a};Blockly.tree.BaseNode.prototype.getCalculatedIconClass=function(){throw Error(Blockly.Component.Error.ABSTRACT_METHOD);}; +Blockly.tree.BaseNode.prototype.getBackgroundPosition=function(){return(this.isLastSibling()?"-100":(this.getDepth()-1)*this.config_.indentWidth)+"px 0"};Blockly.tree.BaseNode.prototype.getElement=function(){var a=Blockly.tree.BaseNode.superClass_.getElement.call(this);a||(a=document.getElementById(this.getId()),this.setElementInternal(a));return a};Blockly.tree.BaseNode.prototype.getRowElement=function(){var a=this.getElement();return a?a.firstChild:null}; +Blockly.tree.BaseNode.prototype.getIconElement=function(){var a=this.getRowElement();return a?a.firstChild:null};Blockly.tree.BaseNode.prototype.getLabelElement=function(){var a=this.getRowElement();return a&&a.lastChild?a.lastChild.previousSibling:null};Blockly.tree.BaseNode.prototype.getChildrenElement=function(){var a=this.getElement();return a?a.lastChild:null};Blockly.tree.BaseNode.prototype.updateRow=function(){var a=this.getRowElement();a&&(a.className=this.getRowClassName())}; +Blockly.tree.BaseNode.prototype.updateExpandIcon=function(){var a=this.getChildrenElement();a&&(a.style.backgroundPosition=this.getBackgroundPosition())};Blockly.tree.BaseNode.prototype.updateIcon_=function(){this.getIconElement().className=this.getCalculatedIconClass()};Blockly.tree.BaseNode.prototype.onClick_=function(a){a.preventDefault()}; +Blockly.tree.BaseNode.prototype.onKeyDown=function(a){switch(a.keyCode){case Blockly.utils.KeyCodes.RIGHT:var b=this.selectChild();break;case Blockly.utils.KeyCodes.LEFT:b=this.selectParent();break;case Blockly.utils.KeyCodes.DOWN:b=this.selectNext();break;case Blockly.utils.KeyCodes.UP:b=this.selectPrevious();break;case Blockly.utils.KeyCodes.ENTER:case Blockly.utils.KeyCodes.SPACE:this.toggle();b=!0;break;default:b=!1}b&&a.preventDefault();return b}; +Blockly.tree.BaseNode.prototype.selectNext=function(){var a=this.getNextShownNode();a&&a.select();return!0};Blockly.tree.BaseNode.prototype.selectPrevious=function(){var a=this.getPreviousShownNode();a&&a.select();return!0};Blockly.tree.BaseNode.prototype.selectParent=function(){if(this.hasChildren()&&this.expanded_)this.setExpanded(!1);else{var a=this.getParent(),b=this.getTree();a&&a!=b&&a.select()}return!0}; +Blockly.tree.BaseNode.prototype.selectChild=function(){return this.hasChildren()?(this.expanded_?this.getChildAt(0).select():this.setExpanded(!0),!0):!1};Blockly.tree.BaseNode.prototype.getLastShownDescendant=function(){return this.expanded_&&this.hasChildren()?this.getChildAt(this.getChildCount()-1).getLastShownDescendant():this}; +Blockly.tree.BaseNode.prototype.getNextShownNode=function(){if(this.hasChildren()&&this.expanded_)return this.getChildAt(0);for(var a=this,b;a!=this.getTree();){b=a.getNextSibling();if(null!=b)return b;a=a.getParent()}return null};Blockly.tree.BaseNode.prototype.getPreviousShownNode=function(){var a=this.getPreviousSibling();if(null!=a)return a.getLastShownDescendant();a=this.getParent();var b=this.getTree();return a==b||this==b?null:a}; +Blockly.tree.BaseNode.prototype.setTreeInternal=function(a){this.tree!=a&&(this.tree=a,this.forEachChild(function(b){b.setTreeInternal(a)}))};Blockly.tree.TreeNode=function(a,b,c){this.toolbox_=a;Blockly.tree.BaseNode.call(this,b,c);this.onSizeChanged_=null};Blockly.utils.object.inherits(Blockly.tree.TreeNode,Blockly.tree.BaseNode);Blockly.tree.TreeNode.prototype.getTree=function(){if(this.tree)return this.tree;var a=this.getParent();return a&&(a=a.getTree())?(this.setTreeInternal(a),a):null}; +Blockly.tree.TreeNode.prototype.getCalculatedIconClass=function(){var a=this.expanded_;if(a&&this.expandedIconClass)return this.expandedIconClass;var b=this.iconClass;if(!a&&b)return b;b=this.config_;if(this.hasChildren()){if(a&&b.cssExpandedFolderIcon)return b.cssTreeIcon+" "+b.cssExpandedFolderIcon;if(!a&&b.cssCollapsedFolderIcon)return b.cssTreeIcon+" "+b.cssCollapsedFolderIcon}else if(b.cssFileIcon)return b.cssTreeIcon+" "+b.cssFileIcon;return""}; +Blockly.tree.TreeNode.prototype.onClick_=function(a){this.hasChildren()?(this.toggle(),this.select()):this.isSelected()?this.getTree().setSelectedItem(null):this.select();this.updateRow()}; +Blockly.tree.TreeNode.prototype.onKeyDown=function(a){if(this.tree.toolbox_.horizontalLayout_){var b={},c=Blockly.utils.KeyCodes.DOWN,d=Blockly.utils.KeyCodes.UP;b[Blockly.utils.KeyCodes.RIGHT]=this.rightToLeft_?d:c;b[Blockly.utils.KeyCodes.LEFT]=this.rightToLeft_?c:d;b[Blockly.utils.KeyCodes.UP]=Blockly.utils.KeyCodes.LEFT;b[Blockly.utils.KeyCodes.DOWN]=Blockly.utils.KeyCodes.RIGHT;Object.defineProperties(a,{keyCode:{value:b[a.keyCode]||a.keyCode}})}return Blockly.tree.TreeNode.superClass_.onKeyDown.call(this, +a)};Blockly.tree.TreeNode.prototype.onSizeChanged=function(a){this.onSizeChanged_=a};Blockly.tree.TreeNode.prototype.resizeToolbox_=function(){this.onSizeChanged_&&this.onSizeChanged_.call(this.toolbox_)};Blockly.tree.TreeNode.prototype.doNodeExpanded=Blockly.tree.TreeNode.prototype.resizeToolbox_;Blockly.tree.TreeNode.prototype.doNodeCollapsed=Blockly.tree.TreeNode.prototype.resizeToolbox_;Blockly.tree.TreeControl=function(a,b){this.toolbox_=a;this.onKeydownWrapper_=this.onClickWrapper_=null;Blockly.tree.BaseNode.call(this,"",b);this.selected_=this.expanded_=!0;this.selectedItem_=this;this.onAfterSelected_=this.onBeforeSelected_=null};Blockly.utils.object.inherits(Blockly.tree.TreeControl,Blockly.tree.BaseNode);Blockly.tree.TreeControl.prototype.getTree=function(){return this};Blockly.tree.TreeControl.prototype.getToolbox=function(){return this.toolbox_}; +Blockly.tree.TreeControl.prototype.getDepth=function(){return 0};Blockly.tree.TreeControl.prototype.setExpanded=function(a){this.expanded_=a};Blockly.tree.TreeControl.prototype.getIconElement=function(){var a=this.getRowElement();return a?a.firstChild:null};Blockly.tree.TreeControl.prototype.updateExpandIcon=function(){};Blockly.tree.TreeControl.prototype.getRowClassName=function(){return Blockly.tree.TreeControl.superClass_.getRowClassName.call(this)+" "+this.config_.cssHideRoot}; +Blockly.tree.TreeControl.prototype.getCalculatedIconClass=function(){var a=this.expanded_;if(a&&this.expandedIconClass)return this.expandedIconClass;var b=this.iconClass;return!a&&b?b:""}; +Blockly.tree.TreeControl.prototype.setSelectedItem=function(a){if(a!=this.selectedItem_&&(!this.onBeforeSelected_||this.onBeforeSelected_.call(this.toolbox_,a))){var b=this.getSelectedItem();this.selectedItem_&&this.selectedItem_.setSelected(!1);(this.selectedItem_=a)&&a.setSelected(!0);this.onAfterSelected_&&this.onAfterSelected_.call(this.toolbox_,b,a)}};Blockly.tree.TreeControl.prototype.onBeforeSelected=function(a){this.onBeforeSelected_=a}; +Blockly.tree.TreeControl.prototype.onAfterSelected=function(a){this.onAfterSelected_=a};Blockly.tree.TreeControl.prototype.getSelectedItem=function(){return this.selectedItem_};Blockly.tree.TreeControl.prototype.initAccessibility=function(){Blockly.tree.TreeControl.superClass_.initAccessibility.call(this);var a=this.getElement();Blockly.utils.aria.setRole(a,Blockly.utils.aria.Role.TREE);Blockly.utils.aria.setState(a,Blockly.utils.aria.State.LABELLEDBY,this.getLabelElement().id)}; +Blockly.tree.TreeControl.prototype.enterDocument=function(){Blockly.tree.TreeControl.superClass_.enterDocument.call(this);var a=this.getElement();a.className=this.config_.cssRoot;a.setAttribute("hideFocus","true");this.attachEvents_();this.initAccessibility()};Blockly.tree.TreeControl.prototype.exitDocument=function(){Blockly.tree.TreeControl.superClass_.exitDocument.call(this);this.detachEvents_()}; +Blockly.tree.TreeControl.prototype.attachEvents_=function(){var a=this.getElement();a.tabIndex=0;this.onClickWrapper_=Blockly.bindEventWithChecks_(a,"click",this,this.handleMouseEvent_);this.onKeydownWrapper_=Blockly.bindEvent_(a,"keydown",this,this.handleKeyEvent_)}; +Blockly.tree.TreeControl.prototype.detachEvents_=function(){this.onClickWrapper_&&(Blockly.unbindEvent_(this.onClickWrapper_),this.onClickWrapper_=null);this.onKeydownWrapper_&&(Blockly.unbindEvent_(this.onKeydownWrapper_),this.onKeydownWrapper_=null)};Blockly.tree.TreeControl.prototype.handleMouseEvent_=function(a){var b=this.getNodeFromEvent_(a);if(b&&"click"==a.type)b.onClick_(a)}; +Blockly.tree.TreeControl.prototype.handleKeyEvent_=function(a){var b=!(!this.selectedItem_||!this.selectedItem_.onKeyDown(a));b&&(Blockly.utils.style.scrollIntoContainerView(this.selectedItem_.getElement(),this.getElement().parentNode),a.preventDefault());return b};Blockly.tree.TreeControl.prototype.getNodeFromEvent_=function(a){for(var b=a.target;b;){if(a=Blockly.tree.BaseNode.allNodes[b.id])return a;if(b==this.getElement())break;if(b.getAttribute("role")==Blockly.utils.aria.Role.GROUP)break;b=b.parentNode}return null}; +Blockly.tree.TreeControl.prototype.createNode=function(a){return new Blockly.tree.TreeNode(this.toolbox_,a||"",this.config_)};Blockly.Toolbox=function(a){this.workspace_=a;this.RTL=a.options.RTL;this.horizontalLayout_=a.options.horizontalLayout;this.toolboxPosition=a.options.toolboxPosition;this.config_={indentWidth:19,cssRoot:"blocklyTreeRoot",cssHideRoot:"blocklyHidden",cssTreeRow:"blocklyTreeRow",cssItemLabel:"blocklyTreeLabel",cssTreeIcon:"blocklyTreeIcon",cssExpandedFolderIcon:"blocklyTreeIconOpen",cssFileIcon:"blocklyTreeIconNone",cssSelectedRow:"blocklyTreeSelected"};this.treeSeparatorConfig_={cssTreeRow:"blocklyTreeSeparator"}; +this.horizontalLayout_&&(this.config_.cssTreeRow+=a.RTL?" blocklyHorizontalTreeRtl":" blocklyHorizontalTree",this.treeSeparatorConfig_.cssTreeRow="blocklyTreeSeparatorHorizontal "+(a.RTL?"blocklyHorizontalTreeRtl":"blocklyHorizontalTree"),this.config_.cssTreeIcon="");this.flyout_=null;this.height=this.width=0;this.lastCategory_=null}; +Blockly.Toolbox.prototype.init=function(){var a=this.workspace_,b=this.workspace_.getParentSvg();this.HtmlDiv=document.createElement("div");this.HtmlDiv.className="blocklyToolboxDiv blocklyNonSelectable";this.HtmlDiv.setAttribute("dir",a.RTL?"RTL":"LTR");b.parentNode.insertBefore(this.HtmlDiv,b);var c=a.getThemeManager();c.subscribe(this.HtmlDiv,"toolboxBackgroundColour","background-color");c.subscribe(this.HtmlDiv,"toolboxForegroundColour","color");Blockly.bindEventWithChecks_(this.HtmlDiv,"mousedown", +this,function(a){Blockly.utils.isRightButton(a)||a.target==this.HtmlDiv?Blockly.hideChaff(!1):Blockly.hideChaff(!0);Blockly.Touch.clearTouchIdentifier()},!1,!0);c=new Blockly.Options({parentWorkspace:a,rtl:a.RTL,oneBasedIndex:a.options.oneBasedIndex,horizontalLayout:a.horizontalLayout,renderer:a.options.renderer,rendererOverrides:a.options.rendererOverrides});c.toolboxPosition=a.options.toolboxPosition;if(a.horizontalLayout){if(!Blockly.HorizontalFlyout)throw Error("Missing require for Blockly.HorizontalFlyout"); +this.flyout_=new Blockly.HorizontalFlyout(c)}else{if(!Blockly.VerticalFlyout)throw Error("Missing require for Blockly.VerticalFlyout");this.flyout_=new Blockly.VerticalFlyout(c)}if(!this.flyout_)throw Error("One of Blockly.VerticalFlyout or Blockly.Horizontal must berequired.");Blockly.utils.dom.insertAfter(this.flyout_.createDom("svg"),b);this.flyout_.init(a);this.config_.cssCollapsedFolderIcon="blocklyTreeIconClosed"+(a.RTL?"Rtl":"Ltr");this.render(a.options.languageTree)}; +Blockly.Toolbox.prototype.render=function(a){this.tree_&&(this.tree_.dispose(),this.lastCategory_=null);var b=new Blockly.tree.TreeControl(this,this.config_);this.tree_=b;b.setSelectedItem(null);b.onBeforeSelected(this.handleBeforeTreeSelected_);b.onAfterSelected(this.handleAfterTreeSelected_);var c=null;if(a){this.tree_.contents=[];this.hasColours_=!1;c=this.createTree_(a,this.tree_);if(this.tree_.contents.length)throw Error("Toolbox cannot have both blocks and categories in the root level.");this.workspace_.resizeContents()}b.render(this.HtmlDiv); +c&&b.setSelectedItem(c);this.addColour_();this.position();this.horizontalLayout_&&Blockly.utils.aria.setState(this.tree_.getElement(),Blockly.utils.aria.State.ORIENTATION,"horizontal")}; +Blockly.Toolbox.prototype.createTree_=function(a,b){var c=null,d=null;if(!a)return null;for(var e=0,f;f=a[e];e++)switch(f.kind.toUpperCase()){case "CATEGORY":c=this.addCategory_(f,b)||c;d=f;break;case "SEP":d=this.addSeparator_(f,b,d)||d;break;case "BLOCK":case "SHADOW":case "LABEL":case "BUTTON":b.contents.push(f),d=f}return c}; +Blockly.Toolbox.prototype.addCategory_=function(a,b){var c=null,d=Blockly.utils.replaceMessageReferences(a.name),e=this.tree_.createNode(d);e.onSizeChanged(this.handleNodeSizeChanged_);e.contents=[];b.add(e);(b=a.custom)?e.contents=b:c=this.createTree_(a.contents,e)||c;this.setColourOrStyle_(a,e,d);return c=this.setExpanded_(a,e)||c}; +Blockly.Toolbox.prototype.setColourOrStyle_=function(a,b,c){var d=a.categorystyle;(a=a.colour)&&d?(b.hexColour="",console.warn('Toolbox category "'+c+'" must not have both a style and a colour')):d?this.setColourFromStyle_(d,b,c):this.setColour_(a,b,c)};Blockly.Toolbox.prototype.addSeparator_=function(a,b,c){if(c&&"CATEGORY"==c.kind.toUpperCase())b.add(new Blockly.Toolbox.TreeSeparator(this.treeSeparatorConfig_));else return b.contents.push(a),a;return null}; +Blockly.Toolbox.prototype.setExpanded_=function(a,b){var c=null;"true"==a.expanded?(b.contents.length&&(c=b),b.setExpanded(!0)):b.setExpanded(!1);return c};Blockly.Toolbox.prototype.handleBeforeTreeSelected_=function(a){if(a==this.tree_)return!1;this.lastCategory_&&(this.lastCategory_.getRowElement().style.backgroundColor="");if(a){var b=a.hexColour||"#57e";a.getRowElement().style.backgroundColor=b;this.addColour_(a)}return!0}; +Blockly.Toolbox.prototype.handleAfterTreeSelected_=function(a,b){b&&b.contents&&b.contents.length?(this.flyout_.show(b.contents),this.lastCategory_!=b&&this.flyout_.scrollToStart(),this.workspace_.keyboardAccessibilityMode&&Blockly.navigation.setState(Blockly.navigation.STATE_TOOLBOX)):(this.flyout_.hide(),!this.workspace_.keyboardAccessibilityMode||b instanceof Blockly.Toolbox.TreeSeparator||Blockly.navigation.setState(Blockly.navigation.STATE_WS));a!=b&&a!=this&&(a=new Blockly.Events.Ui(null,"category", +a&&a.content,b&&b.content),a.workspaceId=this.workspace_.id,Blockly.Events.fire(a));b&&(this.lastCategory_=b)};Blockly.Toolbox.prototype.handleNodeSizeChanged_=function(){Blockly.svgResize(this.workspace_)}; +Blockly.Toolbox.prototype.onBlocklyAction=function(a){var b=this.tree_.getSelectedItem();if(!b)return!1;switch(a.name){case Blockly.navigation.actionNames.PREVIOUS:return b.selectPrevious();case Blockly.navigation.actionNames.OUT:return b.selectParent();case Blockly.navigation.actionNames.NEXT:return b.selectNext();case Blockly.navigation.actionNames.IN:return b.selectChild();default:return!1}}; +Blockly.Toolbox.prototype.dispose=function(){this.flyout_.dispose();this.tree_.dispose();this.workspace_.getThemeManager().unsubscribe(this.HtmlDiv);Blockly.utils.dom.removeNode(this.HtmlDiv);this.lastCategory_=null};Blockly.Toolbox.prototype.setVisible=function(a){this.HtmlDiv.style.display=a?"block":"none"};Blockly.Toolbox.prototype.getWidth=function(){return this.width};Blockly.Toolbox.prototype.getHeight=function(){return this.height};Blockly.Toolbox.prototype.getFlyout=function(){return this.flyout_}; +Blockly.Toolbox.prototype.position=function(){var a=this.HtmlDiv;if(a){var b=Blockly.svgSize(this.workspace_.getParentSvg());this.horizontalLayout_?(a.style.left="0",a.style.height="auto",a.style.width=b.width+"px",this.height=a.offsetHeight,this.toolboxPosition==Blockly.TOOLBOX_AT_TOP?a.style.top="0":a.style.bottom="0"):(this.toolboxPosition==Blockly.TOOLBOX_AT_RIGHT?a.style.right="0":a.style.left="0",a.style.height=b.height+"px",this.width=a.offsetWidth);this.flyout_.position()}}; +Blockly.Toolbox.prototype.setColour_=function(a,b,c){a=Blockly.utils.replaceMessageReferences(a);if(null===a||""===a)b.hexColour="";else{var d=Number(a);isNaN(d)?(d=Blockly.utils.colour.parse(a))?(b.hexColour=d,this.hasColours_=!0):(b.hexColour="",console.warn('Toolbox category "'+c+'" has unrecognized colour attribute: '+a)):(b.hexColour=Blockly.hueToHex(d),this.hasColours_=!0)}}; +Blockly.Toolbox.prototype.setColourFromStyle_=function(a,b,c){b.styleName=a;var d=this.workspace_.getTheme();a&&d&&((d=d.categoryStyles[a])&&d.colour?this.setColour_(d.colour,b,c):console.warn('Style "'+a+'" must exist and contain a colour value'))};Blockly.Toolbox.prototype.updateColourFromTheme_=function(a){if(a=a||this.tree_){a=a.getChildren(!1);for(var b=0,c;c=a[b];b++)c.styleName&&(this.setColourFromStyle_(c.styleName,c,""),this.addColour_()),this.updateColourFromTheme_(c)}}; +Blockly.Toolbox.prototype.refreshTheme=function(){var a=this.tree_;a&&(this.updateColourFromTheme_(a),this.updateSelectedItemColour_(a))};Blockly.Toolbox.prototype.updateSelectedItemColour_=function(a){if(a=a.getSelectedItem()){var b=a.hexColour||"#57e";a.getRowElement().style.backgroundColor=b;this.addColour_(a)}}; +Blockly.Toolbox.prototype.addColour_=function(a){a=(a||this.tree_).getChildren(!1);for(var b=0,c;c=a[b];b++){var d=c.getRowElement();if(d){var e=this.hasColours_?"8px solid "+(c.hexColour||"#ddd"):"none";this.workspace_.RTL?d.style.borderRight=e:d.style.borderLeft=e}this.addColour_(c)}};Blockly.Toolbox.prototype.clearSelection=function(){this.tree_.setSelectedItem(null)};Blockly.Toolbox.prototype.addStyle=function(a){Blockly.utils.dom.addClass(this.HtmlDiv,a)}; +Blockly.Toolbox.prototype.removeStyle=function(a){Blockly.utils.dom.removeClass(this.HtmlDiv,a)}; +Blockly.Toolbox.prototype.getClientRect=function(){if(!this.HtmlDiv)return null;var a=this.HtmlDiv.getBoundingClientRect(),b=a.top,c=b+a.height,d=a.left;a=d+a.width;return this.toolboxPosition==Blockly.TOOLBOX_AT_TOP?new Blockly.utils.Rect(-1E7,c,-1E7,1E7):this.toolboxPosition==Blockly.TOOLBOX_AT_BOTTOM?new Blockly.utils.Rect(b,1E7,-1E7,1E7):this.toolboxPosition==Blockly.TOOLBOX_AT_LEFT?new Blockly.utils.Rect(-1E7,1E7,-1E7,a):new Blockly.utils.Rect(-1E7,1E7,d,1E7)}; +Blockly.Toolbox.prototype.refreshSelection=function(){var a=this.tree_.getSelectedItem();a&&a.contents&&this.flyout_.show(a.contents)};Blockly.Toolbox.prototype.selectFirstCategory=function(){this.tree_.getSelectedItem()||this.tree_.selectChild()};Blockly.Toolbox.TreeSeparator=function(a){Blockly.tree.TreeNode.call(this,null,"",a)};Blockly.utils.object.inherits(Blockly.Toolbox.TreeSeparator,Blockly.tree.TreeNode); +Blockly.Css.register([".blocklyToolboxDelete {",'cursor: url("<<>>/handdelete.cur"), auto;',"}",".blocklyToolboxGrab {",'cursor: url("<<>>/handclosed.cur"), auto;',"cursor: grabbing;","cursor: -webkit-grabbing;","}",".blocklyToolboxDiv {","background-color: #ddd;","overflow-x: visible;","overflow-y: auto;","position: absolute;","z-index: 70;","-webkit-tap-highlight-color: transparent;","}",".blocklyTreeRoot {","padding: 4px 0;","}",".blocklyTreeRoot:focus {","outline: none;","}",".blocklyTreeRow {", +"height: 22px;","line-height: 22px;","margin-bottom: 3px;","padding-right: 8px;","white-space: nowrap;","}",".blocklyHorizontalTree {","float: left;","margin: 1px 5px 8px 0;","}",".blocklyHorizontalTreeRtl {","float: right;","margin: 1px 0 8px 5px;","}",'.blocklyToolboxDiv[dir="RTL"] .blocklyTreeRow {',"margin-left: 8px;","}",".blocklyTreeRow:not(.blocklyTreeSelected):hover {","background-color: rgba(255, 255, 255, 0.2);","}",".blocklyTreeSeparator {","border-bottom: solid #e5e5e5 1px;","height: 0;", +"margin: 5px 0;","}",".blocklyTreeSeparatorHorizontal {","border-right: solid #e5e5e5 1px;","width: 0;","padding: 5px 0;","margin: 0 5px;","}",".blocklyTreeIcon {","background-image: url(<<>>/sprites.png);","height: 16px;","vertical-align: middle;","width: 16px;","}",".blocklyTreeIconClosedLtr {","background-position: -32px -1px;","}",".blocklyTreeIconClosedRtl {","background-position: 0 -1px;","}",".blocklyTreeIconOpen {","background-position: -16px -1px;","}",".blocklyTreeSelected>.blocklyTreeIconClosedLtr {", +"background-position: -32px -17px;","}",".blocklyTreeSelected>.blocklyTreeIconClosedRtl {","background-position: 0 -17px;","}",".blocklyTreeSelected>.blocklyTreeIconOpen {","background-position: -16px -17px;","}",".blocklyTreeIconNone,",".blocklyTreeSelected>.blocklyTreeIconNone {","background-position: -48px -1px;","}",".blocklyTreeLabel {","cursor: default;","font: 16px sans-serif;","padding: 0 3px;","vertical-align: middle;","}",".blocklyToolboxDelete .blocklyTreeLabel {",'cursor: url("<<>>/handdelete.cur"), auto;', +"}",".blocklyTreeSelected .blocklyTreeLabel {","color: #fff;","}"]);Blockly.registry.register(Blockly.registry.Type.TOOLBOX,Blockly.registry.DEFAULT,Blockly.Toolbox);Blockly.Trashcan=function(a){this.workspace_=a;this.contents_=[];this.flyout=null;if(!(0>=this.workspace_.options.maxTrashcanContents)){a=new Blockly.Options({scrollbars:!0,parentWorkspace:this.workspace_,rtl:this.workspace_.RTL,oneBasedIndex:this.workspace_.options.oneBasedIndex,renderer:this.workspace_.options.renderer,rendererOverrides:this.workspace_.options.rendererOverrides});if(this.workspace_.horizontalLayout){a.toolboxPosition=this.workspace_.toolboxPosition==Blockly.TOOLBOX_AT_TOP?Blockly.TOOLBOX_AT_BOTTOM: +Blockly.TOOLBOX_AT_TOP;if(!Blockly.HorizontalFlyout)throw Error("Missing require for Blockly.HorizontalFlyout");this.flyout=new Blockly.HorizontalFlyout(a)}else{a.toolboxPosition=this.workspace_.toolboxPosition==Blockly.TOOLBOX_AT_RIGHT?Blockly.TOOLBOX_AT_LEFT:Blockly.TOOLBOX_AT_RIGHT;if(!Blockly.VerticalFlyout)throw Error("Missing require for Blockly.VerticalFlyout");this.flyout=new Blockly.VerticalFlyout(a)}this.workspace_.addChangeListener(this.onDelete_.bind(this))}}; +Blockly.Trashcan.prototype.WIDTH_=47;Blockly.Trashcan.prototype.BODY_HEIGHT_=44;Blockly.Trashcan.prototype.LID_HEIGHT_=16;Blockly.Trashcan.prototype.MARGIN_BOTTOM_=20;Blockly.Trashcan.prototype.MARGIN_SIDE_=20;Blockly.Trashcan.prototype.MARGIN_HOTSPOT_=10;Blockly.Trashcan.prototype.SPRITE_LEFT_=0;Blockly.Trashcan.prototype.SPRITE_TOP_=32;Blockly.Trashcan.prototype.HAS_BLOCKS_LID_ANGLE_=.1;Blockly.Trashcan.ANIMATION_LENGTH_=80;Blockly.Trashcan.ANIMATION_FRAMES_=4;Blockly.Trashcan.OPACITY_MIN_=.4; +Blockly.Trashcan.OPACITY_MAX_=.8;Blockly.Trashcan.MAX_LID_ANGLE_=45;Blockly.Trashcan.prototype.isOpen=!1;Blockly.Trashcan.prototype.minOpenness_=0;Blockly.Trashcan.prototype.svgGroup_=null;Blockly.Trashcan.prototype.svgLid_=null;Blockly.Trashcan.prototype.lidTask_=0;Blockly.Trashcan.prototype.lidOpen_=0;Blockly.Trashcan.prototype.left_=0;Blockly.Trashcan.prototype.top_=0; +Blockly.Trashcan.prototype.createDom=function(){this.svgGroup_=Blockly.utils.dom.createSvgElement("g",{"class":"blocklyTrash"},null);var a=String(Math.random()).substring(2);var b=Blockly.utils.dom.createSvgElement("clipPath",{id:"blocklyTrashBodyClipPath"+a},this.svgGroup_);Blockly.utils.dom.createSvgElement("rect",{width:this.WIDTH_,height:this.BODY_HEIGHT_,y:this.LID_HEIGHT_},b);var c=Blockly.utils.dom.createSvgElement("image",{width:Blockly.SPRITE.width,x:-this.SPRITE_LEFT_,height:Blockly.SPRITE.height, +y:-this.SPRITE_TOP_,"clip-path":"url(#blocklyTrashBodyClipPath"+a+")"},this.svgGroup_);c.setAttributeNS(Blockly.utils.dom.XLINK_NS,"xlink:href",this.workspace_.options.pathToMedia+Blockly.SPRITE.url);b=Blockly.utils.dom.createSvgElement("clipPath",{id:"blocklyTrashLidClipPath"+a},this.svgGroup_);Blockly.utils.dom.createSvgElement("rect",{width:this.WIDTH_,height:this.LID_HEIGHT_},b);this.svgLid_=Blockly.utils.dom.createSvgElement("image",{width:Blockly.SPRITE.width,x:-this.SPRITE_LEFT_,height:Blockly.SPRITE.height, +y:-this.SPRITE_TOP_,"clip-path":"url(#blocklyTrashLidClipPath"+a+")"},this.svgGroup_);this.svgLid_.setAttributeNS(Blockly.utils.dom.XLINK_NS,"xlink:href",this.workspace_.options.pathToMedia+Blockly.SPRITE.url);Blockly.bindEventWithChecks_(this.svgGroup_,"mouseup",this,this.click);Blockly.bindEvent_(c,"mouseover",this,this.mouseOver_);Blockly.bindEvent_(c,"mouseout",this,this.mouseOut_);this.animateLid_();return this.svgGroup_}; +Blockly.Trashcan.prototype.init=function(a){0this.minOpenness_&&1>this.lidOpen_&&(this.lidTask_=setTimeout(this.animateLid_.bind(this),Blockly.Trashcan.ANIMATION_LENGTH_/ +a))};Blockly.Trashcan.prototype.setLidAngle_=function(a){var b=this.workspace_.toolboxPosition==Blockly.TOOLBOX_AT_RIGHT||this.workspace_.horizontalLayout&&this.workspace_.RTL;this.svgLid_.setAttribute("transform","rotate("+(b?-a:a)+","+(b?4:this.WIDTH_-4)+","+(this.LID_HEIGHT_-2)+")")};Blockly.Trashcan.prototype.setMinOpenness_=function(a){this.minOpenness_=a;this.isOpen||this.setLidAngle_(a*Blockly.Trashcan.MAX_LID_ANGLE_)};Blockly.Trashcan.prototype.close=function(){this.setOpen(!1)}; +Blockly.Trashcan.prototype.click=function(){if(this.contents_.length){for(var a=[],b=0,c;c=this.contents_[b];b++)a[b]=Blockly.Xml.textToDom(c);this.flyout.show(a)}};Blockly.Trashcan.prototype.mouseOver_=function(){this.contents_.length&&this.setOpen(!0)};Blockly.Trashcan.prototype.mouseOut_=function(){this.setOpen(!1)}; +Blockly.Trashcan.prototype.onDelete_=function(a){if(!(0>=this.workspace_.options.maxTrashcanContents)&&a.type==Blockly.Events.BLOCK_DELETE&&"shadow"!=a.oldXml.tagName.toLowerCase()&&(a=this.cleanBlockXML_(a.oldXml),-1==this.contents_.indexOf(a))){for(this.contents_.unshift(a);this.contents_.length>this.workspace_.options.maxTrashcanContents;)this.contents_.pop();this.setMinOpenness_(this.HAS_BLOCKS_LID_ANGLE_)}}; +Blockly.Trashcan.prototype.cleanBlockXML_=function(a){for(var b=a=a.cloneNode(!0);b;){b.removeAttribute&&(b.removeAttribute("x"),b.removeAttribute("y"),b.removeAttribute("id"),b.removeAttribute("disabled"),"comment"==b.nodeName&&(b.removeAttribute("h"),b.removeAttribute("w"),b.removeAttribute("pinned")));var c=b.firstChild||b.nextSibling;if(!c)for(c=b.parentNode;c;){if(c.nextSibling){c=c.nextSibling;break}c=c.parentNode}b=c}return Blockly.Xml.domToText(a)};Blockly.VariablesDynamic={};Blockly.VariablesDynamic.onCreateVariableButtonClick_String=function(a){Blockly.Variables.createVariableButtonHandler(a.getTargetWorkspace(),void 0,"String")};Blockly.VariablesDynamic.onCreateVariableButtonClick_Number=function(a){Blockly.Variables.createVariableButtonHandler(a.getTargetWorkspace(),void 0,"Number")};Blockly.VariablesDynamic.onCreateVariableButtonClick_Colour=function(a){Blockly.Variables.createVariableButtonHandler(a.getTargetWorkspace(),void 0,"Colour")}; +Blockly.VariablesDynamic.flyoutCategory=function(a){var b=[],c=document.createElement("button");c.setAttribute("text",Blockly.Msg.NEW_STRING_VARIABLE);c.setAttribute("callbackKey","CREATE_VARIABLE_STRING");b.push(c);c=document.createElement("button");c.setAttribute("text",Blockly.Msg.NEW_NUMBER_VARIABLE);c.setAttribute("callbackKey","CREATE_VARIABLE_NUMBER");b.push(c);c=document.createElement("button");c.setAttribute("text",Blockly.Msg.NEW_COLOUR_VARIABLE);c.setAttribute("callbackKey","CREATE_VARIABLE_COLOUR"); +b.push(c);a.registerButtonCallback("CREATE_VARIABLE_STRING",Blockly.VariablesDynamic.onCreateVariableButtonClick_String);a.registerButtonCallback("CREATE_VARIABLE_NUMBER",Blockly.VariablesDynamic.onCreateVariableButtonClick_Number);a.registerButtonCallback("CREATE_VARIABLE_COLOUR",Blockly.VariablesDynamic.onCreateVariableButtonClick_Colour);a=Blockly.VariablesDynamic.flyoutCategoryBlocks(a);return b=b.concat(a)}; +Blockly.VariablesDynamic.flyoutCategoryBlocks=function(a){a=a.getAllVariables();var b=[];if(0image, .blocklyZoom>svg>image {","opacity: .4;","}",".blocklyZoom>image:hover, .blocklyZoom>svg>image:hover {","opacity: .6;","}",".blocklyZoom>image:active, .blocklyZoom>svg>image:active {","opacity: .8;","}"]);Blockly.Mutator=function(a){Blockly.Mutator.superClass_.constructor.call(this,null);this.quarkNames_=a};Blockly.utils.object.inherits(Blockly.Mutator,Blockly.Icon);Blockly.Mutator.prototype.workspaceWidth_=0;Blockly.Mutator.prototype.workspaceHeight_=0;Blockly.Mutator.prototype.setBlock=function(a){this.block_=a};Blockly.Mutator.prototype.getWorkspace=function(){return this.workspace_}; +Blockly.Mutator.prototype.drawIcon_=function(a){Blockly.utils.dom.createSvgElement("rect",{"class":"blocklyIconShape",rx:"4",ry:"4",height:"16",width:"16"},a);Blockly.utils.dom.createSvgElement("path",{"class":"blocklyIconSymbol",d:"m4.203,7.296 0,1.368 -0.92,0.677 -0.11,0.41 0.9,1.559 0.41,0.11 1.043,-0.457 1.187,0.683 0.127,1.134 0.3,0.3 1.8,0 0.3,-0.299 0.127,-1.138 1.185,-0.682 1.046,0.458 0.409,-0.11 0.9,-1.559 -0.11,-0.41 -0.92,-0.677 0,-1.366 0.92,-0.677 0.11,-0.41 -0.9,-1.559 -0.409,-0.109 -1.046,0.458 -1.185,-0.682 -0.127,-1.138 -0.3,-0.299 -1.8,0 -0.3,0.3 -0.126,1.135 -1.187,0.682 -1.043,-0.457 -0.41,0.11 -0.899,1.559 0.108,0.409z"}, +a);Blockly.utils.dom.createSvgElement("circle",{"class":"blocklyIconShape",r:"2.7",cx:"8",cy:"8"},a)};Blockly.Mutator.prototype.iconClick_=function(a){this.block_.isEditable()&&Blockly.Icon.prototype.iconClick_.call(this,a)}; +Blockly.Mutator.prototype.createEditor_=function(){this.svgDialog_=Blockly.utils.dom.createSvgElement("svg",{x:Blockly.Bubble.BORDER_WIDTH,y:Blockly.Bubble.BORDER_WIDTH},null);if(this.quarkNames_.length)for(var a=Blockly.utils.xml.createElement("xml"),b=0,c;c=this.quarkNames_[b];b++){var d=Blockly.utils.xml.createElement("block");d.setAttribute("type",c);a.appendChild(d)}else a=null;b=new Blockly.Options({disable:!1,parentWorkspace:this.block_.workspace,media:this.block_.workspace.options.pathToMedia, +rtl:this.block_.RTL,horizontalLayout:!1,renderer:this.block_.workspace.options.renderer,rendererOverrides:this.block_.workspace.options.rendererOverrides});b.toolboxPosition=this.block_.RTL?Blockly.TOOLBOX_AT_RIGHT:Blockly.TOOLBOX_AT_LEFT;if(c=!!a)b.languageTree=Blockly.utils.toolbox.convertToolboxToJSON(a),b.getMetrics=this.getFlyoutMetrics_.bind(this);this.workspace_=new Blockly.WorkspaceSvg(b);this.workspace_.isMutator=!0;this.workspace_.addChangeListener(Blockly.Events.disableOrphans);a=c?this.workspace_.addFlyout("g"): +null;b=this.workspace_.createDom("blocklyMutatorBackground");a&&b.insertBefore(a,this.workspace_.svgBlockCanvas_);this.svgDialog_.appendChild(b);return this.svgDialog_};Blockly.Mutator.prototype.updateEditable=function(){Blockly.Mutator.superClass_.updateEditable.call(this);this.block_.isInFlyout||(this.block_.isEditable()?this.iconGroup_&&Blockly.utils.dom.removeClass(this.iconGroup_,"blocklyIconGroupReadonly"):(this.setVisible(!1),this.iconGroup_&&Blockly.utils.dom.addClass(this.iconGroup_,"blocklyIconGroupReadonly")))}; +Blockly.Mutator.prototype.resizeBubble_=function(){var a=2*Blockly.Bubble.BORDER_WIDTH,b=this.workspace_.getCanvas().getBBox();var c=this.block_.RTL?-b.x:b.width+b.x;b=b.height+3*a;var d=this.workspace_.getFlyout();d&&(d=d.getMetrics_(),b=Math.max(b,d.contentHeight+20));c+=3*a;if(Math.abs(this.workspaceWidth_-c)>a||Math.abs(this.workspaceHeight_-b)>a)this.workspaceWidth_=c,this.workspaceHeight_=b,this.bubble_.setBubbleSize(c+a,b+a),this.svgDialog_.setAttribute("width",this.workspaceWidth_),this.svgDialog_.setAttribute("height", +this.workspaceHeight_);this.block_.RTL&&(a="translate("+this.workspaceWidth_+",0)",this.workspace_.getCanvas().setAttribute("transform",a));this.workspace_.resize()};Blockly.Mutator.prototype.onBubbleMove_=function(){this.workspace_&&this.workspace_.recordDeleteAreas()}; +Blockly.Mutator.prototype.setVisible=function(a){if(a!=this.isVisible())if(Blockly.Events.fire(new Blockly.Events.Ui(this.block_,"mutatorOpen",!a,a)),a){this.bubble_=new Blockly.Bubble(this.block_.workspace,this.createEditor_(),this.block_.pathObject.svgPath,this.iconXY_,null,null);this.bubble_.setSvgId(this.block_.id);this.bubble_.registerMoveEvent(this.onBubbleMove_.bind(this));var b=this.workspace_.options.languageTree;a=this.workspace_.getFlyout();b&&(a.init(this.workspace_),a.show(b));this.rootBlock_= +this.block_.decompose(this.workspace_);b=this.rootBlock_.getDescendants(!1);for(var c=0,d;d=b[c];c++)d.render();this.rootBlock_.setMovable(!1);this.rootBlock_.setDeletable(!1);a?(b=2*a.CORNER_RADIUS,a=a.getWidth()+b):a=b=16;this.block_.RTL&&(a=-a);this.rootBlock_.moveBy(a,b);if(this.block_.saveConnections){var e=this,f=this.block_;f.saveConnections(this.rootBlock_);this.sourceListener_=function(){f.saveConnections(e.rootBlock_)};this.block_.workspace.addChangeListener(this.sourceListener_)}this.resizeBubble_(); +this.workspace_.addChangeListener(this.workspaceChanged_.bind(this));this.applyColour()}else this.svgDialog_=null,this.workspace_.dispose(),this.rootBlock_=this.workspace_=null,this.bubble_.dispose(),this.bubble_=null,this.workspaceHeight_=this.workspaceWidth_=0,this.sourceListener_&&(this.block_.workspace.removeChangeListener(this.sourceListener_),this.sourceListener_=null)}; +Blockly.Mutator.prototype.workspaceChanged_=function(a){if(a.type!=Blockly.Events.UI&&(a.type!=Blockly.Events.CHANGE||"disabled"!=a.element)){if(!this.workspace_.isDragging())for(var b=this.workspace_.getTopBlocks(!1),c=0;a=b[c];c++){var d=a.getRelativeToSurfaceXY(),e=a.getHeightWidth();20>d.y+e.height&&a.moveBy(0,20-e.height-d.y)}this.rootBlock_.workspace==this.workspace_&&(Blockly.Events.setGroup(!0),a=this.block_,b=(b=a.mutationToDom())&&Blockly.Xml.domToText(b),a.compose(this.rootBlock_),a.initSvg(), +a.render(),Blockly.getMainWorkspace().keyboardAccessibilityMode&&Blockly.navigation.moveCursorOnBlockMutation(a),c=(c=a.mutationToDom())&&Blockly.Xml.domToText(c),b!=c&&Blockly.Events.fire(new Blockly.Events.BlockChange(a,"mutation",null,b,c)),this.workspace_.isDragging()||this.resizeBubble_(),Blockly.Events.setGroup(!1))}}; +Blockly.Mutator.prototype.getFlyoutMetrics_=function(){return{contentHeight:0,contentWidth:0,contentTop:0,contentLeft:0,viewHeight:this.workspaceHeight_,viewWidth:this.workspaceWidth_-this.workspace_.getFlyout().getWidth(),viewTop:0,viewLeft:0,absoluteTop:0,absoluteLeft:this.workspace_.RTL?0:this.workspace_.getFlyout().getWidth()}};Blockly.Mutator.prototype.dispose=function(){this.block_.mutator=null;Blockly.Icon.prototype.dispose.call(this)}; +Blockly.Mutator.prototype.updateBlockStyle=function(){var a=this.workspace_;if(a&&a.getAllBlocks(!1)){for(var b=a.getAllBlocks(!1),c=0;c=a&&this.sourceBlock_.outputConnection&&!b}else this.fullBlockClickTarget_=!1;this.fullBlockClickTarget_?this.clickTarget_=this.sourceBlock_.getSvgRoot():this.createBorderRect_();this.createTextElement_()}; +Blockly.FieldTextInput.prototype.doClassValidation_=function(a){return null===a||void 0===a?null:String(a)};Blockly.FieldTextInput.prototype.doValueInvalid_=function(a){this.isBeingEdited_&&(this.isTextValid_=!1,a=this.value_,this.value_=this.htmlInput_.untypedDefaultValue_,this.sourceBlock_&&Blockly.Events.isEnabled()&&Blockly.Events.fire(new Blockly.Events.BlockChange(this.sourceBlock_,"field",this.name||null,a,this.value_)))}; +Blockly.FieldTextInput.prototype.doValueUpdate_=function(a){this.isTextValid_=!0;this.value_=a;this.isBeingEdited_||(this.isDirty_=!0)};Blockly.FieldTextInput.prototype.applyColour=function(){this.sourceBlock_&&this.getConstants().FULL_BLOCK_FIELDS&&(this.borderRect_?this.borderRect_.setAttribute("stroke",this.sourceBlock_.style.colourTertiary):this.sourceBlock_.pathObject.svgPath.setAttribute("fill",this.getConstants().FIELD_BORDER_RECT_COLOUR))}; +Blockly.FieldTextInput.prototype.render_=function(){Blockly.FieldTextInput.superClass_.render_.call(this);if(this.isBeingEdited_){this.resizeEditor_();var a=this.htmlInput_;this.isTextValid_?(Blockly.utils.dom.removeClass(a,"blocklyInvalidInput"),Blockly.utils.aria.setState(a,Blockly.utils.aria.State.INVALID,!1)):(Blockly.utils.dom.addClass(a,"blocklyInvalidInput"),Blockly.utils.aria.setState(a,Blockly.utils.aria.State.INVALID,!0))}}; +Blockly.FieldTextInput.prototype.setSpellcheck=function(a){a!=this.spellcheck_&&(this.spellcheck_=a,this.htmlInput_&&this.htmlInput_.setAttribute("spellcheck",this.spellcheck_))};Blockly.FieldTextInput.prototype.showEditor_=function(a,b){this.workspace_=this.sourceBlock_.workspace;a=b||!1;!a&&(Blockly.utils.userAgent.MOBILE||Blockly.utils.userAgent.ANDROID||Blockly.utils.userAgent.IPAD)?this.showPromptEditor_():this.showInlineEditor_(a)}; +Blockly.FieldTextInput.prototype.showPromptEditor_=function(){var a=this;Blockly.prompt(Blockly.Msg.CHANGE_VALUE_TITLE,this.getText(),function(b){a.setValue(b)})};Blockly.FieldTextInput.prototype.showInlineEditor_=function(a){Blockly.WidgetDiv.show(this,this.sourceBlock_.RTL,this.widgetDispose_.bind(this));this.htmlInput_=this.widgetCreate_();this.isBeingEdited_=!0;a||(this.htmlInput_.focus({preventScroll:!0}),this.htmlInput_.select())}; +Blockly.FieldTextInput.prototype.widgetCreate_=function(){var a=Blockly.WidgetDiv.DIV;Blockly.utils.dom.addClass(this.getClickTarget_(),"editing");var b=document.createElement("input");b.className="blocklyHtmlInput";b.setAttribute("spellcheck",this.spellcheck_);var c=this.workspace_.getScale(),d=this.getConstants().FIELD_TEXT_FONTSIZE*c+"pt";a.style.fontSize=d;b.style.fontSize=d;d=Blockly.FieldTextInput.BORDERRADIUS*c+"px";if(this.fullBlockClickTarget_){d=this.getScaledBBox();d=(d.bottom-d.top)/2+ +"px";var e=this.sourceBlock_.getParent()?this.sourceBlock_.getParent().style.colourTertiary:this.sourceBlock_.style.colourTertiary;b.style.border=1*c+"px solid "+e;a.style.borderRadius=d;a.style.transition="box-shadow 0.25s ease 0s";this.getConstants().FIELD_TEXTINPUT_BOX_SHADOW&&(a.style.boxShadow="rgba(255, 255, 255, 0.3) 0px 0px 0px "+4*c+"px")}b.style.borderRadius=d;a.appendChild(b);b.value=b.defaultValue=this.getEditorText_(this.value_);b.untypedDefaultValue_=this.value_;b.oldValue_=null;this.resizeEditor_(); +this.bindInputEvents_(b);return b};Blockly.FieldTextInput.prototype.widgetDispose_=function(){this.isBeingEdited_=!1;this.isTextValid_=!0;this.forceRerender();if(this.onFinishEditing_)this.onFinishEditing_(this.value_);this.unbindInputEvents_();var a=Blockly.WidgetDiv.DIV.style;a.width="auto";a.height="auto";a.fontSize="";a.transition="";a.boxShadow="";this.htmlInput_=null;Blockly.utils.dom.removeClass(this.getClickTarget_(),"editing")}; +Blockly.FieldTextInput.prototype.bindInputEvents_=function(a){this.onKeyDownWrapper_=Blockly.bindEventWithChecks_(a,"keydown",this,this.onHtmlInputKeyDown_);this.onKeyInputWrapper_=Blockly.bindEventWithChecks_(a,"input",this,this.onHtmlInputChange_)}; +Blockly.FieldTextInput.prototype.unbindInputEvents_=function(){this.onKeyDownWrapper_&&(Blockly.unbindEvent_(this.onKeyDownWrapper_),this.onKeyDownWrapper_=null);this.onKeyInputWrapper_&&(Blockly.unbindEvent_(this.onKeyInputWrapper_),this.onKeyInputWrapper_=null)}; +Blockly.FieldTextInput.prototype.onHtmlInputKeyDown_=function(a){a.keyCode==Blockly.utils.KeyCodes.ENTER?(Blockly.WidgetDiv.hide(),Blockly.DropDownDiv.hideWithoutAnimation()):a.keyCode==Blockly.utils.KeyCodes.ESC?(this.htmlInput_.value=this.htmlInput_.defaultValue,Blockly.WidgetDiv.hide(),Blockly.DropDownDiv.hideWithoutAnimation()):a.keyCode==Blockly.utils.KeyCodes.TAB&&(Blockly.WidgetDiv.hide(),Blockly.DropDownDiv.hideWithoutAnimation(),this.sourceBlock_.tab(this,!a.shiftKey),a.preventDefault())}; +Blockly.FieldTextInput.prototype.onHtmlInputChange_=function(a){a=this.htmlInput_.value;a!==this.htmlInput_.oldValue_&&(this.htmlInput_.oldValue_=a,Blockly.Events.setGroup(!0),a=this.getValueFromEditorText_(a),this.setValue(a),this.forceRerender(),this.resizeEditor_(),Blockly.Events.setGroup(!1))};Blockly.FieldTextInput.prototype.setEditorValue_=function(a){this.isDirty_=!0;this.isBeingEdited_&&(this.htmlInput_.value=this.getEditorText_(a));this.setValue(a)}; +Blockly.FieldTextInput.prototype.resizeEditor_=function(){var a=Blockly.WidgetDiv.DIV,b=this.getScaledBBox();a.style.width=b.right-b.left+"px";a.style.height=b.bottom-b.top+"px";b=new Blockly.utils.Coordinate(this.sourceBlock_.RTL?b.right-a.offsetWidth:b.left,b.top);a.style.left=b.x+"px";a.style.top=b.y+"px"}; +Blockly.FieldTextInput.numberValidator=function(a){console.warn("Blockly.FieldTextInput.numberValidator is deprecated. Use Blockly.FieldNumber instead.");if(null===a)return null;a=String(a);a=a.replace(/O/ig,"0");a=a.replace(/,/g,"");a=Number(a||0);return isNaN(a)?null:String(a)};Blockly.FieldTextInput.nonnegativeIntegerValidator=function(a){(a=Blockly.FieldTextInput.numberValidator(a))&&(a=String(Math.max(0,Math.floor(a))));return a};Blockly.FieldTextInput.prototype.isTabNavigable=function(){return!0}; +Blockly.FieldTextInput.prototype.getText_=function(){return this.isBeingEdited_&&this.htmlInput_?this.htmlInput_.value:null};Blockly.FieldTextInput.prototype.getEditorText_=function(a){return String(a)};Blockly.FieldTextInput.prototype.getValueFromEditorText_=function(a){return a};Blockly.fieldRegistry.register("field_input",Blockly.FieldTextInput);Blockly.FieldAngle=function(a,b,c){this.clockwise_=Blockly.FieldAngle.CLOCKWISE;this.offset_=Blockly.FieldAngle.OFFSET;this.wrap_=Blockly.FieldAngle.WRAP;this.round_=Blockly.FieldAngle.ROUND;Blockly.FieldAngle.superClass_.constructor.call(this,a,b,c);this.moveSurfaceWrapper_=this.clickSurfaceWrapper_=this.clickWrapper_=this.line_=this.gauge_=null};Blockly.utils.object.inherits(Blockly.FieldAngle,Blockly.FieldTextInput);Blockly.FieldAngle.prototype.DEFAULT_VALUE=0; +Blockly.FieldAngle.fromJson=function(a){return new Blockly.FieldAngle(a.angle,void 0,a)};Blockly.FieldAngle.prototype.SERIALIZABLE=!0;Blockly.FieldAngle.ROUND=15;Blockly.FieldAngle.HALF=50;Blockly.FieldAngle.CLOCKWISE=!1;Blockly.FieldAngle.OFFSET=0;Blockly.FieldAngle.WRAP=360;Blockly.FieldAngle.RADIUS=Blockly.FieldAngle.HALF-1; +Blockly.FieldAngle.prototype.configure_=function(a){Blockly.FieldAngle.superClass_.configure_.call(this,a);switch(a.mode){case "compass":this.clockwise_=!0;this.offset_=90;break;case "protractor":this.clockwise_=!1,this.offset_=0}var b=a.clockwise;"boolean"==typeof b&&(this.clockwise_=b);b=a.offset;null!=b&&(b=Number(b),isNaN(b)||(this.offset_=b));b=a.wrap;null!=b&&(b=Number(b),isNaN(b)||(this.wrap_=b));a=a.round;null!=a&&(a=Number(a),isNaN(a)||(this.round_=a))}; +Blockly.FieldAngle.prototype.initView=function(){Blockly.FieldAngle.superClass_.initView.call(this);this.symbol_=Blockly.utils.dom.createSvgElement("tspan",{},null);this.symbol_.appendChild(document.createTextNode("\u00b0"));this.textElement_.appendChild(this.symbol_)};Blockly.FieldAngle.prototype.render_=function(){Blockly.FieldAngle.superClass_.render_.call(this);this.updateGraph_()}; +Blockly.FieldAngle.prototype.showEditor_=function(a){Blockly.FieldAngle.superClass_.showEditor_.call(this,a,Blockly.utils.userAgent.MOBILE||Blockly.utils.userAgent.ANDROID||Blockly.utils.userAgent.IPAD);a=this.dropdownCreate_();Blockly.DropDownDiv.getContentDiv().appendChild(a);Blockly.DropDownDiv.setColour(this.sourceBlock_.style.colourPrimary,this.sourceBlock_.style.colourTertiary);Blockly.DropDownDiv.showPositionedByField(this,this.dropdownDispose_.bind(this));this.updateGraph_()}; +Blockly.FieldAngle.prototype.dropdownCreate_=function(){var a=Blockly.utils.dom.createSvgElement("svg",{xmlns:Blockly.utils.dom.SVG_NS,"xmlns:html":Blockly.utils.dom.HTML_NS,"xmlns:xlink":Blockly.utils.dom.XLINK_NS,version:"1.1",height:2*Blockly.FieldAngle.HALF+"px",width:2*Blockly.FieldAngle.HALF+"px",style:"touch-action: none"},null),b=Blockly.utils.dom.createSvgElement("circle",{cx:Blockly.FieldAngle.HALF,cy:Blockly.FieldAngle.HALF,r:Blockly.FieldAngle.RADIUS,"class":"blocklyAngleCircle"},a);this.gauge_= +Blockly.utils.dom.createSvgElement("path",{"class":"blocklyAngleGauge"},a);this.line_=Blockly.utils.dom.createSvgElement("line",{x1:Blockly.FieldAngle.HALF,y1:Blockly.FieldAngle.HALF,"class":"blocklyAngleLine"},a);for(var c=0;360>c;c+=15)Blockly.utils.dom.createSvgElement("line",{x1:Blockly.FieldAngle.HALF+Blockly.FieldAngle.RADIUS,y1:Blockly.FieldAngle.HALF,x2:Blockly.FieldAngle.HALF+Blockly.FieldAngle.RADIUS-(0==c%45?10:5),y2:Blockly.FieldAngle.HALF,"class":"blocklyAngleMarks",transform:"rotate("+ +c+","+Blockly.FieldAngle.HALF+","+Blockly.FieldAngle.HALF+")"},a);this.clickWrapper_=Blockly.bindEventWithChecks_(a,"click",this,this.hide_);this.clickSurfaceWrapper_=Blockly.bindEventWithChecks_(b,"click",this,this.onMouseMove_,!0,!0);this.moveSurfaceWrapper_=Blockly.bindEventWithChecks_(b,"mousemove",this,this.onMouseMove_,!0,!0);return a}; +Blockly.FieldAngle.prototype.dropdownDispose_=function(){this.clickWrapper_&&(Blockly.unbindEvent_(this.clickWrapper_),this.clickWrapper_=null);this.clickSurfaceWrapper_&&(Blockly.unbindEvent_(this.clickSurfaceWrapper_),this.clickSurfaceWrapper_=null);this.moveSurfaceWrapper_&&(Blockly.unbindEvent_(this.moveSurfaceWrapper_),this.moveSurfaceWrapper_=null);this.line_=this.gauge_=null};Blockly.FieldAngle.prototype.hide_=function(){Blockly.DropDownDiv.hideIfOwner(this);Blockly.WidgetDiv.hide()}; +Blockly.FieldAngle.prototype.onMouseMove_=function(a){var b=this.gauge_.ownerSVGElement.getBoundingClientRect(),c=a.clientX-b.left-Blockly.FieldAngle.HALF;a=a.clientY-b.top-Blockly.FieldAngle.HALF;b=Math.atan(-a/c);isNaN(b)||(b=Blockly.utils.math.toDegrees(b),0>c?b+=180:0a&&(a+=360);a>this.wrap_&&(a-=360);return a};Blockly.Css.register(".blocklyAngleCircle {,stroke: #444;,stroke-width: 1;,fill: #ddd;,fill-opacity: .8;,},.blocklyAngleMarks {,stroke: #444;,stroke-width: 1;,},.blocklyAngleGauge {,fill: #f88;,fill-opacity: .8;,pointer-events: none;,},.blocklyAngleLine {,stroke: #f00;,stroke-width: 2;,stroke-linecap: round;,pointer-events: none;,}".split(",")); +Blockly.fieldRegistry.register("field_angle",Blockly.FieldAngle);Blockly.FieldCheckbox=function(a,b,c){this.checkChar_=null;Blockly.FieldCheckbox.superClass_.constructor.call(this,a,b,c)};Blockly.utils.object.inherits(Blockly.FieldCheckbox,Blockly.Field);Blockly.FieldCheckbox.prototype.DEFAULT_VALUE=!1;Blockly.FieldCheckbox.fromJson=function(a){return new Blockly.FieldCheckbox(a.checked,void 0,a)};Blockly.FieldCheckbox.CHECK_CHAR="\u2713";Blockly.FieldCheckbox.prototype.SERIALIZABLE=!0;Blockly.FieldCheckbox.prototype.CURSOR="default"; +Blockly.FieldCheckbox.prototype.configure_=function(a){Blockly.FieldCheckbox.superClass_.configure_.call(this,a);a.checkCharacter&&(this.checkChar_=a.checkCharacter)};Blockly.FieldCheckbox.prototype.initView=function(){Blockly.FieldCheckbox.superClass_.initView.call(this);Blockly.utils.dom.addClass(this.textElement_,"blocklyCheckbox");this.textElement_.style.display=this.value_?"block":"none"}; +Blockly.FieldCheckbox.prototype.render_=function(){this.textContent_&&(this.textContent_.nodeValue=this.getDisplayText_());this.updateSize_(this.getConstants().FIELD_CHECKBOX_X_OFFSET)};Blockly.FieldCheckbox.prototype.getDisplayText_=function(){return this.checkChar_||Blockly.FieldCheckbox.CHECK_CHAR};Blockly.FieldCheckbox.prototype.setCheckCharacter=function(a){this.checkChar_=a;this.forceRerender()};Blockly.FieldCheckbox.prototype.showEditor_=function(){this.setValue(!this.value_)}; +Blockly.FieldCheckbox.prototype.doClassValidation_=function(a){return!0===a||"TRUE"===a?"TRUE":!1===a||"FALSE"===a?"FALSE":null};Blockly.FieldCheckbox.prototype.doValueUpdate_=function(a){this.value_=this.convertValueToBool_(a);this.textElement_&&(this.textElement_.style.display=this.value_?"block":"none")};Blockly.FieldCheckbox.prototype.getValue=function(){return this.value_?"TRUE":"FALSE"};Blockly.FieldCheckbox.prototype.getValueBoolean=function(){return this.value_}; +Blockly.FieldCheckbox.prototype.getText=function(){return String(this.convertValueToBool_(this.value_))};Blockly.FieldCheckbox.prototype.convertValueToBool_=function(a){return"string"==typeof a?"TRUE"==a:!!a};Blockly.fieldRegistry.register("field_checkbox",Blockly.FieldCheckbox);Blockly.FieldColour=function(a,b,c){Blockly.FieldColour.superClass_.constructor.call(this,a,b,c);this.onKeyDownWrapper_=this.onMouseLeaveWrapper_=this.onMouseEnterWrapper_=this.onMouseMoveWrapper_=this.onClickWrapper_=this.highlightedIndex_=this.picker_=null};Blockly.utils.object.inherits(Blockly.FieldColour,Blockly.Field);Blockly.FieldColour.fromJson=function(a){return new Blockly.FieldColour(a.colour,void 0,a)};Blockly.FieldColour.prototype.SERIALIZABLE=!0;Blockly.FieldColour.prototype.CURSOR="default"; +Blockly.FieldColour.prototype.isDirty_=!1;Blockly.FieldColour.prototype.colours_=null;Blockly.FieldColour.prototype.titles_=null;Blockly.FieldColour.prototype.columns_=0;Blockly.FieldColour.prototype.configure_=function(a){Blockly.FieldColour.superClass_.configure_.call(this,a);a.colourOptions&&(this.colours_=a.colourOptions,this.titles_=a.colourTitles);a.columns&&(this.columns_=a.columns)}; +Blockly.FieldColour.prototype.initView=function(){this.size_=new Blockly.utils.Size(this.getConstants().FIELD_COLOUR_DEFAULT_WIDTH,this.getConstants().FIELD_COLOUR_DEFAULT_HEIGHT);this.getConstants().FIELD_COLOUR_FULL_BLOCK?this.clickTarget_=this.sourceBlock_.getSvgRoot():(this.createBorderRect_(),this.borderRect_.style.fillOpacity="1")}; +Blockly.FieldColour.prototype.applyColour=function(){this.getConstants().FIELD_COLOUR_FULL_BLOCK?(this.sourceBlock_.pathObject.svgPath.setAttribute("fill",this.getValue()),this.sourceBlock_.pathObject.svgPath.setAttribute("stroke","#fff")):this.borderRect_&&(this.borderRect_.style.fill=this.getValue())};Blockly.FieldColour.prototype.doClassValidation_=function(a){return"string"!=typeof a?null:Blockly.utils.colour.parse(a)}; +Blockly.FieldColour.prototype.doValueUpdate_=function(a){this.value_=a;this.borderRect_?this.borderRect_.style.fill=a:this.sourceBlock_&&this.sourceBlock_.rendered&&(this.sourceBlock_.pathObject.svgPath.setAttribute("fill",a),this.sourceBlock_.pathObject.svgPath.setAttribute("stroke","#fff"))};Blockly.FieldColour.prototype.getText=function(){var a=this.value_;/^#(.)\1(.)\2(.)\3$/.test(a)&&(a="#"+a[1]+a[3]+a[5]);return a};Blockly.FieldColour.COLOURS="#ffffff #cccccc #c0c0c0 #999999 #666666 #333333 #000000 #ffcccc #ff6666 #ff0000 #cc0000 #990000 #660000 #330000 #ffcc99 #ff9966 #ff9900 #ff6600 #cc6600 #993300 #663300 #ffff99 #ffff66 #ffcc66 #ffcc33 #cc9933 #996633 #663333 #ffffcc #ffff33 #ffff00 #ffcc00 #999900 #666600 #333300 #99ff99 #66ff99 #33ff33 #33cc00 #009900 #006600 #003300 #99ffff #33ffff #66cccc #00cccc #339999 #336666 #003333 #ccffff #66ffff #33ccff #3366ff #3333ff #000099 #000066 #ccccff #9999ff #6666cc #6633ff #6600cc #333399 #330099 #ffccff #ff99ff #cc66cc #cc33cc #993399 #663366 #330033".split(" "); +Blockly.FieldColour.prototype.DEFAULT_VALUE=Blockly.FieldColour.COLOURS[0];Blockly.FieldColour.TITLES=[];Blockly.FieldColour.COLUMNS=7;Blockly.FieldColour.prototype.setColours=function(a,b){this.colours_=a;b&&(this.titles_=b);return this};Blockly.FieldColour.prototype.setColumns=function(a){this.columns_=a;return this}; +Blockly.FieldColour.prototype.showEditor_=function(){this.picker_=this.dropdownCreate_();Blockly.DropDownDiv.getContentDiv().appendChild(this.picker_);Blockly.DropDownDiv.showPositionedByField(this,this.dropdownDispose_.bind(this));this.picker_.focus({preventScroll:!0})};Blockly.FieldColour.prototype.onClick_=function(a){a=(a=a.target)&&a.label;null!==a&&(this.setValue(a),Blockly.DropDownDiv.hideIfOwner(this))}; +Blockly.FieldColour.prototype.onKeyDown_=function(a){var b=!1;if(a.keyCode===Blockly.utils.KeyCodes.UP)this.moveHighlightBy_(0,-1),b=!0;else if(a.keyCode===Blockly.utils.KeyCodes.DOWN)this.moveHighlightBy_(0,1),b=!0;else if(a.keyCode===Blockly.utils.KeyCodes.LEFT)this.moveHighlightBy_(-1,0),b=!0;else if(a.keyCode===Blockly.utils.KeyCodes.RIGHT)this.moveHighlightBy_(1,0),b=!0;else if(a.keyCode===Blockly.utils.KeyCodes.ENTER){if(b=this.getHighlighted_())b=b&&b.label,null!==b&&this.setValue(b);Blockly.DropDownDiv.hideWithoutAnimation(); +b=!0}b&&a.stopPropagation()};Blockly.FieldColour.prototype.onBlocklyAction=function(a){if(this.picker_){if(a===Blockly.navigation.ACTION_PREVIOUS)return this.moveHighlightBy_(0,-1),!0;if(a===Blockly.navigation.ACTION_NEXT)return this.moveHighlightBy_(0,1),!0;if(a===Blockly.navigation.ACTION_OUT)return this.moveHighlightBy_(-1,0),!0;if(a===Blockly.navigation.ACTION_IN)return this.moveHighlightBy_(1,0),!0}return Blockly.FieldColour.superClass_.onBlocklyAction.call(this,a)}; +Blockly.FieldColour.prototype.moveHighlightBy_=function(a,b){var c=this.colours_||Blockly.FieldColour.COLOURS,d=this.columns_||Blockly.FieldColour.COLUMNS,e=this.highlightedIndex_%d,f=Math.floor(this.highlightedIndex_/d);e+=a;f+=b;0>a?0>e&&0e&&(e=0):0d-1&&fd-1&&e--:0>b?0>f&&(f=0):0Math.floor(c.length/d)-1&&(f=Math.floor(c.length/d)-1);this.setHighlightedCell_(this.picker_.childNodes[f].childNodes[e],f*d+e)}; +Blockly.FieldColour.prototype.onMouseMove_=function(a){var b=(a=a.target)&&Number(a.getAttribute("data-index"));null!==b&&b!==this.highlightedIndex_&&this.setHighlightedCell_(a,b)};Blockly.FieldColour.prototype.onMouseEnter_=function(){this.picker_.focus({preventScroll:!0})};Blockly.FieldColour.prototype.onMouseLeave_=function(){this.picker_.blur();var a=this.getHighlighted_();a&&Blockly.utils.dom.removeClass(a,"blocklyColourHighlighted")}; +Blockly.FieldColour.prototype.getHighlighted_=function(){var a=this.columns_||Blockly.FieldColour.COLUMNS,b=this.picker_.childNodes[Math.floor(this.highlightedIndex_/a)];return b?b.childNodes[this.highlightedIndex_%a]:null}; +Blockly.FieldColour.prototype.setHighlightedCell_=function(a,b){var c=this.getHighlighted_();c&&Blockly.utils.dom.removeClass(c,"blocklyColourHighlighted");Blockly.utils.dom.addClass(a,"blocklyColourHighlighted");this.highlightedIndex_=b;Blockly.utils.aria.setState(this.picker_,Blockly.utils.aria.State.ACTIVEDESCENDANT,a.getAttribute("id"))}; +Blockly.FieldColour.prototype.dropdownCreate_=function(){var a=this.columns_||Blockly.FieldColour.COLUMNS,b=this.colours_||Blockly.FieldColour.COLOURS,c=this.titles_||Blockly.FieldColour.TITLES,d=this.getValue(),e=document.createElement("table");e.className="blocklyColourTable";e.tabIndex=0;e.dir="ltr";Blockly.utils.aria.setRole(e,Blockly.utils.aria.Role.GRID);Blockly.utils.aria.setState(e,Blockly.utils.aria.State.EXPANDED,!0);Blockly.utils.aria.setState(e,Blockly.utils.aria.State.ROWCOUNT,Math.floor(b.length/ +a));Blockly.utils.aria.setState(e,Blockly.utils.aria.State.COLCOUNT,a);for(var f,g=0;gtr>td {","border: .5px solid #888;","box-sizing: border-box;","cursor: pointer;","display: inline-block;","height: 20px;","padding: 0;","width: 20px;","}",".blocklyColourTable>tr>td.blocklyColourHighlighted {","border-color: #eee;","box-shadow: 2px 2px 7px 2px rgba(0,0,0,.3);","position: relative;","}",".blocklyColourSelected, .blocklyColourSelected:hover {", +"border-color: #eee !important;","outline: 1px solid #333;","position: relative;","}"]);Blockly.fieldRegistry.register("field_colour",Blockly.FieldColour);Blockly.FieldDropdown=function(a,b,c){"function"!=typeof a&&Blockly.FieldDropdown.validateOptions_(a);this.menuGenerator_=a;this.suffixField=this.prefixField=this.generatedOptions_=null;this.trimOptions_();this.selectedOption_=this.getOptions(!1)[0];Blockly.FieldDropdown.superClass_.constructor.call(this,this.selectedOption_[1],b,c);this.svgArrow_=this.arrow_=this.imageElement_=this.menu_=this.selectedMenuItem_=null};Blockly.utils.object.inherits(Blockly.FieldDropdown,Blockly.Field); +Blockly.FieldDropdown.fromJson=function(a){return new Blockly.FieldDropdown(a.options,void 0,a)};Blockly.FieldDropdown.prototype.SERIALIZABLE=!0;Blockly.FieldDropdown.CHECKMARK_OVERHANG=25;Blockly.FieldDropdown.MAX_MENU_HEIGHT_VH=.45;Blockly.FieldDropdown.IMAGE_Y_OFFSET=5;Blockly.FieldDropdown.IMAGE_Y_PADDING=2*Blockly.FieldDropdown.IMAGE_Y_OFFSET;Blockly.FieldDropdown.ARROW_CHAR=Blockly.utils.userAgent.ANDROID?"\u25bc":"\u25be";Blockly.FieldDropdown.prototype.CURSOR="default"; +Blockly.FieldDropdown.prototype.initView=function(){this.shouldAddBorderRect_()?this.createBorderRect_():this.clickTarget_=this.sourceBlock_.getSvgRoot();this.createTextElement_();this.imageElement_=Blockly.utils.dom.createSvgElement("image",{},this.fieldGroup_);this.getConstants().FIELD_DROPDOWN_SVG_ARROW?this.createSVGArrow_():this.createTextArrow_();this.borderRect_&&Blockly.utils.dom.addClass(this.borderRect_,"blocklyDropdownRect")}; +Blockly.FieldDropdown.prototype.shouldAddBorderRect_=function(){return!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW&&!this.sourceBlock_.isShadow()}; +Blockly.FieldDropdown.prototype.createTextArrow_=function(){this.arrow_=Blockly.utils.dom.createSvgElement("tspan",{},this.textElement_);this.arrow_.appendChild(document.createTextNode(this.sourceBlock_.RTL?Blockly.FieldDropdown.ARROW_CHAR+" ":" "+Blockly.FieldDropdown.ARROW_CHAR));this.sourceBlock_.RTL?this.textElement_.insertBefore(this.arrow_,this.textContent_):this.textElement_.appendChild(this.arrow_)}; +Blockly.FieldDropdown.prototype.createSVGArrow_=function(){this.svgArrow_=Blockly.utils.dom.createSvgElement("image",{height:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+"px",width:this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE+"px"},this.fieldGroup_);this.svgArrow_.setAttributeNS(Blockly.utils.dom.XLINK_NS,"xlink:href",this.getConstants().FIELD_DROPDOWN_SVG_ARROW_DATAURI)}; +Blockly.FieldDropdown.prototype.showEditor_=function(a){this.menu_=this.dropdownCreate_();this.menu_.openingCoords=a&&"number"===typeof a.clientX?new Blockly.utils.Coordinate(a.clientX,a.clientY):null;this.menu_.render(Blockly.DropDownDiv.getContentDiv());a=this.menu_.getElement();Blockly.utils.dom.addClass(a,"blocklyDropdownMenu");if(this.getConstants().FIELD_DROPDOWN_COLOURED_DIV){a=this.sourceBlock_.isShadow()?this.sourceBlock_.getParent().getColour():this.sourceBlock_.getColour();var b=this.sourceBlock_.isShadow()? +this.sourceBlock_.getParent().style.colourTertiary:this.sourceBlock_.style.colourTertiary;Blockly.DropDownDiv.setColour(a,b)}Blockly.DropDownDiv.showPositionedByField(this,this.dropdownDispose_.bind(this));this.menu_.focus();this.selectedMenuItem_&&this.menu_.setHighlighted(this.selectedMenuItem_);this.applyColour()}; +Blockly.FieldDropdown.prototype.dropdownCreate_=function(){var a=new Blockly.Menu;a.setRole(Blockly.utils.aria.Role.LISTBOX);var b=this.getOptions(!1);this.selectedMenuItem_=null;for(var c=0;ca.length)){b=[];for(c=0;c=c||0>=b)throw Error("Height and width values of an image field must be greater than 0.");this.flipRtl_=!1;this.altText_="";Blockly.FieldImage.superClass_.constructor.call(this, +a,null,g);g||(this.flipRtl_=!!f,this.altText_=Blockly.utils.replaceMessageReferences(d)||"");this.size_=new Blockly.utils.Size(b,c+Blockly.FieldImage.Y_PADDING);this.imageHeight_=c;this.clickHandler_=null;"function"==typeof e&&(this.clickHandler_=e);this.imageElement_=null};Blockly.utils.object.inherits(Blockly.FieldImage,Blockly.Field);Blockly.FieldImage.prototype.DEFAULT_VALUE="";Blockly.FieldImage.fromJson=function(a){return new Blockly.FieldImage(a.src,a.width,a.height,void 0,void 0,void 0,a)}; +Blockly.FieldImage.Y_PADDING=1;Blockly.FieldImage.prototype.EDITABLE=!1;Blockly.FieldImage.prototype.isDirty_=!1;Blockly.FieldImage.prototype.configure_=function(a){Blockly.FieldImage.superClass_.configure_.call(this,a);this.flipRtl_=!!a.flipRtl;this.altText_=Blockly.utils.replaceMessageReferences(a.alt)||""}; +Blockly.FieldImage.prototype.initView=function(){this.imageElement_=Blockly.utils.dom.createSvgElement("image",{height:this.imageHeight_+"px",width:this.size_.width+"px",alt:this.altText_},this.fieldGroup_);this.imageElement_.setAttributeNS(Blockly.utils.dom.XLINK_NS,"xlink:href",this.value_);this.clickHandler_&&(this.imageElement_.style.cursor="pointer")};Blockly.FieldImage.prototype.updateSize_=function(){}; +Blockly.FieldImage.prototype.doClassValidation_=function(a){return"string"!=typeof a?null:a};Blockly.FieldImage.prototype.doValueUpdate_=function(a){this.value_=a;this.imageElement_&&this.imageElement_.setAttributeNS(Blockly.utils.dom.XLINK_NS,"xlink:href",String(this.value_))};Blockly.FieldImage.prototype.getFlipRtl=function(){return this.flipRtl_};Blockly.FieldImage.prototype.setAlt=function(a){a!=this.altText_&&(this.altText_=a||"",this.imageElement_&&this.imageElement_.setAttribute("alt",this.altText_))}; +Blockly.FieldImage.prototype.showEditor_=function(){this.clickHandler_&&this.clickHandler_(this)};Blockly.FieldImage.prototype.setOnClickHandler=function(a){this.clickHandler_=a};Blockly.FieldImage.prototype.getText_=function(){return this.altText_};Blockly.fieldRegistry.register("field_image",Blockly.FieldImage);Blockly.FieldMultilineInput=function(a,b,c){Blockly.FieldMultilineInput.superClass_.constructor.call(this,a,b,c);this.textGroup_=null};Blockly.utils.object.inherits(Blockly.FieldMultilineInput,Blockly.FieldTextInput);Blockly.FieldMultilineInput.fromJson=function(a){var b=Blockly.utils.replaceMessageReferences(a.text);return new Blockly.FieldMultilineInput(b,void 0,a)}; +Blockly.FieldMultilineInput.prototype.initView=function(){this.createBorderRect_();this.textGroup_=Blockly.utils.dom.createSvgElement("g",{"class":"blocklyEditableText"},this.fieldGroup_)}; +Blockly.FieldMultilineInput.prototype.getDisplayText_=function(){var a=this.value_;if(!a)return Blockly.Field.NBSP;var b=a.split("\n");a="";for(var c=0;cthis.maxDisplayLength&&(d=d.substring(0,this.maxDisplayLength-4)+"...");d=d.replace(/\s/g,Blockly.Field.NBSP);a+=d;c!==b.length-1&&(a+="\n")}this.sourceBlock_.RTL&&(a+="\u200f");return a}; +Blockly.FieldMultilineInput.prototype.render_=function(){for(var a;a=this.textGroup_.firstChild;)this.textGroup_.removeChild(a);a=this.getDisplayText_().split("\n");for(var b=0,c=0;cb&&(b=e);c+=this.getConstants().FIELD_TEXT_HEIGHT+(0this.max_&&Blockly.utils.aria.setState(a,Blockly.utils.aria.State.VALUEMAX,this.max_);return a};Blockly.fieldRegistry.register("field_number",Blockly.FieldNumber);Blockly.FieldVariable=function(a,b,c,d,e){this.menuGenerator_=Blockly.FieldVariable.dropdownCreate;this.defaultVariableName=a||"";this.size_=new Blockly.utils.Size(0,0);e&&this.configure_(e);b&&this.setValidator(b);e||this.setTypes_(c,d)};Blockly.utils.object.inherits(Blockly.FieldVariable,Blockly.FieldDropdown);Blockly.FieldVariable.fromJson=function(a){var b=Blockly.utils.replaceMessageReferences(a.variable);return new Blockly.FieldVariable(b,void 0,void 0,void 0,a)}; +Blockly.FieldVariable.prototype.SERIALIZABLE=!0;Blockly.FieldVariable.prototype.configure_=function(a){Blockly.FieldVariable.superClass_.configure_.call(this,a);this.setTypes_(a.variableTypes,a.defaultType)};Blockly.FieldVariable.prototype.initModel=function(){if(!this.variable_){var a=Blockly.Variables.getOrCreateVariablePackage(this.sourceBlock_.workspace,null,this.defaultVariableName,this.defaultType_);this.doValueUpdate_(a.getId())}}; +Blockly.FieldVariable.prototype.shouldAddBorderRect_=function(){return Blockly.FieldVariable.superClass_.shouldAddBorderRect_.call(this)&&(!this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW||"variables_get"!=this.sourceBlock_.type)}; +Blockly.FieldVariable.prototype.fromXml=function(a){var b=a.getAttribute("id"),c=a.textContent,d=a.getAttribute("variabletype")||a.getAttribute("variableType")||"";b=Blockly.Variables.getOrCreateVariablePackage(this.sourceBlock_.workspace,b,c,d);if(null!=d&&d!==b.type)throw Error("Serialized variable type with id '"+b.getId()+"' had type "+b.type+", and does not match variable field that references it: "+Blockly.Xml.domToText(a)+".");this.setValue(b.getId())}; +Blockly.FieldVariable.prototype.toXml=function(a){this.initModel();a.id=this.variable_.getId();a.textContent=this.variable_.name;this.variable_.type&&a.setAttribute("variabletype",this.variable_.type);return a};Blockly.FieldVariable.prototype.setSourceBlock=function(a){if(a.isShadow())throw Error("Variable fields are not allowed to exist on shadow blocks.");Blockly.FieldVariable.superClass_.setSourceBlock.call(this,a)}; +Blockly.FieldVariable.prototype.getValue=function(){return this.variable_?this.variable_.getId():null};Blockly.FieldVariable.prototype.getText=function(){return this.variable_?this.variable_.name:""};Blockly.FieldVariable.prototype.getVariable=function(){return this.variable_};Blockly.FieldVariable.prototype.getValidator=function(){return this.variable_?this.validator_:null}; +Blockly.FieldVariable.prototype.doClassValidation_=function(a){if(null===a)return null;var b=Blockly.Variables.getVariable(this.sourceBlock_.workspace,a);if(!b)return console.warn("Variable id doesn't point to a real variable! ID was "+a),null;b=b.type;return this.typeIsAllowed_(b)?a:(console.warn("Variable type doesn't match this field! Type was "+b),null)}; +Blockly.FieldVariable.prototype.doValueUpdate_=function(a){this.variable_=Blockly.Variables.getVariable(this.sourceBlock_.workspace,a);Blockly.FieldVariable.superClass_.doValueUpdate_.call(this,a)};Blockly.FieldVariable.prototype.typeIsAllowed_=function(a){var b=this.getVariableTypes_();if(!b)return!0;for(var c=0;crect,",a+" .blocklyEditableText>rect {","fill: "+this.FIELD_BORDER_RECT_COLOUR+";","fill-opacity: .6;","stroke: none;","}",a+" .blocklyNonEditableText>text,",a+" .blocklyEditableText>text {","fill: #000;", +"}",a+" .blocklyFlyoutLabelText {","fill: #000;","}",a+" .blocklyText.blocklyBubbleText {","fill: #000;","}",a+" .blocklyEditableText:not(.editing):hover>rect {","stroke: #fff;","stroke-width: 2;","}",a+" .blocklyHtmlInput {","font-family: "+this.FIELD_TEXT_FONTFAMILY+";","font-weight: "+this.FIELD_TEXT_FONTWEIGHT+";","}",a+" .blocklySelected>.blocklyPath {","stroke: #fc3;","stroke-width: 3px;","}",a+" .blocklyHighlightedConnectionPath {","stroke: #fc3;","}",a+" .blocklyReplaceable .blocklyPath {", +"fill-opacity: .5;","}",a+" .blocklyReplaceable .blocklyPathLight,",a+" .blocklyReplaceable .blocklyPathDark {","display: none;","}",a+" .blocklyInsertionMarker>.blocklyPath {","fill-opacity: "+this.INSERTION_MARKER_OPACITY+";","stroke: none;","}"]};Blockly.blockRendering.MarkerSvg=function(a,b,c){this.workspace_=a;this.marker_=c;this.parent_=null;this.constants_=b;this.currentMarkerSvg=null;a=this.isCursor()?this.constants_.CURSOR_COLOUR:this.constants_.MARKER_COLOUR;this.colour_=c.colour||a};Blockly.blockRendering.MarkerSvg.CURSOR_CLASS="blocklyCursor";Blockly.blockRendering.MarkerSvg.MARKER_CLASS="blocklyMarker";Blockly.blockRendering.MarkerSvg.HEIGHT_MULTIPLIER=.75;Blockly.blockRendering.MarkerSvg.prototype.getSvgRoot=function(){return this.svgGroup_}; +Blockly.blockRendering.MarkerSvg.prototype.getMarker=function(){return this.marker_};Blockly.blockRendering.MarkerSvg.prototype.isCursor=function(){return"cursor"==this.marker_.type};Blockly.blockRendering.MarkerSvg.prototype.createDom=function(){var a=this.isCursor()?Blockly.blockRendering.MarkerSvg.CURSOR_CLASS:Blockly.blockRendering.MarkerSvg.MARKER_CLASS;this.svgGroup_=Blockly.utils.dom.createSvgElement("g",{"class":a},null);this.createDomInternal_();return this.svgGroup_}; +Blockly.blockRendering.MarkerSvg.prototype.setParent_=function(a){this.isCursor()?(this.parent_&&this.parent_.setCursorSvg(null),a.setCursorSvg(this.getSvgRoot())):(this.parent_&&this.parent_.setMarkerSvg(null),a.setMarkerSvg(this.getSvgRoot()));this.parent_=a}; +Blockly.blockRendering.MarkerSvg.prototype.draw=function(a,b){if(b){this.constants_=this.workspace_.getRenderer().getConstants();var c=this.isCursor()?this.constants_.CURSOR_COLOUR:this.constants_.MARKER_COLOUR;this.colour_=this.marker_.colour||c;this.applyColour_(b);this.showAtLocation_(b);this.fireMarkerEvent_(a,b);a=this.currentMarkerSvg.childNodes[0];void 0!==a&&a.beginElement&&a.beginElement()}else this.hide()}; +Blockly.blockRendering.MarkerSvg.prototype.showAtLocation_=function(a){var b=a.getLocation();a.getType()==Blockly.ASTNode.types.BLOCK?this.showWithBlock_(a):a.getType()==Blockly.ASTNode.types.OUTPUT?this.showWithOutput_(a):b.type==Blockly.INPUT_VALUE?this.showWithInput_(a):b.type==Blockly.NEXT_STATEMENT?this.showWithNext_(a):a.getType()==Blockly.ASTNode.types.PREVIOUS?this.showWithPrevious_(a):a.getType()==Blockly.ASTNode.types.FIELD?this.showWithField_(a):a.getType()==Blockly.ASTNode.types.WORKSPACE? +this.showWithCoordinates_(a):a.getType()==Blockly.ASTNode.types.STACK&&this.showWithStack_(a)}; +Blockly.blockRendering.MarkerSvg.prototype.showWithBlockPrevOutput_=function(a){a=a.getSourceBlock();var b=a.width,c=a.height,d=c*Blockly.blockRendering.MarkerSvg.HEIGHT_MULTIPLIER,e=this.constants_.CURSOR_BLOCK_PADDING;if(a.previousConnection){var f=this.constants_.shapeFor(a.previousConnection);this.positionPrevious_(b,e,d,f)}else a.outputConnection?(f=this.constants_.shapeFor(a.outputConnection),this.positionOutput_(b,c,f)):this.positionBlock_(b,e,d);this.setParent_(a);this.showCurrent_()}; +Blockly.blockRendering.MarkerSvg.prototype.showWithBlock_=function(a){this.showWithBlockPrevOutput_(a)};Blockly.blockRendering.MarkerSvg.prototype.showWithPrevious_=function(a){this.showWithBlockPrevOutput_(a)};Blockly.blockRendering.MarkerSvg.prototype.showWithOutput_=function(a){this.showWithBlockPrevOutput_(a)}; +Blockly.blockRendering.MarkerSvg.prototype.showWithCoordinates_=function(a){var b=a.getWsCoordinate();a=b.x;b=b.y;this.workspace_.RTL&&(a-=this.constants_.CURSOR_WS_WIDTH);this.positionLine_(a,b,this.constants_.CURSOR_WS_WIDTH);this.setParent_(this.workspace_);this.showCurrent_()};Blockly.blockRendering.MarkerSvg.prototype.showWithField_=function(a){a=a.getLocation();var b=a.getSize().width,c=a.getSize().height;this.positionRect_(0,0,b,c);this.setParent_(a);this.showCurrent_()}; +Blockly.blockRendering.MarkerSvg.prototype.showWithInput_=function(a){a=a.getLocation();var b=a.getSourceBlock();this.positionInput_(a);this.setParent_(b);this.showCurrent_()};Blockly.blockRendering.MarkerSvg.prototype.showWithNext_=function(a){var b=a.getLocation();a=b.getSourceBlock();var c=0;b=b.getOffsetInBlock().y;var d=a.getHeightWidth().width;this.workspace_.RTL&&(c=-d);this.positionLine_(c,b,d);this.setParent_(a);this.showCurrent_()}; +Blockly.blockRendering.MarkerSvg.prototype.showWithStack_=function(a){a=a.getLocation();var b=a.getHeightWidth(),c=b.width+this.constants_.CURSOR_STACK_PADDING;b=b.height+this.constants_.CURSOR_STACK_PADDING;var d=-this.constants_.CURSOR_STACK_PADDING/2,e=-this.constants_.CURSOR_STACK_PADDING/2,f=d;this.workspace_.RTL&&(f=-(c+d));this.positionRect_(f,e,c,b);this.setParent_(a);this.showCurrent_()}; +Blockly.blockRendering.MarkerSvg.prototype.showCurrent_=function(){this.hide();this.currentMarkerSvg.style.display=""};Blockly.blockRendering.MarkerSvg.prototype.positionBlock_=function(a,b,c){a=Blockly.utils.svgPaths.moveBy(-b,c)+Blockly.utils.svgPaths.lineOnAxis("V",-b)+Blockly.utils.svgPaths.lineOnAxis("H",a+2*b)+Blockly.utils.svgPaths.lineOnAxis("V",c);this.markerBlock_.setAttribute("d",a);this.workspace_.RTL&&this.flipRtl_(this.markerBlock_);this.currentMarkerSvg=this.markerBlock_}; +Blockly.blockRendering.MarkerSvg.prototype.positionInput_=function(a){var b=a.getOffsetInBlock().x,c=a.getOffsetInBlock().y;a=Blockly.utils.svgPaths.moveTo(0,0)+this.constants_.shapeFor(a).pathDown;this.markerInput_.setAttribute("d",a);this.markerInput_.setAttribute("transform","translate("+b+","+c+")"+(this.workspace_.RTL?" scale(-1 1)":""));this.currentMarkerSvg=this.markerInput_}; +Blockly.blockRendering.MarkerSvg.prototype.positionLine_=function(a,b,c){this.markerSvgLine_.setAttribute("x",a);this.markerSvgLine_.setAttribute("y",b);this.markerSvgLine_.setAttribute("width",c);this.currentMarkerSvg=this.markerSvgLine_}; +Blockly.blockRendering.MarkerSvg.prototype.positionOutput_=function(a,b,c){a=Blockly.utils.svgPaths.moveBy(a,0)+Blockly.utils.svgPaths.lineOnAxis("h",-(a-c.width))+Blockly.utils.svgPaths.lineOnAxis("v",this.constants_.TAB_OFFSET_FROM_TOP)+c.pathDown+Blockly.utils.svgPaths.lineOnAxis("V",b)+Blockly.utils.svgPaths.lineOnAxis("H",a);this.markerBlock_.setAttribute("d",a);this.workspace_.RTL&&this.flipRtl_(this.markerBlock_);this.currentMarkerSvg=this.markerBlock_}; +Blockly.blockRendering.MarkerSvg.prototype.positionPrevious_=function(a,b,c,d){a=Blockly.utils.svgPaths.moveBy(-b,c)+Blockly.utils.svgPaths.lineOnAxis("V",-b)+Blockly.utils.svgPaths.lineOnAxis("H",this.constants_.NOTCH_OFFSET_LEFT)+d.pathLeft+Blockly.utils.svgPaths.lineOnAxis("H",a+2*b)+Blockly.utils.svgPaths.lineOnAxis("V",c);this.markerBlock_.setAttribute("d",a);this.workspace_.RTL&&this.flipRtl_(this.markerBlock_);this.currentMarkerSvg=this.markerBlock_}; +Blockly.blockRendering.MarkerSvg.prototype.positionRect_=function(a,b,c,d){this.markerSvgRect_.setAttribute("x",a);this.markerSvgRect_.setAttribute("y",b);this.markerSvgRect_.setAttribute("width",c);this.markerSvgRect_.setAttribute("height",d);this.currentMarkerSvg=this.markerSvgRect_};Blockly.blockRendering.MarkerSvg.prototype.flipRtl_=function(a){a.setAttribute("transform","scale(-1 1)")}; +Blockly.blockRendering.MarkerSvg.prototype.hide=function(){this.markerSvgLine_.style.display="none";this.markerSvgRect_.style.display="none";this.markerInput_.style.display="none";this.markerBlock_.style.display="none"};Blockly.blockRendering.MarkerSvg.prototype.fireMarkerEvent_=function(a,b){var c=b.getSourceBlock(),d=this.isCursor()?"cursorMove":"markerMove";a=new Blockly.Events.Ui(c,d,a,b);b.getType()==Blockly.ASTNode.types.WORKSPACE&&(a.workspaceId=b.getLocation().id);Blockly.Events.fire(a)}; +Blockly.blockRendering.MarkerSvg.prototype.getBlinkProperties_=function(){return{attributeType:"XML",attributeName:"fill",dur:"1s",values:this.colour_+";transparent;transparent;",repeatCount:"indefinite"}}; +Blockly.blockRendering.MarkerSvg.prototype.createDomInternal_=function(){this.markerSvg_=Blockly.utils.dom.createSvgElement("g",{width:this.constants_.CURSOR_WS_WIDTH,height:this.constants_.WS_CURSOR_HEIGHT},this.svgGroup_);this.markerSvgLine_=Blockly.utils.dom.createSvgElement("rect",{width:this.constants_.CURSOR_WS_WIDTH,height:this.constants_.WS_CURSOR_HEIGHT,style:"display: none"},this.markerSvg_);this.markerSvgRect_=Blockly.utils.dom.createSvgElement("rect",{"class":"blocklyVerticalMarker",rx:10, +ry:10,style:"display: none"},this.markerSvg_);this.markerInput_=Blockly.utils.dom.createSvgElement("path",{transform:"",style:"display: none"},this.markerSvg_);this.markerBlock_=Blockly.utils.dom.createSvgElement("path",{transform:"",style:"display: none",fill:"none","stroke-width":this.constants_.CURSOR_STROKE_WIDTH},this.markerSvg_);if(this.isCursor()){var a=this.getBlinkProperties_();Blockly.utils.dom.createSvgElement("animate",a,this.markerSvgLine_);Blockly.utils.dom.createSvgElement("animate", +a,this.markerInput_);a.attributeName="stroke";Blockly.utils.dom.createSvgElement("animate",a,this.markerBlock_)}return this.markerSvg_}; +Blockly.blockRendering.MarkerSvg.prototype.applyColour_=function(a){this.markerSvgLine_.setAttribute("fill",this.colour_);this.markerSvgRect_.setAttribute("stroke",this.colour_);this.markerInput_.setAttribute("fill",this.colour_);this.markerBlock_.setAttribute("stroke",this.colour_);this.isCursor()&&(a=this.colour_+";transparent;transparent;",this.markerSvgLine_.firstChild.setAttribute("values",a),this.markerInput_.firstChild.setAttribute("values",a),this.markerBlock_.firstChild.setAttribute("values", +a))};Blockly.blockRendering.MarkerSvg.prototype.dispose=function(){this.svgGroup_&&Blockly.utils.dom.removeNode(this.svgGroup_)};Blockly.blockRendering.Types={NONE:0,FIELD:1,HAT:2,ICON:4,SPACER:8,BETWEEN_ROW_SPACER:16,IN_ROW_SPACER:32,EXTERNAL_VALUE_INPUT:64,INPUT:128,INLINE_INPUT:256,STATEMENT_INPUT:512,CONNECTION:1024,PREVIOUS_CONNECTION:2048,NEXT_CONNECTION:4096,OUTPUT_CONNECTION:8192,CORNER:16384,LEFT_SQUARE_CORNER:32768,LEFT_ROUND_CORNER:65536,RIGHT_SQUARE_CORNER:131072,RIGHT_ROUND_CORNER:262144,JAGGED_EDGE:524288,ROW:1048576,TOP_ROW:2097152,BOTTOM_ROW:4194304,INPUT_ROW:8388608}; +Blockly.blockRendering.Types.LEFT_CORNER=Blockly.blockRendering.Types.LEFT_SQUARE_CORNER|Blockly.blockRendering.Types.LEFT_ROUND_CORNER;Blockly.blockRendering.Types.RIGHT_CORNER=Blockly.blockRendering.Types.RIGHT_SQUARE_CORNER|Blockly.blockRendering.Types.RIGHT_ROUND_CORNER;Blockly.blockRendering.Types.nextTypeValue_=16777216; +Blockly.blockRendering.Types.getType=function(a){Blockly.blockRendering.Types.hasOwnProperty(a)||(Blockly.blockRendering.Types[a]=Blockly.blockRendering.Types.nextTypeValue_,Blockly.blockRendering.Types.nextTypeValue_<<=1);return Blockly.blockRendering.Types[a]};Blockly.blockRendering.Types.isField=function(a){return a.type&Blockly.blockRendering.Types.FIELD};Blockly.blockRendering.Types.isHat=function(a){return a.type&Blockly.blockRendering.Types.HAT}; +Blockly.blockRendering.Types.isIcon=function(a){return a.type&Blockly.blockRendering.Types.ICON};Blockly.blockRendering.Types.isSpacer=function(a){return a.type&Blockly.blockRendering.Types.SPACER};Blockly.blockRendering.Types.isInRowSpacer=function(a){return a.type&Blockly.blockRendering.Types.IN_ROW_SPACER};Blockly.blockRendering.Types.isInput=function(a){return a.type&Blockly.blockRendering.Types.INPUT};Blockly.blockRendering.Types.isExternalInput=function(a){return a.type&Blockly.blockRendering.Types.EXTERNAL_VALUE_INPUT}; +Blockly.blockRendering.Types.isInlineInput=function(a){return a.type&Blockly.blockRendering.Types.INLINE_INPUT};Blockly.blockRendering.Types.isStatementInput=function(a){return a.type&Blockly.blockRendering.Types.STATEMENT_INPUT};Blockly.blockRendering.Types.isPreviousConnection=function(a){return a.type&Blockly.blockRendering.Types.PREVIOUS_CONNECTION};Blockly.blockRendering.Types.isNextConnection=function(a){return a.type&Blockly.blockRendering.Types.NEXT_CONNECTION}; +Blockly.blockRendering.Types.isPreviousOrNextConnection=function(a){return a.type&(Blockly.blockRendering.Types.PREVIOUS_CONNECTION|Blockly.blockRendering.Types.NEXT_CONNECTION)};Blockly.blockRendering.Types.isLeftRoundedCorner=function(a){return a.type&Blockly.blockRendering.Types.LEFT_ROUND_CORNER};Blockly.blockRendering.Types.isRightRoundedCorner=function(a){return a.type&Blockly.blockRendering.Types.RIGHT_ROUND_CORNER}; +Blockly.blockRendering.Types.isLeftSquareCorner=function(a){return a.type&Blockly.blockRendering.Types.LEFT_SQUARE_CORNER};Blockly.blockRendering.Types.isRightSquareCorner=function(a){return a.type&Blockly.blockRendering.Types.RIGHT_SQUARE_CORNER};Blockly.blockRendering.Types.isCorner=function(a){return a.type&Blockly.blockRendering.Types.CORNER};Blockly.blockRendering.Types.isJaggedEdge=function(a){return a.type&Blockly.blockRendering.Types.JAGGED_EDGE}; +Blockly.blockRendering.Types.isRow=function(a){return a.type&Blockly.blockRendering.Types.ROW};Blockly.blockRendering.Types.isBetweenRowSpacer=function(a){return a.type&Blockly.blockRendering.Types.BETWEEN_ROW_SPACER};Blockly.blockRendering.Types.isTopRow=function(a){return a.type&Blockly.blockRendering.Types.TOP_ROW};Blockly.blockRendering.Types.isBottomRow=function(a){return a.type&Blockly.blockRendering.Types.BOTTOM_ROW}; +Blockly.blockRendering.Types.isTopOrBottomRow=function(a){return a.type&(Blockly.blockRendering.Types.TOP_ROW|Blockly.blockRendering.Types.BOTTOM_ROW)};Blockly.blockRendering.Types.isInputRow=function(a){return a.type&Blockly.blockRendering.Types.INPUT_ROW};Blockly.blockRendering.Measurable=function(a){this.height=this.width=0;this.type=Blockly.blockRendering.Types.NONE;this.centerline=this.xPos=0;this.constants_=a;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT};Blockly.blockRendering.Connection=function(a,b){Blockly.blockRendering.Connection.superClass_.constructor.call(this,a);this.connectionModel=b;this.shape=this.constants_.shapeFor(b);this.isDynamicShape=!!this.shape.isDynamic;this.type|=Blockly.blockRendering.Types.CONNECTION};Blockly.utils.object.inherits(Blockly.blockRendering.Connection,Blockly.blockRendering.Measurable); +Blockly.blockRendering.OutputConnection=function(a,b){Blockly.blockRendering.OutputConnection.superClass_.constructor.call(this,a,b);this.type|=Blockly.blockRendering.Types.OUTPUT_CONNECTION;this.height=this.isDynamicShape?0:this.shape.height;this.startX=this.width=this.isDynamicShape?0:this.shape.width;this.connectionOffsetY=this.constants_.TAB_OFFSET_FROM_TOP;this.connectionOffsetX=0};Blockly.utils.object.inherits(Blockly.blockRendering.OutputConnection,Blockly.blockRendering.Connection); +Blockly.blockRendering.PreviousConnection=function(a,b){Blockly.blockRendering.PreviousConnection.superClass_.constructor.call(this,a,b);this.type|=Blockly.blockRendering.Types.PREVIOUS_CONNECTION;this.height=this.shape.height;this.width=this.shape.width};Blockly.utils.object.inherits(Blockly.blockRendering.PreviousConnection,Blockly.blockRendering.Connection); +Blockly.blockRendering.NextConnection=function(a,b){Blockly.blockRendering.NextConnection.superClass_.constructor.call(this,a,b);this.type|=Blockly.blockRendering.Types.NEXT_CONNECTION;this.height=this.shape.height;this.width=this.shape.width};Blockly.utils.object.inherits(Blockly.blockRendering.NextConnection,Blockly.blockRendering.Connection);Blockly.blockRendering.InputConnection=function(a,b){Blockly.blockRendering.InputConnection.superClass_.constructor.call(this,a,b.connection);this.type|=Blockly.blockRendering.Types.INPUT;this.input=b;this.align=b.align;(this.connectedBlock=b.connection&&b.connection.targetBlock()?b.connection.targetBlock():null)?(a=this.connectedBlock.getHeightWidth(),this.connectedBlockWidth=a.width,this.connectedBlockHeight=a.height):this.connectedBlockHeight=this.connectedBlockWidth=0;this.connectionOffsetY=this.connectionOffsetX= +0};Blockly.utils.object.inherits(Blockly.blockRendering.InputConnection,Blockly.blockRendering.Connection); +Blockly.blockRendering.InlineInput=function(a,b){Blockly.blockRendering.InlineInput.superClass_.constructor.call(this,a,b);this.type|=Blockly.blockRendering.Types.INLINE_INPUT;this.connectedBlock?(this.width=this.connectedBlockWidth,this.height=this.connectedBlockHeight):(this.height=this.constants_.EMPTY_INLINE_INPUT_HEIGHT,this.width=this.constants_.EMPTY_INLINE_INPUT_PADDING);this.connectionHeight=this.isDynamicShape?this.shape.height(this.height):this.shape.height;this.connectionWidth=this.isDynamicShape? +this.shape.width(this.height):this.shape.width;this.connectedBlock||(this.width+=this.connectionWidth*(this.isDynamicShape?2:1));this.connectionOffsetY=this.isDynamicShape?this.shape.connectionOffsetY(this.connectionHeight):this.constants_.TAB_OFFSET_FROM_TOP;this.connectionOffsetX=this.isDynamicShape?this.shape.connectionOffsetX(this.connectionWidth):0};Blockly.utils.object.inherits(Blockly.blockRendering.InlineInput,Blockly.blockRendering.InputConnection); +Blockly.blockRendering.StatementInput=function(a,b){Blockly.blockRendering.StatementInput.superClass_.constructor.call(this,a,b);this.type|=Blockly.blockRendering.Types.STATEMENT_INPUT;this.height=this.connectedBlock?this.connectedBlockHeight+this.constants_.STATEMENT_BOTTOM_SPACER:this.constants_.EMPTY_STATEMENT_INPUT_HEIGHT;this.width=this.constants_.STATEMENT_INPUT_NOTCH_OFFSET+this.shape.width};Blockly.utils.object.inherits(Blockly.blockRendering.StatementInput,Blockly.blockRendering.InputConnection); +Blockly.blockRendering.ExternalValueInput=function(a,b){Blockly.blockRendering.ExternalValueInput.superClass_.constructor.call(this,a,b);this.type|=Blockly.blockRendering.Types.EXTERNAL_VALUE_INPUT;this.height=this.connectedBlock?this.connectedBlockHeight-this.constants_.TAB_OFFSET_FROM_TOP-this.constants_.MEDIUM_PADDING:this.shape.height;this.width=this.shape.width+this.constants_.EXTERNAL_VALUE_INPUT_PADDING;this.connectionOffsetY=this.constants_.TAB_OFFSET_FROM_TOP;this.connectionHeight=this.shape.height; +this.connectionWidth=this.shape.width};Blockly.utils.object.inherits(Blockly.blockRendering.ExternalValueInput,Blockly.blockRendering.InputConnection);Blockly.blockRendering.Icon=function(a,b){Blockly.blockRendering.Icon.superClass_.constructor.call(this,a);this.icon=b;this.isVisible=b.isVisible();this.type|=Blockly.blockRendering.Types.ICON;a=b.getCorrectedSize();this.height=a.height;this.width=a.width};Blockly.utils.object.inherits(Blockly.blockRendering.Icon,Blockly.blockRendering.Measurable); +Blockly.blockRendering.JaggedEdge=function(a){Blockly.blockRendering.JaggedEdge.superClass_.constructor.call(this,a);this.type|=Blockly.blockRendering.Types.JAGGED_EDGE;this.height=this.constants_.JAGGED_TEETH.height;this.width=this.constants_.JAGGED_TEETH.width};Blockly.utils.object.inherits(Blockly.blockRendering.JaggedEdge,Blockly.blockRendering.Measurable); +Blockly.blockRendering.Field=function(a,b,c){Blockly.blockRendering.Field.superClass_.constructor.call(this,a);this.field=b;this.isEditable=b.EDITABLE;this.flipRtl=b.getFlipRtl();this.type|=Blockly.blockRendering.Types.FIELD;a=this.field.getSize();this.height=a.height;this.width=a.width;this.parentInput=c};Blockly.utils.object.inherits(Blockly.blockRendering.Field,Blockly.blockRendering.Measurable); +Blockly.blockRendering.Hat=function(a){Blockly.blockRendering.Hat.superClass_.constructor.call(this,a);this.type|=Blockly.blockRendering.Types.HAT;this.height=this.constants_.START_HAT.height;this.width=this.constants_.START_HAT.width;this.ascenderHeight=this.height};Blockly.utils.object.inherits(Blockly.blockRendering.Hat,Blockly.blockRendering.Measurable); +Blockly.blockRendering.SquareCorner=function(a,b){Blockly.blockRendering.SquareCorner.superClass_.constructor.call(this,a);this.type=(b&&"left"!=b?Blockly.blockRendering.Types.RIGHT_SQUARE_CORNER:Blockly.blockRendering.Types.LEFT_SQUARE_CORNER)|Blockly.blockRendering.Types.CORNER;this.width=this.height=this.constants_.NO_PADDING};Blockly.utils.object.inherits(Blockly.blockRendering.SquareCorner,Blockly.blockRendering.Measurable); +Blockly.blockRendering.RoundCorner=function(a,b){Blockly.blockRendering.RoundCorner.superClass_.constructor.call(this,a);this.type=(b&&"left"!=b?Blockly.blockRendering.Types.RIGHT_ROUND_CORNER:Blockly.blockRendering.Types.LEFT_ROUND_CORNER)|Blockly.blockRendering.Types.CORNER;this.width=this.constants_.CORNER_RADIUS;this.height=this.constants_.CORNER_RADIUS/2};Blockly.utils.object.inherits(Blockly.blockRendering.RoundCorner,Blockly.blockRendering.Measurable); +Blockly.blockRendering.InRowSpacer=function(a,b){Blockly.blockRendering.InRowSpacer.superClass_.constructor.call(this,a);this.type=this.type|Blockly.blockRendering.Types.SPACER|Blockly.blockRendering.Types.IN_ROW_SPACER;this.width=b;this.height=this.constants_.SPACER_DEFAULT_HEIGHT};Blockly.utils.object.inherits(Blockly.blockRendering.InRowSpacer,Blockly.blockRendering.Measurable);Blockly.blockRendering.Row=function(a){this.type=Blockly.blockRendering.Types.ROW;this.elements=[];this.xPos=this.yPos=this.widthWithConnectedBlocks=this.minWidth=this.minHeight=this.width=this.height=0;this.hasJaggedEdge=this.hasDummyInput=this.hasInlineInput=this.hasStatement=this.hasExternalInput=!1;this.constants_=a;this.notchOffset=this.constants_.NOTCH_OFFSET_LEFT;this.align=null}; +Blockly.blockRendering.Row.prototype.measure=function(){throw Error("Unexpected attempt to measure a base Row.");};Blockly.blockRendering.Row.prototype.getLastInput=function(){for(var a=this.elements.length-1,b;b=this.elements[a];a--)if(Blockly.blockRendering.Types.isInput(b))return b;return null};Blockly.blockRendering.Row.prototype.startsWithElemSpacer=function(){return!0};Blockly.blockRendering.Row.prototype.endsWithElemSpacer=function(){return!0}; +Blockly.blockRendering.Row.prototype.getFirstSpacer=function(){for(var a=0,b;b=this.elements[a];a++)if(Blockly.blockRendering.Types.isSpacer(b))return b;return null};Blockly.blockRendering.Row.prototype.getLastSpacer=function(){for(var a=this.elements.length-1,b;b=this.elements[a];a--)if(Blockly.blockRendering.Types.isSpacer(b))return b;return null}; +Blockly.blockRendering.TopRow=function(a){Blockly.blockRendering.TopRow.superClass_.constructor.call(this,a);this.type|=Blockly.blockRendering.Types.TOP_ROW;this.ascenderHeight=this.capline=0;this.hasPreviousConnection=!1;this.connection=null};Blockly.utils.object.inherits(Blockly.blockRendering.TopRow,Blockly.blockRendering.Row); +Blockly.blockRendering.TopRow.prototype.hasLeftSquareCorner=function(a){var b=(a.hat?"cap"===a.hat:this.constants_.ADD_START_HATS)&&!a.outputConnection&&!a.previousConnection,c=a.getPreviousBlock();return!!a.outputConnection||b||(c?c.getNextBlock()==a:!1)};Blockly.blockRendering.TopRow.prototype.hasRightSquareCorner=function(a){return!0}; +Blockly.blockRendering.TopRow.prototype.measure=function(){for(var a=0,b=0,c=0,d=0,e;e=this.elements[d];d++)b+=e.width,Blockly.blockRendering.Types.isSpacer(e)||(Blockly.blockRendering.Types.isHat(e)?c=Math.max(c,e.ascenderHeight):a=Math.max(a,e.height));this.width=Math.max(this.minWidth,b);this.height=Math.max(this.minHeight,a)+c;this.capline=this.ascenderHeight=c;this.widthWithConnectedBlocks=this.width};Blockly.blockRendering.TopRow.prototype.startsWithElemSpacer=function(){return!1}; +Blockly.blockRendering.TopRow.prototype.endsWithElemSpacer=function(){return!1};Blockly.blockRendering.BottomRow=function(a){Blockly.blockRendering.BottomRow.superClass_.constructor.call(this,a);this.type|=Blockly.blockRendering.Types.BOTTOM_ROW;this.hasNextConnection=!1;this.connection=null;this.baseline=this.descenderHeight=0};Blockly.utils.object.inherits(Blockly.blockRendering.BottomRow,Blockly.blockRendering.Row); +Blockly.blockRendering.BottomRow.prototype.hasLeftSquareCorner=function(a){return!!a.outputConnection||!!a.getNextBlock()};Blockly.blockRendering.BottomRow.prototype.hasRightSquareCorner=function(a){return!0}; +Blockly.blockRendering.BottomRow.prototype.measure=function(){for(var a=0,b=0,c=0,d=0,e;e=this.elements[d];d++)b+=e.width,Blockly.blockRendering.Types.isSpacer(e)||(Blockly.blockRendering.Types.isNextConnection(e)?c=Math.max(c,e.height):a=Math.max(a,e.height));this.width=Math.max(this.minWidth,b);this.height=Math.max(this.minHeight,a)+c;this.descenderHeight=c;this.widthWithConnectedBlocks=this.width};Blockly.blockRendering.BottomRow.prototype.startsWithElemSpacer=function(){return!1}; +Blockly.blockRendering.BottomRow.prototype.endsWithElemSpacer=function(){return!1};Blockly.blockRendering.SpacerRow=function(a,b,c){Blockly.blockRendering.SpacerRow.superClass_.constructor.call(this,a);this.type=this.type|Blockly.blockRendering.Types.SPACER|Blockly.blockRendering.Types.BETWEEN_ROW_SPACER;this.width=c;this.height=b;this.followsStatement=!1;this.widthWithConnectedBlocks=0;this.elements=[new Blockly.blockRendering.InRowSpacer(this.constants_,c)]}; +Blockly.utils.object.inherits(Blockly.blockRendering.SpacerRow,Blockly.blockRendering.Row);Blockly.blockRendering.SpacerRow.prototype.measure=function(){};Blockly.blockRendering.InputRow=function(a){Blockly.blockRendering.InputRow.superClass_.constructor.call(this,a);this.type|=Blockly.blockRendering.Types.INPUT_ROW;this.connectedBlockWidths=0};Blockly.utils.object.inherits(Blockly.blockRendering.InputRow,Blockly.blockRendering.Row); +Blockly.blockRendering.InputRow.prototype.measure=function(){this.width=this.minWidth;this.height=this.minHeight;for(var a=0,b=0,c;c=this.elements[b];b++)this.width+=c.width,Blockly.blockRendering.Types.isInput(c)&&(Blockly.blockRendering.Types.isStatementInput(c)?a+=c.connectedBlockWidth:Blockly.blockRendering.Types.isExternalInput(c)&&0!=c.connectedBlockWidth&&(a+=c.connectedBlockWidth-c.connectionWidth)),Blockly.blockRendering.Types.isSpacer(c)||(this.height=Math.max(this.height,c.height));this.connectedBlockWidths= +a;this.widthWithConnectedBlocks=this.width+a};Blockly.blockRendering.InputRow.prototype.endsWithElemSpacer=function(){return!this.hasExternalInput&&!this.hasStatement};Blockly.blockRendering.RenderInfo=function(a,b){this.block_=b;this.renderer_=a;this.constants_=this.renderer_.getConstants();this.outputConnection=b.outputConnection?new Blockly.blockRendering.OutputConnection(this.constants_,b.outputConnection):null;this.isInline=b.getInputsInline()&&!b.isCollapsed();this.isCollapsed=b.isCollapsed();this.isInsertionMarker=b.isInsertionMarker();this.RTL=b.RTL;this.statementEdge=this.width=this.widthWithChildren=this.height=0;this.rows=[];this.inputRows=[];this.hiddenIcons= +[];this.topRow=new Blockly.blockRendering.TopRow(this.constants_);this.bottomRow=new Blockly.blockRendering.BottomRow(this.constants_);this.startY=this.startX=0};Blockly.blockRendering.RenderInfo.prototype.getRenderer=function(){return this.renderer_};Blockly.blockRendering.RenderInfo.prototype.measure=function(){this.createRows_();this.addElemSpacing_();this.addRowSpacing_();this.computeBounds_();this.alignRowElements_();this.finalize_()}; +Blockly.blockRendering.RenderInfo.prototype.createRows_=function(){this.populateTopRow_();this.rows.push(this.topRow);var a=new Blockly.blockRendering.InputRow(this.constants_);this.inputRows.push(a);var b=this.block_.getIcons();if(b.length)for(var c=0,d;d=b[c];c++){var e=new Blockly.blockRendering.Icon(this.constants_,d);this.isCollapsed&&d.collapseHidden?this.hiddenIcons.push(e):a.elements.push(e)}d=null;for(c=0;b=this.block_.inputList[c];c++)if(b.isVisible()){this.shouldStartNewRow_(b,d)&&(this.rows.push(a), +a=new Blockly.blockRendering.InputRow(this.constants_),this.inputRows.push(a));for(d=0;e=b.fieldRow[d];d++)a.elements.push(new Blockly.blockRendering.Field(this.constants_,e,b));this.addInput_(b,a);d=b}this.isCollapsed&&(a.hasJaggedEdge=!0,a.elements.push(new Blockly.blockRendering.JaggedEdge(this.constants_)));(a.elements.length||a.hasDummyInput)&&this.rows.push(a);this.populateBottomRow_();this.rows.push(this.bottomRow)}; +Blockly.blockRendering.RenderInfo.prototype.populateTopRow_=function(){var a=!!this.block_.previousConnection,b=(this.block_.hat?"cap"===this.block_.hat:this.constants_.ADD_START_HATS)&&!this.outputConnection&&!a;this.topRow.hasLeftSquareCorner(this.block_)?this.topRow.elements.push(new Blockly.blockRendering.SquareCorner(this.constants_)):this.topRow.elements.push(new Blockly.blockRendering.RoundCorner(this.constants_));b?(a=new Blockly.blockRendering.Hat(this.constants_),this.topRow.elements.push(a), +this.topRow.capline=a.ascenderHeight):a&&(this.topRow.hasPreviousConnection=!0,this.topRow.connection=new Blockly.blockRendering.PreviousConnection(this.constants_,this.block_.previousConnection),this.topRow.elements.push(this.topRow.connection));this.block_.inputList.length&&this.block_.inputList[0].type==Blockly.NEXT_STATEMENT&&!this.block_.isCollapsed()?this.topRow.minHeight=this.constants_.TOP_ROW_PRECEDES_STATEMENT_MIN_HEIGHT:this.topRow.minHeight=this.constants_.TOP_ROW_MIN_HEIGHT;this.topRow.hasRightSquareCorner(this.block_)? +this.topRow.elements.push(new Blockly.blockRendering.SquareCorner(this.constants_,"right")):this.topRow.elements.push(new Blockly.blockRendering.RoundCorner(this.constants_,"right"))}; +Blockly.blockRendering.RenderInfo.prototype.populateBottomRow_=function(){this.bottomRow.hasNextConnection=!!this.block_.nextConnection;this.bottomRow.minHeight=this.block_.inputList.length&&this.block_.inputList[this.block_.inputList.length-1].type==Blockly.NEXT_STATEMENT?this.constants_.BOTTOM_ROW_AFTER_STATEMENT_MIN_HEIGHT:this.constants_.BOTTOM_ROW_MIN_HEIGHT;this.bottomRow.hasLeftSquareCorner(this.block_)?this.bottomRow.elements.push(new Blockly.blockRendering.SquareCorner(this.constants_)): +this.bottomRow.elements.push(new Blockly.blockRendering.RoundCorner(this.constants_));this.bottomRow.hasNextConnection&&(this.bottomRow.connection=new Blockly.blockRendering.NextConnection(this.constants_,this.block_.nextConnection),this.bottomRow.elements.push(this.bottomRow.connection));this.bottomRow.hasRightSquareCorner(this.block_)?this.bottomRow.elements.push(new Blockly.blockRendering.SquareCorner(this.constants_,"right")):this.bottomRow.elements.push(new Blockly.blockRendering.RoundCorner(this.constants_, +"right"))}; +Blockly.blockRendering.RenderInfo.prototype.addInput_=function(a,b){this.isInline&&a.type==Blockly.INPUT_VALUE?(b.elements.push(new Blockly.blockRendering.InlineInput(this.constants_,a)),b.hasInlineInput=!0):a.type==Blockly.NEXT_STATEMENT?(b.elements.push(new Blockly.blockRendering.StatementInput(this.constants_,a)),b.hasStatement=!0):a.type==Blockly.INPUT_VALUE?(b.elements.push(new Blockly.blockRendering.ExternalValueInput(this.constants_,a)),b.hasExternalInput=!0):a.type==Blockly.DUMMY_INPUT&&(b.minHeight= +Math.max(b.minHeight,a.getSourceBlock()&&a.getSourceBlock().isShadow()?this.constants_.DUMMY_INPUT_SHADOW_MIN_HEIGHT:this.constants_.DUMMY_INPUT_MIN_HEIGHT),b.hasDummyInput=!0);null==b.align&&(b.align=a.align)};Blockly.blockRendering.RenderInfo.prototype.shouldStartNewRow_=function(a,b){return b?a.type==Blockly.NEXT_STATEMENT||b.type==Blockly.NEXT_STATEMENT?!0:a.type==Blockly.INPUT_VALUE||a.type==Blockly.DUMMY_INPUT?!this.isInline:!1:!1}; +Blockly.blockRendering.RenderInfo.prototype.addElemSpacing_=function(){for(var a=0,b;b=this.rows[a];a++){var c=b.elements;b.elements=[];b.startsWithElemSpacer()&&b.elements.push(new Blockly.blockRendering.InRowSpacer(this.constants_,this.getInRowSpacing_(null,c[0])));if(c.length){for(var d=0;d.blocklyPathLight,",a+" .blocklyInsertionMarker>.blocklyPathDark {","fill-opacity: "+this.INSERTION_MARKER_OPACITY+";","stroke: none;","}"])};Blockly.geras.Highlighter=function(a){this.info_=a;this.inlineSteps_=this.steps_="";this.RTL_=this.info_.RTL;a=a.getRenderer();this.constants_=a.getConstants();this.highlightConstants_=a.getHighlightConstants();this.highlightOffset_=this.highlightConstants_.OFFSET;this.outsideCornerPaths_=this.highlightConstants_.OUTSIDE_CORNER;this.insideCornerPaths_=this.highlightConstants_.INSIDE_CORNER;this.puzzleTabPaths_=this.highlightConstants_.PUZZLE_TAB;this.notchPaths_=this.highlightConstants_.NOTCH;this.startPaths_= +this.highlightConstants_.START_HAT;this.jaggedTeethPaths_=this.highlightConstants_.JAGGED_TEETH};Blockly.geras.Highlighter.prototype.getPath=function(){return this.steps_+"\n"+this.inlineSteps_}; +Blockly.geras.Highlighter.prototype.drawTopCorner=function(a){this.steps_+=Blockly.utils.svgPaths.moveBy(a.xPos,this.info_.startY);for(var b=0,c;c=a.elements[b];b++)Blockly.blockRendering.Types.isLeftSquareCorner(c)?this.steps_+=this.highlightConstants_.START_POINT:Blockly.blockRendering.Types.isLeftRoundedCorner(c)?this.steps_+=this.outsideCornerPaths_.topLeft(this.RTL_):Blockly.blockRendering.Types.isPreviousConnection(c)?this.steps_+=this.notchPaths_.pathLeft:Blockly.blockRendering.Types.isHat(c)? +this.steps_+=this.startPaths_.path(this.RTL_):Blockly.blockRendering.Types.isSpacer(c)&&0!=c.width&&(this.steps_+=Blockly.utils.svgPaths.lineOnAxis("H",c.xPos+c.width-this.highlightOffset_));this.steps_+=Blockly.utils.svgPaths.lineOnAxis("H",a.xPos+a.width-this.highlightOffset_)};Blockly.geras.Highlighter.prototype.drawJaggedEdge_=function(a){this.info_.RTL&&(this.steps_+=this.jaggedTeethPaths_.pathLeft+Blockly.utils.svgPaths.lineOnAxis("v",a.height-this.jaggedTeethPaths_.height-this.highlightOffset_))}; +Blockly.geras.Highlighter.prototype.drawValueInput=function(a){var b=a.getLastInput();if(this.RTL_){var c=a.height-b.connectionHeight;this.steps_+=Blockly.utils.svgPaths.moveTo(b.xPos+b.width-this.highlightOffset_,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)+Blockly.utils.svgPaths.lineOnAxis("v",c)}else this.steps_+=Blockly.utils.svgPaths.moveTo(b.xPos+b.width,a.yPos)+this.puzzleTabPaths_.pathDown(this.RTL_)}; +Blockly.geras.Highlighter.prototype.drawStatementInput=function(a){var b=a.getLastInput();if(this.RTL_){var c=a.height-2*this.insideCornerPaths_.height;this.steps_+=Blockly.utils.svgPaths.moveTo(b.xPos,a.yPos)+this.insideCornerPaths_.pathTop(this.RTL_)+Blockly.utils.svgPaths.lineOnAxis("v",c)+this.insideCornerPaths_.pathBottom(this.RTL_)+Blockly.utils.svgPaths.lineTo(a.width-b.xPos-this.insideCornerPaths_.width,0)}else this.steps_+=Blockly.utils.svgPaths.moveTo(b.xPos,a.yPos+a.height)+this.insideCornerPaths_.pathBottom(this.RTL_)+ +Blockly.utils.svgPaths.lineTo(a.width-b.xPos-this.insideCornerPaths_.width,0)};Blockly.geras.Highlighter.prototype.drawRightSideRow=function(a){var b=a.xPos+a.width-this.highlightOffset_;a.followsStatement&&(this.steps_+=Blockly.utils.svgPaths.lineOnAxis("H",b));this.RTL_&&(this.steps_+=Blockly.utils.svgPaths.lineOnAxis("H",b),a.height>this.highlightOffset_&&(this.steps_+=Blockly.utils.svgPaths.lineOnAxis("V",a.yPos+a.height-this.highlightOffset_)))}; +Blockly.geras.Highlighter.prototype.drawBottomRow=function(a){if(this.RTL_)this.steps_+=Blockly.utils.svgPaths.lineOnAxis("V",a.baseline-this.highlightOffset_);else{var b=this.info_.bottomRow.elements[0];Blockly.blockRendering.Types.isLeftSquareCorner(b)?this.steps_+=Blockly.utils.svgPaths.moveTo(a.xPos+this.highlightOffset_,a.baseline-this.highlightOffset_):Blockly.blockRendering.Types.isLeftRoundedCorner(b)&&(this.steps_+=Blockly.utils.svgPaths.moveTo(a.xPos,a.baseline),this.steps_+=this.outsideCornerPaths_.bottomLeft())}}; +Blockly.geras.Highlighter.prototype.drawLeft=function(){var a=this.info_.outputConnection;a&&(a=a.connectionOffsetY+a.height,this.RTL_?this.steps_+=Blockly.utils.svgPaths.moveTo(this.info_.startX,a):(this.steps_+=Blockly.utils.svgPaths.moveTo(this.info_.startX+this.highlightOffset_,this.info_.bottomRow.baseline-this.highlightOffset_),this.steps_+=Blockly.utils.svgPaths.lineOnAxis("V",a)),this.steps_+=this.puzzleTabPaths_.pathUp(this.RTL_));this.RTL_||(a=this.info_.topRow,Blockly.blockRendering.Types.isLeftRoundedCorner(a.elements[0])? +this.steps_+=Blockly.utils.svgPaths.lineOnAxis("V",this.outsideCornerPaths_.height):this.steps_+=Blockly.utils.svgPaths.lineOnAxis("V",a.capline+this.highlightOffset_))}; +Blockly.geras.Highlighter.prototype.drawInlineInput=function(a){var b=this.highlightOffset_,c=a.xPos+a.connectionWidth,d=a.centerline-a.height/2,e=a.width-a.connectionWidth,f=d+b;this.RTL_?(d=a.connectionOffsetY-b,a=a.height-(a.connectionOffsetY+a.connectionHeight)+b,this.inlineSteps_+=Blockly.utils.svgPaths.moveTo(c-b,f)+Blockly.utils.svgPaths.lineOnAxis("v",d)+this.puzzleTabPaths_.pathDown(this.RTL_)+Blockly.utils.svgPaths.lineOnAxis("v",a)+Blockly.utils.svgPaths.lineOnAxis("h",e)):this.inlineSteps_+= +Blockly.utils.svgPaths.moveTo(a.xPos+a.width+b,f)+Blockly.utils.svgPaths.lineOnAxis("v",a.height)+Blockly.utils.svgPaths.lineOnAxis("h",-e)+Blockly.utils.svgPaths.moveTo(c,d+a.connectionOffsetY)+this.puzzleTabPaths_.pathDown(this.RTL_)};Blockly.geras.InlineInput=function(a,b){Blockly.geras.InlineInput.superClass_.constructor.call(this,a,b);this.connectedBlock&&(this.width+=this.constants_.DARK_PATH_OFFSET,this.height+=this.constants_.DARK_PATH_OFFSET)};Blockly.utils.object.inherits(Blockly.geras.InlineInput,Blockly.blockRendering.InlineInput);Blockly.geras.StatementInput=function(a,b){Blockly.geras.StatementInput.superClass_.constructor.call(this,a,b);this.connectedBlock&&(this.height+=this.constants_.DARK_PATH_OFFSET)}; +Blockly.utils.object.inherits(Blockly.geras.StatementInput,Blockly.blockRendering.StatementInput);Blockly.geras.RenderInfo=function(a,b){Blockly.geras.RenderInfo.superClass_.constructor.call(this,a,b)};Blockly.utils.object.inherits(Blockly.geras.RenderInfo,Blockly.blockRendering.RenderInfo);Blockly.geras.RenderInfo.prototype.getRenderer=function(){return this.renderer_}; +Blockly.geras.RenderInfo.prototype.populateBottomRow_=function(){Blockly.geras.RenderInfo.superClass_.populateBottomRow_.call(this);this.block_.inputList.length&&this.block_.inputList[this.block_.inputList.length-1].type==Blockly.NEXT_STATEMENT||(this.bottomRow.minHeight=this.constants_.MEDIUM_PADDING-this.constants_.DARK_PATH_OFFSET)}; +Blockly.geras.RenderInfo.prototype.addInput_=function(a,b){this.isInline&&a.type==Blockly.INPUT_VALUE?(b.elements.push(new Blockly.geras.InlineInput(this.constants_,a)),b.hasInlineInput=!0):a.type==Blockly.NEXT_STATEMENT?(b.elements.push(new Blockly.geras.StatementInput(this.constants_,a)),b.hasStatement=!0):a.type==Blockly.INPUT_VALUE?(b.elements.push(new Blockly.blockRendering.ExternalValueInput(this.constants_,a)),b.hasExternalInput=!0):a.type==Blockly.DUMMY_INPUT&&(b.minHeight=Math.max(b.minHeight, +this.constants_.DUMMY_INPUT_MIN_HEIGHT),b.hasDummyInput=!0);this.isInline||null!=b.align||(b.align=a.align)}; +Blockly.geras.RenderInfo.prototype.addElemSpacing_=function(){for(var a=!1,b=0,c;c=this.rows[b];b++)c.hasExternalInput&&(a=!0);for(b=0;c=this.rows[b];b++){var d=c.elements;c.elements=[];c.startsWithElemSpacer()&&c.elements.push(new Blockly.blockRendering.InRowSpacer(this.constants_,this.getInRowSpacing_(null,d[0])));if(d.length){for(var e=0;eb?b:c;e=e?-1:1;a=(d?-1:1)*a/2;return Blockly.utils.svgPaths.lineTo(-e*c,a)+Blockly.utils.svgPaths.lineTo(e*c,a)}var b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH;return{type:this.SHAPES.HEXAGONAL,isDynamic:!0,width:function(a){a/=2;return a>b?b:a},height:function(a){return a},connectionOffsetY:function(a){return a/2},connectionOffsetX:function(a){return-a},pathDown:function(b){return a(b,!1,!1)},pathUp:function(b){return a(b, +!0,!1)},pathRightDown:function(b){return a(b,!1,!0)},pathRightUp:function(b){return a(b,!1,!0)}}}; +Blockly.zelos.ConstantProvider.prototype.makeRounded=function(){function a(a,b,f){var d=a>c?a-c:0;a=(a>c?c:a)/2;return Blockly.utils.svgPaths.arc("a","0 0,1",a,Blockly.utils.svgPaths.point((b?-1:1)*a,(b?-1:1)*a))+Blockly.utils.svgPaths.lineOnAxis("v",(f?1:-1)*d)+Blockly.utils.svgPaths.arc("a","0 0,1",a,Blockly.utils.svgPaths.point((b?1:-1)*a,(b?-1:1)*a))}var b=this.MAX_DYNAMIC_CONNECTION_SHAPE_WIDTH,c=2*b;return{type:this.SHAPES.ROUND,isDynamic:!0,width:function(a){a/=2;return a>b?b:a},height:function(a){return a}, +connectionOffsetY:function(a){return a/2},connectionOffsetX:function(a){return-a},pathDown:function(b){return a(b,!1,!1)},pathUp:function(b){return a(b,!0,!1)},pathRightDown:function(b){return a(b,!1,!0)},pathRightUp:function(b){return a(b,!1,!0)}}}; +Blockly.zelos.ConstantProvider.prototype.makeSquared=function(){function a(a,d,e){a-=2*b;return Blockly.utils.svgPaths.arc("a","0 0,1",b,Blockly.utils.svgPaths.point((d?-1:1)*b,(d?-1:1)*b))+Blockly.utils.svgPaths.lineOnAxis("v",(e?1:-1)*a)+Blockly.utils.svgPaths.arc("a","0 0,1",b,Blockly.utils.svgPaths.point((d?1:-1)*b,(d?-1:1)*b))}var b=this.CORNER_RADIUS;return{type:this.SHAPES.SQUARE,isDynamic:!0,width:function(a){return b},height:function(a){return a},connectionOffsetY:function(a){return a/2}, +connectionOffsetX:function(a){return-a},pathDown:function(b){return a(b,!1,!1)},pathUp:function(b){return a(b,!0,!1)},pathRightDown:function(b){return a(b,!1,!0)},pathRightUp:function(b){return a(b,!1,!0)}}}; +Blockly.zelos.ConstantProvider.prototype.shapeFor=function(a){var b=a.getCheck();!b&&a.targetConnection&&(b=a.targetConnection.getCheck());switch(a.type){case Blockly.INPUT_VALUE:case Blockly.OUTPUT_VALUE:a=a.getSourceBlock().getOutputShape();if(null!=a)switch(a){case this.SHAPES.HEXAGONAL:return this.HEXAGONAL;case this.SHAPES.ROUND:return this.ROUNDED;case this.SHAPES.SQUARE:return this.SQUARED}if(b&&-1!=b.indexOf("Boolean"))return this.HEXAGONAL;if(b&&-1!=b.indexOf("Number"))return this.ROUNDED; +b&&b.indexOf("String");return this.ROUNDED;case Blockly.PREVIOUS_STATEMENT:case Blockly.NEXT_STATEMENT:return this.NOTCH;default:throw Error("Unknown type");}}; +Blockly.zelos.ConstantProvider.prototype.makeNotch=function(){function a(a){return Blockly.utils.svgPaths.curve("c",[Blockly.utils.svgPaths.point(a*e/2,0),Blockly.utils.svgPaths.point(a*e*3/4,g/2),Blockly.utils.svgPaths.point(a*e,g)])+Blockly.utils.svgPaths.line([Blockly.utils.svgPaths.point(a*e,f)])+Blockly.utils.svgPaths.curve("c",[Blockly.utils.svgPaths.point(a*e/4,g/2),Blockly.utils.svgPaths.point(a*e/2,g),Blockly.utils.svgPaths.point(a*e,g)])+Blockly.utils.svgPaths.lineOnAxis("h",a*d)+Blockly.utils.svgPaths.curve("c", +[Blockly.utils.svgPaths.point(a*e/2,0),Blockly.utils.svgPaths.point(a*e*3/4,-(g/2)),Blockly.utils.svgPaths.point(a*e,-g)])+Blockly.utils.svgPaths.line([Blockly.utils.svgPaths.point(a*e,-f)])+Blockly.utils.svgPaths.curve("c",[Blockly.utils.svgPaths.point(a*e/4,-(g/2)),Blockly.utils.svgPaths.point(a*e/2,-g),Blockly.utils.svgPaths.point(a*e,-g)])}var b=this.NOTCH_WIDTH,c=this.NOTCH_HEIGHT,d=b/3,e=d/3,f=c/2,g=f/2,h=a(1),k=a(-1);return{type:this.SHAPES.NOTCH,width:b,height:c,pathLeft:h,pathRight:k}}; +Blockly.zelos.ConstantProvider.prototype.makeInsideCorners=function(){var a=this.CORNER_RADIUS,b=Blockly.utils.svgPaths.arc("a","0 0,0",a,Blockly.utils.svgPaths.point(-a,a)),c=Blockly.utils.svgPaths.arc("a","0 0,1",a,Blockly.utils.svgPaths.point(-a,a)),d=Blockly.utils.svgPaths.arc("a","0 0,0",a,Blockly.utils.svgPaths.point(a,a)),e=Blockly.utils.svgPaths.arc("a","0 0,1",a,Blockly.utils.svgPaths.point(a,a));return{width:a,height:a,pathTop:b,pathBottom:d,rightWidth:a,rightHeight:a,pathTopRight:c,pathBottomRight:e}}; +Blockly.zelos.ConstantProvider.prototype.generateSecondaryColour_=function(a){return Blockly.utils.colour.blend("#000",a,.15)||a};Blockly.zelos.ConstantProvider.prototype.generateTertiaryColour_=function(a){return Blockly.utils.colour.blend("#000",a,.25)||a}; +Blockly.zelos.ConstantProvider.prototype.createDom=function(a,b,c){Blockly.zelos.ConstantProvider.superClass_.createDom.call(this,a,b,c);a=Blockly.utils.dom.createSvgElement("defs",{},a);b=Blockly.utils.dom.createSvgElement("filter",{id:"blocklySelectedGlowFilter"+this.randomIdentifier,height:"160%",width:"180%",y:"-30%",x:"-40%"},a);Blockly.utils.dom.createSvgElement("feGaussianBlur",{"in":"SourceGraphic",stdDeviation:this.SELECTED_GLOW_SIZE},b);c=Blockly.utils.dom.createSvgElement("feComponentTransfer", +{result:"outBlur"},b);Blockly.utils.dom.createSvgElement("feFuncA",{type:"table",tableValues:"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1"},c);Blockly.utils.dom.createSvgElement("feFlood",{"flood-color":this.SELECTED_GLOW_COLOUR,"flood-opacity":1,result:"outColor"},b);Blockly.utils.dom.createSvgElement("feComposite",{"in":"outColor",in2:"outBlur",operator:"in",result:"outGlow"},b);this.selectedGlowFilterId=b.id;this.selectedGlowFilter_=b;a=Blockly.utils.dom.createSvgElement("filter",{id:"blocklyReplacementGlowFilter"+ +this.randomIdentifier,height:"160%",width:"180%",y:"-30%",x:"-40%"},a);Blockly.utils.dom.createSvgElement("feGaussianBlur",{"in":"SourceGraphic",stdDeviation:this.REPLACEMENT_GLOW_SIZE},a);b=Blockly.utils.dom.createSvgElement("feComponentTransfer",{result:"outBlur"},a);Blockly.utils.dom.createSvgElement("feFuncA",{type:"table",tableValues:"0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1"},b);Blockly.utils.dom.createSvgElement("feFlood",{"flood-color":this.REPLACEMENT_GLOW_COLOUR,"flood-opacity":1,result:"outColor"}, +a);Blockly.utils.dom.createSvgElement("feComposite",{"in":"outColor",in2:"outBlur",operator:"in",result:"outGlow"},a);Blockly.utils.dom.createSvgElement("feComposite",{"in":"SourceGraphic",in2:"outGlow",operator:"over"},a);this.replacementGlowFilterId=a.id;this.replacementGlowFilter_=a}; +Blockly.zelos.ConstantProvider.prototype.getCSS_=function(a){return[a+" .blocklyText,",a+" .blocklyFlyoutLabelText {","font: "+this.FIELD_TEXT_FONTWEIGHT+" "+this.FIELD_TEXT_FONTSIZE+"pt "+this.FIELD_TEXT_FONTFAMILY+";","}",a+" .blocklyText {","fill: #fff;","}",a+" .blocklyNonEditableText>rect:not(.blocklyDropdownRect),",a+" .blocklyEditableText>rect:not(.blocklyDropdownRect) {","fill: "+this.FIELD_BORDER_RECT_COLOUR+";","}",a+" .blocklyNonEditableText>text,",a+" .blocklyEditableText>text,",a+" .blocklyNonEditableText>g>text,", +a+" .blocklyEditableText>g>text {","fill: #575E75;","}",a+" .blocklyFlyoutLabelText {","fill: #575E75;","}",a+" .blocklyText.blocklyBubbleText {","fill: #575E75;","}",a+" .blocklyDraggable:not(.blocklyDisabled)"," .blocklyEditableText:not(.editing):hover>rect,",a+" .blocklyDraggable:not(.blocklyDisabled)"," .blocklyEditableText:not(.editing):hover>.blocklyPath {","stroke: #fff;","stroke-width: 2;","}",a+" .blocklyHtmlInput {","font-family: "+this.FIELD_TEXT_FONTFAMILY+";","font-weight: "+this.FIELD_TEXT_FONTWEIGHT+ +";","color: #575E75;","}",a+" .blocklyDropdownText {","fill: #fff !important;","}",a+".blocklyWidgetDiv .goog-menuitem,",a+".blocklyDropDownDiv .goog-menuitem {","font-family: "+this.FIELD_TEXT_FONTFAMILY+";","}",a+".blocklyDropDownDiv .goog-menuitem-content {","color: #fff;","}",a+" .blocklyHighlightedConnectionPath {","stroke: "+this.SELECTED_GLOW_COLOUR+";","}",a+" .blocklyDisabled > .blocklyOutlinePath {","fill: url(#blocklyDisabledPattern"+this.randomIdentifier+")","}",a+" .blocklyInsertionMarker>.blocklyPath {", +"fill-opacity: "+this.INSERTION_MARKER_OPACITY+";","stroke: none;","}"]};Blockly.zelos.TopRow=function(a){Blockly.zelos.TopRow.superClass_.constructor.call(this,a)};Blockly.utils.object.inherits(Blockly.zelos.TopRow,Blockly.blockRendering.TopRow);Blockly.zelos.TopRow.prototype.endsWithElemSpacer=function(){return!1};Blockly.zelos.TopRow.prototype.hasLeftSquareCorner=function(a){var b=(a.hat?"cap"===a.hat:this.constants_.ADD_START_HATS)&&!a.outputConnection&&!a.previousConnection;return!!a.outputConnection||b}; +Blockly.zelos.TopRow.prototype.hasRightSquareCorner=function(a){return!!a.outputConnection&&!a.statementInputCount&&!a.nextConnection};Blockly.zelos.BottomRow=function(a){Blockly.zelos.BottomRow.superClass_.constructor.call(this,a)};Blockly.utils.object.inherits(Blockly.zelos.BottomRow,Blockly.blockRendering.BottomRow);Blockly.zelos.BottomRow.prototype.endsWithElemSpacer=function(){return!1};Blockly.zelos.BottomRow.prototype.hasLeftSquareCorner=function(a){return!!a.outputConnection}; +Blockly.zelos.BottomRow.prototype.hasRightSquareCorner=function(a){return!!a.outputConnection&&!a.statementInputCount&&!a.nextConnection};Blockly.zelos.RightConnectionShape=function(a){Blockly.zelos.RightConnectionShape.superClass_.constructor.call(this,a);this.type|=Blockly.blockRendering.Types.getType("RIGHT_CONNECTION");this.width=this.height=0};Blockly.utils.object.inherits(Blockly.zelos.RightConnectionShape,Blockly.blockRendering.Measurable);Blockly.zelos.StatementInput=function(a,b){Blockly.zelos.StatementInput.superClass_.constructor.call(this,a,b);if(this.connectedBlock){for(a=this.connectedBlock;a.getNextBlock();)a=a.getNextBlock();a.nextConnection||(this.height=this.connectedBlockHeight,this.connectedBottomNextConnection=!0)}};Blockly.utils.object.inherits(Blockly.zelos.StatementInput,Blockly.blockRendering.StatementInput);Blockly.zelos.RenderInfo=function(a,b){Blockly.zelos.RenderInfo.superClass_.constructor.call(this,a,b);this.topRow=new Blockly.zelos.TopRow(this.constants_);this.bottomRow=new Blockly.zelos.BottomRow(this.constants_);this.isInline=!0;this.isMultiRow=!b.getInputsInline()||b.isCollapsed();this.hasStatementInput=0=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!f.precedesStatement;if(Blockly.blockRendering.Types.isInputRow(e)&&e.hasStatement)e.measure(),b=e.width-e.getLastInput().width+a;else if(d&&(2==c||f)&& +Blockly.blockRendering.Types.isInputRow(e)&&!e.hasStatement){f=e.xPos;d=null;for(var g=0,h;h=e.elements[g];g++)Blockly.blockRendering.Types.isSpacer(h)&&(d=h),!(d&&(Blockly.blockRendering.Types.isField(h)||Blockly.blockRendering.Types.isInput(h))&&fc?c:this.height/2,b-c*(1-Math.sin(Math.acos((c-this.constants_.SMALL_PADDING)/c)));default:return 0}if(Blockly.blockRendering.Types.isInlineInput(a)){var e=a.connectedBlock;a=e?e.pathObject.outputShapeType: +a.shape.type;return e&&e.outputConnection&&(e.statementInputCount||e.nextConnection)||c==d.SHAPES.HEXAGONAL&&c!=a?0:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][a]}return Blockly.blockRendering.Types.isField(a)?c==d.SHAPES.ROUND&&a.field instanceof Blockly.FieldTextInput?b-2.75*d.GRID_UNIT:b-this.constants_.SHAPE_IN_SHAPE_PADDING[c][0]:Blockly.blockRendering.Types.isIcon(a)?this.constants_.SMALL_PADDING:0}; +Blockly.zelos.RenderInfo.prototype.finalizeVerticalAlignment_=function(){if(!this.outputConnection)for(var a=2;a=this.rows.length-1?!!this.bottomRow.hasNextConnection:!!d.precedesStatement;if(e?this.topRow.hasPreviousConnection:b.followsStatement){var g=3==c.elements.length&&(c.elements[1].field instanceof Blockly.FieldLabel||c.elements[1].field instanceof Blockly.FieldImage);if(!e&&g)b.height-=this.constants_.SMALL_PADDING, +d.height-=this.constants_.SMALL_PADDING,c.height-=this.constants_.MEDIUM_PADDING;else if(!e&&!f)b.height+=this.constants_.SMALL_PADDING;else if(f){e=!1;for(f=0;g=c.elements[f];f++)if(Blockly.blockRendering.Types.isInlineInput(g)&&g.connectedBlock&&!g.connectedBlock.isShadow()&&40<=g.connectedBlock.getHeightWidth().height){e=!0;break}e&&(b.height-=this.constants_.SMALL_PADDING,d.height-=this.constants_.SMALL_PADDING)}}}}; +Blockly.zelos.RenderInfo.prototype.finalize_=function(){this.finalizeOutputConnection_();this.finalizeHorizontalAlignment_();this.finalizeVerticalAlignment_();Blockly.zelos.RenderInfo.superClass_.finalize_.call(this);this.rightSide&&(this.widthWithChildren+=this.rightSide.width)};Blockly.zelos.Drawer=function(a,b){Blockly.zelos.Drawer.superClass_.constructor.call(this,a,b)};Blockly.utils.object.inherits(Blockly.zelos.Drawer,Blockly.blockRendering.Drawer); +Blockly.zelos.Drawer.prototype.draw=function(){var a=this.block_.pathObject;a.beginDrawing();this.hideHiddenIcons_();this.drawOutline_();this.drawInternals_();a.setPath(this.outlinePath_+"\n"+this.inlinePath_);this.info_.RTL&&a.flipRTL();Blockly.blockRendering.useDebugger&&this.block_.renderingDebugger.drawDebug(this.block_,this.info_);this.recordSizeOnBlock_();this.info_.outputConnection&&(a.outputShapeType=this.info_.outputConnection.shape.type);a.endDrawing()}; +Blockly.zelos.Drawer.prototype.drawOutline_=function(){this.info_.outputConnection&&this.info_.outputConnection.isDynamicShape&&!this.info_.hasStatementInput&&!this.info_.bottomRow.hasNextConnection?(this.drawFlatTop_(),this.drawRightDynamicConnection_(),this.drawFlatBottom_(),this.drawLeftDynamicConnection_()):Blockly.zelos.Drawer.superClass_.drawOutline_.call(this)}; +Blockly.zelos.Drawer.prototype.drawLeft_=function(){this.info_.outputConnection&&this.info_.outputConnection.isDynamicShape?this.drawLeftDynamicConnection_():Blockly.zelos.Drawer.superClass_.drawLeft_.call(this)}; +Blockly.zelos.Drawer.prototype.drawRightSideRow_=function(a){if(!(0>=a.height))if(a.precedesStatement||a.followsStatement){var b=this.constants_.INSIDE_CORNERS.rightHeight;b=a.height-(a.precedesStatement?b:0);this.outlinePath_+=(a.followsStatement?this.constants_.INSIDE_CORNERS.pathBottomRight:"")+(0","GT"],["\u200f\u2265","GTE"]]},{type:"input_value",name:"B"}],inputsInline:!0,output:"Boolean",style:"logic_blocks",helpUrl:"%{BKY_LOGIC_COMPARE_HELPURL}",extensions:["logic_compare", +"logic_op_tooltip"]},{type:"logic_operation",message0:"%1 %2 %3",args0:[{type:"input_value",name:"A",check:"Boolean"},{type:"field_dropdown",name:"OP",options:[["%{BKY_LOGIC_OPERATION_AND}","AND"],["%{BKY_LOGIC_OPERATION_OR}","OR"]]},{type:"input_value",name:"B",check:"Boolean"}],inputsInline:!0,output:"Boolean",style:"logic_blocks",helpUrl:"%{BKY_LOGIC_OPERATION_HELPURL}",extensions:["logic_op_tooltip"]},{type:"logic_negate",message0:"%{BKY_LOGIC_NEGATE_TITLE}",args0:[{type:"input_value",name:"BOOL", +check:"Boolean"}],output:"Boolean",style:"logic_blocks",tooltip:"%{BKY_LOGIC_NEGATE_TOOLTIP}",helpUrl:"%{BKY_LOGIC_NEGATE_HELPURL}"},{type:"logic_null",message0:"%{BKY_LOGIC_NULL}",output:null,style:"logic_blocks",tooltip:"%{BKY_LOGIC_NULL_TOOLTIP}",helpUrl:"%{BKY_LOGIC_NULL_HELPURL}"},{type:"logic_ternary",message0:"%{BKY_LOGIC_TERNARY_CONDITION} %1",args0:[{type:"input_value",name:"IF",check:"Boolean"}],message1:"%{BKY_LOGIC_TERNARY_IF_TRUE} %1",args1:[{type:"input_value",name:"THEN"}],message2:"%{BKY_LOGIC_TERNARY_IF_FALSE} %1", +args2:[{type:"input_value",name:"ELSE"}],output:null,style:"logic_blocks",tooltip:"%{BKY_LOGIC_TERNARY_TOOLTIP}",helpUrl:"%{BKY_LOGIC_TERNARY_HELPURL}",extensions:["logic_ternary"]}]); +Blockly.defineBlocksWithJsonArray([{type:"controls_if_if",message0:"%{BKY_CONTROLS_IF_IF_TITLE_IF}",nextStatement:null,enableContextMenu:!1,style:"logic_blocks",tooltip:"%{BKY_CONTROLS_IF_IF_TOOLTIP}"},{type:"controls_if_elseif",message0:"%{BKY_CONTROLS_IF_ELSEIF_TITLE_ELSEIF}",previousStatement:null,nextStatement:null,enableContextMenu:!1,style:"logic_blocks",tooltip:"%{BKY_CONTROLS_IF_ELSEIF_TOOLTIP}"},{type:"controls_if_else",message0:"%{BKY_CONTROLS_IF_ELSE_TITLE_ELSE}",previousStatement:null, +enableContextMenu:!1,style:"logic_blocks",tooltip:"%{BKY_CONTROLS_IF_ELSE_TOOLTIP}"}]);Blockly.Constants.Logic.TOOLTIPS_BY_OP={EQ:"%{BKY_LOGIC_COMPARE_TOOLTIP_EQ}",NEQ:"%{BKY_LOGIC_COMPARE_TOOLTIP_NEQ}",LT:"%{BKY_LOGIC_COMPARE_TOOLTIP_LT}",LTE:"%{BKY_LOGIC_COMPARE_TOOLTIP_LTE}",GT:"%{BKY_LOGIC_COMPARE_TOOLTIP_GT}",GTE:"%{BKY_LOGIC_COMPARE_TOOLTIP_GTE}",AND:"%{BKY_LOGIC_OPERATION_TOOLTIP_AND}",OR:"%{BKY_LOGIC_OPERATION_TOOLTIP_OR}"}; +Blockly.Extensions.register("logic_op_tooltip",Blockly.Extensions.buildTooltipForDropdown("OP",Blockly.Constants.Logic.TOOLTIPS_BY_OP)); +Blockly.Constants.Logic.CONTROLS_IF_MUTATOR_MIXIN={elseifCount_:0,elseCount_:0,suppressPrefixSuffix:!0,mutationToDom:function(){if(!this.elseifCount_&&!this.elseCount_)return null;var a=Blockly.utils.xml.createElement("mutation");this.elseifCount_&&a.setAttribute("elseif",this.elseifCount_);this.elseCount_&&a.setAttribute("else",1);return a},domToMutation:function(a){this.elseifCount_=parseInt(a.getAttribute("elseif"),10)||0;this.elseCount_=parseInt(a.getAttribute("else"),10)||0;this.rebuildShape_()}, +decompose:function(a){var b=a.newBlock("controls_if_if");b.initSvg();for(var c=b.nextConnection,d=1;d<=this.elseifCount_;d++){var e=a.newBlock("controls_if_elseif");e.initSvg();c.connect(e.previousConnection);c=e.nextConnection}this.elseCount_&&(a=a.newBlock("controls_if_else"),a.initSvg(),c.connect(a.previousConnection));return b},compose:function(a){a=a.nextConnection.targetBlock();this.elseCount_=this.elseifCount_=0;for(var b=[null],c=[null],d=null;a;){switch(a.type){case "controls_if_elseif":this.elseifCount_++; +b.push(a.valueConnection_);c.push(a.statementConnection_);break;case "controls_if_else":this.elseCount_++;d=a.statementConnection_;break;default:throw TypeError("Unknown block type: "+a.type);}a=a.nextConnection&&a.nextConnection.targetBlock()}this.updateShape_();this.reconnectChildBlocks_(b,c,d)},saveConnections:function(a){a=a.nextConnection.targetBlock();for(var b=1;a;){switch(a.type){case "controls_if_elseif":var c=this.getInput("IF"+b),d=this.getInput("DO"+b);a.valueConnection_=c&&c.connection.targetConnection; +a.statementConnection_=d&&d.connection.targetConnection;b++;break;case "controls_if_else":d=this.getInput("ELSE");a.statementConnection_=d&&d.connection.targetConnection;break;default:throw TypeError("Unknown block type: "+a.type);}a=a.nextConnection&&a.nextConnection.targetBlock()}},rebuildShape_:function(){var a=[null],b=[null],c=null;this.getInput("ELSE")&&(c=this.getInput("ELSE").connection.targetConnection);for(var d=1;this.getInput("IF"+d);){var e=this.getInput("IF"+d),f=this.getInput("DO"+ +d);a.push(e.connection.targetConnection);b.push(f.connection.targetConnection);d++}this.updateShape_();this.reconnectChildBlocks_(a,b,c)},updateShape_:function(){this.getInput("ELSE")&&this.removeInput("ELSE");for(var a=1;this.getInput("IF"+a);)this.removeInput("IF"+a),this.removeInput("DO"+a),a++;for(a=1;a<=this.elseifCount_;a++)this.appendValueInput("IF"+a).setCheck("Boolean").appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSEIF),this.appendStatementInput("DO"+a).appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN); +this.elseCount_&&this.appendStatementInput("ELSE").appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSE)},reconnectChildBlocks_:function(a,b,c){for(var d=1;d<=this.elseifCount_;d++)Blockly.Mutator.reconnect(a[d],this,"IF"+d),Blockly.Mutator.reconnect(b[d],this,"DO"+d);Blockly.Mutator.reconnect(c,this,"ELSE")}};Blockly.Extensions.registerMutator("controls_if_mutator",Blockly.Constants.Logic.CONTROLS_IF_MUTATOR_MIXIN,null,["controls_if_elseif","controls_if_else"]); +Blockly.Constants.Logic.CONTROLS_IF_TOOLTIP_EXTENSION=function(){this.setTooltip(function(){if(this.elseifCount_||this.elseCount_){if(!this.elseifCount_&&this.elseCount_)return Blockly.Msg.CONTROLS_IF_TOOLTIP_2;if(this.elseifCount_&&!this.elseCount_)return Blockly.Msg.CONTROLS_IF_TOOLTIP_3;if(this.elseifCount_&&this.elseCount_)return Blockly.Msg.CONTROLS_IF_TOOLTIP_4}else return Blockly.Msg.CONTROLS_IF_TOOLTIP_1;return""}.bind(this))};Blockly.Extensions.register("controls_if_tooltip",Blockly.Constants.Logic.CONTROLS_IF_TOOLTIP_EXTENSION); +Blockly.Constants.Logic.LOGIC_COMPARE_ONCHANGE_MIXIN={onchange:function(a){this.prevBlocks_||(this.prevBlocks_=[null,null]);var b=this.getInputTargetBlock("A"),c=this.getInputTargetBlock("B");b&&c&&!b.outputConnection.checkType(c.outputConnection)&&(Blockly.Events.setGroup(a.group),a=this.prevBlocks_[0],a!==b&&(b.unplug(),!a||a.isDisposed()||a.isShadow()||this.getInput("A").connection.connect(a.outputConnection)),b=this.prevBlocks_[1],b!==c&&(c.unplug(),!b||b.isDisposed()||b.isShadow()||this.getInput("B").connection.connect(b.outputConnection)), +this.bumpNeighbours(),Blockly.Events.setGroup(!1));this.prevBlocks_[0]=this.getInputTargetBlock("A");this.prevBlocks_[1]=this.getInputTargetBlock("B")}};Blockly.Constants.Logic.LOGIC_COMPARE_EXTENSION=function(){this.mixin(Blockly.Constants.Logic.LOGIC_COMPARE_ONCHANGE_MIXIN)};Blockly.Extensions.register("logic_compare",Blockly.Constants.Logic.LOGIC_COMPARE_EXTENSION); +Blockly.Constants.Logic.LOGIC_TERNARY_ONCHANGE_MIXIN={prevParentConnection_:null,onchange:function(a){var b=this.getInputTargetBlock("THEN"),c=this.getInputTargetBlock("ELSE"),d=this.outputConnection.targetConnection;if((b||c)&&d)for(var e=0;2>e;e++){var f=1==e?b:c;f&&!f.outputConnection.checkType(d)&&(Blockly.Events.setGroup(a.group),d===this.prevParentConnection_?(this.unplug(),d.getSourceBlock().bumpNeighbours()):(f.unplug(),f.bumpNeighbours()),Blockly.Events.setGroup(!1))}this.prevParentConnection_= +d}};Blockly.Extensions.registerMixin("logic_ternary",Blockly.Constants.Logic.LOGIC_TERNARY_ONCHANGE_MIXIN);Blockly.Blocks.loops={};Blockly.Constants.Loops={};Blockly.Constants.Loops.HUE=120; +Blockly.defineBlocksWithJsonArray([{type:"controls_repeat_ext",message0:"%{BKY_CONTROLS_REPEAT_TITLE}",args0:[{type:"input_value",name:"TIMES",check:"Number"}],message1:"%{BKY_CONTROLS_REPEAT_INPUT_DO} %1",args1:[{type:"input_statement",name:"DO"}],previousStatement:null,nextStatement:null,style:"loop_blocks",tooltip:"%{BKY_CONTROLS_REPEAT_TOOLTIP}",helpUrl:"%{BKY_CONTROLS_REPEAT_HELPURL}"},{type:"controls_repeat",message0:"%{BKY_CONTROLS_REPEAT_TITLE}",args0:[{type:"field_number",name:"TIMES",value:10, +min:0,precision:1}],message1:"%{BKY_CONTROLS_REPEAT_INPUT_DO} %1",args1:[{type:"input_statement",name:"DO"}],previousStatement:null,nextStatement:null,style:"loop_blocks",tooltip:"%{BKY_CONTROLS_REPEAT_TOOLTIP}",helpUrl:"%{BKY_CONTROLS_REPEAT_HELPURL}"},{type:"controls_whileUntil",message0:"%1 %2",args0:[{type:"field_dropdown",name:"MODE",options:[["%{BKY_CONTROLS_WHILEUNTIL_OPERATOR_WHILE}","WHILE"],["%{BKY_CONTROLS_WHILEUNTIL_OPERATOR_UNTIL}","UNTIL"]]},{type:"input_value",name:"BOOL",check:"Boolean"}], +message1:"%{BKY_CONTROLS_REPEAT_INPUT_DO} %1",args1:[{type:"input_statement",name:"DO"}],previousStatement:null,nextStatement:null,style:"loop_blocks",helpUrl:"%{BKY_CONTROLS_WHILEUNTIL_HELPURL}",extensions:["controls_whileUntil_tooltip"]},{type:"controls_for",message0:"%{BKY_CONTROLS_FOR_TITLE}",args0:[{type:"field_variable",name:"VAR",variable:null},{type:"input_value",name:"FROM",check:"Number",align:"RIGHT"},{type:"input_value",name:"TO",check:"Number",align:"RIGHT"},{type:"input_value",name:"BY", +check:"Number",align:"RIGHT"}],message1:"%{BKY_CONTROLS_REPEAT_INPUT_DO} %1",args1:[{type:"input_statement",name:"DO"}],inputsInline:!0,previousStatement:null,nextStatement:null,style:"loop_blocks",helpUrl:"%{BKY_CONTROLS_FOR_HELPURL}",extensions:["contextMenu_newGetVariableBlock","controls_for_tooltip"]},{type:"controls_forEach",message0:"%{BKY_CONTROLS_FOREACH_TITLE}",args0:[{type:"field_variable",name:"VAR",variable:null},{type:"input_value",name:"LIST",check:"Array"}],message1:"%{BKY_CONTROLS_REPEAT_INPUT_DO} %1", +args1:[{type:"input_statement",name:"DO"}],previousStatement:null,nextStatement:null,style:"loop_blocks",helpUrl:"%{BKY_CONTROLS_FOREACH_HELPURL}",extensions:["contextMenu_newGetVariableBlock","controls_forEach_tooltip"]},{type:"controls_flow_statements",message0:"%1",args0:[{type:"field_dropdown",name:"FLOW",options:[["%{BKY_CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK}","BREAK"],["%{BKY_CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE}","CONTINUE"]]}],previousStatement:null,style:"loop_blocks",helpUrl:"%{BKY_CONTROLS_FLOW_STATEMENTS_HELPURL}", +extensions:["controls_flow_tooltip","controls_flow_in_loop_check"]}]);Blockly.Constants.Loops.WHILE_UNTIL_TOOLTIPS={WHILE:"%{BKY_CONTROLS_WHILEUNTIL_TOOLTIP_WHILE}",UNTIL:"%{BKY_CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL}"};Blockly.Extensions.register("controls_whileUntil_tooltip",Blockly.Extensions.buildTooltipForDropdown("MODE",Blockly.Constants.Loops.WHILE_UNTIL_TOOLTIPS));Blockly.Constants.Loops.BREAK_CONTINUE_TOOLTIPS={BREAK:"%{BKY_CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK}",CONTINUE:"%{BKY_CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE}"}; +Blockly.Extensions.register("controls_flow_tooltip",Blockly.Extensions.buildTooltipForDropdown("FLOW",Blockly.Constants.Loops.BREAK_CONTINUE_TOOLTIPS)); +Blockly.Constants.Loops.CUSTOM_CONTEXT_MENU_CREATE_VARIABLES_GET_MIXIN={customContextMenu:function(a){if(!this.isInFlyout){var b=this.getField("VAR").getVariable(),c=b.name;if(!this.isCollapsed()&&null!=c){var d={enabled:!0};d.text=Blockly.Msg.VARIABLES_SET_CREATE_GET.replace("%1",c);b=Blockly.Variables.generateVariableFieldDom(b);c=Blockly.utils.xml.createElement("block");c.setAttribute("type","variables_get");c.appendChild(b);d.callback=Blockly.ContextMenu.callbackFactory(this,c);a.push(d)}}}}; +Blockly.Extensions.registerMixin("contextMenu_newGetVariableBlock",Blockly.Constants.Loops.CUSTOM_CONTEXT_MENU_CREATE_VARIABLES_GET_MIXIN);Blockly.Extensions.register("controls_for_tooltip",Blockly.Extensions.buildTooltipWithFieldText("%{BKY_CONTROLS_FOR_TOOLTIP}","VAR"));Blockly.Extensions.register("controls_forEach_tooltip",Blockly.Extensions.buildTooltipWithFieldText("%{BKY_CONTROLS_FOREACH_TOOLTIP}","VAR")); +Blockly.Constants.Loops.CONTROL_FLOW_IN_LOOP_CHECK_MIXIN={LOOP_TYPES:["controls_repeat","controls_repeat_ext","controls_forEach","controls_for","controls_whileUntil"],suppressPrefixSuffix:!0,getSurroundLoop:function(a){do{if(-1!=Blockly.Constants.Loops.CONTROL_FLOW_IN_LOOP_CHECK_MIXIN.LOOP_TYPES.indexOf(a.type))return a;a=a.getSurroundParent()}while(a);return null},onchange:function(a){if(this.workspace.isDragging&&!this.workspace.isDragging()&&a.type==Blockly.Events.BLOCK_MOVE&&a.blockId==this.id){var b= +Blockly.Constants.Loops.CONTROL_FLOW_IN_LOOP_CHECK_MIXIN.getSurroundLoop(this);this.setWarningText(b?null:Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING);if(!this.isInFlyout){var c=Blockly.Events.getGroup();Blockly.Events.setGroup(a.group);this.setEnabled(b);Blockly.Events.setGroup(c)}}}};Blockly.Extensions.registerMixin("controls_flow_in_loop_check",Blockly.Constants.Loops.CONTROL_FLOW_IN_LOOP_CHECK_MIXIN);Blockly.Blocks.math={};Blockly.Constants.Math={};Blockly.Constants.Math.HUE=230; +Blockly.defineBlocksWithJsonArray([{type:"math_number",message0:"%1",args0:[{type:"field_number",name:"NUM",value:0}],output:"Number",helpUrl:"%{BKY_MATH_NUMBER_HELPURL}",style:"math_blocks",tooltip:"%{BKY_MATH_NUMBER_TOOLTIP}",extensions:["parent_tooltip_when_inline"]},{type:"math_arithmetic",message0:"%1 %2 %3",args0:[{type:"input_value",name:"A",check:"Number"},{type:"field_dropdown",name:"OP",options:[["%{BKY_MATH_ADDITION_SYMBOL}","ADD"],["%{BKY_MATH_SUBTRACTION_SYMBOL}","MINUS"],["%{BKY_MATH_MULTIPLICATION_SYMBOL}", +"MULTIPLY"],["%{BKY_MATH_DIVISION_SYMBOL}","DIVIDE"],["%{BKY_MATH_POWER_SYMBOL}","POWER"]]},{type:"input_value",name:"B",check:"Number"}],inputsInline:!0,output:"Number",style:"math_blocks",helpUrl:"%{BKY_MATH_ARITHMETIC_HELPURL}",extensions:["math_op_tooltip"]},{type:"math_single",message0:"%1 %2",args0:[{type:"field_dropdown",name:"OP",options:[["%{BKY_MATH_SINGLE_OP_ROOT}","ROOT"],["%{BKY_MATH_SINGLE_OP_ABSOLUTE}","ABS"],["-","NEG"],["ln","LN"],["log10","LOG10"],["e^","EXP"],["10^","POW10"]]}, +{type:"input_value",name:"NUM",check:"Number"}],output:"Number",style:"math_blocks",helpUrl:"%{BKY_MATH_SINGLE_HELPURL}",extensions:["math_op_tooltip"]},{type:"math_trig",message0:"%1 %2",args0:[{type:"field_dropdown",name:"OP",options:[["%{BKY_MATH_TRIG_SIN}","SIN"],["%{BKY_MATH_TRIG_COS}","COS"],["%{BKY_MATH_TRIG_TAN}","TAN"],["%{BKY_MATH_TRIG_ASIN}","ASIN"],["%{BKY_MATH_TRIG_ACOS}","ACOS"],["%{BKY_MATH_TRIG_ATAN}","ATAN"]]},{type:"input_value",name:"NUM",check:"Number"}],output:"Number",style:"math_blocks", +helpUrl:"%{BKY_MATH_TRIG_HELPURL}",extensions:["math_op_tooltip"]},{type:"math_constant",message0:"%1",args0:[{type:"field_dropdown",name:"CONSTANT",options:[["\u03c0","PI"],["e","E"],["\u03c6","GOLDEN_RATIO"],["sqrt(2)","SQRT2"],["sqrt(\u00bd)","SQRT1_2"],["\u221e","INFINITY"]]}],output:"Number",style:"math_blocks",tooltip:"%{BKY_MATH_CONSTANT_TOOLTIP}",helpUrl:"%{BKY_MATH_CONSTANT_HELPURL}"},{type:"math_number_property",message0:"%1 %2",args0:[{type:"input_value",name:"NUMBER_TO_CHECK",check:"Number"}, +{type:"field_dropdown",name:"PROPERTY",options:[["%{BKY_MATH_IS_EVEN}","EVEN"],["%{BKY_MATH_IS_ODD}","ODD"],["%{BKY_MATH_IS_PRIME}","PRIME"],["%{BKY_MATH_IS_WHOLE}","WHOLE"],["%{BKY_MATH_IS_POSITIVE}","POSITIVE"],["%{BKY_MATH_IS_NEGATIVE}","NEGATIVE"],["%{BKY_MATH_IS_DIVISIBLE_BY}","DIVISIBLE_BY"]]}],inputsInline:!0,output:"Boolean",style:"math_blocks",tooltip:"%{BKY_MATH_IS_TOOLTIP}",mutator:"math_is_divisibleby_mutator"},{type:"math_change",message0:"%{BKY_MATH_CHANGE_TITLE}",args0:[{type:"field_variable", +name:"VAR",variable:"%{BKY_MATH_CHANGE_TITLE_ITEM}"},{type:"input_value",name:"DELTA",check:"Number"}],previousStatement:null,nextStatement:null,style:"variable_blocks",helpUrl:"%{BKY_MATH_CHANGE_HELPURL}",extensions:["math_change_tooltip"]},{type:"math_round",message0:"%1 %2",args0:[{type:"field_dropdown",name:"OP",options:[["%{BKY_MATH_ROUND_OPERATOR_ROUND}","ROUND"],["%{BKY_MATH_ROUND_OPERATOR_ROUNDUP}","ROUNDUP"],["%{BKY_MATH_ROUND_OPERATOR_ROUNDDOWN}","ROUNDDOWN"]]},{type:"input_value",name:"NUM", +check:"Number"}],output:"Number",style:"math_blocks",helpUrl:"%{BKY_MATH_ROUND_HELPURL}",tooltip:"%{BKY_MATH_ROUND_TOOLTIP}"},{type:"math_on_list",message0:"%1 %2",args0:[{type:"field_dropdown",name:"OP",options:[["%{BKY_MATH_ONLIST_OPERATOR_SUM}","SUM"],["%{BKY_MATH_ONLIST_OPERATOR_MIN}","MIN"],["%{BKY_MATH_ONLIST_OPERATOR_MAX}","MAX"],["%{BKY_MATH_ONLIST_OPERATOR_AVERAGE}","AVERAGE"],["%{BKY_MATH_ONLIST_OPERATOR_MEDIAN}","MEDIAN"],["%{BKY_MATH_ONLIST_OPERATOR_MODE}","MODE"],["%{BKY_MATH_ONLIST_OPERATOR_STD_DEV}", +"STD_DEV"],["%{BKY_MATH_ONLIST_OPERATOR_RANDOM}","RANDOM"]]},{type:"input_value",name:"LIST",check:"Array"}],output:"Number",style:"math_blocks",helpUrl:"%{BKY_MATH_ONLIST_HELPURL}",mutator:"math_modes_of_list_mutator",extensions:["math_op_tooltip"]},{type:"math_modulo",message0:"%{BKY_MATH_MODULO_TITLE}",args0:[{type:"input_value",name:"DIVIDEND",check:"Number"},{type:"input_value",name:"DIVISOR",check:"Number"}],inputsInline:!0,output:"Number",style:"math_blocks",tooltip:"%{BKY_MATH_MODULO_TOOLTIP}", +helpUrl:"%{BKY_MATH_MODULO_HELPURL}"},{type:"math_constrain",message0:"%{BKY_MATH_CONSTRAIN_TITLE}",args0:[{type:"input_value",name:"VALUE",check:"Number"},{type:"input_value",name:"LOW",check:"Number"},{type:"input_value",name:"HIGH",check:"Number"}],inputsInline:!0,output:"Number",style:"math_blocks",tooltip:"%{BKY_MATH_CONSTRAIN_TOOLTIP}",helpUrl:"%{BKY_MATH_CONSTRAIN_HELPURL}"},{type:"math_random_int",message0:"%{BKY_MATH_RANDOM_INT_TITLE}",args0:[{type:"input_value",name:"FROM",check:"Number"}, +{type:"input_value",name:"TO",check:"Number"}],inputsInline:!0,output:"Number",style:"math_blocks",tooltip:"%{BKY_MATH_RANDOM_INT_TOOLTIP}",helpUrl:"%{BKY_MATH_RANDOM_INT_HELPURL}"},{type:"math_random_float",message0:"%{BKY_MATH_RANDOM_FLOAT_TITLE_RANDOM}",output:"Number",style:"math_blocks",tooltip:"%{BKY_MATH_RANDOM_FLOAT_TOOLTIP}",helpUrl:"%{BKY_MATH_RANDOM_FLOAT_HELPURL}"},{type:"math_atan2",message0:"%{BKY_MATH_ATAN2_TITLE}",args0:[{type:"input_value",name:"X",check:"Number"},{type:"input_value", +name:"Y",check:"Number"}],inputsInline:!0,output:"Number",style:"math_blocks",tooltip:"%{BKY_MATH_ATAN2_TOOLTIP}",helpUrl:"%{BKY_MATH_ATAN2_HELPURL}"}]); +Blockly.Constants.Math.TOOLTIPS_BY_OP={ADD:"%{BKY_MATH_ARITHMETIC_TOOLTIP_ADD}",MINUS:"%{BKY_MATH_ARITHMETIC_TOOLTIP_MINUS}",MULTIPLY:"%{BKY_MATH_ARITHMETIC_TOOLTIP_MULTIPLY}",DIVIDE:"%{BKY_MATH_ARITHMETIC_TOOLTIP_DIVIDE}",POWER:"%{BKY_MATH_ARITHMETIC_TOOLTIP_POWER}",ROOT:"%{BKY_MATH_SINGLE_TOOLTIP_ROOT}",ABS:"%{BKY_MATH_SINGLE_TOOLTIP_ABS}",NEG:"%{BKY_MATH_SINGLE_TOOLTIP_NEG}",LN:"%{BKY_MATH_SINGLE_TOOLTIP_LN}",LOG10:"%{BKY_MATH_SINGLE_TOOLTIP_LOG10}",EXP:"%{BKY_MATH_SINGLE_TOOLTIP_EXP}",POW10:"%{BKY_MATH_SINGLE_TOOLTIP_POW10}", +SIN:"%{BKY_MATH_TRIG_TOOLTIP_SIN}",COS:"%{BKY_MATH_TRIG_TOOLTIP_COS}",TAN:"%{BKY_MATH_TRIG_TOOLTIP_TAN}",ASIN:"%{BKY_MATH_TRIG_TOOLTIP_ASIN}",ACOS:"%{BKY_MATH_TRIG_TOOLTIP_ACOS}",ATAN:"%{BKY_MATH_TRIG_TOOLTIP_ATAN}",SUM:"%{BKY_MATH_ONLIST_TOOLTIP_SUM}",MIN:"%{BKY_MATH_ONLIST_TOOLTIP_MIN}",MAX:"%{BKY_MATH_ONLIST_TOOLTIP_MAX}",AVERAGE:"%{BKY_MATH_ONLIST_TOOLTIP_AVERAGE}",MEDIAN:"%{BKY_MATH_ONLIST_TOOLTIP_MEDIAN}",MODE:"%{BKY_MATH_ONLIST_TOOLTIP_MODE}",STD_DEV:"%{BKY_MATH_ONLIST_TOOLTIP_STD_DEV}",RANDOM:"%{BKY_MATH_ONLIST_TOOLTIP_RANDOM}"}; +Blockly.Extensions.register("math_op_tooltip",Blockly.Extensions.buildTooltipForDropdown("OP",Blockly.Constants.Math.TOOLTIPS_BY_OP)); +Blockly.Constants.Math.IS_DIVISIBLEBY_MUTATOR_MIXIN={mutationToDom:function(){var a=Blockly.utils.xml.createElement("mutation"),b="DIVISIBLE_BY"==this.getFieldValue("PROPERTY");a.setAttribute("divisor_input",b);return a},domToMutation:function(a){a="true"==a.getAttribute("divisor_input");this.updateShape_(a)},updateShape_:function(a){var b=this.getInput("DIVISOR");a?b||this.appendValueInput("DIVISOR").setCheck("Number"):b&&this.removeInput("DIVISOR")}}; +Blockly.Constants.Math.IS_DIVISIBLE_MUTATOR_EXTENSION=function(){this.getField("PROPERTY").setValidator(function(a){a="DIVISIBLE_BY"==a;this.getSourceBlock().updateShape_(a)})};Blockly.Extensions.registerMutator("math_is_divisibleby_mutator",Blockly.Constants.Math.IS_DIVISIBLEBY_MUTATOR_MIXIN,Blockly.Constants.Math.IS_DIVISIBLE_MUTATOR_EXTENSION);Blockly.Extensions.register("math_change_tooltip",Blockly.Extensions.buildTooltipWithFieldText("%{BKY_MATH_CHANGE_TOOLTIP}","VAR")); +Blockly.Constants.Math.LIST_MODES_MUTATOR_MIXIN={updateType_:function(a){"MODE"==a?this.outputConnection.setCheck("Array"):this.outputConnection.setCheck("Number")},mutationToDom:function(){var a=Blockly.utils.xml.createElement("mutation");a.setAttribute("op",this.getFieldValue("OP"));return a},domToMutation:function(a){this.updateType_(a.getAttribute("op"))}};Blockly.Constants.Math.LIST_MODES_MUTATOR_EXTENSION=function(){this.getField("OP").setValidator(function(a){this.updateType_(a)}.bind(this))}; +Blockly.Extensions.registerMutator("math_modes_of_list_mutator",Blockly.Constants.Math.LIST_MODES_MUTATOR_MIXIN,Blockly.Constants.Math.LIST_MODES_MUTATOR_EXTENSION);Blockly.Blocks.procedures={}; +Blockly.Blocks.procedures_defnoreturn={init:function(){var a=new Blockly.FieldTextInput("",Blockly.Procedures.rename);a.setSpellcheck(!1);this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE).appendField(a,"NAME").appendField("","PARAMS");this.setMutator(new Blockly.Mutator(["procedures_mutatorarg"]));(this.workspace.options.comments||this.workspace.options.parentWorkspace&&this.workspace.options.parentWorkspace.options.comments)&&Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT&&this.setCommentText(Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT); +this.setStyle("procedure_blocks");this.setTooltip(Blockly.Msg.PROCEDURES_DEFNORETURN_TOOLTIP);this.setHelpUrl(Blockly.Msg.PROCEDURES_DEFNORETURN_HELPURL);this.arguments_=[];this.argumentVarModels_=[];this.setStatements_(!0);this.statementConnection_=null},setStatements_:function(a){this.hasStatements_!==a&&(a?(this.appendStatementInput("STACK").appendField(Blockly.Msg.PROCEDURES_DEFNORETURN_DO),this.getInput("RETURN")&&this.moveInputBefore("STACK","RETURN")):this.removeInput("STACK",!0),this.hasStatements_= +a)},updateParams_:function(){var a="";this.arguments_.length&&(a=Blockly.Msg.PROCEDURES_BEFORE_PARAMS+" "+this.arguments_.join(", "));Blockly.Events.disable();try{this.setFieldValue(a,"PARAMS")}finally{Blockly.Events.enable()}},mutationToDom:function(a){var b=Blockly.utils.xml.createElement("mutation");a&&b.setAttribute("name",this.getFieldValue("NAME"));for(var c=0;c5S_413-^&w3C0*Djhb23xn^V5J7*a`8)ASWpJ=BH$)Wu~SmB<7_k z6s6{7Rsh*al?v|p`RO^S3Z8k%djEe z|8W7JU6wwMzOKf4mKH^fXJM`pX;9&~;>5tv0CLC9h9lfCiIGA>B1ot=-=`$KfxBg% z!2xvxQN{%u1ZVItq(kKX|Nq&bz`W(yxy6|b2}}%!60c^lW>9qJNYT78cK7X1G`=?E8tc&Ve+j=v1Tvih0*@(UOg z)*t^hr9ta#q~@}-;m&2rD@0cDT)bT*!L`fq5ld(5;h8Pk2Y6UQCK#ON^K*&Q;bhss z9BrK3;2d=3SdT^1nUz-!lTNNk@Mmq?@6Ud%@A{J`(*oW^&e)mc81_B)Si14_drS7G zzq-2c_uuE{Khk^7tTS$rj-Ikr)v)XCym_1Z3znXKSJt+4_U@f=e}9{n-@o_q*!$1_ zEB<}`ef{>-}am~&Ni$6GlPLakVQmBho5g+#P@|YVu44#{>+Kski1s6Sk9!K zfj8soyG^C-EUk(PA#6;{Q6^WIn`c~D`^7+Hh82hGUKz=t+05gThWnaIbh@zJJ~KkT2if{=by{ zTQ@IoW{I(Pu>SSez~uDu?f?G|PglO@n5t)*8uVuWesE08RaG}_le~O;$&!upuPt3# z8=v`Re&nesyE{%Tj?H`UbN#;vFNOjJhOlWaokA)e6P3DTmN+f&5Mr6SvEXOSJm;zB zK{3S7d@XXazRmOo4h9AjU^KF=ZEbV+q!+WU9HsZvvK=+^CR?=u0PulcRlXv+U&QSpI=?S zCH&&rkF9I7s}8nGoo8jOQ&`u;r3EVh^^8^xAfUf1KrvLqe1L&*2{3~xKx1eCLtxZu H^bi05jng?> literal 0 HcmV?d00001 diff --git a/clover_blocks/www/blockly/media/click.ogg b/clover_blocks/www/blockly/media/click.ogg new file mode 100755 index 0000000000000000000000000000000000000000..e8ae42a6106dadbb6861981a696b7f8b8f64c9ae GIT binary patch literal 4865 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 literal 0 HcmV?d00001 diff --git a/clover_blocks/www/blockly/media/delete.mp3 b/clover_blocks/www/blockly/media/delete.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..442bd9c1f4c9cee39ca9cc776c7cd594c90f2795 GIT binary patch literal 3123 zcmeHJXH*m07M>&!dX=iEktT2fsh48B1PId6#Ly%{0to>Gg7l^YAtC|_JX+`=MMRMz z%|=4KfCcqIM5>~Qpi&e;ROW`Ku5}mx?vMBDy>G33W`Ad9&EEU$Z_XTRv@Q(b0CEUt zjnm;cq8u|14hsnK_YI^Vf`~!nV4SN3mNU!EF&!;!Z5$eF{&#xRLYqT*Id&|R9OOd` zG(Tc*&tbkC+rlwwSg;q_7~vBd8f1LnKtx1@W)LZa8WukCkYH%o-gs`WQe7$`+4l$5~2qp*kMsj@5D1;@IO7SNntOLC?!LRAvKcf9@ zv<~#9a;ON$-~b@t52$T}<95)t;p%n_ZwI&yoLEM7ruG)Pnns4fkO#lAk)SE^SeXF; zZ7UCz7B9tLH~v?yKN=(v=Ao(A3&8&P?V5oB77DOCAk1_{K7L_V>G{%k=1@Xx3l8dO zEQ;Xh5RJBl0zvil(`Yg2v9WKO`FktsM0UE{FSY4QEWT_XQxf{Lu#@iE>PKaz6z^1S#Kk6E| zG-kc6w!8meF>Y{bCCjCuXMue~ilz2C!X4IBS^mk%roZYV3EJ%*WEKJ4CXdY$UQ4Z)#EROyxblolH`S9mE z2QJKK*G*4-eWTyn(ffXymH0Jo*N+cx#lj%oWXLh=832^!1zpK5Gt?{Zu6~>g=Qj~g z;kv01&+284q4hmg6M7n=LU-_69`#Y6$IHWWue=~!%*zSP3s;u%z(unHZ6oA6>5wpA z0tUusc++ve)J0)^ot6*o<=*A4(6PhKg-GAljOBMKHQ4gC4?a(i7x@ucDN0>VX$46b zs_@PuxW{RY&!YHs-HH!6&(>VsY>jx?(Z1VQ#7!ci>cbIby!@Yaoay>{p&^lq}H#A~FK*Wpum_g(k9vo6T>j89*1Bax3k zbT?{hF?OPO2hY7UaB)<*`XH)mlCdl$c?$Zt#HhLHK)t*(Z)~hqV@I<0$hhCi6GisK zQqs=-E2aO0K*XV4AY z!)OJaCpY7M?urlK8Q0=@t2Y=qzcT^2a?j1DdZgooQGn>Jm3&*B3!-+(yl*41&FJb8 z%B8%lrQDQp^lfz);i~u6+0hrQ!-U4_E0AzUwT{P@C(xp^>g7$30wuI5Qm zHXns9?$9qO{c4Bl;se?U9=>zj5DZg2HdRcIS8=3SR_2nB?){D;FR_fg79G`}9cu4GN#xS_ z*Spjxg7uKy;zd=iJ1eai0tw$HESr@aaK;1VibBOdNH)79IuxFx*KgTjnc=sowdyWO zdL--2d_Pskq{g}N^Uu2^dq0TCWobt zdDo-+Bj7i)?x%kFm6xe+bkX}ZV63vAeH)8yy)9Sn`RKCQbD{H7^;pMaDv&aNv z+Z91w$7vqa(F7jXR5tS9Y%^%s3Iy|29127mmMeD7muocCUcW=X!}xolGP$F6HYPB4VL7_aI(MCd}qs6aUj^1?Gh@W3yLA@0ZwTW z)*=GR(#7yAd~pe<;oqly+u}=$xo>X5oPm`PV=M0;7|ng5ziXP)deG<5Gq{P zV8SlyRFD}Ba3lEn<>S3fCj@-K^~4@gX;D=``xW47B?H~p0+@o}Hz+)QUzwNroMxnk z)lGVO8nn%?1O%Cir7lCA5P6!OmOHWbu%2aEd}63QJr{mofy&9TTS;2wVmyFx{B`Eh m)Y*Qf`iFe0Ly8GZ08$|b00;okqjC1dfB267KmOlbfxiHkb?GSp literal 0 HcmV?d00001 diff --git a/clover_blocks/www/blockly/media/delete.ogg b/clover_blocks/www/blockly/media/delete.ogg new file mode 100755 index 0000000000000000000000000000000000000000..67f84ac19a05075a52de49829b3a2bc17af9e29c GIT binary patch literal 5731 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 literal 0 HcmV?d00001 diff --git a/clover_blocks/www/blockly/media/delete.wav b/clover_blocks/www/blockly/media/delete.wav new file mode 100755 index 0000000000000000000000000000000000000000..18debcf96d6f76e36f295feb6de2f09dffaec1f5 GIT binary patch literal 9164 zcmXAu2Yip$_s7qDzDa}-Dr%Jc>{XkXr6@AY+M`sB5G#loTWQP)MXjn$P^v{yVr#9^ z+N<`agpf$`eeU_c_5bRtvcAuK?mg#oKA+Dyw@pN7=+WXL9UFFN(r3`{BDqAw@L%H} zMW%N$;z%xO9?`a4BEOGl8QLnMWy2QlKhr2?#GoMq`$hLHGNi|l$QX%e*ruI7zi&G{ za!6EX zIe74Z?*FaCzkMTzb?-53*x;Dqk-dww7~H#GpMHGPBf58yn8-o>M)Q5o*dk$r2lpKq zStKI5S4DQ#s7+%(-d448l`0~=dkpW9Tuh{>Jk==s!uFI);v+-#qW&OvYgSyeKvfpSiNzigSQ0M7e{Yr*QV;L-YOb2tp95aXHv^Lgknr@%!TS*lw z*QBk~kf}0K{wJSGQPbP`)A4ckn_f;a&l}G`pPQZ!JTuJ;ov7BXaED|jW{mcJ@~P**n7iD4&>l^4i4v4E2rl+2d*CRFKE&wH@8Z-binV_pG<4+t8NL4jQ9DQpp54 zo6Iz+Wwtw)ozNTz2U%T3Qn1dkHtS zq?s*YE9*^ZWq#H{BdMr~uGkYc!8WuN?R`5{HW`o8*IDH>acYo@w7d(Tdn7ADmkH_OaX zGt%sl-V$W0nY8Yr9bfWARQ!Qq@nrFERaK5T4(96GTd}AyCj+%?6kk= z6Md$;^m83AwVjd1N2}Q{^tfD?cbceob*}hJG3}>6Ykx8)a+UXfVID}PmN2!PeUgnc z6_9Z02)=JvuidGiXq5Jpn>tvtkc}{1poOKB+yEJQrJMP{SeU0Uft3kR|m-$TU z6T_ieU2;oR>7?E4HG4pxNupfUe7x(n{I2nuF1<`ka~7QKkqIC#FFPA;3YqJ=&34jo zlW0z`pCOt_L`txuS$f8PrDvo#NZux;rMW)U?J`cfa;ioWDq%882ieV3X*E+@M91)s zmHM{~6xYV+J&88|>O?zC|BwZ;fxo?w2y;YcOI~RpIb}2TAEG<;kk*zeri}cif9ra( z^&7FQDAOf7Yd*J++$y$<+$CdKar(`=G0WazepI47Mz&jO#e zeg)pSPs1}x_(f>e)C(yGeRg~h?OQqRSw^(~S6N%AefLS`K2I;tK0V|4!E8?}oH|pp zd1~98Qp0zK^FQL6!&6u;xy^K-xo>8g+S=AT-u+E-m<;>MK9GabTKC!#`i{6pNqf`P z6ftq2X_F>M4>Q%glBJph45hdS>?~cZr|cR%4wto&6=tDnAiH(Bd?!_;EN7es&&`#7 zri$4BgKX05ve=Y0t#q;twta1V-jH2x>r3;k$8l!rY5OaYnr|cB!aB}uGds1s_F

  • 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 R6c)kuZMgU8%=~+f{2#xTwtoNs literal 0 HcmV?d00001 diff --git a/clover_blocks/www/blockly/media/disconnect.mp3 b/clover_blocks/www/blockly/media/disconnect.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..8cfaff6c06253a8b9bbe50dc0d5d05c4a25b6fb5 GIT binary patch literal 1586 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 literal 0 HcmV?d00001 diff --git a/clover_blocks/www/blockly/media/disconnect.wav b/clover_blocks/www/blockly/media/disconnect.wav new file mode 100755 index 0000000000000000000000000000000000000000..af5c25447cad1a7ebd705e0f28ffbc4ebec01f49 GIT binary patch literal 1492 zcmcgse@v8R9Djbiciaz^Ls1l@Ugwr2@*^}OGz~%I%0mZ-QkeuC2WQ9K0Y~UYx-47F z)a7)e;WE=P*TBL;@<+^7&eSBAzbaP~Jp?=m9rug(eV^y)IZjqvTYvVv`@Y}L_vh#P zJbT`^z?hr+qY8laS?g9>tKFgj008-u(+0r%#SkE10G3jBX{^8l;|l`D!a0onTPVYT zjz`0Yj0@sb5eq%430ME^iCE#-BZ5a!g$cYvq&iah&z=$Xi8(0Go0ux%n|SX7C&5lI z1!S^vdX^j{_sLm0#1i2gv|}`Hbic39e>I>4+5-Cmoq=NAm z757*5CG~X=Y#yd*dUkOB!04bbG7y*ptMvU-d*g)o z!*Q2mzS1Uuxxu#{T=!<*Upp*}PL;ag*HIUB8G1$YxZt2Kj_vVx_!yUOFg$qe#jha@$x#a7rNLuL`C~edGzGQDJ zRU_KN(#R1xLssM#vWV>l80F&%Ay;)rwO>^ul%Ym;TuGPC1qb|zeybk^)zT&6ga?G} z>K=86Y5~5=?kESO7sfV>d8I<~1^7;|YT9($^qIP)QOogcW|eP;wgiiUheJv7Myfz2 zJXE(tiBV(18JJAZNlQb?!SrBaXpS_j#DjTwi>h6HQr)HM#t!%{GtdTdo}8k+Y(6YU zX554K;?2kaJK3xBfif(o$g=mx9@%UCg$$znP}Z?ij~6^7tvkbrhpLYI>LN{doRHqqlu1AVXr?L-a~hdzSS z;Z}aT%h)j*P0x{5a)s2;Z4AR^^d(mC+c*Q|gH&o)n&ci?Anmjn%tLwjV?2ts!y(p5 zLqtn2(W@*LO0X66pbtfY)IQ>;>Iy84W0v%08u@{7HWWJJIJ@E1bYyKDmz_ zrFY3`VxX7lT}Hqle2=pip__04KZ|~5;S9O-8tEoU)K9->UEmm8Z7ejO;vcRtKX;8W zKg;wO$7`J~m(5WruC`f3rdropdown-arrow \ No newline at end of file diff --git a/clover_blocks/www/blockly/media/handclosed.cur b/clover_blocks/www/blockly/media/handclosed.cur new file mode 100755 index 0000000000000000000000000000000000000000..4851755a1690d6631be7c32dcc7e001e6372aafb GIT binary patch literal 326 zcmb`>ArgZy5QX7CK}5#YAc(B&4cephDBOgraFhrH5{cWsZDtreZ06gynH32{0;NO} z9j^cn;3-8u5_G)Ae{U_GW-~k8u8*mL%Q9^6c6*bRZdjrJa+LmXTW#6QRhg67=(=WB LR`K-RGPP%aOVoiS literal 0 HcmV?d00001 diff --git a/clover_blocks/www/blockly/media/handdelete.cur b/clover_blocks/www/blockly/media/handdelete.cur new file mode 100755 index 0000000000000000000000000000000000000000..170320fc281ab02ded109f0310aa180b77e465f0 GIT binary patch literal 766 zcmeHFF%AMD5F9v?Yp*cIl58w|z?Bw6?qT>6zj9Bx!ot!YtV7NVgxDBcCk(s8u)7HX zurTm`K#vX&3+w@$NKXdRz;P$&Z5XzMF{K1mWu^!r$3MP#feGL$h{26T0d9<;Xe$zH zyVWAc`hK=AyHX$`lT`DlMSN-BYBYYUZ7#3struI#()e@6fAbs8EI*J})n~VIF{(3v TWO5|WGG}sm$GKO%-`24&Q~QG0 literal 0 HcmV?d00001 diff --git a/clover_blocks/www/blockly/media/handopen.cur b/clover_blocks/www/blockly/media/handopen.cur new file mode 100755 index 0000000000000000000000000000000000000000..da44588b2fa68ee115deb843e1ce6802e58b3e30 GIT binary patch literal 198 zcmaLQu?>Sj429wUKPx#1ZP1_K>z@;j|==^1poj532;bRa{vGxhX4Q_hXIe}@nrx202p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y9E;jv63FrU-17k@~NpgWidAYDCB{xzCg$v62`}%y(^E=vS&YW}R zIA_L8olku(cINkc=DV|JXP$Y^G}Nh61N!>ipY&rB1d5HUQ4bI2$I282@AHyK}XVm^?T%-*F?qH)ui3Sa`u+&-jj0bVL zwS>a{9u)_eXS=n3rrYGvYrCUE(?!=C$~~N7r6r**{=hU$!eUp0yVzo-WuZ2a!0TLJ z0iUql$|6C1B7u*(z5;rzBr@u8tsXTG{K)kcu-Hl>Lr)@s-@87KpE%k|B12ESfhpGY zG3;Xh#!4!JzSsi~$FRVUt)wF8i#@RJaGEUzd1)mTL0=-D;U})oL-+S+_w|0zlStr` zuFper(`8l?8F~^4yx#Q{p!sm*rv^cNB7rAkezxBq-L6+#StO{BKd_+bit8;vSCCa0 zY5GT9Vu3rc*z{6o|2R&>lEK-ZSYTb=cIDcOqqBV;b;c*)Kx_XC+mZ<^Xw>uEh1?M3 z(Pi%y>IrxU>dAU7-oha91Qs;wR(&KlOzns-a2^KHg2vO_aMcrkV8KAcup6&q*zG$i z$pr2XgO0I1COn2=!MOfm$0Ig(ombIs%8m!4J6% z9;ps|z-91Ab>Mw2gGZ_Z?{yhGQXP1Y%ixjfz`I=rk5mWV=`whvI`DRv!6Vgyx48@+ zsSdowW$;LKV9hmx)X#9u;NY423}@~tk-6(|=I(Tvn@ePFwwAg1aOR#kGWSdu`sKLo z*8VwelZU<B?g=~xQY`6?zK#qG8~eHcB(eheOiAAE zE)4(M`_JqL@;D1TB8wRqxP?KOkzv*x37{Z*iKnkC`y)ekTZU8^Ck)Z(J+#Hpl_C8`@E!djcq-Ly@x zBTzylkXvz~n63)P!qy8)8Rakc|JeFrpULw(GmRfFOaJ>g@m}$>%6o-+icyuvlA~g# z-8f+KK4L!G`48+3hav)4p7 zzhyRSJ2=bg?S!2ha%)7txbUp$$h`W}H23r#(QStdzbxEfJ7dT8@RqkLEi4oc2y@w8&^UpAiJqTb`*wXihmckC(N^~E_!2Ny5bExE#6ALuRd zy)(Du_(8FG)eqW3W)~e^y#L7IcQ=lf^Y5Ly=2L%Cq3Y=y=WjMq@3mx?nq_!+$Msi{ z_qVCPzL>Gs^~U+0L-RJ--s&>VTfKC@$v?X(HxCQ4NiLkf_T=)i&OWx7p;d1f*Kx8c~vxSdwa$T$Bo=7>o=IEp!bmb&ZTe3@xpU%&bf-v<(cb3=AX= gELw!3AvZrIGp!Q0hRnHAazG6Xp00i_>zopr0ACYJfB*mh literal 0 HcmV?d00001 diff --git a/clover_blocks/www/blockly/media/quote1.png b/clover_blocks/www/blockly/media/quote1.png new file mode 100755 index 0000000000000000000000000000000000000000..826583e0ad72dd1424a2ffe9e21a8b653b596058 GIT binary patch literal 738 zcmV<80v-K{P)hppyUq0&_`3K~zY` zwU*CIR8bVizi%)dr%W2FnSNk}mX$CPQd80l=@=9tO1LP9gf>Aze?W_ZAd3nT+6Pk9 zB8q4gJZRIxeo$192pP3d(M`3B=|$fbGxNOndG9^1MQ3#neBSq+d(J)QUf@5Or#j4F zE9wy-zzpWS-|kPDMh6-ZAix6Vys`~za&kJm|imv7ub-TtLCa_4e4I5=UIc=oR zMZp~HHelG>w3R-sf=NDc2!CO_CY#_mUAB7>EzoVZHQ_FSe#`~{NC3zSC#Rbm6>q&j z@5Sbta9Kce=vKUpKxc5ECM?@Y)`jaPksjiTxWXwc3)c%Gy#>t`;U6*3bhw@s=`#LQ zgx|zK7hC@;CdDkb013dG#HfHafZ=eN#h56ZuI2a!d?)%Hf#Ti4gV;lk^&D{=`uAKH z>As_!bMQrNY%+xcO4tP87l0Fr(gz&zW+I^^kw+i4SLqVeU+?i=+xKuriC~HwgdGn= z_h&iBtV2O@KjE8@OLZ0puFhMItm66JPiMSI>{r}(jwa$xtr%TGBJ>G;*cI`RvVMxs zLL&On7Or35l|6!X?J)HV@n-o}p+{V2`o01_tPF04@MVR5#+7#Pn08lp2(l%u8a;OK zp!ISz(Yv&yU9p3`nyiop<}_K~ng$MQvd`J#lr2W)iTQcM6h}31f?4O#I;+uB+-3%Q z`0*cPJNYsaZJP;O!<&(@=W~@+w3!zp^n`Il@%WNyddXfg_AZ&jjk(TlN%G=_dLieUI)}5eKVv-52W;%U3({kc=kzi09cD^L9+|y1X;sFF|f& UTm9BGZ2$lO07*qoM6N<$g0UG+&Hw-a literal 0 HcmV?d00001 diff --git a/clover_blocks/www/blockly/media/sprites.png b/clover_blocks/www/blockly/media/sprites.png new file mode 100755 index 0000000000000000000000000000000000000000..20aadb6c4c31f4a46f0a3316241788687c2fc444 GIT binary patch literal 2595 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 literal 0 HcmV?d00001 diff --git a/clover_blocks/www/blockly/media/sprites.svg b/clover_blocks/www/blockly/media/sprites.svg new file mode 100755 index 000000000..3f09ef3a4 --- /dev/null +++ b/clover_blocks/www/blockly/media/sprites.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/clover_blocks/www/blockly/msg/js/en.js b/clover_blocks/www/blockly/msg/js/en.js new file mode 100755 index 000000000..307dc19e7 --- /dev/null +++ b/clover_blocks/www/blockly/msg/js/en.js @@ -0,0 +1,434 @@ +// This file was automatically generated. Do not modify. + +'use strict'; + +Blockly.Msg["ADD_COMMENT"] = "Add Comment"; +Blockly.Msg["CANNOT_DELETE_VARIABLE_PROCEDURE"] = "Can't delete the variable '%1' because it's part of the definition of the function '%2'"; +Blockly.Msg["CHANGE_VALUE_TITLE"] = "Change value:"; +Blockly.Msg["CLEAN_UP"] = "Clean up Blocks"; +Blockly.Msg["COLLAPSED_WARNINGS_WARNING"] = "Collapsed blocks contain warnings."; +Blockly.Msg["COLLAPSE_ALL"] = "Collapse Blocks"; +Blockly.Msg["COLLAPSE_BLOCK"] = "Collapse Block"; +Blockly.Msg["COLOUR_BLEND_COLOUR1"] = "colour 1"; +Blockly.Msg["COLOUR_BLEND_COLOUR2"] = "colour 2"; +Blockly.Msg["COLOUR_BLEND_HELPURL"] = "https://meyerweb.com/eric/tools/color-blend/#:::rgbp"; +Blockly.Msg["COLOUR_BLEND_RATIO"] = "ratio"; +Blockly.Msg["COLOUR_BLEND_TITLE"] = "blend"; +Blockly.Msg["COLOUR_BLEND_TOOLTIP"] = "Blends two colours together with a given ratio (0.0 - 1.0)."; +Blockly.Msg["COLOUR_PICKER_HELPURL"] = "https://en.wikipedia.org/wiki/Color"; +Blockly.Msg["COLOUR_PICKER_TOOLTIP"] = "Choose a colour from the palette."; +Blockly.Msg["COLOUR_RANDOM_HELPURL"] = "http://randomcolour.com"; +Blockly.Msg["COLOUR_RANDOM_TITLE"] = "random colour"; +Blockly.Msg["COLOUR_RANDOM_TOOLTIP"] = "Choose a colour at random."; +Blockly.Msg["COLOUR_RGB_BLUE"] = "blue"; +Blockly.Msg["COLOUR_RGB_GREEN"] = "green"; +Blockly.Msg["COLOUR_RGB_HELPURL"] = "https://www.december.com/html/spec/colorpercompact.html"; +Blockly.Msg["COLOUR_RGB_RED"] = "red"; +Blockly.Msg["COLOUR_RGB_TITLE"] = "colour with"; +Blockly.Msg["COLOUR_RGB_TOOLTIP"] = "Create a colour with the specified amount of red, green, and blue. All values must be between 0 and 100."; +Blockly.Msg["CONTROLS_FLOW_STATEMENTS_HELPURL"] = "https://github.com/google/blockly/wiki/Loops#loop-termination-blocks"; +Blockly.Msg["CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK"] = "break out of loop"; +Blockly.Msg["CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE"] = "continue with next iteration of loop"; +Blockly.Msg["CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK"] = "Break out of the containing loop."; +Blockly.Msg["CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE"] = "Skip the rest of this loop, and continue with the next iteration."; +Blockly.Msg["CONTROLS_FLOW_STATEMENTS_WARNING"] = "Warning: This block may only be used within a loop."; +Blockly.Msg["CONTROLS_FOREACH_HELPURL"] = "https://github.com/google/blockly/wiki/Loops#for-each"; +Blockly.Msg["CONTROLS_FOREACH_TITLE"] = "for each item %1 in list %2"; +Blockly.Msg["CONTROLS_FOREACH_TOOLTIP"] = "For each item in a list, set the variable '%1' to the item, and then do some statements."; +Blockly.Msg["CONTROLS_FOR_HELPURL"] = "https://github.com/google/blockly/wiki/Loops#count-with"; +Blockly.Msg["CONTROLS_FOR_TITLE"] = "count with %1 from %2 to %3 by %4"; +Blockly.Msg["CONTROLS_FOR_TOOLTIP"] = "Have the variable '%1' take on the values from the start number to the end number, counting by the specified interval, and do the specified blocks."; +Blockly.Msg["CONTROLS_IF_ELSEIF_TOOLTIP"] = "Add a condition to the if block."; +Blockly.Msg["CONTROLS_IF_ELSE_TOOLTIP"] = "Add a final, catch-all condition to the if block."; +Blockly.Msg["CONTROLS_IF_HELPURL"] = "https://github.com/google/blockly/wiki/IfElse"; +Blockly.Msg["CONTROLS_IF_IF_TOOLTIP"] = "Add, remove, or reorder sections to reconfigure this if block."; +Blockly.Msg["CONTROLS_IF_MSG_ELSE"] = "else"; +Blockly.Msg["CONTROLS_IF_MSG_ELSEIF"] = "else if"; +Blockly.Msg["CONTROLS_IF_MSG_IF"] = "if"; +Blockly.Msg["CONTROLS_IF_TOOLTIP_1"] = "If a value is true, then do some statements."; +Blockly.Msg["CONTROLS_IF_TOOLTIP_2"] = "If a value is true, then do the first block of statements. Otherwise, do the second block of statements."; +Blockly.Msg["CONTROLS_IF_TOOLTIP_3"] = "If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements."; +Blockly.Msg["CONTROLS_IF_TOOLTIP_4"] = "If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements. If none of the values are true, do the last block of statements."; +Blockly.Msg["CONTROLS_REPEAT_HELPURL"] = "https://en.wikipedia.org/wiki/For_loop"; +Blockly.Msg["CONTROLS_REPEAT_INPUT_DO"] = "do"; +Blockly.Msg["CONTROLS_REPEAT_TITLE"] = "repeat %1 times"; +Blockly.Msg["CONTROLS_REPEAT_TOOLTIP"] = "Do some statements several times."; +Blockly.Msg["CONTROLS_WHILEUNTIL_HELPURL"] = "https://github.com/google/blockly/wiki/Loops#repeat"; +Blockly.Msg["CONTROLS_WHILEUNTIL_OPERATOR_UNTIL"] = "repeat until"; +Blockly.Msg["CONTROLS_WHILEUNTIL_OPERATOR_WHILE"] = "repeat while"; +Blockly.Msg["CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL"] = "While a value is false, then do some statements."; +Blockly.Msg["CONTROLS_WHILEUNTIL_TOOLTIP_WHILE"] = "While a value is true, then do some statements."; +Blockly.Msg["DELETE_ALL_BLOCKS"] = "Delete all %1 blocks?"; +Blockly.Msg["DELETE_BLOCK"] = "Delete Block"; +Blockly.Msg["DELETE_VARIABLE"] = "Delete the '%1' variable"; +Blockly.Msg["DELETE_VARIABLE_CONFIRMATION"] = "Delete %1 uses of the '%2' variable?"; +Blockly.Msg["DELETE_X_BLOCKS"] = "Delete %1 Blocks"; +Blockly.Msg["DISABLE_BLOCK"] = "Disable Block"; +Blockly.Msg["DUPLICATE_BLOCK"] = "Duplicate"; +Blockly.Msg["DUPLICATE_COMMENT"] = "Duplicate Comment"; +Blockly.Msg["ENABLE_BLOCK"] = "Enable Block"; +Blockly.Msg["EXPAND_ALL"] = "Expand Blocks"; +Blockly.Msg["EXPAND_BLOCK"] = "Expand Block"; +Blockly.Msg["EXTERNAL_INPUTS"] = "External Inputs"; +Blockly.Msg["HELP"] = "Help"; +Blockly.Msg["INLINE_INPUTS"] = "Inline Inputs"; +Blockly.Msg["IOS_CANCEL"] = "Cancel"; +Blockly.Msg["IOS_ERROR"] = "Error"; +Blockly.Msg["IOS_OK"] = "OK"; +Blockly.Msg["IOS_PROCEDURES_ADD_INPUT"] = "+ Add Input"; +Blockly.Msg["IOS_PROCEDURES_ALLOW_STATEMENTS"] = "Allow statements"; +Blockly.Msg["IOS_PROCEDURES_DUPLICATE_INPUTS_ERROR"] = "This function has duplicate inputs."; +Blockly.Msg["IOS_PROCEDURES_INPUTS"] = "INPUTS"; +Blockly.Msg["IOS_VARIABLES_ADD_BUTTON"] = "Add"; +Blockly.Msg["IOS_VARIABLES_ADD_VARIABLE"] = "+ Add Variable"; +Blockly.Msg["IOS_VARIABLES_DELETE_BUTTON"] = "Delete"; +Blockly.Msg["IOS_VARIABLES_EMPTY_NAME_ERROR"] = "You can't use an empty variable name."; +Blockly.Msg["IOS_VARIABLES_RENAME_BUTTON"] = "Rename"; +Blockly.Msg["IOS_VARIABLES_VARIABLE_NAME"] = "Variable name"; +Blockly.Msg["LISTS_CREATE_EMPTY_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#create-empty-list"; +Blockly.Msg["LISTS_CREATE_EMPTY_TITLE"] = "create empty list"; +Blockly.Msg["LISTS_CREATE_EMPTY_TOOLTIP"] = "Returns a list, of length 0, containing no data records"; +Blockly.Msg["LISTS_CREATE_WITH_CONTAINER_TITLE_ADD"] = "list"; +Blockly.Msg["LISTS_CREATE_WITH_CONTAINER_TOOLTIP"] = "Add, remove, or reorder sections to reconfigure this list block."; +Blockly.Msg["LISTS_CREATE_WITH_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#create-list-with"; +Blockly.Msg["LISTS_CREATE_WITH_INPUT_WITH"] = "create list with"; +Blockly.Msg["LISTS_CREATE_WITH_ITEM_TOOLTIP"] = "Add an item to the list."; +Blockly.Msg["LISTS_CREATE_WITH_TOOLTIP"] = "Create a list with any number of items."; +Blockly.Msg["LISTS_GET_INDEX_FIRST"] = "first"; +Blockly.Msg["LISTS_GET_INDEX_FROM_END"] = "# from end"; +Blockly.Msg["LISTS_GET_INDEX_FROM_START"] = "#"; +Blockly.Msg["LISTS_GET_INDEX_GET"] = "get"; +Blockly.Msg["LISTS_GET_INDEX_GET_REMOVE"] = "get and remove"; +Blockly.Msg["LISTS_GET_INDEX_LAST"] = "last"; +Blockly.Msg["LISTS_GET_INDEX_RANDOM"] = "random"; +Blockly.Msg["LISTS_GET_INDEX_REMOVE"] = "remove"; +Blockly.Msg["LISTS_GET_INDEX_TAIL"] = ""; +Blockly.Msg["LISTS_GET_INDEX_TOOLTIP_GET_FIRST"] = "Returns the first item in a list."; +Blockly.Msg["LISTS_GET_INDEX_TOOLTIP_GET_FROM"] = "Returns the item at the specified position in a list."; +Blockly.Msg["LISTS_GET_INDEX_TOOLTIP_GET_LAST"] = "Returns the last item in a list."; +Blockly.Msg["LISTS_GET_INDEX_TOOLTIP_GET_RANDOM"] = "Returns a random item in a list."; +Blockly.Msg["LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST"] = "Removes and returns the first item in a list."; +Blockly.Msg["LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM"] = "Removes and returns the item at the specified position in a list."; +Blockly.Msg["LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST"] = "Removes and returns the last item in a list."; +Blockly.Msg["LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM"] = "Removes and returns a random item in a list."; +Blockly.Msg["LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST"] = "Removes the first item in a list."; +Blockly.Msg["LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM"] = "Removes the item at the specified position in a list."; +Blockly.Msg["LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST"] = "Removes the last item in a list."; +Blockly.Msg["LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM"] = "Removes a random item in a list."; +Blockly.Msg["LISTS_GET_SUBLIST_END_FROM_END"] = "to # from end"; +Blockly.Msg["LISTS_GET_SUBLIST_END_FROM_START"] = "to #"; +Blockly.Msg["LISTS_GET_SUBLIST_END_LAST"] = "to last"; +Blockly.Msg["LISTS_GET_SUBLIST_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#getting-a-sublist"; +Blockly.Msg["LISTS_GET_SUBLIST_START_FIRST"] = "get sub-list from first"; +Blockly.Msg["LISTS_GET_SUBLIST_START_FROM_END"] = "get sub-list from # from end"; +Blockly.Msg["LISTS_GET_SUBLIST_START_FROM_START"] = "get sub-list from #"; +Blockly.Msg["LISTS_GET_SUBLIST_TAIL"] = ""; +Blockly.Msg["LISTS_GET_SUBLIST_TOOLTIP"] = "Creates a copy of the specified portion of a list."; +Blockly.Msg["LISTS_INDEX_FROM_END_TOOLTIP"] = "%1 is the last item."; +Blockly.Msg["LISTS_INDEX_FROM_START_TOOLTIP"] = "%1 is the first item."; +Blockly.Msg["LISTS_INDEX_OF_FIRST"] = "find first occurrence of item"; +Blockly.Msg["LISTS_INDEX_OF_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list"; +Blockly.Msg["LISTS_INDEX_OF_LAST"] = "find last occurrence of item"; +Blockly.Msg["LISTS_INDEX_OF_TOOLTIP"] = "Returns the index of the first/last occurrence of the item in the list. Returns %1 if item is not found."; +Blockly.Msg["LISTS_INLIST"] = "in list"; +Blockly.Msg["LISTS_ISEMPTY_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#is-empty"; +Blockly.Msg["LISTS_ISEMPTY_TITLE"] = "%1 is empty"; +Blockly.Msg["LISTS_ISEMPTY_TOOLTIP"] = "Returns true if the list is empty."; +Blockly.Msg["LISTS_LENGTH_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#length-of"; +Blockly.Msg["LISTS_LENGTH_TITLE"] = "length of %1"; +Blockly.Msg["LISTS_LENGTH_TOOLTIP"] = "Returns the length of a list."; +Blockly.Msg["LISTS_REPEAT_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#create-list-with"; +Blockly.Msg["LISTS_REPEAT_TITLE"] = "create list with item %1 repeated %2 times"; +Blockly.Msg["LISTS_REPEAT_TOOLTIP"] = "Creates a list consisting of the given value repeated the specified number of times."; +Blockly.Msg["LISTS_REVERSE_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#reversing-a-list"; +Blockly.Msg["LISTS_REVERSE_MESSAGE0"] = "reverse %1"; +Blockly.Msg["LISTS_REVERSE_TOOLTIP"] = "Reverse a copy of a list."; +Blockly.Msg["LISTS_SET_INDEX_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#in-list--set"; +Blockly.Msg["LISTS_SET_INDEX_INPUT_TO"] = "as"; +Blockly.Msg["LISTS_SET_INDEX_INSERT"] = "insert at"; +Blockly.Msg["LISTS_SET_INDEX_SET"] = "set"; +Blockly.Msg["LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST"] = "Inserts the item at the start of a list."; +Blockly.Msg["LISTS_SET_INDEX_TOOLTIP_INSERT_FROM"] = "Inserts the item at the specified position in a list."; +Blockly.Msg["LISTS_SET_INDEX_TOOLTIP_INSERT_LAST"] = "Append the item to the end of a list."; +Blockly.Msg["LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM"] = "Inserts the item randomly in a list."; +Blockly.Msg["LISTS_SET_INDEX_TOOLTIP_SET_FIRST"] = "Sets the first item in a list."; +Blockly.Msg["LISTS_SET_INDEX_TOOLTIP_SET_FROM"] = "Sets the item at the specified position in a list."; +Blockly.Msg["LISTS_SET_INDEX_TOOLTIP_SET_LAST"] = "Sets the last item in a list."; +Blockly.Msg["LISTS_SET_INDEX_TOOLTIP_SET_RANDOM"] = "Sets a random item in a list."; +Blockly.Msg["LISTS_SORT_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#sorting-a-list"; +Blockly.Msg["LISTS_SORT_ORDER_ASCENDING"] = "ascending"; +Blockly.Msg["LISTS_SORT_ORDER_DESCENDING"] = "descending"; +Blockly.Msg["LISTS_SORT_TITLE"] = "sort %1 %2 %3"; +Blockly.Msg["LISTS_SORT_TOOLTIP"] = "Sort a copy of a list."; +Blockly.Msg["LISTS_SORT_TYPE_IGNORECASE"] = "alphabetic, ignore case"; +Blockly.Msg["LISTS_SORT_TYPE_NUMERIC"] = "numeric"; +Blockly.Msg["LISTS_SORT_TYPE_TEXT"] = "alphabetic"; +Blockly.Msg["LISTS_SPLIT_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists"; +Blockly.Msg["LISTS_SPLIT_LIST_FROM_TEXT"] = "make list from text"; +Blockly.Msg["LISTS_SPLIT_TEXT_FROM_LIST"] = "make text from list"; +Blockly.Msg["LISTS_SPLIT_TOOLTIP_JOIN"] = "Join a list of texts into one text, separated by a delimiter."; +Blockly.Msg["LISTS_SPLIT_TOOLTIP_SPLIT"] = "Split text into a list of texts, breaking at each delimiter."; +Blockly.Msg["LISTS_SPLIT_WITH_DELIMITER"] = "with delimiter"; +Blockly.Msg["LOGIC_BOOLEAN_FALSE"] = "false"; +Blockly.Msg["LOGIC_BOOLEAN_HELPURL"] = "https://github.com/google/blockly/wiki/Logic#values"; +Blockly.Msg["LOGIC_BOOLEAN_TOOLTIP"] = "Returns either true or false."; +Blockly.Msg["LOGIC_BOOLEAN_TRUE"] = "true"; +Blockly.Msg["LOGIC_COMPARE_HELPURL"] = "https://en.wikipedia.org/wiki/Inequality_(mathematics)"; +Blockly.Msg["LOGIC_COMPARE_TOOLTIP_EQ"] = "Return true if both inputs equal each other."; +Blockly.Msg["LOGIC_COMPARE_TOOLTIP_GT"] = "Return true if the first input is greater than the second input."; +Blockly.Msg["LOGIC_COMPARE_TOOLTIP_GTE"] = "Return true if the first input is greater than or equal to the second input."; +Blockly.Msg["LOGIC_COMPARE_TOOLTIP_LT"] = "Return true if the first input is smaller than the second input."; +Blockly.Msg["LOGIC_COMPARE_TOOLTIP_LTE"] = "Return true if the first input is smaller than or equal to the second input."; +Blockly.Msg["LOGIC_COMPARE_TOOLTIP_NEQ"] = "Return true if both inputs are not equal to each other."; +Blockly.Msg["LOGIC_NEGATE_HELPURL"] = "https://github.com/google/blockly/wiki/Logic#not"; +Blockly.Msg["LOGIC_NEGATE_TITLE"] = "not %1"; +Blockly.Msg["LOGIC_NEGATE_TOOLTIP"] = "Returns true if the input is false. Returns false if the input is true."; +Blockly.Msg["LOGIC_NULL"] = "null"; +Blockly.Msg["LOGIC_NULL_HELPURL"] = "https://en.wikipedia.org/wiki/Nullable_type"; +Blockly.Msg["LOGIC_NULL_TOOLTIP"] = "Returns null."; +Blockly.Msg["LOGIC_OPERATION_AND"] = "and"; +Blockly.Msg["LOGIC_OPERATION_HELPURL"] = "https://github.com/google/blockly/wiki/Logic#logical-operations"; +Blockly.Msg["LOGIC_OPERATION_OR"] = "or"; +Blockly.Msg["LOGIC_OPERATION_TOOLTIP_AND"] = "Return true if both inputs are true."; +Blockly.Msg["LOGIC_OPERATION_TOOLTIP_OR"] = "Return true if at least one of the inputs is true."; +Blockly.Msg["LOGIC_TERNARY_CONDITION"] = "test"; +Blockly.Msg["LOGIC_TERNARY_HELPURL"] = "https://en.wikipedia.org/wiki/%3F:"; +Blockly.Msg["LOGIC_TERNARY_IF_FALSE"] = "if false"; +Blockly.Msg["LOGIC_TERNARY_IF_TRUE"] = "if true"; +Blockly.Msg["LOGIC_TERNARY_TOOLTIP"] = "Check the condition in 'test'. If the condition is true, returns the 'if true' value; otherwise returns the 'if false' value."; +Blockly.Msg["MATH_ADDITION_SYMBOL"] = "+"; +Blockly.Msg["MATH_ARITHMETIC_HELPURL"] = "https://en.wikipedia.org/wiki/Arithmetic"; +Blockly.Msg["MATH_ARITHMETIC_TOOLTIP_ADD"] = "Return the sum of the two numbers."; +Blockly.Msg["MATH_ARITHMETIC_TOOLTIP_DIVIDE"] = "Return the quotient of the two numbers."; +Blockly.Msg["MATH_ARITHMETIC_TOOLTIP_MINUS"] = "Return the difference of the two numbers."; +Blockly.Msg["MATH_ARITHMETIC_TOOLTIP_MULTIPLY"] = "Return the product of the two numbers."; +Blockly.Msg["MATH_ARITHMETIC_TOOLTIP_POWER"] = "Return the first number raised to the power of the second number."; +Blockly.Msg["MATH_ATAN2_HELPURL"] = "https://en.wikipedia.org/wiki/Atan2"; +Blockly.Msg["MATH_ATAN2_TITLE"] = "atan2 of X:%1 Y:%2"; +Blockly.Msg["MATH_ATAN2_TOOLTIP"] = "Return the arctangent of point (X, Y) in degrees from -180 to 180."; +Blockly.Msg["MATH_CHANGE_HELPURL"] = "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter"; +Blockly.Msg["MATH_CHANGE_TITLE"] = "change %1 by %2"; +Blockly.Msg["MATH_CHANGE_TOOLTIP"] = "Add a number to variable '%1'."; +Blockly.Msg["MATH_CONSTANT_HELPURL"] = "https://en.wikipedia.org/wiki/Mathematical_constant"; +Blockly.Msg["MATH_CONSTANT_TOOLTIP"] = "Return one of the common constants: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity)."; +Blockly.Msg["MATH_CONSTRAIN_HELPURL"] = "https://en.wikipedia.org/wiki/Clamping_(graphics)"; +Blockly.Msg["MATH_CONSTRAIN_TITLE"] = "constrain %1 low %2 high %3"; +Blockly.Msg["MATH_CONSTRAIN_TOOLTIP"] = "Constrain a number to be between the specified limits (inclusive)."; +Blockly.Msg["MATH_DIVISION_SYMBOL"] = "÷"; +Blockly.Msg["MATH_IS_DIVISIBLE_BY"] = "is divisible by"; +Blockly.Msg["MATH_IS_EVEN"] = "is even"; +Blockly.Msg["MATH_IS_NEGATIVE"] = "is negative"; +Blockly.Msg["MATH_IS_ODD"] = "is odd"; +Blockly.Msg["MATH_IS_POSITIVE"] = "is positive"; +Blockly.Msg["MATH_IS_PRIME"] = "is prime"; +Blockly.Msg["MATH_IS_TOOLTIP"] = "Check if a number is an even, odd, prime, whole, positive, negative, or if it is divisible by certain number. Returns true or false."; +Blockly.Msg["MATH_IS_WHOLE"] = "is whole"; +Blockly.Msg["MATH_MODULO_HELPURL"] = "https://en.wikipedia.org/wiki/Modulo_operation"; +Blockly.Msg["MATH_MODULO_TITLE"] = "remainder of %1 ÷ %2"; +Blockly.Msg["MATH_MODULO_TOOLTIP"] = "Return the remainder from dividing the two numbers."; +Blockly.Msg["MATH_MULTIPLICATION_SYMBOL"] = "×"; +Blockly.Msg["MATH_NUMBER_HELPURL"] = "https://en.wikipedia.org/wiki/Number"; +Blockly.Msg["MATH_NUMBER_TOOLTIP"] = "A number."; +Blockly.Msg["MATH_ONLIST_HELPURL"] = ""; +Blockly.Msg["MATH_ONLIST_OPERATOR_AVERAGE"] = "average of list"; +Blockly.Msg["MATH_ONLIST_OPERATOR_MAX"] = "max of list"; +Blockly.Msg["MATH_ONLIST_OPERATOR_MEDIAN"] = "median of list"; +Blockly.Msg["MATH_ONLIST_OPERATOR_MIN"] = "min of list"; +Blockly.Msg["MATH_ONLIST_OPERATOR_MODE"] = "modes of list"; +Blockly.Msg["MATH_ONLIST_OPERATOR_RANDOM"] = "random item of list"; +Blockly.Msg["MATH_ONLIST_OPERATOR_STD_DEV"] = "standard deviation of list"; +Blockly.Msg["MATH_ONLIST_OPERATOR_SUM"] = "sum of list"; +Blockly.Msg["MATH_ONLIST_TOOLTIP_AVERAGE"] = "Return the average (arithmetic mean) of the numeric values in the list."; +Blockly.Msg["MATH_ONLIST_TOOLTIP_MAX"] = "Return the largest number in the list."; +Blockly.Msg["MATH_ONLIST_TOOLTIP_MEDIAN"] = "Return the median number in the list."; +Blockly.Msg["MATH_ONLIST_TOOLTIP_MIN"] = "Return the smallest number in the list."; +Blockly.Msg["MATH_ONLIST_TOOLTIP_MODE"] = "Return a list of the most common item(s) in the list."; +Blockly.Msg["MATH_ONLIST_TOOLTIP_RANDOM"] = "Return a random element from the list."; +Blockly.Msg["MATH_ONLIST_TOOLTIP_STD_DEV"] = "Return the standard deviation of the list."; +Blockly.Msg["MATH_ONLIST_TOOLTIP_SUM"] = "Return the sum of all the numbers in the list."; +Blockly.Msg["MATH_POWER_SYMBOL"] = "^"; +Blockly.Msg["MATH_RANDOM_FLOAT_HELPURL"] = "https://en.wikipedia.org/wiki/Random_number_generation"; +Blockly.Msg["MATH_RANDOM_FLOAT_TITLE_RANDOM"] = "random fraction"; +Blockly.Msg["MATH_RANDOM_FLOAT_TOOLTIP"] = "Return a random fraction between 0.0 (inclusive) and 1.0 (exclusive)."; +Blockly.Msg["MATH_RANDOM_INT_HELPURL"] = "https://en.wikipedia.org/wiki/Random_number_generation"; +Blockly.Msg["MATH_RANDOM_INT_TITLE"] = "random integer from %1 to %2"; +Blockly.Msg["MATH_RANDOM_INT_TOOLTIP"] = "Return a random integer between the two specified limits, inclusive."; +Blockly.Msg["MATH_ROUND_HELPURL"] = "https://en.wikipedia.org/wiki/Rounding"; +Blockly.Msg["MATH_ROUND_OPERATOR_ROUND"] = "round"; +Blockly.Msg["MATH_ROUND_OPERATOR_ROUNDDOWN"] = "round down"; +Blockly.Msg["MATH_ROUND_OPERATOR_ROUNDUP"] = "round up"; +Blockly.Msg["MATH_ROUND_TOOLTIP"] = "Round a number up or down."; +Blockly.Msg["MATH_SINGLE_HELPURL"] = "https://en.wikipedia.org/wiki/Square_root"; +Blockly.Msg["MATH_SINGLE_OP_ABSOLUTE"] = "absolute"; +Blockly.Msg["MATH_SINGLE_OP_ROOT"] = "square root"; +Blockly.Msg["MATH_SINGLE_TOOLTIP_ABS"] = "Return the absolute value of a number."; +Blockly.Msg["MATH_SINGLE_TOOLTIP_EXP"] = "Return e to the power of a number."; +Blockly.Msg["MATH_SINGLE_TOOLTIP_LN"] = "Return the natural logarithm of a number."; +Blockly.Msg["MATH_SINGLE_TOOLTIP_LOG10"] = "Return the base 10 logarithm of a number."; +Blockly.Msg["MATH_SINGLE_TOOLTIP_NEG"] = "Return the negation of a number."; +Blockly.Msg["MATH_SINGLE_TOOLTIP_POW10"] = "Return 10 to the power of a number."; +Blockly.Msg["MATH_SINGLE_TOOLTIP_ROOT"] = "Return the square root of a number."; +Blockly.Msg["MATH_SUBTRACTION_SYMBOL"] = "-"; +Blockly.Msg["MATH_TRIG_ACOS"] = "acos"; +Blockly.Msg["MATH_TRIG_ASIN"] = "asin"; +Blockly.Msg["MATH_TRIG_ATAN"] = "atan"; +Blockly.Msg["MATH_TRIG_COS"] = "cos"; +Blockly.Msg["MATH_TRIG_HELPURL"] = "https://en.wikipedia.org/wiki/Trigonometric_functions"; +Blockly.Msg["MATH_TRIG_SIN"] = "sin"; +Blockly.Msg["MATH_TRIG_TAN"] = "tan"; +Blockly.Msg["MATH_TRIG_TOOLTIP_ACOS"] = "Return the arccosine of a number."; +Blockly.Msg["MATH_TRIG_TOOLTIP_ASIN"] = "Return the arcsine of a number."; +Blockly.Msg["MATH_TRIG_TOOLTIP_ATAN"] = "Return the arctangent of a number."; +Blockly.Msg["MATH_TRIG_TOOLTIP_COS"] = "Return the cosine of a degree (not radian)."; +Blockly.Msg["MATH_TRIG_TOOLTIP_SIN"] = "Return the sine of a degree (not radian)."; +Blockly.Msg["MATH_TRIG_TOOLTIP_TAN"] = "Return the tangent of a degree (not radian)."; +Blockly.Msg["NEW_COLOUR_VARIABLE"] = "Create colour variable..."; +Blockly.Msg["NEW_NUMBER_VARIABLE"] = "Create number variable..."; +Blockly.Msg["NEW_STRING_VARIABLE"] = "Create string variable..."; +Blockly.Msg["NEW_VARIABLE"] = "Create variable..."; +Blockly.Msg["NEW_VARIABLE_TITLE"] = "New variable name:"; +Blockly.Msg["NEW_VARIABLE_TYPE_TITLE"] = "New variable type:"; +Blockly.Msg["ORDINAL_NUMBER_SUFFIX"] = ""; +Blockly.Msg["PROCEDURES_ALLOW_STATEMENTS"] = "allow statements"; +Blockly.Msg["PROCEDURES_BEFORE_PARAMS"] = "with:"; +Blockly.Msg["PROCEDURES_CALLNORETURN_HELPURL"] = "https://en.wikipedia.org/wiki/Subroutine"; +Blockly.Msg["PROCEDURES_CALLNORETURN_TOOLTIP"] = "Run the user-defined function '%1'."; +Blockly.Msg["PROCEDURES_CALLRETURN_HELPURL"] = "https://en.wikipedia.org/wiki/Subroutine"; +Blockly.Msg["PROCEDURES_CALLRETURN_TOOLTIP"] = "Run the user-defined function '%1' and use its output."; +Blockly.Msg["PROCEDURES_CALL_BEFORE_PARAMS"] = "with:"; +Blockly.Msg["PROCEDURES_CREATE_DO"] = "Create '%1'"; +Blockly.Msg["PROCEDURES_DEFNORETURN_COMMENT"] = "Describe this function..."; +Blockly.Msg["PROCEDURES_DEFNORETURN_DO"] = ""; +Blockly.Msg["PROCEDURES_DEFNORETURN_HELPURL"] = "https://en.wikipedia.org/wiki/Subroutine"; +Blockly.Msg["PROCEDURES_DEFNORETURN_PROCEDURE"] = "do something"; +Blockly.Msg["PROCEDURES_DEFNORETURN_TITLE"] = "to"; +Blockly.Msg["PROCEDURES_DEFNORETURN_TOOLTIP"] = "Creates a function with no output."; +Blockly.Msg["PROCEDURES_DEFRETURN_HELPURL"] = "https://en.wikipedia.org/wiki/Subroutine"; +Blockly.Msg["PROCEDURES_DEFRETURN_RETURN"] = "return"; +Blockly.Msg["PROCEDURES_DEFRETURN_TOOLTIP"] = "Creates a function with an output."; +Blockly.Msg["PROCEDURES_DEF_DUPLICATE_WARNING"] = "Warning: This function has duplicate parameters."; +Blockly.Msg["PROCEDURES_HIGHLIGHT_DEF"] = "Highlight function definition"; +Blockly.Msg["PROCEDURES_IFRETURN_HELPURL"] = "http://c2.com/cgi/wiki?GuardClause"; +Blockly.Msg["PROCEDURES_IFRETURN_TOOLTIP"] = "If a value is true, then return a second value."; +Blockly.Msg["PROCEDURES_IFRETURN_WARNING"] = "Warning: This block may be used only within a function definition."; +Blockly.Msg["PROCEDURES_MUTATORARG_TITLE"] = "input name:"; +Blockly.Msg["PROCEDURES_MUTATORARG_TOOLTIP"] = "Add an input to the function."; +Blockly.Msg["PROCEDURES_MUTATORCONTAINER_TITLE"] = "inputs"; +Blockly.Msg["PROCEDURES_MUTATORCONTAINER_TOOLTIP"] = "Add, remove, or reorder inputs to this function."; +Blockly.Msg["REDO"] = "Redo"; +Blockly.Msg["REMOVE_COMMENT"] = "Remove Comment"; +Blockly.Msg["RENAME_VARIABLE"] = "Rename variable..."; +Blockly.Msg["RENAME_VARIABLE_TITLE"] = "Rename all '%1' variables to:"; +Blockly.Msg["TEXT_APPEND_HELPURL"] = "https://github.com/google/blockly/wiki/Text#text-modification"; +Blockly.Msg["TEXT_APPEND_TITLE"] = "to %1 append text %2"; +Blockly.Msg["TEXT_APPEND_TOOLTIP"] = "Append some text to variable '%1'."; +Blockly.Msg["TEXT_CHANGECASE_HELPURL"] = "https://github.com/google/blockly/wiki/Text#adjusting-text-case"; +Blockly.Msg["TEXT_CHANGECASE_OPERATOR_LOWERCASE"] = "to lower case"; +Blockly.Msg["TEXT_CHANGECASE_OPERATOR_TITLECASE"] = "to Title Case"; +Blockly.Msg["TEXT_CHANGECASE_OPERATOR_UPPERCASE"] = "to UPPER CASE"; +Blockly.Msg["TEXT_CHANGECASE_TOOLTIP"] = "Return a copy of the text in a different case."; +Blockly.Msg["TEXT_CHARAT_FIRST"] = "get first letter"; +Blockly.Msg["TEXT_CHARAT_FROM_END"] = "get letter # from end"; +Blockly.Msg["TEXT_CHARAT_FROM_START"] = "get letter #"; +Blockly.Msg["TEXT_CHARAT_HELPURL"] = "https://github.com/google/blockly/wiki/Text#extracting-text"; +Blockly.Msg["TEXT_CHARAT_LAST"] = "get last letter"; +Blockly.Msg["TEXT_CHARAT_RANDOM"] = "get random letter"; +Blockly.Msg["TEXT_CHARAT_TAIL"] = ""; +Blockly.Msg["TEXT_CHARAT_TITLE"] = "in text %1 %2"; +Blockly.Msg["TEXT_CHARAT_TOOLTIP"] = "Returns the letter at the specified position."; +Blockly.Msg["TEXT_COUNT_HELPURL"] = "https://github.com/google/blockly/wiki/Text#counting-substrings"; +Blockly.Msg["TEXT_COUNT_MESSAGE0"] = "count %1 in %2"; +Blockly.Msg["TEXT_COUNT_TOOLTIP"] = "Count how many times some text occurs within some other text."; +Blockly.Msg["TEXT_CREATE_JOIN_ITEM_TOOLTIP"] = "Add an item to the text."; +Blockly.Msg["TEXT_CREATE_JOIN_TITLE_JOIN"] = "join"; +Blockly.Msg["TEXT_CREATE_JOIN_TOOLTIP"] = "Add, remove, or reorder sections to reconfigure this text block."; +Blockly.Msg["TEXT_GET_SUBSTRING_END_FROM_END"] = "to letter # from end"; +Blockly.Msg["TEXT_GET_SUBSTRING_END_FROM_START"] = "to letter #"; +Blockly.Msg["TEXT_GET_SUBSTRING_END_LAST"] = "to last letter"; +Blockly.Msg["TEXT_GET_SUBSTRING_HELPURL"] = "https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text"; +Blockly.Msg["TEXT_GET_SUBSTRING_INPUT_IN_TEXT"] = "in text"; +Blockly.Msg["TEXT_GET_SUBSTRING_START_FIRST"] = "get substring from first letter"; +Blockly.Msg["TEXT_GET_SUBSTRING_START_FROM_END"] = "get substring from letter # from end"; +Blockly.Msg["TEXT_GET_SUBSTRING_START_FROM_START"] = "get substring from letter #"; +Blockly.Msg["TEXT_GET_SUBSTRING_TAIL"] = ""; +Blockly.Msg["TEXT_GET_SUBSTRING_TOOLTIP"] = "Returns a specified portion of the text."; +Blockly.Msg["TEXT_INDEXOF_HELPURL"] = "https://github.com/google/blockly/wiki/Text#finding-text"; +Blockly.Msg["TEXT_INDEXOF_OPERATOR_FIRST"] = "find first occurrence of text"; +Blockly.Msg["TEXT_INDEXOF_OPERATOR_LAST"] = "find last occurrence of text"; +Blockly.Msg["TEXT_INDEXOF_TITLE"] = "in text %1 %2 %3"; +Blockly.Msg["TEXT_INDEXOF_TOOLTIP"] = "Returns the index of the first/last occurrence of the first text in the second text. Returns %1 if text is not found."; +Blockly.Msg["TEXT_ISEMPTY_HELPURL"] = "https://github.com/google/blockly/wiki/Text#checking-for-empty-text"; +Blockly.Msg["TEXT_ISEMPTY_TITLE"] = "%1 is empty"; +Blockly.Msg["TEXT_ISEMPTY_TOOLTIP"] = "Returns true if the provided text is empty."; +Blockly.Msg["TEXT_JOIN_HELPURL"] = "https://github.com/google/blockly/wiki/Text#text-creation"; +Blockly.Msg["TEXT_JOIN_TITLE_CREATEWITH"] = "create text with"; +Blockly.Msg["TEXT_JOIN_TOOLTIP"] = "Create a piece of text by joining together any number of items."; +Blockly.Msg["TEXT_LENGTH_HELPURL"] = "https://github.com/google/blockly/wiki/Text#text-modification"; +Blockly.Msg["TEXT_LENGTH_TITLE"] = "length of %1"; +Blockly.Msg["TEXT_LENGTH_TOOLTIP"] = "Returns the number of letters (including spaces) in the provided text."; +Blockly.Msg["TEXT_PRINT_HELPURL"] = "https://github.com/google/blockly/wiki/Text#printing-text"; +Blockly.Msg["TEXT_PRINT_TITLE"] = "print %1"; +Blockly.Msg["TEXT_PRINT_TOOLTIP"] = "Print the specified text, number or other value."; +Blockly.Msg["TEXT_PROMPT_HELPURL"] = "https://github.com/google/blockly/wiki/Text#getting-input-from-the-user"; +Blockly.Msg["TEXT_PROMPT_TOOLTIP_NUMBER"] = "Prompt for user for a number."; +Blockly.Msg["TEXT_PROMPT_TOOLTIP_TEXT"] = "Prompt for user for some text."; +Blockly.Msg["TEXT_PROMPT_TYPE_NUMBER"] = "prompt for number with message"; +Blockly.Msg["TEXT_PROMPT_TYPE_TEXT"] = "prompt for text with message"; +Blockly.Msg["TEXT_REPLACE_HELPURL"] = "https://github.com/google/blockly/wiki/Text#replacing-substrings"; +Blockly.Msg["TEXT_REPLACE_MESSAGE0"] = "replace %1 with %2 in %3"; +Blockly.Msg["TEXT_REPLACE_TOOLTIP"] = "Replace all occurances of some text within some other text."; +Blockly.Msg["TEXT_REVERSE_HELPURL"] = "https://github.com/google/blockly/wiki/Text#reversing-text"; +Blockly.Msg["TEXT_REVERSE_MESSAGE0"] = "reverse %1"; +Blockly.Msg["TEXT_REVERSE_TOOLTIP"] = "Reverses the order of the characters in the text."; +Blockly.Msg["TEXT_TEXT_HELPURL"] = "https://en.wikipedia.org/wiki/String_(computer_science)"; +Blockly.Msg["TEXT_TEXT_TOOLTIP"] = "A letter, word, or line of text."; +Blockly.Msg["TEXT_TRIM_HELPURL"] = "https://github.com/google/blockly/wiki/Text#trimming-removing-spaces"; +Blockly.Msg["TEXT_TRIM_OPERATOR_BOTH"] = "trim spaces from both sides of"; +Blockly.Msg["TEXT_TRIM_OPERATOR_LEFT"] = "trim spaces from left side of"; +Blockly.Msg["TEXT_TRIM_OPERATOR_RIGHT"] = "trim spaces from right side of"; +Blockly.Msg["TEXT_TRIM_TOOLTIP"] = "Return a copy of the text with spaces removed from one or both ends."; +Blockly.Msg["TODAY"] = "Today"; +Blockly.Msg["UNDO"] = "Undo"; +Blockly.Msg["UNNAMED_KEY"] = "unnamed"; +Blockly.Msg["VARIABLES_DEFAULT_NAME"] = "item"; +Blockly.Msg["VARIABLES_GET_CREATE_SET"] = "Create 'set %1'"; +Blockly.Msg["VARIABLES_GET_HELPURL"] = "https://github.com/google/blockly/wiki/Variables#get"; +Blockly.Msg["VARIABLES_GET_TOOLTIP"] = "Returns the value of this variable."; +Blockly.Msg["VARIABLES_SET"] = "set %1 to %2"; +Blockly.Msg["VARIABLES_SET_CREATE_GET"] = "Create 'get %1'"; +Blockly.Msg["VARIABLES_SET_HELPURL"] = "https://github.com/google/blockly/wiki/Variables#set"; +Blockly.Msg["VARIABLES_SET_TOOLTIP"] = "Sets this variable to be equal to the input."; +Blockly.Msg["VARIABLE_ALREADY_EXISTS"] = "A variable named '%1' already exists."; +Blockly.Msg["VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE"] = "A variable named '%1' already exists for another type: '%2'."; +Blockly.Msg["WORKSPACE_ARIA_LABEL"] = "Blockly Workspace"; +Blockly.Msg["WORKSPACE_COMMENT_DEFAULT_TEXT"] = "Say something..."; +Blockly.Msg["CONTROLS_FOREACH_INPUT_DO"] = Blockly.Msg["CONTROLS_REPEAT_INPUT_DO"]; +Blockly.Msg["CONTROLS_FOR_INPUT_DO"] = Blockly.Msg["CONTROLS_REPEAT_INPUT_DO"]; +Blockly.Msg["CONTROLS_IF_ELSEIF_TITLE_ELSEIF"] = Blockly.Msg["CONTROLS_IF_MSG_ELSEIF"]; +Blockly.Msg["CONTROLS_IF_ELSE_TITLE_ELSE"] = Blockly.Msg["CONTROLS_IF_MSG_ELSE"]; +Blockly.Msg["CONTROLS_IF_IF_TITLE_IF"] = Blockly.Msg["CONTROLS_IF_MSG_IF"]; +Blockly.Msg["CONTROLS_IF_MSG_THEN"] = Blockly.Msg["CONTROLS_REPEAT_INPUT_DO"]; +Blockly.Msg["CONTROLS_WHILEUNTIL_INPUT_DO"] = Blockly.Msg["CONTROLS_REPEAT_INPUT_DO"]; +Blockly.Msg["LISTS_CREATE_WITH_ITEM_TITLE"] = Blockly.Msg["VARIABLES_DEFAULT_NAME"]; +Blockly.Msg["LISTS_GET_INDEX_HELPURL"] = Blockly.Msg["LISTS_INDEX_OF_HELPURL"]; +Blockly.Msg["LISTS_GET_INDEX_INPUT_IN_LIST"] = Blockly.Msg["LISTS_INLIST"]; +Blockly.Msg["LISTS_GET_SUBLIST_INPUT_IN_LIST"] = Blockly.Msg["LISTS_INLIST"]; +Blockly.Msg["LISTS_INDEX_OF_INPUT_IN_LIST"] = Blockly.Msg["LISTS_INLIST"]; +Blockly.Msg["LISTS_SET_INDEX_INPUT_IN_LIST"] = Blockly.Msg["LISTS_INLIST"]; +Blockly.Msg["MATH_CHANGE_TITLE_ITEM"] = Blockly.Msg["VARIABLES_DEFAULT_NAME"]; +Blockly.Msg["PROCEDURES_DEFRETURN_COMMENT"] = Blockly.Msg["PROCEDURES_DEFNORETURN_COMMENT"]; +Blockly.Msg["PROCEDURES_DEFRETURN_DO"] = Blockly.Msg["PROCEDURES_DEFNORETURN_DO"]; +Blockly.Msg["PROCEDURES_DEFRETURN_PROCEDURE"] = Blockly.Msg["PROCEDURES_DEFNORETURN_PROCEDURE"]; +Blockly.Msg["PROCEDURES_DEFRETURN_TITLE"] = Blockly.Msg["PROCEDURES_DEFNORETURN_TITLE"]; +Blockly.Msg["TEXT_APPEND_VARIABLE"] = Blockly.Msg["VARIABLES_DEFAULT_NAME"]; +Blockly.Msg["TEXT_CREATE_JOIN_ITEM_TITLE_ITEM"] = Blockly.Msg["VARIABLES_DEFAULT_NAME"]; + +Blockly.Msg["MATH_HUE"] = "230"; +Blockly.Msg["LOOPS_HUE"] = "120"; +Blockly.Msg["LISTS_HUE"] = "260"; +Blockly.Msg["LOGIC_HUE"] = "210"; +Blockly.Msg["VARIABLES_HUE"] = "330"; +Blockly.Msg["TEXTS_HUE"] = "160"; +Blockly.Msg["PROCEDURES_HUE"] = "290"; +Blockly.Msg["COLOUR_HUE"] = "20"; +Blockly.Msg["VARIABLES_DYNAMIC_HUE"] = "310"; \ No newline at end of file diff --git a/clover_blocks/www/blockly/python_compressed.js b/clover_blocks/www/blockly/python_compressed.js new file mode 100755 index 000000000..98e61eebd --- /dev/null +++ b/clover_blocks/www/blockly/python_compressed.js @@ -0,0 +1,98 @@ +// Do not edit this file; automatically generated by gulp. + +/* eslint-disable */ +;(function(root, factory) { + if (typeof define === 'function' && define.amd) { // AMD + define(['./blockly_compressed.js'], factory); + } else if (typeof exports === 'object') { // Node.js + module.exports = factory(require('./blockly_compressed.js')); + } else { // Browser + root.Blockly.Python = factory(root.Blockly); + } +}(this, function(Blockly) { + 'use strict';Blockly.Python=new Blockly.Generator("Python");Blockly.Python.addReservedWords("False,None,True,and,as,assert,break,class,continue,def,del,elif,else,except,exec,finally,for,from,global,if,import,in,is,lambda,nonlocal,not,or,pass,print,raise,return,try,while,with,yield,NotImplemented,Ellipsis,__debug__,quit,exit,copyright,license,credits,ArithmeticError,AssertionError,AttributeError,BaseException,BlockingIOError,BrokenPipeError,BufferError,BytesWarning,ChildProcessError,ConnectionAbortedError,ConnectionError,ConnectionRefusedError,ConnectionResetError,DeprecationWarning,EOFError,Ellipsis,EnvironmentError,Exception,FileExistsError,FileNotFoundError,FloatingPointError,FutureWarning,GeneratorExit,IOError,ImportError,ImportWarning,IndentationError,IndexError,InterruptedError,IsADirectoryError,KeyError,KeyboardInterrupt,LookupError,MemoryError,ModuleNotFoundError,NameError,NotADirectoryError,NotImplemented,NotImplementedError,OSError,OverflowError,PendingDeprecationWarning,PermissionError,ProcessLookupError,RecursionError,ReferenceError,ResourceWarning,RuntimeError,RuntimeWarning,StandardError,StopAsyncIteration,StopIteration,SyntaxError,SyntaxWarning,SystemError,SystemExit,TabError,TimeoutError,TypeError,UnboundLocalError,UnicodeDecodeError,UnicodeEncodeError,UnicodeError,UnicodeTranslateError,UnicodeWarning,UserWarning,ValueError,Warning,ZeroDivisionError,_,__build_class__,__debug__,__doc__,__import__,__loader__,__name__,__package__,__spec__,abs,all,any,apply,ascii,basestring,bin,bool,buffer,bytearray,bytes,callable,chr,classmethod,cmp,coerce,compile,complex,copyright,credits,delattr,dict,dir,divmod,enumerate,eval,exec,execfile,exit,file,filter,float,format,frozenset,getattr,globals,hasattr,hash,help,hex,id,input,int,intern,isinstance,issubclass,iter,len,license,list,locals,long,map,max,memoryview,min,next,object,oct,open,ord,pow,print,property,quit,range,raw_input,reduce,reload,repr,reversed,round,set,setattr,slice,sorted,staticmethod,str,sum,super,tuple,type,unichr,unicode,vars,xrange,zip"); +Blockly.Python.ORDER_ATOMIC=0;Blockly.Python.ORDER_COLLECTION=1;Blockly.Python.ORDER_STRING_CONVERSION=1;Blockly.Python.ORDER_MEMBER=2.1;Blockly.Python.ORDER_FUNCTION_CALL=2.2;Blockly.Python.ORDER_EXPONENTIATION=3;Blockly.Python.ORDER_UNARY_SIGN=4;Blockly.Python.ORDER_BITWISE_NOT=4;Blockly.Python.ORDER_MULTIPLICATIVE=5;Blockly.Python.ORDER_ADDITIVE=6;Blockly.Python.ORDER_BITWISE_SHIFT=7;Blockly.Python.ORDER_BITWISE_AND=8;Blockly.Python.ORDER_BITWISE_XOR=9;Blockly.Python.ORDER_BITWISE_OR=10; +Blockly.Python.ORDER_RELATIONAL=11;Blockly.Python.ORDER_LOGICAL_NOT=12;Blockly.Python.ORDER_LOGICAL_AND=13;Blockly.Python.ORDER_LOGICAL_OR=14;Blockly.Python.ORDER_CONDITIONAL=15;Blockly.Python.ORDER_LAMBDA=16;Blockly.Python.ORDER_NONE=99; +Blockly.Python.ORDER_OVERRIDES=[[Blockly.Python.ORDER_FUNCTION_CALL,Blockly.Python.ORDER_MEMBER],[Blockly.Python.ORDER_FUNCTION_CALL,Blockly.Python.ORDER_FUNCTION_CALL],[Blockly.Python.ORDER_MEMBER,Blockly.Python.ORDER_MEMBER],[Blockly.Python.ORDER_MEMBER,Blockly.Python.ORDER_FUNCTION_CALL],[Blockly.Python.ORDER_LOGICAL_NOT,Blockly.Python.ORDER_LOGICAL_NOT],[Blockly.Python.ORDER_LOGICAL_AND,Blockly.Python.ORDER_LOGICAL_AND],[Blockly.Python.ORDER_LOGICAL_OR,Blockly.Python.ORDER_LOGICAL_OR]]; +Blockly.Python.init=function(a){Blockly.Python.PASS=this.INDENT+"pass\n";Blockly.Python.definitions_=Object.create(null);Blockly.Python.functionNames_=Object.create(null);Blockly.Python.variableDB_?Blockly.Python.variableDB_.reset():Blockly.Python.variableDB_=new Blockly.Names(Blockly.Python.RESERVED_WORDS_);Blockly.Python.variableDB_.setVariableMap(a.getVariableMap());for(var b=[],c=Blockly.Variables.allDeveloperVariables(a),d=0;dc?"int("+a+" - "+-c+")":"int("+a+")",d&&(a="-"+a));return a};Blockly.Python.colour={};Blockly.Python.colour_picker=function(a){return[Blockly.Python.quote_(a.getFieldValue("COLOUR")),Blockly.Python.ORDER_ATOMIC]};Blockly.Python.colour_random=function(a){Blockly.Python.definitions_.import_random="import random";return["'#%06x' % random.randint(0, 2**24 - 1)",Blockly.Python.ORDER_FUNCTION_CALL]}; +Blockly.Python.colour_rgb=function(a){var b=Blockly.Python.provideFunction_("colour_rgb",["def "+Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(r, g, b):"," r = round(min(100, max(0, r)) * 2.55)"," g = round(min(100, max(0, g)) * 2.55)"," b = round(min(100, max(0, b)) * 2.55)"," return '#%02x%02x%02x' % (r, g, b)"]),c=Blockly.Python.valueToCode(a,"RED",Blockly.Python.ORDER_NONE)||0,d=Blockly.Python.valueToCode(a,"GREEN",Blockly.Python.ORDER_NONE)||0;a=Blockly.Python.valueToCode(a,"BLUE",Blockly.Python.ORDER_NONE)|| +0;return[b+"("+c+", "+d+", "+a+")",Blockly.Python.ORDER_FUNCTION_CALL]}; +Blockly.Python.colour_blend=function(a){var b=Blockly.Python.provideFunction_("colour_blend",["def "+Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(colour1, colour2, ratio):"," r1, r2 = int(colour1[1:3], 16), int(colour2[1:3], 16)"," g1, g2 = int(colour1[3:5], 16), int(colour2[3:5], 16)"," b1, b2 = int(colour1[5:7], 16), int(colour2[5:7], 16)"," ratio = min(1, max(0, ratio))"," r = round(r1 * (1 - ratio) + r2 * ratio)"," g = round(g1 * (1 - ratio) + g2 * ratio)"," b = round(b1 * (1 - ratio) + b2 * ratio)", +" return '#%02x%02x%02x' % (r, g, b)"]),c=Blockly.Python.valueToCode(a,"COLOUR1",Blockly.Python.ORDER_NONE)||"'#000000'",d=Blockly.Python.valueToCode(a,"COLOUR2",Blockly.Python.ORDER_NONE)||"'#000000'";a=Blockly.Python.valueToCode(a,"RATIO",Blockly.Python.ORDER_NONE)||0;return[b+"("+c+", "+d+", "+a+")",Blockly.Python.ORDER_FUNCTION_CALL]};Blockly.Python.lists={};Blockly.Python.lists_create_empty=function(a){return["[]",Blockly.Python.ORDER_ATOMIC]};Blockly.Python.lists_create_with=function(a){for(var b=Array(a.itemCount_),c=0;c",GTE:">="}[a.getFieldValue("OP")],c=Blockly.Python.ORDER_RELATIONAL,d=Blockly.Python.valueToCode(a,"A",c)||"0";a=Blockly.Python.valueToCode(a,"B",c)||"0";return[d+" "+b+" "+a,c]}; +Blockly.Python.logic_operation=function(a){var b="AND"==a.getFieldValue("OP")?"and":"or",c="and"==b?Blockly.Python.ORDER_LOGICAL_AND:Blockly.Python.ORDER_LOGICAL_OR,d=Blockly.Python.valueToCode(a,"A",c);a=Blockly.Python.valueToCode(a,"B",c);if(d||a){var e="and"==b?"True":"False";d||(d=e);a||(a=e)}else a=d="False";return[d+" "+b+" "+a,c]};Blockly.Python.logic_negate=function(a){return["not "+(Blockly.Python.valueToCode(a,"BOOL",Blockly.Python.ORDER_LOGICAL_NOT)||"True"),Blockly.Python.ORDER_LOGICAL_NOT]}; +Blockly.Python.logic_boolean=function(a){return["TRUE"==a.getFieldValue("BOOL")?"True":"False",Blockly.Python.ORDER_ATOMIC]};Blockly.Python.logic_null=function(a){return["None",Blockly.Python.ORDER_ATOMIC]}; +Blockly.Python.logic_ternary=function(a){var b=Blockly.Python.valueToCode(a,"IF",Blockly.Python.ORDER_CONDITIONAL)||"False",c=Blockly.Python.valueToCode(a,"THEN",Blockly.Python.ORDER_CONDITIONAL)||"None";a=Blockly.Python.valueToCode(a,"ELSE",Blockly.Python.ORDER_CONDITIONAL)||"None";return[c+" if "+b+" else "+a,Blockly.Python.ORDER_CONDITIONAL]};Blockly.Python.loops={};Blockly.Python.controls_repeat_ext=function(a){var b=a.getField("TIMES")?String(parseInt(a.getFieldValue("TIMES"),10)):Blockly.Python.valueToCode(a,"TIMES",Blockly.Python.ORDER_NONE)||"0";b=Blockly.isNumber(b)?parseInt(b,10):"int("+b+")";var c=Blockly.Python.statementToCode(a,"DO");c=Blockly.Python.addLoopTrap(c,a)||Blockly.Python.PASS;return"for "+Blockly.Python.variableDB_.getDistinctName("count",Blockly.VARIABLE_CATEGORY_NAME)+" in range("+b+"):\n"+c}; +Blockly.Python.controls_repeat=Blockly.Python.controls_repeat_ext;Blockly.Python.controls_whileUntil=function(a){var b="UNTIL"==a.getFieldValue("MODE"),c=Blockly.Python.valueToCode(a,"BOOL",b?Blockly.Python.ORDER_LOGICAL_NOT:Blockly.Python.ORDER_NONE)||"False",d=Blockly.Python.statementToCode(a,"DO");d=Blockly.Python.addLoopTrap(d,a)||Blockly.Python.PASS;b&&(c="not "+c);return"while "+c+":\n"+d}; +Blockly.Python.controls_for=function(a){var b=Blockly.Python.variableDB_.getName(a.getFieldValue("VAR"),Blockly.VARIABLE_CATEGORY_NAME),c=Blockly.Python.valueToCode(a,"FROM",Blockly.Python.ORDER_NONE)||"0",d=Blockly.Python.valueToCode(a,"TO",Blockly.Python.ORDER_NONE)||"0",e=Blockly.Python.valueToCode(a,"BY",Blockly.Python.ORDER_NONE)||"1",f=Blockly.Python.statementToCode(a,"DO");f=Blockly.Python.addLoopTrap(f,a)||Blockly.Python.PASS;var l="",h=function(){return Blockly.Python.provideFunction_("upRange", +["def "+Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(start, stop, step):"," while start <= stop:"," yield start"," start += abs(step)"])},g=function(){return Blockly.Python.provideFunction_("downRange",["def "+Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(start, stop, step):"," while start >= stop:"," yield start"," start -= abs(step)"])};a=function(a,b,c){return"("+a+" <= "+b+") and "+h()+"("+a+", "+b+", "+c+") or "+g()+"("+a+", "+b+", "+c+")"};if(Blockly.isNumber(c)&&Blockly.isNumber(d)&& +Blockly.isNumber(e))c=Number(c),d=Number(d),e=Math.abs(Number(e)),0===c%1&&0===d%1&&0===e%1?(c<=d?(d++,a=0==c&&1==e?d:c+", "+d,1!=e&&(a+=", "+e)):(d--,a=c+", "+d+", -"+e),a="range("+a+")"):(a=ca?Blockly.Python.ORDER_UNARY_SIGN:Blockly.Python.ORDER_ATOMIC;return[a,b]}; +Blockly.Python.math_arithmetic=function(a){var b={ADD:[" + ",Blockly.Python.ORDER_ADDITIVE],MINUS:[" - ",Blockly.Python.ORDER_ADDITIVE],MULTIPLY:[" * ",Blockly.Python.ORDER_MULTIPLICATIVE],DIVIDE:[" / ",Blockly.Python.ORDER_MULTIPLICATIVE],POWER:[" ** ",Blockly.Python.ORDER_EXPONENTIATION]}[a.getFieldValue("OP")],c=b[0];b=b[1];var d=Blockly.Python.valueToCode(a,"A",b)||"0";a=Blockly.Python.valueToCode(a,"B",b)||"0";return[d+c+a,b]}; +Blockly.Python.math_single=function(a){var b=a.getFieldValue("OP");if("NEG"==b){var c=Blockly.Python.valueToCode(a,"NUM",Blockly.Python.ORDER_UNARY_SIGN)||"0";return["-"+c,Blockly.Python.ORDER_UNARY_SIGN]}Blockly.Python.definitions_.import_math="import math";a="SIN"==b||"COS"==b||"TAN"==b?Blockly.Python.valueToCode(a,"NUM",Blockly.Python.ORDER_MULTIPLICATIVE)||"0":Blockly.Python.valueToCode(a,"NUM",Blockly.Python.ORDER_NONE)||"0";switch(b){case "ABS":c="math.fabs("+a+")";break;case "ROOT":c="math.sqrt("+ +a+")";break;case "LN":c="math.log("+a+")";break;case "LOG10":c="math.log10("+a+")";break;case "EXP":c="math.exp("+a+")";break;case "POW10":c="math.pow(10,"+a+")";break;case "ROUND":c="round("+a+")";break;case "ROUNDUP":c="math.ceil("+a+")";break;case "ROUNDDOWN":c="math.floor("+a+")";break;case "SIN":c="math.sin("+a+" / 180.0 * math.pi)";break;case "COS":c="math.cos("+a+" / 180.0 * math.pi)";break;case "TAN":c="math.tan("+a+" / 180.0 * math.pi)"}if(c)return[c,Blockly.Python.ORDER_FUNCTION_CALL];switch(b){case "ASIN":c= +"math.asin("+a+") / math.pi * 180";break;case "ACOS":c="math.acos("+a+") / math.pi * 180";break;case "ATAN":c="math.atan("+a+") / math.pi * 180";break;default:throw Error("Unknown math operator: "+b);}return[c,Blockly.Python.ORDER_MULTIPLICATIVE]}; +Blockly.Python.math_constant=function(a){var b={PI:["math.pi",Blockly.Python.ORDER_MEMBER],E:["math.e",Blockly.Python.ORDER_MEMBER],GOLDEN_RATIO:["(1 + math.sqrt(5)) / 2",Blockly.Python.ORDER_MULTIPLICATIVE],SQRT2:["math.sqrt(2)",Blockly.Python.ORDER_MEMBER],SQRT1_2:["math.sqrt(1.0 / 2)",Blockly.Python.ORDER_MEMBER],INFINITY:["float('inf')",Blockly.Python.ORDER_ATOMIC]};a=a.getFieldValue("CONSTANT");"INFINITY"!=a&&(Blockly.Python.definitions_.import_math="import math");return b[a]}; +Blockly.Python.math_number_property=function(a){var b=Blockly.Python.valueToCode(a,"NUMBER_TO_CHECK",Blockly.Python.ORDER_MULTIPLICATIVE)||"0",c=a.getFieldValue("PROPERTY");if("PRIME"==c)return Blockly.Python.definitions_.import_math="import math",Blockly.Python.definitions_.from_numbers_import_Number="from numbers import Number",[Blockly.Python.provideFunction_("math_isPrime",["def "+Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(n):"," # https://en.wikipedia.org/wiki/Primality_test#Naive_methods", +" # If n is not a number but a string, try parsing it."," if not isinstance(n, Number):"," try:"," n = float(n)"," except:"," return False"," if n == 2 or n == 3:"," return True"," # False if n is negative, is 1, or not whole, or if n is divisible by 2 or 3."," if n <= 1 or n % 1 != 0 or n % 2 == 0 or n % 3 == 0:"," return False"," # Check all the numbers of form 6k +/- 1, up to sqrt(n)."," for x in range(6, int(math.sqrt(n)) + 2, 6):"," if n % (x - 1) == 0 or n % (x + 1) == 0:", +" return False"," return True"])+"("+b+")",Blockly.Python.ORDER_FUNCTION_CALL];switch(c){case "EVEN":var d=b+" % 2 == 0";break;case "ODD":d=b+" % 2 == 1";break;case "WHOLE":d=b+" % 1 == 0";break;case "POSITIVE":d=b+" > 0";break;case "NEGATIVE":d=b+" < 0";break;case "DIVISIBLE_BY":a=Blockly.Python.valueToCode(a,"DIVISOR",Blockly.Python.ORDER_MULTIPLICATIVE);if(!a||"0"==a)return["False",Blockly.Python.ORDER_ATOMIC];d=b+" % "+a+" == 0"}return[d,Blockly.Python.ORDER_RELATIONAL]}; +Blockly.Python.math_change=function(a){Blockly.Python.definitions_.from_numbers_import_Number="from numbers import Number";var b=Blockly.Python.valueToCode(a,"DELTA",Blockly.Python.ORDER_ADDITIVE)||"0";a=Blockly.Python.variableDB_.getName(a.getFieldValue("VAR"),Blockly.VARIABLE_CATEGORY_NAME);return a+" = ("+a+" if isinstance("+a+", Number) else 0) + "+b+"\n"};Blockly.Python.math_round=Blockly.Python.math_single;Blockly.Python.math_trig=Blockly.Python.math_single; +Blockly.Python.math_on_list=function(a){var b=a.getFieldValue("OP");a=Blockly.Python.valueToCode(a,"LIST",Blockly.Python.ORDER_NONE)||"[]";switch(b){case "SUM":b="sum("+a+")";break;case "MIN":b="min("+a+")";break;case "MAX":b="max("+a+")";break;case "AVERAGE":Blockly.Python.definitions_.from_numbers_import_Number="from numbers import Number";b=Blockly.Python.provideFunction_("math_mean",["def "+Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(myList):"," localList = [e for e in myList if isinstance(e, Number)]", +" if not localList: return"," return float(sum(localList)) / len(localList)"]);b=b+"("+a+")";break;case "MEDIAN":Blockly.Python.definitions_.from_numbers_import_Number="from numbers import Number";b=Blockly.Python.provideFunction_("math_median",["def "+Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(myList):"," localList = sorted([e for e in myList if isinstance(e, Number)])"," if not localList: return"," if len(localList) % 2 == 0:"," return (localList[len(localList) // 2 - 1] + localList[len(localList) // 2]) / 2.0", +" else:"," return localList[(len(localList) - 1) // 2]"]);b=b+"("+a+")";break;case "MODE":b=Blockly.Python.provideFunction_("math_modes",["def "+Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(some_list):"," modes = []"," # Using a lists of [item, count] to keep count rather than dict",' # to avoid "unhashable" errors when the counted item is itself a list or dict.'," counts = []"," maxCount = 1"," for item in some_list:"," found = False"," for count in counts:"," if count[0] == item:", +" count[1] += 1"," maxCount = max(maxCount, count[1])"," found = True"," if not found:"," counts.append([item, 1])"," for counted_item, item_count in counts:"," if item_count == maxCount:"," modes.append(counted_item)"," return modes"]);b=b+"("+a+")";break;case "STD_DEV":Blockly.Python.definitions_.import_math="import math";b=Blockly.Python.provideFunction_("math_standard_deviation",["def "+Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(numbers):"," n = len(numbers)", +" if n == 0: return"," mean = float(sum(numbers)) / n"," variance = sum((x - mean) ** 2 for x in numbers) / n"," return math.sqrt(variance)"]);b=b+"("+a+")";break;case "RANDOM":Blockly.Python.definitions_.import_random="import random";b="random.choice("+a+")";break;default:throw Error("Unknown operator: "+b);}return[b,Blockly.Python.ORDER_FUNCTION_CALL]}; +Blockly.Python.math_modulo=function(a){var b=Blockly.Python.valueToCode(a,"DIVIDEND",Blockly.Python.ORDER_MULTIPLICATIVE)||"0";a=Blockly.Python.valueToCode(a,"DIVISOR",Blockly.Python.ORDER_MULTIPLICATIVE)||"0";return[b+" % "+a,Blockly.Python.ORDER_MULTIPLICATIVE]}; +Blockly.Python.math_constrain=function(a){var b=Blockly.Python.valueToCode(a,"VALUE",Blockly.Python.ORDER_NONE)||"0",c=Blockly.Python.valueToCode(a,"LOW",Blockly.Python.ORDER_NONE)||"0";a=Blockly.Python.valueToCode(a,"HIGH",Blockly.Python.ORDER_NONE)||"float('inf')";return["min(max("+b+", "+c+"), "+a+")",Blockly.Python.ORDER_FUNCTION_CALL]}; +Blockly.Python.math_random_int=function(a){Blockly.Python.definitions_.import_random="import random";var b=Blockly.Python.valueToCode(a,"FROM",Blockly.Python.ORDER_NONE)||"0";a=Blockly.Python.valueToCode(a,"TO",Blockly.Python.ORDER_NONE)||"0";return["random.randint("+b+", "+a+")",Blockly.Python.ORDER_FUNCTION_CALL]};Blockly.Python.math_random_float=function(a){Blockly.Python.definitions_.import_random="import random";return["random.random()",Blockly.Python.ORDER_FUNCTION_CALL]}; +Blockly.Python.math_atan2=function(a){Blockly.Python.definitions_.import_math="import math";var b=Blockly.Python.valueToCode(a,"X",Blockly.Python.ORDER_NONE)||"0";return["math.atan2("+(Blockly.Python.valueToCode(a,"Y",Blockly.Python.ORDER_NONE)||"0")+", "+b+") / math.pi * 180",Blockly.Python.ORDER_MULTIPLICATIVE]};Blockly.Python.procedures={}; +Blockly.Python.procedures_defreturn=function(a){for(var b=[],c,d=a.workspace,e=Blockly.Variables.allUsedVarModels(d)||[],f=0;c=e[f];f++)c=c.name,-1==a.getVars().indexOf(c)&&b.push(Blockly.Python.variableDB_.getName(c,Blockly.VARIABLE_CATEGORY_NAME));e=Blockly.Variables.allDeveloperVariables(d);for(f=0;f/g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function u(e){s+=""}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=l();if(s+=t(r.substring(i,g[0].offset)),i=g[0].offset,g===e){o.reverse().forEach(u);do{d(g.splice(0,1)[0]),g=l()}while(g===e&&g.length&&g[0].offset===i);o.reverse().forEach(c)}else"start"===g[0].event?o.push(g[0].node):o.pop(),d(g.splice(0,1)[0])}return s+t(r.substr(i))}});const s="",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=``}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},m=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(b),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=m("//","$"),x=m("/\\*","\\*/"),E=m("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:g,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:b,COMMENT:m,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:g,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),N="of and for in not or if then".split(" ");function w(e,n){return n?+n:function(e){return N.includes(e.toLowerCase())}(e)?0:1}const R=t,y=r,{nodeStream:O,mergeStreams:k}=i,M=Symbol("nomatch");return function(t){var a=[],i=Object.create(null),s=Object.create(null),o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,g="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function b(e,n,t,r){var a={code:n,language:e};S("before:highlight",a);var i=a.result?a.result:m(a.language,a.code,t,r);return i.code=a.code,S("after:highlight",i),i}function m(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=y.subLanguage?function(){if(""!==A){var e=null;if("string"==typeof y.subLanguage){if(!i[y.subLanguage])return void k.addText(A);e=m(y.subLanguage,A,!0,O[y.subLanguage]),O[y.subLanguage]=e.top}else e=v(A,y.subLanguage.length?y.subLanguage:null);y.relevance>0&&(I+=e.relevance),k.addSublanguage(e.emitter,e.language)}}():function(){if(!y.keywords)return void k.addText(A);let e=0;y.keywordPatternRe.lastIndex=0;let n=y.keywordPatternRe.exec(A),t="";for(;n;){t+=A.substring(e,n.index);const r=c(y,n);if(r){const[e,a]=r;k.addText(t),t="",I+=a,k.addKeyword(n[0],e)}else t+=n[0];e=y.keywordPatternRe.lastIndex,n=y.keywordPatternRe.exec(A)}t+=A.substr(e),k.addText(t)}(),A=""}function h(e){return e.className&&k.openNode(e.className),y=Object.create(e,{parent:{value:y}})}function p(e){return 0===y.matcher.regexIndex?(A+=e[0],1):(L=!0,0)}var b={};function x(t,r){var i=r&&r[0];if(A+=t,null==i)return u(),0;if("begin"===b.type&&"end"===r.type&&b.index===r.index&&""===i){if(A+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=b.rule,n}return 1}if(b=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?A+=t:(r.excludeBegin&&(A+=t),u(),r.returnBegin||r.excludeBegin||(A=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(y.className||"")+'"');throw e.mode=y,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(y,e,r);if(!a)return M;var i=y;i.skip?A+=t:(i.returnEnd||i.excludeEnd||(A+=t),u(),i.excludeEnd&&(A=t));do{y.className&&k.closeNode(),y.skip||y.subLanguage||(I+=y.relevance),y=y.parent}while(y!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==M)return s}if("illegal"===r.type&&""===i)return 1;if(B>1e5&&B>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return A+=i,i.length}var E=T(e);if(!E)throw console.error(g.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;const t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,w(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=d(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),N="",y=s||_,O={},k=new f.__emitter(f);!function(){for(var e=[],n=y;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>k.openNode(e))}();var A="",I=0,S=0,B=0,L=!1;try{for(y.matcher.considerAll();;){B++,L?L=!1:(y.matcher.lastIndex=S,y.matcher.considerAll());const e=y.matcher.exec(o);if(!e)break;const n=x(o.substring(S,e.index),e);S=e.index+n}return x(o.substr(S)),k.closeAllNodes(),k.finalize(),N=k.toHTML(),{relevance:I,value:N,language:e,illegal:!1,emitter:k,top:y}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(S-100,S+100),mode:n.mode},sofar:N,relevance:0,value:R(o),emitter:k};if(l)return{illegal:!1,relevance:0,value:R(o),emitter:k,language:e,top:y,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:R(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(T).filter(I).forEach((function(n){var a=m(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?"
    ":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=T(t[1]);return r||(console.warn(g.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||T(e))}(e);if(p(t))return;S("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n"):n=e;const r=n.textContent,a=t?b(t,r,!0):v(r),i=O(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=k(i,O(e),r)}a.value=x(a.value),S("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const N=()=>{if(!N.called){N.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function T(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function A(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function I(e){var n=T(e);return n&&!n.disableAutodetect}function S(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:b,highlightAuto:v,fixMarkup:x,highlightBlock:E,configure:function(e){f=y(f,e)},initHighlighting:N,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",N,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&A(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:T,registerAliases:A,requireLanguage:function(e){var n=T(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:I,inherit:y,addPlugin:function(e){o.push(e)}}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.1.2";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);hljs.registerLanguage("properties",function(){"use strict";return function(e){var n="[ \\t\\f]*",t="("+n+"[:=]"+n+"|[ \\t\\f]+)",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={end:t,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+t,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:s},{begin:a+t,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:a,endsParent:!0,relevance:0}],starts:s},{className:"attr",relevance:0,begin:a+n+"$"}]}}}());hljs.registerLanguage("python",function(){"use strict";return function(e){var n={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},a={className:"meta",begin:/^(>>>|\.\.\.) /},i={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},s={begin:/\{\{/,relevance:0},r={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,i]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},l={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},t={className:"params",variants:[{begin:/\(\s*\)/,skip:!0,className:null},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:["self",a,l,r,e.HASH_COMMENT_MODE]}]};return i.contains=[r,l,a],{name:"Python",aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,l,{beginKeywords:"if",relevance:0},r,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,t,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}}()); \ No newline at end of file diff --git a/clover_blocks/www/highlight/styles/monokai-sublime.css b/clover_blocks/www/highlight/styles/monokai-sublime.css new file mode 100644 index 000000000..2864170da --- /dev/null +++ b/clover_blocks/www/highlight/styles/monokai-sublime.css @@ -0,0 +1,83 @@ +/* + +Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/ + +*/ + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: #23241f; +} + +.hljs, +.hljs-tag, +.hljs-subst { + color: #f8f8f2; +} + +.hljs-strong, +.hljs-emphasis { + color: #a8a8a2; +} + +.hljs-bullet, +.hljs-quote, +.hljs-number, +.hljs-regexp, +.hljs-literal, +.hljs-link { + color: #ae81ff; +} + +.hljs-code, +.hljs-title, +.hljs-section, +.hljs-selector-class { + color: #a6e22e; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-name, +.hljs-attr { + color: #f92672; +} + +.hljs-symbol, +.hljs-attribute { + color: #66d9ef; +} + +.hljs-params, +.hljs-class .hljs-title { + color: #f8f8f2; +} + +.hljs-string, +.hljs-type, +.hljs-built_in, +.hljs-builtin-name, +.hljs-selector-id, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-addition, +.hljs-variable, +.hljs-template-variable { + color: #e6db74; +} + +.hljs-comment, +.hljs-deletion, +.hljs-meta { + color: #75715e; +} diff --git a/clover_blocks/www/index.html b/clover_blocks/www/index.html new file mode 100644 index 000000000..1fd1fdffb --- /dev/null +++ b/clover_blocks/www/index.html @@ -0,0 +1,483 @@ + + + + Clover Blocks + + + + + + + + + + + + + + + +
      +
    • Blocks
    • +
    • Python
    • +
    + +
    + +
    + +
    +
    
    +
    +	
    +
    +
    +
    diff --git a/clover_blocks/www/main.css b/clover_blocks/www/main.css
    new file mode 100644
    index 000000000..c97f1b062
    --- /dev/null
    +++ b/clover_blocks/www/main.css
    @@ -0,0 +1,136 @@
    +body, html {
    +	width: 100%;
    +	height: 100%;
    +}
    +
    +body {
    +	padding: 0;
    +	margin: 0;
    +	display: grid;
    +	grid-template-areas:
    +		"tabs tools"
    +		"content content";
    +	grid-template-rows: min-content 1fr;
    +	grid-template-columns: 1fr min-content ;
    +	font-family: sans-serif;
    +	font-size: 16px;
    +}
    +
    +#tools, #tabs {
    +	background: #dddddd;
    +	border-bottom: 2px rgb(192, 192, 192) solid;
    +	white-space: nowrap;
    +}
    +
    +#tools {
    +	grid-area: tools;
    +	white-space: nowrap;
    +	padding: 10px;
    +	display: flex;
    +	align-items: center;
    +}
    +
    +#program-name {
    +	width: 150px;
    +	border: none;
    +	font-size: 14px;
    +	padding: 5px;
    +	outline: none;
    +	background: transparent;
    +	text-overflow: ellipsis;
    +}
    +
    +#program-name:focus {
    +	background: white;
    +}
    +
    +.changed #program-name {
    +	color: red;
    +}
    +
    +.disconnected {
    +	color: red;
    +	margin-right: 20px;
    +}
    +
    +.connected .disconnected { display: none; }
    +
    +.backend-fail {
    +	margin-right: 20px;
    +	display: none;
    +}
    +
    +@keyframes blink {
    +	0% { opacity: 1; }
    +	50% { opacity: 0.5; }
    +	100% { opacity: 1; }
    +}
    +
    +#running {
    +	color: green;
    +	margin-right: 20px;
    +	animation: 1s blink linear infinite;
    +	display: none;
    +}
    +
    +.running #running { display: block; }
    +
    +#tools button {
    +	font-size: 20px;
    +	margin-left: 10px;
    +}
    +
    +#tabs {
    +	grid-area: tabs;
    +	list-style: none;
    +	margin: 0;
    +	padding: 10px;
    +}
    +
    +#tabs li {
    +	font-size: 18px;
    +	display: inline-block;
    +	padding: 5px 10px;
    +	cursor: pointer;
    +}
    +
    +#tabs li.selected {
    +	background: white;
    +}
    +
    +#run {
    +	width: 70px;
    +}
    +
    +#notifications {
    +	position: absolute;
    +	right: 10px;
    +	background: rgba(0, 0, 0, 0.7);
    +	color: white;
    +	max-width: 350px;
    +	top: 53px;
    +	/* border: white solid 3px; */
    +	z-index: 1;
    +	padding: 10px;
    +	font-family: monospace;
    +	font-size: 16px;
    +	white-space: pre;
    +	max-height: 400px;
    +	overflow: scroll;
    +}
    +
    +#notifications:empty { display: none; }
    +
    +.content {
    +	display: none !important;
    +	grid-area: content;
    +}
    +
    +body[data-tab="blocks"] #blockly { display: block !important; }
    +body[data-tab="python"] #python { display: block !important; }
    +
    +#python {
    +	margin: 0px;
    +	padding: 10px;
    +	z-index: 999999; /* overlap some Blockly's popups */
    +}
    diff --git a/clover_blocks/www/main.js b/clover_blocks/www/main.js
    new file mode 100644
    index 000000000..46b610325
    --- /dev/null
    +++ b/clover_blocks/www/main.js
    @@ -0,0 +1,313 @@
    +import * as ros from './ros.js';
    +import './blocks.js';
    +import {generateCode, generateUserCode} from './python.js';
    +
    +// Tabs
    +document.getElementById('tabs').addEventListener('click', function(e) {
    +	var tab = e.target.getAttribute('data-tab');
    +	if (tab) {
    +		for (let elem of e.target.parentElement.querySelectorAll('[data-tab]')) {
    +			elem.classList.remove('selected');
    +		}
    +		e.target.classList.add('selected');
    +		document.body.setAttribute('data-tab', tab);
    +	}
    +});
    +
    +var workspace = Blockly.inject('blockly', {
    +	toolbox: document.getElementById('toolbox'),
    +	grid: {
    +		spacing: 25,
    +		length: 3,
    +		colour: '#ccc',
    +		snap: true
    +	},
    +	zoom: { controls: true, wheel: true },
    +	media: 'blockly/media/',
    +});
    +
    +function readParams() {
    +	return Promise.all([
    +		ros.readParam('navigate_tolerance', true, 0.2),
    +		ros.readParam('sleep_time', true, 0.2)
    +	]);
    +}
    +
    +var ready = readParams(); // initialization complete promise
    +
    +var pythonArea = document.getElementById('python');
    +
    +// update Python code
    +workspace.addChangeListener(function(e) {
    +	ready.then(function() {
    +		pythonArea.innerHTML = generateUserCode(workspace);
    +		hljs.highlightBlock(pythonArea);
    +	});
    +});
    +
    +var running = false;
    +var runRequest = false;
    +
    +new ROSLIB.Topic({ ros: ros.ros, name: ros.priv + 'block', messageType: 'std_msgs/String' }).subscribe(function(msg) {
    +	workspace.highlightBlock(msg.data);
    +	runRequest = false;
    +	update();
    +});
    +
    +new ROSLIB.Topic({ ros: ros.ros, name: ros.priv + 'running' }).subscribe(function(msg) {
    +	running = msg.data;
    +	runRequest = false;
    +	if (!running) {
    +		workspace.highlightBlock('');
    +	}
    +	update();
    +});
    +
    +var notifElem = document.getElementById('notifications');
    +
    +function z(n) { return (n < 10 ? '0' : '') + n; } // add leading zero
    +
    +new ROSLIB.Topic({ ros: ros.ros, name: ros.priv + 'print', messageType: 'std_msgs/String'}).subscribe(function(msg) {
    +	var d = new Date(); // TODO: use rosgraph_msgs/Log?
    +	var timestamp = `${z(d.getHours())}:${z(d.getMinutes())}:${z(d.getSeconds())}`;
    +	notifElem.innerHTML += `${timestamp}: ${msg.data}\n`;
    +	notifElem.scrollTop = notifElem.scrollHeight;
    +});
    +
    +new ROSLIB.Topic({ ros: ros.ros, name: ros.priv + 'error', messageType: 'std_msgs/String'}).subscribe(function(msg) {
    +	alert('Error: ' + msg.data);
    +});
    +
    +var runButton = document.getElementById('run');
    +
    +function update() {
    +	document.body.classList.toggle('running', running);
    +	runButton.disabled = !ros.ros.isConnected || runRequest || running;
    +}
    +
    +var shownPrompts = new Set();
    +
    +new ROSLIB.Topic({ ros: ros.ros, name: ros.priv + 'prompt', messageType: 'clover_blocks/Prompt'}).subscribe(function(msg) {
    +	if (shownPrompts.has(msg.id)) return;
    +	shownPrompts.add(msg.id);
    +
    +	var response = prompt(msg.message);
    +	new ROSLIB.Topic({
    +		ros: ros.ros,
    +		name: ros.priv + 'input/' + msg.id,
    +		messageType: 'std_msgs/String',
    +		latch: true
    +	}).publish(new ROSLIB.Message({ data: response }));
    +});
    +
    +window.stopProgram = function() {
    +	ros.stopService.callService(new ROSLIB.ServiceRequest(), function(res) {
    +		if (!res.success) alert(res.message);
    +	}, err => alert(err))
    +}
    +
    +ros.ros.on('connection', update);
    +
    +ros.ros.on('close', update);
    +
    +ready.then(() => runButton.disabled = false);
    +
    +window.runProgram = function() {
    +	if (!confirm('Run program?')) return;
    +
    +	runRequest = true;
    +	update();
    +	var code = generateCode(workspace);
    +	console.log(code);
    +	ros.runService.callService(new ROSLIB.ServiceRequest({ code: code } ), function(res) {
    +		if (!res.success) {
    +			runRequest = false;
    +			update();
    +			alert(res.message);
    +		}
    +	}, function(err) {
    +		runRequest = false;
    +		update();
    +		alert(err);
    +	})
    +}
    +
    +window.land = function() {
    +	window.stopProgram();
    +	ros.landService.callService(new ROSLIB.ServiceRequest(), function(result) {
    +	}, function(err) {
    +		alert('Unable to land: ' + err);
    +	});
    +}
    +
    +function getProgramXml() {
    +	var xmlDom = Blockly.Xml.workspaceToDom(workspace);
    +	return Blockly.Xml.domToPrettyText(xmlDom);
    +}
    +
    +function setProgramXml(xml) {
    +	workspace.clear();
    +	if (xml) {
    +		let xmlDom = Blockly.Xml.textToDom(xml);
    +		Blockly.Xml.domToWorkspace(xmlDom, workspace);
    +	}
    +}
    +
    +workspace.addChangeListener(function(e) {
    +	localStorage.setItem('xml', getProgramXml());
    +});
    +
    +var programSelect = document.querySelector('#program-name');
    +var userPrograms = programSelect.querySelector('optgroup[data-type=user]');
    +var examplePrograms = programSelect.querySelector('optgroup[data-type=example]');
    +
    +var programs = {};
    +var program = '';
    +
    +function loadWorkspace() {
    +	var xml = localStorage.getItem('xml');
    +	if (xml) {
    +		setProgramXml(xml);
    +	}
    +	program = localStorage.getItem('program') || '';
    +}
    +
    +loadWorkspace();
    +
    +function loadPrograms() {
    +	ros.loadService.callService(new ROSLIB.ServiceRequest(), function(res) {
    +		if (!res.success) alert(res.message);
    +
    +		for (let i = 0; i < res.names.length; i++) {
    +			let name = res.names[i];
    +			let program = res.programs[i];
    +			let option = document.createElement('option');
    +			option.innerHTML = res.names[i];
    +			if (name.startsWith('examples/')) {
    +				examplePrograms.appendChild(option);
    +			} else {
    +				userPrograms.appendChild(option);
    +			}
    +
    +			programs[name] = program;
    +		}
    +
    +		if (program) {
    +			programSelect.value = program;
    +		}
    +		updateChanged();
    +	}, function(err) {
    +		document.querySelector('.backend-fail').style.display = 'inline';
    +		alert(`Error loading programs list.\n\nHave you enabled clover_blocks in clover.launch?`);
    +		runButton.disabled = true;
    +	})
    +}
    +
    +loadPrograms();
    +
    +function getProgramName() {
    +	if (programSelect.value.startsWith('@')) {
    +		return ''
    +	}
    +	return programSelect.value;
    +}
    +
    +function updateChanged() {
    +	var name = program;
    +	document.body.classList.toggle('changed', name in programs && (programs[name].trim() != getProgramXml().trim()));
    +}
    +
    +workspace.addChangeListener(function(e) {
    +	if (e instanceof Blockly.Events.Change || e instanceof Blockly.Events.Create || e instanceof Blockly.Events.Delete) {
    +		updateChanged();
    +	}
    +});
    +
    +function saveProgram() {
    +	var name = getProgramName();
    +
    +	if (!name) {
    +		name = prompt('Enter new program name:');
    +		if (!name) {
    +			programSelect.value = program;
    +			return;
    +		}
    +		if (!name.endsWith('.xml')) {
    +			name += '.xml';
    +		}
    +		let option = document.createElement('option');
    +		option.innerHTML = name;
    +		userPrograms.appendChild(option);
    +	}
    +
    +	let xml = getProgramXml();
    +	ros.storeService.callService(new ROSLIB.ServiceRequest({
    +		name: name,
    +		program: xml
    +	}), function(result) {
    +		if (!result.success) {
    +			alert(result.message);
    +			return;
    +		}
    +		console.log(result.message);
    +		programSelect.blur();
    +		program = name;
    +		localStorage.setItem('program', name);
    +		programs[name] = xml;
    +		programSelect.value = program;
    +		updateChanged();
    +	}, function(err) {
    +		// TODO: restore previous state correctly
    +		alert('Unable to store: ' + err);
    +		programSelect.blur();
    +		programSelect.value = program;
    +	});
    +}
    +
    +window.addEventListener('keydown', function(e) {
    +	if ((e.metaKey || e.ctrlKey) && e.key == 's') { // ctrl+s/cmd+s
    +		e.preventDefault();
    +		if (!document.body.classList.contains('changed')) { // if not changed, ignore
    +			return;
    +		}
    +		saveProgram();
    +	}
    +});
    +
    +programSelect.addEventListener('change', function(e) {
    +	if (programSelect.value == '@clear') {
    +		if (!confirm('Clear workspace?')) {
    +			programSelect.value = program;
    +			return;
    +		}
    +		localStorage.removeItem('program');
    +		program = '';
    +		setProgramXml('');
    +		programSelect.value = program;
    +		programSelect.blur();
    +	} else if (programSelect.value == '@save') {
    +		saveProgram();
    +	} else {
    +		// load program
    +		if (program == '' || document.body.classList.contains('changed')) {
    +			if (!confirm('Discard changes?')) {
    +				programSelect.value = program;
    +				return;
    +			}
    +		}
    +		let name = programSelect.value;
    +		let lastProgram = getProgramXml();
    +		programSelect.blur();
    +		try {
    +			setProgramXml(programs[name]);
    +			program = name;
    +			localStorage.setItem('program', name);
    +		} catch(e) {
    +			alert(e);
    +			setProgramXml(lastProgram);
    +			program = ''
    +			programSelect.value = program;
    +		}
    +		updateChanged();
    +	}
    +});
    diff --git a/clover_blocks/www/python.js b/clover_blocks/www/python.js
    new file mode 100644
    index 000000000..3baac7071
    --- /dev/null
    +++ b/clover_blocks/www/python.js
    @@ -0,0 +1,434 @@
    +import {params} from './ros.js';
    +
    +// If any new block imports any library, add that library name here.
    +Blockly.Python.addReservedWords('_b,_print');
    +Blockly.Python.addReservedWords('rospy,srv,Trigger,get_telemetry,navigate,set_velocity,land');
    +Blockly.Python.addReservedWords('navigate_wait,land_wait,wait_arrival,wait_yaw,get_distance');
    +Blockly.Python.addReservedWords('pigpio,pi,Range');
    +Blockly.Python.addReservedWords('SetLEDEffect,set_effect');
    +Blockly.Python.addReservedWords('SetLEDs,LEDState,set_leds');
    +
    +// TODO: parametrize
    +const navigate_tolerance = 0.2;
    +const sleep_time = 0.2;
    +
    +const IMPORT_SRV = `from clover import srv
    +from std_srvs.srv import Trigger`;
    +
    +// TODO: tolerance to parameters
    +const NAVIGATE_WAIT = () => `\ndef navigate_wait(x=0, y=0, z=0, speed=0.5, frame_id='body', auto_arm=False):
    +    res = navigate(x=x, y=y, z=z, yaw=float('nan'), speed=speed, frame_id=frame_id, auto_arm=auto_arm)
    +
    +    if not res.success:
    +        raise Exception(res.message)
    +
    +    while not rospy.is_shutdown():
    +        telem = get_telemetry(frame_id='navigate_target')
    +        if math.sqrt(telem.x ** 2 + telem.y ** 2 + telem.z ** 2) < ${params.navigate_tolerance}:
    +            return
    +        rospy.sleep(${params.sleep_time})\n`;
    +
    +const LAND_WAIT = () => `\ndef land_wait():
    +    land()
    +    while get_telemetry().armed:
    +        rospy.sleep(${params.sleep_time})\n`;
    +
    +// TODO: tolerance to parameters
    +const WAIT_YAW = () => `\ndef wait_yaw():
    +    while not rospy.is_shutdown():
    +        telem = get_telemetry(frame_id='navigate_target')
    +        if abs(telem.yaw) < math.radians(20):
    +            return
    +        rospy.sleep(${params.sleep_time})\n`;
    +
    +// TODO: tolerance to parameters
    +const WAIT_ARRIVAL = () => `\ndef wait_arrival():
    +    while not rospy.is_shutdown():
    +        telem = get_telemetry(frame_id='navigate_target')
    +        if math.sqrt(telem.x ** 2 + telem.y ** 2 + telem.z ** 2) < ${params.navigate_tolerance}:
    +            return
    +        rospy.sleep(${params.sleep_time})\n`;
    +
    +// TODO: tolerance to parameters
    +const ARRIVED = () => `\ndef arrived():
    +    telem = get_telemetry(frame_id='navigate_target')
    +    return math.sqrt(telem.x ** 2 + telem.y ** 2 + telem.z ** 2) < ${params.navigate_tolerance}\n`
    +
    +const GET_DISTANCE = `\ndef get_distance(x, y, z, frame_id):
    +    telem = get_telemetry(frame_id)
    +    return math.sqrt((x - telem.x) ** 2 + (y - telem.y) ** 2 + (z - telem.z) ** 2)\n`;
    +
    +var rosDefinitions = {};
    +
    +function generateROSDefinitions() {
    +	// order for ROS definitions is significant, so generate all ROS definitions as one
    +	var code = `rospy.init_node('flight')\n\n`;
    +	if (rosDefinitions.offboard) {
    +		code += `get_telemetry = rospy.ServiceProxy('get_telemetry', srv.GetTelemetry)\n`;
    +		code += `navigate = rospy.ServiceProxy('navigate', srv.Navigate)\n`;
    +		if (rosDefinitions.setVelocity) {
    +			code += `set_velocity = rospy.ServiceProxy('set_velocity', srv.SetVelocity)\n`;
    +		}
    +		if (rosDefinitions.setAttitude) {
    +			code += `set_attitude = rospy.ServiceProxy('set_attitude', srv.SetAttitude)\n`;
    +		}
    +		if (rosDefinitions.setRates) {
    +			code += `set_rates = rospy.ServiceProxy('set_rates', srv.SetRates)\n`;
    +		}
    +		code += `land = rospy.ServiceProxy('land', Trigger)\n`;
    +	}
    +	if (rosDefinitions.setEffect) {
    +		Blockly.Python.definitions_['import_led_effect'] = 'from clover.srv import SetLEDEffect';
    +		code += `set_effect = rospy.ServiceProxy('led/set_effect', SetLEDEffect, persistent=True)\n`;
    +	}
    +	if (rosDefinitions.setLeds) {
    +		Blockly.Python.definitions_['import_set_led'] = 'from led_msgs.srv import SetLEDs\nfrom led_msgs.msg import LEDState';
    +		code += `set_leds = rospy.ServiceProxy('led/set_leds', SetLEDs, persistent=True)\n`;
    +	}
    +	if (rosDefinitions.navigateWait) {
    +		Blockly.Python.definitions_['import_math'] = 'import math';
    +		code += NAVIGATE_WAIT();
    +	}
    +	if (rosDefinitions.landWait) {
    +		code += LAND_WAIT();
    +	}
    +	if (rosDefinitions.waitArrival) {
    +		Blockly.Python.definitions_['import_math'] = 'import math';
    +		code += WAIT_ARRIVAL();
    +	}
    +	if (rosDefinitions.arrived) {
    +		Blockly.Python.definitions_['import_math'] = 'import math';
    +		code += ARRIVED();
    +	}
    +	if (rosDefinitions.waitYaw) {
    +		Blockly.Python.definitions_['import_math'] = 'import math';
    +		code += WAIT_YAW();
    +	}
    +	if (rosDefinitions.distance) {
    +		Blockly.Python.definitions_['import_math'] = 'import math';
    +		code += GET_DISTANCE;
    +	}
    +	Blockly.Python.definitions_['ros'] = code;
    +}
    +
    +function initNode() {
    +	Blockly.Python.definitions_['import_rospy'] = 'import rospy';
    +	generateROSDefinitions();
    +}
    +
    +function simpleOffboard() {
    +	rosDefinitions.offboard = true;
    +	Blockly.Python.definitions_['import_srv'] = IMPORT_SRV;
    +	initNode();
    +}
    +
    +// Adjust indentation
    +Blockly.Python.INDENT = '    ';
    +
    +export function generateUserCode(workspace) {
    +	rosDefinitions = {};
    +	Blockly.Python.STATEMENT_PREFIX = null;
    +	return Blockly.Python.workspaceToCode(workspace);
    +}
    +
    +export function generateCode(workspace) {
    +	rosDefinitions = {};
    +	Blockly.Python.STATEMENT_PREFIX = '_b(%1)\n';
    +	var code = Blockly.Python.workspaceToCode(workspace);
    +	return code;
    +}
    +
    +function buildFrameId(block) {
    +	let frame = block.getFieldValue('FRAME_ID').toLowerCase();
    +	let id = Blockly.Python.valueToCode(block, 'ID', Blockly.Python.ORDER_NONE);
    +	if (frame == 'aruco') { // aruco marker frame
    +		if (id.match(/^[0-9]+$/)) { // id is positive integer
    +			return `'${frame}_${id}'`;
    +		} else { // something else...
    +			return `'${frame}_' + str(int(${id}))`;
    +		}
    +	} else {
    +		return `'${frame}'`;
    +	}
    +}
    +
    +Blockly.Python.navigate = function(block) {
    +	let x = Blockly.Python.valueToCode(block, 'X', Blockly.Python.ORDER_NONE);
    +	let y = Blockly.Python.valueToCode(block, 'Y', Blockly.Python.ORDER_NONE);
    +	let z = Blockly.Python.valueToCode(block, 'Z', Blockly.Python.ORDER_NONE);
    +	let frameId = buildFrameId(block);
    +	let speed = Blockly.Python.valueToCode(block, 'SPEED', Blockly.Python.ORDER_NONE);
    +
    +	let params = [`x=${x}`, `y=${y}`, `z=${z}`, `frame_id=${frameId}`, `speed=${speed}`];
    +
    +	simpleOffboard();
    +
    +	if (block.getFieldValue('WAIT') == 'TRUE') {
    +		rosDefinitions.navigateWait = true;
    +		simpleOffboard();
    +
    +		return `navigate_wait(${params.join(', ')})\n`;
    +
    +	} else {
    +		if (frameId != 'body') {
    +			params.push(`yaw=float('nan')`);
    +		}
    +		return `navigate(${params.join(', ')})\n`;
    +	}
    +}
    +
    +Blockly.Python.set_velocity = function(block) {
    +	let x = Blockly.Python.valueToCode(block, 'X', Blockly.Python.ORDER_NONE);
    +	let y = Blockly.Python.valueToCode(block, 'Y', Blockly.Python.ORDER_NONE);
    +	let z = Blockly.Python.valueToCode(block, 'Z', Blockly.Python.ORDER_NONE);
    +	let frameId = buildFrameId(block);
    +
    +	simpleOffboard();
    +
    +	if (frameId == `'body'`) {
    +		return `set_velocity(vx=${x}, vy=${y}, vz=${z}, frame_id=${frameId})\n`;
    +	} else {
    +		return `set_velocity(vx=${x}, vy=${y}, vz=${z}, yaw=float('nan'), frame_id=${frameId})\n`;
    +	}
    +}
    +
    +Blockly.Python.take_off = function(block) {
    +	simpleOffboard();
    +
    +	let z = Blockly.Python.valueToCode(block, 'ALT', Blockly.Python.ORDER_NONE);
    +
    +	if (block.getFieldValue('WAIT') == 'TRUE') {
    +		rosDefinitions.navigateWait = true;
    +		simpleOffboard();
    +
    +		return `navigate_wait(z=${z}, frame_id='body', auto_arm=True)\n`;
    +	} else {
    +		return `navigate(z=${z}, frame_id='body', auto_arm=True)\n`;
    +	}
    +}
    +
    +Blockly.Python.land = function(block) {
    +	simpleOffboard();
    +
    +	if (block.getFieldValue('WAIT') == 'TRUE') {
    +		rosDefinitions.landWait = true;
    +		simpleOffboard();
    +
    +		return `land_wait()\n`;
    +	} else {
    +		return 'land()\n';
    +	}
    +}
    +
    +Blockly.Python.angle = function(block) {
    +	// return [block.getFieldValue('ANGLE'), Blockly.Python.ORDER_UNARY_SIGN];
    +	Blockly.Python.definitions_['import_math'] = 'import math';
    +	return [`math.radians(${block.getFieldValue('ANGLE')})`, Blockly.Python.ORDER_FUNCTION_CALL];
    +
    +}
    +
    +Blockly.Python.set_yaw = function(block) {
    +	simpleOffboard();
    +	let yaw = Blockly.Python.valueToCode(block, 'YAW', Blockly.Python.ORDER_NONE);
    +	let frameId = buildFrameId(block);
    +	let code = `navigate(x=float('nan'), y=float('nan'), z=float('nan'), yaw=${yaw}, frame_id=${frameId})\n`;
    +	if (block.getFieldValue('WAIT') == 'TRUE') {
    +		rosDefinitions.waitYaw = true;
    +		simpleOffboard();
    +		code += 'wait_yaw()\n';
    +	}
    +	return code;
    +}
    +
    +Blockly.Python.wait_arrival = function(block) {
    +	rosDefinitions.waitArrival = true;
    +	simpleOffboard();
    +	return 'wait_arrival()\n';
    +}
    +
    +Blockly.Python.get_time = function(block) {
    +	initNode();
    +	return ['rospy.get_time()', Blockly.Python.ORDER_FUNCTION_CALL];
    +}
    +
    +Blockly.Python.arrived = function(block) {
    +	rosDefinitions.arrived = true;
    +	simpleOffboard();
    +	return ['arrived()', Blockly.Python.ORDER_FUNCTION_CALL];
    +}
    +
    +Blockly.Python.wait = function(block) {
    +	initNode();
    +	return `rospy.sleep(${Blockly.Python.valueToCode(block, 'TIME', Blockly.Python.ORDER_NONE)})\n`;
    +}
    +
    +Blockly.Python.setpoint = function(block) {
    +	var type = block.getFieldValue('TYPE');
    +	let frameId = buildFrameId(block);
    +	let vx = Blockly.Python.valueToCode(block, 'VX', Blockly.Python.ORDER_NONE);
    +	let vy = Blockly.Python.valueToCode(block, 'VY', Blockly.Python.ORDER_NONE);
    +	let vz = Blockly.Python.valueToCode(block, 'VZ', Blockly.Python.ORDER_NONE);
    +	let yaw = Blockly.Python.valueToCode(block, 'YAW', Blockly.Python.ORDER_NONE);
    +	let pitch = Blockly.Python.valueToCode(block, 'PITCH', Blockly.Python.ORDER_NONE);
    +	let roll = Blockly.Python.valueToCode(block, 'ROLL', Blockly.Python.ORDER_NONE);
    +	let thrust = Blockly.Python.valueToCode(block, 'THRUST', Blockly.Python.ORDER_NONE);
    +
    +	if (type == 'VELOCITY') {
    +		rosDefinitions.setVelocity = true;
    +		simpleOffboard();
    +		return `set_velocity(vx=${vx}, vy=${vy}, vz=${vz}, frame_id=${frameId}, yaw=float('nan'))\n`;
    +	} else if (type == 'ATTITUDE') {
    +		rosDefinitions.setAttitude = true;
    +		simpleOffboard();
    +		return `set_attitude(pitch=${pitch}, roll=${roll}, yaw=${yaw}, thrust=${thrust}, frame_id=${frameId})\n`;
    +	} else if (type == 'RATES') {
    +		rosDefinitions.setRates = true;
    +		simpleOffboard();
    +		return `set_rate(pitch=${pitch}, roll=${roll}, yaw=${yaw}, thrust=${thrust})\n`;
    +	}
    +}
    +
    +Blockly.Python.get_position = function(block) {
    +	simpleOffboard();
    +	let frameId = buildFrameId(block);
    +	var code = `get_telemetry(${frameId}).${block.getFieldValue('FIELD').toLowerCase()}`;
    +	return [code, Blockly.Python.ORDER_FUNCTION_CALL];
    +}
    +
    +Blockly.Python.get_yaw = function(block) {
    +	simpleOffboard();
    +	Blockly.Python.definitions_['import_math'] = 'import math';
    +	let frameId = buildFrameId(block);
    +	var code = `math.degrees(get_telemetry(${frameId}).yaw)`;
    +	return [code, Blockly.Python.ORDER_FUNCTION_CALL];
    +}
    +
    +Blockly.Python.get_attitude = function(block) {
    +	simpleOffboard();
    +	Blockly.Python.definitions_['import_math'] = 'import math';
    +	var code = `math.degrees(get_telemetry().${block.getFieldValue('FIELD').toLowerCase()})`;
    +	return [code, Blockly.Python.ORDER_FUNCTION_CALL];
    +}
    +
    +Blockly.Python.distance = function(block) {
    +	rosDefinitions.distance = true;
    +	simpleOffboard();
    +
    +	let x = Blockly.Python.valueToCode(block, 'X', Blockly.Python.ORDER_NONE);
    +	let y = Blockly.Python.valueToCode(block, 'Y', Blockly.Python.ORDER_NONE);
    +	let z = Blockly.Python.valueToCode(block, 'Z', Blockly.Python.ORDER_NONE);
    +	let frameId = buildFrameId(block);
    +
    +	return [`get_distance(${x}, ${y}, ${z}, ${frameId})`, Blockly.Python.ORDER_FUNCTION_CALL]
    +}
    +
    +Blockly.Python.rangefinder_distance = function(block) {
    +	initNode();
    +	Blockly.Python.definitions_['import_range'] = 'from sensor_msgs.msg import Range';
    +	return [`rospy.wait_for_message('rangefinder/range', Range).range`, Blockly.Python.ORDER_FUNCTION_CALL]
    +}
    +
    +Blockly.Python.mode = function(block) {
    +	simpleOffboard();
    +	return [`get_telemetry().mode`, Blockly.Python.ORDER_FUNCTION_CALL]
    +}
    +
    +Blockly.Python.armed = function(block) {
    +	simpleOffboard();
    +	return [`get_telemetry().armed`, Blockly.Python.ORDER_FUNCTION_CALL]
    +}
    +
    +Blockly.Python.voltage = function(block) {
    +	simpleOffboard();
    +	var code = `get_telemetry().${block.getFieldValue('TYPE').toLowerCase()}`;
    +	return [code, Blockly.Python.ORDER_FUNCTION_CALL];
    +}
    +
    +function parseColor(color) {
    +	return {
    +		r: parseInt(color.substr(2, 2), 16),
    +		g: parseInt(color.substr(4, 2), 16),
    +		b: parseInt(color.substr(6, 2), 16)
    +	}
    +}
    +
    +const PARSE_COLOR = `def ${Blockly.Python.FUNCTION_NAME_PLACEHOLDER_}(color):
    +  return {'r': int(color[1:3], 16), 'g': int(color[3:5], 16), 'b': int(color[5:7], 16)}`;
    +
    +// TODO: weird code with colour_rgb block
    +Blockly.Python.set_effect = function(block) {
    +	rosDefinitions.setEffect = true;
    +	initNode();
    +
    +	var effect = block.getFieldValue('EFFECT').toLowerCase();
    +
    +	if (effect == 'rainbow' || effect == 'rainbow_fill') {
    +		return `set_effect(effect='${effect}')\n`;
    +	} else {
    +		let colorCode = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_NONE);
    +
    +		if (/^'(.*)'$/.test(colorCode)) { // is simple string
    +			let color = parseColor(colorCode);
    +			return `set_effect(effect='${effect}', r=${color.r}, g=${color.g}, b=${color.b})\n`;
    +		} else {
    +			let parseColor = Blockly.Python.provideFunction_('parse_color', [PARSE_COLOR]);
    +			return `set_effect(effect='${effect}', **${parseColor}(${colorCode}))\n`;
    +		}
    +	}
    +}
    +
    +Blockly.Python.set_led = function(block) {
    +	rosDefinitions.setLeds = true;
    +	initNode();
    +
    +	var index = Blockly.Python.valueToCode(block, 'INDEX', Blockly.Python.ORDER_NONE);
    +	var colorCode = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_NONE);
    +
    +	if (/^'(.*)'$/.test(colorCode)) { // is simple string
    +		let color = parseColor(colorCode);
    +		return `set_leds([LEDState(index=${index}, r=${color.r}, g=${color.g}, b=${color.b})])\n`;
    +	} else {
    +		let parseColor = Blockly.Python.provideFunction_('parse_color', [PARSE_COLOR]);
    +		return `set_leds([LEDState(index=${index}, **${parseColor}(${colorCode})])\n`;
    +	}
    +}
    +
    +function pigpio() {
    +	Blockly.Python.definitions_['import_pigpio'] = 'import pigpio';
    +	Blockly.Python.definitions_['init_pigpio'] = 'pi = pigpio.pi()';
    +}
    +
    +const GPIO_READ = `\ndef gpio_read(pin):
    +	pi.set_mode(pin, pigpio.INPUT)
    +	return pi.read(pin)\n`;
    +
    +const GPIO_WRITE = `\ndef gpio_write(pin, level):
    +	pi.set_mode(pin, pigpio.OUTPUT)
    +	pi.write(pin, level)\n`;
    +
    +const SET_SERVO = `\ndef set_servo(pin, pwm):
    +	pi.set_mode(pin, pigpio.OUTPUT)
    +	pi.set_servo_pulsewidth(pin, pwm)\n`;
    +
    +Blockly.Python.gpio_read = function(block) {
    +	pigpio();
    +	Blockly.Python.definitions_['gpio_read'] = GPIO_READ;
    +	var pin = Blockly.Python.valueToCode(block, 'PIN', Blockly.Python.ORDER_NONE);
    +	return [`gpio_read(${pin})`, Blockly.Python.ORDER_FUNCTION_CALL];
    +}
    +
    +Blockly.Python.gpio_write = function(block) {
    +	pigpio();
    +	Blockly.Python.definitions_['gpio_write'] = GPIO_WRITE;
    +	var pin = Blockly.Python.valueToCode(block, 'PIN', Blockly.Python.ORDER_NONE);
    +	var level = Blockly.Python.valueToCode(block, 'LEVEL', Blockly.Python.ORDER_NONE);
    +	return `gpio_write(${pin}, ${level})\n`;
    +}
    +
    +Blockly.Python.set_servo = function(block) {
    +	pigpio();
    +	Blockly.Python.definitions_['set_servo'] = SET_SERVO;
    +	var pin = Blockly.Python.valueToCode(block, 'PIN', Blockly.Python.ORDER_NONE);
    +	var pwm = Blockly.Python.valueToCode(block, 'PWM', Blockly.Python.ORDER_NONE);
    +	return `set_servo(${pin}, ${pwm})\n`;
    +}
    diff --git a/clover_blocks/www/ros.js b/clover_blocks/www/ros.js
    new file mode 100644
    index 000000000..313109f20
    --- /dev/null
    +++ b/clover_blocks/www/ros.js
    @@ -0,0 +1,59 @@
    +var url = 'ws://' + location.hostname + ':9090';
    +export var ros = new ROSLIB.Ros({ url });
    +
    +ros.on('connection', function () {
    +	console.log('connection')
    +	document.body.classList.add('connected');
    +});
    +
    +ros.on('close', function () {
    +	console.log('close')
    +	document.body.classList.remove('connected');
    +	setTimeout(function() {
    +		ros.connect(url);
    +	}, 2000);
    +});
    +
    +ros.on('error', function(err) {
    +});
    +
    +export const namespace = '/';
    +export const priv = namespace + 'clover_blocks/';
    +
    +export var params = {}; // parameters storage
    +
    +export function readParam(name, fromUrl, _default) {
    +	return new Promise(function(resolve, reject) {
    +		if (params[name] !== undefined) {
    +			resolve();
    +			return;
    +		}
    +		// read from url
    +		if (fromUrl && ((params[name] = new URL(window.location.href).searchParams.get(name)) !== null)) {
    +			resolve();
    +			return;
    +		}
    +		// read from ROS params
    +		new ROSLIB.Param({ ros: ros, name: priv + name }).get(function(val) {
    +			if (val === null) {
    +				if (_default === undefined) {
    +					alert('Cannot read required parameter ' + name);
    +					reject();
    +				} else {
    +					params[name] = _default;
    +					resolve();
    +				}
    +				return;
    +			}
    +			params[name] = val;
    +			resolve();
    +		})
    +	});
    +}
    +
    +
    +export var runService = new ROSLIB.Service({ ros: ros, name: priv + 'run', serviceType: 'clover_blocks/Run' });
    +export var stopService = new ROSLIB.Service({ ros: ros, name: priv + 'stop', serviceType: 'std_srvs/Trigger' });
    +export var loadService = new ROSLIB.Service({ ros: ros, name : priv + 'load', serviceType : 'clover_blocks/Load' });
    +export var storeService = new ROSLIB.Service({ ros: ros, name : priv + 'store', serviceType : 'clover_blocks/Store' });
    +export var landService = new ROSLIB.Service({ ros: ros, name : namespace + 'land', serviceType : 'std_srvs/Trigger' });
    diff --git a/clover_blocks/www/roslib.js b/clover_blocks/www/roslib.js
    new file mode 100644
    index 000000000..c8628ede7
    --- /dev/null
    +++ b/clover_blocks/www/roslib.js
    @@ -0,0 +1,4560 @@
    +(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i
    + *
    + * Permission is hereby granted, free of charge, to any person obtaining a copy
    + * of this software and associated documentation files (the "Software"), to deal
    + * in the Software without restriction, including without limitation the rights
    + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    + * copies of the Software, and to permit persons to whom the Software is
    + * furnished to do so, subject to the following conditions:
    + *
    + * The above copyright notice and this permission notice shall be included in all
    + * copies or substantial portions of the Software.
    + *
    + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    + * SOFTWARE.
    + */
    +
    +(function(global, undefined) { "use strict";
    +var POW_2_24 = Math.pow(2, -24),
    +    POW_2_32 = Math.pow(2, 32),
    +    POW_2_53 = Math.pow(2, 53);
    +
    +function encode(value) {
    +  var data = new ArrayBuffer(256);
    +  var dataView = new DataView(data);
    +  var lastLength;
    +  var offset = 0;
    +
    +  function ensureSpace(length) {
    +    var newByteLength = data.byteLength;
    +    var requiredLength = offset + length;
    +    while (newByteLength < requiredLength)
    +      newByteLength *= 2;
    +    if (newByteLength !== data.byteLength) {
    +      var oldDataView = dataView;
    +      data = new ArrayBuffer(newByteLength);
    +      dataView = new DataView(data);
    +      var uint32count = (offset + 3) >> 2;
    +      for (var i = 0; i < uint32count; ++i)
    +        dataView.setUint32(i * 4, oldDataView.getUint32(i * 4));
    +    }
    +
    +    lastLength = length;
    +    return dataView;
    +  }
    +  function write() {
    +    offset += lastLength;
    +  }
    +  function writeFloat64(value) {
    +    write(ensureSpace(8).setFloat64(offset, value));
    +  }
    +  function writeUint8(value) {
    +    write(ensureSpace(1).setUint8(offset, value));
    +  }
    +  function writeUint8Array(value) {
    +    var dataView = ensureSpace(value.length);
    +    for (var i = 0; i < value.length; ++i)
    +      dataView.setUint8(offset + i, value[i]);
    +    write();
    +  }
    +  function writeUint16(value) {
    +    write(ensureSpace(2).setUint16(offset, value));
    +  }
    +  function writeUint32(value) {
    +    write(ensureSpace(4).setUint32(offset, value));
    +  }
    +  function writeUint64(value) {
    +    var low = value % POW_2_32;
    +    var high = (value - low) / POW_2_32;
    +    var dataView = ensureSpace(8);
    +    dataView.setUint32(offset, high);
    +    dataView.setUint32(offset + 4, low);
    +    write();
    +  }
    +  function writeTypeAndLength(type, length) {
    +    if (length < 24) {
    +      writeUint8(type << 5 | length);
    +    } else if (length < 0x100) {
    +      writeUint8(type << 5 | 24);
    +      writeUint8(length);
    +    } else if (length < 0x10000) {
    +      writeUint8(type << 5 | 25);
    +      writeUint16(length);
    +    } else if (length < 0x100000000) {
    +      writeUint8(type << 5 | 26);
    +      writeUint32(length);
    +    } else {
    +      writeUint8(type << 5 | 27);
    +      writeUint64(length);
    +    }
    +  }
    +
    +  function encodeItem(value) {
    +    var i;
    +
    +    if (value === false)
    +      return writeUint8(0xf4);
    +    if (value === true)
    +      return writeUint8(0xf5);
    +    if (value === null)
    +      return writeUint8(0xf6);
    +    if (value === undefined)
    +      return writeUint8(0xf7);
    +
    +    switch (typeof value) {
    +      case "number":
    +        if (Math.floor(value) === value) {
    +          if (0 <= value && value <= POW_2_53)
    +            return writeTypeAndLength(0, value);
    +          if (-POW_2_53 <= value && value < 0)
    +            return writeTypeAndLength(1, -(value + 1));
    +        }
    +        writeUint8(0xfb);
    +        return writeFloat64(value);
    +
    +      case "string":
    +        var utf8data = [];
    +        for (i = 0; i < value.length; ++i) {
    +          var charCode = value.charCodeAt(i);
    +          if (charCode < 0x80) {
    +            utf8data.push(charCode);
    +          } else if (charCode < 0x800) {
    +            utf8data.push(0xc0 | charCode >> 6);
    +            utf8data.push(0x80 | charCode & 0x3f);
    +          } else if (charCode < 0xd800) {
    +            utf8data.push(0xe0 | charCode >> 12);
    +            utf8data.push(0x80 | (charCode >> 6)  & 0x3f);
    +            utf8data.push(0x80 | charCode & 0x3f);
    +          } else {
    +            charCode = (charCode & 0x3ff) << 10;
    +            charCode |= value.charCodeAt(++i) & 0x3ff;
    +            charCode += 0x10000;
    +
    +            utf8data.push(0xf0 | charCode >> 18);
    +            utf8data.push(0x80 | (charCode >> 12)  & 0x3f);
    +            utf8data.push(0x80 | (charCode >> 6)  & 0x3f);
    +            utf8data.push(0x80 | charCode & 0x3f);
    +          }
    +        }
    +
    +        writeTypeAndLength(3, utf8data.length);
    +        return writeUint8Array(utf8data);
    +
    +      default:
    +        var length;
    +        if (Array.isArray(value)) {
    +          length = value.length;
    +          writeTypeAndLength(4, length);
    +          for (i = 0; i < length; ++i)
    +            encodeItem(value[i]);
    +        } else if (value instanceof Uint8Array) {
    +          writeTypeAndLength(2, value.length);
    +          writeUint8Array(value);
    +        } else {
    +          var keys = Object.keys(value);
    +          length = keys.length;
    +          writeTypeAndLength(5, length);
    +          for (i = 0; i < length; ++i) {
    +            var key = keys[i];
    +            encodeItem(key);
    +            encodeItem(value[key]);
    +          }
    +        }
    +    }
    +  }
    +
    +  encodeItem(value);
    +
    +  if ("slice" in data)
    +    return data.slice(0, offset);
    +
    +  var ret = new ArrayBuffer(offset);
    +  var retView = new DataView(ret);
    +  for (var i = 0; i < offset; ++i)
    +    retView.setUint8(i, dataView.getUint8(i));
    +  return ret;
    +}
    +
    +function decode(data, tagger, simpleValue) {
    +  var dataView = new DataView(data);
    +  var offset = 0;
    +
    +  if (typeof tagger !== "function")
    +    tagger = function(value) { return value; };
    +  if (typeof simpleValue !== "function")
    +    simpleValue = function() { return undefined; };
    +
    +  function read(value, length) {
    +    offset += length;
    +    return value;
    +  }
    +  function readArrayBuffer(length) {
    +    return read(new Uint8Array(data, offset, length), length);
    +  }
    +  function readFloat16() {
    +    var tempArrayBuffer = new ArrayBuffer(4);
    +    var tempDataView = new DataView(tempArrayBuffer);
    +    var value = readUint16();
    +
    +    var sign = value & 0x8000;
    +    var exponent = value & 0x7c00;
    +    var fraction = value & 0x03ff;
    +
    +    if (exponent === 0x7c00)
    +      exponent = 0xff << 10;
    +    else if (exponent !== 0)
    +      exponent += (127 - 15) << 10;
    +    else if (fraction !== 0)
    +      return fraction * POW_2_24;
    +
    +    tempDataView.setUint32(0, sign << 16 | exponent << 13 | fraction << 13);
    +    return tempDataView.getFloat32(0);
    +  }
    +  function readFloat32() {
    +    return read(dataView.getFloat32(offset), 4);
    +  }
    +  function readFloat64() {
    +    return read(dataView.getFloat64(offset), 8);
    +  }
    +  function readUint8() {
    +    return read(dataView.getUint8(offset), 1);
    +  }
    +  function readUint16() {
    +    return read(dataView.getUint16(offset), 2);
    +  }
    +  function readUint32() {
    +    return read(dataView.getUint32(offset), 4);
    +  }
    +  function readUint64() {
    +    return readUint32() * POW_2_32 + readUint32();
    +  }
    +  function readBreak() {
    +    if (dataView.getUint8(offset) !== 0xff)
    +      return false;
    +    offset += 1;
    +    return true;
    +  }
    +  function readLength(additionalInformation) {
    +    if (additionalInformation < 24)
    +      return additionalInformation;
    +    if (additionalInformation === 24)
    +      return readUint8();
    +    if (additionalInformation === 25)
    +      return readUint16();
    +    if (additionalInformation === 26)
    +      return readUint32();
    +    if (additionalInformation === 27)
    +      return readUint64();
    +    if (additionalInformation === 31)
    +      return -1;
    +    throw "Invalid length encoding";
    +  }
    +  function readIndefiniteStringLength(majorType) {
    +    var initialByte = readUint8();
    +    if (initialByte === 0xff)
    +      return -1;
    +    var length = readLength(initialByte & 0x1f);
    +    if (length < 0 || (initialByte >> 5) !== majorType)
    +      throw "Invalid indefinite length element";
    +    return length;
    +  }
    +
    +  function appendUtf16data(utf16data, length) {
    +    for (var i = 0; i < length; ++i) {
    +      var value = readUint8();
    +      if (value & 0x80) {
    +        if (value < 0xe0) {
    +          value = (value & 0x1f) <<  6
    +                | (readUint8() & 0x3f);
    +          length -= 1;
    +        } else if (value < 0xf0) {
    +          value = (value & 0x0f) << 12
    +                | (readUint8() & 0x3f) << 6
    +                | (readUint8() & 0x3f);
    +          length -= 2;
    +        } else {
    +          value = (value & 0x0f) << 18
    +                | (readUint8() & 0x3f) << 12
    +                | (readUint8() & 0x3f) << 6
    +                | (readUint8() & 0x3f);
    +          length -= 3;
    +        }
    +      }
    +
    +      if (value < 0x10000) {
    +        utf16data.push(value);
    +      } else {
    +        value -= 0x10000;
    +        utf16data.push(0xd800 | (value >> 10));
    +        utf16data.push(0xdc00 | (value & 0x3ff));
    +      }
    +    }
    +  }
    +
    +  function decodeItem() {
    +    var initialByte = readUint8();
    +    var majorType = initialByte >> 5;
    +    var additionalInformation = initialByte & 0x1f;
    +    var i;
    +    var length;
    +
    +    if (majorType === 7) {
    +      switch (additionalInformation) {
    +        case 25:
    +          return readFloat16();
    +        case 26:
    +          return readFloat32();
    +        case 27:
    +          return readFloat64();
    +      }
    +    }
    +
    +    length = readLength(additionalInformation);
    +    if (length < 0 && (majorType < 2 || 6 < majorType))
    +      throw "Invalid length";
    +
    +    switch (majorType) {
    +      case 0:
    +        return length;
    +      case 1:
    +        return -1 - length;
    +      case 2:
    +        if (length < 0) {
    +          var elements = [];
    +          var fullArrayLength = 0;
    +          while ((length = readIndefiniteStringLength(majorType)) >= 0) {
    +            fullArrayLength += length;
    +            elements.push(readArrayBuffer(length));
    +          }
    +          var fullArray = new Uint8Array(fullArrayLength);
    +          var fullArrayOffset = 0;
    +          for (i = 0; i < elements.length; ++i) {
    +            fullArray.set(elements[i], fullArrayOffset);
    +            fullArrayOffset += elements[i].length;
    +          }
    +          return fullArray;
    +        }
    +        return readArrayBuffer(length);
    +      case 3:
    +        var utf16data = [];
    +        if (length < 0) {
    +          while ((length = readIndefiniteStringLength(majorType)) >= 0)
    +            appendUtf16data(utf16data, length);
    +        } else
    +          appendUtf16data(utf16data, length);
    +        return String.fromCharCode.apply(null, utf16data);
    +      case 4:
    +        var retArray;
    +        if (length < 0) {
    +          retArray = [];
    +          while (!readBreak())
    +            retArray.push(decodeItem());
    +        } else {
    +          retArray = new Array(length);
    +          for (i = 0; i < length; ++i)
    +            retArray[i] = decodeItem();
    +        }
    +        return retArray;
    +      case 5:
    +        var retObject = {};
    +        for (i = 0; i < length || length < 0 && !readBreak(); ++i) {
    +          var key = decodeItem();
    +          retObject[key] = decodeItem();
    +        }
    +        return retObject;
    +      case 6:
    +        return tagger(decodeItem(), length);
    +      case 7:
    +        switch (length) {
    +          case 20:
    +            return false;
    +          case 21:
    +            return true;
    +          case 22:
    +            return null;
    +          case 23:
    +            return undefined;
    +          default:
    +            return simpleValue(length);
    +        }
    +    }
    +  }
    +
    +  var ret = decodeItem();
    +  if (offset !== data.byteLength)
    +    throw "Remaining bytes";
    +  return ret;
    +}
    +
    +var obj = { encode: encode, decode: decode };
    +
    +if (typeof define === "function" && define.amd)
    +  define("cbor/cbor", obj);
    +else if (typeof module !== 'undefined' && module.exports)
    +  module.exports = obj;
    +else if (!global.CBOR)
    +  global.CBOR = obj;
    +
    +})(this);
    +
    +},{}],2:[function(require,module,exports){
    +(function (process){
    +/*!
    + * EventEmitter2
    + * https://github.com/hij1nx/EventEmitter2
    + *
    + * Copyright (c) 2013 hij1nx
    + * Licensed under the MIT license.
    + */
    +;!function(undefined) {
    +
    +  var isArray = Array.isArray ? Array.isArray : function _isArray(obj) {
    +    return Object.prototype.toString.call(obj) === "[object Array]";
    +  };
    +  var defaultMaxListeners = 10;
    +
    +  function init() {
    +    this._events = {};
    +    if (this._conf) {
    +      configure.call(this, this._conf);
    +    }
    +  }
    +
    +  function configure(conf) {
    +    if (conf) {
    +      this._conf = conf;
    +
    +      conf.delimiter && (this.delimiter = conf.delimiter);
    +      this._maxListeners = conf.maxListeners !== undefined ? conf.maxListeners : defaultMaxListeners;
    +
    +      conf.wildcard && (this.wildcard = conf.wildcard);
    +      conf.newListener && (this.newListener = conf.newListener);
    +      conf.verboseMemoryLeak && (this.verboseMemoryLeak = conf.verboseMemoryLeak);
    +
    +      if (this.wildcard) {
    +        this.listenerTree = {};
    +      }
    +    } else {
    +      this._maxListeners = defaultMaxListeners;
    +    }
    +  }
    +
    +  function logPossibleMemoryLeak(count, eventName) {
    +    var errorMsg = '(node) warning: possible EventEmitter memory ' +
    +        'leak detected. ' + count + ' listeners added. ' +
    +        'Use emitter.setMaxListeners() to increase limit.';
    +
    +    if(this.verboseMemoryLeak){
    +      errorMsg += ' Event name: ' + eventName + '.';
    +    }
    +
    +    if(typeof process !== 'undefined' && process.emitWarning){
    +      var e = new Error(errorMsg);
    +      e.name = 'MaxListenersExceededWarning';
    +      e.emitter = this;
    +      e.count = count;
    +      process.emitWarning(e);
    +    } else {
    +      console.error(errorMsg);
    +
    +      if (console.trace){
    +        console.trace();
    +      }
    +    }
    +  }
    +
    +  function EventEmitter(conf) {
    +    this._events = {};
    +    this.newListener = false;
    +    this.verboseMemoryLeak = false;
    +    configure.call(this, conf);
    +  }
    +  EventEmitter.EventEmitter2 = EventEmitter; // backwards compatibility for exporting EventEmitter property
    +
    +  //
    +  // Attention, function return type now is array, always !
    +  // It has zero elements if no any matches found and one or more
    +  // elements (leafs) if there are matches
    +  //
    +  function searchListenerTree(handlers, type, tree, i) {
    +    if (!tree) {
    +      return [];
    +    }
    +    var listeners=[], leaf, len, branch, xTree, xxTree, isolatedBranch, endReached,
    +        typeLength = type.length, currentType = type[i], nextType = type[i+1];
    +    if (i === typeLength && tree._listeners) {
    +      //
    +      // If at the end of the event(s) list and the tree has listeners
    +      // invoke those listeners.
    +      //
    +      if (typeof tree._listeners === 'function') {
    +        handlers && handlers.push(tree._listeners);
    +        return [tree];
    +      } else {
    +        for (leaf = 0, len = tree._listeners.length; leaf < len; leaf++) {
    +          handlers && handlers.push(tree._listeners[leaf]);
    +        }
    +        return [tree];
    +      }
    +    }
    +
    +    if ((currentType === '*' || currentType === '**') || tree[currentType]) {
    +      //
    +      // If the event emitted is '*' at this part
    +      // or there is a concrete match at this patch
    +      //
    +      if (currentType === '*') {
    +        for (branch in tree) {
    +          if (branch !== '_listeners' && tree.hasOwnProperty(branch)) {
    +            listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i+1));
    +          }
    +        }
    +        return listeners;
    +      } else if(currentType === '**') {
    +        endReached = (i+1 === typeLength || (i+2 === typeLength && nextType === '*'));
    +        if(endReached && tree._listeners) {
    +          // The next element has a _listeners, add it to the handlers.
    +          listeners = listeners.concat(searchListenerTree(handlers, type, tree, typeLength));
    +        }
    +
    +        for (branch in tree) {
    +          if (branch !== '_listeners' && tree.hasOwnProperty(branch)) {
    +            if(branch === '*' || branch === '**') {
    +              if(tree[branch]._listeners && !endReached) {
    +                listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], typeLength));
    +              }
    +              listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i));
    +            } else if(branch === nextType) {
    +              listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i+2));
    +            } else {
    +              // No match on this one, shift into the tree but not in the type array.
    +              listeners = listeners.concat(searchListenerTree(handlers, type, tree[branch], i));
    +            }
    +          }
    +        }
    +        return listeners;
    +      }
    +
    +      listeners = listeners.concat(searchListenerTree(handlers, type, tree[currentType], i+1));
    +    }
    +
    +    xTree = tree['*'];
    +    if (xTree) {
    +      //
    +      // If the listener tree will allow any match for this part,
    +      // then recursively explore all branches of the tree
    +      //
    +      searchListenerTree(handlers, type, xTree, i+1);
    +    }
    +
    +    xxTree = tree['**'];
    +    if(xxTree) {
    +      if(i < typeLength) {
    +        if(xxTree._listeners) {
    +          // If we have a listener on a '**', it will catch all, so add its handler.
    +          searchListenerTree(handlers, type, xxTree, typeLength);
    +        }
    +
    +        // Build arrays of matching next branches and others.
    +        for(branch in xxTree) {
    +          if(branch !== '_listeners' && xxTree.hasOwnProperty(branch)) {
    +            if(branch === nextType) {
    +              // We know the next element will match, so jump twice.
    +              searchListenerTree(handlers, type, xxTree[branch], i+2);
    +            } else if(branch === currentType) {
    +              // Current node matches, move into the tree.
    +              searchListenerTree(handlers, type, xxTree[branch], i+1);
    +            } else {
    +              isolatedBranch = {};
    +              isolatedBranch[branch] = xxTree[branch];
    +              searchListenerTree(handlers, type, { '**': isolatedBranch }, i+1);
    +            }
    +          }
    +        }
    +      } else if(xxTree._listeners) {
    +        // We have reached the end and still on a '**'
    +        searchListenerTree(handlers, type, xxTree, typeLength);
    +      } else if(xxTree['*'] && xxTree['*']._listeners) {
    +        searchListenerTree(handlers, type, xxTree['*'], typeLength);
    +      }
    +    }
    +
    +    return listeners;
    +  }
    +
    +  function growListenerTree(type, listener) {
    +
    +    type = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
    +
    +    //
    +    // Looks for two consecutive '**', if so, don't add the event at all.
    +    //
    +    for(var i = 0, len = type.length; i+1 < len; i++) {
    +      if(type[i] === '**' && type[i+1] === '**') {
    +        return;
    +      }
    +    }
    +
    +    var tree = this.listenerTree;
    +    var name = type.shift();
    +
    +    while (name !== undefined) {
    +
    +      if (!tree[name]) {
    +        tree[name] = {};
    +      }
    +
    +      tree = tree[name];
    +
    +      if (type.length === 0) {
    +
    +        if (!tree._listeners) {
    +          tree._listeners = listener;
    +        }
    +        else {
    +          if (typeof tree._listeners === 'function') {
    +            tree._listeners = [tree._listeners];
    +          }
    +
    +          tree._listeners.push(listener);
    +
    +          if (
    +            !tree._listeners.warned &&
    +            this._maxListeners > 0 &&
    +            tree._listeners.length > this._maxListeners
    +          ) {
    +            tree._listeners.warned = true;
    +            logPossibleMemoryLeak.call(this, tree._listeners.length, name);
    +          }
    +        }
    +        return true;
    +      }
    +      name = type.shift();
    +    }
    +    return true;
    +  }
    +
    +  // By default EventEmitters will print a warning if more than
    +  // 10 listeners are added to it. This is a useful default which
    +  // helps finding memory leaks.
    +  //
    +  // Obviously not all Emitters should be limited to 10. This function allows
    +  // that to be increased. Set to zero for unlimited.
    +
    +  EventEmitter.prototype.delimiter = '.';
    +
    +  EventEmitter.prototype.setMaxListeners = function(n) {
    +    if (n !== undefined) {
    +      this._maxListeners = n;
    +      if (!this._conf) this._conf = {};
    +      this._conf.maxListeners = n;
    +    }
    +  };
    +
    +  EventEmitter.prototype.event = '';
    +
    +
    +  EventEmitter.prototype.once = function(event, fn) {
    +    return this._once(event, fn, false);
    +  };
    +
    +  EventEmitter.prototype.prependOnceListener = function(event, fn) {
    +    return this._once(event, fn, true);
    +  };
    +
    +  EventEmitter.prototype._once = function(event, fn, prepend) {
    +    this._many(event, 1, fn, prepend);
    +    return this;
    +  };
    +
    +  EventEmitter.prototype.many = function(event, ttl, fn) {
    +    return this._many(event, ttl, fn, false);
    +  }
    +
    +  EventEmitter.prototype.prependMany = function(event, ttl, fn) {
    +    return this._many(event, ttl, fn, true);
    +  }
    +
    +  EventEmitter.prototype._many = function(event, ttl, fn, prepend) {
    +    var self = this;
    +
    +    if (typeof fn !== 'function') {
    +      throw new Error('many only accepts instances of Function');
    +    }
    +
    +    function listener() {
    +      if (--ttl === 0) {
    +        self.off(event, listener);
    +      }
    +      return fn.apply(this, arguments);
    +    }
    +
    +    listener._origin = fn;
    +
    +    this._on(event, listener, prepend);
    +
    +    return self;
    +  };
    +
    +  EventEmitter.prototype.emit = function() {
    +
    +    this._events || init.call(this);
    +
    +    var type = arguments[0];
    +
    +    if (type === 'newListener' && !this.newListener) {
    +      if (!this._events.newListener) {
    +        return false;
    +      }
    +    }
    +
    +    var al = arguments.length;
    +    var args,l,i,j;
    +    var handler;
    +
    +    if (this._all && this._all.length) {
    +      handler = this._all.slice();
    +      if (al > 3) {
    +        args = new Array(al);
    +        for (j = 0; j < al; j++) args[j] = arguments[j];
    +      }
    +
    +      for (i = 0, l = handler.length; i < l; i++) {
    +        this.event = type;
    +        switch (al) {
    +        case 1:
    +          handler[i].call(this, type);
    +          break;
    +        case 2:
    +          handler[i].call(this, type, arguments[1]);
    +          break;
    +        case 3:
    +          handler[i].call(this, type, arguments[1], arguments[2]);
    +          break;
    +        default:
    +          handler[i].apply(this, args);
    +        }
    +      }
    +    }
    +
    +    if (this.wildcard) {
    +      handler = [];
    +      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
    +      searchListenerTree.call(this, handler, ns, this.listenerTree, 0);
    +    } else {
    +      handler = this._events[type];
    +      if (typeof handler === 'function') {
    +        this.event = type;
    +        switch (al) {
    +        case 1:
    +          handler.call(this);
    +          break;
    +        case 2:
    +          handler.call(this, arguments[1]);
    +          break;
    +        case 3:
    +          handler.call(this, arguments[1], arguments[2]);
    +          break;
    +        default:
    +          args = new Array(al - 1);
    +          for (j = 1; j < al; j++) args[j - 1] = arguments[j];
    +          handler.apply(this, args);
    +        }
    +        return true;
    +      } else if (handler) {
    +        // need to make copy of handlers because list can change in the middle
    +        // of emit call
    +        handler = handler.slice();
    +      }
    +    }
    +
    +    if (handler && handler.length) {
    +      if (al > 3) {
    +        args = new Array(al - 1);
    +        for (j = 1; j < al; j++) args[j - 1] = arguments[j];
    +      }
    +      for (i = 0, l = handler.length; i < l; i++) {
    +        this.event = type;
    +        switch (al) {
    +        case 1:
    +          handler[i].call(this);
    +          break;
    +        case 2:
    +          handler[i].call(this, arguments[1]);
    +          break;
    +        case 3:
    +          handler[i].call(this, arguments[1], arguments[2]);
    +          break;
    +        default:
    +          handler[i].apply(this, args);
    +        }
    +      }
    +      return true;
    +    } else if (!this._all && type === 'error') {
    +      if (arguments[1] instanceof Error) {
    +        throw arguments[1]; // Unhandled 'error' event
    +      } else {
    +        throw new Error("Uncaught, unspecified 'error' event.");
    +      }
    +      return false;
    +    }
    +
    +    return !!this._all;
    +  };
    +
    +  EventEmitter.prototype.emitAsync = function() {
    +
    +    this._events || init.call(this);
    +
    +    var type = arguments[0];
    +
    +    if (type === 'newListener' && !this.newListener) {
    +        if (!this._events.newListener) { return Promise.resolve([false]); }
    +    }
    +
    +    var promises= [];
    +
    +    var al = arguments.length;
    +    var args,l,i,j;
    +    var handler;
    +
    +    if (this._all) {
    +      if (al > 3) {
    +        args = new Array(al);
    +        for (j = 1; j < al; j++) args[j] = arguments[j];
    +      }
    +      for (i = 0, l = this._all.length; i < l; i++) {
    +        this.event = type;
    +        switch (al) {
    +        case 1:
    +          promises.push(this._all[i].call(this, type));
    +          break;
    +        case 2:
    +          promises.push(this._all[i].call(this, type, arguments[1]));
    +          break;
    +        case 3:
    +          promises.push(this._all[i].call(this, type, arguments[1], arguments[2]));
    +          break;
    +        default:
    +          promises.push(this._all[i].apply(this, args));
    +        }
    +      }
    +    }
    +
    +    if (this.wildcard) {
    +      handler = [];
    +      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
    +      searchListenerTree.call(this, handler, ns, this.listenerTree, 0);
    +    } else {
    +      handler = this._events[type];
    +    }
    +
    +    if (typeof handler === 'function') {
    +      this.event = type;
    +      switch (al) {
    +      case 1:
    +        promises.push(handler.call(this));
    +        break;
    +      case 2:
    +        promises.push(handler.call(this, arguments[1]));
    +        break;
    +      case 3:
    +        promises.push(handler.call(this, arguments[1], arguments[2]));
    +        break;
    +      default:
    +        args = new Array(al - 1);
    +        for (j = 1; j < al; j++) args[j - 1] = arguments[j];
    +        promises.push(handler.apply(this, args));
    +      }
    +    } else if (handler && handler.length) {
    +      handler = handler.slice();
    +      if (al > 3) {
    +        args = new Array(al - 1);
    +        for (j = 1; j < al; j++) args[j - 1] = arguments[j];
    +      }
    +      for (i = 0, l = handler.length; i < l; i++) {
    +        this.event = type;
    +        switch (al) {
    +        case 1:
    +          promises.push(handler[i].call(this));
    +          break;
    +        case 2:
    +          promises.push(handler[i].call(this, arguments[1]));
    +          break;
    +        case 3:
    +          promises.push(handler[i].call(this, arguments[1], arguments[2]));
    +          break;
    +        default:
    +          promises.push(handler[i].apply(this, args));
    +        }
    +      }
    +    } else if (!this._all && type === 'error') {
    +      if (arguments[1] instanceof Error) {
    +        return Promise.reject(arguments[1]); // Unhandled 'error' event
    +      } else {
    +        return Promise.reject("Uncaught, unspecified 'error' event.");
    +      }
    +    }
    +
    +    return Promise.all(promises);
    +  };
    +
    +  EventEmitter.prototype.on = function(type, listener) {
    +    return this._on(type, listener, false);
    +  };
    +
    +  EventEmitter.prototype.prependListener = function(type, listener) {
    +    return this._on(type, listener, true);
    +  };
    +
    +  EventEmitter.prototype.onAny = function(fn) {
    +    return this._onAny(fn, false);
    +  };
    +
    +  EventEmitter.prototype.prependAny = function(fn) {
    +    return this._onAny(fn, true);
    +  };
    +
    +  EventEmitter.prototype.addListener = EventEmitter.prototype.on;
    +
    +  EventEmitter.prototype._onAny = function(fn, prepend){
    +    if (typeof fn !== 'function') {
    +      throw new Error('onAny only accepts instances of Function');
    +    }
    +
    +    if (!this._all) {
    +      this._all = [];
    +    }
    +
    +    // Add the function to the event listener collection.
    +    if(prepend){
    +      this._all.unshift(fn);
    +    }else{
    +      this._all.push(fn);
    +    }
    +
    +    return this;
    +  }
    +
    +  EventEmitter.prototype._on = function(type, listener, prepend) {
    +    if (typeof type === 'function') {
    +      this._onAny(type, listener);
    +      return this;
    +    }
    +
    +    if (typeof listener !== 'function') {
    +      throw new Error('on only accepts instances of Function');
    +    }
    +    this._events || init.call(this);
    +
    +    // To avoid recursion in the case that type == "newListeners"! Before
    +    // adding it to the listeners, first emit "newListeners".
    +    this.emit('newListener', type, listener);
    +
    +    if (this.wildcard) {
    +      growListenerTree.call(this, type, listener);
    +      return this;
    +    }
    +
    +    if (!this._events[type]) {
    +      // Optimize the case of one listener. Don't need the extra array object.
    +      this._events[type] = listener;
    +    }
    +    else {
    +      if (typeof this._events[type] === 'function') {
    +        // Change to array.
    +        this._events[type] = [this._events[type]];
    +      }
    +
    +      // If we've already got an array, just add
    +      if(prepend){
    +        this._events[type].unshift(listener);
    +      }else{
    +        this._events[type].push(listener);
    +      }
    +
    +      // Check for listener leak
    +      if (
    +        !this._events[type].warned &&
    +        this._maxListeners > 0 &&
    +        this._events[type].length > this._maxListeners
    +      ) {
    +        this._events[type].warned = true;
    +        logPossibleMemoryLeak.call(this, this._events[type].length, type);
    +      }
    +    }
    +
    +    return this;
    +  }
    +
    +  EventEmitter.prototype.off = function(type, listener) {
    +    if (typeof listener !== 'function') {
    +      throw new Error('removeListener only takes instances of Function');
    +    }
    +
    +    var handlers,leafs=[];
    +
    +    if(this.wildcard) {
    +      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
    +      leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);
    +    }
    +    else {
    +      // does not use listeners(), so no side effect of creating _events[type]
    +      if (!this._events[type]) return this;
    +      handlers = this._events[type];
    +      leafs.push({_listeners:handlers});
    +    }
    +
    +    for (var iLeaf=0; iLeaf 0) {
    +          recursivelyGarbageCollect(root[key]);
    +        }
    +        if (Object.keys(obj).length === 0) {
    +          delete root[key];
    +        }
    +      }
    +    }
    +    recursivelyGarbageCollect(this.listenerTree);
    +
    +    return this;
    +  };
    +
    +  EventEmitter.prototype.offAny = function(fn) {
    +    var i = 0, l = 0, fns;
    +    if (fn && this._all && this._all.length > 0) {
    +      fns = this._all;
    +      for(i = 0, l = fns.length; i < l; i++) {
    +        if(fn === fns[i]) {
    +          fns.splice(i, 1);
    +          this.emit("removeListenerAny", fn);
    +          return this;
    +        }
    +      }
    +    } else {
    +      fns = this._all;
    +      for(i = 0, l = fns.length; i < l; i++)
    +        this.emit("removeListenerAny", fns[i]);
    +      this._all = [];
    +    }
    +    return this;
    +  };
    +
    +  EventEmitter.prototype.removeListener = EventEmitter.prototype.off;
    +
    +  EventEmitter.prototype.removeAllListeners = function(type) {
    +    if (arguments.length === 0) {
    +      !this._events || init.call(this);
    +      return this;
    +    }
    +
    +    if (this.wildcard) {
    +      var ns = typeof type === 'string' ? type.split(this.delimiter) : type.slice();
    +      var leafs = searchListenerTree.call(this, null, ns, this.listenerTree, 0);
    +
    +      for (var iLeaf=0; iLeaf 1) {
    +        for (var i = 1; i < arguments.length; i++) {
    +            args[i - 1] = arguments[i];
    +        }
    +    }
    +    queue.push(new Item(fun, args));
    +    if (queue.length === 1 && !draining) {
    +        runTimeout(drainQueue);
    +    }
    +};
    +
    +// v8 likes predictible objects
    +function Item(fun, array) {
    +    this.fun = fun;
    +    this.array = array;
    +}
    +Item.prototype.run = function () {
    +    this.fun.apply(null, this.array);
    +};
    +process.title = 'browser';
    +process.browser = true;
    +process.env = {};
    +process.argv = [];
    +process.version = ''; // empty string to avoid regexp issues
    +process.versions = {};
    +
    +function noop() {}
    +
    +process.on = noop;
    +process.addListener = noop;
    +process.once = noop;
    +process.off = noop;
    +process.removeListener = noop;
    +process.removeAllListeners = noop;
    +process.emit = noop;
    +process.prependListener = noop;
    +process.prependOnceListener = noop;
    +
    +process.listeners = function (name) { return [] }
    +
    +process.binding = function (name) {
    +    throw new Error('process.binding is not supported');
    +};
    +
    +process.cwd = function () { return '/' };
    +process.chdir = function (dir) {
    +    throw new Error('process.chdir is not supported');
    +};
    +process.umask = function() { return 0; };
    +
    +},{}],5:[function(require,module,exports){
    +/**
    + * @fileOverview
    + * @author Russell Toris - rctoris@wpi.edu
    + */
    +
    +/**
    + * If you use roslib in a browser, all the classes will be exported to a global variable called ROSLIB.
    + *
    + * If you use nodejs, this is the variable you get when you require('roslib')
    + */
    +var ROSLIB = this.ROSLIB || {
    +  REVISION : '1.0.1'
    +};
    +
    +var assign = require('object-assign');
    +
    +// Add core components
    +assign(ROSLIB, require('./core'));
    +
    +assign(ROSLIB, require('./actionlib'));
    +
    +assign(ROSLIB, require('./math'));
    +
    +assign(ROSLIB, require('./tf'));
    +
    +assign(ROSLIB, require('./urdf'));
    +
    +module.exports = ROSLIB;
    +
    +},{"./actionlib":11,"./core":20,"./math":25,"./tf":28,"./urdf":40,"object-assign":3}],6:[function(require,module,exports){
    +(function (global){
    +global.ROSLIB = require('./RosLib');
    +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
    +},{"./RosLib":5}],7:[function(require,module,exports){
    +/**
    + * @fileOverview
    + * @author Russell Toris - rctoris@wpi.edu
    + */
    +
    +var Topic = require('../core/Topic');
    +var Message = require('../core/Message');
    +var EventEmitter2 = require('eventemitter2').EventEmitter2;
    +
    +/**
    + * An actionlib action client.
    + *
    + * Emits the following events:
    + *  * 'timeout' - if a timeout occurred while sending a goal
    + *  * 'status' - the status messages received from the action server
    + *  * 'feedback' -  the feedback messages received from the action server
    + *  * 'result' - the result returned from the action server
    + *
    + *  @constructor
    + *  @param options - object with following keys:
    + *   * ros - the ROSLIB.Ros connection handle
    + *   * serverName - the action server name, like /fibonacci
    + *   * actionName - the action message name, like 'actionlib_tutorials/FibonacciAction'
    + *   * timeout - the timeout length when connecting to the action server
    + */
    +function ActionClient(options) {
    +  var that = this;
    +  options = options || {};
    +  this.ros = options.ros;
    +  this.serverName = options.serverName;
    +  this.actionName = options.actionName;
    +  this.timeout = options.timeout;
    +  this.omitFeedback = options.omitFeedback;
    +  this.omitStatus = options.omitStatus;
    +  this.omitResult = options.omitResult;
    +  this.goals = {};
    +
    +  // flag to check if a status has been received
    +  var receivedStatus = false;
    +
    +  // create the topics associated with actionlib
    +  this.feedbackListener = new Topic({
    +    ros : this.ros,
    +    name : this.serverName + '/feedback',
    +    messageType : this.actionName + 'Feedback'
    +  });
    +
    +  this.statusListener = new Topic({
    +    ros : this.ros,
    +    name : this.serverName + '/status',
    +    messageType : 'actionlib_msgs/GoalStatusArray'
    +  });
    +
    +  this.resultListener = new Topic({
    +    ros : this.ros,
    +    name : this.serverName + '/result',
    +    messageType : this.actionName + 'Result'
    +  });
    +
    +  this.goalTopic = new Topic({
    +    ros : this.ros,
    +    name : this.serverName + '/goal',
    +    messageType : this.actionName + 'Goal'
    +  });
    +
    +  this.cancelTopic = new Topic({
    +    ros : this.ros,
    +    name : this.serverName + '/cancel',
    +    messageType : 'actionlib_msgs/GoalID'
    +  });
    +
    +  // advertise the goal and cancel topics
    +  this.goalTopic.advertise();
    +  this.cancelTopic.advertise();
    +
    +  // subscribe to the status topic
    +  if (!this.omitStatus) {
    +    this.statusListener.subscribe(function(statusMessage) {
    +      receivedStatus = true;
    +      statusMessage.status_list.forEach(function(status) {
    +        var goal = that.goals[status.goal_id.id];
    +        if (goal) {
    +          goal.emit('status', status);
    +        }
    +      });
    +    });
    +  }
    +
    +  // subscribe the the feedback topic
    +  if (!this.omitFeedback) {
    +    this.feedbackListener.subscribe(function(feedbackMessage) {
    +      var goal = that.goals[feedbackMessage.status.goal_id.id];
    +      if (goal) {
    +        goal.emit('status', feedbackMessage.status);
    +        goal.emit('feedback', feedbackMessage.feedback);
    +      }
    +    });
    +  }
    +
    +  // subscribe to the result topic
    +  if (!this.omitResult) {
    +    this.resultListener.subscribe(function(resultMessage) {
    +      var goal = that.goals[resultMessage.status.goal_id.id];
    +
    +      if (goal) {
    +        goal.emit('status', resultMessage.status);
    +        goal.emit('result', resultMessage.result);
    +      }
    +    });
    +  }
    +
    +  // If timeout specified, emit a 'timeout' event if the action server does not respond
    +  if (this.timeout) {
    +    setTimeout(function() {
    +      if (!receivedStatus) {
    +        that.emit('timeout');
    +      }
    +    }, this.timeout);
    +  }
    +}
    +
    +ActionClient.prototype.__proto__ = EventEmitter2.prototype;
    +
    +/**
    + * Cancel all goals associated with this ActionClient.
    + */
    +ActionClient.prototype.cancel = function() {
    +  var cancelMessage = new Message();
    +  this.cancelTopic.publish(cancelMessage);
    +};
    +
    +/**
    + * Unsubscribe and unadvertise all topics associated with this ActionClient.
    + */
    +ActionClient.prototype.dispose = function() {
    +  this.goalTopic.unadvertise();
    +  this.cancelTopic.unadvertise();
    +  if (!this.omitStatus) {this.statusListener.unsubscribe();}
    +  if (!this.omitFeedback) {this.feedbackListener.unsubscribe();}
    +  if (!this.omitResult) {this.resultListener.unsubscribe();}
    +};
    +
    +module.exports = ActionClient;
    +
    +},{"../core/Message":12,"../core/Topic":19,"eventemitter2":2}],8:[function(require,module,exports){
    +/**
    + * @fileOverview
    + * @author Justin Young - justin@oodar.com.au
    + * @author Russell Toris - rctoris@wpi.edu
    + */
    +
    +var Topic = require('../core/Topic');
    +var Message = require('../core/Message');
    +var EventEmitter2 = require('eventemitter2').EventEmitter2;
    +
    +/**
    + * An actionlib action listener
    + *
    + * Emits the following events:
    + *  * 'status' - the status messages received from the action server
    + *  * 'feedback' -  the feedback messages received from the action server
    + *  * 'result' - the result returned from the action server
    + *
    + *  @constructor
    + *  @param options - object with following keys:
    + *   * ros - the ROSLIB.Ros connection handle
    + *   * serverName - the action server name, like /fibonacci
    + *   * actionName - the action message name, like 'actionlib_tutorials/FibonacciAction'
    + */
    +function ActionListener(options) {
    +  var that = this;
    +  options = options || {};
    +  this.ros = options.ros;
    +  this.serverName = options.serverName;
    +  this.actionName = options.actionName;
    +  this.timeout = options.timeout;
    +  this.omitFeedback = options.omitFeedback;
    +  this.omitStatus = options.omitStatus;
    +  this.omitResult = options.omitResult;
    +
    +
    +  // create the topics associated with actionlib
    +  var goalListener = new Topic({
    +    ros : this.ros,
    +    name : this.serverName + '/goal',
    +    messageType : this.actionName + 'Goal'
    +  });
    +
    +  var feedbackListener = new Topic({
    +    ros : this.ros,
    +    name : this.serverName + '/feedback',
    +    messageType : this.actionName + 'Feedback'
    +  });
    +
    +  var statusListener = new Topic({
    +    ros : this.ros,
    +    name : this.serverName + '/status',
    +    messageType : 'actionlib_msgs/GoalStatusArray'
    +  });
    +
    +  var resultListener = new Topic({
    +    ros : this.ros,
    +    name : this.serverName + '/result',
    +    messageType : this.actionName + 'Result'
    +  });
    +
    +  goalListener.subscribe(function(goalMessage) {
    +      that.emit('goal', goalMessage);
    +  });
    +
    +  statusListener.subscribe(function(statusMessage) {
    +      statusMessage.status_list.forEach(function(status) {
    +          that.emit('status', status);
    +      });
    +  });
    +
    +  feedbackListener.subscribe(function(feedbackMessage) {
    +      that.emit('status', feedbackMessage.status);
    +      that.emit('feedback', feedbackMessage.feedback);
    +  });
    +
    +  // subscribe to the result topic
    +  resultListener.subscribe(function(resultMessage) {
    +      that.emit('status', resultMessage.status);
    +      that.emit('result', resultMessage.result);
    +  });
    +
    +}
    +
    +ActionListener.prototype.__proto__ = EventEmitter2.prototype;
    +
    +module.exports = ActionListener;
    +
    +},{"../core/Message":12,"../core/Topic":19,"eventemitter2":2}],9:[function(require,module,exports){
    +/**
    + * @fileOverview
    + * @author Russell Toris - rctoris@wpi.edu
    + */
    +
    +var Message = require('../core/Message');
    +var EventEmitter2 = require('eventemitter2').EventEmitter2;
    +
    +/**
    + * An actionlib goal goal is associated with an action server.
    + *
    + * Emits the following events:
    + *  * 'timeout' - if a timeout occurred while sending a goal
    + *
    + *  @constructor
    + *  @param object with following keys:
    + *   * actionClient - the ROSLIB.ActionClient to use with this goal
    + *   * goalMessage - The JSON object containing the goal for the action server
    + */
    +function Goal(options) {
    +  var that = this;
    +  this.actionClient = options.actionClient;
    +  this.goalMessage = options.goalMessage;
    +  this.isFinished = false;
    +
    +  // Used to create random IDs
    +  var date = new Date();
    +
    +  // Create a random ID
    +  this.goalID = 'goal_' + Math.random() + '_' + date.getTime();
    +  // Fill in the goal message
    +  this.goalMessage = new Message({
    +    goal_id : {
    +      stamp : {
    +        secs : 0,
    +        nsecs : 0
    +      },
    +      id : this.goalID
    +    },
    +    goal : this.goalMessage
    +  });
    +
    +  this.on('status', function(status) {
    +    that.status = status;
    +  });
    +
    +  this.on('result', function(result) {
    +    that.isFinished = true;
    +    that.result = result;
    +  });
    +
    +  this.on('feedback', function(feedback) {
    +    that.feedback = feedback;
    +  });
    +
    +  // Add the goal
    +  this.actionClient.goals[this.goalID] = this;
    +}
    +
    +Goal.prototype.__proto__ = EventEmitter2.prototype;
    +
    +/**
    + * Send the goal to the action server.
    + *
    + * @param timeout (optional) - a timeout length for the goal's result
    + */
    +Goal.prototype.send = function(timeout) {
    +  var that = this;
    +  that.actionClient.goalTopic.publish(that.goalMessage);
    +  if (timeout) {
    +    setTimeout(function() {
    +      if (!that.isFinished) {
    +        that.emit('timeout');
    +      }
    +    }, timeout);
    +  }
    +};
    +
    +/**
    + * Cancel the current goal.
    + */
    +Goal.prototype.cancel = function() {
    +  var cancelMessage = new Message({
    +    id : this.goalID
    +  });
    +  this.actionClient.cancelTopic.publish(cancelMessage);
    +};
    +
    +module.exports = Goal;
    +},{"../core/Message":12,"eventemitter2":2}],10:[function(require,module,exports){
    +/**
    + * @fileOverview
    + * @author Laura Lindzey - lindzey@gmail.com
    + */
    +
    +var Topic = require('../core/Topic');
    +var Message = require('../core/Message');
    +var EventEmitter2 = require('eventemitter2').EventEmitter2;
    +
    +/**
    + * An actionlib action server client.
    + *
    + * Emits the following events:
    + *  * 'goal' - goal sent by action client
    + *  * 'cancel' - action client has canceled the request
    + *
    + *  @constructor
    + *  @param options - object with following keys:
    + *   * ros - the ROSLIB.Ros connection handle
    + *   * serverName - the action server name, like /fibonacci
    + *   * actionName - the action message name, like 'actionlib_tutorials/FibonacciAction'
    + */
    +
    +function SimpleActionServer(options) {
    +    var that = this;
    +    options = options || {};
    +    this.ros = options.ros;
    +    this.serverName = options.serverName;
    +    this.actionName = options.actionName;
    +
    +    // create and advertise publishers
    +    this.feedbackPublisher = new Topic({
    +        ros : this.ros,
    +        name : this.serverName + '/feedback',
    +        messageType : this.actionName + 'Feedback'
    +    });
    +    this.feedbackPublisher.advertise();
    +
    +    var statusPublisher = new Topic({
    +        ros : this.ros,
    +        name : this.serverName + '/status',
    +        messageType : 'actionlib_msgs/GoalStatusArray'
    +    });
    +    statusPublisher.advertise();
    +
    +    this.resultPublisher = new Topic({
    +        ros : this.ros,
    +        name : this.serverName + '/result',
    +        messageType : this.actionName + 'Result'
    +    });
    +    this.resultPublisher.advertise();
    +
    +    // create and subscribe to listeners
    +    var goalListener = new Topic({
    +        ros : this.ros,
    +        name : this.serverName + '/goal',
    +        messageType : this.actionName + 'Goal'
    +    });
    +
    +    var cancelListener = new Topic({
    +        ros : this.ros,
    +        name : this.serverName + '/cancel',
    +        messageType : 'actionlib_msgs/GoalID'
    +    });
    +
    +    // Track the goals and their status in order to publish status...
    +    this.statusMessage = new Message({
    +        header : {
    +            stamp : {secs : 0, nsecs : 100},
    +            frame_id : ''
    +        },
    +        status_list : []
    +    });
    +
    +    // needed for handling preemption prompted by a new goal being received
    +    this.currentGoal = null; // currently tracked goal
    +    this.nextGoal = null; // the one that'll be preempting
    +
    +    goalListener.subscribe(function(goalMessage) {
    +
    +    if(that.currentGoal) {
    +            that.nextGoal = goalMessage;
    +            // needs to happen AFTER rest is set up
    +            that.emit('cancel');
    +    } else {
    +            that.statusMessage.status_list = [{goal_id : goalMessage.goal_id, status : 1}];
    +            that.currentGoal = goalMessage;
    +            that.emit('goal', goalMessage.goal);
    +    }
    +    });
    +
    +    // helper function for determing ordering of timestamps
    +    // returns t1 < t2
    +    var isEarlier = function(t1, t2) {
    +        if(t1.secs > t2.secs) {
    +            return false;
    +        } else if(t1.secs < t2.secs) {
    +            return true;
    +        } else if(t1.nsecs < t2.nsecs) {
    +            return true;
    +        } else {
    +            return false;
    +        }
    +    };
    +
    +    // TODO: this may be more complicated than necessary, since I'm
    +    // not sure if the callbacks can ever wind up with a scenario
    +    // where we've been preempted by a next goal, it hasn't finished
    +    // processing, and then we get a cancel message
    +    cancelListener.subscribe(function(cancelMessage) {
    +
    +        // cancel ALL goals if both empty
    +        if(cancelMessage.stamp.secs === 0 && cancelMessage.stamp.secs === 0 && cancelMessage.id === '') {
    +            that.nextGoal = null;
    +            if(that.currentGoal) {
    +                that.emit('cancel');
    +            }
    +        } else { // treat id and stamp independently
    +            if(that.currentGoal && cancelMessage.id === that.currentGoal.goal_id.id) {
    +                that.emit('cancel');
    +            } else if(that.nextGoal && cancelMessage.id === that.nextGoal.goal_id.id) {
    +                that.nextGoal = null;
    +            }
    +
    +            if(that.nextGoal && isEarlier(that.nextGoal.goal_id.stamp,
    +                                          cancelMessage.stamp)) {
    +                that.nextGoal = null;
    +            }
    +            if(that.currentGoal && isEarlier(that.currentGoal.goal_id.stamp,
    +                                             cancelMessage.stamp)) {
    +
    +                that.emit('cancel');
    +            }
    +        }
    +    });
    +
    +    // publish status at pseudo-fixed rate; required for clients to know they've connected
    +    var statusInterval = setInterval( function() {
    +        var currentTime = new Date();
    +        var secs = Math.floor(currentTime.getTime()/1000);
    +        var nsecs = Math.round(1000000000*(currentTime.getTime()/1000-secs));
    +        that.statusMessage.header.stamp.secs = secs;
    +        that.statusMessage.header.stamp.nsecs = nsecs;
    +        statusPublisher.publish(that.statusMessage);
    +    }, 500); // publish every 500ms
    +
    +}
    +
    +SimpleActionServer.prototype.__proto__ = EventEmitter2.prototype;
    +
    +/**
    +*  Set action state to succeeded and return to client
    +*/
    +
    +SimpleActionServer.prototype.setSucceeded = function(result2) {
    +
    +
    +    var resultMessage = new Message({
    +        status : {goal_id : this.currentGoal.goal_id, status : 3},
    +        result : result2
    +    });
    +    this.resultPublisher.publish(resultMessage);
    +
    +    this.statusMessage.status_list = [];
    +    if(this.nextGoal) {
    +        this.currentGoal = this.nextGoal;
    +        this.nextGoal = null;
    +        this.emit('goal', this.currentGoal.goal);
    +    } else {
    +        this.currentGoal = null;
    +    }
    +};
    +
    +/**
    +*  Function to send feedback
    +*/
    +
    +SimpleActionServer.prototype.sendFeedback = function(feedback2) {
    +
    +    var feedbackMessage = new Message({
    +        status : {goal_id : this.currentGoal.goal_id, status : 1},
    +        feedback : feedback2
    +    });
    +    this.feedbackPublisher.publish(feedbackMessage);
    +};
    +
    +/**
    +*  Handle case where client requests preemption
    +*/
    +
    +SimpleActionServer.prototype.setPreempted = function() {
    +
    +    this.statusMessage.status_list = [];
    +    var resultMessage = new Message({
    +        status : {goal_id : this.currentGoal.goal_id, status : 2},
    +    });
    +    this.resultPublisher.publish(resultMessage);
    +
    +    if(this.nextGoal) {
    +        this.currentGoal = this.nextGoal;
    +        this.nextGoal = null;
    +        this.emit('goal', this.currentGoal.goal);
    +    } else {
    +        this.currentGoal = null;
    +    }
    +};
    +
    +module.exports = SimpleActionServer;
    +},{"../core/Message":12,"../core/Topic":19,"eventemitter2":2}],11:[function(require,module,exports){
    +var Ros = require('../core/Ros');
    +var mixin = require('../mixin');
    +
    +var action = module.exports = {
    +    ActionClient: require('./ActionClient'),
    +    ActionListener: require('./ActionListener'),
    +    Goal: require('./Goal'),
    +    SimpleActionServer: require('./SimpleActionServer')
    +};
    +
    +mixin(Ros, ['ActionClient', 'SimpleActionServer'], action);
    +
    +},{"../core/Ros":14,"../mixin":26,"./ActionClient":7,"./ActionListener":8,"./Goal":9,"./SimpleActionServer":10}],12:[function(require,module,exports){
    +/**
    + * @fileoverview
    + * @author Brandon Alexander - baalexander@gmail.com
    + */
    +
    +var assign = require('object-assign');
    +
    +/**
    + * Message objects are used for publishing and subscribing to and from topics.
    + *
    + * @constructor
    + * @param values - object matching the fields defined in the .msg definition file
    + */
    +function Message(values) {
    +  assign(this, values);
    +}
    +
    +module.exports = Message;
    +},{"object-assign":3}],13:[function(require,module,exports){
    +/**
    + * @fileoverview
    + * @author Brandon Alexander - baalexander@gmail.com
    + */
    +
    +var Service = require('./Service');
    +var ServiceRequest = require('./ServiceRequest');
    +
    +/**
    + * A ROS parameter.
    + *
    + * @constructor
    + * @param options - possible keys include:
    + *   * ros - the ROSLIB.Ros connection handle
    + *   * name - the param name, like max_vel_x
    + */
    +function Param(options) {
    +  options = options || {};
    +  this.ros = options.ros;
    +  this.name = options.name;
    +}
    +
    +/**
    + * Fetches the value of the param.
    + *
    + * @param callback - function with the following params:
    + *  * value - the value of the param from ROS.
    + */
    +Param.prototype.get = function(callback) {
    +  var paramClient = new Service({
    +    ros : this.ros,
    +    name : '/rosapi/get_param',
    +    serviceType : 'rosapi/GetParam'
    +  });
    +
    +  var request = new ServiceRequest({
    +    name : this.name
    +  });
    +
    +  paramClient.callService(request, function(result) {
    +    var value = JSON.parse(result.value);
    +    callback(value);
    +  });
    +};
    +
    +/**
    + * Sets the value of the param in ROS.
    + *
    + * @param value - value to set param to.
    + */
    +Param.prototype.set = function(value, callback) {
    +  var paramClient = new Service({
    +    ros : this.ros,
    +    name : '/rosapi/set_param',
    +    serviceType : 'rosapi/SetParam'
    +  });
    +
    +  var request = new ServiceRequest({
    +    name : this.name,
    +    value : JSON.stringify(value)
    +  });
    +
    +  paramClient.callService(request, callback);
    +};
    +
    +/**
    + * Delete this parameter on the ROS server.
    + */
    +Param.prototype.delete = function(callback) {
    +  var paramClient = new Service({
    +    ros : this.ros,
    +    name : '/rosapi/delete_param',
    +    serviceType : 'rosapi/DeleteParam'
    +  });
    +
    +  var request = new ServiceRequest({
    +    name : this.name
    +  });
    +
    +  paramClient.callService(request, callback);
    +};
    +
    +module.exports = Param;
    +},{"./Service":15,"./ServiceRequest":16}],14:[function(require,module,exports){
    +/**
    + * @fileoverview
    + * @author Brandon Alexander - baalexander@gmail.com
    + */
    +
    +var WebSocket = require('ws');
    +var socketAdapter = require('./SocketAdapter.js');
    +
    +var Service = require('./Service');
    +var ServiceRequest = require('./ServiceRequest');
    +
    +var assign = require('object-assign');
    +var EventEmitter2 = require('eventemitter2').EventEmitter2;
    +
    +/**
    + * Manages connection to the server and all interactions with ROS.
    + *
    + * Emits the following events:
    + *  * 'error' - there was an error with ROS
    + *  * 'connection' - connected to the WebSocket server
    + *  * 'close' - disconnected to the WebSocket server
    + *  *  - a message came from rosbridge with the given topic name
    + *  *  - a service response came from rosbridge with the given ID
    + *
    + * @constructor
    + * @param options - possible keys include: 
    + * * url (optional) - (can be specified later with `connect`) the WebSocket URL for rosbridge or the node server url to connect using socket.io (if socket.io exists in the page)
    + * * groovyCompatibility - don't use interfaces that changed after the last groovy release or rosbridge_suite and related tools (defaults to true) + * * transportLibrary (optional) - one of 'websocket' (default), 'socket.io' or RTCPeerConnection instance controlling how the connection is created in `connect`. + * * transportOptions (optional) - the options to use use when creating a connection. Currently only used if `transportLibrary` is RTCPeerConnection. + */ +function Ros(options) { + options = options || {}; + this.socket = null; + this.idCounter = 0; + this.isConnected = false; + this.transportLibrary = options.transportLibrary || 'websocket'; + this.transportOptions = options.transportOptions || {}; + + if (typeof options.groovyCompatibility === 'undefined') { + this.groovyCompatibility = true; + } + else { + this.groovyCompatibility = options.groovyCompatibility; + } + + // Sets unlimited event listeners. + this.setMaxListeners(0); + + // begin by checking if a URL was given + if (options.url) { + this.connect(options.url); + } +} + +Ros.prototype.__proto__ = EventEmitter2.prototype; + +/** + * Connect to the specified WebSocket. + * + * @param url - WebSocket URL or RTCDataChannel label for Rosbridge + */ +Ros.prototype.connect = function(url) { + if (this.transportLibrary === 'socket.io') { + this.socket = assign(io(url, {'force new connection': true}), socketAdapter(this)); + this.socket.on('connect', this.socket.onopen); + this.socket.on('data', this.socket.onmessage); + this.socket.on('close', this.socket.onclose); + this.socket.on('error', this.socket.onerror); + } else if (this.transportLibrary.constructor.name === 'RTCPeerConnection') { + this.socket = assign(this.transportLibrary.createDataChannel(url, this.transportOptions), socketAdapter(this)); + } else { + if (!this.socket || this.socket.readyState === WebSocket.CLOSED) { + var sock = new WebSocket(url); + sock.binaryType = 'arraybuffer'; + this.socket = assign(sock, socketAdapter(this)); + } + } + +}; + +/** + * Disconnect from the WebSocket server. + */ +Ros.prototype.close = function() { + if (this.socket) { + this.socket.close(); + } +}; + +/** + * Sends an authorization request to the server. + * + * @param mac - MAC (hash) string given by the trusted source. + * @param client - IP of the client. + * @param dest - IP of the destination. + * @param rand - Random string given by the trusted source. + * @param t - Time of the authorization request. + * @param level - User level as a string given by the client. + * @param end - End time of the client's session. + */ +Ros.prototype.authenticate = function(mac, client, dest, rand, t, level, end) { + // create the request + var auth = { + op : 'auth', + mac : mac, + client : client, + dest : dest, + rand : rand, + t : t, + level : level, + end : end + }; + // send the request + this.callOnConnection(auth); +}; + +/** + * Sends the message over the WebSocket, but queues the message up if not yet + * connected. + */ +Ros.prototype.callOnConnection = function(message) { + var that = this; + var messageJson = JSON.stringify(message); + var emitter = null; + if (this.transportLibrary === 'socket.io') { + emitter = function(msg){that.socket.emit('operation', msg);}; + } else { + emitter = function(msg){that.socket.send(msg);}; + } + + if (!this.isConnected) { + that.once('connection', function() { + emitter(messageJson); + }); + } else { + emitter(messageJson); + } +}; + +/** + * Sends a set_level request to the server + * + * @param level - Status level (none, error, warning, info) + * @param id - Optional: Operation ID to change status level on + */ +Ros.prototype.setStatusLevel = function(level, id){ + var levelMsg = { + op: 'set_level', + level: level, + id: id + }; + + this.callOnConnection(levelMsg); +}; + +/** + * Retrieves Action Servers in ROS as an array of string + * + * * actionservers - Array of action server names + */ +Ros.prototype.getActionServers = function(callback, failedCallback) { + var getActionServers = new Service({ + ros : this, + name : '/rosapi/action_servers', + serviceType : 'rosapi/GetActionServers' + }); + + var request = new ServiceRequest({}); + if (typeof failedCallback === 'function'){ + getActionServers.callService(request, + function(result) { + callback(result.action_servers); + }, + function(message){ + failedCallback(message); + } + ); + }else{ + getActionServers.callService(request, function(result) { + callback(result.action_servers); + }); + } +}; + +/** + * Retrieves list of topics in ROS as an array. + * + * @param callback function with params: + * * topics - Array of topic names + */ +Ros.prototype.getTopics = function(callback, failedCallback) { + var topicsClient = new Service({ + ros : this, + name : '/rosapi/topics', + serviceType : 'rosapi/Topics' + }); + + var request = new ServiceRequest(); + if (typeof failedCallback === 'function'){ + topicsClient.callService(request, + function(result) { + callback(result); + }, + function(message){ + failedCallback(message); + } + ); + }else{ + topicsClient.callService(request, function(result) { + callback(result); + }); + } +}; + +/** + * Retrieves Topics in ROS as an array as specific type + * + * @param topicType topic type to find: + * @param callback function with params: + * * topics - Array of topic names + */ +Ros.prototype.getTopicsForType = function(topicType, callback, failedCallback) { + var topicsForTypeClient = new Service({ + ros : this, + name : '/rosapi/topics_for_type', + serviceType : 'rosapi/TopicsForType' + }); + + var request = new ServiceRequest({ + type: topicType + }); + if (typeof failedCallback === 'function'){ + topicsForTypeClient.callService(request, + function(result) { + callback(result.topics); + }, + function(message){ + failedCallback(message); + } + ); + }else{ + topicsForTypeClient.callService(request, function(result) { + callback(result.topics); + }); + } +}; + +/** + * Retrieves list of active service names in ROS. + * + * @param callback - function with the following params: + * * services - array of service names + */ +Ros.prototype.getServices = function(callback, failedCallback) { + var servicesClient = new Service({ + ros : this, + name : '/rosapi/services', + serviceType : 'rosapi/Services' + }); + + var request = new ServiceRequest(); + if (typeof failedCallback === 'function'){ + servicesClient.callService(request, + function(result) { + callback(result.services); + }, + function(message) { + failedCallback(message); + } + ); + }else{ + servicesClient.callService(request, function(result) { + callback(result.services); + }); + } +}; + +/** + * Retrieves list of services in ROS as an array as specific type + * + * @param serviceType service type to find: + * @param callback function with params: + * * topics - Array of service names + */ +Ros.prototype.getServicesForType = function(serviceType, callback, failedCallback) { + var servicesForTypeClient = new Service({ + ros : this, + name : '/rosapi/services_for_type', + serviceType : 'rosapi/ServicesForType' + }); + + var request = new ServiceRequest({ + type: serviceType + }); + if (typeof failedCallback === 'function'){ + servicesForTypeClient.callService(request, + function(result) { + callback(result.services); + }, + function(message) { + failedCallback(message); + } + ); + }else{ + servicesForTypeClient.callService(request, function(result) { + callback(result.services); + }); + } +}; + +/** + * Retrieves a detail of ROS service request. + * + * @param service name of service: + * @param callback - function with params: + * * type - String of the service type + */ +Ros.prototype.getServiceRequestDetails = function(type, callback, failedCallback) { + var serviceTypeClient = new Service({ + ros : this, + name : '/rosapi/service_request_details', + serviceType : 'rosapi/ServiceRequestDetails' + }); + var request = new ServiceRequest({ + type: type + }); + + if (typeof failedCallback === 'function'){ + serviceTypeClient.callService(request, + function(result) { + callback(result); + }, + function(message){ + failedCallback(message); + } + ); + }else{ + serviceTypeClient.callService(request, function(result) { + callback(result); + }); + } +}; + +/** + * Retrieves a detail of ROS service request. + * + * @param service name of service: + * @param callback - function with params: + * * type - String of the service type + */ +Ros.prototype.getServiceResponseDetails = function(type, callback, failedCallback) { + var serviceTypeClient = new Service({ + ros : this, + name : '/rosapi/service_response_details', + serviceType : 'rosapi/ServiceResponseDetails' + }); + var request = new ServiceRequest({ + type: type + }); + + if (typeof failedCallback === 'function'){ + serviceTypeClient.callService(request, + function(result) { + callback(result); + }, + function(message){ + failedCallback(message); + } + ); + }else{ + serviceTypeClient.callService(request, function(result) { + callback(result); + }); + } +}; + +/** + * Retrieves list of active node names in ROS. + * + * @param callback - function with the following params: + * * nodes - array of node names + */ +Ros.prototype.getNodes = function(callback, failedCallback) { + var nodesClient = new Service({ + ros : this, + name : '/rosapi/nodes', + serviceType : 'rosapi/Nodes' + }); + + var request = new ServiceRequest(); + if (typeof failedCallback === 'function'){ + nodesClient.callService(request, + function(result) { + callback(result.nodes); + }, + function(message) { + failedCallback(message); + } + ); + }else{ + nodesClient.callService(request, function(result) { + callback(result.nodes); + }); + } +}; + +/** + * Retrieves list subscribed topics, publishing topics and services of a specific node + * + * @param node name of the node: + * @param callback - function with params: + * * publications - array of published topic names + * * subscriptions - array of subscribed topic names + * * services - array of service names hosted + */ +Ros.prototype.getNodeDetails = function(node, callback, failedCallback) { + var nodesClient = new Service({ + ros : this, + name : '/rosapi/node_details', + serviceType : 'rosapi/NodeDetails' + }); + + var request = new ServiceRequest({ + node: node + }); + if (typeof failedCallback === 'function'){ + nodesClient.callService(request, + function(result) { + callback(result.subscribing, result.publishing, result.services); + }, + function(message) { + failedCallback(message); + } + ); + } else { + nodesClient.callService(request, function(result) { + callback(result); + }); + } +}; + +/** + * Retrieves list of param names from the ROS Parameter Server. + * + * @param callback function with params: + * * params - array of param names. + */ +Ros.prototype.getParams = function(callback, failedCallback) { + var paramsClient = new Service({ + ros : this, + name : '/rosapi/get_param_names', + serviceType : 'rosapi/GetParamNames' + }); + var request = new ServiceRequest(); + if (typeof failedCallback === 'function'){ + paramsClient.callService(request, + function(result) { + callback(result.names); + }, + function(message){ + failedCallback(message); + } + ); + }else{ + paramsClient.callService(request, function(result) { + callback(result.names); + }); + } +}; + +/** + * Retrieves a type of ROS topic. + * + * @param topic name of the topic: + * @param callback - function with params: + * * type - String of the topic type + */ +Ros.prototype.getTopicType = function(topic, callback, failedCallback) { + var topicTypeClient = new Service({ + ros : this, + name : '/rosapi/topic_type', + serviceType : 'rosapi/TopicType' + }); + var request = new ServiceRequest({ + topic: topic + }); + + if (typeof failedCallback === 'function'){ + topicTypeClient.callService(request, + function(result) { + callback(result.type); + }, + function(message){ + failedCallback(message); + } + ); + }else{ + topicTypeClient.callService(request, function(result) { + callback(result.type); + }); + } +}; + +/** + * Retrieves a type of ROS service. + * + * @param service name of service: + * @param callback - function with params: + * * type - String of the service type + */ +Ros.prototype.getServiceType = function(service, callback, failedCallback) { + var serviceTypeClient = new Service({ + ros : this, + name : '/rosapi/service_type', + serviceType : 'rosapi/ServiceType' + }); + var request = new ServiceRequest({ + service: service + }); + + if (typeof failedCallback === 'function'){ + serviceTypeClient.callService(request, + function(result) { + callback(result.type); + }, + function(message){ + failedCallback(message); + } + ); + }else{ + serviceTypeClient.callService(request, function(result) { + callback(result.type); + }); + } +}; + +/** + * Retrieves a detail of ROS message. + * + * @param callback - function with params: + * * details - Array of the message detail + * @param message - String of a topic type + */ +Ros.prototype.getMessageDetails = function(message, callback, failedCallback) { + var messageDetailClient = new Service({ + ros : this, + name : '/rosapi/message_details', + serviceType : 'rosapi/MessageDetails' + }); + var request = new ServiceRequest({ + type: message + }); + + if (typeof failedCallback === 'function'){ + messageDetailClient.callService(request, + function(result) { + callback(result.typedefs); + }, + function(message){ + failedCallback(message); + } + ); + }else{ + messageDetailClient.callService(request, function(result) { + callback(result.typedefs); + }); + } +}; + +/** + * Decode a typedefs into a dictionary like `rosmsg show foo/bar` + * + * @param defs - array of type_def dictionary + */ +Ros.prototype.decodeTypeDefs = function(defs) { + var that = this; + + // calls itself recursively to resolve type definition using hints. + var decodeTypeDefsRec = function(theType, hints) { + var typeDefDict = {}; + for (var i = 0; i < theType.fieldnames.length; i++) { + var arrayLen = theType.fieldarraylen[i]; + var fieldName = theType.fieldnames[i]; + var fieldType = theType.fieldtypes[i]; + if (fieldType.indexOf('/') === -1) { // check the fieldType includes '/' or not + if (arrayLen === -1) { + typeDefDict[fieldName] = fieldType; + } + else { + typeDefDict[fieldName] = [fieldType]; + } + } + else { + // lookup the name + var sub = false; + for (var j = 0; j < hints.length; j++) { + if (hints[j].type.toString() === fieldType.toString()) { + sub = hints[j]; + break; + } + } + if (sub) { + var subResult = decodeTypeDefsRec(sub, hints); + if (arrayLen === -1) { + } + else { + typeDefDict[fieldName] = [subResult]; + } + } + else { + that.emit('error', 'Cannot find ' + fieldType + ' in decodeTypeDefs'); + } + } + } + return typeDefDict; + }; + + return decodeTypeDefsRec(defs[0], defs); +}; + + +module.exports = Ros; + +},{"./Service":15,"./ServiceRequest":16,"./SocketAdapter.js":18,"eventemitter2":2,"object-assign":3,"ws":42}],15:[function(require,module,exports){ +/** + * @fileoverview + * @author Brandon Alexander - baalexander@gmail.com + */ + +var ServiceResponse = require('./ServiceResponse'); +var ServiceRequest = require('./ServiceRequest'); +var EventEmitter2 = require('eventemitter2').EventEmitter2; + +/** + * A ROS service client. + * + * @constructor + * @params options - possible keys include: + * * ros - the ROSLIB.Ros connection handle + * * name - the service name, like /add_two_ints + * * serviceType - the service type, like 'rospy_tutorials/AddTwoInts' + */ +function Service(options) { + options = options || {}; + this.ros = options.ros; + this.name = options.name; + this.serviceType = options.serviceType; + this.isAdvertised = false; + + this._serviceCallback = null; +} +Service.prototype.__proto__ = EventEmitter2.prototype; +/** + * Calls the service. Returns the service response in the + * callback. Does nothing if this service is currently advertised. + * + * @param request - the ROSLIB.ServiceRequest to send + * @param callback - function with params: + * * response - the response from the service request + * @param failedCallback - the callback function when the service call failed (optional). Params: + * * error - the error message reported by ROS + */ +Service.prototype.callService = function(request, callback, failedCallback) { + if (this.isAdvertised) { + return; + } + + var serviceCallId = 'call_service:' + this.name + ':' + (++this.ros.idCounter); + + if (callback || failedCallback) { + this.ros.once(serviceCallId, function(message) { + if (message.result !== undefined && message.result === false) { + if (typeof failedCallback === 'function') { + failedCallback(message.values); + } + } else if (typeof callback === 'function') { + callback(new ServiceResponse(message.values)); + } + }); + } + + var call = { + op : 'call_service', + id : serviceCallId, + service : this.name, + type: this.serviceType, + args : request + }; + this.ros.callOnConnection(call); +}; + +/** + * Advertise the service. This turns the Service object from a client + * into a server. The callback will be called with every request + * that's made on this service. + * + * @param callback - This works similarly to the callback for a C++ service and should take the following params: + * * request - the service request + * * response - an empty dictionary. Take care not to overwrite this. Instead, only modify the values within. + * It should return true if the service has finished successfully, + * i.e. without any fatal errors. + */ +Service.prototype.advertise = function(callback) { + if (this.isAdvertised || typeof callback !== 'function') { + return; + } + + this._serviceCallback = callback; + this.ros.on(this.name, this._serviceResponse.bind(this)); + this.ros.callOnConnection({ + op: 'advertise_service', + type: this.serviceType, + service: this.name + }); + this.isAdvertised = true; +}; + +Service.prototype.unadvertise = function() { + if (!this.isAdvertised) { + return; + } + this.ros.callOnConnection({ + op: 'unadvertise_service', + service: this.name + }); + this.isAdvertised = false; +}; + +Service.prototype._serviceResponse = function(rosbridgeRequest) { + var response = {}; + var success = this._serviceCallback(rosbridgeRequest.args, response); + + var call = { + op: 'service_response', + service: this.name, + values: new ServiceResponse(response), + result: success + }; + + if (rosbridgeRequest.id) { + call.id = rosbridgeRequest.id; + } + + this.ros.callOnConnection(call); +}; + +module.exports = Service; + +},{"./ServiceRequest":16,"./ServiceResponse":17,"eventemitter2":2}],16:[function(require,module,exports){ +/** + * @fileoverview + * @author Brandon Alexander - balexander@willowgarage.com + */ + +var assign = require('object-assign'); + +/** + * A ServiceRequest is passed into the service call. + * + * @constructor + * @param values - object matching the fields defined in the .srv definition file + */ +function ServiceRequest(values) { + assign(this, values); +} + +module.exports = ServiceRequest; +},{"object-assign":3}],17:[function(require,module,exports){ +/** + * @fileoverview + * @author Brandon Alexander - balexander@willowgarage.com + */ + +var assign = require('object-assign'); + +/** + * A ServiceResponse is returned from the service call. + * + * @constructor + * @param values - object matching the fields defined in the .srv definition file + */ +function ServiceResponse(values) { + assign(this, values); +} + +module.exports = ServiceResponse; +},{"object-assign":3}],18:[function(require,module,exports){ +/** + * Socket event handling utilities for handling events on either + * WebSocket and TCP sockets + * + * Note to anyone reviewing this code: these functions are called + * in the context of their parent object, unless bound + * @fileOverview + */ +'use strict'; + +var decompressPng = require('../util/decompressPng'); +var CBOR = require('cbor-js'); +var typedArrayTagger = require('../util/cborTypedArrayTags'); +var WebSocket = require('ws'); +var BSON = null; +if(typeof bson !== 'undefined'){ + BSON = bson().BSON; +} + +/** + * Events listeners for a WebSocket or TCP socket to a JavaScript + * ROS Client. Sets up Messages for a given topic to trigger an + * event on the ROS client. + * + * @namespace SocketAdapter + * @private + */ +function SocketAdapter(client) { + function handleMessage(message) { + if (message.op === 'publish') { + client.emit(message.topic, message.msg); + } else if (message.op === 'service_response') { + client.emit(message.id, message); + } else if (message.op === 'call_service') { + client.emit(message.service, message); + } else if(message.op === 'status'){ + if(message.id){ + client.emit('status:'+message.id, message); + } else { + client.emit('status', message); + } + } + } + + function handlePng(message, callback) { + if (message.op === 'png') { + decompressPng(message.data, callback); + } else { + callback(message); + } + } + + function decodeBSON(data, callback) { + if (!BSON) { + throw 'Cannot process BSON encoded message without BSON header.'; + } + var reader = new FileReader(); + reader.onload = function() { + var uint8Array = new Uint8Array(this.result); + var msg = BSON.deserialize(uint8Array); + callback(msg); + }; + reader.readAsArrayBuffer(data); + } + + return { + /** + * Emits a 'connection' event on WebSocket connection. + * + * @param event - the argument to emit with the event. + * @memberof SocketAdapter + */ + onopen: function onOpen(event) { + client.isConnected = true; + client.emit('connection', event); + }, + + /** + * Emits a 'close' event on WebSocket disconnection. + * + * @param event - the argument to emit with the event. + * @memberof SocketAdapter + */ + onclose: function onClose(event) { + client.isConnected = false; + client.emit('close', event); + }, + + /** + * Emits an 'error' event whenever there was an error. + * + * @param event - the argument to emit with the event. + * @memberof SocketAdapter + */ + onerror: function onError(event) { + client.emit('error', event); + }, + + /** + * Parses message responses from rosbridge and sends to the appropriate + * topic, service, or param. + * + * @param message - the raw JSON message from rosbridge. + * @memberof SocketAdapter + */ + onmessage: function onMessage(data) { + if (typeof Blob !== 'undefined' && data.data instanceof Blob) { + decodeBSON(data.data, function (message) { + handlePng(message, handleMessage); + }); + } else if (data.data instanceof ArrayBuffer) { + var decoded = CBOR.decode(data.data, typedArrayTagger); + handleMessage(decoded); + } else { + var message = JSON.parse(typeof data === 'string' ? data : data.data); + handlePng(message, handleMessage); + } + } + }; +} + +module.exports = SocketAdapter; + +},{"../util/cborTypedArrayTags":41,"../util/decompressPng":44,"cbor-js":1,"ws":42}],19:[function(require,module,exports){ +/** + * @fileoverview + * @author Brandon Alexander - baalexander@gmail.com + */ + +var EventEmitter2 = require('eventemitter2').EventEmitter2; +var Message = require('./Message'); + +/** + * Publish and/or subscribe to a topic in ROS. + * + * Emits the following events: + * * 'warning' - if there are any warning during the Topic creation + * * 'message' - the message data from rosbridge + * + * @constructor + * @param options - object with following keys: + * * ros - the ROSLIB.Ros connection handle + * * name - the topic name, like /cmd_vel + * * messageType - the message type, like 'std_msgs/String' + * * compression - the type of compression to use, like 'png' or 'cbor' + * * throttle_rate - the rate (in ms in between messages) at which to throttle the topics + * * queue_size - the queue created at bridge side for re-publishing webtopics (defaults to 100) + * * latch - latch the topic when publishing + * * queue_length - the queue length at bridge side used when subscribing (defaults to 0, no queueing). + * * reconnect_on_close - the flag to enable resubscription and readvertisement on close event(defaults to true). + */ +function Topic(options) { + options = options || {}; + this.ros = options.ros; + this.name = options.name; + this.messageType = options.messageType; + this.isAdvertised = false; + this.compression = options.compression || 'none'; + this.throttle_rate = options.throttle_rate || 0; + this.latch = options.latch || false; + this.queue_size = options.queue_size || 100; + this.queue_length = options.queue_length || 0; + this.reconnect_on_close = options.reconnect_on_close || true; + + // Check for valid compression types + if (this.compression && this.compression !== 'png' && + this.compression !== 'cbor' && this.compression !== 'none') { + this.emit('warning', this.compression + + ' compression is not supported. No compression will be used.'); + this.compression = 'none'; + } + + // Check if throttle rate is negative + if (this.throttle_rate < 0) { + this.emit('warning', this.throttle_rate + ' is not allowed. Set to 0'); + this.throttle_rate = 0; + } + + var that = this; + if (this.reconnect_on_close) { + this.callForSubscribeAndAdvertise = function(message) { + that.ros.callOnConnection(message); + + that.waitForReconnect = false; + that.reconnectFunc = function() { + if(!that.waitForReconnect) { + that.waitForReconnect = true; + that.ros.callOnConnection(message); + that.ros.once('connection', function() { + that.waitForReconnect = false; + }); + } + }; + that.ros.on('close', that.reconnectFunc); + }; + } + else { + this.callForSubscribeAndAdvertise = this.ros.callOnConnection; + } + + this._messageCallback = function(data) { + that.emit('message', new Message(data)); + }; +} +Topic.prototype.__proto__ = EventEmitter2.prototype; + +/** + * Every time a message is published for the given topic, the callback + * will be called with the message object. + * + * @param callback - function with the following params: + * * message - the published message + */ +Topic.prototype.subscribe = function(callback) { + if (typeof callback === 'function') { + this.on('message', callback); + } + + if (this.subscribeId) { return; } + this.ros.on(this.name, this._messageCallback); + this.subscribeId = 'subscribe:' + this.name + ':' + (++this.ros.idCounter); + + this.callForSubscribeAndAdvertise({ + op: 'subscribe', + id: this.subscribeId, + type: this.messageType, + topic: this.name, + compression: this.compression, + throttle_rate: this.throttle_rate, + queue_length: this.queue_length + }); +}; + +/** + * Unregisters as a subscriber for the topic. Unsubscribing stop remove + * all subscribe callbacks. To remove a call back, you must explicitly + * pass the callback function in. + * + * @param callback - the optional callback to unregister, if + * * provided and other listeners are registered the topic won't + * * unsubscribe, just stop emitting to the passed listener + */ +Topic.prototype.unsubscribe = function(callback) { + if (callback) { + this.off('message', callback); + // If there is any other callbacks still subscribed don't unsubscribe + if (this.listeners('message').length) { return; } + } + if (!this.subscribeId) { return; } + // Note: Don't call this.removeAllListeners, allow client to handle that themselves + this.ros.off(this.name, this._messageCallback); + if(this.reconnect_on_close) { + this.ros.off('close', this.reconnectFunc); + } + this.emit('unsubscribe'); + this.ros.callOnConnection({ + op: 'unsubscribe', + id: this.subscribeId, + topic: this.name + }); + this.subscribeId = null; +}; + + +/** + * Registers as a publisher for the topic. + */ +Topic.prototype.advertise = function() { + if (this.isAdvertised) { + return; + } + this.advertiseId = 'advertise:' + this.name + ':' + (++this.ros.idCounter); + this.callForSubscribeAndAdvertise({ + op: 'advertise', + id: this.advertiseId, + type: this.messageType, + topic: this.name, + latch: this.latch, + queue_size: this.queue_size + }); + this.isAdvertised = true; + + if(!this.reconnect_on_close) { + var that = this; + this.ros.on('close', function() { + that.isAdvertised = false; + }); + } +}; + +/** + * Unregisters as a publisher for the topic. + */ +Topic.prototype.unadvertise = function() { + if (!this.isAdvertised) { + return; + } + if(this.reconnect_on_close) { + this.ros.off('close', this.reconnectFunc); + } + this.emit('unadvertise'); + this.ros.callOnConnection({ + op: 'unadvertise', + id: this.advertiseId, + topic: this.name + }); + this.isAdvertised = false; +}; + +/** + * Publish the message. + * + * @param message - A ROSLIB.Message object. + */ +Topic.prototype.publish = function(message) { + if (!this.isAdvertised) { + this.advertise(); + } + + this.ros.idCounter++; + var call = { + op: 'publish', + id: 'publish:' + this.name + ':' + this.ros.idCounter, + topic: this.name, + msg: message, + latch: this.latch + }; + this.ros.callOnConnection(call); +}; + +module.exports = Topic; + +},{"./Message":12,"eventemitter2":2}],20:[function(require,module,exports){ +var mixin = require('../mixin'); + +var core = module.exports = { + Ros: require('./Ros'), + Topic: require('./Topic'), + Message: require('./Message'), + Param: require('./Param'), + Service: require('./Service'), + ServiceRequest: require('./ServiceRequest'), + ServiceResponse: require('./ServiceResponse') +}; + +mixin(core.Ros, ['Param', 'Service', 'Topic'], core); + +},{"../mixin":26,"./Message":12,"./Param":13,"./Ros":14,"./Service":15,"./ServiceRequest":16,"./ServiceResponse":17,"./Topic":19}],21:[function(require,module,exports){ +/** + * @fileoverview + * @author David Gossow - dgossow@willowgarage.com + */ + +var Vector3 = require('./Vector3'); +var Quaternion = require('./Quaternion'); + +/** + * A Pose in 3D space. Values are copied into this object. + * + * @constructor + * @param options - object with following keys: + * * position - the Vector3 describing the position + * * orientation - the ROSLIB.Quaternion describing the orientation + */ +function Pose(options) { + options = options || {}; + // copy the values into this object if they exist + this.position = new Vector3(options.position); + this.orientation = new Quaternion(options.orientation); +} + +/** + * Apply a transform against this pose. + * + * @param tf the transform + */ +Pose.prototype.applyTransform = function(tf) { + this.position.multiplyQuaternion(tf.rotation); + this.position.add(tf.translation); + var tmp = tf.rotation.clone(); + tmp.multiply(this.orientation); + this.orientation = tmp; +}; + +/** + * Clone a copy of this pose. + * + * @returns the cloned pose + */ +Pose.prototype.clone = function() { + return new Pose(this); +}; + +/** + * Multiplies this pose with another pose without altering this pose. + * + * @returns Result of multiplication. + */ +Pose.prototype.multiply = function(pose) { + var p = pose.clone(); + p.applyTransform({ rotation: this.orientation, translation: this.position }); + return p; +}; + +/** + * Computes the inverse of this pose. + * + * @returns Inverse of pose. + */ +Pose.prototype.getInverse = function() { + var inverse = this.clone(); + inverse.orientation.invert(); + inverse.position.multiplyQuaternion(inverse.orientation); + inverse.position.x *= -1; + inverse.position.y *= -1; + inverse.position.z *= -1; + return inverse; +}; + +module.exports = Pose; +},{"./Quaternion":22,"./Vector3":24}],22:[function(require,module,exports){ +/** + * @fileoverview + * @author David Gossow - dgossow@willowgarage.com + */ + +/** + * A Quaternion. + * + * @constructor + * @param options - object with following keys: + * * x - the x value + * * y - the y value + * * z - the z value + * * w - the w value + */ +function Quaternion(options) { + options = options || {}; + this.x = options.x || 0; + this.y = options.y || 0; + this.z = options.z || 0; + this.w = (typeof options.w === 'number') ? options.w : 1; +} + +/** + * Perform a conjugation on this quaternion. + */ +Quaternion.prototype.conjugate = function() { + this.x *= -1; + this.y *= -1; + this.z *= -1; +}; + +/** + * Return the norm of this quaternion. + */ +Quaternion.prototype.norm = function() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); +}; + +/** + * Perform a normalization on this quaternion. + */ +Quaternion.prototype.normalize = function() { + var l = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w); + if (l === 0) { + this.x = 0; + this.y = 0; + this.z = 0; + this.w = 1; + } else { + l = 1 / l; + this.x = this.x * l; + this.y = this.y * l; + this.z = this.z * l; + this.w = this.w * l; + } +}; + +/** + * Convert this quaternion into its inverse. + */ +Quaternion.prototype.invert = function() { + this.conjugate(); + this.normalize(); +}; + +/** + * Set the values of this quaternion to the product of itself and the given quaternion. + * + * @param q the quaternion to multiply with + */ +Quaternion.prototype.multiply = function(q) { + var newX = this.x * q.w + this.y * q.z - this.z * q.y + this.w * q.x; + var newY = -this.x * q.z + this.y * q.w + this.z * q.x + this.w * q.y; + var newZ = this.x * q.y - this.y * q.x + this.z * q.w + this.w * q.z; + var newW = -this.x * q.x - this.y * q.y - this.z * q.z + this.w * q.w; + this.x = newX; + this.y = newY; + this.z = newZ; + this.w = newW; +}; + +/** + * Clone a copy of this quaternion. + * + * @returns the cloned quaternion + */ +Quaternion.prototype.clone = function() { + return new Quaternion(this); +}; + +module.exports = Quaternion; + +},{}],23:[function(require,module,exports){ +/** + * @fileoverview + * @author David Gossow - dgossow@willowgarage.com + */ + +var Vector3 = require('./Vector3'); +var Quaternion = require('./Quaternion'); + +/** + * A Transform in 3-space. Values are copied into this object. + * + * @constructor + * @param options - object with following keys: + * * translation - the Vector3 describing the translation + * * rotation - the ROSLIB.Quaternion describing the rotation + */ +function Transform(options) { + options = options || {}; + // Copy the values into this object if they exist + this.translation = new Vector3(options.translation); + this.rotation = new Quaternion(options.rotation); +} + +/** + * Clone a copy of this transform. + * + * @returns the cloned transform + */ +Transform.prototype.clone = function() { + return new Transform(this); +}; + +module.exports = Transform; +},{"./Quaternion":22,"./Vector3":24}],24:[function(require,module,exports){ +/** + * @fileoverview + * @author David Gossow - dgossow@willowgarage.com + */ + +/** + * A 3D vector. + * + * @constructor + * @param options - object with following keys: + * * x - the x value + * * y - the y value + * * z - the z value + */ +function Vector3(options) { + options = options || {}; + this.x = options.x || 0; + this.y = options.y || 0; + this.z = options.z || 0; +} + +/** + * Set the values of this vector to the sum of itself and the given vector. + * + * @param v the vector to add with + */ +Vector3.prototype.add = function(v) { + this.x += v.x; + this.y += v.y; + this.z += v.z; +}; + +/** + * Set the values of this vector to the difference of itself and the given vector. + * + * @param v the vector to subtract with + */ +Vector3.prototype.subtract = function(v) { + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; +}; + +/** + * Multiply the given Quaternion with this vector. + * + * @param q - the quaternion to multiply with + */ +Vector3.prototype.multiplyQuaternion = function(q) { + var ix = q.w * this.x + q.y * this.z - q.z * this.y; + var iy = q.w * this.y + q.z * this.x - q.x * this.z; + var iz = q.w * this.z + q.x * this.y - q.y * this.x; + var iw = -q.x * this.x - q.y * this.y - q.z * this.z; + this.x = ix * q.w + iw * -q.x + iy * -q.z - iz * -q.y; + this.y = iy * q.w + iw * -q.y + iz * -q.x - ix * -q.z; + this.z = iz * q.w + iw * -q.z + ix * -q.y - iy * -q.x; +}; + +/** + * Clone a copy of this vector. + * + * @returns the cloned vector + */ +Vector3.prototype.clone = function() { + return new Vector3(this); +}; + +module.exports = Vector3; +},{}],25:[function(require,module,exports){ +module.exports = { + Pose: require('./Pose'), + Quaternion: require('./Quaternion'), + Transform: require('./Transform'), + Vector3: require('./Vector3') +}; + +},{"./Pose":21,"./Quaternion":22,"./Transform":23,"./Vector3":24}],26:[function(require,module,exports){ +/** + * Mixin a feature to the core/Ros prototype. + * For example, mixin(Ros, ['Topic'], {Topic: }) + * will add a topic bound to any Ros instances so a user + * can call `var topic = ros.Topic({name: '/foo'});` + * + * @author Graeme Yeates - github.com/megawac + */ +module.exports = function(Ros, classes, features) { + classes.forEach(function(className) { + var Class = features[className]; + Ros.prototype[className] = function(options) { + options.ros = this; + return new Class(options); + }; + }); +}; + +},{}],27:[function(require,module,exports){ +/** + * @fileoverview + * @author David Gossow - dgossow@willowgarage.com + */ + +var ActionClient = require('../actionlib/ActionClient'); +var Goal = require('../actionlib/Goal'); + +var Service = require('../core/Service.js'); +var ServiceRequest = require('../core/ServiceRequest.js'); + +var Transform = require('../math/Transform'); + +/** + * A TF Client that listens to TFs from tf2_web_republisher. + * + * @constructor + * @param options - object with following keys: + * * ros - the ROSLIB.Ros connection handle + * * fixedFrame - the fixed frame, like /base_link + * * angularThres - the angular threshold for the TF republisher + * * transThres - the translation threshold for the TF republisher + * * rate - the rate for the TF republisher + * * updateDelay - the time (in ms) to wait after a new subscription + * to update the TF republisher's list of TFs + * * topicTimeout - the timeout parameter for the TF republisher + * * serverName (optional) - the name of the tf2_web_republisher server + * * repubServiceName (optional) - the name of the republish_tfs service (non groovy compatibility mode only) + * default: '/republish_tfs' + */ +function TFClient(options) { + options = options || {}; + this.ros = options.ros; + this.fixedFrame = options.fixedFrame || '/base_link'; + this.angularThres = options.angularThres || 2.0; + this.transThres = options.transThres || 0.01; + this.rate = options.rate || 10.0; + this.updateDelay = options.updateDelay || 50; + var seconds = options.topicTimeout || 2.0; + var secs = Math.floor(seconds); + var nsecs = Math.floor((seconds - secs) * 1000000000); + this.topicTimeout = { + secs: secs, + nsecs: nsecs + }; + this.serverName = options.serverName || '/tf2_web_republisher'; + this.repubServiceName = options.repubServiceName || '/republish_tfs'; + + this.currentGoal = false; + this.currentTopic = false; + this.frameInfos = {}; + this.republisherUpdateRequested = false; + + // Create an Action client + this.actionClient = this.ros.ActionClient({ + serverName : this.serverName, + actionName : 'tf2_web_republisher/TFSubscriptionAction', + omitStatus : true, + omitResult : true + }); + + // Create a Service client + this.serviceClient = this.ros.Service({ + name: this.repubServiceName, + serviceType: 'tf2_web_republisher/RepublishTFs' + }); +} + +/** + * Process the incoming TF message and send them out using the callback + * functions. + * + * @param tf - the TF message from the server + */ +TFClient.prototype.processTFArray = function(tf) { + var that = this; + tf.transforms.forEach(function(transform) { + var frameID = transform.child_frame_id; + if (frameID[0] === '/') + { + frameID = frameID.substring(1); + } + var info = this.frameInfos[frameID]; + if (info) { + info.transform = new Transform({ + translation : transform.transform.translation, + rotation : transform.transform.rotation + }); + info.cbs.forEach(function(cb) { + cb(info.transform); + }); + } + }, this); +}; + +/** + * Create and send a new goal (or service request) to the tf2_web_republisher + * based on the current list of TFs. + */ +TFClient.prototype.updateGoal = function() { + var goalMessage = { + source_frames : Object.keys(this.frameInfos), + target_frame : this.fixedFrame, + angular_thres : this.angularThres, + trans_thres : this.transThres, + rate : this.rate + }; + + // if we're running in groovy compatibility mode (the default) + // then use the action interface to tf2_web_republisher + if(this.ros.groovyCompatibility) { + if (this.currentGoal) { + this.currentGoal.cancel(); + } + this.currentGoal = new Goal({ + actionClient : this.actionClient, + goalMessage : goalMessage + }); + + this.currentGoal.on('feedback', this.processTFArray.bind(this)); + this.currentGoal.send(); + } + else { + // otherwise, use the service interface + // The service interface has the same parameters as the action, + // plus the timeout + goalMessage.timeout = this.topicTimeout; + var request = new ServiceRequest(goalMessage); + + this.serviceClient.callService(request, this.processResponse.bind(this)); + } + + this.republisherUpdateRequested = false; +}; + +/** + * Process the service response and subscribe to the tf republisher + * topic + * + * @param response the service response containing the topic name + */ +TFClient.prototype.processResponse = function(response) { + // if we subscribed to a topic before, unsubscribe so + // the republisher stops publishing it + if (this.currentTopic) { + this.currentTopic.unsubscribe(); + } + + this.currentTopic = this.ros.Topic({ + name: response.topic_name, + messageType: 'tf2_web_republisher/TFArray' + }); + this.currentTopic.subscribe(this.processTFArray.bind(this)); +}; + +/** + * Subscribe to the given TF frame. + * + * @param frameID - the TF frame to subscribe to + * @param callback - function with params: + * * transform - the transform data + */ +TFClient.prototype.subscribe = function(frameID, callback) { + // remove leading slash, if it's there + if (frameID[0] === '/') + { + frameID = frameID.substring(1); + } + // if there is no callback registered for the given frame, create emtpy callback list + if (!this.frameInfos[frameID]) { + this.frameInfos[frameID] = { + cbs: [] + }; + if (!this.republisherUpdateRequested) { + setTimeout(this.updateGoal.bind(this), this.updateDelay); + this.republisherUpdateRequested = true; + } + } + // if we already have a transform, call back immediately + else if (this.frameInfos[frameID].transform) { + callback(this.frameInfos[frameID].transform); + } + this.frameInfos[frameID].cbs.push(callback); +}; + +/** + * Unsubscribe from the given TF frame. + * + * @param frameID - the TF frame to unsubscribe from + * @param callback - the callback function to remove + */ +TFClient.prototype.unsubscribe = function(frameID, callback) { + // remove leading slash, if it's there + if (frameID[0] === '/') + { + frameID = frameID.substring(1); + } + var info = this.frameInfos[frameID]; + for (var cbs = info && info.cbs || [], idx = cbs.length; idx--;) { + if (cbs[idx] === callback) { + cbs.splice(idx, 1); + } + } + if (!callback || cbs.length === 0) { + delete this.frameInfos[frameID]; + } +}; + +/** + * Unsubscribe and unadvertise all topics associated with this TFClient. + */ +TFClient.prototype.dispose = function() { + this.actionClient.dispose(); + if (this.currentTopic) { + this.currentTopic.unsubscribe(); + } +}; + +module.exports = TFClient; + +},{"../actionlib/ActionClient":7,"../actionlib/Goal":9,"../core/Service.js":15,"../core/ServiceRequest.js":16,"../math/Transform":23}],28:[function(require,module,exports){ +var Ros = require('../core/Ros'); +var mixin = require('../mixin'); + +var tf = module.exports = { + TFClient: require('./TFClient') +}; + +mixin(Ros, ['TFClient'], tf); +},{"../core/Ros":14,"../mixin":26,"./TFClient":27}],29:[function(require,module,exports){ +/** + * @fileOverview + * @author Benjamin Pitzer - ben.pitzer@gmail.com + * @author Russell Toris - rctoris@wpi.edu + */ + +var Vector3 = require('../math/Vector3'); +var UrdfTypes = require('./UrdfTypes'); + +/** + * A Box element in a URDF. + * + * @constructor + * @param options - object with following keys: + * * xml - the XML element to parse + */ +function UrdfBox(options) { + this.dimension = null; + this.type = UrdfTypes.URDF_BOX; + + // Parse the xml string + var xyz = options.xml.getAttribute('size').split(' '); + this.dimension = new Vector3({ + x : parseFloat(xyz[0]), + y : parseFloat(xyz[1]), + z : parseFloat(xyz[2]) + }); +} + +module.exports = UrdfBox; +},{"../math/Vector3":24,"./UrdfTypes":38}],30:[function(require,module,exports){ +/** + * @fileOverview + * @author Benjamin Pitzer - ben.pitzer@gmail.com + * @author Russell Toris - rctoris@wpi.edu + */ + +/** + * A Color element in a URDF. + * + * @constructor + * @param options - object with following keys: + * * xml - the XML element to parse + */ +function UrdfColor(options) { + // Parse the xml string + var rgba = options.xml.getAttribute('rgba').split(' '); + this.r = parseFloat(rgba[0]); + this.g = parseFloat(rgba[1]); + this.b = parseFloat(rgba[2]); + this.a = parseFloat(rgba[3]); +} + +module.exports = UrdfColor; +},{}],31:[function(require,module,exports){ +/** + * @fileOverview + * @author Benjamin Pitzer - ben.pitzer@gmail.com + * @author Russell Toris - rctoris@wpi.edu + */ + +var UrdfTypes = require('./UrdfTypes'); + +/** + * A Cylinder element in a URDF. + * + * @constructor + * @param options - object with following keys: + * * xml - the XML element to parse + */ +function UrdfCylinder(options) { + this.type = UrdfTypes.URDF_CYLINDER; + this.length = parseFloat(options.xml.getAttribute('length')); + this.radius = parseFloat(options.xml.getAttribute('radius')); +} + +module.exports = UrdfCylinder; +},{"./UrdfTypes":38}],32:[function(require,module,exports){ +/** + * @fileOverview + * @author David V. Lu!! davidvlu@gmail.com + */ + +var Pose = require('../math/Pose'); +var Vector3 = require('../math/Vector3'); +var Quaternion = require('../math/Quaternion'); + +/** + * A Joint element in a URDF. + * + * @constructor + * @param options - object with following keys: + * * xml - the XML element to parse + */ +function UrdfJoint(options) { + this.name = options.xml.getAttribute('name'); + this.type = options.xml.getAttribute('type'); + + var parents = options.xml.getElementsByTagName('parent'); + if(parents.length > 0) { + this.parent = parents[0].getAttribute('link'); + } + + var children = options.xml.getElementsByTagName('child'); + if(children.length > 0) { + this.child = children[0].getAttribute('link'); + } + + var limits = options.xml.getElementsByTagName('limit'); + if (limits.length > 0) { + this.minval = parseFloat( limits[0].getAttribute('lower') ); + this.maxval = parseFloat( limits[0].getAttribute('upper') ); + } + + // Origin + var origins = options.xml.getElementsByTagName('origin'); + if (origins.length === 0) { + // use the identity as the default + this.origin = new Pose(); + } else { + // Check the XYZ + var xyz = origins[0].getAttribute('xyz'); + var position = new Vector3(); + if (xyz) { + xyz = xyz.split(' '); + position = new Vector3({ + x : parseFloat(xyz[0]), + y : parseFloat(xyz[1]), + z : parseFloat(xyz[2]) + }); + } + + // Check the RPY + var rpy = origins[0].getAttribute('rpy'); + var orientation = new Quaternion(); + if (rpy) { + rpy = rpy.split(' '); + // Convert from RPY + var roll = parseFloat(rpy[0]); + var pitch = parseFloat(rpy[1]); + var yaw = parseFloat(rpy[2]); + var phi = roll / 2.0; + var the = pitch / 2.0; + var psi = yaw / 2.0; + var x = Math.sin(phi) * Math.cos(the) * Math.cos(psi) - Math.cos(phi) * Math.sin(the) + * Math.sin(psi); + var y = Math.cos(phi) * Math.sin(the) * Math.cos(psi) + Math.sin(phi) * Math.cos(the) + * Math.sin(psi); + var z = Math.cos(phi) * Math.cos(the) * Math.sin(psi) - Math.sin(phi) * Math.sin(the) + * Math.cos(psi); + var w = Math.cos(phi) * Math.cos(the) * Math.cos(psi) + Math.sin(phi) * Math.sin(the) + * Math.sin(psi); + + orientation = new Quaternion({ + x : x, + y : y, + z : z, + w : w + }); + orientation.normalize(); + } + this.origin = new Pose({ + position : position, + orientation : orientation + }); + } +} + +module.exports = UrdfJoint; + +},{"../math/Pose":21,"../math/Quaternion":22,"../math/Vector3":24}],33:[function(require,module,exports){ +/** + * @fileOverview + * @author Benjamin Pitzer - ben.pitzer@gmail.com + * @author Russell Toris - rctoris@wpi.edu + */ + +var UrdfVisual = require('./UrdfVisual'); + +/** + * A Link element in a URDF. + * + * @constructor + * @param options - object with following keys: + * * xml - the XML element to parse + */ +function UrdfLink(options) { + this.name = options.xml.getAttribute('name'); + this.visuals = []; + var visuals = options.xml.getElementsByTagName('visual'); + + for( var i=0; i 0) { + this.textureFilename = textures[0].getAttribute('filename'); + } + + // Color + var colors = options.xml.getElementsByTagName('color'); + if (colors.length > 0) { + // Parse the RBGA string + this.color = new UrdfColor({ + xml : colors[0] + }); + } +} + +UrdfMaterial.prototype.isLink = function() { + return this.color === null && this.textureFilename === null; +}; + +var assign = require('object-assign'); + +UrdfMaterial.prototype.assign = function(obj) { + return assign(this, obj); +}; + +module.exports = UrdfMaterial; + +},{"./UrdfColor":30,"object-assign":3}],35:[function(require,module,exports){ +/** + * @fileOverview + * @author Benjamin Pitzer - ben.pitzer@gmail.com + * @author Russell Toris - rctoris@wpi.edu + */ + +var Vector3 = require('../math/Vector3'); +var UrdfTypes = require('./UrdfTypes'); + +/** + * A Mesh element in a URDF. + * + * @constructor + * @param options - object with following keys: + * * xml - the XML element to parse + */ +function UrdfMesh(options) { + this.scale = null; + + this.type = UrdfTypes.URDF_MESH; + this.filename = options.xml.getAttribute('filename'); + + // Check for a scale + var scale = options.xml.getAttribute('scale'); + if (scale) { + // Get the XYZ + var xyz = scale.split(' '); + this.scale = new Vector3({ + x : parseFloat(xyz[0]), + y : parseFloat(xyz[1]), + z : parseFloat(xyz[2]) + }); + } +} + +module.exports = UrdfMesh; +},{"../math/Vector3":24,"./UrdfTypes":38}],36:[function(require,module,exports){ +/** + * @fileOverview + * @author Benjamin Pitzer - ben.pitzer@gmail.com + * @author Russell Toris - rctoris@wpi.edu + */ + +var UrdfMaterial = require('./UrdfMaterial'); +var UrdfLink = require('./UrdfLink'); +var UrdfJoint = require('./UrdfJoint'); +var DOMParser = require('xmldom').DOMParser; + +// See https://developer.mozilla.org/docs/XPathResult#Constants +var XPATH_FIRST_ORDERED_NODE_TYPE = 9; + +/** + * A URDF Model can be used to parse a given URDF into the appropriate elements. + * + * @constructor + * @param options - object with following keys: + * * xml - the XML element to parse + * * string - the XML element to parse as a string + */ +function UrdfModel(options) { + options = options || {}; + var xmlDoc = options.xml; + var string = options.string; + this.materials = {}; + this.links = {}; + this.joints = {}; + + // Check if we are using a string or an XML element + if (string) { + // Parse the string + var parser = new DOMParser(); + xmlDoc = parser.parseFromString(string, 'text/xml'); + } + + // Initialize the model with the given XML node. + // Get the robot tag + var robotXml = xmlDoc.documentElement; + + // Get the robot name + this.name = robotXml.getAttribute('name'); + + // Parse all the visual elements we need + for (var nodes = robotXml.childNodes, i = 0; i < nodes.length; i++) { + var node = nodes[i]; + if (node.tagName === 'material') { + var material = new UrdfMaterial({ + xml : node + }); + // Make sure this is unique + if (this.materials[material.name] !== void 0) { + if( this.materials[material.name].isLink() ) { + this.materials[material.name].assign( material ); + } else { + console.warn('Material ' + material.name + 'is not unique.'); + } + } else { + this.materials[material.name] = material; + } + } else if (node.tagName === 'link') { + var link = new UrdfLink({ + xml : node + }); + // Make sure this is unique + if (this.links[link.name] !== void 0) { + console.warn('Link ' + link.name + ' is not unique.'); + } else { + // Check for a material + for( var j=0; j 0) { + var geom = geoms[0]; + var shape = null; + // Check for the shape + for (var i = 0; i < geom.childNodes.length; i++) { + var node = geom.childNodes[i]; + if (node.nodeType === 1) { + shape = node; + break; + } + } + // Check the type + var type = shape.nodeName; + if (type === 'sphere') { + this.geometry = new UrdfSphere({ + xml : shape + }); + } else if (type === 'box') { + this.geometry = new UrdfBox({ + xml : shape + }); + } else if (type === 'cylinder') { + this.geometry = new UrdfCylinder({ + xml : shape + }); + } else if (type === 'mesh') { + this.geometry = new UrdfMesh({ + xml : shape + }); + } else { + console.warn('Unknown geometry type ' + type); + } + } + + // Material + var materials = xml.getElementsByTagName('material'); + if (materials.length > 0) { + this.material = new UrdfMaterial({ + xml : materials[0] + }); + } +} + +module.exports = UrdfVisual; +},{"../math/Pose":21,"../math/Quaternion":22,"../math/Vector3":24,"./UrdfBox":29,"./UrdfCylinder":31,"./UrdfMaterial":34,"./UrdfMesh":35,"./UrdfSphere":37}],40:[function(require,module,exports){ +module.exports = require('object-assign')({ + UrdfBox: require('./UrdfBox'), + UrdfColor: require('./UrdfColor'), + UrdfCylinder: require('./UrdfCylinder'), + UrdfLink: require('./UrdfLink'), + UrdfMaterial: require('./UrdfMaterial'), + UrdfMesh: require('./UrdfMesh'), + UrdfModel: require('./UrdfModel'), + UrdfSphere: require('./UrdfSphere'), + UrdfVisual: require('./UrdfVisual') +}, require('./UrdfTypes')); + +},{"./UrdfBox":29,"./UrdfColor":30,"./UrdfCylinder":31,"./UrdfLink":33,"./UrdfMaterial":34,"./UrdfMesh":35,"./UrdfModel":36,"./UrdfSphere":37,"./UrdfTypes":38,"./UrdfVisual":39,"object-assign":3}],41:[function(require,module,exports){ +'use strict'; + +var UPPER32 = Math.pow(2, 32); + +var warnedPrecision = false; +function warnPrecision() { + if (!warnedPrecision) { + warnedPrecision = true; + console.warn('CBOR 64-bit integer array values may lose precision. No further warnings.'); + } +} + +/** + * Unpacks 64-bit unsigned integer from byte array. + * @param {Uint8Array} bytes +*/ +function decodeUint64LE(bytes) { + warnPrecision(); + + var byteLen = bytes.byteLength; + var offset = bytes.byteOffset; + var arrLen = byteLen / 8; + + var buffer = bytes.buffer.slice(offset, offset + byteLen); + var uint32View = new Uint32Array(buffer); + + var arr = new Array(arrLen); + for (var i = 0; i < arrLen; i++) { + var si = i * 2; + var lo = uint32View[si]; + var hi = uint32View[si+1]; + arr[i] = lo + UPPER32 * hi; + } + + return arr; +} + +/** + * Unpacks 64-bit signed integer from byte array. + * @param {Uint8Array} bytes +*/ +function decodeInt64LE(bytes) { + warnPrecision(); + + var byteLen = bytes.byteLength; + var offset = bytes.byteOffset; + var arrLen = byteLen / 8; + + var buffer = bytes.buffer.slice(offset, offset + byteLen); + var uint32View = new Uint32Array(buffer); + var int32View = new Int32Array(buffer); + + var arr = new Array(arrLen); + for (var i = 0; i < arrLen; i++) { + var si = i * 2; + var lo = uint32View[si]; + var hi = int32View[si+1]; + arr[i] = lo + UPPER32 * hi; + } + + return arr; +} + +/** + * Unpacks typed array from byte array. + * @param {Uint8Array} bytes + * @param {type} ArrayType - desired output array type +*/ +function decodeNativeArray(bytes, ArrayType) { + var byteLen = bytes.byteLength; + var offset = bytes.byteOffset; + var buffer = bytes.buffer.slice(offset, offset + byteLen); + return new ArrayType(buffer); +} + +/** + * Support a subset of draft CBOR typed array tags: + * + * Only support little-endian tags for now. + */ +var nativeArrayTypes = { + 64: Uint8Array, + 69: Uint16Array, + 70: Uint32Array, + 72: Int8Array, + 77: Int16Array, + 78: Int32Array, + 85: Float32Array, + 86: Float64Array +}; + +/** + * We can also decode 64-bit integer arrays, since ROS has these types. + */ +var conversionArrayTypes = { + 71: decodeUint64LE, + 79: decodeInt64LE +}; + +/** + * Handles CBOR typed array tags during decoding. + * @param {Uint8Array} data + * @param {Number} tag + */ +function cborTypedArrayTagger(data, tag) { + if (tag in nativeArrayTypes) { + var arrayType = nativeArrayTypes[tag]; + return decodeNativeArray(data, arrayType); + } + if (tag in conversionArrayTypes) { + return conversionArrayTypes[tag](data); + } + return data; +} + +if (typeof module !== 'undefined' && module.exports) { + module.exports = cborTypedArrayTagger; +} + +},{}],42:[function(require,module,exports){ +module.exports = window.WebSocket; + +},{}],43:[function(require,module,exports){ +/* global document */ +module.exports = function Canvas() { + return document.createElement('canvas'); +}; +},{}],44:[function(require,module,exports){ +/** + * @fileOverview + * @author Graeme Yeates - github.com/megawac + */ + +'use strict'; + +var Canvas = require('canvas'); +var Image = Canvas.Image || window.Image; + +/** + * If a message was compressed as a PNG image (a compression hack since + * gzipping over WebSockets * is not supported yet), this function places the + * "image" in a canvas element then decodes the * "image" as a Base64 string. + * + * @private + * @param data - object containing the PNG data. + * @param callback - function with params: + * * data - the uncompressed data + */ +function decompressPng(data, callback) { + // Uncompresses the data before sending it through (use image/canvas to do so). + var image = new Image(); + // When the image loads, extracts the raw data (JSON message). + image.onload = function() { + // Creates a local canvas to draw on. + var canvas = new Canvas(); + var context = canvas.getContext('2d'); + + // Sets width and height. + canvas.width = image.width; + canvas.height = image.height; + + // Prevents anti-aliasing and loosing data + context.imageSmoothingEnabled = false; + context.webkitImageSmoothingEnabled = false; + context.mozImageSmoothingEnabled = false; + + // Puts the data into the image. + context.drawImage(image, 0, 0); + // Grabs the raw, uncompressed data. + var imageData = context.getImageData(0, 0, image.width, image.height).data; + + // Constructs the JSON. + var jsonData = ''; + for (var i = 0; i < imageData.length; i += 4) { + // RGB + jsonData += String.fromCharCode(imageData[i], imageData[i + 1], imageData[i + 2]); + } + callback(JSON.parse(jsonData)); + }; + // Sends the image data to load. + image.src = 'data:image/png;base64,' + data; +} + +module.exports = decompressPng; + +},{"canvas":43}],45:[function(require,module,exports){ +exports.DOMImplementation = window.DOMImplementation; +exports.XMLSerializer = window.XMLSerializer; +exports.DOMParser = window.DOMParser; + +},{}]},{},[6]); diff --git a/docs/assets/blocks/blockly.svg b/docs/assets/blocks/blockly.svg new file mode 100644 index 000000000..5e7e10d54 --- /dev/null +++ b/docs/assets/blocks/blockly.svg @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/blocks/blocks.png b/docs/assets/blocks/blocks.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ef0f38c31ddf238459afa797b31d4702ebb5f2 GIT binary patch literal 259605 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%0A6y&Va{E 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

    9qyATIyM!VamEl5yfu?ZH67qiL<9TO( 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{54cp~|r>a_WM8+OUlR!*(*9S5y)`?uV@ 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 GPx=!pl_`Ay literal 0 HcmV?d00001 diff --git a/docs/assets/blocks/get-position.png b/docs/assets/blocks/get-position.png new file mode 100644 index 0000000000000000000000000000000000000000..49a59fd047e0300f1762039d38ff52a394b8ba31 GIT binary patch literal 10332 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 J+IME*{|Eayzl8t* literal 0 HcmV?d00001 diff --git a/docs/assets/blocks/land.png b/docs/assets/blocks/land.png new file mode 100644 index 0000000000000000000000000000000000000000..1838e617eda9669476854a8383d7358d70a8af02 GIT binary patch literal 4638 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 literal 0 HcmV?d00001 diff --git a/docs/assets/blocks/navigate.png b/docs/assets/blocks/navigate.png new file mode 100644 index 0000000000000000000000000000000000000000..35c3a20bc339707707637ba21e5d0d22334f9b5b GIT binary patch literal 34657 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%0DwDinbk;%Jigt}gv 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 bu06wy=H&Y*AEF1p0)A3pc~FI@q5uB?iG`Rp literal 0 HcmV?d00001 diff --git a/docs/assets/blocks/random-color.png b/docs/assets/blocks/random-color.png new file mode 100644 index 0000000000000000000000000000000000000000..77a6720e0c6869b2e26370613464093cfc99d427 GIT binary patch literal 15385 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 W6=A`#LuGZVG5Pd!vM zx58m)`pmsD-`jh5)IATQ41<86CVg9^LeUq#hyr0q8P|^tN&Zf};o@98?L&7Q>gJeO zUzKKN**5OW5skA;v8*mn=1nPxK2BkyY}7z^hQz85Fmq!umlAyrYM&&L0%IUIMT1gV zLNgJ(H2fbpaYw`VAui10Jj5(4{Vh0d0hb)%2WOzU&e9m$?{N|@kaWlbwja~d9}P~= z5+z(_JLIqjsWvoEI!TuMvhWH`i8jfsEfh*$&cvBhR4wfW>KcQW56l zTyn56UiqV5vL?q<3N1iCa~{x)APLQk0Lz#g%7v`}%_llBJvjy)@Wtl`B%n`>8>54? zBpD@IhH(Gm4@)RIxBzi1$nN9%xDG>1y5Q5;PPL0k*f*$`c&IUbu(9MjA#`!@0Sxfc zvf-BUaOj^TPk-)1?b?!+mb8|elh8#>%Opy;>+nmYcd?q%vBeW8xppZYi!K6U-;Ek; zFFA7`3Tz&%+=NPpqW$pup(#$gwyhx>affWw6QX1#qL1yoy@R>oK30TJ77Q=CH^x5F zr5K2Oh`6)1D&}OtLbqje_qu!JhQ}FA`dDX#%NvIWNsdqqv541~Pi;YV!FKk;%lw=j z=>ywsr`HXgLPjH__l%?Bvr>LvBA9y6jEgHaW_9*iry;aw*-9~+0!dX*j)}Z^>)*Yz zhyGWVwFvynPWTF44gsMn#Rju;0-tGP<*eO;6zYWpW?2v);KrYe8PI(Xk1fHgkd z)+-yrZ{8TI3!?CcbY{kAr9se9eWaey0T?Jh+IcaMvBX}cLY*H-$cY z;+%ruk~kO}rz76VRkfnzCmfbS9y4{NXhbQK{5mdVCFD&a6l?fOV7%B00LRJ{6`^Cw zOhCM0TA@vp9M)gapiTHXNYl(s8~d)9#Vku3{Su9K9VIiYshx`?f_4q686qc=rJHB9 z>Dap&w=HU=)8|APhQA|mRpFTG7y%n`E)*E5CJt)?zec`By{KpqIwMK>QMQ`)rhO?@ zZir%plKF)L<>3o%Y=QUa@BOH;`cpR*kjT5^uM5Q0=&gmU(SZa&tS^!0$)&Gq$(s^7 z`>o&5H-zeoEh`GkwMzOc92W1Y+0pwaYJZ4hPpHhS%$ksFkOAhMt6zM+oPw~SUG}^FcN{2RQDO<)+1ZLn z6MBctm@N-24b55sCfvas;+&@a?;9~wq?*}?ta0q9*VFg5@0u`7L#ya5MHF=opeNAbe*4(BqM)iyJLx&8Q?#JKl6skzmhmdJe`q=* zi*=99G95l+C$*eS#AeyP<2yoioOWpiuf+-cU|hG!R>e!5vQk5N^+6f=!mZbX+=KoM zK3}Q7Vts9S?NRz=+HQ|=k87G~x`i8$d&AyhVQT))LcYR$;e-9mTz0LWnWbZjXCwSk3yrZv#rw)wa`lxeV^Jt&98l+8vl5Zx>w&{v4rS$`W8z-lh43aDyt>y#Yje` zfE1<_C?-Cpgv@OzZ2N~Z{o5~Y4Lbv_(e6yn_D+7>^A@i2yGi-Vu@9TuTgf}MO9#^g z_iP(IiBZ->XFrzu4OR`e{JTRAF%Q{B^T#(DimQtIT&i|ZS>DZfmcKG&G6b~vHE%7u zEiVak3ljMAnJuT9WQbAKal!sC7uAXyvF!(Z?TBamPty-$#AWC-lm)?7=>^@od@f z?HMMVA$k=l_kJG3O=O;4mu!iXj8w$o?$=43nVney8)^l4GJX^PrBbG!zStrQ_IvDg z8VyBH91$9S_d6hr)Q_pqCB$-U39J;_Wx2O9YBV*}d(_3WGt_Oeh>AK%6MW9+U3}Q1 z#pwldYQ&Q=*8SE36E`$rin;<{7?v1XIPd4*-1c+OlaugI$f? z-O_ip_w*~sFRghfI;{ojn{n3a7gp_hsaYl@j4~{t5u`rdqzh^RavwMMI$jxlio=gi zFNmo}T_{~@H=FyThnLa>;!@)4cycmxJ_g8?unZ^FDskj+o9TuR>AZfq$9T-3tvALH z8-Jui{-OUvk2tiaXIrkTivQPUEgWqP&2x9}({pH!a|;~770$1g~J^gd$pU<*&iis5{6cF&}KC&r0`SNAXzR|~vN%w2%!E!=t@qO;SM8zsA=3){CH>X?iF%Ln%%${!BVW6)%2n0DC^0%aTJle-3ywV>;x5#z=r7Tv z;XR}_)~AmA*O7ZH0_b{V-}p^E-+)wqjfY9Y$KV3?Y?HaJNJfPpa?Nc9%doMP^{unU z=H1zUZKkQO6)R9{IIC1kZ$pw0Ylqe;;ltd&nE@?r~qa zEQ+Zhm1co8;P>Y{KmEec%&=45qkmAJ?0V31alV(u6UvjlIMf8XtIJ!taU5<_tT%9% zzEbKom~8slCh*W&H`#R7*D~gVe@MI7b|HGa3Y6&XL^nVNi~}?UYd!VPy6*ee4v!Bn zMQHBFFElQz+ltSXTSRz-T|6((j5-1gcC%&|F7zLKSGy-tdRRPKPknz*;LmtmxjpPX z@R&PBuN->!`g`2?4czwLPm06|Yxuj~&7RZ$nmh=)3xXsx8UY9*8Gp~y(Sc~5MT8K- z%_f~+<1&fA8R5~!xDaxSYY#BJXmR@P3H_aeAg}-gA=$|>V4-bKF=_mjzl0VJdaBc` z-sS`4V5fn7B%GsQXdN^(%P<5v7v!<3FzZ;Gwec!dbG|7Lq!qKu3YTUW!V%m`Q_1I+ zJvLZh)v2qoQPaCh*q7*n9VrKG5TX(98+UQ?Bf$HPWOHp<3q?hUm*6%61S}*L1T?q> z3I2nCB!Ynb-G+dWgCzc^tp-W=_ZTP$h;VBNn7_w>w=ch6aex2+*Ee+hI|z7i4;J_x znhW)x(a@o}(En*eOh3VisY}Spg1^d)hla;einJqSRJYA(wD`YfjF^%*o73DU3u;PA>TNjRn7&q}1Qw;Qxdutz2E5 z_*qyyJUo~^IG7#ZTC%Y5@$s>+va_(WGl54ixp+Cans_ofxKRCtM&0WmiT06N~ zJ35d*;WaUJbaNG=q{TOOUc3IZ??b;vOGOuVPj@x`QL$=ds_ehfIU6= z3+y*ve~}Y>LdLKB*4i9A;iqW{vkCqt@JHXj)B9_@nz@Uko!irJO$TdNVfMd4{;T^L z)DvxfO&9aG5{~xvU{b>W>Q#{C|MT#_0adI$&F!=$t-+8kPgCUM;Qbrwzn}bXA$9(R zWas044*BfK-;jbVPilFlroU|9cQ4oogpmYU{xK+Fq@yz}eh3I24p~Vt4Nu5}CB#|# zpLgviZcVsJ6r4nIZm5OK9}w;n@=!j#d5=KI@ajDVA$wAq_`4z8k7^nN7+4N{Nnaw~ z)YGZ=7al(Pdz6{A>@D3Y9L*ig?d%_UXJ2KzT+VG+9{5~7lv%S}Z*`}XBhbL&sE9)T z^AR+SSUS;2bs32JycZG{DM%Bax!w@zpMk$Yg7A>EC1!spT*du490mnJ2>nmI$w&kk zwVWG5c7I@K4;*uOMjedQ>PsM`i9E-0=j%WE!3g312jTyn3|}YxN2F4;PAA>?;gQUZ zbc}knjQRoh7x{V>w&~hIVaWLJE~fQZ>?*qPOvdwG)sThn7?m~GlrEm-<4u1tuqNFZ z43=kZc+)-g!OIwlE;kSgX(+$lYbOhzx%v2q*J55qI%iOKB!2io?ZUU@rOUgoVQz+6 zzd&r|i`Z=ys#z@47)p0v#!8`QT_+VYY9tP$p^)fQD4c+WDX)Dw7T?%dn6lOnGB<@X z)h)7@w%+{eEE_5;k~0RKZkYfl3fH1IM(9R9y3H7PY;uKV2PF6mc={_iEJvG-?(rJ! zOYp{Ix@P>ImO8B{hbmUb>a?DtJu9yppWq#&Dr-AmM}ydhoq=Q9%$7I$#XBo@8AZw` zcUInLT(*zDc#TjHGLm|KPbs%O6lu&dPI5R`Hi$jQ)1k|y&@S7gxZADA9;Jyag*Zoa zs3|oie=(tcq&`~p+k#uPH2Jpq&_ct0804D%x&G_F93%r~9fF-3`y%l(*83ePL9LQ) zVheA5%f%knJ*Tu2q^{;jFTR16h`p!K|=zJkyoSUe|S|8A|5Mw z=IW5k%%9y22>v$$fnv5J|2;X2i zSd3Z)8FebD_1)*p*OUWp)a!44eeEQ&EybMHvCML6T3BMXtNHobq-vPkHb_zc{bMh2 z+zwk=qyz zQN;6=eywL&Mx@KwWT7&N*d>*DS56?`E9DkIMx|qfB_~1F4@T zM*g6!wa@u6FKv*OdDlWq<}4H*I{^^rRQ{ktl5%mu$WY2QQ?yay_yKk0df)Tq`@XB;KU zBDn2#>BwUEwu@Gn?e4r-1hua1{=m|2ClrWzJr*vEqr|tBr~~gh>a$#B#VzwtUbpPM zw(|JkQGYtX(D@`kry;i9q4dXBEZ(Y5t{-X9Th*%1w{||M%#yLs35$~|4GI0jtIJ*e zub>j8z8VOPw%cSxF`R~gV0b$}1D6h21k4BATX}9V7^Nwl-s2!*Y_{AVIOaG@p5s4F z4AXtqB>cN^M=;?^H#&Zkgpa9cAsWA{w-fF#D#O&ucCF zcL1XsBY>15^xHQB5Vu};v*6{&6bW2DT(yamYFAKZZQjyj86RV$BNPJ*5|oh8{f|Q! zLd3Ssr@E+OcqvsPGm8LstMEZ02~bF!>g|Ew(?IKn(JFx%gg10fYp4*kuL}bZq9NZ?=WngF=25&>jg?HZvw%3v>y*= z%zEe*d0@K(jRqVl=vG^)*3S()OoQ|aQD6HJLymGhA z(=Ez#_qys{U~vu2yyr&rWUSCidBb-4nrf`K z#`Q!>>r~p6rO2($j?gGal-SNuz~k+R>$1~9q1Q{`>$*nG`pK+Ajb@hHaHs{NyLJ3- ztNOOPEf(kftk=_ex|;}g2LH9zs}@IX z@Y;DcM|{!!dBi_C^GMnAUlm4*{S3) zdN@sq9B16{81)))`JuObntWa1DYTR6@&Qw6L-K}u`Qn=gDm=i~X+});&^gv8G!|^1 zepeY$dycmZ=xNH6PfISs`oO7R7K`8GCank`20s{D^WE4Rz-tr{0TZw%Axv9#k6E}#4(+ym_6Yh2}Cifm>3 zfXf5Ta&Jw~u@Ewi%bLk|INFtOWIaKHM$1~*W=OthLg!=0p|paZTy1fbgpPyI_kDYt zajx4y!;WZ2zB>W}lV?0QGGof#J6RqhZRrnXvTbvB6^xla1y8xbHEDW{QwR+K z1~(nYBJN*VVLF`(H+i2$hCO$!!IqBO;^q#IF$j%~=$GH2OO7ckj!mh;J)#P922HlK z?D1I-Piuu`w1WQO8hU`|s^e5d`s)4V0*mjS-pViApC|>A$9;;o;5A~*g^;YSLsV`F z3hwpW2ha|_*a0{wx325&H<()Pz7(}*48dY^Qf-S!uipX3?N?#r zONDdi`ZJ2L(D(88=)SAaK^9ctJewc~f=A%|Oc5LMX<7WJls{KT^Hs}V(q}5t#=T;WM4woZT@dk-2$~rGOUb;9DHe~9T zUCYIE)^-u_EhlOLfO;6l=LHhxsd3zVyU^8Q)%iRB$NQ_gCJB});nskqJwq)b6fDU# zWhTAlM8R*#c(9!KM@b0F@W4SiquCPUSeKLWSbtaG)jsVNtM&S$!q3JDP|wA3pp*Wo zg9kNK;%1ibX@5}U%xgV++|Su<;00c~@=#1mocO%@NI_(nHf<${SaS^Hk|yum}nwR+w(-iYb>?CIdcfw|V6i#p#kb zxLd!JO^{1>P3EE>Nl_G0x0UxlNx3|;B%8)>8$8=rbo8DqCH7AD#3G+SKi;nzWxm0j zpyqNM=qHz%azcwoklfAa6UM~AX7u0Y$Vsa~vMFY4&g`DJf{8klPQrkg&>(TS^D=yK zc7Gf$lF9XfiTDQGSiHJS{b=zclXkK0WM5NPY`<5qjXUf=Vc3|iCI+-=^jmcfT3I{fnZ>V%=P$t>!%FJQTjn{wYxh!k^&zV zPBT|3UTI%&KTVBdc{21<33WX3ud3{eQp&MUA^gMN>aQ!694Z?Pv_TZU1M1moL-NvI z{6mu+StDbvPL^FGoX!bd-XOD#B`o}E-lH&lLteAj&A^$?)`?FU_7fj7kPpGp{)F&s z8*nYQ+0lh!qAUwgDh($ue;GFn59!$}u#9==f7KLj;IYJ&={|2A6gbX#4>bj|U%wHv z27d3|8mFb0+tI5iNx3jOI1N11uNCT$jz(?pLvD`5&$~dMjfS8pm6%mIa!R!&pie{T!x%mc5FcTs>gNyN|Re#Oa%2 zUMC7`!l+c{a=OvkB*g-&Ur6UfW)dyiG2my~W@b3SVp^gi72# z&ewAfktsH{Nwg|9&@xS&AYfF*lC63X{DboZ6au(2W}BblX+4Q1q)JrFmxi~5Diu_v z>H)mSJNL*fpjS)`_F!1rq?FF^xRGz(5jvvB+v;Ub_OCePXbGBDh4=Jf%n`kjZoSVwm4Tn9#CQ*>2>n@a$)H(n~@cR=NU#(J^B>gcYp z91$tM7k!&WoPay>!@BYWCQ;TtWAXxmMYb}%bq|UW;s7cFg7$L}NT}8ZYKJMSfu+!o z0)*tj;}C;bR7q-9*Hgv9HD@(tDEv5nZJ*%ch|Ry1wWRN^4+3}=sF85#uBlk0K2BiD z>i~j?y!5$G! zr_ltOZ%0uRb4&+KN3E}rD|nULn5yaen7<;v5z6F%3B!3;7?G?9lgH-lnDQ8~3d+#j z8H6S~4s==#g2&s7*|VD8i|(dZTwu784w4LvPgC|kP3Y!`Lx^9GCaZG#v?fAPqmsC; z!ZBt~UGb*I#b5pmCRoIum#&7|lY$^JBA3>2w=O*3&(HVYa9m& zHA^P)j&n2`-}?sN*(I4q?mazQWN#!k&kpAx`KS!rn0!j)5hC*(K3r^W7f4pwTkWpI zDc~g1h~#N+l(!w9u0DB=5Vyic5GDO8H|1d^c5;JZrQ4V_tEW*RAG1A0?YbJqm(!Na zfeCnIKSy*r4@+iXLZrX?G1m9ZICaW{22A)p4HBAF1G|-aYsrPnk}P(a?y2xQAb1O* z+XKO7okzcd%Ci`!lzx$Ii(aPFSa?1^;0u#=qDr)seAYAvHMRIQK=k{_5lT%}i<&Q| zOlEBGfj`z2+R`C5y_HOe$aLDH`>|&PXT_*jWazoivij$V%{QX6n~TmXA0|YC(d4|m z&{Py)XcFl#5!m-#%OBr6H>kE%0$^-W%oHN9xm*&ldJ+v05bY2lWMQNikA?S5(2)~K z#u+041U5S|Fp7f8^hMS5NFwQp`f6uV*jc?oht98VZ(L`$&U-)56tQjb%sG4WmuTtc zDXEvH5}3pg3DrvP`0`I+zgJb0%LBb4O08gmlEb={eNgS}^iQz7=U!L~_W>u?bo#(V zML;~k`$`99>T~?Osq%i(+Bq%t0H~?cl%M;~<4nj%gTZ38UHrf7*v3}I6)yFohGYQ* zNZ@_P`q^5KpT=VK1rpr)Sc%Y8xRxVg`Td3lMLTwSl*dw&OOx$+>O>xu{dDqk@U`J`mS%n{0! z+6rjIL#`ZisqXDYo!57*T9mM1>pVB@^bzn9er}dKR-ly^NZ}YWZ<_|X1FyxxHA~a& zP@ED`HR_BC5#%qNT$#5CrKSR-ImWBW9VtZ>U!&}QCXE!K_6lgY+YZgZw;}vuPd#hS znv{ACNxe%ES1>B6GjA3v#GlaM*&~Tveo(j4dM%@p%#&f7n=Rij zD3H!+5v8EF^D1#UAt!{|Uq$C#Fhu%Yfkb-m_ScZoQLhXJ z(KRscJjEX8LZ zJS2EungAjQ`1HlP*<(^s)47d^L9~nz5+x*lv!mblh_f&RM$bF~QpGfy29jdh~0O$2YdKfdp-8YUv-E@M|_qr`6NN>HC_0s7`NU6tjgj?f^xxQ7K#y09ae=|Lb4B!ErznfRU9jNUY7P0o&9WtKm5uh^9} z&Y7MBFVd?S)eMM2ap3XVRPMOGGkCMdm|l7uH!h~u7Au!4#azVuR_BhysG(h>uv*qk zw^H)xoyVE^XyhfP&Ohqgmb0h0B0W@K zZr@Fw;&jH8byP#(-pw7P(||#MLDHnRzfrve@EOGz(_i{+2#^6)l25s}fr6T1)QaWx zD#=L>?5xQ5S9Hz_w-A+vm%!srbQT*z`Y>}0qIaE2R~$?J57~eb@D6&e`;E=?h{)sJ z`u#+qyg+`@dd6i#e}?4d9^(alp;-v1b;is)UTlx|q7|wMLDdE`%0W z?BtGeU~qr0;5J(jGmL)hJL`05h+ems%J+sm;)5r3Ut zxHqxL)E(WXK?zbuLIIl@6f+}z2zn56Yq0ONtmTOGOuD_c_iF6U)w7-Fl;xU4FE}23 zN6Zq&K~wH}63DE_NCEoBpU1ry7M7=hdNRWV0aMkOByTD5SL797sA0sYvrlH2L`|~q z#1raXSY|g+`%mrWT!GJt=#FLJ$?AzRTq+IySv@g06-BL=U*$#6#zwu5@S_x+xA|K3 zftV*It3A!ETy9ZAT|g$UD5>@u2*K-RFYnz!ef`bmGR-j-YmyUTROk$}L015BC1V{9 zF`8_SIa?K{r|cE@fYnxSXq3T#krBAPW4&k=(m}^|rDfxF-PVin(Ry7fO1KBut`591 zKQaUSsyte+7Sr?Y+VU-v4xCSO^gqkUN}9YXUpPY$;IMGCBJ1s2t$>Ix->BiusM+al zE;pRNtJ?X&VA;2$Tg=xahg;9ZBj?87qD+qMNu918uja5)EKPG31!I+>6b3O@ zQ`gRlvg+l*CJx7EK~@u68@JU9P?Hls#&~1Pmtd__6YFI1Fa#eD`e)+NS2<*c9a_JM ziJaZyH}!pI>>V4W(mCBAacy!NaZDKJcQf#?hvJm}1f+%}8(o)|Ue<5*1w|bcap`fg z>}wJYTUoKOtqy+1f+Tx!xX8Mt=(LM1eKvc3f>kjc=YGM)R*45azR6?Ys~l~nz_uHe z<5ftn?Tdz16SuhEJ-d99bt4$ z+BrOQaws7I0KnY6xU;4Ca*<_?2T@6}ugo6lh zh)||8>Z)UMUx;Oo2;c7K8954Pje>TgV6Zg9WQUX|yQ&Matcy;N#sU(HvaLxT)PugE;^Ys)O!0&vVgQi%K*V0$D6JE+(2|L!X zzt>-;ZO5;*4Rp2fU?<9ZNaA!$g}s{Q$;r{@XiSG#kfyExPAqUTE`fKs*t^FHLoI|@y8E!o-PY0)iT zd>**f)I{}DY)=MY-=m+=h}*@sdRa%m5F=dpM8y;PXuJyPk2AU508ip1y7*J{Kzx6) zFIQABJ2)L8=3>R^q9nO{2oMp(Wu%lP`kK7|?NU4jx3WLMv6<5ZwvA1j^?I$~%D- zx2?M5c!Irrbi7B?B5|TwD-VK3I<2Mcg5Nw6%g=3x;FtM#b3Aj178z5D| ze2WnyKJLb87zl8bf;OujNVOV>=dp}fVf!pEqA0a~ci)UPt8&}dXJ6oeu4c*EcI_)N zU*bX$#pMdq>@_xcQxDM#|Hw{BKI~vclTQ0CRyj6fR5L=CpDfxLeA$3orGnjWq_aM! zZk<4uevQF7fgVpJ1=UaLvFO~B#|eL+i6meKDMFXq-i+)-HR@ zw;gsnA3zjlwZFGBy#SWkI2Km zfe#eb^_%w?xP%3cnq5?#6ozSF`(eK7M-rkiE5ZzTiQJvvTKkP2iSCoJ_pzx-5F_sl zrqfNPBkoieVs6kop}!LIpX2Mf1Y#xDsS&(syU9xNVXztA@FN;@{#MbpnByFy3Za}} ziZncUICrx&?K^BK%4;;?U|9+!$R7+}Iav@woLXW@aWW*q%pH}d#qDiA?@_KdtjUj| zc#|E8bWhfxa$=TBYXjZjH6YIlf~5A$LsZJvrg?x+J(Kw^Jxq*mX(MzdSw?evJWImfPm_=SVCQsbczQ>$Y9$f;Ji{x+f8pEkkJb;wB8AH_3B;EBOc=WLbX)dtjrmFA zqj7YkvJPt>+R29GFmXWCTiv8xUXq=`TO15mwMH3Pyc!FAJFh}$;TOl|_y9Q?U^qVD zT8Xv4wa0uNm2mIF0uwUaoRQr2tb1m8POl9{-{~UYhDJ?XE-rjUQ_BGN_jO+9WHIyN z{&?(rEFq{9mk~Z%mGq&Trz@5AjTf^i)j;dU<|AAc<2$IuyF?-HK#NPznSr&E?zC3v zKHasS%&mRO@J96sf(nMHhyfBw!zF6MXA>$Q}jglh54+IUBIcr~~8`Skv>#g(VP|LkmwQHHO zPox2)>1W3q6Qk_rdxY*pLG;4{pV_(`<0!hkj9KpKthxCCiu~_{q*Bz4bzvs(P)|}z zkeb%7mJGiDX#?f4xn6+~5~KJP)^LW0>F>+srhc)?xh{u)wrfZC_nAmUYfn--y7ZsT zEn46&z844}B8M&aZtS}oV3G@`>OCHk2myk~8ivs?ZOaMMgI z&JQ@U{-LnO#1vvhKjoN*i_Y~LXte;WRIo&W2#z<5{VtP|aef7Q>}()WF1;`(T^wY! zVSrSxdn~S>EKY;6PTwt3i}E__E?tbjRCtzdV-n(QhY{MVr00obpS&Jt0_{ejFlf~=|VisE1B z^W6r%d&x&*C}Pmp8x}Rkx56sjmi7F`1Y?%IN+W zqy6YsWeBB@#5NIFWS7;clyQD$HoFlsIF1!@7Aex0FxHzmFA>~P`6I7hAKMTl(hvs0PQZGRS1rNg2i*uuGA{ATU|L%ZI|#5s2`g~hQK z(kBrbxyywrn*q8!cM!@s%bD1~;^OPOze`t^qW+JiEA_I*;QJ|tWhR404QyCB*!2d? z(WHsAcbNn;gmrA2Hu`o^P;5u0hB0ro*7-NMr5YS&xX6N1Q`j7LD)He$UB+E>{^HI7 zYt}T9>4S%5rn6N2YA~`mV+*bfR-v&Wjdr^i1|3jA3Q(0P&Fbs3c`GoK`kzMlHhyaVe=UP|@)8=9s7I<&$ zJnPVOV8drI+NP_$<5rjrI2#Z;AtwF_G8N@LDHg9n17Gp$fYz45B_B1Sq>vPPP1oy@ zov-i>aFUty@V>P@-25Uv&X`6R>kYRsm|ADjt^Pc{0WO0|s!LAt@t^v^U&Bzg;mbyz zIX~GAt^S8{8j)wizcs49~c4PXre?DalHq zc@wk*x7W8m+EvS5k4kxf%Y`(bi7tp93tSqNH?;3YcMlf?^#10xiuT`_aKLj?Qng4X z9bgqRZY0ZyEFx-s<{QS1;G)H129e18G+PV;SvzK;7rxI(81sY0T}*8xjSEvm!i}%U zw3`N1eMIZ$zG17;D&* z$;5xjM?nIwk0Hg9-JO5v(gEtLp>sFxQtMR{BKGxxixEz(@2K7nrT{3l30e_U8ruu`!ApOwB z&j(QK_j#^Il3#rf%@_CYbVtIThbiMzu!?9|MjH=LhEwh-82xvMJAVZq}hd|yuy$+$4!H%YojM?=2! zQRVNy`gc7*qGRob;wH>`H*|o9@~zE8dutET`+(2S>pE=>%+QT0n0RdJQv@w^%w0}rP{f0rX zxGg+YeEG9kR7TldCqq(9%M$;^bh{^BqHzy+|m8r5tI!NC7*?+uGya|ZJ;TMy^@M9kE~JBI`@`*DwQYZCdg>`WG0CIC zWh7G_KKHq&P&->t%0*zO=1|Y_oJh+Pk;+-)@AQ0Y{{LhE;1!$*Y`QdWYC4Ru-*)&t zbDUf^F!ha*w;>(QJAn(&0!{8yh~60T20!@KWdBU?x-4M9e^YNaeyX<6`qz{pVI8mt zd_?Qt^vAca6ch)=$I?E^T2$sLaycmw<*9bQ% z2C+38kjke6I5d07Fh&-$@O*8YSZAU9&{dx!#|naFcwMx4*4*-fokf1Zu1axkvqy<| zmzRhH14iP7+A9DezImhL+30Ve@aPk3~neksNN=L?(TDz zXD(_gU`u}*Be^Nc-zFraV;oRwtMNQe%VH4dp_+6>e7q_6x!QFfTW%0*798C1trrvB z9m-HB#=<-vWa2+XvFfE6{_A*;Q{-LUS2NkOe6*iyGuHknj#|C(+r0{!wg{HqQ4f?EuTvzj)g7yJI0oU*tQ%>lDiB;Y+<^+W^K$p}`IK3o632#iVwC@` z2R0r86X~=F>{$K&midqT5fu|mgoX+QE?m`x@R@<(SfzrAyo_9yUZ z==+>M^e6{rWHO42K;e%CIuJ@7%m)F-tTC(Hb;)ycVFJsFIv*8I?`@+`>hn3pfwfMA zQnV8S-r@dh4Y{wN4$u(5!(B^!KL0TsxtfQZlVE5RR^$)C4#Lb6g7MVub6z?9fk+|O z5Asuo@toHxxc2p53Ra&)o1nx)I`FdB$ts_7tbtff3noy?51;w%4+e0pq(!Y*XD22X z{`kp6kOR~t08H6^Fre*umKlVHtl;qku&%x!@hmKf1{p$45`zIQ2YlN8=ubvguzUhI zot*Fdr@3r6HE_goTzP=3e?%1?MaiUjhXb4C}~?g|qM z7m_{vT%ft_?NA9%44`EKnV)5ZVBX1D=fI-NwXFC93u|@zCL9=zgk>Z0v-AcGilATt zrn@`$^|{=ThIEWipCrv^+4x8D3JHtxpJ;1j^yRNmJJS(kNfT=(c&MqzB~tRHhhyoE zAlB#S>*3g!X(tLiB0U?1HJWGnau$MxMyB`V~|76uge3p+nH#UcOmM<~>o@ZN{s`676_O^7mX-`J~R|Yyug^trp{SvZ;+kiT8GgmbENHn3~y1VhdcQQ^ZHlKpf zdD0;juq{mrm96FW8Lds}%*?ZiKbceHmkOzW)^_i)yBnjm|I{b`JAUaTz*n?3WHZA` zilEh0+{Nbq*37IeLin-^{`0i}EQQpB_RR~5%*nOJ?|%T~isG=6M`5-8sYWJjR&qO? ocRuxhn92VP{T~U4;#>zR literal 0 HcmV?d00001 diff --git a/docs/assets/blocks/set-effect.png b/docs/assets/blocks/set-effect.png new file mode 100644 index 0000000000000000000000000000000000000000..5823ddbc648c76096299f22e25e5270267a831c6 GIT binary patch literal 11545 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 literal 0 HcmV?d00001 diff --git a/docs/assets/blocks/wait-arrival.png b/docs/assets/blocks/wait-arrival.png new file mode 100644 index 0000000000000000000000000000000000000000..23e5ecec656c72b6487f2debc4b3f52c5b5b57e3 GIT binary patch literal 4204 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 + +Visual blocks programming feature has been added to the [RPi image](image.md), starting with the version **0.21**. Blocks programming is implemented using [Google Blockly](https://developers.google.com/blockly) platform. Blocks programming integration can lower the entry barrier to a minimum. + +## Configuration + +For correct work of the blocks programming, `blocks` argument in the Clover launch-file (`~/catkin_ws/src/clover/clover/launch/clover.launch`) [should be equal to](cli.md#editing) `true`: + +```xml + +``` + +## Running + +To run Clover's blocks programming interface, [connect to Clover's Wi-Fi](wifi.md) and go to web-page http://192.168.11.1:8080/clover_blocks/ or click the link *Blocks programming* at the [main page](wifi.md#web-interface). + +The page looks as follows: + + + +Assemble your program using blocks in the menu at the left and then click *Run* button for running. You can also view generated Python-code, switching to *Python* tab. + +The *Stop* button stops the program. Clicking *Land* button also stops the program and lands the drone. + +## Storing and loading + + + +To store the program, open the menu at the top right, select *Save* item and input your program's name. The name should contain only Latin characters, hyphen, underline and dot characters. All your stored programs are available at the same menu. + +Your programs are stored as XML-files in the `/catkin_ws/src/clover/clover_blocks/programs/` directory of the SD-card. + +> **Note** Note also example programs, available at the same menu. + +## Blocks + +The set of blocks is somewhat similar to the set of ROS-services of [Clover's autonomous flights API](simple_offboard.md). This section contains descriptions of some of them. + +Clover's blocks are separated into 4 categories: + +* Flight – autonomous flight related commands. +* State – blocks for obtaining the drone state parameters. +* LED – blocks for controlling [LED strip](leds.md). +* GPIO – blocks for working with [GPIO pins](gpio.md). + +The rest of categories contains standard Blockly's blocks. + +### take_off + + + +Take off to specified altitude in meters. The altitude may be an arbitrary block, that returns a number. + +The `wait` flag specifies, if the drone should wait until take off is complete, before executing the next block. + +### navigate + + + +Navigate to specified point. Coordinates are specified in meters. + +The `wait` flag specifies, if the drone should wait until navigation is complete, before executing the next block. + +#### *Relative to* field {#relative_to} + +This block allows to specify the [coordinate frame](frames.md) of the target point: + +* *body* – coordinates, relative to the drone: *forward*, *left*, *up*. +* *markers map* – coordinates, relative to the [map of ArUco-markers](aruco_map.md). +* *marker* – coordinates, relative to an [ArUco-marker](aruco_marker.md); marker's ID input fields appears. +* *last navigate target* – coordinates, relative to the last specified navigate point. +* *map* – drone's local coordinate system, linked with the point of its initialization. + +### land + + + +Land the drone. + +The `wait` flag specifies, if the drone should wait until landing is complete, before executing the next block. + +### wait + + + +Wait specified time period in seconds. The time period may be an arbitrary block, that returns a number. + +### wait_arrival + + + +Wait, until the drone reaches [navigate](#navigate)-block's target point. + +### get_position + + + +The block returns current position, velocity or yaw angle of the drone relative to the specified [coordinate frame](#relative_to). + +### set_effect + + + +The block allows to set animations to LED strip, similarly to [`set_effect`](leds.md#set_effect) ROS-service. + +Example of using the block with a random color (colors-related blocks are located in *Colour* category): + + diff --git a/docs/ru/SUMMARY.md b/docs/ru/SUMMARY.md index 73dc37495..a051cc678 100644 --- a/docs/ru/SUMMARY.md +++ b/docs/ru/SUMMARY.md @@ -49,6 +49,7 @@ * [Визуализация с помощью rviz](rviz.md) * [Автозапуск ПО](autolaunch.md) * [Использование JavaScript](javascript.md) + * [Блочное программирование](blocks.md) * [ROS](ros.md) * [MAVROS](mavros.md) * Симулятор diff --git a/docs/ru/blocks.md b/docs/ru/blocks.md new file mode 100644 index 000000000..121ebc4e2 --- /dev/null +++ b/docs/ru/blocks.md @@ -0,0 +1,110 @@ +# Блочное программирование Клевера + + + +Возможность блочного визуального программирования автономных полетов Клевера добавлена в [образ для RPi](image.md), начиная с версии **0.21**. Реализация блочного программирования основана на [Google Blockly](https://developers.google.com/blockly). Интеграция Blockly в Клевер позволяет понизить входной порог в программирование автономных полетов до минимального уровня. + +## Конфигурация + +Для корректной работы работы блочного программирования аргумент `blocks` в launch-файле Клевера (`~/catkin_ws/src/clover/clover/launch/clover.launch`) [должен быть в значении](cli.md#editing) `true`: + +```xml + +``` + +## Запуск + +Для того, чтобы открыть интерфейс блочного программирования в Клевере, [подключитесь к Клеверу по Wi-Fi](wifi.md) и перейдите на страницу http://192.168.11.1:8080/clover_blocks/ либо нажмите ссылку *Blocks programming* на [основной веб-странице Клевера](wifi.md#веб-интерфейс). + +Интерфейс выглядит следующим образом: + + + +Соберите необходимую программу из блоков в меню слева а затем нажмите кнопку *Run* для ее запуска. Также вы можете просмотреть сгенерированный код на языке Python, переключившись во вкладку *Python*. + +Кнопка *Stop* позволяет остановить программу. Нажатие кнопки *Land* также останавливает программу и сажает дрон. + +## Сохранение и загрузка + + + +Для сохранения программы откройте меню справа сверху, выберите пункт меню *Save* и введите название программы. Название программы может содержать только латинские буквы, дефис, подчеркивание и точку. Все ранее сохраненные программы будут доступны в этом же меню. + +На карте памяти сохраненные XML-файлы программ хранятся в каталоге `/catkin_ws/src/clover/clover_blocks/programs/`. + +В этом же меню доступны примеры программ (подкаталог `examples`). + +## Блоки + +Набор блоков приблизительно аналогичен набору ROS-сервисов [API автономных полетов Клевера](simple_offboard.md). В этом разделе приведено описание некоторых из них. + +Блоки Клевера поделены на 4 категории: + +* Flight – команды, имеющие отношение к полету. +* State – блоки, позволяющие получить те или иные параметры текущего состояния коптера. +* LED – блоки для управления [LED-лентой](leds.md). +* GPIO – блоки для работы с [GPIO-пинами](gpio.md). + +В остальных категориях находятся стандартные блоки Google Blockly. + +### take_off + + + +Взлететь на указанную высоту в метрах. Высота может быть произвольным блоком, возвращающим числовое значение. + +Флаг `wait` определяет, должен ли дрон ожидать окончания взлета перед выполнением следующего блока. + +### navigate + + + +Прилететь в заданную точку. Координаты точки задаются в метрах. + +Флаг `wait` определяет, должен ли дрон ожидать завершения полета в точку перед выполнением следующего блока. + +#### Поле *relative to* {#relative_to} + +В блоке может быть выбрана [система координат](frames.md), в которой задана целевая точка: + +* *body* – координаты относительно коптера: вперед (*forward*), влево (*left*), вверх (*up*). +* *markers map* – система координат, связанная с [картой ArUco-маркеров](aruco_map.md). +* *marker* – система координта, связанная с [ArUco-маркером](aruco_marker.md); появляется поле для ввода ID маркеа. +* *last navigate target* – координаты относительно последней заданной точки для навигации. +* *map* – локальная система координат коптера, связана с местом его инициализации. + +### land + + + +Произвести посадку. + +Флаг `wait` определяет, должен ли дрон ожидать окончания посадки перед выполнением следующего блока. + +### wait + + + +Ожидать заданное время в секундах. Время ожидания может быть произвольным блоком, возвращающим числовое значение. + +### wait_arrival + + + +Ожидать, пока дрон долетит до целевой точки (заданной в [navigate](#navigate)-блоке). + +### get_position + + + +Блок позволяет получить позицию, скорость и угол по рысканью дрона в заданной [системе координат](#relative_to). + +### set_effect + + + +Блок позволяет устанавливать различные анимации на LED-ленту аналогично [ROS-сервису `set_effect`](leds.md#set_effect). + +Пример использования блока для установки случайного цвета (блоки, связанные с цветами находятся в категории *Colour*): + + diff --git a/docs/ru/clever_blocks.md b/docs/ru/clever_blocks.md index 942eeeed7..ab9da906d 100644 --- a/docs/ru/clever_blocks.md +++ b/docs/ru/clever_blocks.md @@ -1,5 +1,7 @@ # Блочное программирование Клевера +> **Warning** В этой статье описана неофициальная реализация блочного программирования. [Официальная поддержка](blocks.md) появилась в образе Клевера версии **0.21**. + В этой статье я опишу процесс скачивания, установки и запуска блочного конструктора программ для квадрокоптера Клевер. diff --git a/docs/ru/leds.md b/docs/ru/leds.md index 63215898b..72004d19f 100644 --- a/docs/ru/leds.md +++ b/docs/ru/leds.md @@ -14,7 +14,7 @@ > **Caution** Обратите внимание, что светодиодную ленту нужно питать от стабильного источника энергии. Если вы подключите питание напрямую к Raspberry, то это создаст слишком большую нагрузку на ваш микрокомпьютер. Для снятия нагрузки с Raspberry можно подключить питание к преобразователю BEC. -## Высокоуровневое управление лентой +## Высокоуровневое управление лентой {#set_effect} 1. Для работы с лентой подключите ее к питанию +5v – 5v, земле GND – GND и сигнальному порту DIN – GPIO21. Обратитесь [к инструкции по сборке](assemble_4_2.md#установка-led-ленты) для подробностей. 2. Включите поддержку LED-ленты в файле `~/catkin_ws/src/clever/clever/launch/clever.launch`: From be6e894b80ae4cea4d3c16fdf667e85eac6caef6 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 1 Oct 2020 05:09:00 +0300 Subject: [PATCH 04/11] docs: add led events table --- docs/en/leds.md | 30 ++++++++++++++++++++---------- docs/ru/leds.md | 30 ++++++++++++++++++++---------- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/docs/en/leds.md b/docs/en/leds.md index 76a780fb6..4cecd3dfc 100644 --- a/docs/en/leds.md +++ b/docs/en/leds.md @@ -95,16 +95,26 @@ disconnected: { effect: blink, r: 255, g: 50, b: 50 } ``` -The left part is one of the possible events that the strip reacts to. The right part contains the effect description that you want to execute for this event. Here is the list of supported events: - -* `startup` – Clover system startup; -* `connected` – successful connection to the flight controller; -* `disconnected` – connection to the flight controller lost; -* `armed` – flight controller transitioned to armed state; -* `disarmed` – flight controller transitioned to disarmed state; -* `stabilized`, `acro`, `rattitude`, `altctl`, `posctl`, `offboard`, `mission`, `rtl`, `land` – transition to said flight mode; -* `error` – an error occured in one of ROS nodes or in the flight controller (*ERROR* message in `/rosout`); -* `low_battery` – low battery (threshold is set in the `threshold` parameter). +The left part is one of the possible events that the strip reacts to. The right part contains the effect description that you want to execute for this event. + +Here is the list of supported events: + + + + + + + + + + + + + + + + +
    EventDescriptionDefault effect
    startupClover system startupWhite
    connectedSuccessful connection to flight controllerRainbow
    disconnectedConnection to flight controller lost
    Red blink
    armedTransition to Armed state
    disarmedTransition to Disarmed state
    acroAcro mode
    Orange
    stabilizedStabilized mode
    Green
    altctlAltitude mode
    Yellow
    posctlPosition mode
    Blue
    offboardOffboard mode
    Violet
    rattitude, mission, rtl, landCorresponding mode
    errorError in one of ROS nodes or in the flight controller (ERROR message in /rosout)
    Red flash
    low_batteryLow battery (threshold is set in the threshold parameter)
    Red fast blink
    > **Note** You need to [calibrate the power sensor](power.md#calibrating-the-power-sensor) for the `low_battery` event to work properly. diff --git a/docs/ru/leds.md b/docs/ru/leds.md index 72004d19f..ab353c3f4 100644 --- a/docs/ru/leds.md +++ b/docs/ru/leds.md @@ -95,16 +95,26 @@ disconnected: { effect: blink, r: 255, g: 50, b: 50 } ``` -В левой части таблицы указывается событие, на которая лента должна среагировать. В правой части указывается эффект (анимация), который необходимо включить при возникновении события. Список поддерживаемых событий: - -* `startup` – запуск всех систем Клевера; -* `connected` – успешное подключение к полетному контроллеру; -* `disconnected` – разрыв связи с полетным контроллером; -* `armed` – переключение полетного контроллера в состояние Armed; -* `disarmed` – переключение полетного контроллера в состояние Disarmed; -* `stabilized`, `acro`, `rattitude`, `altctl`, `posctl`, `offboard`, `mission`, `rtl`, `land` – переключение полетных режимов; -* `error` – возникновение ошибки в ROS-нодах или полетном контроллере (*ERROR*-сообщение в топике `/rosout`); -* `low_battery` – низкий заряд батареи (порог настраивается в параметре `threshold`). +В левой части таблицы указывается событие, на которая лента должна среагировать. В правой части указывается эффект (анимация), который необходимо включить при возникновении события. + +Список поддерживаемых событий: + + + + + + + + + + + + + + + + +
    СобытиеОписаниеЭффект по умолчанию
    startupЗапуск всех систем КлевераБелый
    connectedУспешное подключение к полетному контроллеруЭффект радуги
    disconnectedРазрыв связи с полетным контроллером
    Мигание красным
    armedПереход в состояние Armed
    disarmedПереход в состояние Disarmed
    acroРежим Acro
    Оранжевый
    stabilizedРежим Stabilized
    Зеленый
    altctlРежим Altitude
    Желтый
    posctlРежим Position
    Синий
    offboardРежим Offboard
    Фиолетовый
    rattitude, mission, rtl, landПереход в соответствующие режимы
    errorВозникновение ошибки в ROS-нодах или полетном контроллере (ERROR-сообщение в топике /rosout)
    Мигнуть красным
    low_batteryНизкий заряд батареи (порог настраивается в параметре threshold)
    Быстрое мигание красным
    > **Note** Для корректной работы сигнализации LED-лентой о низком заряде батареи необходимо корректная [калибровка электропитания](power.md#Калибровка-делителя-напряжения). From d52175bb300e98478975a8cf4beb799f2fd282eb Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 1 Oct 2020 05:10:26 +0300 Subject: [PATCH 05/11] docs: css cicle class --- docs/clover.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/clover.css b/docs/clover.css index aea9e5162..31e686bd9 100644 --- a/docs/clover.css +++ b/docs/clover.css @@ -65,3 +65,11 @@ footer img { .type_table tr td { padding: 14px 20px; } + +.circle { + width: 0.8em; + height: 0.8em; + border-radius: 50%; + display: inline-block; + margin-right: 0.5em; +} From 2f6d9639c1ebec2b784ac8a85ac4e9a73171dedb Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 1 Oct 2020 22:19:39 +0300 Subject: [PATCH 06/11] blocks: fix setpoint block --- clover_blocks/www/python.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clover_blocks/www/python.js b/clover_blocks/www/python.js index 3baac7071..16b249e4e 100644 --- a/clover_blocks/www/python.js +++ b/clover_blocks/www/python.js @@ -284,7 +284,7 @@ Blockly.Python.setpoint = function(block) { } else if (type == 'RATES') { rosDefinitions.setRates = true; simpleOffboard(); - return `set_rate(pitch=${pitch}, roll=${roll}, yaw=${yaw}, thrust=${thrust})\n`; + return `set_rates(pitch_rate=${pitch}, roll_rate=${roll}, yaw_rate=${yaw}, thrust=${thrust})\n`; } } From 792352d072dc8f38c8ebe4027a552bd0d50350b4 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 1 Oct 2020 22:20:37 +0300 Subject: [PATCH 07/11] blocks: add flip example --- clover_blocks/programs/examples/flip.xml | 308 +++++++++++++++++++++++ 1 file changed, 308 insertions(+) create mode 100644 clover_blocks/programs/examples/flip.xml diff --git a/clover_blocks/programs/examples/flip.xml b/clover_blocks/programs/examples/flip.xml new file mode 100644 index 000000000..503418413 --- /dev/null +++ b/clover_blocks/programs/examples/flip.xml @@ -0,0 +1,308 @@ + + + start_x + start_y + start_z + + + flip + Describe this function... + + + + + + RATES + BODY + bump up + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 1 + + + + + 0 + + + + + + + 0.2 + + + + + RATES + BODY + maximum pitch rate + + + 0 + + + + + 0 + + + + + 0 + + + + + 30 + + + + + 0 + + + + + 0 + + + + + 0.2 + + + + + 0 + + + + + WHILE + + + TRUE + + + + + + + OR + + + GT + + + ABS + + + 9 + + + PITCH + + + + + + + 90 + + + + + + + GT + + + ABS + + + 9 + + + ROLL + + + + + + + 90 + + + + + + + + + BREAK + + + + + + + + + + + + + + + + + + + + + + memorize position + Describe this function... + + + start_x + + + X + MAP + + + 0 + + + + + + + start_y + + + Y + MAP + + + 0 + + + + + + + start_z + + + Z + MAP + + + 0 + + + + + + + + + + + + + navigate to memorized position + Describe this function... + + + MAP + TRUE + + + 0 + + + start_x + + + + + 0 + + + start_y + + + + + 0 + + + start_z + + + + + 0 + + + + + 5 + + + + + + + TRUE + + + 2 + + + + + + + + TRUE + + + + + + \ No newline at end of file From 60755fa1b53f768d126a801c9ab191c5b718d9a9 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Tue, 6 Oct 2020 01:05:53 +0300 Subject: [PATCH 08/11] gitbook: enable collapsible-menu (#270) * gitbook: enable collapsible-menu * Collapse main menu (en) * Update events and supplementary materials articles * Fix collapsed items of main menu * Add Copter Hack 2021 article --- book.json | 1 + docs/assets/versions/clover_2.jpg | Bin 0 -> 74367 bytes docs/assets/versions/clover_3.jpg | Bin 0 -> 64614 bytes docs/assets/versions/clover_4.jpg | Bin 0 -> 69656 bytes docs/clover.css | 4 ++++ docs/en/SUMMARY.md | 29 +++++++++++-------------- docs/en/assembly.md | 27 ++++++++++++++++++++++++ docs/en/projects.md | 3 +++ docs/en/supplementary.md | 5 +++++ docs/ru/SUMMARY.md | 34 ++++++++++++------------------ docs/ru/assembly.md | 27 ++++++++++++++++++++++++ docs/ru/copterhack2021.md | 5 +++++ docs/ru/events.md | 5 +++++ docs/ru/projects.md | 4 ++++ docs/ru/supplementary.md | 5 +++++ 15 files changed, 112 insertions(+), 37 deletions(-) create mode 100644 docs/assets/versions/clover_2.jpg create mode 100644 docs/assets/versions/clover_3.jpg create mode 100644 docs/assets/versions/clover_4.jpg create mode 100644 docs/en/assembly.md create mode 100644 docs/en/projects.md create mode 100644 docs/en/supplementary.md create mode 100644 docs/ru/assembly.md create mode 100644 docs/ru/copterhack2021.md create mode 100644 docs/ru/events.md create mode 100644 docs/ru/supplementary.md diff --git a/book.json b/book.json index 367115285..0cb02fde9 100644 --- a/book.json +++ b/book.json @@ -9,6 +9,7 @@ "richquotes@https://github.com/okalachev/gitbook-plugin-richquotes.git", "yametrika", "anchors", + "collapsible-menu", "validate-links", "bulk-redirect@https://github.com/okalachev/gitbook-plugin-bulk-redirect.git", "sitemap@https://github.com/okalachev/plugin-sitemap.git", diff --git a/docs/assets/versions/clover_2.jpg b/docs/assets/versions/clover_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f4343d0124d75aa60004ab2897777c07b499d3f GIT binary patch literal 74367 zcmeEuWmua{(`YDdDNvwATb$z1;2NxW1I2&Kz32Qqzs_c_JNNEAGdnvwbI+_KcT;!20nZfVz;XbL2LOQC{ReQj4R|i& zYHH&NzyLf10064@Rg0JrmM$(1AWlv@XAWaCdlM*!sXdI-!`Ok7n}drJAS&VEU~Fmw zb)hwZT3FeMz1l-HzoNA=6MLo2uf(O~APu#&dh6u`RrgZXF!i!A6*hY%Axq^9J7wFpnsW0A z(FzK4a0~Ep@d~`A<>BHM=HwFMUKV|4gs$TXQlq2SH@y{@K=jN$k}> zJLT@~&f(6>Vee$Y$t^5=PlJb(hX;5M0d)4Xb20V++Bwtzi-HW)+0@C(!Ntnnj`lB# z#wPZzE@H3lIsHc$U=B)3|0et&r3Hii)vv#yon0W%|6=1mLOW}CIzTxgP-lBrCsXJ> zIQ_qn?`8LYZ|E<;du~7~PFDAWVr(m8Z|Vwz+PQ#b#9rM$;V`o@0~z!3LV38%_<-j8 zTmry*NeTjux%v5k{6eP2CPKV|LdNF&|DyAs@bBft!zIisD9a_w#my}%Da<1+Eh8hv z!!64rC&kal{V!awowJLvohkHRZCl;9{ZCwh|0^y?+6ijxV(+A3Z*TiAEl{W2 zw0EGDmi~LxX<4+b?9A-lomu}HrhoKW2I^$x1~rp&vWLpZ}4gj;C_Xdh_hXw=y9{f9D-rr$9yuV^TeDv_I^yu-UztiK# zSXfW6upVP$>;bP)5AzWQ#yy|^N{_Lg{KXnJ2F`u;15Awn{t)Bg z1I$PF0MG8RFz;_4K7Rc03C`okxES{+fJcv?W6=>l;g(b*!Zvn%Mf@oyi${v&2gE6s zp0vf}Gw*PArL?It1KDD$`j@yiKE@X>N2+980{HjM+L@RI4{}B|;&ZFVG@)|$3}Rpc z9zTBa5c3Jf!+RF)Uw_XrAJW}ZCVXVwtj$@X#0h?P*ng-T&^hJ^vu|-zrkZFj-+am4nCt&wb9v)Y^ zaZ;L5(-&cN(E3I0v;pVoPXd^%v0n$J6xqg48#*T-pSq=@OPH->&LsqYA!zQoVKG8)!g%`^e6p|&=87QMr)Q@S61 zM0}bj^e<2-7q^e1QfkWE$znr4_rzZ}eo?|66AMigb&bcd!WTH#Ak39MJT2B4U zPd+i%q?;V&XTTkH^O()GX3fzc^8I|^o=WXIEAEt-qs{2}AaeCE=ie93{h9^yB<^Iq zgHFZS8u@XCa-8vrDPxJ^Hb#dbmmRw9-w{3T36^bx7Jm&mo9LB4&z^K(hG+j)K}v*= zaNs{H60j)5A{lO8u!>X_E=nfceN7OVP_zzJv^L0`fxYLn>{}4i z<2og+e(x4Xo7sLS>{!?KnQxbYXEyG1qRy~85fwFB9Mlnjj3AjDZxi%aGo2B6s@_4X z)S#H?x(nhPB`Lay(qFkUs-CL&%{;oPIIb)w?Xfmvy4u$M3NLoYL5C{k(-GU=srp7* zlex+$TK5LpGQLm<`*V?)URj^jT$c-M&e)VfxsG?HEoYTB1vTfL`AL87ok8{bFRT}h z_eeh9*Kd+wwoXCc0a&QK`8iwYH;eQeucO)_tuv^;HaB0jIjOH5&NAh-{!B8;&HCKx zS1wI*?55wV-QC9-qZ+@Ohe>?B12D-tZ;rey^r<(ZXAbR>gt*@U#wO4?>ReAN)eMVq zz3nH~3GmJ7KD}?!zm;Dii)nNZPdu_?*6_}>4wyLIp1n}BWq0j^_PQ~;RTr~mVoRq* z@vbm0uPSGGMZC#wa~LN@;XXs*sPWIsy>@>(=oB`q$i$1(-nto753v(vw`Elk%47K> z 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
    ^J^XBL1L9@iHh^O*E`d`EktiF{LJa( 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/ikim7M^v#_6P$ZfUMjvP7XJX) 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 XUoF8f{~pdPKn#8LZ~IXCzsLUz_|k+y literal 0 HcmV?d00001 diff --git a/docs/assets/versions/clover_3.jpg b/docs/assets/versions/clover_3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..371718a53fa4917988f012597f0624bd3ce96a52 GIT binary patch literal 64614 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 literal 0 HcmV?d00001 diff --git a/docs/assets/versions/clover_4.jpg b/docs/assets/versions/clover_4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f24d44e2c29632d5499b42efd20b3bff722ccf2 GIT binary patch literal 69656 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 + VersionImage + +
    Clover 4.2 + + + + Clover 4.1 + + + + Clover 4 + + + + Clover 3 + + + + Clover 2 + + + diff --git a/docs/en/projects.md b/docs/en/projects.md new file mode 100644 index 000000000..3044fb823 --- /dev/null +++ b/docs/en/projects.md @@ -0,0 +1,3 @@ +# Clover-based projects + +Clover drone kit is widely used in design activities. This section contains user articles describing the implemented projects. diff --git a/docs/en/supplementary.md b/docs/en/supplementary.md new file mode 100644 index 000000000..8f56608a4 --- /dev/null +++ b/docs/en/supplementary.md @@ -0,0 +1,5 @@ +# Supplementary materials + +This section contains articles that are not included in the main sections, as well as articles by the users on various subjects related to UAV. + +To learn more about publishing text in this section, see the article "[Contributing to Clover](contributing.md)". diff --git a/docs/ru/SUMMARY.md b/docs/ru/SUMMARY.md index a051cc678..c71fc2663 100644 --- a/docs/ru/SUMMARY.md +++ b/docs/ru/SUMMARY.md @@ -3,25 +3,22 @@ * [Введение](README.md) * [Глоссарий](gloss.md) * [Безопасность](safety.md) -* Сборка +* [Сборка](assembly.md) * [Клевер 4.2](assemble_4_2.md) * [Клевер 4.1](assemble_4_1.md) * [Клевер 4](assemble_4.md) * [Клевер 3](assemble_3.md) * [Клевер 2](assemble_2.md) -* Настройка - * [Первоначальная настройка](setup.md) +* [Настройка](setup.md) * [Калибровка датчиков](calibration.md) * [Настройка пульта](radio.md) * [Работа с FS-A8S](rc_flysky_a8s.md) * [Полетные режимы](modes.md) * [Настройка питания](power.md) * [Настройка failsafe](failsafe.md) -* Ручной полет - * [Основы](flight.md) +* [Ручной полет](flight.md) * [Упражнения](flight_exercises.md) -* Работа с Raspberry Pi - * [Raspberry Pi](raspberry.md) +* [Работа с Raspberry Pi](raspberry.md) * [Образ для RPi](image.md) * [Подключение по Wi-Fi](wifi.md) * [Подключение к Pixracer](connection.md) @@ -30,11 +27,9 @@ * [Командная строка](cli.md) * [Автоматическая проверка](selfcheck.md) * [Просмотр видеострима с камер](web_video_server.md) -* Программирование - * [Общая информация](programming.md) +* [Программирование](programming.md) * [Настройка камеры](camera_setup.md) - * Визуальные маркеры (ArUco) - * [Общая информация](aruco.md) + * [Визуальные маркеры (ArUco)](aruco.md) * [Распознавание маркеров](aruco_marker.md) * [Навигация по карте маркеров](aruco_map.md) * [Навигация по Optical Flow](optical_flow.md) @@ -50,14 +45,13 @@ * [Автозапуск ПО](autolaunch.md) * [Использование JavaScript](javascript.md) * [Блочное программирование](blocks.md) - * [ROS](ros.md) - * [MAVROS](mavros.md) - * Симулятор - * [Общая информация](simulation.md) + * [Симулятор](simulation.md) * [Сборка на собственной машине](simulation_native.md) * [Установка виртуальной машины](simulation_vm.md) * [Использование симулятора](simulation_usage.md) -* Дополнительные материалы + * [ROS](ros.md) + * [MAVROS](mavros.md) +* [Дополнительные материалы](supplementary.md) * [COEX Pix](coex_pix.md) * [Гид по автономному полету](auto_setup.md) * [Имя хоста](hostname.md) @@ -94,14 +88,14 @@ * [Светодиодная лента (legacy)](leds_old.md) * [Вклад в Клевер](contributing.md) * [Переход на версию 0.20](migrate20.md) -* Мероприятия +* [Мероприятия](events.md) + * [CopterHack-2021](copterhack2021.md) * [CopterHack-2019](copterhack2019.md) * [Олимпиада НТИ 2019](nti2019.md) * [Робокросс-2019](robocross2019.md) * [CopterHack-2018](copterhack2018.md) * [CopterHack-2017](copterhack2017.md) -* Проекты на базе Клевера - * [Список проектов](projects.md) +* [Проекты на базе Клевера](projects.md) * [Шоу коптеров](clever-show.md) * [Innopolis Open 2020 (L22_ÆRO)](innopolis_open_L22_AERO.md) * [Олимпиада НТИ 2020 (P4DF2)](nti2020_p4df2.md) @@ -121,4 +115,4 @@ * [Теория и видеоуроки](lessons.md) * [Учебно-методическое пособие](metod.md) -* [Контрольные и проверочные материалы](tests.md) +* [Контрольные материалы](tests.md) diff --git a/docs/ru/assembly.md b/docs/ru/assembly.md new file mode 100644 index 000000000..69f9d0ce1 --- /dev/null +++ b/docs/ru/assembly.md @@ -0,0 +1,27 @@ +# Сборка Клевера + +В этом разделе находится статьи, описывающие сборку каждой из версии Клевера. + + + + + + + + + + + + + + + + + + + + + + + +
    ВерсияИзображение
    Клевер 4.2
    Клевер 4.1
    Клевер 4
    Клевер 3
    Клевер 2
    diff --git a/docs/ru/copterhack2021.md b/docs/ru/copterhack2021.md new file mode 100644 index 000000000..2cd1a41b2 --- /dev/null +++ b/docs/ru/copterhack2021.md @@ -0,0 +1,5 @@ +# CopterHack 2021 + +CopterHack 2021 – это командный конкурс по разработке проектов с открытым исходным кодом для платформы квадрокоптера "Клевер". + +Все информацию о мероприятии смотрите на официальном сайте: https://ru.coex.tech/copterhack. diff --git a/docs/ru/events.md b/docs/ru/events.md new file mode 100644 index 000000000..15134d331 --- /dev/null +++ b/docs/ru/events.md @@ -0,0 +1,5 @@ +# Мероприятия + +"Клевер" применяется в в большом количестве образовательных мероприятий и соревнований: WorldSkills, Олимпиада НТИ, Copter Hack, Всероссийская Робототехническая Олимпиада и других. + +Этот раздел содержит статьи, написанные специально к тому или иному мероприятию. diff --git a/docs/ru/projects.md b/docs/ru/projects.md index b378a62db..58e08f264 100644 --- a/docs/ru/projects.md +++ b/docs/ru/projects.md @@ -1,5 +1,9 @@ # Проекты на базе Клевера +Конструктор "Клевер" широко используется в для проектной деятельности. В этом разделе приведены проектные идеи, а также статьи пользователей, рассказывающие о реализованных проектах. + +## Примеры + Список возможных проектов для стажировок и практических работ в вузах и колледжах. |Проект/Идея|Примечания| diff --git a/docs/ru/supplementary.md b/docs/ru/supplementary.md new file mode 100644 index 000000000..52c8e5969 --- /dev/null +++ b/docs/ru/supplementary.md @@ -0,0 +1,5 @@ +# Дополнительные материалы + +Этот раздел содержит статьи, не вошедшие в основные разделы, а так же статьи пользователей по той или иной проблематике, связанной с БПЛА. + +Чтобы узнать больше о публикации текста в этом разделе, смотрите статью "[Вклад в Клевер](contributing.md)". From f89cc92736294e58574918af3834a184ecf4252b Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Tue, 6 Oct 2020 01:36:17 +0300 Subject: [PATCH 09/11] docs: rename glossary articles back to glossary.md --- docs/en/SUMMARY.md | 2 +- docs/en/assemble_4.md | 2 +- docs/en/book.json | 3 ++- docs/en/{gloss.md => glossary.md} | 0 docs/ru/SUMMARY.md | 2 +- docs/ru/assemble_4.md | 2 +- docs/ru/assemble_4_1.md | 2 +- docs/ru/book.json | 3 ++- docs/ru/{gloss.md => glossary.md} | 0 redirects.json | 4 +++- 10 files changed, 12 insertions(+), 8 deletions(-) rename docs/en/{gloss.md => glossary.md} (100%) rename docs/ru/{gloss.md => glossary.md} (100%) diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md index de0d67155..398512afe 100644 --- a/docs/en/SUMMARY.md +++ b/docs/en/SUMMARY.md @@ -1,7 +1,7 @@ # Summary * [Introduction](README.md) -* [Glossary](gloss.md) +* [Glossary](glossary.md) * [Safety tips](safety.md) * [Assembly](assembly.md) * [Clover 4.2 assembly](assemble_4_2.md) diff --git a/docs/en/assemble_4.md b/docs/en/assemble_4.md index f3813dca5..1c5d4d847 100644 --- a/docs/en/assemble_4.md +++ b/docs/en/assemble_4.md @@ -410,7 +410,7 @@ Check the quadrotor assembly: -Be sure to install and setup the voltage indicator before flying, so as not to overdischarge the battery. To configure the indicator, use the button located at its base. The displayed numbers during setup indicate the minimum possible voltage in each [cell](gloss.md#battery-cell) of the battery, the recommended value is **3.5**. +Be sure to install and setup the voltage indicator before flying, so as not to overdischarge the battery. To configure the indicator, use the button located at its base. The displayed numbers during setup indicate the minimum possible voltage in each [cell](glossary.md#battery-cell) of the battery, the recommended value is **3.5**. > **Info** Sound indication means that your battery is low and needs to be charged. diff --git a/docs/en/book.json b/docs/en/book.json index 2de25d9bd..49f491da5 100644 --- a/docs/en/book.json +++ b/docs/en/book.json @@ -1,4 +1,5 @@ { "language": "en", - "root": "." + "root": ".", + "structure": {"glossary": "_GLOSSARY.md" } } diff --git a/docs/en/gloss.md b/docs/en/glossary.md similarity index 100% rename from docs/en/gloss.md rename to docs/en/glossary.md diff --git a/docs/ru/SUMMARY.md b/docs/ru/SUMMARY.md index c71fc2663..51ff9497a 100644 --- a/docs/ru/SUMMARY.md +++ b/docs/ru/SUMMARY.md @@ -1,7 +1,7 @@ # Содержание * [Введение](README.md) -* [Глоссарий](gloss.md) +* [Глоссарий](glossary.md) * [Безопасность](safety.md) * [Сборка](assembly.md) * [Клевер 4.2](assemble_4_2.md) diff --git a/docs/ru/assemble_4.md b/docs/ru/assemble_4.md index a40606cc3..4e099d76c 100644 --- a/docs/ru/assemble_4.md +++ b/docs/ru/assemble_4.md @@ -413,7 +413,7 @@ -Обязательно установите и настройте индикатор напряжения перед полетом, чтобы не переразрядить аккумулятор. Для настройки индикатора используйте конпку расположенную в его основании. Отображаемые цифры во время настройки обозначают минимально возможное напряжение в каждой [ячейке](gloss.md#ячейка--банка-акб) аккумулятора, рекомендуемое значение **3.5**. +Обязательно установите и настройте индикатор напряжения перед полетом, чтобы не переразрядить аккумулятор. Для настройки индикатора используйте конпку расположенную в его основании. Отображаемые цифры во время настройки обозначают минимально возможное напряжение в каждой [ячейке](glossary.md#ячейка--банка-акб) аккумулятора, рекомендуемое значение **3.5**. > **Info** Звуковая индикация означает, что ваш аккумулятор разряжен и его нужно зарядить. diff --git a/docs/ru/assemble_4_1.md b/docs/ru/assemble_4_1.md index 30cba5110..74403e90c 100644 --- a/docs/ru/assemble_4_1.md +++ b/docs/ru/assemble_4_1.md @@ -234,7 +234,7 @@ -Обязательно установите и настройте индикатор напряжения перед полетом, чтобы не переразрядить аккумулятор. Для настройки индикатора используйте кнопку, расположенную в его основании. Отображаемые цифры во время настройки обозначают минимально возможное напряжение в каждой [ячейке](gloss.md#ячейка--банка-акб) аккумулятора, рекомендуемое значение **3.5**. +Обязательно установите и настройте индикатор напряжения перед полетом, чтобы не переразрядить аккумулятор. Для настройки индикатора используйте кнопку, расположенную в его основании. Отображаемые цифры во время настройки обозначают минимально возможное напряжение в каждой [ячейке](glossary.md#ячейка--банка-акб) аккумулятора, рекомендуемое значение **3.5**. > **Info** Звуковая индикация означает, что ваш аккумулятор разряжен и его нужно зарядить. diff --git a/docs/ru/book.json b/docs/ru/book.json index 566fc6810..7a9c8206f 100644 --- a/docs/ru/book.json +++ b/docs/ru/book.json @@ -1,4 +1,5 @@ { "language": "ru", - "root": "." + "root": ".", + "structure": {"glossary": "_GLOSSARY.md" } } diff --git a/docs/ru/gloss.md b/docs/ru/glossary.md similarity index 100% rename from docs/ru/gloss.md rename to docs/ru/glossary.md diff --git a/redirects.json b/redirects.json index 8ed31b27c..cc6db68bc 100644 --- a/redirects.json +++ b/redirects.json @@ -2,7 +2,9 @@ "redirects": [ { "from": "assemble.html", "to": "ru/assemble_2.html" }, { "from": "assemble_clever3_4in1.html", "to": "ru/assemble_3.html" }, - { "from": "glossary.html", "to": "ru/gloss.html" }, + { "from": "glossary.html", "to": "ru/glossary.html" }, + { "from": "ru/gloss.html", "to": "glossary.html" }, + { "from": "en/gloss.html", "to": "glossary.html" }, { "from": "cl3_connectESC4in1.html", "to": "ru/4in1.html" }, { "from": "uart.html", "to": "ru/uart.html" }, { "from": "fpv.html", "to": "ru/fpv.html" }, From a9f6fe329b83342d08b69a1b71a2eae1827f485d Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Tue, 6 Oct 2020 01:38:19 +0300 Subject: [PATCH 10/11] docs: minor summary change --- docs/ru/SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/SUMMARY.md b/docs/ru/SUMMARY.md index 51ff9497a..53b161331 100644 --- a/docs/ru/SUMMARY.md +++ b/docs/ru/SUMMARY.md @@ -41,7 +41,7 @@ * [Работа с GPIO](gpio.md) * [Ультразвуковой дальномер](sonar.md) * [Компьютерное зрение](camera.md) - * [Визуализация с помощью rviz](rviz.md) + * [Визуализация с помощью rviz и rqt](rviz.md) * [Автозапуск ПО](autolaunch.md) * [Использование JavaScript](javascript.md) * [Блочное программирование](blocks.md) From b36292cdb8a7ff1e35f907cbf6591ed3d2b4d3b5 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Tue, 6 Oct 2020 01:40:07 +0300 Subject: [PATCH 11/11] blocks: add print-range example --- .../programs/examples/print-range.xml | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 clover_blocks/programs/examples/print-range.xml diff --git a/clover_blocks/programs/examples/print-range.xml b/clover_blocks/programs/examples/print-range.xml new file mode 100644 index 000000000..de55e19da --- /dev/null +++ b/clover_blocks/programs/examples/print-range.xml @@ -0,0 +1,29 @@ + + + WHILE + + + TRUE + + + + + + + abc + + + + + + + + 0.5 + + + + + + + + \ No newline at end of file

    +
    Disconnected
    +
    +
    Running...
    + + + + +
  • 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