From 406f21c5ddd39a112c5bb90bf95580c39733bde7 Mon Sep 17 00:00:00 2001 From: lorol Date: Wed, 11 Mar 2020 23:21:50 -0400 Subject: [PATCH] Applied important changes of other forks after master ESPAsyncWebServer release (at the moment) - fixes - SPIFFSEditor is changed to be standalone - works with acefull.js.gz, see the example Added a real SmartSwitch application to examples --- examples/SmartSwitch/ESPAsyncWiFiManager.cpp | 1177 ++++ examples/SmartSwitch/ESPAsyncWiFiManager.h | 279 + examples/SmartSwitch/PinOut_Notes.txt | 13 + examples/SmartSwitch/SmartSwitch.ino | 479 ++ examples/SmartSwitch/data/.exclude.files | 2 + examples/SmartSwitch/data/acefull.js.gz | Bin 0 -> 111691 bytes examples/SmartSwitch/data/app.css.gz | Bin 0 -> 2740 bytes examples/SmartSwitch/data/app.min.js.gz | Bin 0 -> 38439 bytes examples/SmartSwitch/data/favicon.ico.gz | Bin 0 -> 4314 bytes examples/SmartSwitch/data/index.htm.gz | Bin 0 -> 3834 bytes examples/SmartSwitch/data/index2.htm | 585 ++ examples/SmartSwitch/data_src/acefull.js | 1 + examples/SmartSwitch/data_src/app.css | 1 + examples/SmartSwitch/data_src/app.min.js | 533 ++ examples/SmartSwitch/data_src/desktop.ini | 2 + examples/SmartSwitch/data_src/favicon.ico | Bin 0 -> 15406 bytes examples/SmartSwitch/data_src/index.htm | 585 ++ .../data_src/js_css_src/.exclude.files | 2 + .../SmartSwitch/data_src/js_css_src/ace.js | 14 + .../SmartSwitch/data_src/js_css_src/app.js | 5787 +++++++++++++++++ .../data_src/js_css_src/desktop.ini | 2 + .../data_src/js_css_src/ext-searchbox.js | 5 + .../js_css_src/js-time-picker/1-inline.html | 30 + .../js_css_src/js-time-picker/2-popup.html | 27 + .../js_css_src/js-time-picker/README.txt | 29 + .../js-time-picker/tpick-light-pop.css | 65 + .../js_css_src/js-time-picker/tpick-light.css | 47 + .../js_css_src/js-time-picker/tpick-pop.js | 136 + .../js_css_src/js-time-picker/tpick.js | 116 + .../justgage-1.2.2/examples/auto-adjust.htm | 94 + .../justgage-1.2.2/examples/counter.html | 58 + .../examples/custom-interval.htm | 82 + .../justgage-1.2.2/examples/custom-node.html | 130 + .../examples/custom-sectors.html | 88 + .../examples/custom-value-renderer.html | 116 + .../examples/customize-style.htm | 137 + .../justgage-1.2.2/examples/defaults.html | 60 + .../justgage-1.2.2/examples/font-options.html | 62 + .../examples/format-number.html | 56 + .../examples/html5-data-attribute-config.html | 54 + .../examples/human-friendly-numbers.html | 109 + .../justgage-1.2.2/examples/pointer.html | 168 + .../examples/refresh-maximum.html | 91 + .../examples/responsive-gauges.htm | 71 + .../justgage-1.2.2/examples/reverse.html | 144 + .../js_css_src/justgage-1.2.2/justgage.js | 1220 ++++ .../justgage-1.2.2/raphael-2.1.4.min.js | 12 + .../data_src/js_css_src/mode-css.js | 1 + .../data_src/js_css_src/mode-html.js | 1 + .../data_src/js_css_src/mode-javascript.js | 1 + .../js_css_src/styled-notifications/.babelrc | 3 + .../styled-notifications/.eslintrc.js | 31 + .../styled-notifications/.gitignore | 30 + .../styled-notifications/.travis.yml | 3 + .../styled-notifications/LICENSE.md | 7 + .../__tests__/helpers.test.js | 104 + .../__tests__/index.tests.js | 144 + .../styled-notifications/demo/demo.js | 34 + .../styled-notifications/demo/index.html | 101 + .../styled-notifications/demo/index_my.html | 37 + .../dist/notifications.css | 1 + .../dist/notifications.css.gz | Bin 0 -> 2487 bytes .../dist/notifications.js | 1 + .../dist/notifications.js.gz | Bin 0 -> 1723 bytes .../styled-notifications/package.json | 58 + .../js_css_src/styled-notifications/readme.md | 82 + .../styled-notifications/src/helpers.js | 24 + .../styled-notifications/src/index.js | 148 + .../src/polyfills/classList.js | 68 + .../styled-notifications/src/style.scss | 134 + .../styled-notifications/webpack.config.js | 41 + .../data_src/js_css_src/worker-html.js | 1 + examples/SmartSwitch/desktop.ini | 2 + src/AsyncWebSocket.cpp | 1 + src/SPIFFSEditor.cpp | 525 +- src/WebRequest.cpp | 4 + src/edit.htm | 628 +- 77 files changed, 13995 insertions(+), 889 deletions(-) create mode 100644 examples/SmartSwitch/ESPAsyncWiFiManager.cpp create mode 100644 examples/SmartSwitch/ESPAsyncWiFiManager.h create mode 100644 examples/SmartSwitch/PinOut_Notes.txt create mode 100644 examples/SmartSwitch/SmartSwitch.ino create mode 100644 examples/SmartSwitch/data/.exclude.files create mode 100644 examples/SmartSwitch/data/acefull.js.gz create mode 100644 examples/SmartSwitch/data/app.css.gz create mode 100644 examples/SmartSwitch/data/app.min.js.gz create mode 100644 examples/SmartSwitch/data/favicon.ico.gz create mode 100644 examples/SmartSwitch/data/index.htm.gz create mode 100644 examples/SmartSwitch/data/index2.htm create mode 100644 examples/SmartSwitch/data_src/acefull.js create mode 100644 examples/SmartSwitch/data_src/app.css create mode 100644 examples/SmartSwitch/data_src/app.min.js create mode 100644 examples/SmartSwitch/data_src/desktop.ini create mode 100644 examples/SmartSwitch/data_src/favicon.ico create mode 100644 examples/SmartSwitch/data_src/index.htm create mode 100644 examples/SmartSwitch/data_src/js_css_src/.exclude.files create mode 100644 examples/SmartSwitch/data_src/js_css_src/ace.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/app.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/desktop.ini create mode 100644 examples/SmartSwitch/data_src/js_css_src/ext-searchbox.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/js-time-picker/1-inline.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/js-time-picker/2-popup.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/js-time-picker/README.txt create mode 100644 examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick-light-pop.css create mode 100644 examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick-light.css create mode 100644 examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick-pop.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/auto-adjust.htm create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/counter.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-interval.htm create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-node.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-sectors.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-value-renderer.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/customize-style.htm create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/defaults.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/font-options.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/format-number.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/html5-data-attribute-config.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/human-friendly-numbers.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/pointer.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/refresh-maximum.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/responsive-gauges.htm create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/reverse.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/justgage.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/raphael-2.1.4.min.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/mode-css.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/mode-html.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/mode-javascript.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/.babelrc create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/.eslintrc.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/.gitignore create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/.travis.yml create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/LICENSE.md create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/__tests__/helpers.test.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/__tests__/index.tests.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/demo/demo.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/demo/index.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/demo/index_my.html create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/dist/notifications.css create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/dist/notifications.css.gz create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/dist/notifications.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/dist/notifications.js.gz create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/package.json create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/readme.md create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/helpers.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/index.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/polyfills/classList.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/style.scss create mode 100644 examples/SmartSwitch/data_src/js_css_src/styled-notifications/webpack.config.js create mode 100644 examples/SmartSwitch/data_src/js_css_src/worker-html.js create mode 100644 examples/SmartSwitch/desktop.ini diff --git a/examples/SmartSwitch/ESPAsyncWiFiManager.cpp b/examples/SmartSwitch/ESPAsyncWiFiManager.cpp new file mode 100644 index 0000000..4455258 --- /dev/null +++ b/examples/SmartSwitch/ESPAsyncWiFiManager.cpp @@ -0,0 +1,1177 @@ +/************************************************************** + AsyncWiFiManager is a library for the ESP8266/Arduino platform + (https://github.com/esp8266/Arduino) to enable easy + configuration and reconfiguration of WiFi credentials using a Captive Portal + inspired by: + http://www.esp8266.com/viewtopic.php?f=29&t=2520 + https://github.com/chriscook8/esp-arduino-apboot + https://github.com/esp8266/Arduino/tree/esp8266/hardware/esp8266com/esp8266/libraries/DNSServer/examples/CaptivePortalAdvanced + Built by AlexT https://github.com/tzapu + Ported to Async Web Server by https://github.com/alanswx + Licensed under MIT license + **************************************************************/ + +#include "ESPAsyncWiFiManager.h" + +AsyncWiFiManagerParameter::AsyncWiFiManagerParameter(const char *custom) { + _id = NULL; + _placeholder = NULL; + _length = 0; + _value = NULL; + + _customHTML = custom; +} + +AsyncWiFiManagerParameter::AsyncWiFiManagerParameter(const char *id, const char *placeholder, const char *defaultValue, int length) { + init(id, placeholder, defaultValue, length, ""); +} + +AsyncWiFiManagerParameter::AsyncWiFiManagerParameter(const char *id, const char *placeholder, const char *defaultValue, int length, const char *custom) { + init(id, placeholder, defaultValue, length, custom); +} + +void AsyncWiFiManagerParameter::init(const char *id, const char *placeholder, const char *defaultValue, int length, const char *custom) { + _id = id; + _placeholder = placeholder; + _length = length; + _value = new char[length + 1]; + for (int i = 0; i < length; i++) { + _value[i] = 0; + } + if (defaultValue != NULL) { + strncpy(_value, defaultValue, length); + } + + _customHTML = custom; +} + +const char* AsyncWiFiManagerParameter::getValue() { + return _value; +} +const char* AsyncWiFiManagerParameter::getID() { + return _id; +} +const char* AsyncWiFiManagerParameter::getPlaceholder() { + return _placeholder; +} +int AsyncWiFiManagerParameter::getValueLength() { + return _length; +} +const char* AsyncWiFiManagerParameter::getCustomHTML() { + return _customHTML; +} + +#ifdef USE_EADNS +AsyncWiFiManager::AsyncWiFiManager(AsyncWebServer *server, AsyncDNSServer *dns) :server(server), dnsServer(dns) { +#else +AsyncWiFiManager::AsyncWiFiManager(AsyncWebServer *server, DNSServer *dns) :server(server), dnsServer(dns) { +#endif + wifiSSIDs = NULL; + wifiSSIDscan=true; + _modeless=false; + shouldscan=true; +} + +void AsyncWiFiManager::addParameter(AsyncWiFiManagerParameter *p) { + _params[_paramsCount] = p; + _paramsCount++; + DEBUG_WM("Adding parameter"); + DEBUG_WM(p->getID()); +} + +void AsyncWiFiManager::setupConfigPortal() { + // dnsServer.reset(new DNSServer()); + // server.reset(new ESP8266WebServer(80)); + server->reset(); + + DEBUG_WM(F("")); + _configPortalStart = millis(); + + DEBUG_WM(F("Configuring access point... ")); + DEBUG_WM(_apName); + if (_apPassword != NULL) { + if (strlen(_apPassword) < 8 || strlen(_apPassword) > 63) { + // fail passphrase to short or long! + DEBUG_WM(F("Invalid AccessPoint password. Ignoring")); + _apPassword = NULL; + } + DEBUG_WM(_apPassword); + } + + //optional soft ip config + if (_ap_static_ip) { + DEBUG_WM(F("Custom AP IP/GW/Subnet")); + WiFi.softAPConfig(_ap_static_ip, _ap_static_gw, _ap_static_sn); + } + + if (_apPassword != NULL) { + WiFi.softAP(_apName, _apPassword);//password option + } else { + WiFi.softAP(_apName); + } + + delay(500); // Without delay I've seen the IP address blank + DEBUG_WM(F("AP IP address: ")); + DEBUG_WM(WiFi.softAPIP()); + + /* Setup the DNS server redirecting all the domains to the apIP */ + #ifdef USE_EADNS + dnsServer->setErrorReplyCode(AsyncDNSReplyCode::NoError); + #else + dnsServer->setErrorReplyCode(DNSReplyCode::NoError); + #endif + dnsServer->start(DNS_PORT, "*", WiFi.softAPIP()); + + setInfo(); + + /* Setup web pages: root, wifi config pages, SO captive portal detectors and not found. */ + server->on("/", std::bind(&AsyncWiFiManager::handleRoot, this,std::placeholders::_1)).setFilter(ON_AP_FILTER); + server->on("/wifi", std::bind(&AsyncWiFiManager::handleWifi, this, std::placeholders::_1,true)).setFilter(ON_AP_FILTER); + server->on("/0wifi", std::bind(&AsyncWiFiManager::handleWifi, this,std::placeholders::_1, false)).setFilter(ON_AP_FILTER); + server->on("/wifisave", std::bind(&AsyncWiFiManager::handleWifiSave,this,std::placeholders::_1)).setFilter(ON_AP_FILTER); + server->on("/i", std::bind(&AsyncWiFiManager::handleInfo,this, std::placeholders::_1)).setFilter(ON_AP_FILTER); + server->on("/r", std::bind(&AsyncWiFiManager::handleReset, this,std::placeholders::_1)).setFilter(ON_AP_FILTER); + //server->on("/generate_204", std::bind(&AsyncWiFiManager::handle204, this)); //Android/Chrome OS captive portal check. + server->on("/fwlink", std::bind(&AsyncWiFiManager::handleRoot, this,std::placeholders::_1)).setFilter(ON_AP_FILTER); //Microsoft captive portal. Maybe not needed. Might be handled by notFound handler. + server->onNotFound (std::bind(&AsyncWiFiManager::handleNotFound,this,std::placeholders::_1)); + server->begin(); // Web server start + DEBUG_WM(F("HTTP server started")); + +} + +static const char HEX_CHAR_ARRAY[17] = "0123456789ABCDEF"; +/** +* convert char array (hex values) to readable string by seperator +* buf: buffer to convert +* length: data length +* strSeperator seperator between each hex value +* return: formated value as String +*/ +static String byteToHexString(uint8_t* buf, uint8_t length, String strSeperator="-") { + String dataString = ""; + for (uint8_t i = 0; i < length; i++) { + byte v = buf[i] / 16; + byte w = buf[i] % 16; + if (i>0) { + dataString += strSeperator; + } + dataString += String(HEX_CHAR_ARRAY[v]); + dataString += String(HEX_CHAR_ARRAY[w]); + } + dataString.toUpperCase(); + return dataString; +} // byteToHexString + +#if !defined(ESP8266) +String getESP32ChipID() { + uint64_t chipid; + chipid=ESP.getEfuseMac();//The chip ID is essentially its MAC address(length: 6 bytes). + int chipid_size = 6; + uint8_t chipid_arr[chipid_size]; + for (uint8_t i=0; i < chipid_size; i++) { + chipid_arr[i] = (chipid >> (8 * i)) & 0xff; + } + return byteToHexString(chipid_arr, chipid_size, ""); +} +#endif + +boolean AsyncWiFiManager::autoConnect(unsigned long maxConnectRetries, unsigned long retryDelayMs) { + String ssid = "ESP"; + #if defined(ESP8266) + ssid += String(ESP.getChipId()); + #else + ssid += getESP32ChipID(); + #endif + return autoConnect(ssid.c_str(), NULL); +} + +boolean AsyncWiFiManager::autoConnect(char const *apName, char const *apPassword, unsigned long maxConnectRetries, unsigned long retryDelayMs) { + DEBUG_WM(F("")); + + // read eeprom for ssid and pass + //String ssid = getSSID(); + //String pass = getPassword(); + + // attempt to connect; should it fail, fall back to AP + WiFi.mode(WIFI_STA); + + for(unsigned long tryNumber = 0; tryNumber < maxConnectRetries; tryNumber++) { + DEBUG_WM(F("AutoConnect Try No.:")); + DEBUG_WM(tryNumber); + + if (connectWifi("", "") == WL_CONNECTED) { + DEBUG_WM(F("IP Address:")); + DEBUG_WM(WiFi.localIP()); + //connected + return true; + } + + if(tryNumber + 1 < maxConnectRetries) { + + // we might connect during the delay + unsigned long restDelayMs = retryDelayMs; + while(restDelayMs != 0) { + if(WiFi.status() == WL_CONNECTED) { + DEBUG_WM(F("IP Address (connected during delay):")); + DEBUG_WM(WiFi.localIP()); + return true; + } + unsigned long thisDelay = std::min(restDelayMs, 100ul); + delay(thisDelay); + restDelayMs -= thisDelay; + } + + } + } + + + return startConfigPortal(apName, apPassword); +} + + +String AsyncWiFiManager::networkListAsString() +{ + String pager ; + //display networks in page + for (int i = 0; i < wifiSSIDCount; i++) { + if (wifiSSIDs[i].duplicate == true) continue; // skip dups + int quality = getRSSIasQuality(wifiSSIDs[i].RSSI); + + if (_minimumQuality == -1 || _minimumQuality < quality) { + String item = FPSTR(HTTP_ITEM); + String rssiQ; + rssiQ += quality; + item.replace("{v}", wifiSSIDs[i].SSID); + item.replace("{r}", rssiQ); +#if defined(ESP8266) + if (wifiSSIDs[i].encryptionType != ENC_TYPE_NONE) { +#else + if (wifiSSIDs[i].encryptionType != WIFI_AUTH_OPEN) { +#endif + item.replace("{i}", "l"); + } else { + item.replace("{i}", ""); + } + pager += item; + + } else { + DEBUG_WM(F("Skipping due to quality")); + } + + } + return pager; +} + +String AsyncWiFiManager::scanModal() +{ + shouldscan=true; + scan(); + String pager=networkListAsString(); + return pager; +} + +void AsyncWiFiManager::scan() +{ + if (!shouldscan) return; + DEBUG_WM(F("About to scan()")); + if (wifiSSIDscan) + { + delay(100); + } + + if (wifiSSIDscan) + { + wifi_ssid_count_t n = WiFi.scanNetworks(); + DEBUG_WM(F("Scan done")); + if(n == WIFI_SCAN_FAILED) { + DEBUG_WM(F("scanNetworks returned: WIFI_SCAN_FAILED!")); + } else if(n == WIFI_SCAN_RUNNING) { + DEBUG_WM(F("scanNetworks returned: WIFI_SCAN_RUNNING!")); + } else if(n < 0) { + DEBUG_WM(F("scanNetworks failed with unknown error code!")); + } else if (n == 0) { + DEBUG_WM(F("No networks found")); + // page += F("No networks found. Refresh to scan again."); + } else { + + + if (wifiSSIDscan) + { + /* WE SHOULD MOVE THIS IN PLACE ATOMICALLY */ + if (wifiSSIDs) delete [] wifiSSIDs; + wifiSSIDs = new WiFiResult[n]; + wifiSSIDCount = n; + + if (n>0) + shouldscan=false; + + for (wifi_ssid_count_t i=0;i wifiSSIDs[i].RSSI) { + std::swap(wifiSSIDs[i], wifiSSIDs[j]); + } + } + } + + + // remove duplicates ( must be RSSI sorted ) + if (_removeDuplicateAPs) { + String cssid; + for (int i = 0; i < n; i++) { + if (wifiSSIDs[i].duplicate == true) continue; + cssid = wifiSSIDs[i].SSID; + for (int j = i + 1; j < n; j++) { + if (cssid == wifiSSIDs[j].SSID) { + DEBUG_WM("DUP AP: " +wifiSSIDs[j].SSID); + wifiSSIDs[j].duplicate=true; // set dup aps to NULL + } + } + } + } + + } + } + } +} + + +void AsyncWiFiManager::startConfigPortalModeless(char const *apName, char const *apPassword) { + + _modeless =true; + _apName = apName; + _apPassword = apPassword; + + /* + AJS - do we want this? + + */ + + //setup AP + WiFi.mode(WIFI_AP_STA); + DEBUG_WM("SET AP STA"); + + // try to connect + if (connectWifi("", "") == WL_CONNECTED) { + DEBUG_WM(F("IP Address:")); + DEBUG_WM(WiFi.localIP()); + //connected + // call the callback! + if ( _savecallback != NULL) { + //todo: check if any custom parameters actually exist, and check if they really changed maybe + _savecallback(); + } + } + + + + //notify we entered AP mode + if ( _apcallback != NULL) { + _apcallback(this); + } + + connect = false; + setupConfigPortal(); + scannow= -1 ; + +} + +void AsyncWiFiManager::loop(){ + safeLoop(); + criticalLoop(); +} + +void AsyncWiFiManager::setInfo() { + if (needInfo) { + pager = infoAsString(); + wifiStatus = WiFi.status(); + needInfo = false; + } +} + +/** + * Anything that accesses WiFi, ESP or EEPROM goes here + */ +void AsyncWiFiManager::criticalLoop(){ + if (_modeless) + { + + if ( scannow==-1 || millis() > scannow + 60000) + { + scan(); + scannow= millis() ; + } + if (connect) { + connect = false; + //delay(2000); + DEBUG_WM(F("Connecting to new AP")); + + // using user-provided _ssid, _pass in place of system-stored ssid and pass + if (connectWifi(_ssid, _pass) != WL_CONNECTED) { + DEBUG_WM(F("Failed to connect.")); + } else { + //connected + // alanswx - should we have a config to decide if we should shut down AP? + // WiFi.mode(WIFI_STA); + //notify that configuration has changed and any optional parameters should be saved + if ( _savecallback != NULL) { + //todo: check if any custom parameters actually exist, and check if they really changed maybe + _savecallback(); + } + + return; + } + + if (_shouldBreakAfterConfig) { + //flag set to exit after config after trying to connect + //notify that configuration has changed and any optional parameters should be saved + if ( _savecallback != NULL) { + //todo: check if any custom parameters actually exist, and check if they really changed maybe + _savecallback(); + } + } + } + } +} + +/* + * Anything that doesn't access WiFi, ESP or EEPROM can go here + */ +void AsyncWiFiManager::safeLoop(){ + #ifndef USE_EADNS + dnsServer->processNextRequest(); + #endif +} + +boolean AsyncWiFiManager::startConfigPortal(char const *apName, char const *apPassword) { + //setup AP + WiFi.mode(WIFI_AP_STA); + DEBUG_WM("SET AP STA"); + + _apName = apName; + _apPassword = apPassword; + + //notify we entered AP mode + if ( _apcallback != NULL) { + _apcallback(this); + } + + connect = false; + setupConfigPortal(); + scannow= -1 ; + while (_configPortalTimeout == 0 || millis() < _configPortalStart + _configPortalTimeout) { + //DNS + #ifndef USE_EADNS + dnsServer->processNextRequest(); + #endif + + // + // we should do a scan every so often here and + // try to reconnect to AP while we are at it + // + if ( scannow == -1 || millis() > scannow + 10000) + { + DEBUG_WM(F("About to scan()")); + shouldscan=true; // since we are modal, we can scan every time + #if defined(ESP8266) + // we might still be connecting, so that has to stop for scanning + ETS_UART_INTR_DISABLE (); + wifi_station_disconnect (); + ETS_UART_INTR_ENABLE (); + #else + WiFi.disconnect (false); + #endif + scan(); + if(_tryConnectDuringConfigPortal) WiFi.begin(); // try to reconnect to AP + scannow= millis() ; + } + + // attempts to reconnect were successful + if(WiFi.status() == WL_CONNECTED) { + //connected + WiFi.mode(WIFI_STA); + //notify that configuration has changed and any optional parameters should be saved + if ( _savecallback != NULL) { + //todo: check if any custom parameters actually exist, and check if they really changed maybe + _savecallback(); + } + break; + } + + + if (connect) { + connect = false; + delay(2000); + DEBUG_WM(F("Connecting to new AP")); + + // using user-provided _ssid, _pass in place of system-stored ssid and pass + if (connectWifi(_ssid, _pass) == WL_CONNECTED) { + //connected + WiFi.mode(WIFI_STA); + //notify that configuration has changed and any optional parameters should be saved + if ( _savecallback != NULL) { + //todo: check if any custom parameters actually exist, and check if they really changed maybe + _savecallback(); + } + break; + } else { + DEBUG_WM(F("Failed to connect.")); + } + + if (_shouldBreakAfterConfig) { + //flag set to exit after config after trying to connect + //notify that configuration has changed and any optional parameters should be saved + if ( _savecallback != NULL) { + //todo: check if any custom parameters actually exist, and check if they really changed maybe + _savecallback(); + } + break; + } + } + yield(); + } + + server->reset(); + #ifdef USE_EADNS + *dnsServer=AsyncDNSServer(); + #else + *dnsServer=DNSServer(); + #endif + + return WiFi.status() == WL_CONNECTED; +} + + +int AsyncWiFiManager::connectWifi(String ssid, String pass) { + DEBUG_WM(F("Connecting as wifi client...")); + + // check if we've got static_ip settings, if we do, use those. + if (_sta_static_ip) { + DEBUG_WM(F("Custom STA IP/GW/Subnet/DNS")); + WiFi.config(_sta_static_ip, _sta_static_gw, _sta_static_sn, _sta_static_dns1, _sta_static_dns2); + DEBUG_WM(WiFi.localIP()); + } + //fix for auto connect racing issue + // if (WiFi.status() == WL_CONNECTED) { + // DEBUG_WM("Already connected. Bailing out."); + // return WL_CONNECTED; + // } + //check if we have ssid and pass and force those, if not, try with last saved values + if (ssid != "") { + #if defined(ESP8266) + //trying to fix connection in progress hanging + ETS_UART_INTR_DISABLE(); + wifi_station_disconnect(); + ETS_UART_INTR_ENABLE(); + #else + WiFi.disconnect(false); + #endif + + WiFi.begin(ssid.c_str(), pass.c_str()); + } else { + + if (WiFi.SSID().length() > 0) { + DEBUG_WM("Using last saved values, should be faster"); +#if defined(ESP8266) + //trying to fix connection in progress hanging + ETS_UART_INTR_DISABLE(); + wifi_station_disconnect(); + ETS_UART_INTR_ENABLE(); +#else + WiFi.disconnect(false); +#endif + + WiFi.begin(); + } else { + DEBUG_WM("Try to connect with saved credentials"); + WiFi.begin(); + } + } + + int connRes = waitForConnectResult(); + DEBUG_WM ("Connection result: "); + DEBUG_WM ( connRes ); + //not connected, WPS enabled, no pass - first attempt +#ifdef NO_EXTRA_4K_HEAP + if (_tryWPS && connRes != WL_CONNECTED && pass == "") { + startWPS(); + //should be connected at the end of WPS + connRes = waitForConnectResult(); + } +#endif + needInfo = true; + setInfo(); + return connRes; +} + +uint8_t AsyncWiFiManager::waitForConnectResult() { + if (_connectTimeout == 0) { + return WiFi.waitForConnectResult(); + } else { + DEBUG_WM (F("Waiting for connection result with time out")); + unsigned long start = millis(); + boolean keepConnecting = true; + uint8_t status; + while (keepConnecting) { + status = WiFi.status(); + if (millis() > start + _connectTimeout) { + keepConnecting = false; + DEBUG_WM (F("Connection timed out")); + } + if (status == WL_CONNECTED || status == WL_CONNECT_FAILED) { + keepConnecting = false; + } + delay(100); + } + return status; + } +} +#ifdef NO_EXTRA_4K_HEAP +void AsyncWiFiManager::startWPS() { + DEBUG_WM("START WPS"); +#if defined(ESP8266) + WiFi.beginWPSConfig(); +#else + //esp_wps_config_t config = WPS_CONFIG_INIT_DEFAULT(ESP_WPS_MODE); + esp_wps_config_t config = {}; + config.wps_type = ESP_WPS_MODE; + config.crypto_funcs = &g_wifi_default_wps_crypto_funcs; + strcpy(config.factory_info.manufacturer,"ESPRESSIF"); + strcpy(config.factory_info.model_number, "ESP32"); + strcpy(config.factory_info.model_name, "ESPRESSIF IOT"); + strcpy(config.factory_info.device_name,"ESP STATION"); + + esp_wifi_wps_enable(&config); + esp_wifi_wps_start(0); +#endif + DEBUG_WM("END WPS"); + +} +#endif +/* +String AsyncWiFiManager::getSSID() { +if (_ssid == "") { +DEBUG_WM(F("Reading SSID")); +_ssid = WiFi.SSID(); +DEBUG_WM(F("SSID: ")); +DEBUG_WM(_ssid); +} +return _ssid; +} + +String AsyncWiFiManager::getPassword() { +if (_pass == "") { +DEBUG_WM(F("Reading Password")); +_pass = WiFi.psk(); +DEBUG_WM("Password: " + _pass); +//DEBUG_WM(_pass); +} +return _pass; +} +*/ +String AsyncWiFiManager::getConfigPortalSSID() { + return _apName; +} + +void AsyncWiFiManager::resetSettings() { + DEBUG_WM(F("settings invalidated")); + DEBUG_WM(F("THIS MAY CAUSE AP NOT TO START UP PROPERLY. YOU NEED TO COMMENT IT OUT AFTER ERASING THE DATA.")); + WiFi.disconnect(true); + //delay(200); +} +void AsyncWiFiManager::setTimeout(unsigned long seconds) { + setConfigPortalTimeout(seconds); +} + +void AsyncWiFiManager::setConfigPortalTimeout(unsigned long seconds) { + _configPortalTimeout = seconds * 1000; +} + +void AsyncWiFiManager::setConnectTimeout(unsigned long seconds) { + _connectTimeout = seconds * 1000; +} + +void AsyncWiFiManager::setTryConnectDuringConfigPortal(boolean v) { + _tryConnectDuringConfigPortal = v; +} + +void AsyncWiFiManager::setDebugOutput(boolean debug) { + _debug = debug; +} + +void AsyncWiFiManager::setAPStaticIPConfig(IPAddress ip, IPAddress gw, IPAddress sn) { + _ap_static_ip = ip; + _ap_static_gw = gw; + _ap_static_sn = sn; +} + +void AsyncWiFiManager::setSTAStaticIPConfig(IPAddress ip, IPAddress gw, IPAddress sn, IPAddress dns1, IPAddress dns2) { + _sta_static_ip = ip; + _sta_static_gw = gw; + _sta_static_sn = sn; + _sta_static_dns1 = dns1; + _sta_static_dns2 = dns2; +} + +void AsyncWiFiManager::setMinimumSignalQuality(int quality) { + _minimumQuality = quality; +} + +void AsyncWiFiManager::setBreakAfterConfig(boolean shouldBreak) { + _shouldBreakAfterConfig = shouldBreak; +} + +/** Handle root or redirect to captive portal */ +void AsyncWiFiManager::handleRoot(AsyncWebServerRequest *request) { + // AJS - maybe we should set a scan when we get to the root??? + // and only scan on demand? timer + on demand? plus a link to make it happen? + shouldscan=true; + scannow= -1 ; + DEBUG_WM(F("Handle root")); + if (captivePortal(request)) { // If captive portal redirect instead of displaying the page. + return; + } + + String page = FPSTR(WFM_HTTP_HEAD); + page.replace("{v}", "Options"); + page += FPSTR(HTTP_SCRIPT); + page += FPSTR(HTTP_STYLE); + page += _customHeadElement; + page += FPSTR(HTTP_HEAD_END); + page += "

"; + page += _apName; + page += "

"; + page += F("

AsyncWiFiManager

"); + page += FPSTR(HTTP_PORTAL_OPTIONS); + page += _customOptionsElement; + page += FPSTR(HTTP_END); + + request->send(200, "text/html", page); + +} + +/** Wifi config page handler */ +void AsyncWiFiManager::handleWifi(AsyncWebServerRequest *request,boolean scan) { + shouldscan=true; + scannow= -1 ; + + DEBUG_WM(F("Handle wifi")); + + String page = FPSTR(WFM_HTTP_HEAD); + page.replace("{v}", "Config ESP"); + page += FPSTR(HTTP_SCRIPT); + page += FPSTR(HTTP_STYLE); + page += _customHeadElement; + page += FPSTR(HTTP_HEAD_END); + + if (scan) { + wifiSSIDscan=false; + + + + DEBUG_WM(F("Scan done")); + if (wifiSSIDCount==0) { + DEBUG_WM(F("No networks found")); + page += F("No networks found. Refresh to scan again."); + } else { + + + //display networks in page + String pager = networkListAsString(); + + page += pager; + page += "
"; + } + + } + wifiSSIDscan=true; + + page += FPSTR(HTTP_FORM_START); + char parLength[2]; + // add the extra parameters to the form + for (int i = 0; i < _paramsCount; i++) { + if (_params[i] == NULL) { + break; + } + + String pitem = FPSTR(HTTP_FORM_PARAM); + if (_params[i]->getID() != NULL) { + pitem.replace("{i}", _params[i]->getID()); + pitem.replace("{n}", _params[i]->getID()); + pitem.replace("{p}", _params[i]->getPlaceholder()); + snprintf(parLength, 2, "%d", _params[i]->getValueLength()); + pitem.replace("{l}", parLength); + pitem.replace("{v}", _params[i]->getValue()); + pitem.replace("{c}", _params[i]->getCustomHTML()); + } else { + pitem = _params[i]->getCustomHTML(); + } + + page += pitem; + } + if (_params[0] != NULL) { + page += "
"; + } + + if (_sta_static_ip) { + + String item = FPSTR(HTTP_FORM_PARAM); + item.replace("{i}", "ip"); + item.replace("{n}", "ip"); + item.replace("{p}", "Static IP"); + item.replace("{l}", "15"); + item.replace("{v}", _sta_static_ip.toString()); + + page += item; + + item = FPSTR(HTTP_FORM_PARAM); + item.replace("{i}", "gw"); + item.replace("{n}", "gw"); + item.replace("{p}", "Static Gateway"); + item.replace("{l}", "15"); + item.replace("{v}", _sta_static_gw.toString()); + + page += item; + + item = FPSTR(HTTP_FORM_PARAM); + item.replace("{i}", "sn"); + item.replace("{n}", "sn"); + item.replace("{p}", "Subnet"); + item.replace("{l}", "15"); + item.replace("{v}", _sta_static_sn.toString()); + + page += item; + + item = FPSTR(HTTP_FORM_PARAM); + item.replace("{i}", "dns1"); + item.replace("{n}", "dns1"); + item.replace("{p}", "DNS1"); + item.replace("{l}", "15"); + item.replace("{v}", _sta_static_dns1.toString()); + + page += item; + + item = FPSTR(HTTP_FORM_PARAM); + item.replace("{i}", "dns2"); + item.replace("{n}", "dns2"); + item.replace("{p}", "DNS2"); + item.replace("{l}", "15"); + item.replace("{v}", _sta_static_dns2.toString()); + + page += item; + + page += "
"; + } + + page += FPSTR(HTTP_FORM_END); + page += FPSTR(HTTP_SCAN_LINK); + + page += FPSTR(HTTP_END); + + request->send(200, "text/html", page); + + + DEBUG_WM(F("Sent config page")); +} + +/** Handle the WLAN save form and redirect to WLAN config page again */ +void AsyncWiFiManager::handleWifiSave(AsyncWebServerRequest *request) { + DEBUG_WM(F("WiFi save")); + + //SAVE/connect here + needInfo = true; + _ssid = request->arg("s").c_str(); + _pass = request->arg("p").c_str(); + + //parameters + for (int i = 0; i < _paramsCount; i++) { + if (_params[i] == NULL) { + break; + } + //read parameter + String value = request->arg(_params[i]->getID()).c_str(); + //store it in array + value.toCharArray(_params[i]->_value, _params[i]->_length); + DEBUG_WM(F("Parameter")); + DEBUG_WM(_params[i]->getID()); + DEBUG_WM(value); + } + + if (request->hasArg("ip")) { + DEBUG_WM(F("static ip")); + DEBUG_WM(request->arg("ip")); + //_sta_static_ip.fromString(request->arg("ip")); + String ip = request->arg("ip"); + optionalIPFromString(&_sta_static_ip, ip.c_str()); + } + if (request->hasArg("gw")) { + DEBUG_WM(F("static gateway")); + DEBUG_WM(request->arg("gw")); + String gw = request->arg("gw"); + optionalIPFromString(&_sta_static_gw, gw.c_str()); + } + if (request->hasArg("sn")) { + DEBUG_WM(F("static netmask")); + DEBUG_WM(request->arg("sn")); + String sn = request->arg("sn"); + optionalIPFromString(&_sta_static_sn, sn.c_str()); + } + if (request->hasArg("dns1")) { + DEBUG_WM(F("static DNS 1")); + DEBUG_WM(request->arg("dns1")); + String dns1 = request->arg("dns1"); + optionalIPFromString(&_sta_static_dns1, dns1.c_str()); + } + if (request->hasArg("dns2")) { + DEBUG_WM(F("static DNS 2")); + DEBUG_WM(request->arg("dns2")); + String dns2 = request->arg("dns2"); + optionalIPFromString(&_sta_static_dns2, dns2.c_str()); + } + + String page = FPSTR(WFM_HTTP_HEAD); + page.replace("{v}", "Credentials Saved"); + page += FPSTR(HTTP_SCRIPT); + page += FPSTR(HTTP_STYLE); + page += _customHeadElement; + page += F(""); + page += FPSTR(HTTP_HEAD_END); + page += FPSTR(HTTP_SAVED); + page += FPSTR(HTTP_END); + + request->send(200, "text/html", page); + + DEBUG_WM(F("Sent wifi save page")); + + connect = true; //signal ready to connect/reset +} + +/** Handle the info page */ +String AsyncWiFiManager::infoAsString() +{ + String page; + page += F("
Chip ID
"); +#if defined(ESP8266) + page += ESP.getChipId(); +#else + page += getESP32ChipID(); +#endif + page += F("
"); + page += F("
Flash Chip ID
"); +#if defined(ESP8266) + page += ESP.getFlashChipId(); +#else + page += F("N/A for ESP32"); +#endif + page += F("
"); + page += F("
IDE Flash Size
"); + page += ESP.getFlashChipSize(); + page += F(" bytes
"); + page += F("
Real Flash Size
"); +#if defined(ESP8266) + page += ESP.getFlashChipRealSize(); +#else + page += F("N/A for ESP32"); +#endif + page += F(" bytes
"); + page += F("
Soft AP IP
"); + page += WiFi.softAPIP().toString(); + page += F("
"); + page += F("
Soft AP MAC
"); + page += WiFi.softAPmacAddress(); + page += F("
"); + page += F("
Station SSID
"); + page += WiFi.SSID(); + page += F("
"); + page += F("
Station IP
"); + page += WiFi.localIP().toString(); + page += F("
"); + page += F("
Station MAC
"); + page += WiFi.macAddress(); + page += F("
"); + page += F(""); + return page; +} + +void AsyncWiFiManager::handleInfo(AsyncWebServerRequest *request) { + DEBUG_WM(F("Info")); + + String page = FPSTR(WFM_HTTP_HEAD); + page.replace("{v}", "Info"); + page += FPSTR(HTTP_SCRIPT); + page += FPSTR(HTTP_STYLE); + page += _customHeadElement; + if (connect==true) + page += F(""); + page += FPSTR(HTTP_HEAD_END); + page += F("
"); + if (connect==true) + { + page += F("
Trying to connect
"); + page += wifiStatus; + page += F("
"); + } + + page +=pager; + page += FPSTR(HTTP_END); + + request->send(200, "text/html", page); + + DEBUG_WM(F("Sent info page")); +} + +/** Handle the reset page */ +void AsyncWiFiManager::handleReset(AsyncWebServerRequest *request) { + DEBUG_WM(F("Reset")); + + String page = FPSTR(WFM_HTTP_HEAD); + page.replace("{v}", "Info"); + page += FPSTR(HTTP_SCRIPT); + page += FPSTR(HTTP_STYLE); + page += _customHeadElement; + page += FPSTR(HTTP_HEAD_END); + page += F("Module will reset in a few seconds."); + page += FPSTR(HTTP_END); + request->send(200, "text/html", page); + + DEBUG_WM(F("Sent reset page")); + delay(5000); + #if defined(ESP8266) + ESP.reset(); + #else + ESP.restart(); + #endif + delay(2000); +} + + + +//removed as mentioned here https://github.com/tzapu/AsyncWiFiManager/issues/114 +/*void AsyncWiFiManager::handle204(AsyncWebServerRequest *request) { +DEBUG_WM(F("204 No Response")); +request->sendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); +request->sendHeader("Pragma", "no-cache"); +request->sendHeader("Expires", "-1"); +request->send ( 204, "text/plain", ""); + +}*/ + +void AsyncWiFiManager::handleNotFound(AsyncWebServerRequest *request) { + DEBUG_WM(F("Handle not found")); + if (captivePortal(request)) { // If captive portal redirect instead of displaying the error page. + return; + } + String message = "File Not Found\n\n"; + message += "URI: "; + message += request->url(); + message += "\nMethod: "; + message += ( request->method() == HTTP_GET ) ? "GET" : "POST"; + message += "\nArguments: "; + message += request->args(); + message += "\n"; + + for ( uint8_t i = 0; i < request->args(); i++ ) { + message += " " + request->argName ( i ) + ": " + request->arg ( i ) + "\n"; + } + AsyncWebServerResponse *response = request->beginResponse(404,"text/plain",message); + response->addHeader("Cache-Control", "no-cache, no-store, must-revalidate"); + response->addHeader("Pragma", "no-cache"); + response->addHeader("Expires", "-1"); + request->send (response ); +} + + +/** Redirect to captive portal if we got a request for another domain. Return true in that case so the page handler do not try to handle the request again. */ +boolean AsyncWiFiManager::captivePortal(AsyncWebServerRequest *request) { + if (!isIp(request->host()) ) { + DEBUG_WM(F("Request redirected to captive portal")); + AsyncWebServerResponse *response = request->beginResponse(302,"text/plain",""); + response->addHeader("Location", String("http://") + toStringIp(request->client()->localIP())); + request->send ( response); + return true; + } + return false; +} + +//start up config portal callback +void AsyncWiFiManager::setAPCallback( void (*func)(AsyncWiFiManager* myAsyncWiFiManager) ) { + _apcallback = func; +} + +//start up save config callback +void AsyncWiFiManager::setSaveConfigCallback( void (*func)(void) ) { + _savecallback = func; +} + +//sets a custom element to add to head, like a new style tag +void AsyncWiFiManager::setCustomHeadElement(const char* element) { + _customHeadElement = element; +} + +//sets a custom element to add to options page +void AsyncWiFiManager::setCustomOptionsElement(const char* element) { + _customOptionsElement = element; +} + +//if this is true, remove duplicated Access Points - defaut true +void AsyncWiFiManager::setRemoveDuplicateAPs(boolean removeDuplicates) { + _removeDuplicateAPs = removeDuplicates; +} + + + +template +void AsyncWiFiManager::DEBUG_WM(Generic text) { + if (_debug) { + Serial.print("*WM: "); + Serial.println(text); + } +} + +int AsyncWiFiManager::getRSSIasQuality(int RSSI) { + int quality = 0; + + if (RSSI <= -100) { + quality = 0; + } else if (RSSI >= -50) { + quality = 100; + } else { + quality = 2 * (RSSI + 100); + } + return quality; +} + +/** Is this an IP? */ +boolean AsyncWiFiManager::isIp(String str) { + for (int i = 0; i < str.length(); i++) { + int c = str.charAt(i); + if (c != '.' && (c < '0' || c > '9')) { + return false; + } + } + return true; +} + +/** IP to String? */ +String AsyncWiFiManager::toStringIp(IPAddress ip) { + String res = ""; + for (int i = 0; i < 3; i++) { + res += String((ip >> (8 * i)) & 0xFF) + "."; + } + res += String(((ip >> 8 * 3)) & 0xFF); + return res; +} diff --git a/examples/SmartSwitch/ESPAsyncWiFiManager.h b/examples/SmartSwitch/ESPAsyncWiFiManager.h new file mode 100644 index 0000000..f6e2e5b --- /dev/null +++ b/examples/SmartSwitch/ESPAsyncWiFiManager.h @@ -0,0 +1,279 @@ +/************************************************************** + WiFiManager is a library for the ESP8266/Arduino platform + (https://github.com/esp8266/Arduino) to enable easy + configuration and reconfiguration of WiFi credentials using a Captive Portal + inspired by: + http://www.esp8266.com/viewtopic.php?f=29&t=2520 + https://github.com/chriscook8/esp-arduino-apboot + https://github.com/esp8266/Arduino/tree/esp8266/hardware/esp8266com/esp8266/libraries/DNSServer/examples/CaptivePortalAdvanced + Built by AlexT https://github.com/tzapu + Ported to Async Web Server by https://github.com/alanswx + Licensed under MIT license + **************************************************************/ + +#ifndef ESPAsyncWiFiManager_h +#define ESPAsyncWiFiManager_h + +#if defined(ESP8266) +#include //https://github.com/esp8266/Arduino +#else +#include +#include "esp_wps.h" +#define ESP_WPS_MODE WPS_TYPE_PBC +#endif +#include + +//#define USE_EADNS //Uncomment to use ESPAsyncDNSServer +#ifdef USE_EADNS +#include //https://github.com/devyte/ESPAsyncDNSServer + //https://github.com/me-no-dev/ESPAsyncUDP +#else +#include +#endif +#include + +// fix crash on ESP32 (see https://github.com/alanswx/ESPAsyncWiFiManager/issues/44) +#if defined(ESP8266) +typedef int wifi_ssid_count_t; +#else +typedef int16_t wifi_ssid_count_t; +#endif + +#if defined(ESP8266) +extern "C" { + #include "user_interface.h" +} +#else +#include +#endif + +const char WFM_HTTP_HEAD[] PROGMEM = "{v}"; +const char HTTP_STYLE[] PROGMEM = ""; +const char HTTP_SCRIPT[] PROGMEM = ""; +const char HTTP_HEAD_END[] PROGMEM = "
"; +const char HTTP_PORTAL_OPTIONS[] PROGMEM = "



"; +const char HTTP_ITEM[] PROGMEM = "
{v} {r}%
"; +const char HTTP_FORM_START[] PROGMEM = "


"; +const char HTTP_FORM_PARAM[] PROGMEM = "
"; +const char HTTP_FORM_END[] PROGMEM = "
"; +const char HTTP_SCAN_LINK[] PROGMEM = "
"; +const char HTTP_SAVED[] PROGMEM = "
Credentials Saved
Trying to connect ESP to network.
If it fails reconnect to AP to try again
"; +const char HTTP_END[] PROGMEM = "
"; + +#define WIFI_MANAGER_MAX_PARAMS 10 + +class AsyncWiFiManagerParameter { +public: + AsyncWiFiManagerParameter(const char *custom); + AsyncWiFiManagerParameter(const char *id, const char *placeholder, const char *defaultValue, int length); + AsyncWiFiManagerParameter(const char *id, const char *placeholder, const char *defaultValue, int length, const char *custom); + + const char *getID(); + const char *getValue(); + const char *getPlaceholder(); + int getValueLength(); + const char *getCustomHTML(); +private: + const char *_id; + const char *_placeholder; + char *_value; + int _length; + const char *_customHTML; + + void init(const char *id, const char *placeholder, const char *defaultValue, int length, const char *custom); + + friend class AsyncWiFiManager; +}; + + +class WiFiResult +{ +public: + bool duplicate; + String SSID; + uint8_t encryptionType; + int32_t RSSI; + uint8_t* BSSID; + int32_t channel; + bool isHidden; + + WiFiResult() + { + } + + +}; + +class AsyncWiFiManager +{ +public: + #ifdef USE_EADNS + AsyncWiFiManager(AsyncWebServer * server, AsyncDNSServer *dns); + #else + AsyncWiFiManager(AsyncWebServer * server, DNSServer *dns); + #endif + + void scan(); + String scanModal(); + void loop(); + void safeLoop(); + void criticalLoop(); + String infoAsString(); + + boolean autoConnect(unsigned long maxConnectRetries = 1, unsigned long retryDelayMs = 1000); + boolean autoConnect(char const *apName, char const *apPassword = NULL, unsigned long maxConnectRetries = 1, unsigned long retryDelayMs = 1000); + + //if you want to always start the config portal, without trying to connect first + boolean startConfigPortal(char const *apName, char const *apPassword = NULL); + void startConfigPortalModeless(char const *apName, char const *apPassword); + + // get the AP name of the config portal, so it can be used in the callback + String getConfigPortalSSID(); + + void resetSettings(); + + //sets timeout before webserver loop ends and exits even if there has been no setup. + //usefully for devices that failed to connect at some point and got stuck in a webserver loop + //in seconds setConfigPortalTimeout is a new name for setTimeout + void setConfigPortalTimeout(unsigned long seconds); + void setTimeout(unsigned long seconds); + + //sets timeout for which to attempt connecting, usefull if you get a lot of failed connects + void setConnectTimeout(unsigned long seconds); + + //wether or not the wifi manager tries to connect to configured access point even when + //configuration portal (ESP as access point) is running [default true/on] + void setTryConnectDuringConfigPortal(boolean v); + + + void setDebugOutput(boolean debug); + //defaults to not showing anything under 8% signal quality if called + void setMinimumSignalQuality(int quality = 8); + //sets a custom ip /gateway /subnet configuration + void setAPStaticIPConfig(IPAddress ip, IPAddress gw, IPAddress sn); + //sets config for a static IP + void setSTAStaticIPConfig(IPAddress ip, IPAddress gw, IPAddress sn, IPAddress dns1=(uint32_t)0x00000000, IPAddress dns2=(uint32_t)0x00000000); + //called when AP mode and config portal is started + void setAPCallback( void (*func)(AsyncWiFiManager*) ); + //called when settings have been changed and connection was successful + void setSaveConfigCallback( void (*func)(void) ); + //adds a custom parameter + void addParameter(AsyncWiFiManagerParameter *p); + //if this is set, it will exit after config, even if connection is unsucessful. + void setBreakAfterConfig(boolean shouldBreak); + //if this is set, try WPS setup when starting (this will delay config portal for up to 2 mins) + //TODO + //if this is set, customise style + void setCustomHeadElement(const char* element); + //if this is true, remove duplicated Access Points - defaut true + void setRemoveDuplicateAPs(boolean removeDuplicates); + //sets a custom element to add to options page + void setCustomOptionsElement(const char* element); + +private: + AsyncWebServer *server; + #ifdef USE_EADNS + AsyncDNSServer *dnsServer; + #else + DNSServer *dnsServer; + #endif + + + boolean _modeless; + int scannow; + int shouldscan; + boolean needInfo = true; + + //const int WM_DONE = 0; + //const int WM_WAIT = 10; + + //const String HTTP_HEAD = "{v}"; + + void setupConfigPortal(); +#ifdef NO_EXTRA_4K_HEAP + void startWPS(); +#endif + String pager; + wl_status_t wifiStatus; + const char* _apName = "no-net"; + const char* _apPassword = NULL; + String _ssid = ""; + String _pass = ""; + unsigned long _configPortalTimeout = 0; + unsigned long _connectTimeout = 0; + unsigned long _configPortalStart = 0; + + IPAddress _ap_static_ip; + IPAddress _ap_static_gw; + IPAddress _ap_static_sn; + IPAddress _sta_static_ip; + IPAddress _sta_static_gw; + IPAddress _sta_static_sn; + IPAddress _sta_static_dns1= (uint32_t)0x00000000; + IPAddress _sta_static_dns2= (uint32_t)0x00000000; + + int _paramsCount = 0; + int _minimumQuality = -1; + boolean _removeDuplicateAPs = true; + boolean _shouldBreakAfterConfig = false; +#ifdef NO_EXTRA_4K_HEAP + boolean _tryWPS = false; +#endif + const char* _customHeadElement = ""; + const char* _customOptionsElement = ""; + + //String getEEPROMString(int start, int len); + //void setEEPROMString(int start, int len, String string); + + int status = WL_IDLE_STATUS; + int connectWifi(String ssid, String pass); + uint8_t waitForConnectResult(); + void setInfo(); + + String networkListAsString(); + + void handleRoot(AsyncWebServerRequest *); + void handleWifi(AsyncWebServerRequest*,boolean scan); + void handleWifiSave(AsyncWebServerRequest*); + void handleInfo(AsyncWebServerRequest*); + void handleReset(AsyncWebServerRequest*); + void handleNotFound(AsyncWebServerRequest*); + void handle204(AsyncWebServerRequest*); + boolean captivePortal(AsyncWebServerRequest*); + + // DNS server + const byte DNS_PORT = 53; + + //helpers + int getRSSIasQuality(int RSSI); + boolean isIp(String str); + String toStringIp(IPAddress ip); + + boolean connect; + boolean _debug = true; + + WiFiResult *wifiSSIDs; + wifi_ssid_count_t wifiSSIDCount; + boolean wifiSSIDscan; + + boolean _tryConnectDuringConfigPortal = true; + + void (*_apcallback)(AsyncWiFiManager*) = NULL; + void (*_savecallback)(void) = NULL; + + AsyncWiFiManagerParameter* _params[WIFI_MANAGER_MAX_PARAMS]; + + template + void DEBUG_WM(Generic text); + + template + auto optionalIPFromString(T *obj, const char *s) -> decltype( obj->fromString(s) ) { + return obj->fromString(s); + } + auto optionalIPFromString(...) -> bool { + DEBUG_WM("NO fromString METHOD ON IPAddress, you need ESP8266 core 2.1.0 or newer for Custom IP configuration to work."); + return false; + } +}; + +#endif diff --git a/examples/SmartSwitch/PinOut_Notes.txt b/examples/SmartSwitch/PinOut_Notes.txt new file mode 100644 index 0000000..c8c2a50 --- /dev/null +++ b/examples/SmartSwitch/PinOut_Notes.txt @@ -0,0 +1,13 @@ +ESP12 + +static const uint8_t D0 = 16; +static const uint8_t D1 = 5; +static const uint8_t D2 = 4; // DHT DATA I/O +static const uint8_t D3 = 0; // BUTTON - most modules have it populated on PCB +static const uint8_t D4 = 2; // LED (RELAY) - most modules have it populated on PCB +static const uint8_t D5 = 14; +static const uint8_t D6 = 12; +static const uint8_t D7 = 13; +static const uint8_t D8 = 15; +static const uint8_t D9 = 3; +static const uint8_t D10 = 1; \ No newline at end of file diff --git a/examples/SmartSwitch/SmartSwitch.ino b/examples/SmartSwitch/SmartSwitch.ino new file mode 100644 index 0000000..22d9998 --- /dev/null +++ b/examples/SmartSwitch/SmartSwitch.ino @@ -0,0 +1,479 @@ +/* +SmartSwitch application +Based on ESP_AsyncFSBrowser +Temperature Control for heater with schedule +Main purpose - for winter outside car block heater or battery charger +Wide browser compatibility, no other server-side needed. +HTTP server and WebSocket, single port +Standalone, no JS dependencies for the browser from Internet (I hope) +Based on ESP_AsyncFSBrowser +Real Time (NTP) w/ Time Zones +Memorized settings to EEPROM +Multiple clients can be connected at same time, they see each other requests +Use latest ESP core lib (from github) +*/ + +#define USE_WFM // to use ESPAsyncWiFiManager + +#include +#ifdef ESP32 + #include + #include + #include + #include + #include +#elif defined(ESP8266) + #include + #include + #include +#endif +#include +#ifdef USE_WFM + #include "ESPAsyncWiFiManager.h" +#endif +#include +#include +#include +#include +#include +#define MYTZ TZ_America_Toronto +#define RTC_UTC_TEST 1577836800 // Some Date + +#define EESC 100 // fixed eeprom address for sched choice +#define EECH 104 // fixed eeprom address to keep selected active channel, only for reference here +#define EEBEGIN EECH + 1 +#define EEMARK 0x5A +#define MEMMAX 1 // 0,1,2... last max index (only 2 channels) +#define EEALL 512 + +#define HYST 0.5 // C +/- hysteresis + +// DHT +#define DHTTYPE DHT22 // DHT 11 // DHT 22, AM2302, AM2321 // DHT 21, AM2301 +#define DHTPIN 4 //D2 + +DHT dht(DHTPIN, DHTTYPE); + +// SKETCH BEGIN MAIN DECLARATIONS +Ticker tim; +AsyncWebServer server(80); //single port - easy for forwarding +AsyncWebSocket ws("/ws"); + +#ifdef USE_WFM + DNSServer dns; +#else + const char* ssid = "MYSSD"; + const char* password = "MYPASSWD"; +#endif +const char * hostName = "smartsw"; +const char* http_username = "smart"; // for SPIFFSEditor (and static html) +const char* http_password = "switch"; + +// RTC +static timeval tv; +static time_t now; + +// HW I/O +const int btnPin = 0; //D3 +const int ledPin = 2; //D4 +int btnState = HIGH; + +// Globals +uint8_t count = 0; +uint8_t sched = 0; // automatic schedule +byte memch = 0; // select memory "channel" to work with +float t = 0; +float h = 0; +bool udht = false; +bool heat_enabled_prev = false; +int ledState; + +struct EE_bl { + byte memid; //here goes the EEMARK stamp + uint8_t hstart; + uint8_t mstart; + uint8_t hstop; + uint8_t mstop; + float tempe; +}; + +EE_bl ee = {0,0,0,0,0,0.1}; //populate as initial + +// SUBS +void writeEE() { + ee.memid = EEMARK; + //EEPROM.put(EESC, sched); // only separately when needed with commit() + //EEPROM.put(EECH, memch); // not need to store and retrieve memch + EEPROM.put(EEBEGIN + memch*sizeof(ee), ee); + EEPROM.commit(); //needed for ESP8266? +} + +void readEE() { + byte ChkEE; + if (memch > MEMMAX) memch = 0; + EEPROM.get(EEBEGIN + memch*sizeof(ee), ChkEE); + if (ChkEE == EEMARK){ //otherwise stays with defaults + EEPROM.get(EEBEGIN + memch*sizeof(ee), ee); + EEPROM.get(EESC, sched); + if (sched > MEMMAX + 1) sched = 0; + } +} + +void showTime() +{ + byte tmpch = 0; + bool heat_enabled = false; + + gettimeofday(&tv, nullptr); + now = time(nullptr); + const tm* tm = localtime(&now); + ws.printfAll("Now,Clock,%02d:%02d,%d", tm->tm_hour, tm->tm_min, tm->tm_wday); + if ((2==tm->tm_hour )&&(2==tm->tm_min)) { + configTime(MYTZ, "pool.ntp.org"); + Serial.print(F("Sync Clock at 02:02\n")); + } + Serial.printf("RTC: %02d:%02d\n", tm->tm_hour, tm->tm_min); + + if (sched == 0) { // automatic + if ((tm->tm_wday > 0)&&(tm->tm_wday < 6)) tmpch = 0; //weekdays + else tmpch = 0; //weekend + } else { // manual + tmpch = sched - 1; //and stays + } + + if (tmpch != memch) { // update if different + memch = tmpch; + readEE(); + ws.printfAll("Now,Setting,%02d:%02d,%02d:%02d,%+2.1f", ee.hstart, ee.mstart, ee.hstop, ee.mstop, ee.tempe); + } + + // process smart switch by time and temperature + uint16_t xmi = (uint16_t)(60*tm->tm_hour) + tm->tm_min; // max 24h = 1440min, current time + uint16_t bmi = (uint16_t)(60*ee.hstart) + ee.mstart; // begin in minutes + uint16_t emi = (uint16_t)(60*ee.hstop) + ee.mstop; // end in minutes + + if (bmi == emi) heat_enabled = false; + else { //enable smart if different + + if (((bmi < emi)&&(bmi <= xmi)&&(xmi < emi))|| + ((emi < bmi)&&((bmi <= xmi)||(xmi < emi)))) { + heat_enabled = true; + } else heat_enabled = false; + } + + if (heat_enabled_prev) { // smart control (delayed one cycle) + if (((t - HYST) < ee.tempe)&&(ledState == HIGH)) { // OFF->ON once + ledState = LOW; + digitalWrite(ledPin, ledState); // apply change + ws.textAll("led,ledon"); + } + if ((((t + HYST) > ee.tempe)&&(ledState == LOW))||(!heat_enabled)) { // ON->OFF once, also turn off at end of period. + ledState = HIGH; + digitalWrite(ledPin, ledState); // apply change + ws.textAll("led,ledoff"); + } + Serial.printf(ledState ? "LED OFF" : "LED ON"); + Serial.print(F(", Smart enabled\n")); + } + heat_enabled_prev = heat_enabled; //update +} + +void updateDHT(){ + h = dht.readHumidity(); + t = dht.readTemperature(); //Celsius or dht.readTemperature(true) for Fahrenheit + if (isnan(h) || isnan(t)) { + Serial.print(F("Failed to read from DHT sensor!")); + h = 0; // debug w/o sensor + t = 0; + } +} + +void analogSample() +{ + ws.printfAll("wpMeter,Arduino,%+2.1f,%2.1f,%d", t, h, heat_enabled_prev); + Serial.printf("T/H.: %+2.1f°C/%2.1f%%,%d\n", t, h, heat_enabled_prev); +} + +void checkPhysicalButton() +{ + if (digitalRead(btnPin) == LOW) { + if (btnState != LOW) { // btnState is used to avoid sequential toggles + ledState = !ledState; + digitalWrite(ledPin, ledState); + if (ledState) ws.textAll("led,ledoff"); + else ws.textAll("led,ledon"); + } + btnState = LOW; + } else { + btnState = HIGH; + } +} + +void mytimer() { + ++count; //200ms increments + checkPhysicalButton(); + if ((count % 25) == 1) { // update temp every 5 seconds + analogSample(); + udht = true; + } + if ((count % 50) == 0) { // update temp every 10 seconds + ws.cleanupClients(); + } + if (count >= 150) { // cycle every 30 sec + showTime(); + count = 0; + } +} + +// server +void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){ + if(type == WS_EVT_CONNECT){ + Serial.printf("ws[%s][%u] connect\n", server->url(), client->id()); + //client->printf("Hello Client %u :)", client->id()); + //client->ping(); + + IPAddress ip = client->remoteIP(); + Serial.printf("[%u] Connected from %d.%d.%d.%d\n", client->id(), ip[0], ip[1], ip[2], ip[3]); + showTime(); + analogSample(); + if (ledState) ws.textAll("led,ledoff"); + else ws.textAll("led,ledon"); + + ws.printfAll("Now,Setting,%02d:%02d,%02d:%02d,%+2.1f", ee.hstart, ee.mstart, ee.hstop, ee.mstop, ee.tempe); + ws.printfAll("Now,sched,%d", sched); + + } else if(type == WS_EVT_DISCONNECT){ + Serial.printf("ws[%s][%u] disconnect\n", server->url(), client->id()); + ws.textAll("Now,remoff"); + + } else if(type == WS_EVT_ERROR){ + Serial.printf("ws[%s][%u] error(%u): %s\n", server->url(), client->id(), *((uint16_t*)arg), (char*)data); + } else if(type == WS_EVT_PONG){ + Serial.printf("ws[%s][%u] pong[%u]: %s\n", server->url(), client->id(), len, (len)?(char*)data:""); + } else if(type == WS_EVT_DATA){ + AwsFrameInfo * info = (AwsFrameInfo*)arg; + String msg = ""; + if(info->final && info->index == 0 && info->len == len){ + //the whole message is in a single frame and we got all of it's data + Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT)?"text":"binary", info->len); + + if(info->opcode == WS_TEXT){ + for(size_t i=0; i < info->len; i++) { //debug + msg += (char) data[i]; + } + if(data[0] == 'L') { // LED + if(data[1] == '1') { + ledState = LOW; + ws.textAll("led,ledon"); // for others + } + else if(data[1] == '0') { + ledState = HIGH; + ws.textAll("led,ledoff"); + } + digitalWrite(ledPin, ledState); // apply change + + + } else if(data[0] == 'T') { // timeset + if (len > 11) { + data[3] = data[6] = data[9] = data[12] = 0; // cut strings + ee.hstart = (uint8_t) atoi((const char *) &data[1]); + ee.mstart = (uint8_t) atoi((const char *) &data[4]); + ee.hstop = (uint8_t) atoi((const char *) &data[7]); + ee.mstop = (uint8_t) atoi((const char *) &data[10]); + Serial.printf("[%u] Timer set %02d:%02d - %02d:%02d\n", client->id(), ee.hstart, ee.mstart, ee.hstop, ee.mstop); + writeEE(); + memch = 255; // to force showTime()to send Setting + showTime(); + } + } else if(data[0] == 'W') { // temperatureset + if (len > 3) { + if (ee.tempe != (float) atof((const char *) &data[1])){ + ee.tempe = (float) atof((const char *) &data[1]); + Serial.printf("[%u] Temp set %+2.1f\n", client->id(), ee.tempe); + writeEE(); + memch = 255; // to force showTime()to send Setting + showTime(); + } + } + } else if ((data[0] == 'Z')&&(len > 2)) { // sched + data[2] = 0; + if (sched != (uint8_t) atoi((const char *) &data[1])){ + sched = (uint8_t) atoi((const char *) &data[1]); + EEPROM.put(EESC, sched); //separately + EEPROM.commit(); //needed for ESP8266? + ws.printfAll("Now,sched,%d", sched); + showTime(); + } + } + + } else { + char buff[3]; + for(size_t i=0; i < info->len; i++) { + sprintf(buff, "%02x ", (uint8_t) data[i]); + msg += buff ; + } + } + Serial.printf("%s\n",msg.c_str()); + + if(info->opcode == WS_TEXT) + client->text("I got your text message"); + else + client->binary("I got your binary message"); + + } else { + //message is comprised of multiple frames or the frame is split into multiple packets + if(info->index == 0){ + if(info->num == 0) + Serial.printf("ws[%s][%u] %s-message start\n", server->url(), client->id(), (info->message_opcode == WS_TEXT)?"text":"binary"); + Serial.printf("ws[%s][%u] frame[%u] start[%llu]\n", server->url(), client->id(), info->num, info->len); + } + + Serial.printf("ws[%s][%u] frame[%u] %s[%llu - %llu]: ", server->url(), client->id(), info->num, (info->message_opcode == WS_TEXT)?"text":"binary", info->index, info->index + len); + + if(info->opcode == WS_TEXT){ + for(size_t i=0; i < len; i++) { + msg += (char) data[i]; + } + } else { + char buff[3]; + for(size_t i=0; i < len; i++) { + sprintf(buff, "%02x ", (uint8_t) data[i]); + msg += buff ; + } + } + Serial.printf("%s\n",msg.c_str()); + + if((info->index + len) == info->len){ + Serial.printf("ws[%s][%u] frame[%u] end[%llu]\n", server->url(), client->id(), info->num, info->len); + if(info->final){ + Serial.printf("ws[%s][%u] %s-message end\n", server->url(), client->id(), (info->message_opcode == WS_TEXT)?"text":"binary"); + if(info->message_opcode == WS_TEXT) + client->text("I got your text message"); + else + client->binary("I got your binary message"); + } + } + } + } +} + + +// setup ----------------------------------- + +void setup(){ + Serial.begin(115200); + Serial.setDebugOutput(true); + +//Wifi +#ifdef USE_WFM + AsyncWiFiManager wifiManager(&server,&dns); + //wifiManager.resetSettings(); + wifiManager.autoConnect("SmartSW"); +#else + //WiFi.mode(WIFI_AP_STA); // Core SVN 5179 use STA as default interface in mDNS (#7042) + //WiFi.softAP(hostName); // Core SVN 5179 use STA as default interface in mDNS (#7042) + WiFi.mode(WIFI_STA); // Core SVN 5179 use STA as default interface in mDNS (#7042) + WiFi.begin(ssid, password); + if (WiFi.waitForConnectResult() != WL_CONNECTED) { + Serial.print(F("STA: Failed!\n")); + WiFi.disconnect(false); + delay(1000); + WiFi.begin(ssid, password); + } +#endif + + Serial.print(F("*CONNECTED*\n")); + +//DHT + dht.begin(); + updateDHT(); //first reading takes time, hold here than the loop; + +//Real Time + time_t rtc = RTC_UTC_TEST; + timeval tv = { rtc, 0 }; + //timezone tz = { 0, 0 }; //(insert) <#5194 + settimeofday(&tv, nullptr); //settimeofday(&tv, &tz); // <#5194 + configTime(MYTZ, "pool.ntp.org"); + +//MDNS (not needed) + // MDNS.begin(hostName); + // MDNS.addService("http","tcp",80); // Core SVN 5179 use STA as default interface in mDNS (#7042) + +//I/O & DHT + pinMode(ledPin, OUTPUT); + pinMode(btnPin, INPUT_PULLUP); + +//EE + EEPROM.begin(EEALL); + //EEPROM.get(EECH, memch); //current channel, no need + readEE(); // populate structure if healthy + digitalWrite(ledPin, ledState); + Serial.printf("Timer set %02d:%02d - %02d:%02d\n", ee.hstart, ee.mstart, ee.hstop, ee.mstop); + Serial.printf("Temp set %+2.1f\n", ee.tempe); + +//SPIFFS + SPIFFS.begin(); + + ws.onEvent(onWsEvent); + server.addHandler(&ws); + +#ifdef ESP32 + server.addHandler(new SPIFFSEditor(SPIFFS, http_username,http_password)); +#elif defined(ESP8266) + server.addHandler(new SPIFFSEditor(http_username,http_password)); +#endif + + server.on("/free-ram", HTTP_GET, [](AsyncWebServerRequest *request){ // direct request->answer + request->send(200, "text/plain", String(ESP.getFreeHeap())); + }); + + server.on("/hw-reset", HTTP_GET, [](AsyncWebServerRequest *request){ + request->onDisconnect([]() { +#ifdef ESP32 + ESP.restart(); +#elif defined(ESP8266) + ESP.reset(); +#endif + }); + request->send(200, "text/plain","Restarting ..."); + }); + + server.on("/erase-wifi", HTTP_GET, [](AsyncWebServerRequest *request){ + request->onDisconnect([]() { + WiFi.disconnect(true); + }); + request->send(200, "text/plain","Erasing WiFi data ..."); + }); + + server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.htm"); //.setAuthentication(http_username,http_password); //append or remove auth part + + + server.onNotFound([](AsyncWebServerRequest *request){ // nothing known + Serial.print(F("NOT_FOUND: ")); + if (request->method() == HTTP_OPTIONS) request->send(200); //CORS + else request->send(404); + }); + + DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*");//CORS + server.begin(); + + //Timer tick + tim.attach(0.2, mytimer); //every 0.2s + + //OTA + ArduinoOTA.setHostname(hostName); + ArduinoOTA.onStart([]() { + Serial.print(F("OTA Started ...\n")); + ws.textAll("Now,OTA"); // for all clients + }); + ArduinoOTA.begin(); +} // setup end + +// loop ----------------------------------- +void loop(){ + if (udht){ // 5sec + updateDHT(); + udht = false; + } + ArduinoOTA.handle(); +} diff --git a/examples/SmartSwitch/data/.exclude.files b/examples/SmartSwitch/data/.exclude.files new file mode 100644 index 0000000..4aacf0d --- /dev/null +++ b/examples/SmartSwitch/data/.exclude.files @@ -0,0 +1,2 @@ +/*.gz +/.exclude.files diff --git a/examples/SmartSwitch/data/acefull.js.gz b/examples/SmartSwitch/data/acefull.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..e10ad62d2aa6c854fa9364434369bc33ec30f5a3 GIT binary patch literal 111691 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 literal 0 HcmV?d00001 diff --git a/examples/SmartSwitch/data/app.css.gz b/examples/SmartSwitch/data/app.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..a5beb7d7e4f80b82d9860430de622bd7f38ff88d GIT binary patch literal 2740 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 literal 0 HcmV?d00001 diff --git a/examples/SmartSwitch/data/app.min.js.gz b/examples/SmartSwitch/data/app.min.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..dce4784ea304a514e44df1ca6e3356c8d4bf29dd GIT binary patch literal 38439 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 literal 0 HcmV?d00001 diff --git a/examples/SmartSwitch/data/index2.htm b/examples/SmartSwitch/data/index2.htm new file mode 100644 index 0000000..44c86bf --- /dev/null +++ b/examples/SmartSwitch/data/index2.htm @@ -0,0 +1,585 @@ + + + + + + Smart Switch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + + + + + +
+ + + + + +
+
+ +
+
+
+ +
+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/acefull.js b/examples/SmartSwitch/data_src/acefull.js new file mode 100644 index 0000000..46b3712 --- /dev/null +++ b/examples/SmartSwitch/data_src/acefull.js @@ -0,0 +1 @@ +(function(){var e=function(){return this}();!e&&"undefined"!=typeof window&&(e=window);var o=function(e,t,i){"string"==typeof e?(2==arguments.length&&(i=t),o.modules[e]||(o.payloads[e]=i,o.modules[e]=null)):o.original?o.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace())};o.modules={},o.payloads={};var t,i,r=function(e,t,i){if("string"==typeof t){var n=c(e,t);if(null!=n)return i&&i(),n}else if("[object Array]"===Object.prototype.toString.call(t)){for(var s=[],o=0,r=t.length;os.index&&this.lastIndex--}return s},l||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t}))}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(e,t,i){function o(){}function n(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(e){}}function s(e){return(e=+e)!=e?e=0:0!==e&&e!==1/0&&e!==-1/0&&(e=(0>>0;if("[object Function]"!=m(e))throw new TypeError;for(;++s>>0,s=Array(n),o=arguments[1];if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");for(var r=0;r>>0,o=[],r=arguments[1];if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");for(var a=0;a>>0,s=arguments[1];if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");for(var o=0;o>>0,s=arguments[1];if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");for(var o=0;o>>0;if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");if(!n&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var s,o=0;if(2<=arguments.length)s=arguments[1];else for(;;){if(o in i){s=i[o++];break}if(++o>=n)throw new TypeError("reduce of empty array with no initial value")}for(;o>>0;if("[object Function]"!=m(e))throw new TypeError(e+" is not a function");if(!n&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var s,o=n-1;if(2<=arguments.length)s=arguments[1];else for(;;){if(o in i){s=i[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}for(;o in this&&(s=e.call(void 0,s,i[o],o,t)),o--;);return s}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(e){var t=$&&"[object String]"==m(this)?this.split(""):M(this),i=t.length>>>0;if(!i)return-1;var n=0;for(1>>0;if(!i)return-1;var n=i-1;for(1 ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t,i=e.end,n=e.start;return 1==(t=this.compare(i.row,i.column))?1==(t=this.compare(n.row,n.column))?2:0==t?1:0:-1==t?-2:-1==(t=this.compare(n.row,n.column))?-1:1==t?42:0},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){var t=this.compareRange(e);return-1==t||0==t||1==t},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){"object"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){"object"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&(!this.isEnd(e,t)&&!this.isStart(e,t))},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0:tthis.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var i={row:t+1,column:0};else if(this.end.rowt)var n={row:t+1,column:0};else if(this.start.row>=1)&&(e+=e);return i};var n=/^\s\s*/,s=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(n,"")},t.stringTrimRight=function(e){return e.replace(s,"")},t.copyObject=function(e){var t={};for(var i in e)t[i]=e[i];return t},t.copyArray=function(e){for(var t=[],i=0,n=e.length;ii+1?a.length:s,s+=o.length+1,o=o+"\n"+a}400w-1&&v[v.length-c]==e[e.length-c];)c++,o--;return a-=c-1,l-=c-1,r=r.slice(0,r.length-c+1),t||a!=r.length||s||o||l?(f=!0,r&&!s&&!o&&!a&&!l||p?h.onTextInput(r):h.onTextInput(r,{extendLeft:s,extendRight:o,restoreStart:a,restoreEnd:l}),f=!1,v=e,w=i,b=n,r):""},o=function(e){if(g)return A();var t=u.value,i=s(t,!0);(500=v.length&&t.value===v&&v&&t.selectionEnd!==b&&(h.selectAll(),$()))}),T.addListener(u,"input",o),T.addListener(u,"cut",k),T.addListener(u,"copy",C),T.addListener(u,"paste",S),(!("oncut"in u)||!("oncopy"in u)||!("onpaste"in u))&&T.addListener(e,"keydown",function(e){if((!M.isMac||e.metaKey)&&e.ctrlKey)switch(e.keyCode){case 67:C(e);break;case 86:S(e);break;case 88:k(e)}});var A=function(){if(g&&h.onCompositionUpdate&&!h.$readOnly){if(p)return i();if(g.useTextareaForIME)h.onCompositionUpdate(u.value);else{var e=u.value;s(e),g.markerRange&&(g.context&&(g.markerRange.start.column=g.selectionStart=g.context.compositionStartOffset),g.markerRange.end.column=g.markerRange.start.column+b-g.selectionStart)}}},L=function(e){h.onCompositionEnd&&!h.$readOnly&&(g=!1,h.onCompositionEnd(),h.off("mousedown",i),e&&o())},R=O.delayedCall(A,50).schedule.bind(null,null);T.addListener(u,"compositionstart",function(e){if(!g&&h.onCompositionStart&&!h.$readOnly&&(g={},!p)){setTimeout(A,0),h.on("mousedown",i);var t=h.getSelectionRange();t.end.row=t.start.row,t.end.column=t.start.column,g.markerRange=t,g.selectionStart=w,h.onCompositionStart(g),g.useTextareaForIME?(u.value="",v="",b=w=0):(u.msGetInputContext&&(g.context=u.msGetInputContext()),u.getInputContext&&(g.context=u.getInputContext()))}}),T.addListener(u,"compositionupdate",A),T.addListener(u,"keyup",function(e){27==e.keyCode&&u.value.lengththis.$focusTimeout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),i=this.editor,n=i.session.getBracketRange(t);n?(n.isEmpty()&&(n.start.column--,n.end.column++),this.setState("select")):(n=i.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=n,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),i=this.editor;this.setState("selectByLines");var n=i.getSelectionRange();n.isMultiLine()&&n.contains(t.row,t.column)?(this.$clickSelection=i.selection.getLineRange(n.start.row),this.$clickSelection.end=i.selection.getLineRange(n.end.row).end):this.$clickSelection=i.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var i=this.$lastScroll,n=e.domEvent.timeStamp,s=n-i.t,o=s?e.wheelX/s:i.vx,r=s?e.wheelY/s:i.vy;s<550&&(o=(o+i.vx)/2,r=(r+i.vy)/2);var a=Math.abs(o/r),l=!1;if(1<=a&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(l=!0),a<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(l=!0),l)i.allowed=n;else if(n-i.allowed<550){var c=Math.abs(o)<=1.5*Math.abs(i.vx)&&Math.abs(r)<=1.5*Math.abs(i.vy);i.allowed=c?(l=!0,n):0}return i.t=n,i.vx=o,i.vy=r,l?(t.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()):void 0}},this.onTouchMove=function(e){this.editor._emit("mousewheel",e)}}).call(n.prototype),t.DefaultHandlers=n}),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],function(e,t,i){"use strict";function n(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}e("./lib/oop");var s=e("./lib/dom");(function(){this.$init=function(){return this.$element=s.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){this.getElement().textContent=e},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+"px",this.getElement().style.top=t+"px"},this.setClassName=function(e){s.addCssClass(this.getElement(),e)},this.show=function(e,t,i){null!=e&&this.setText(e),null!=t&&null!=i&&this.setPosition(t,i),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth},this.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)}}).call(n.prototype),t.Tooltip=n}),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],function(e,t,i){"use strict";function n(e){r.call(this,e)}var s=e("../lib/dom"),o=e("../lib/oop"),f=e("../lib/event"),r=e("../tooltip").Tooltip;o.inherits(n,r),function(){this.setPosition=function(e,t){var i=window.innerWidth||document.documentElement.clientWidth,n=window.innerHeight||document.documentElement.clientHeight,s=this.getWidth(),o=this.getHeight();i<(e+=15)+s&&(e-=e+s-i),n<(t+=15)+o&&(t-=20+o),r.prototype.setPosition.call(this,e,t)}}.call(n.prototype),t.GutterHandler=function(r){function a(){i&&(i=clearTimeout(i)),h&&(g.hide(),h=null,u._signal("hideGutterTooltip",g),u.removeEventListener("mousewheel",a))}function l(e){g.setPosition(e.x,e.y)}var i,c,h,u=r.editor,d=u.renderer.$gutterLayer,g=new n(u.container);r.editor.setDefaultHandler("guttermousedown",function(e){if(u.isFocused()&&0==e.getButton()&&"foldWidgets"!=d.getRegion(e)){var t=e.getDocumentPosition().row,i=u.session.selection;if(e.getShiftKey())i.selectTo(t,0);else{if(2==e.domEvent.detail)return u.selectAll(),e.preventDefault();r.$clickSelection=u.selection.getLineRange(t)}return r.setState("selectByLines"),r.captureMouse(e),e.preventDefault()}}),r.editor.setDefaultHandler("guttermousemove",function(e){var t=e.domEvent.target||e.domEvent.srcElement;if(s.hasCssClass(t,"ace_fold-widget"))return a();h&&r.$tooltipFollowsMouse&&l(e),c=e,i||(i=setTimeout(function(){i=null,c&&!r.isMousePressed?function(){var e=c.getDocumentPosition().row,t=d.$annotations[e];if(!t)return a();if(e==u.session.getLength()){var i=u.renderer.pixelToScreenCoordinates(0,c.y).row,n=c.$pos;if(i>u.session.documentToScreenRow(n.row,n.column))return a()}if(h!=t)if(h=t.text.join("
"),g.setHtml(h),g.show(),u._signal("showGutterTooltip",g),u.on("mousewheel",a),r.$tooltipFollowsMouse)l(c);else{var s=c.domEvent.target.getBoundingClientRect(),o=g.getElement().style;o.left=s.right+"px",o.top=s.bottom+"px"}}():a()},50))}),f.addListener(u.renderer.$gutter,"mouseout",function(e){c=null,h&&!i&&(i=setTimeout(function(){i=null,a()},50))}),u.on("changeSession",a)}}),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],function(e,t,i){"use strict";var n=e("../lib/event"),s=e("../lib/useragent"),o=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){n.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){n.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e=this.editor.getSelectionRange();if(e.isEmpty())this.$inSelection=!1;else{var t=this.getDocumentPosition();this.$inSelection=e.contains(t.row,t.column)}return this.$inSelection},this.getButton=function(){return n.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=s.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(o.prototype)}),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],function(e,t,i){"use strict";function n(t){function e(){var e,t,i,n,s,o=u;u=g.renderer.screenToTextCoordinates(f,m),e=u,t=o,i=Date.now(),n=!t||e.row!=t.row,s=!t||e.column!=t.column,!w||n||s?(g.moveCursorToPosition(e),w=i,b={x:f,y:m}):5this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor;e.container.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var t=A.isWin?"default":"move";e.renderer.setCursorStyle(t),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;A.isIE&&"dragReady"==this.state&&(3=e){for(n=l+1;n=e;)n++;for(s=l,o=n-1;s=t.length||(s=i[n-1])!=g&&s!=f||(o=t[n+1])!=g&&o!=f?C:(b&&(o=f),o==s?o:C);case E:return(s=0>8;return 0==i?191L&&t[a]t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.$isEmpty?a.fromPoints(t,t):this.isBackwards()?a.fromPoints(t,e):a.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){this.$setSelection(0,0,Number.MAX_VALUE,Number.MAX_VALUE)},this.setRange=this.setSelectionRange=function(e,t){var i=t?e.end:e.start,n=t?e.start:e.end;this.$setSelection(i.row,i.column,n.row,n.column)},this.$setSelection=function(e,t,i,n){var s=this.$isEmpty,o=this.inMultiSelectMode;this.$silent=!0,this.$cursorChanged=this.$anchorChanged=!1,this.anchor.setPosition(e,t),this.cursor.setPosition(i,n),this.$isEmpty=!a.comparePoints(this.anchor,this.cursor),this.$silent=!1,this.$cursorChanged&&this._emit("changeCursor"),(this.$cursorChanged||this.$anchorChanged||s!=this.$isEmpty||o)&&this._emit("changeSelection")},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(void 0===t){var i=e||this.lead;e=i.row,t=i.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var i,n="number"==typeof e?e:this.lead.row,s=this.session.getFoldLine(n);return i=s?(n=s.start.row,s.end.row):n,!0===t?new a(n,0,i,this.session.getLine(i).length):new a(n,0,i+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,i){var n=e.column,s=e.column+t;return i<0&&(n=e.column-t,s=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(n,s).split(" ").length-1==t},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,-1))this.moveCursorTo(e.start.row,e.start.column);else if(0===t.column)0=i.length)return this.moveCursorTo(e,i.length),this.moveCursorRight(),void(ec){var p=e.substring(c,m-f.length);u.type==d?u.value+=p:(u.type&&l.push(u),u={type:d,value:p})}for(var v=0;vw){for(h>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});c=this.$rowTokens.length;){if(this.$row+=1,e||(e=this.$session.getLength()),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,i=e[t].start;if(void 0!==i)return i;for(i=0;0e.length&&(y=e.length)}),l==1/0&&(l=y,a=r=!1),h&&l%c!=0&&(l=Math.floor(l/c)*c),t(a?w:v)},this.toggleBlockComment=function(e,t,i,n){var s=this.blockComment;if(s){!s.start&&s[0]&&(s=s[0]);var o,r,a=(g=new m(t,n.row,n.column)).getCurrentToken(),l=(t.selection,t.selection.toOrientedRange());if(a&&/comment/.test(a.type)){for(var c,h;a&&/comment/.test(a.type);){if(-1!=(f=a.value.indexOf(s.start))){var u=g.getCurrentTokenRow(),d=g.getCurrentTokenColumn()+f;c=new p(u,d,u,d+s.start.length);break}a=g.stepBackward()}var g;for(a=(g=new m(t,n.row,n.column)).getCurrentToken();a&&/comment/.test(a.type);){var f;if(-1!=(f=a.value.indexOf(s.end))){u=g.getCurrentTokenRow(),d=g.getCurrentTokenColumn()+f;h=new p(u,d,u,d+s.end.length);break}a=g.stepForward()}h&&t.remove(h),c&&(t.remove(c),o=c.start.row,r=-s.start.length)}else r=s.start.length,o=i.start.row,t.insert(i.end,s.end),t.insert(i.start,s.start);l.start.row==o&&(l.start.column+=r),l.end.row==o&&(l.end.column+=r),t.selection.fromOrientedRange(l)}},this.getNextLineIndent=function(e,t,i){return this.$getIndent(t)},this.checkOutdent=function(e,t,i){return!1},this.autoOutdent=function(e,t,i){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var n in this.$embeds=[],this.$modes={},e)if(e[n]){var t=e[n],i=t.prototype.$id,s=r.$modes[i];s||(r.$modes[i]=s=new t),r.$modes[n]||(r.$modes[n]=s),this.$embeds.push(n),this.$modes[n]=s}var o=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(n=0;nthis.row)){var t,i,n,s,o,r,a,l,c=(t=e,i={row:this.row,column:this.column},n=this.$insertRight,s="insert"==t.action,o=(s?1:-1)*(t.end.row-t.start.row),r=(s?1:-1)*(t.end.column-t.start.column),a=t.start,l=s?a:t.end,h(i,a,n)?{row:i.row,column:i.column}:h(l,i,!n)?{row:i.row+o,column:i.column+(i.row==l.row?r:0)}:{row:a.row,column:a.column});this.setPosition(c.row,c.column,!0)}},this.setPosition=function(e,t,i){var n;if(n=i?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row!=n.row||this.column!=n.column){var s={row:this.row,column:this.column};this.row=n.row,this.column=n.column,this._signal("change",{old:s,value:n})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var i={};return e>=this.document.getLength()?(i.row=Math.max(0,this.document.getLength()-1),i.column=this.document.getLine(i.row).length):i.column=e<0?i.row=0:(i.row=e,Math.min(this.document.getLine(i.row).length,Math.max(0,t))),t<0&&(i.column=0),i}}).call(o.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,i){"use strict";var n=e("./lib/oop"),s=e("./apply_delta").applyDelta,o=e("./lib/event_emitter").EventEmitter,h=e("./range").Range,r=e("./anchor").Anchor,a=function(e){this.$lines=[""],0===e.length?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){n.implement(this,o),this.setValue=function(e){var t=this.getLength()-1;this.remove(new h(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new r(this,e,t)},0==="aaa".split(/a/).length?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return"\r\n"==e||"\r"==e||"\n"==e},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{(t=this.getLines(e.start.row,e.end.row))[0]=(t[0]||"").substring(e.start.column);var i=t.length-1;e.end.row-e.start.row==i&&(t[i]=t[i].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var i=this.clippedPos(e.row,e.column),n=this.pos(e.row,e.column+t.length);return this.applyDelta({start:i,end:n,action:"insert",lines:[t]},!0),this.clonePos(n)},this.clippedPos=function(e,t){var i=this.getLength();void 0===e?e=i:e<0?e=0:i<=e&&(e=i-1,t=void 0);var n=this.getLine(e);return null==t&&(t=n.length),{row:e,column:t=Math.min(Math.max(t,0),n.length)}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){var i=0;i=(e=Math.min(Math.max(e,0),this.getLength()))e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=n.tokens}}).call(o.prototype),t.BackgroundTokenizer=o}),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,i){"use strict";var c=e("./lib/lang"),h=(e("./lib/oop"),e("./range").Range),n=function(e,t,i){this.setRegexp(e),this.clazz=t,this.type=i||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+""!=e+""&&(this.regExp=e,this.cache=[])},this.update=function(e,t,i,n){if(this.regExp)for(var s=n.firstRow,o=n.lastRow,r=s;r<=o;r++){var a=this.cache[r];null==a&&((a=c.getMatchOffsets(i.getLine(r),this.regExp)).length>this.MAX_RANGES&&(a=a.slice(0,this.MAX_RANGES)),a=a.map(function(e){return new h(r,e.offset,r,e.offset+e.length)}),this.cache[r]=a.length?a:"");for(var l=a.length;l--;)t.drawSingleLineMarker(e,a[l].toScreenRange(i),this.clazz,n)}}}).call(n.prototype),t.SearchHighlight=n}),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],function(e,t,i){"use strict";function c(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var i=t[t.length-1];this.range=new n(t[0].start.row,t[0].start.column,i.end.row,i.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}var n=e("../range").Range;(function(){this.shiftRow=function(t){this.start.row+=t,this.end.row+=t,this.folds.forEach(function(e){e.start.row+=t,e.end.row+=t})},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),0=this.start.row&&e<=this.end.row},this.walk=function(e,t,i){var n,s,o=0,r=this.folds,a=!0;null==t&&(t=this.end.row,i=this.end.column);for(var l=0;lt||i[i.length-1].start.row=n)break}if("insert"==e.action)for(var l=s-n,c=-t.column+i.column;rn)break;if(h.start.row==n&&h.start.column>=t.column&&(h.start.column!=t.column||!this.$insertRight)&&(h.start.column+=c,h.start.row+=l),h.end.row==n&&h.end.column>=t.column){if(h.end.column==t.column&&this.$insertRight)continue;h.end.column==t.column&&0h.start.column&&h.end.column==o[r+1].start.column&&(h.end.column-=c),h.end.column+=c,h.end.row+=l}}else for(l=n-s,c=t.column-i.column;rs)break;h.end.rowt.column)&&(h.end.column=t.column,h.end.row=t.row):(h.end.column+=c,h.end.row+=l):h.end.row>s&&(h.end.row+=l),h.start.rowt.column)&&(h.start.column=t.column,h.start.row=t.row):(h.start.column+=c,h.start.row+=l):h.start.row>s&&(h.start.row+=l)}if(0!=l&&r=e)return s;if(s.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var i=this.$foldData,n=0;for(t&&(n=i.indexOf(t)),-1==n&&(n=0);n=e)return s}return null},this.getFoldedRowCount=function(e,t){for(var i=this.$foldData,n=t-e+1,s=0;sl)break}while(s&&r.test(s.type));s=n.stepBackward()}else s=n.getCurrentToken();return a.end.row=n.getCurrentTokenRow(),a.end.column=n.getCurrentTokenColumn()+s.value.length-2,a}},this.foldAll=function(e,t,i){null==i&&(i=1e5);var n=this.foldWidgets;if(n){t=t||this.getLength();for(var s=e=e||0;s=e){s=o.end.row;try{var r=this.addFold("...",o);r&&(r.collapseChildren=i)}catch(e){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle!=e){"manual"==(this.$foldStyle=e)&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)}},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation"),e&&"manual"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var i=this.foldWidgets;if(!i||t&&i[e])return{};for(var n,s=e-1;0<=s;){var o=i[s];if(null==o&&(o=i[s]=this.getFoldWidget(s)),"start"==o){var r=this.getFoldWidgetRange(s);if(n||(n=r),r&&r.end.row>=e)break}s--}return{range:-1!==s&&r,firstRange:n}},this.onFoldWidgetClick=function(e,t){var i={children:(t=t.domEvent).shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey};if(!this.$toggleFoldWidget(e,i)){var n=t.target||t.srcElement;n&&/ace_fold-widget/.test(n.className)&&(n.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var i=this.getFoldWidget(e),n=this.getLine(e),s="end"===i?-1:1,o=this.getFoldAt(e,-1===s?0:n.length,s);if(o)return t.children||t.all?this.removeFold(o):this.expandFold(o),o;var r=this.getFoldWidgetRange(e,!0);if(r&&!r.isMultiLine()&&(o=this.getFoldAt(r.start.row,r.start.column,1))&&r.isEqual(o.range))return this.removeFold(o),o;if(t.siblings){var a=this.getParentFoldRangeData(e);if(a.range)var l=a.range.start.row+1,c=a.range.end.row;this.foldAll(l,c,t.all?1e4:0)}else t.children?(c=r?r.end.row:this.getLength(),this.foldAll(e+1,c,t.all?1e4:0)):r&&(t.all&&(r.collapseChildren=1e4),this.addFold("...",r));return r}},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var i=this.$toggleFoldWidget(t,{});if(!i){var n=this.getParentFoldRangeData(t,!0);if(i=n.range||n.firstRange){t=i.start.row;var s=this.getFoldAt(t,this.getLine(t).length,1);s?this.removeFold(s):this.addFold("...",i)}}},this.updateFoldWidgets=function(e){var t=e.start.row,i=e.end.row-t;if(0===i)this.foldWidgets[t]=null;else if("remove"==e.action)this.foldWidgets.splice(t,i+1,null);else{var n=Array(i+1);n.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,n)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}}),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],function(e,t,i){"use strict";var u=e("../token_iterator").TokenIterator,a=e("../range").Range;t.BracketMatch=function(){this.findMatchingBracket=function(e,t){if(0==e.column)return null;var i=t||this.getLine(e.row).charAt(e.column-1);if(""==i)return null;var n=i.match(/([\(\[\{])|([\)\]\}])/);return n?n[1]?this.$findClosingBracket(n[1],e):this.$findOpeningBracket(n[2],e):null},this.getBracketRange=function(e){var t,i=this.getLine(e.row),n=!0,s=i.charAt(e.column-1),o=s&&s.match(/([\(\[\{])|([\)\]\}])/);if(o||(s=i.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\(\[\{])|([\)\]\}])/),n=!1),!o)return null;if(o[1]){if(!(r=this.$findClosingBracket(o[1],e)))return null;t=a.fromPoints(e,r),n||(t.end.column++,t.start.column--),t.cursor=t.end}else{var r;if(!(r=this.$findOpeningBracket(o[2],e)))return null;t=a.fromPoints(r,e),n||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{","<":">",">":"<"},this.$findOpeningBracket=function(e,t,i){var n=this.$brackets[e],s=1,o=new u(this,t.row,t.column),r=o.getCurrentToken();if(r||(r=o.stepForward()),r){i||(i=new RegExp("(\\.?"+r.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));for(var a=t.column-o.getCurrentTokenColumn()-2,l=r.value;;){for(;0<=a;){var c=l.charAt(a);if(c==n){if(0==(s-=1))return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else c==e&&(s+=1);a-=1}for(;(r=o.stepBackward())&&!i.test(r.type););if(null==r)break;a=(l=r.value).length-1}return null}},this.$findClosingBracket=function(e,t,i){var n=this.$brackets[e],s=1,o=new u(this,t.row,t.column),r=o.getCurrentToken();if(r||(r=o.stepForward()),r){i||(i=new RegExp("(\\.?"+r.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));for(var a=t.column-o.getCurrentTokenColumn();;){for(var l=r.value,c=l.length;a>1,o=e[s];if(ot&&(t=e.screenWidth)}),this.lineWidgetWidth=t},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),i=this.$rowLengthCache,n=0,s=0,o=this.$foldData[s],r=o?o.start.row:1/0,a=t.length,l=0;ln&&(n=i[l])}this.screenWidth=n}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var i=e.length-1;-1!=i;i--){var n=e[i];"insert"==n.action||"remove"==n.action?this.doc.revertDelta(n):n.folds&&this.addFolds(n.folds)}!t&&this.$undoSelect&&(e.selectionBefore?this.selection.fromJSON(e.selectionBefore):this.selection.setRange(this.$getUndoSelection(e,!0))),this.$fromUndo=!1}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var i=0;ie.end.column&&(o.start.column+=c),o.end.row==e.end.row&&o.end.column>e.end.column&&(o.end.column+=c)),r&&o.start.row>=e.end.row&&(o.start.row+=r,o.end.row+=r)}if(o.end=this.insert(o.start,n),s.length){var a=e.start,l=o.start,c=(r=l.row-a.row,l.column-a.column);this.addFolds(s.map(function(e){return(e=e.clone()).start.row==a.row&&(e.start.column+=c),e.end.row==a.row&&(e.end.column+=c),e.start.row+=r,e.end.row+=r,e}))}return o},this.indentRows=function(e,t,i){i=i.replace(/\t/g,this.getTabString());for(var n=e;n<=t;n++)this.doc.insertInLine({row:n,column:0},i)},this.outdentRows=function(e){for(var t=e.collapseRows(),i=new h(0,0,0,0),n=this.getTabSize(),s=t.start.row;s<=t.end.row;++s){var o=this.getLine(s);i.start.row=s,i.end.row=s;for(var r=0;rthis.doc.getLength()-1)return 0;n=s-t}else{e=this.$clipRowToDocument(e);n=(t=this.$clipRowToDocument(t))-e+1}var o=new h(e,0,t,Number.MAX_VALUE),r=this.getFoldsInRange(o).map(function(e){return(e=e.clone()).start.row+=n,e.end.row+=n,e}),a=0==i?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+n,a),r.length&&this.addFolds(r),n},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){if(t=Math.max(0,t),e<0)t=e=0;else{var i=this.doc.getLength();t=i<=e?(e=i-1,this.doc.getLine(i-1).length):Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){if(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal("changeWrapMode"))},this.adjustWrapLimit=function(e,t){var i=this.$wrapLimitRange;i.max<0&&(i={min:t,max:t});var n=this.$constrainWrapLimit(e,i.min,i.max);return n!=this.$wrapLimit&&1=s.row&&m.shiftRow(-a)}r=o}else{var d=Array(a);d.unshift(o,0);var g=t?this.$wrapData:this.$rowLengthCache;g.splice.apply(g,d);c=this.$foldData,h=0;if(m=this.getFoldLine(o)){var f=m.range.compareInside(n.row,n.column);0==f?(m=m.split(n.row,n.column))&&(m.shiftRow(a),m.addRemoveChars(r,0,s.column-n.column)):-1==f&&(m.addRemoveChars(o,0,s.column-n.column),m.shiftRow(a)),h=c.indexOf(m)+1}for(;h=o&&m.shiftRow(a)}}else a=Math.abs(e.start.column-e.end.column),"remove"===i&&(l=this.getFoldsInRange(e),this.removeFolds(l),a=-a),(m=this.getFoldLine(o))&&m.addRemoveChars(o,n.column,a);return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(o,r):this.$updateRowLengthCache(o,r),l},this.$updateRowLengthCache=function(e,t,i){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var r,i,a=this.doc.getAllLines(),n=this.getTabSize(),s=this.$wrapData,o=this.$wrapLimit,l=e;for(t=Math.min(t,a.length-1);l<=t;)(i=this.getFoldLine(l,i))?(r=[],i.walk(function(e,t,i,n){var s;if(null!=e){(s=this.$getDisplayTokens(e,r.length))[0]=f;for(var o=1;o>2)),a-1);gc[u-1]}else d=!u;for(var g=this.getLength()-1,f=this.getNextFoldLine(o),m=f?f.start.row:1/0;a<=e&&!(el[h-1]}else u=!h;for(var d=this.getNextFoldLine(a),g=d?d.start.row:1/0;a=p[v];)s++,v++;f=f.substring(p[v-1]||0,f.length),m=0g||(s.push(r=new $(c,g,c+a-1,f)),2b&&s[h].end.row==i.end.row;)h--;for(s=s.slice(m,h+1),m=0,h=s.length;m=s.length)break;u.lastIndex=r+=1}if(n.index+a>t)break;o.push(n.index,a)}for(var l=o.length-1;0<=l;l-=2){var c=o[l-1];if(i(e,c,e,c+(a=o[l])))return!0}};else a=function(e,t,i){var n,s,o=h.getLine(e);for(u.lastIndex=t;s=u.exec(o);){var r=s[0].length;if(i(e,n=s.index,e,n+r))return!0;if(!r&&(u.lastIndex=n+=1,n>=o.length))return!1}};return{forEach:r}}}).call(s.prototype),t.Search=s}),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,i){"use strict";function n(e,t){this.platform=t||(o.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function s(e,t){n.call(this,e,t),this.$singleCommand=!1}var a=e("../lib/keys"),o=e("../lib/useragent"),l=a.KEY_MODS;s.prototype=n.prototype,function(){function r(e){return"object"==typeof e&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),(this.commands[e.name]=e).bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var i=e&&("string"==typeof e?e:e.name);e=this.commands[i],t||delete this.commands[i];var n=this.commandKeyBinding;for(var s in n){var o=n[s];if(o==e)delete n[s];else if(Array.isArray(o)){var r=o.indexOf(e);-1!=r&&(o.splice(r,1),1==o.length&&(n[s]=o[0]))}}},this.bindKey=function(e,o,r){if("object"==typeof e&&e&&(null==r&&(r=e.position),e=e[this.platform]),e)return"function"==typeof o?this.addCommand({exec:o,bindKey:e,name:o.name||e}):void e.split("|").forEach(function(e){var n="";if(-1!=e.indexOf(" ")){var t=e.split(/\s+/);e=t.pop(),t.forEach(function(e){var t=this.parseKeys(e),i=l[t.hashId]+t.key;n+=(n?" ":"")+i,this._addCommandToBinding(n,"chainKeys")},this),n+=" "}var i=this.parseKeys(e),s=l[i.hashId]+i.key;this._addCommandToBinding(n+s,o,r)},this)},this._addCommandToBinding=function(e,t,i){var n,s=this.commandKeyBinding;if(t)if(!s[e]||this.$singleCommand)s[e]=t;else{Array.isArray(s[e])?-1!=(n=s[e].indexOf(t))&&s[e].splice(n,1):s[e]=[s[e]],"number"!=typeof i&&(i=r(t));var o=s[e];for(n=0;ns?s+1:s,e.selection.moveCursorTo(i.row,s))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:n(null,null),exec:function(e){var t=e.session.doc.getLength()-1,i=e.session.doc.getLine(t).length,n=e.selection.rangeList.ranges,s=[];n.length<1&&(n=[e.selection.getRange()]);for(var o=0;o=s.lastRow||n.end.row<=s.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}"animate"==i&&this.renderer.animateScrolling(this.curOp.scrollTop)}var o=this.selection.toJSON();this.curOp.selectionAfter=o,this.$lastSel=this.selection.toJSON(),this.session.getUndoManager().addSelection(o),this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(this.$mergeUndoDeltas){var t=this.prevOp,i=this.$mergeableCommands,n=t.command&&e.command.name==t.command.name;if("insertstring"==e.command.name){var s=e.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),n=n&&this.mergeNextCommand&&(!/\s/.test(s)||/\s/.test(t.args)),this.mergeNextCommand=!0}else n=n&&-1!==i.indexOf(e.command.name);"always"!=this.$mergeUndoDeltas&&2e3o.length||s.length<2||!s[1])return this.commands.exec("insertstring",this,t);for(var r=o.length;r--;){var a=o[r];a.isEmpty()||n.remove(a),n.insert(a.start,s[r])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var i=this.session,n=i.getMode(),s=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var o=n.transformAction(i.getState(s.row),"insertion",this,i,e);o&&(e!==o.text&&(this.inVirtualSelectionMode||(this.session.mergeUndoDeltas=!1,this.mergeNextCommand=!1)),e=o.text)}if("\t"==e&&(e=this.session.getTabString()),this.selection.isEmpty()){if(this.session.getOverwrite()&&-1==e.indexOf("\n")){(r=new m.fromPoints(s,s)).end.column+=e.length,this.session.remove(r)}}else{var r=this.getSelectionRange();s=this.session.remove(r),this.clearSelection()}if("\n"==e||"\r\n"==e){var a=i.getLine(s.row);if(s.column>a.search(/\S|$/)){var l=a.substr(s.column).search(/\S|$/);i.doc.removeInLine(s.row,s.column,s.column+l)}}this.clearSelection();var c=s.column,h=i.getState(s.row),u=(a=i.getLine(s.row),n.checkOutdent(h,a,e));i.insert(s,e);if(o&&o.selection&&(2==o.selection.length?this.selection.setSelectionRange(new m(s.row,c+o.selection[0],s.row,c+o.selection[1])):this.selection.setSelectionRange(new m(s.row+o.selection[0],o.selection[1],s.row+o.selection[2],o.selection[3]))),i.getDocument().isNewLine(e)){var d=n.getNextLineIndent(h,a.slice(0,s.column),i.getTabString());i.insert({row:s.row+1,column:0},d)}u&&n.autoOutdent(h,i,s.row)},this.onTextInput=function(e,t){if(!t)return this.keyBinding.onTextInput(e);this.startOperation({command:{name:"insertstring"}});var i=this.applyComposition.bind(this,e,t);this.selection.rangeCount?this.forEachSelection(i):i(),this.endOperation()},this.applyComposition=function(e,t){var i;(t.extendLeft||t.extendRight)&&((i=this.selection.getRange()).start.column-=t.extendLeft,i.end.column+=t.extendRight,this.selection.setRange(i),!e&&!i.isEmpty()&&this.remove());((e||!this.selection.isEmpty())&&this.insert(e,!0),t.restoreStart||t.restoreEnd)&&((i=this.selection.getRange()).start.column-=t.restoreStart,i.end.column-=t.restoreEnd,this.selection.setRange(i))},this.onCommandKey=function(e,t,i){this.keyBinding.onCommandKey(e,t,i)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&("left"==e?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var i=this.session,n=i.getState(t.start.row),s=i.getMode().transformAction(n,"deletion",this,i,t);if(0===t.end.column){var o=i.getTextRange(t);if("\n"==o[o.length-1]){var r=i.getLine(t.end.row);/^\s+$/.test(r)&&(t.end.column=r.length)}}s&&(t=s)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.selection.isEmpty()&&this.selection.selectLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(this.selection.isEmpty()){var e=this.getCursorPosition(),t=e.column;if(0!==t){var i,n,s=this.session.getLine(e.row);n=tt.toLowerCase()?1:0});var s=new m(0,0,0,0);for(n=e.first;n<=e.last;n++){var o=t.getLine(n);s.start.row=n,s.end.row=n,s.end.column=o.length,t.replace(s,i[n-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),i=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,i,e)},this.getNumberAt=function(e,t){var i=/[\-]?[0-9]+(?:\.[0-9]+)?/g;i.lastIndex=0;for(var n=this.session.getLine(e);i.lastIndex=t)return{value:s[0],start:s.index,end:s.index+s[0].length}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,i=this.selection.getCursor().column,n=new m(t,i-1,t,i),s=this.session.getTextRange(n);if(!isNaN(parseFloat(s))&&isFinite(s)){var o=this.getNumberAt(t,i);if(o){var r=0<=o.value.indexOf(".")?o.start+o.value.indexOf(".")+1:o.end,a=o.start+o.value.length-r,l=parseFloat(o.value);l*=Math.pow(10,a),r!==o.end&&ig+1)break;g=f.last}for(h--,a=this.session.$moveLines(d,g,t?0:e),t&&-1==e&&(u=h+1);u<=h;)r[u].moveBy(a,0),u++;t||(a=0),l+=a}s.fromOrientedRange(s.ranges[0]),s.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(e)},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var i=this.renderer,n=this.renderer.layerConfig,s=e*Math.floor(n.height/n.lineHeight);!0===t?this.selection.$moveSelection(function(){this.moveCursorBy(s,0)}):!1===t&&(this.selection.moveCursorBy(s,0),this.selection.clearSelection());var o=i.scrollTop;i.scrollBy(0,s*n.lineHeight),null!=t&&i.scrollCursorIntoView(null,.5),i.animateScrolling(o)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,i,n){this.renderer.scrollToLine(e,t,i,n)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.selection.selectAll()},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var i=this.getCursorPosition(),n=new w(this.session,i.row,i.column),s=n.getCurrentToken(),o=s||n.stepForward();if(o){var r,a,l=!1,c={},h=i.column-o.start,u={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(o.value.match(/[{}()\[\]]/g)){for(;hwindow.innerHeight)&&null)&&(a.style.top=n+"px",a.style.left=t.left+"px",a.style.height=i.lineHeight+"px",a.scrollIntoView(r)),r=s=null}});this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",t),this.renderer.off("afterRender",n),this.renderer.off("beforeRender",i))}}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&"wide"!=e,n.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e)))}}.call(y.prototype),v.defineOptions(y.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.textInput.setReadOnly(e),this.$resetCursorStyle()},initialValue:!1},copyWithEmptySelection:{set:function(e){this.textInput.setCopyWithEmptySelection(e)},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.$keybindingId},handlesSet:!0},value:{set:function(e){this.session.setValue(e)},get:function(){return this.getValue()},handlesSet:!0,hidden:!0},session:{set:function(e){this.setSession(e)},get:function(){return this.session},handlesSet:!0,hidden:!0},showLineNumbers:{set:function(e){this.renderer.$gutterLayer.setShowLineNumbers(e),this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER),e&&this.$relativeLineNumbers?$.attach(this):$.detach(this)},initialValue:!0},relativeLineNumbers:{set:function(e){this.$showLineNumbers&&e?$.attach(this):$.detach(this)}},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",displayIndentGuides:"renderer",showGutter:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",hasCssTransforms:"renderer",maxPixelHeight:"renderer",useTextareaForIME:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimeout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",navigateWithinSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"});var $={getText:function(e,t){return(Math.abs(e.selection.lead.row-t)||t+1+(t<9?"·":""))+""},getWidth:function(e,t,i){return Math.max(t.toString().length,(i.lastRow+1).toString().length,2)*i.characterWidth},update:function(e,t){t.renderer.$loop.schedule(t.renderer.CHANGE_GUTTER)},attach:function(e){e.renderer.$gutterLayer.$renderer=this,e.on("changeSelection",this.update),this.update(null,e)},detach:function(e){e.renderer.$gutterLayer.$renderer==this&&(e.renderer.$gutterLayer.$renderer=null),e.off("changeSelection",this.update),this.update(null,e)}};t.Editor=y}),ace.define("ace/undomanager",["require","exports","module","ace/range"],function(e,t,i){"use strict";function a(e){return{row:e.row,column:e.column}}function n(e){if(e=e||this,Array.isArray(e))return e.map(n).join("\n");var t="";return e.action?(t="insert"==e.action?"+":"-",t+="["+e.lines+"]"):e.value&&(t=Array.isArray(e.value)?e.value.map(s).join("\n"):s(e.value)),e.start&&(t+=s(e)),(e.id||e.rev)&&(t+="\t("+(e.id||e.rev)+")"),t}function s(e){return e.start.row+":"+e.start.column+"=>"+e.end.row+":"+e.end.column}function o(e,t){var i="insert"==e.action,n="insert"==t.action;if(i&&n)if(0<=m(t.start,e.end))c(t,e,-1);else{if(!(m(t.start,e.start)<=0))return null;c(e,t,1)}else if(i&&!n)if(0<=m(t.start,e.end))c(t,e,-1);else{if(!(m(t.end,e.start)<=0))return null;c(e,t,-1)}else if(!i&&n)if(0<=m(t.start,e.start))c(t,e,1);else{if(!(m(t.start,e.start)<=0))return null;c(e,t,1)}else if(!i&&!n)if(0<=m(t.start,e.start))c(t,e,1);else{if(!(m(t.end,e.start)<=0))return null;c(e,t,-1)}return[t,e]}function r(e,t){for(var i=e.length;i--;)for(var n=0;na+1;)this.$lines.pop();break}(r=this.$lines.get(++a))?r.row=l:(r=this.$lines.createCell(l,e,this.session,c),this.$lines.push(r)),this.$renderCell(r,e,s,l),l++}this._signal("afterRender"),this.$updateGutterWidth(e)},this.$updateGutterWidth=function(e){var t=this.session,i=t.gutterRenderer||this.$renderer,n=t.$firstLineNumber,s=this.$lines.last()?this.$lines.last().text:"";(this.$fixedWidth||t.$useWrapMode)&&(s=t.getLength()+n-1);var o=i?i.getWidth(t,s,e):s.toString().length*e.characterWidth,r=this.$padding||this.$computePadding();(o+=r.left+r.right)!==this.gutterWidth&&!isNaN(o)&&(this.gutterWidth=o,this.element.parentNode.style.width=this.element.style.width=Math.ceil(this.gutterWidth)+"px",this._signal("changeGutterWidth",o))},this.$updateCursorRow=function(){if(this.$highlightGutterLine){var e=this.session.selection.getCursor();this.$cursorRow!==e.row&&(this.$cursorRow=e.row)}},this.updateLineHighlight=function(){if(this.$highlightGutterLine){var e=this.session.selection.cursor.row;if(this.$cursorRow=e,!this.$cursorCell||this.$cursorCell.row!=e){this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace("ace_gutter-active-line ",""));var t=this.$lines.cells;this.$cursorCell=null;for(var i=0;i=this.$cursorRow){if(n.row>this.$cursorRow){var s=this.session.getFoldLine(this.$cursorRow);if(!(0i.right-t.right?"foldWidgets":void 0}}).call(r.prototype),t.Gutter=r}),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],function(e,t,i){"use strict";var g=e("../range").Range,n=e("../lib/dom"),s=function(e){this.element=n.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.elt=function(e,t){var i=-1!=this.i&&this.element.childNodes[this.i];i?this.i++:(i=document.createElement("div"),this.element.appendChild(i),this.i=-1),i.style.cssText=t,i.className=e},this.update=function(e){if(e){var t;for(var i in this.config=e,this.i=0,this.markers){var n=this.markers[i];if(n.range){var s=n.range.clipRows(e.firstRow,e.lastRow);if(!s.isEmpty())if(s=s.toScreenRange(this.session),n.renderer){var o=this.$getTop(s.start.row,e),r=this.$padding+s.start.column*e.characterWidth;n.renderer(t,s,r,o,e)}else"fullLine"==n.type?this.drawFullLineMarker(t,s,n.clazz,e):"screenLine"==n.type?this.drawScreenLineMarker(t,s,n.clazz,e):s.isMultiLine()?"text"==n.type?this.drawTextMarker(t,s,n.clazz,e):this.drawMultiLineMarker(t,s,n.clazz,e):this.drawSingleLineMarker(t,s,n.clazz+" ace_start ace_br15",e)}else n.update(t,this,this.session,e)}if(-1!=this.i)for(;this.ie.lastRow)for(s=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);0t.lastRow&&this.$lines.push(this.$renderLinesFragment(e,t.lastRow+1,e.lastRow))},this.$renderLinesFragment=function(e,t,i){for(var n=[],s=t,o=this.session.getNextFoldLine(s),r=o?o.start.row:1/0;r=o;)r=this.$renderToken(a,r,c,h.substring(0,o-n)),h=h.substring(o-n),n=o,a=this.$createLineElement(),e.appendChild(a),a.appendChild(this.dom.createTextNode(b.stringRepeat(" ",i.indent),this.element)),r=0,o=i[++s]||Number.MAX_VALUE;0!=h.length&&(n+=h.length,r=this.$renderToken(a,r,c,h))}}},this.$renderSimpleLine=function(e,t){var i=0,n=t[0],s=n.value;this.displayIndentGuides&&(s=this.renderIndentGuide(e,s)),s&&(i=this.$renderToken(e,i,n,s));for(var o=1;othis.MAX_LINE_LENGTH)return this.$renderOverflowMessage(e,i,n,s);i=this.$renderToken(e,i,n,s)}},this.$renderOverflowMessage=function(e,t,i,n){this.$renderToken(e,t,i,n.slice(0,this.MAX_LINE_LENGTH-t));var s=this.dom.createElement("span");s.className="ace_inline_button ace_keyword ace_toggle_wrap",s.style.position="absolute",s.style.right="0",s.textContent="",e.appendChild(s)},this.$renderLine=function(e,t,i){if(!i&&0!=i&&(i=this.session.getFoldLine(t)),i)var n=this.$getFoldLineTokens(t,i);else n=this.session.getTokens(t);var s=e;if(n.length){var o=this.session.getRowSplitData(t);if(o&&o.length){this.$renderWrappedLine(e,n,o);s=e.lastChild}else{s=e;this.$useLineGroups()&&(s=this.$createLineElement(),e.appendChild(s)),this.$renderSimpleLine(s,n)}}else this.$useLineGroups()&&(s=this.$createLineElement(),e.appendChild(s));if(this.showInvisibles&&s){i&&(t=i.end.row);var r=this.dom.createElement("span");r.className="ace_invisible ace_invisible_eol",r.textContent=t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,s.appendChild(r)}},this.$getFoldLineTokens=function(e,t){var o=this.session,r=[],a=o.getTokens(e);return t.walk(function(e,t,i,n,s){null!=e?r.push({type:"fold",value:e}):(s&&(a=o.getTokens(t)),a.length&&function(e,t,i){for(var n=0,s=0;s+e[n].value.lengthi-t&&(o=o.substring(0,i-t)),r.push({type:e[n].type,value:o}),s=t+o.length,n+=1);si?r.push({type:e[n].type,value:o.substring(0,i-s)}):r.push(e[n]),s+=o.length,n+=1}}(a,n,i))},t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){}}).call(r.prototype),t.Text=r}),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],function(e,t,i){"use strict";var c=e("../lib/dom"),n=function(e){this.element=c.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),c.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=this.$updateOpacity.bind(this)};(function(){this.$updateOpacity=function(e){for(var t=this.cursors,i=t.length;i--;)c.setStyle(t[i].style,"opacity",e?"":"0")},this.$startCssAnimation=function(){for(var e=this.cursors,t=e.length;t--;)e[t].style.animationDuration=this.blinkInterval+"ms";setTimeout(function(){c.addCssClass(this.element,"ace_animate-blinking")}.bind(this))},this.$stopCssAnimation=function(){c.removeCssClass(this.element,"ace_animate-blinking")},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&(this.smoothBlinking=e,c.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.restartTimer())},this.addCursor=function(){var e=c.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(1e.height+e.offset||o.top<0)&&1n;)this.removeCursor();var l=this.session.getOverwrite();this.$setOverwrite(l),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&((this.overwrite=e)?c.addCssClass(this.element,"ace_overwrite-cursors"):c.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(n.prototype),t.Cursor=n}),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(e,t,i){"use strict";var n=e("./lib/oop"),s=e("./lib/dom"),o=e("./lib/event"),r=e("./lib/event_emitter").EventEmitter,a=function(e){this.element=s.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=s.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,o.addListener(this.element,"scroll",this.onScroll.bind(this)),o.addListener(this.element,"mousedown",o.preventDefault)};(function(){n.implement(this,r),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e,this.coeff=1}}).call(a.prototype);var l=function(e,t){a.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=s.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px",this.$minWidth=0};n.inherits(l,a),function(){this.classSuffix="-v",this.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,1!=this.coeff){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=this.setScrollHeight=function(e){32768<(this.scrollHeight=e)?(this.coeff=32768/e,e=32768):1!=this.coeff&&(this.coeff=1),this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(l.prototype);var c=function(e,t){a.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};n.inherits(c,a),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(c.prototype),t.ScrollBar=l,t.ScrollBarV=l,t.ScrollBarH=c,t.VScrollBar=l,t.HScrollBar=c}),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],function(e,t,i){"use strict";var n=e("./lib/event"),s=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.$recursionLimit=2,this.window=t||window;var i=this;this._flush=function(e){i.pending=!1;var t=i.changes;if(t&&(n.blockIdle(100),i.changes=0,i.onRender(t)),i.changes){if(i.$recursionLimit--<0)return;i.schedule()}else i.$recursionLimit=2}};(function(){this.schedule=function(e){this.changes=this.changes|e,this.changes&&!this.pending&&(n.nextFrame(this._flush),this.pending=!0)},this.clear=function(e){var t=this.changes;return this.changes=0,t}}).call(s.prototype),t.RenderLoop=s}),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,i){var n=e("../lib/oop"),s=e("../lib/dom"),o=e("../lib/lang"),r=e("../lib/event"),a=e("../lib/useragent"),l=e("../lib/event_emitter").EventEmitter,c="function"==typeof ResizeObserver,h=t.FontMetrics=function(e){this.el=s.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=s.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=s.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),this.$measureNode.innerHTML=o.stringRepeat("X",256),this.$characterSize={width:0,height:0},c?this.$addObserver():this.checkForSizeChanges()};(function(){n.implement(this,l),this.$characterSize={width:0,height:0},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",a.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(e){if(void 0===e&&(e=this.$measureSizes()),e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$addObserver=function(){var i=this;this.$observer=new window.ResizeObserver(function(e){var t=e[0].contentRect;i.checkForSizeChanges({height:t.height,width:t.width/256})}),this.$observer.observe(this.$measureNode)},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer||this.$observer)return this.$pollSizeChangesTimer;var t=this;return this.$pollSizeChangesTimer=r.onIdle(function e(){t.checkForSizeChanges(),r.onIdle(e,500)},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(e){var t={height:(e||this.$measureNode).clientHeight,width:(e||this.$measureNode).clientWidth/256};return 0===t.width||0===t.height?null:t},this.$measureCharWidth=function(e){return this.$main.innerHTML=o.stringRepeat(e,256),this.$main.getBoundingClientRect().width/256},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$observer&&this.$observer.disconnect(),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)},this.$getZoom=function e(t){return t?(window.getComputedStyle(t).zoom||1)*e(t.parentElement):1},this.$initTransformMeasureNodes=function(){var e=function(e,t){return["div",{style:"position: absolute;top:"+e+"px;left:"+t+"px;"}]};this.els=s.buildDom([e(0,0),e(200,0),e(0,200),e(200,200)],this.el)},this.transformCoordinates=function(e,t){function i(e,t,i){var n=e[1]*t[0]-e[0]*t[1];return[(-t[1]*i[0]+t[0]*i[1])/n,(+e[1]*i[0]-e[0]*i[1])/n]}function n(e,t){return[e[0]-t[0],e[1]-t[1]]}function s(e,t){return[e[0]+t[0],e[1]+t[1]]}function o(e,t){return[e*t[0],e*t[1]]}function r(e){var t=e.getBoundingClientRect();return[t.left,t.top]}e&&(e=o(1/this.$getZoom(this.el),e));this.els||this.$initTransformMeasureNodes();var a=r(this.els[0]),l=r(this.els[1]),c=r(this.els[2]),h=r(this.els[3]),u=i(n(h,l),n(h,c),n(s(l,c),s(h,a))),d=o(1+u[0],n(l,a)),g=o(1+u[1],n(c,a));if(t){var f=t;return s(o(1/(u[0]*f[0]/200+u[1]*f[1]/200+1)/200,s(o(f[0],d),o(f[1],g))),a)}var m=n(e,a);return o(200,i(n(d,o(u[0],m)),n(g,o(u[1],m)),m))}}).call(h.prototype)}),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter","ace/lib/useragent"],function(e,t,i){"use strict";var n=e("./lib/oop"),c=e("./lib/dom"),o=e("./config"),s=e("./layer/gutter").Gutter,r=e("./layer/marker").Marker,a=e("./layer/text").Text,l=e("./layer/cursor").Cursor,h=e("./scrollbar").HScrollBar,u=e("./scrollbar").VScrollBar,d=e("./renderloop").RenderLoop,g=e("./layer/font_metrics").FontMetrics,f=e("./lib/event_emitter").EventEmitter,m='.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;box-sizing: border-box;min-width: 100%;contain: style size layout;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;contain: style size layout;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {position: absolute;top: 0;left: 0;right: 0;padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {contain: strict;position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;contain: strict;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: transparent;color: inherit;z-index: 1000;opacity: 1;}.ace_composition_placeholder { color: transparent }.ace_composition_marker { border-bottom: 1px solid;position: absolute;border-radius: 0;margin-top: 1px;}[ace_nocontext=true] {transform: none!important;filter: none!important;perspective: none!important;clip-path: none!important;mask : none!important;contain: none!important;perspective: none!important;mix-blend-mode: initial!important;z-index: auto;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;height: 1000000px;contain: style size layout;}.ace_text-layer {font: inherit !important;position: absolute;height: 1000000px;width: 1000000px;contain: style size layout;}.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {contain: style size layout;position: absolute;top: 0;left: 0;right: 0;}.ace_hidpi .ace_text-layer,.ace_hidpi .ace_gutter-layer,.ace_hidpi .ace_content,.ace_hidpi .ace_gutter {contain: strict;will-change: transform;}.ace_hidpi .ace_text-layer > .ace_line, .ace_hidpi .ace_text-layer > .ace_line_group {contain: strict;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {transition: opacity 0.18s;}.ace_animate-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: step-end;animation-name: blink-ace-animate;animation-iteration-count: infinite;}.ace_animate-blinking.ace_smooth-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: ease-in-out;animation-name: blink-ace-animate-smooth;}@keyframes blink-ace-animate {from, to { opacity: 1; }60% { opacity: 0; }}@keyframes blink-ace-animate-smooth {from, to { opacity: 1; }45% { opacity: 1; }60% { opacity: 0; }85% { opacity: 0; }}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;box-sizing: border-box;}.ace_line .ace_fold {box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_inline_button {border: 1px solid lightgray;display: inline-block;margin: -1px 8px;padding: 0 5px;pointer-events: auto;cursor: pointer;}.ace_inline_button:hover {border-color: gray;background: rgba(200,200,200,0.2);display: inline-block;pointer-events: auto;}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}',p=e("./lib/useragent"),v=p.isIE;c.importCssString(m,"ace_editor.css");var w=function(e,t){var i=this;this.container=e||c.createElement("div"),c.addCssClass(this.container,"ace_editor"),c.HI_DPI&&c.addCssClass(this.container,"ace_hidpi"),this.setTheme(t),this.$gutter=c.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.$gutter.setAttribute("aria-hidden",!0),this.scroller=c.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=c.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new s(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new r(this.content);var n=this.$textLayer=new a(this.content);this.canvas=n.element,this.$markerFront=new r(this.content),this.$cursorLayer=new l(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new u(this.container,this),this.scrollBarH=new h(this.container,this),this.scrollBarV.addEventListener("scroll",function(e){i.$scrollAnimation||i.session.setScrollTop(e.data-i.scrollMargin.top)}),this.scrollBarH.addEventListener("scroll",function(e){i.$scrollAnimation||i.session.setScrollLeft(e.data-i.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new g(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",function(e){i.updateCharacterSize(),i.onResize(!0,i.gutterWidth,i.$size.width,i.$size.height),i._signal("changeCharacterSize",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.margin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$keepTextAreaAtCursor=!p.isIOS,this.$loop=new d(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),o.resetOptions(this),o._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,n.implement(this,f),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),(this.session=e)&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode))},this.updateLines=function(e,t,i){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,i,n){if(!(2n.height-r)c.translate(this.textarea,0,0);else{var a=1;if(i)if(i.useTextareaForIME){var l=this.textarea.value;a=this.characterWidth*this.session.$getStringScreenWidth(l)[0],r+=2}else s+=this.lineHeight+2;else s+=this.lineHeight;(o-=this.scrollLeft)>this.$size.scrollerWidth-a&&(o=this.$size.scrollerWidth-a),o+=this.gutterWidth+this.margin.left,c.setStyle(e,"height",r+"px"),c.setStyle(e,"width",a+"px"),c.translate(this.textarea,Math.min(o,this.$size.scrollerWidth-a),Math.min(s,this.$size.height-r))}}}else c.translate(this.textarea,-100,0)},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow;return this.session.documentToScreenRow(t,0)*e.lineHeight-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,i,n){var s=this.scrollMargin;s.top=0|e,s.bottom=0|t,s.right=0|n,s.left=0|i,s.v=s.top+s.bottom,s.h=s.left+s.right,s.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-s.top),this.updateFull()},this.setMargin=function(e,t,i,n){var s=this.margin;s.top=0|e,s.bottom=0|t,s.right=0|n,s.left=0|i,s.v=s.top+s.bottom,s.h=s.left+s.right,this.$updateCachedSize(!0,this.gutterWidth,this.$size.width,this.$size.height),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var i=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){if(e|=this.$computeLayerConfig()|this.$loop.clear(),i.firstRow!=this.layerConfig.firstRow&&i.firstRowScreen==this.layerConfig.firstRowScreen){var n=this.scrollTop+(i.firstRow-this.layerConfig.firstRow)*this.lineHeight;0this.$maxPixelHeight&&(i=this.$maxPixelHeight);var n=!(i<=2*this.lineHeight)&&th.top),d=a!==u;d&&(this.$vScroll=u,this.scrollBarV.setVisible(u));var g,f,m=this.scrollTop%this.lineHeight,p=Math.ceil(l/this.lineHeight)-1,v=Math.max(0,Math.round((this.scrollTop-m)/this.lineHeight)),w=v+p,b=this.lineHeight;v=e.screenToDocumentRow(v,0);var y=e.getFoldLine(v);y&&(v=y.start.row),g=e.documentToScreenRow(v,0),f=e.getRowLength(v)*b,w=Math.min(e.screenToDocumentRow(w,0),e.getLength()-1),l=t.scrollerHeight+e.getRowLength(w)*b+f,m=this.scrollTop-g*b;var $=0;return(this.layerConfig.width!=s||r)&&($=this.CHANGE_H_SCROLL),(r||d)&&($=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),d&&(s=this.$getLongestLine())),this.layerConfig={width:s,padding:this.$padding,firstRow:v,firstRowScreen:g,lastRow:w,lineHeight:b,characterWidth:this.characterWidth,minHeight:l,maxHeight:n,offset:m,gutterOffset:b?Math.max(0,Math.ceil((m+t.height-t.scrollerHeight)/b)):0,height:this.$size.scrollerHeight},this.session.$bidiHandler&&this.session.$bidiHandler.setContentWidth(s-this.$padding),$},this.$updateLines=function(){if(this.$changedLines){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var i=this.layerConfig;if(!(e>i.lastRow+1||tthis.$textLayer.MAX_LINE_LENGTH&&(e=this.$textLayer.MAX_LINE_LENGTH+30),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,i){this.scrollCursorIntoView(e,i),this.scrollCursorIntoView(t,i)},this.scrollCursorIntoView=function(e,t,i){if(0!==this.$size.scrollerHeight){var n=this.$cursorLayer.getPixelPosition(e),s=n.left,o=n.top,r=i&&i.top||0,a=i&&i.bottom||0,l=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;oo+this.lineHeight&&(o-=t*this.$size.scrollerHeight),0===o&&(o=-this.scrollMargin.top),this.session.setScrollTop(o)):l+this.$size.scrollerHeight-a=1-this.scrollMargin.top||(0=1-this.scrollMargin.left||(0this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e}))}}).call(u.prototype);e.UIWorkerClient=function(e,t,i){var n=null,s=!1,o=Object.create(c),r=[],a=new u({messageBuffer:r,terminate:function(){},postMessage:function(e){r.push(e),n&&(s?setTimeout(l):l())}});a.setEmitSync=function(e){s=e};var l=function(){var e=r.shift();e.command?n[e.command].apply(n,e.args):e.event&&o._signal(e.event,e.data)};return o.postMessage=function(e){a.onMessage({data:e})},o.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},o.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},h.loadModule(["worker",t],function(e){for(n=new e[i](o);r.length;)l()}),a},e.WorkerClient=u,e.createWorker=l}),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],function(e,t,i){"use strict";var l=e("./range").Range,n=e("./lib/event_emitter").EventEmitter,s=e("./lib/oop"),o=function(e,t,i,n,s,o){var r=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=s,this.othersClass=o,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=n,this.$onCursorChange=function(){setTimeout(function(){r.onCursorChange()})},this.$pos=i;var a=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=a.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){s.implement(this,n),this.setup=function(){var i=this,n=this.doc,e=this.session;this.selectionBefore=e.selection.toJSON(),e.selection.inMultiSelectMode&&e.selection.toSingleRange(),this.pos=n.createAnchor(this.$pos.row,this.$pos.column);var t=this.pos;t.$insertRight=!0,t.detach(),t.markerId=e.addMarker(new l(t.row,t.column,t.row,t.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach(function(e){var t=n.createAnchor(e.row,e.column);t.$insertRight=!0,t.detach(),i.others.push(t)}),e.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var t=this.session,i=this;this.othersActive=!0,this.others.forEach(function(e){e.markerId=t.addMarker(new l(e.row,e.column,e.row,e.column+i.length),i.othersClass,null,!1)})}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e=this.pos.column&&t.start.column<=this.pos.column+this.length+1,s=t.start.column-this.pos.column;if(this.updateAnchors(e),n&&(this.length+=i),n&&!this.session.$fromUndo)if("insert"===e.action)for(var o=this.others.length-1;0<=o;o--){var r={row:(a=this.others[o]).row,column:a.column+s};this.doc.insertMergedLines(r,e.lines)}else if("remove"===e.action)for(o=this.others.length-1;0<=o;o--){var a;r={row:(a=this.others[o]).row,column:a.column+s};this.doc.remove(new l(r.row,r.column,r.row,r.column-i))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var i=this,n=this.session,e=function(e,t){n.removeMarker(e.markerId),e.markerId=n.addMarker(new l(e.row,e.column,e.row,e.column+i.length),t,null,!1)};e(this.pos,this.mainClass);for(var t=this.others.length;t--;)e(this.others[t],this.othersClass)}},this.onCursorChange=function(e){if(!this.$updating&&this.session){var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,i=0;ir&&(r=t.column),it[1].length&&(s=t[1].length),ot[3].length&&(r=t[3].length)),t):[e]}).map(t?n:a?l?function(e){return e[2]?i(s+o-e[2].length)+e[2]+i(r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}:n:function(e){return e[2]?i(s)+e[2]+i(r)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]})}}).call(c.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var i=e.oldSession;i&&(i.multiSelect.off("addRange",this.$onAddRange),i.multiSelect.off("removeRange",this.$onRemoveRange),i.multiSelect.off("multiSelect",this.$onMultiSelect),i.multiSelect.off("singleSelect",this.$onSingleSelect),i.multiSelect.lead.off("change",this.$checkMultiselectChange),i.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=n,e("./config").defineOptions(c.prototype,"editor",{enableMultiselect:{set:function(e){n(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",o)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",o))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})}),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(e,t,i){"use strict";var d=e("../../range").Range,n=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,i){var n=e.getLine(i);return this.foldingStartMarker.test(n)?"start":"markbeginend"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(n)?"end":""},this.getFoldWidgetRange=function(e,t,i){return null},this.indentationBlock=function(e,t,i){var n=/\S/,s=e.getLine(t),o=s.search(n);if(-1!=o){for(var r=i||s.length,a=e.getLength(),l=t,c=t;++to.row&&(r.row--,r.column=e.getLine(r.row).length),d.fromPoints(o,r)}},this.closingBracketBlock=function(e,t,i,n,s){var o={row:i,column:n},r=e.$findOpeningBracket(t,o);if(r)return r.column++,o.column--,d.fromPoints(r,o)}}).call(n.prototype)}),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(e,t,i){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}',t.$id="ace/theme/textmate",e("../lib/dom").importCssString(t.cssText,t.cssClass)}),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],function(e,t,i){"use strict";function n(e){this.session=e,(this.session.widgetManager=this).session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}e("./lib/oop");var o=e("./lib/dom");e("./range").Range;(function(){this.getRowLength=function(e){var t;return t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0,this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var t=0;return this.lineWidgets.forEach(function(e){e&&e.rowCount&&!e.hidden&&(t+=e.rowCount)}),t},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),(this.editor=e)&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets)))},this.detach=function(e){var t=this.editor;if(t){this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var i=this.session.lineWidgets;i&&i.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})}},this.updateOnFold=function(e,t){var i=t.lineWidgets;if(i&&e.action){for(var n=e.data,s=n.start.row,o=n.end.row,r="add"==e.action,a=s+1;a>1,r=i(t,e[o]);if(0=n.length?s=0"),h.appendChild(m.createElement("div"));var g=function(e,t,i){if(0===t&&("esc"===i||"return"===i))return c.destroy(),{command:"null"}};c.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(g),i.widgetManager.removeLineWidget(c),e.off("changeSelection",c.destroy),e.off("changeSession",c.destroy),e.off("mouseup",c.destroy),e.off("change",c.destroy))},e.keyBinding.addKeyboardHandler(g),e.on("changeSelection",c.destroy),e.on("changeSession",c.destroy),e.on("mouseup",c.destroy),e.on("change",c.destroy),e.session.widgetManager.addLineWidget(c),c.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:c.el.offsetHeight})},m.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")}),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/range","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],function(e,l,t){"use strict";e("./lib/fixoldbrowsers");var c=e("./lib/dom"),h=e("./lib/event"),i=e("./range").Range,u=e("./editor").Editor,n=e("./edit_session").EditSession,s=e("./undomanager").UndoManager,d=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),l.config=e("./config"),l.require=e,"function"==typeof define&&(l.define=define),l.edit=function(e,t){if("string"==typeof e){var i=e;if(!(e=document.getElementById(i)))throw new Error("ace.edit can't find div #"+i)}if(e&&e.env&&e.env.editor instanceof u)return e.env.editor;var n="";if(e&&/input|textarea/i.test(e.tagName)){var s=e;n=s.value,e=c.createElement("pre"),s.parentNode.replaceChild(e,s)}else e&&(n=e.textContent,e.innerHTML="");var o=l.createEditSession(n),r=new u(new d(e),o,t),a={document:o,editor:r,onResize:r.resize.bind(r,null)};return s&&(a.textarea=s),h.addListener(window,"resize",a.onResize),r.on("destroy",function(){h.removeListener(window,"resize",a.onResize),a.editor.container.env=null}),r.container.env=r.env=a,r},l.createEditSession=function(e,t){var i=new n(e,t);return i.setUndoManager(new s),i},l.Range=i,l.Editor=u,l.EditSession=n,l.UndoManager=s,l.VirtualRenderer=d,l.version="1.4.3"}),ace.require(["ace/ace"],function(e){for(var t in e&&(e.config.init(!0),e.define=ace.define),window.ace||(window.ace=e),e)e.hasOwnProperty(t)&&(window.ace[t]=e[t]);window.ace.default=window.ace,"object"==typeof module&&"object"==typeof exports&&module&&(module.exports=window.ace)}),ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],function(e,t,i){t.isDark=!0,t.cssClass="ace-monokai",t.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}",e("../lib/dom").importCssString(t.cssText,t.cssClass)}),ace.require(["ace/theme/monokai"],function(e){"object"==typeof module&&"object"==typeof exports&&module&&(module.exports=e)}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,i){"use strict";var n=e("../lib/oop"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},o.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};n.inherits(o,s),o.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},o.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},o.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=o}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,i){"use strict";function n(e){return[{token:"comment",regex:/\/\*/,next:[o.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[o.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var s=e("../lib/oop"),o=e("./doc_comment_highlight_rules").DocCommentHighlightRules,r=e("./text_highlight_rules").TextHighlightRules,a="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*",l=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),i="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[o.getStartRule("doc-start"),n("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+a+")(\\.)(prototype)(\\.)("+a+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+a+")(\\.)("+a+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+a+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+a+")(\\.)("+a+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+a+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+a+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"from(?=\\s*('|\"))"},{token:"keyword",regex:"(?:case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void)\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:a},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"storage.type",regex:/=>/,next:"start"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+a+")(\\.)("+a+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:a},{regex:"",token:"empty",next:"no_regex"}],start:[o.getStartRule("doc-start"),n("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:a},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:i},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:i},{token:"string",regex:"\\\\$",consumeLineEnd:!0},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},e&&e.noES6||(this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,i){if(this.next="{"==e?this.nextState:"","{"==e&&i.length)i.unshift("start",t);else if("}"==e&&i.length&&(i.shift(),this.next=i.shift(),-1!=this.next.indexOf("string")||-1!=this.next.indexOf("jsx")))return"paren.quasi.end";return"{"==e?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:i},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||0!=e.jsx)&&function(){var e=a.replace("\\d","\\d\\-"),t={onMatch:function(e,t,i){var n="/"==e.charAt(1)?2:1;return 1==n?(t!=this.nextState?i.unshift(this.next,this.nextState,0):i.unshift(this.next),i[2]++):2==n&&t==this.nextState&&(i[1]--,(!i[1]||i[1]<0)&&(i.shift(),i.shift())),[{type:"meta.tag.punctuation."+(1==n?"":"end-")+"tag-open.xml",value:e.slice(0,n)},{type:"meta.tag.tag-name.xml",value:e.substr(n)}]},regex:"",onMatch:function(e,t,i){return t==i[0]&&i.shift(),2==e.length&&(i[0]==this.nextState&&i[1]--,(!i[1]||i[1]<0)&&i.splice(0,2)),this.next=i[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},i,n("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}.call(this)),this.embedRules(o,"doc-",[o.getEndRule("no_regex")]),this.normalizeRules()};s.inherits(l,r),t.JavaScriptHighlightRules=l}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,i){"use strict";var r=e("../range").Range,n=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var i=e.getLine(t).match(/^(\s*\})/);if(!i)return 0;var n=i[1].length,s=e.findMatchingBracket({row:t,column:n});if(!s||s.row==t)return 0;var o=this.$getIndent(e.getLine(s.row));e.replace(new r(t,0,t,n-1),o)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(n.prototype),t.MatchingBraceOutdent=n}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,i){"use strict";var n=e("../../lib/oop"),h=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};n.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,i){var n=e.getLine(i);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return"";var s=this._getFoldWidgetBase(e,t,i);return!s&&this.startRegionRe.test(n)?"start":s},this.getFoldWidgetRange=function(e,t,i,n){var s,o=e.getLine(i);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,i);if(s=o.match(this.foldingStartMarker)){var r=s.index;if(s[1])return this.openingBracketBlock(e,s[1],i,r);var a=e.getCommentFoldRange(i,r+s[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,i):"all"!=t&&(a=null)),a}if("markbegin"!==t&&(s=o.match(this.foldingStopMarker))){r=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],i,r):e.getCommentFoldRange(i,r,-1)}},this.getSectionRange=function(e,t){for(var i=e.getLine(t),n=i.search(/\S/),s=t,o=i.length,r=t+=1,a=e.getLength();++t",next:"start"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.end.xml",regex:"--\x3e",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:t},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===o&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,i){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+i+".tag-name.xml"],regex:"(<)("+i+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[i+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,i){return i.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+i+".tag-name.xml"],regex:"(|$))",next:i+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(s.prototype),n.inherits(o,s),t.XmlHighlightRules=o}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,i){"use strict";var n=e("../lib/oop"),s=e("../lib/lang"),o=e("./css_highlight_rules").CssHighlightRules,r=e("./javascript_highlight_rules").JavaScriptHighlightRules,a=e("./xml_highlight_rules").XmlHighlightRules,l=s.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),c=function(){a.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:.]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var i=l[t];return["meta.tag.punctuation."+("<"==e?"":"end-")+"tag-open.xml","meta.tag"+(i?"."+i:"")+".tag-name.xml"]},regex:"(",next:"start"}]}),this.embedTagRules(o,"css-","style"),this.embedTagRules(new r({jsx:!1}).getRules(),"js-","script"),this.constructor===c&&this.normalizeRules()};n.inherits(c,a),t.HtmlHighlightRules=c}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,i){"use strict";function g(e,t){return e&&-1"==l)||g(h,"decl-attribute-equals")&&(u||"?"==l))return{text:o+o,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,i,n,s){var o=n.doc.getTextRange(s);if(!s.isMultiLine()&&('"'==o||"'"==o)&&n.doc.getLine(s.start.row).substring(s.start.column+1,s.start.column+2)==o)return s.end.column++,s}),this.add("autoclosing","insertion",function(e,t,i,n,s){if(">"==s){var o=i.getSelectionRange().start,r=new f(n,o.row,o.column),a=r.getCurrentToken()||r.stepBackward();if(!a||!(g(a,"tag-name")||g(a,"tag-whitespace")||g(a,"attribute-name")||g(a,"attribute-equals")||g(a,"attribute-value")))return;if(g(a,"reference.attribute-value"))return;if(g(a,"attribute-value")){var l=r.getCurrentTokenColumn()+a.value.length;if(o.column/.test(n.getLine(o.row).slice(o.column)))return;for(;!g(a,"tag-name");)if("<"==(a=r.stepBackward()).value){a=r.stepForward();break}var h=r.getCurrentTokenRow(),u=r.getCurrentTokenColumn();if(g(r.stepBackward(),"end-tag-open"))return;var d=a.value;if(h==o.row&&(d=d.substring(0,o.column-u)),this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,i,n,s){if("\n"==s){var o=i.getCursorPosition(),r=n.getLine(o.row),a=new f(n,o.row,o.column),l=a.getCurrentToken();if(l&&-1!==l.type.indexOf("tag-close")){if("/>"==l.value)return;for(;l&&-1===l.type.indexOf("tag-name");)l=a.stepBackward();if(!l)return;var c=l.value,h=a.getCurrentTokenRow();if(!(l=a.stepBackward())||-1!==l.type.indexOf("end-tag"))return;if(this.voidElements&&!this.voidElements[c]){var u=n.getTokenAt(o.row,o.column+1),d=(r=n.getLine(h),this.$getIndent(r)),g=d+n.getTabString();return u&&""==o.value;break}return n}if(l(o,"tag-close"))return n.selfClosing="/>"==o.value,n;n.start.column+=o.value.length}return null},this._findEndTagInLine=function(e,t,i,n){for(var s=e.getTokens(t),o=0,r=0;r"==t.value,i.end.row=e.getCurrentTokenRow(),i.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){for(;e.length;){var i=e[e.length-1];if(!t||i.tagName==t.tagName)return e.pop();if(!this.optionalEndTags.hasOwnProperty(i.tagName))return null;e.pop()}},this.getFoldWidgetRange=function(e,t,i){var n=this._getFirstTagInLine(e,i);if(!n)return this.getCommentFoldWidget(e,i)&&e.getCommentFoldRange(i,e.getLine(i).length);var s,o=[];if(n.closing||n.selfClosing){a=new h(e,i,n.end.column);for(var r={row:i,column:n.start.column};s=this._readTagBackward(a);)if(s.selfClosing){if(!o.length)return s.start.column+=s.tagName.length+2,s.end.column-=2,c.fromPoints(s.start,s.end)}else if(s.closing)o.push(s);else if(this._pop(o,s),0==o.length)return s.start.column+=s.tagName.length+2,s.start.row==s.end.row&&s.start.column23){value=0;}}else if(type=="m"){value=parseInt(value);if(direction){value+=5;}else{value-=5;} +if(value<0){value=55;}else if(value>59){value=0;} +if(value<10){value="0"+value;}} +field.value=('00'+value).substr(-2);},set:function(el){var parent=el.parentElement;while(parent.classList.contains("tpop")==false){parent=parent.parentElement;} +var input=parent.querySelectorAll("input[type=text]");var time=input[0].value+":"+input[1].value;document.getElementById(parent.dataset.target).value=time;parent.classList.remove("show");}};var fpick={attach:function(target){var dig=document.getElementById(target).value.split(".");var t1=dig[0]||"1";var t2=dig[1]||"2";var uniqueID=0;while(document.getElementById("fpick-"+uniqueID)!=null){uniqueID=Math.floor(Math.random()*(100-2))+1;} +var tw=document.createElement("div");tw.id="fpick-"+uniqueID;tw.classList.add("tpop");tw.dataset.target=target;tw.addEventListener("click",function(evt){if(evt.target.classList.contains("tpop")){this.classList.remove("show");}});var tp=document.createElement("div");tp.classList.add("fpicker");tp.appendChild(this.draw("h",t1));tp.appendChild(this.draw("m",t2));var bottom=document.createElement("div"),ok=document.createElement("input");ok.setAttribute("type","button");ok.value="OK";ok.addEventListener("click",function(){fpick.set(this);});bottom.classList.add("fpicker-btn");bottom.appendChild(ok);tp.appendChild(bottom);tw.appendChild(tp);document.body.appendChild(tw);var target=document.getElementById(target);target.dataset.dp=uniqueID;target.onfocus=function(){document.getElementById("fpick-"+this.dataset.dp).classList.add("show");};},draw:function(type,tv){var docket=document.createElement("div"),up=document.createElement("div"),down=document.createElement("div"),text=document.createElement("input");docket.classList.add("fpicker-"+type);up.classList.add("fpicker-up");down.classList.add("fpicker-down");up.innerHTML="︿";down.innerHTML="﹀";text.readOnly=true;text.setAttribute("type","text");if(type=="h"){text.value=tv;up.addEventListener("click",function(){fpick.spin("h",1,this);});down.addEventListener("click",function(){fpick.spin("h",0,this);});}else if(type=="m"){text.value=tv;up.addEventListener("click",function(){fpick.spin("m",1,this);});down.addEventListener("click",function(){fpick.spin("m",0,this);});} +docket.appendChild(up);docket.appendChild(text);docket.appendChild(down);return docket;},spin:function(type,direction,el){var parent=el.parentElement,field=parent.getElementsByTagName("input")[0],value=field.value;if(type=="h"){value=parseInt(value);if(direction){value++;}else{value--;} +if(value==-41){value=99;}else if(value>99){value=-40;}}else if(type=="m"){value=parseInt(value);if(direction){value++;}else{value--;} +if(value<0){value=9;}else if(value>9){value=0;}} +field.value=value;},set:function(el){var parent=el.parentElement;while(parent.classList.contains("tpop")==false){parent=parent.parentElement;} +var input=parent.querySelectorAll("input[type=text]");var temperature=input[0].value+"."+input[1].value;document.getElementById(parent.dataset.target).value=temperature;parent.classList.remove("show");}};!function(t){function n(i){if(e[i]) +return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports} +var e={};n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:i})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=0)} +([function(t,n,e){e(1),t.exports=e(4)},function(t,n,e){"use strict";var i=Object.assign||function(t){for(var n=1;n-1} +(t.positionClass)||(console.warn("An invalid notification position class has been specified."),t.positionClass=c.positionClass),t.onclick&&"function"!=typeof t.onclick&&(console.warn("Notification on click must be a function."),t.onclick=c.onclick),"number"!=typeof t.showDuration&&(t.showDuration=c.showDuration),(0,o.isString)(t.theme)&&0!==t.theme.length||(console.warn("Notification theme must be a string with length"),t.theme=c.theme),t} +function e(t){return t=n(t),function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=n.title,i=n.message,c=r(t.positionClass);if(!e&&!i) +return console.warn("Notification must contain a title or a message!");var a=(0,o.createElement)("div","ncf",t.theme);if(!0===t.closeOnClick&&a.addEventListener("click",function(){return c.removeChild(a)}),t.onclick&&a.addEventListener("click",function(n){return t.onclick(n)}),t.displayCloseButton){var s=(0,o.createElement)("button");s.innerText="X",!1===t.closeOnClick&&s.addEventListener("click",function(){return c.removeChild(a)}),(0,o.append)(a,s)} +if((0,o.isString)(e)&&e.length&&(0,o.append)(a,(0,o.createParagraph)("ncf-title")(e)),(0,o.isString)(i)&&i.length&&(0,o.append)(a,(0,o.createParagraph)("nfc-message")(i)),(0,o.append)(c,a),t.showDuration&&t.showDuration>0){var l=setTimeout(function(){c.removeChild(a),0===c.querySelectorAll(".ncf").length&&document.body.removeChild(c)},t.showDuration);(t.closeOnClick||t.displayCloseButton)&&a.addEventListener("click",function(){return clearTimeout(l)})}}} +function r(t){var n=document.querySelector("."+t);return n||(n=(0,o.createElement)("div","ncf-container",t),(0,o.append)(document.body,n)),n} +var c={closeOnClick:!0,displayCloseButton:!1,positionClass:"nfc-top-right",onclick:!1,showDuration:3500,theme:"success"};t.createNotification?console.warn("Window already contains a create notification function. Have you included the script twice?"):t.createNotification=e} +(window)},function(t,n,e){"use strict";!function(){function t(t){this.el=t;for(var n=t.className.replace(/^\s+|\s+$/g,"").split(/\s+/),i=0;i1?n-1:0),i=1;i1?n-1:0),i=1;i1?n-1:0),i=1;i1?n-1:0),c=1;cp;p++)"zIndex"in i[p]&&(l.push(i[p].zIndex),i[p].zIndex<0&&(m[i[p].zIndex]=i[p]));for(l.sort(h);l[k]<0;) +if(e=m[l[k++]],n.push(e.apply(d,g)),b) +return b=f,n;for(p=0;q>p;p++) +if(e=i[p],"zIndex"in e) +if(e.zIndex==l[k]){if(n.push(e.apply(d,g)),b) +break;do +if(k++,e=m[l[k]],e&&n.push(e.apply(d,g)),b) +break;while(e)}else +m[e.zIndex]=e;else if(n.push(e.apply(d,g)),b) +break;return b=f,a=o,n.length?n:null};return j._events=i,j.listeners=function(a){var b,c,d,g,h,j,k,l,m=a.split(e),n=i,o=[n],p=[];for(g=0,h=m.length;h>g;g++){for(l=[],j=0,k=o.length;k>j;j++) +for(n=o[j].n,c=[n[m[g]],n[f]],d=2;d--;) +b=c[d],b&&(l.push(b),p=p.concat(b.f||[]));o=l} +return p},j.on=function(a,b){if(a=String(a),"function"!=typeof b) +return function(){};for(var c=a.split(e),d=i,f=0,h=c.length;h>f;f++) +d=d.n,d=d.hasOwnProperty(c[f])&&d[c[f]]||(d[c[f]]={n:{}});for(d.f=d.f||[],f=0,h=d.f.length;h>f;f++) +if(d.f[f]==b) +return g;return d.f.push(b),function(a){+a==+a&&(b.zIndex=+a)}},j.f=function(a){var b=[].slice.call(arguments,1);return function(){j.apply(null,[a,null].concat(b).concat([].slice.call(arguments,0)))}},j.stop=function(){b=1},j.nt=function(b){return b?new RegExp("(?:\\.|\\/|^)"+b+"(?:\\.|\\/|$)").test(a):a},j.nts=function(){return a.split(e)},j.off=j.unbind=function(a,b){if(!a) +return void(j._events=i={n:{}});var c,g,h,k,l,m,n,o=a.split(e),p=[i];for(k=0,l=o.length;l>k;k++) +for(m=0;mk;k++) +for(c=p[k];c.n;){if(b){if(c.f){for(m=0,n=c.f.length;n>m;m++) +if(c.f[m]==b){c.f.splice(m,1);break} +!c.f.length&&delete c.f} +for(g in c.n) +if(c.n[d](g)&&c.n[g].f){var q=c.n[g].f;for(m=0,n=q.length;n>m;m++) +if(q[m]==b){q.splice(m,1);break} +!q.length&&delete c.n[g].f}}else{delete c.f;for(g in c.n) +c.n[d](g)&&c.n[g].f&&delete c.n[g].f} +c=c.n}},j.once=function(a,b){var c=function(){return j.unbind(a,c),b.apply(this,arguments)};return j.on(a,c)},j.version=c,j.toString=function(){return"You are running Eve "+c},j}),function(a,b){"function"==typeof define&&define.amd?define("raphael.core",["eve"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("eve")):a.Raphael=b(a.eve)} +(this,function(a){function b(c){if(b.is(c,"function")) +return t?c():a.on("raphael.DOMload",c);if(b.is(c,U)) +return b._engine.create[C](b,c.splice(0,3+b.is(c[0],S))).add(c);var d=Array.prototype.slice.call(arguments,0);if(b.is(d[d.length-1],"function")){var e=d.pop();return t?e.call(b._engine.create[C](b,d)):a.on("raphael.DOMload",function(){e.call(b._engine.create[C](b,d))})} +return b._engine.create[C](b,arguments)} +function c(a){if("function"==typeof a||Object(a)!==a) +return a;var b=new a.constructor;for(var d in a) +a[y](d)&&(b[d]=c(a[d]));return b} +function d(a,b){for(var c=0,d=a.length;d>c;c++) +if(a[c]===b) +return a.push(a.splice(c,1)[0])} +function e(a,b,c){function e(){var f=Array.prototype.slice.call(arguments,0),g=f.join("␀"),h=e.cache=e.cache||{},i=e.count=e.count||[];return h[y](g)?(d(i,g),c?c(h[g]):h[g]):(i.length>=1e3&&delete h[i.shift()],i.push(g),h[g]=a[C](b,f),c?c(h[g]):h[g])} +return e} +function f(){return this.hex} +function g(a,b){for(var c=[],d=0,e=a.length;e-2*!b>d;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])} +return c} +function h(a,b,c,d,e){var f=-3*b+9*c-9*d+3*e,g=a*f+6*b-12*c+6*d;return a*g-3*b+3*c} +function i(a,b,c,d,e,f,g,i,j){null==j&&(j=1),j=j>1?1:0>j?0:j;for(var k=j/2,l=12,m=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],n=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],o=0,p=0;l>p;p++){var q=k*m[p]+k,r=h(q,a,c,e,g),s=h(q,b,d,f,i),t=r*r+s*s;o+=n[p]*M.sqrt(t)} +return k*o} +function j(a,b,c,d,e,f,g,h,j){if(!(0>j||i(a,b,c,d,e,f,g,h)o;) +m/=2,n+=(j>k?1:-1)*m,k=i(a,b,c,d,e,f,g,h,n);return n}} +function k(a,b,c,d,e,f,g,h){if(!(N(a,c)N(e,g)||N(b,d)N(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(k){var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(!(n<+O(a,c).toFixed(2)||n>+N(a,c).toFixed(2)||n<+O(e,g).toFixed(2)||n>+N(e,g).toFixed(2)||o<+O(b,d).toFixed(2)||o>+N(b,d).toFixed(2)||o<+O(f,h).toFixed(2)||o>+N(f,h).toFixed(2))) +return{x:l,y:m}}}} +function l(a,c,d){var e=b.bezierBBox(a),f=b.bezierBBox(c);if(!b.isBBoxIntersect(e,f)) +return d?0:[];for(var g=i.apply(0,a),h=i.apply(0,c),j=N(~~(g/5),1),l=N(~~(h/5),1),m=[],n=[],o={},p=d?0:[],q=0;j+1>q;q++){var r=b.findDotsAtSegment.apply(b,a.concat(q/j));m.push({x:r.x,y:r.y,t:q/j})} +for(q=0;l+1>q;q++) +r=b.findDotsAtSegment.apply(b,c.concat(q/l)),n.push({x:r.x,y:r.y,t:q/l});for(q=0;j>q;q++) +for(var s=0;l>s;s++){var t=m[q],u=m[q+1],v=n[s],w=n[s+1],x=P(u.x-t.x)<.001?"y":"x",y=P(w.x-v.x)<.001?"y":"x",z=k(t.x,t.y,u.x,u.y,v.x,v.y,w.x,w.y);if(z){if(o[z.x.toFixed(4)]==z.y.toFixed(4)) +continue;o[z.x.toFixed(4)]=z.y.toFixed(4);var A=t.t+P((z[x]-t[x])/(u[x]-t[x]))*(u.t-t.t),B=v.t+P((z[y]-v[y])/(w[y]-v[y]))*(w.t-v.t);A>=0&&1.001>=A&&B>=0&&1.001>=B&&(d?p++:p.push({x:z.x,y:z.y,t1:O(A,1),t2:O(B,1)}))}} +return p} +function m(a,c,d){a=b._path2curve(a),c=b._path2curve(c);for(var e,f,g,h,i,j,k,m,n,o,p=d?0:[],q=0,r=a.length;r>q;q++){var s=a[q];if("M"==s[0]) +e=i=s[1],f=j=s[2];else{"C"==s[0]?(n=[e,f].concat(s.slice(1)),e=n[6],f=n[7]):(n=[e,f,e,f,i,j,i,j],e=i,f=j);for(var t=0,u=c.length;u>t;t++){var v=c[t];if("M"==v[0]) +g=k=v[1],h=m=v[2];else{"C"==v[0]?(o=[g,h].concat(v.slice(1)),g=o[6],h=o[7]):(o=[g,h,g,h,k,m,k,m],g=k,h=m);var w=l(n,o,d);if(d) +p+=w;else{for(var x=0,y=w.length;y>x;x++) +w[x].segment1=q,w[x].segment2=t,w[x].bez1=n,w[x].bez2=o;p=p.concat(w)}}}}} +return p} +function n(a,b,c,d,e,f){null!=a?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)} +function o(){return this.x+G+this.y+G+this.width+" × "+this.height} +function p(a,b,c,d,e,f){function g(a){return((l*a+k)*a+j)*a} +function h(a,b){var c=i(a,b);return((o*c+n)*c+m)*c} +function i(a,b){var c,d,e,f,h,i;for(e=a,i=0;8>i;i++){if(f=g(e)-a,P(f)e) +return c;if(e>d) +return d;for(;d>c;){if(f=g(e),P(f-a)f?c=e:d=e,e=(d-c)/2+c} +return e} +var j=3*b,k=3*(d-b)-j,l=1-j-k,m=3*c,n=3*(e-c)-m,o=1-m-n;return h(a,1/(200*f))} +function q(a,b){var c=[],d={};if(this.ms=b,this.times=1,a){for(var e in a) +a[y](e)&&(d[$(e)]=a[e],c.push($(e)));c.sort(ka)} +this.anim=d,this.top=c[c.length-1],this.percents=c} +function r(c,d,e,f,g,h){e=$(e);var i,j,k,l,m,o,q=c.ms,r={},s={},t={};if(f) +for(w=0,x=fb.length;x>w;w++){var u=fb[w];if(u.el.id==d.id&&u.anim==c){u.percent!=e?(fb.splice(w,1),k=1):j=u,d.attr(u.totalOrigin);break}} +else +f=+s;for(var w=0,x=c.percents.length;x>w;w++){if(c.percents[w]==e||c.percents[w]>f*c.top){e=c.percents[w],m=c.percents[w-1]||0,q=q/c.top*(e-m),l=c.percents[w+1],i=c.anim[e];break} +f&&d.attr(c.anim[c.percents[w]])} +if(i){if(j) +j.initstatus=f,j.start=new Date-j.ms*f;else{for(var z in i) +if(i[y](z)&&(ca[y](z)||d.paper.customAttributes[y](z))) +switch(r[z]=d.attr(z),null==r[z]&&(r[z]=ba[z]),s[z]=i[z],ca[z]){case S:t[z]=(s[z]-r[z])/q;break;case"colour":r[z]=b.getRGB(r[z]);var A=b.getRGB(s[z]);t[z]={r:(A.r-r[z].r)/q,g:(A.g-r[z].g)/q,b:(A.b-r[z].b)/q};break;case"path":var B=Ia(r[z],s[z]),C=B[1];for(r[z]=B[0],t[z]=[],w=0,x=r[z].length;x>w;w++){t[z][w]=[0];for(var E=1,F=r[z][w].length;F>E;E++) +t[z][w][E]=(C[w][E]-r[z][w][E])/q} +break;case"transform":var G=d._,J=Na(G[z],s[z]);if(J) +for(r[z]=J.from,s[z]=J.to,t[z]=[],t[z].real=!0,w=0,x=r[z].length;x>w;w++) +for(t[z][w]=[r[z][w][0]],E=1,F=r[z][w].length;F>E;E++) +t[z][w][E]=(s[z][w][E]-r[z][w][E])/q;else{var K=d.matrix||new n,L={_:{transform:G.transform},getBBox:function(){return d.getBBox(1)}};r[z]=[K.a,K.b,K.c,K.d,K.e,K.f],La(L,s[z]),s[z]=L._.transform,t[z]=[(L.matrix.a-K.a)/q,(L.matrix.b-K.b)/q,(L.matrix.c-K.c)/q,(L.matrix.d-K.d)/q,(L.matrix.e-K.e)/q,(L.matrix.f-K.f)/q]} +break;case"csv":var M=H(i[z])[I](v),N=H(r[z])[I](v);if("clip-rect"==z) +for(r[z]=N,t[z]=[],w=N.length;w--;) +t[z][w]=(M[w]-r[z][w])/q;s[z]=M;break;default:for(M=[][D](i[z]),N=[][D](r[z]),t[z]=[],w=d.paper.customAttributes[z].length;w--;) +t[z][w]=((M[w]||0)-(N[w]||0))/q} +var O=i.easing,P=b.easing_formulas[O];if(!P) +if(P=H(O).match(Y),P&&5==P.length){var Q=P;P=function(a){return p(a,+Q[1],+Q[2],+Q[3],+Q[4],q)}}else +P=la;if(o=i.start||c.start||+new Date,u={anim:c,percent:e,timestamp:o,start:o+(c.del||0),status:0,initstatus:f||0,stop:!1,ms:q,easing:P,from:r,diff:t,to:s,el:d,callback:i.callback,prev:m,next:l,repeat:h||c.times,origin:d.attr(),totalOrigin:g},fb.push(u),f&&!j&&!k&&(u.stop=!0,u.start=new Date-q*f,1==fb.length)) +return hb();k&&(u.start=new Date-u.ms*f),1==fb.length&&gb(hb)} +a("raphael.anim.start."+d.id,d,c)}} +function s(a){for(var b=0;be;e++) +for(i=a[e],f=1,h=i.length;h>f;f+=2) +c=b.x(i[f],i[f+1]),d=b.y(i[f],i[f+1]),i[f]=c,i[f+1]=d;return a};if(b._g=z,b.type=z.win.SVGAngle||z.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML","VML"==b.type){var qa,ra=z.doc.createElement("div");if(ra.innerHTML='',qa=ra.firstChild,qa.style.behavior="url(#default#VML)",!qa||"object"!=typeof qa.adj) +return b.type=F;ra=null} +b.svg=!(b.vml="VML"==b.type),b._Paper=B,b.fn=u=B.prototype=b.prototype,b._id=0,b._oid=0,b.is=function(a,b){return b=L.call(b),"finite"==b?!X[y](+a):"array"==b?a instanceof Array:"null"==b&&null===a||b==typeof a&&null!==a||"object"==b&&a===Object(a)||"array"==b&&Array.isArray&&Array.isArray(a)||V.call(a).slice(8,-1).toLowerCase()==b},b.angle=function(a,c,d,e,f,g){if(null==f){var h=a-d,i=c-e;return h||i?(180+180*M.atan2(-i,-h)/R+360)%360:0} +return b.angle(a,c,f,g)-b.angle(d,e,f,g)},b.rad=function(a){return a%360*R/180},b.deg=function(a){return Math.round(180*a/R%360*1e3)/1e3},b.snapTo=function(a,c,d){if(d=b.is(d,"finite")?d:10,b.is(a,U)){for(var e=a.length;e--;) +if(P(a[e]-c)<=d) +return a[e]}else{a=+a;var f=c%a;if(d>f) +return c-f;if(f>a-d) +return c-f+a} +return c};b.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}} +(/[xy]/g,function(a){var b=16*M.random()|0,c="x"==a?b:3&b|8;return c.toString(16)});b.setWindow=function(c){a("raphael.setWindow",b,z.win,c),z.win=c,z.doc=z.win.document,b._engine.initWin&&b._engine.initWin(z.win)};var sa=function(a){if(b.vml){var c,d=/^\s+|\s+$/g;try{var f=new ActiveXObject("htmlfile");f.write(""),f.close(),c=f.body}catch(g){c=createPopup().document.body} +var h=c.createTextRange();sa=e(function(a){try{c.style.color=H(a).replace(d,F);var b=h.queryCommandValue("ForeColor");return b=(255&b)<<16|65280&b|(16711680&b)>>>16,"#"+("000000"+b.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=z.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",z.doc.body.appendChild(i),sa=e(function(a){return i.style.color=a,z.doc.defaultView.getComputedStyle(i,F).getPropertyValue("color")})} +return sa(a)},ta=function(){return"hsb("+[this.h,this.s,this.b]+")"},ua=function(){return"hsl("+[this.h,this.s,this.l]+")"},va=function(){return this.hex},wa=function(a,c,d){if(null==c&&b.is(a,"object")&&"r"in a&&"g"in a&&"b"in a&&(d=a.b,c=a.g,a=a.r),null==c&&b.is(a,T)){var e=b.getRGB(a);a=e.r,c=e.g,d=e.b} +return(a>1||c>1||d>1)&&(a/=255,c/=255,d/=255),[a,c,d]},xa=function(a,c,d,e){a*=255,c*=255,d*=255;var f={r:a,g:c,b:d,hex:b.rgb(a,c,d),toString:va};return b.is(e,"finite")&&(f.opacity=e),f};b.color=function(a){var c;return b.is(a,"object")&&"h"in a&&"s"in a&&"b"in a?(c=b.hsb2rgb(a),a.r=c.r,a.g=c.g,a.b=c.b,a.hex=c.hex):b.is(a,"object")&&"h"in a&&"s"in a&&"l"in a?(c=b.hsl2rgb(a),a.r=c.r,a.g=c.g,a.b=c.b,a.hex=c.hex):(b.is(a,"string")&&(a=b.getRGB(a)),b.is(a,"object")&&"r"in a&&"g"in a&&"b"in a?(c=b.rgb2hsl(a),a.h=c.h,a.s=c.s,a.l=c.l,c=b.rgb2hsb(a),a.v=c.b):(a={hex:"none"},a.r=a.g=a.b=a.h=a.s=a.v=a.l=-1)),a.toString=va,a},b.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,d=a.o,a=a.h),a*=360;var e,f,g,h,i;return a=a%360/60,i=c*b,h=i*(1-P(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],xa(e,f,g,d)},b.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h),(a>1||b>1||c>1)&&(a/=360,b/=100,c/=100),a*=360;var e,f,g,h,i;return a=a%360/60,i=2*b*(.5>c?c:1-c),h=i*(1-P(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],xa(e,f,g,d)},b.rgb2hsb=function(a,b,c){c=wa(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;return f=N(a,b,c),g=f-O(a,b,c),d=0==g?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=0==g?0:g/f,{h:d,s:e,b:f,toString:ta}},b.rgb2hsl=function(a,b,c){c=wa(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;return g=N(a,b,c),h=O(a,b,c),i=g-h,d=0==i?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=0==i?0:.5>f?i/(2*f):i/(2-2*f),{h:d,s:e,l:f,toString:ua}},b._path2string=function(){return this.join(",").replace(fa,"$1")};b._preload=function(a,b){var c=z.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top:-9999em",c.onload=function(){b.call(this),this.onload=null,z.doc.body.removeChild(this)},c.onerror=function(){z.doc.body.removeChild(this)},z.doc.body.appendChild(c),c.src=a};b.getRGB=e(function(a){if(!a||(a=H(a)).indexOf("-")+1) +return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:f};if("none"==a) +return{r:-1,g:-1,b:-1,hex:"none",toString:f};!(ea[y](a.toLowerCase().substring(0,2))||"#"==a.charAt())&&(a=sa(a));var c,d,e,g,h,i,j=a.match(W);return j?(j[2]&&(e=_(j[2].substring(5),16),d=_(j[2].substring(3,5),16),c=_(j[2].substring(1,3),16)),j[3]&&(e=_((h=j[3].charAt(3))+h,16),d=_((h=j[3].charAt(2))+h,16),c=_((h=j[3].charAt(1))+h,16)),j[4]&&(i=j[4][I](da),c=$(i[0]),"%"==i[0].slice(-1)&&(c*=2.55),d=$(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=$(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),"rgba"==j[1].toLowerCase().slice(0,4)&&(g=$(i[3])),i[3]&&"%"==i[3].slice(-1)&&(g/=100)),j[5]?(i=j[5][I](da),c=$(i[0]),"%"==i[0].slice(-1)&&(c*=2.55),d=$(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=$(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(c/=360),"hsba"==j[1].toLowerCase().slice(0,4)&&(g=$(i[3])),i[3]&&"%"==i[3].slice(-1)&&(g/=100),b.hsb2rgb(c,d,e,g)):j[6]?(i=j[6][I](da),c=$(i[0]),"%"==i[0].slice(-1)&&(c*=2.55),d=$(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=$(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(c/=360),"hsla"==j[1].toLowerCase().slice(0,4)&&(g=$(i[3])),i[3]&&"%"==i[3].slice(-1)&&(g/=100),b.hsl2rgb(c,d,e,g)):(j={r:c,g:d,b:e,toString:f},j.hex="#"+(16777216|e|d<<8|c<<16).toString(16).slice(1),b.is(g,"finite")&&(j.opacity=g),j)):{r:-1,g:-1,b:-1,hex:"none",error:1,toString:f}},b),b.hsb=e(function(a,c,d){return b.hsb2rgb(a,c,d).hex}),b.hsl=e(function(a,c,d){return b.hsl2rgb(a,c,d).hex}),b.rgb=e(function(a,b,c){function d(a){return a+.5|0} +return"#"+(16777216|d(c)|d(b)<<8|d(a)<<16).toString(16).slice(1)}),b.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);return b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b})),c.hex},b.getColor.reset=function(){delete this.start},b.parsePathString=function(a){if(!a) +return null;var c=ya(a);if(c.arr) +return Aa(c.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];return b.is(a,U)&&b.is(a[0],U)&&(e=Aa(a)),e.length||H(a).replace(ga,function(a,b,c){var f=[],g=b.toLowerCase();if(c.replace(ia,function(a,b){b&&f.push(+b)}),"m"==g&&f.length>2&&(e.push([b][D](f.splice(0,2))),g="l",b="m"==b?"l":"L"),"r"==g) +e.push([b][D](f));else +for(;f.length>=d[g]&&(e.push([b][D](f.splice(0,d[g]))),d[g]););}),e.toString=b._path2string,c.arr=Aa(e),e},b.parseTransformString=e(function(a){if(!a) +return null;var c=[];return b.is(a,U)&&b.is(a[0],U)&&(c=Aa(a)),c.length||H(a).replace(ha,function(a,b,d){{var e=[];L.call(b)} +d.replace(ia,function(a,b){b&&e.push(+b)}),c.push([b][D](e))}),c.toString=b._path2string,c});var ya=function(a){var b=ya.ps=ya.ps||{};return b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b) +b[y](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])}),b[a]};b.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=Q(j,3),l=Q(j,2),m=i*i,n=m*i,o=k*a+3*l*i*c+3*j*i*i*e+n*g,p=k*b+3*l*i*d+3*j*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,w=j*e+i*g,x=j*f+i*h,y=90-180*M.atan2(q-s,r-t)/R;return(q>s||t>r)&&(y+=180),{x:o,y:p,m:{x:q,y:r},n:{x:s,y:t},start:{x:u,y:v},end:{x:w,y:x},alpha:y}},b.bezierBBox=function(a,c,d,e,f,g,h,i){b.is(a,"array")||(a=[a,c,d,e,f,g,h,i]);var j=Ha.apply(null,a);return{x:j.min.x,y:j.min.y,x2:j.max.x,y2:j.max.y,width:j.max.x-j.min.x,height:j.max.y-j.min.y}},b.isPointInsideBBox=function(a,b,c){return b>=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},b.isBBoxIntersect=function(a,c){var d=b.isPointInsideBBox;return d(c,a.x,a.y)||d(c,a.x2,a.y)||d(c,a.x,a.y2)||d(c,a.x2,a.y2)||d(a,c.x,c.y)||d(a,c.x2,c.y)||d(a,c.x,c.y2)||d(a,c.x2,c.y2)||(a.xc.x||c.xa.x)&&(a.yc.y||c.ya.y)},b.pathIntersection=function(a,b){return m(a,b)},b.pathIntersectionNumber=function(a,b){return m(a,b,1)},b.isPointInsidePath=function(a,c,d){var e=b.pathBBox(a);return b.isPointInsideBBox(e,c,d)&&m(a,[["M",c,d],["H",e.x2+10]],1)%2==1},b._removedFactory=function(b){return function(){a("raphael.log",null,"Raphaël: you are calling to method “"+b+"” of removed object",b)}};var za=b.pathBBox=function(a){var b=ya(a);if(b.bbox) +return c(b.bbox);if(!a) +return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=Ia(a);for(var d,e=0,f=0,g=[],h=[],i=0,j=a.length;j>i;i++) +if(d=a[i],"M"==d[0]) +e=d[1],f=d[2],g.push(e),h.push(f);else{var k=Ha(e,f,d[1],d[2],d[3],d[4],d[5],d[6]);g=g[D](k.min.x,k.max.x),h=h[D](k.min.y,k.max.y),e=d[5],f=d[6]} +var l=O[C](0,g),m=O[C](0,h),n=N[C](0,g),o=N[C](0,h),p=n-l,q=o-m,r={x:l,y:m,x2:n,y2:o,width:p,height:q,cx:l+p/2,cy:m+q/2};return b.bbox=c(r),r},Aa=function(a){var d=c(a);return d.toString=b._path2string,d},Ba=b._pathToRelative=function(a){var c=ya(a);if(c.rel) +return Aa(c.rel);b.is(a,U)&&b.is(a&&a[0],U)||(a=b.parsePathString(a));var d=[],e=0,f=0,g=0,h=0,i=0;"M"==a[0][0]&&(e=a[0][1],f=a[0][2],g=e,h=f,i++,d.push(["M",e,f]));for(var j=i,k=a.length;k>j;j++){var l=d[j]=[],m=a[j];if(m[0]!=L.call(m[0])) +switch(l[0]=L.call(m[0]),l[0]){case"a":l[1]=m[1],l[2]=m[2],l[3]=m[3],l[4]=m[4],l[5]=m[5],l[6]=+(m[6]-e).toFixed(3),l[7]=+(m[7]-f).toFixed(3);break;case"v":l[1]=+(m[1]-f).toFixed(3);break;case"m":g=m[1],h=m[2];default:for(var n=1,o=m.length;o>n;n++) +l[n]=+(m[n]-(n%2?e:f)).toFixed(3)} +else{l=d[j]=[],"m"==m[0]&&(g=m[1]+e,h=m[2]+f);for(var p=0,q=m.length;q>p;p++) +d[j][p]=m[p]} +var r=d[j].length;switch(d[j][0]){case"z":e=g,f=h;break;case"h":e+=+d[j][r-1];break;case"v":f+=+d[j][r-1];break;default:e+=+d[j][r-2],f+=+d[j][r-1]}} +return d.toString=b._path2string,c.rel=Aa(d),d},Ca=b._pathToAbsolute=function(a){var c=ya(a);if(c.abs) +return Aa(c.abs);if(b.is(a,U)&&b.is(a&&a[0],U)||(a=b.parsePathString(a)),!a||!a.length) +return[["M",0,0]];var d=[],e=0,f=0,h=0,i=0,j=0;"M"==a[0][0]&&(e=+a[0][1],f=+a[0][2],h=e,i=f,j++,d[0]=["M",e,f]);for(var k,l,m=3==a.length&&"M"==a[0][0]&&"R"==a[1][0].toUpperCase()&&"Z"==a[2][0].toUpperCase(),n=j,o=a.length;o>n;n++){if(d.push(k=[]),l=a[n],l[0]!=aa.call(l[0])) +switch(k[0]=aa.call(l[0]),k[0]){case"A":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]+e),k[7]=+(l[7]+f);break;case"V":k[1]=+l[1]+f;break;case"H":k[1]=+l[1]+e;break;case"R":for(var p=[e,f][D](l.slice(1)),q=2,r=p.length;r>q;q++) +p[q]=+p[q]+e,p[++q]=+p[q]+f;d.pop(),d=d[D](g(p,m));break;case"M":h=+l[1]+e,i=+l[2]+f;default:for(q=1,r=l.length;r>q;q++) +k[q]=+l[q]+(q%2?e:f)} +else if("R"==l[0]) +p=[e,f][D](l.slice(1)),d.pop(),d=d[D](g(p,m)),k=["R"][D](l.slice(-2));else +for(var s=0,t=l.length;t>s;s++) +k[s]=l[s];switch(k[0]){case"Z":e=h,f=i;break;case"H":e=k[1];break;case"V":f=k[1];break;case"M":h=k[k.length-2],i=k[k.length-1];default:e=k[k.length-2],f=k[k.length-1]}} +return d.toString=b._path2string,c.abs=Aa(d),d},Da=function(a,b,c,d){return[a,b,c,d,c,d]},Ea=function(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]},Fa=function(a,b,c,d,f,g,h,i,j,k){var l,m=120*R/180,n=R/180*(+f||0),o=[],p=e(function(a,b,c){var d=a*M.cos(c)-b*M.sin(c),e=a*M.sin(c)+b*M.cos(c);return{x:d,y:e}});if(k) +y=k[0],z=k[1],w=k[2],x=k[3];else{l=p(a,b,-n),a=l.x,b=l.y,l=p(i,j,-n),i=l.x,j=l.y;var q=(M.cos(R/180*f),M.sin(R/180*f),(a-i)/2),r=(b-j)/2,s=q*q/(c*c)+r*r/(d*d);s>1&&(s=M.sqrt(s),c=s*c,d=s*d);var t=c*c,u=d*d,v=(g==h?-1:1)*M.sqrt(P((t*u-t*r*r-u*q*q)/(t*r*r+u*q*q))),w=v*c*r/d+(a+i)/2,x=v* -d*q/c+(b+j)/2,y=M.asin(((b-x)/d).toFixed(9)),z=M.asin(((j-x)/d).toFixed(9));y=w>a?R-y:y,z=w>i?R-z:z,0>y&&(y=2*R+y),0>z&&(z=2*R+z),h&&y>z&&(y-=2*R),!h&&z>y&&(z-=2*R)} +var A=z-y;if(P(A)>m){var B=z,C=i,E=j;z=y+m*(h&&z>y?1:-1),i=w+c*M.cos(z),j=x+d*M.sin(z),o=Fa(i,j,c,d,f,0,h,C,E,[z,B,w,x])} +A=z-y;var F=M.cos(y),G=M.sin(y),H=M.cos(z),J=M.sin(z),K=M.tan(A/4),L=4/3*c*K,N=4/3*d*K,O=[a,b],Q=[a+L*G,b-N*F],S=[i+L*J,j-N*H],T=[i,j];if(Q[0]=2*O[0]-Q[0],Q[1]=2*O[1]-Q[1],k) +return[Q,S,T][D](o);o=[Q,S,T][D](o).join()[I](",");for(var U=[],V=0,W=o.length;W>V;V++) +U[V]=V%2?p(o[V-1],o[V],n).y:p(o[V],o[V+1],n).x;return U},Ga=function(a,b,c,d,e,f,g,h,i){var j=1-i;return{x:Q(j,3)*a+3*Q(j,2)*i*c+3*j*i*i*e+Q(i,3)*g,y:Q(j,3)*b+3*Q(j,2)*i*d+3*j*i*i*f+Q(i,3)*h}},Ha=e(function(a,b,c,d,e,f,g,h){var i,j=e-2*c+a-(g-2*e+c),k=2*(c-a)-2*(e-c),l=a-c,m=(-k+M.sqrt(k*k-4*j*l))/2/j,n=(-k-M.sqrt(k*k-4*j*l))/2/j,o=[b,h],p=[a,g];return P(m)>"1e12"&&(m=.5),P(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ga(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ga(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),j=f-2*d+b-(h-2*f+d),k=2*(d-b)-2*(f-d),l=b-d,m=(-k+M.sqrt(k*k-4*j*l))/2/j,n=(-k-M.sqrt(k*k-4*j*l))/2/j,P(m)>"1e12"&&(m=.5),P(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ga(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ga(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),{min:{x:O[C](0,p),y:O[C](0,o)},max:{x:N[C](0,p),y:N[C](0,o)}}}),Ia=b._path2curve=e(function(a,b){var c=!b&&ya(a);if(!b&&c.curve) +return Aa(c.curve);for(var d=Ca(a),e=b&&Ca(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=(function(a,b,c){var d,e,f={T:1,Q:1};if(!a) +return["C",b.x,b.y,b.x,b.y,b.x,b.y];switch(!(a[0]in f)&&(b.qx=b.qy=null),a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][D](Fa[C](0,[b.x,b.y][D](a.slice(1))));break;case"S":"C"==c||"S"==c?(d=2*b.x-b.bx,e=2*b.y-b.by):(d=b.x,e=b.y),a=["C",d,e][D](a.slice(1));break;case"T":"Q"==c||"T"==c?(b.qx=2*b.x-b.qx,b.qy=2*b.y-b.qy):(b.qx=b.x,b.qy=b.y),a=["C"][D](Ea(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][D](Ea(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][D](Da(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][D](Da(b.x,b.y,a[1],b.y));break;case"V":a=["C"][D](Da(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][D](Da(b.x,b.y,b.X,b.Y))} +return a}),i=function(a,b){if(a[b].length>7){a[b].shift();for(var c=a[b];c.length;) +k[b]="A",e&&(l[b]="A"),a.splice(b++,0,["C"][D](c.splice(0,6)));a.splice(b,1),p=N(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&"M"==a[g][0]&&"M"!=b[g][0]&&(b.splice(g,0,["M",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],p=N(d.length,e&&e.length||0))},k=[],l=[],m="",n="",o=0,p=N(d.length,e&&e.length||0);p>o;o++){d[o]&&(m=d[o][0]),"C"!=m&&(k[o]=m,o&&(n=k[o-1])),d[o]=h(d[o],f,n),"A"!=k[o]&&"C"==m&&(k[o]="C"),i(d,o),e&&(e[o]&&(m=e[o][0]),"C"!=m&&(l[o]=m,o&&(n=l[o-1])),e[o]=h(e[o],g,n),"A"!=l[o]&&"C"==m&&(l[o]="C"),i(e,o)),j(d,e,f,g,o),j(e,d,g,f,o);var q=d[o],r=e&&e[o],s=q.length,t=e&&r.length;f.x=q[s-2],f.y=q[s-1],f.bx=$(q[s-4])||f.x,f.by=$(q[s-3])||f.y,g.bx=e&&($(r[t-4])||g.x),g.by=e&&($(r[t-3])||g.y),g.x=e&&r[t-2],g.y=e&&r[t-1]} +return e||(c.curve=Aa(d)),e?[d,e]:d},null,Aa),Ja=(b._parseDots=e(function(a){for(var c=[],d=0,e=a.length;e>d;d++){var f={},g=a[d].match(/^([^:]*):?([\d\.]*)/);if(f.color=b.getRGB(g[1]),f.color.error) +return null;f.opacity=f.color.opacity,f.color=f.color.hex,g[2]&&(f.offset=g[2]+"%"),c.push(f)} +for(d=1,e=c.length-1;e>d;d++) +if(!c[d].offset){for(var h=$(c[d-1].offset||0),i=0,j=d+1;e>j;j++) +if(c[j].offset){i=c[j].offset;break} +i||(i=100,j=e),i=$(i);for(var k=(i-h)/(j-d+1);j>d;d++) +h+=k,c[d].offset=h+"%"} +return c}),b._tear=function(a,b){a==b.top&&(b.top=a.prev),a==b.bottom&&(b.bottom=a.next),a.next&&(a.next.prev=a.prev),a.prev&&(a.prev.next=a.next)}),Ka=(b._tofront=function(a,b){b.top!==a&&(Ja(a,b),a.next=null,a.prev=b.top,b.top.next=a,b.top=a)},b._toback=function(a,b){b.bottom!==a&&(Ja(a,b),a.next=b.bottom,a.prev=null,b.bottom.prev=a,b.bottom=a)},b._insertafter=function(a,b,c){Ja(a,c),b==c.top&&(c.top=a),b.next&&(b.next.prev=a),a.next=b.next,a.prev=b,b.next=a},b._insertbefore=function(a,b,c){Ja(a,c),b==c.bottom&&(c.bottom=a),b.prev&&(b.prev.next=a),a.prev=b.prev,b.prev=a,a.next=b},b.toMatrix=function(a,b){var c=za(a),d={_:{transform:F},getBBox:function(){return c}};return La(d,b),d.matrix}),La=(b.transformPath=function(a,b){return pa(a,Ka(a,b))},b._extractTransform=function(a,c){if(null==c) +return a._.transform;c=H(c).replace(/\.{3}|\u2026/g,a._.transform||F);var d=b.parseTransformString(c),e=0,f=0,g=0,h=1,i=1,j=a._,k=new n;if(j.transform=d||[],d) +for(var l=0,m=d.length;m>l;l++){var o,p,q,r,s,t=d[l],u=t.length,v=H(t[0]).toLowerCase(),w=t[0]!=v,x=w?k.invert():0;"t"==v&&3==u?w?(o=x.x(0,0),p=x.y(0,0),q=x.x(t[1],t[2]),r=x.y(t[1],t[2]),k.translate(q-o,r-p)):k.translate(t[1],t[2]):"r"==v?2==u?(s=s||a.getBBox(1),k.rotate(t[1],s.x+s.width/2,s.y+s.height/2),e+=t[1]):4==u&&(w?(q=x.x(t[2],t[3]),r=x.y(t[2],t[3]),k.rotate(t[1],q,r)):k.rotate(t[1],t[2],t[3]),e+=t[1]):"s"==v?2==u||3==u?(s=s||a.getBBox(1),k.scale(t[1],t[u-1],s.x+s.width/2,s.y+s.height/2),h*=t[1],i*=t[u-1]):5==u&&(w?(q=x.x(t[3],t[4]),r=x.y(t[3],t[4]),k.scale(t[1],t[2],q,r)):k.scale(t[1],t[2],t[3],t[4]),h*=t[1],i*=t[2]):"m"==v&&7==u&&k.add(t[1],t[2],t[3],t[4],t[5],t[6]),j.dirtyT=1,a.matrix=k} +a.matrix=k,j.sx=h,j.sy=i,j.deg=e,j.dx=f=k.e,j.dy=g=k.f,1==h&&1==i&&!e&&j.bbox?(j.bbox.x+=+f,j.bbox.y+=+g):j.dirtyT=1}),Ma=function(a){var b=a[0];switch(b.toLowerCase()){case"t":return[b,0,0];case"m":return[b,1,0,0,1,0,0];case"r":return 4==a.length?[b,0,a[2],a[3]]:[b,0];case"s":return 5==a.length?[b,1,1,a[3],a[4]]:3==a.length?[b,1,1]:[b,1]}},Na=b._equaliseTransform=function(a,c){c=H(c).replace(/\.{3}|\u2026/g,a),a=b.parseTransformString(a)||[],c=b.parseTransformString(c)||[];for(var d,e,f,g,h=N(a.length,c.length),i=[],j=[],k=0;h>k;k++){if(f=a[k]||Ma(c[k]),g=c[k]||Ma(f),f[0]!=g[0]||"r"==f[0].toLowerCase()&&(f[2]!=g[2]||f[3]!=g[3])||"s"==f[0].toLowerCase()&&(f[3]!=g[3]||f[4]!=g[4])) +return;for(i[k]=[],j[k]=[],d=0,e=N(f.length,g.length);e>d;d++) +d in f&&(i[k][d]=f[d]),d in g&&(j[k][d]=g[d])} +return{from:i,to:j}};b._getContainer=function(a,c,d,e){var f;return f=null!=e||b.is(a,"object")?a:z.doc.getElementById(a),null!=f?f.tagName?null==c?{container:f,width:f.style.pixelWidth||f.offsetWidth,height:f.style.pixelHeight||f.offsetHeight}:{container:f,width:c,height:d}:{container:1,x:a,y:c,width:d,height:e}:void 0},b.pathToRelative=Ba,b._engine={},b.path2curve=Ia,b.matrix=function(a,b,c,d,e,f){return new n(a,b,c,d,e,f)},function(a){function c(a){return a[0]*a[0]+a[1]*a[1]} +function d(a){var b=M.sqrt(c(a));a[0]&&(a[0]/=b),a[1]&&(a[1]/=b)} +a.add=function(a,b,c,d,e,f){var g,h,i,j,k=[[],[],[]],l=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],m=[[a,c,e],[b,d,f],[0,0,1]];for(a&&a instanceof n&&(m=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1]]),g=0;3>g;g++) +for(h=0;3>h;h++){for(j=0,i=0;3>i;i++) +j+=l[g][i]*m[i][h];k[g][h]=j} +this.a=k[0][0],this.b=k[1][0],this.c=k[0][1],this.d=k[1][1],this.e=k[0][2],this.f=k[1][2]},a.invert=function(){var a=this,b=a.a*a.d-a.b*a.c;return new n(a.d/b,-a.b/b,-a.c/b,a.a/b,(a.c*a.f-a.d*a.e)/b,(a.b*a.e-a.a*a.f)/b)},a.clone=function(){return new n(this.a,this.b,this.c,this.d,this.e,this.f)},a.translate=function(a,b){this.add(1,0,0,1,a,b)},a.scale=function(a,b,c,d){null==b&&(b=a),(c||d)&&this.add(1,0,0,1,c,d),this.add(a,0,0,b,0,0),(c||d)&&this.add(1,0,0,1,-c,-d)},a.rotate=function(a,c,d){a=b.rad(a),c=c||0,d=d||0;var e=+M.cos(a).toFixed(9),f=+M.sin(a).toFixed(9);this.add(e,f,-f,e,c,d),this.add(1,0,0,1,-c,-d)},a.x=function(a,b){return a*this.a+b*this.c+this.e},a.y=function(a,b){return a*this.b+b*this.d+this.f},a.get=function(a){return+this[H.fromCharCode(97+a)].toFixed(4)},a.toString=function(){return b.svg?"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},a.toFilter=function(){return"progid:DXImageTransform.Microsoft.Matrix(M11="+this.get(0)+", M12="+this.get(2)+", M21="+this.get(1)+", M22="+this.get(3)+", Dx="+this.get(4)+", Dy="+this.get(5)+", sizingmethod='auto expand')"},a.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},a.split=function(){var a={};a.dx=this.e,a.dy=this.f;var e=[[this.a,this.c],[this.b,this.d]];a.scalex=M.sqrt(c(e[0])),d(e[0]),a.shear=e[0][0]*e[1][0]+e[0][1]*e[1][1],e[1]=[e[1][0]-e[0][0]*a.shear,e[1][1]-e[0][1]*a.shear],a.scaley=M.sqrt(c(e[1])),d(e[1]),a.shear/=a.scaley;var f=-e[0][1],g=e[1][1];return 0>g?(a.rotate=b.deg(M.acos(g)),0>f&&(a.rotate=360-a.rotate)):a.rotate=b.deg(M.asin(f)),a.isSimple=!(+a.shear.toFixed(9)||a.scalex.toFixed(9)!=a.scaley.toFixed(9)&&a.rotate),a.isSuperSimple=!+a.shear.toFixed(9)&&a.scalex.toFixed(9)==a.scaley.toFixed(9)&&!a.rotate,a.noRotation=!+a.shear.toFixed(9)&&!a.rotate,a},a.toTransformString=function(a){var b=a||this[I]();return b.isSimple?(b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4),(b.dx||b.dy?"t"+[b.dx,b.dy]:F)+(1!=b.scalex||1!=b.scaley?"s"+[b.scalex,b.scaley,0,0]:F)+(b.rotate?"r"+[b.rotate,0,0]:F)):"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}} +(n.prototype);for(var Oa=function(){this.returnValue=!1},Pa=function(){return this.originalEvent.preventDefault()},Qa=function(){this.cancelBubble=!0},Ra=function(){return this.originalEvent.stopPropagation()},Sa=function(a){var b=z.doc.documentElement.scrollTop||z.doc.body.scrollTop,c=z.doc.documentElement.scrollLeft||z.doc.body.scrollLeft;return{x:a.clientX+c,y:a.clientY+b}},Ta=function(){return z.doc.addEventListener?function(a,b,c,d){var e=function(a){var b=Sa(a);return c.call(d,a,b.x,b.y)};if(a.addEventListener(b,e,!1),E&&K[b]){var f=function(b){for(var e=Sa(b),f=b,g=0,h=b.targetTouches&&b.targetTouches.length;h>g;g++) +if(b.targetTouches[g].target==a){b=b.targetTouches[g],b.originalEvent=f,b.preventDefault=Pa,b.stopPropagation=Ra;break} +return c.call(d,b,e.x,e.y)};a.addEventListener(K[b],f,!1)} +return function(){return a.removeEventListener(b,e,!1),E&&K[b]&&a.removeEventListener(K[b],f,!1),!0}}:z.doc.attachEvent?function(a,b,c,d){var e=function(a){a=a||z.win.event;var b=z.doc.documentElement.scrollTop||z.doc.body.scrollTop,e=z.doc.documentElement.scrollLeft||z.doc.body.scrollLeft,f=a.clientX+e,g=a.clientY+b;return a.preventDefault=a.preventDefault||Oa,a.stopPropagation=a.stopPropagation||Qa,c.call(d,a,f,g)};a.attachEvent("on"+b,e);var f=function(){return a.detachEvent("on"+b,e),!0};return f}:void 0} +(),Ua=[],Va=function(b){for(var c,d=b.clientX,e=b.clientY,f=z.doc.documentElement.scrollTop||z.doc.body.scrollTop,g=z.doc.documentElement.scrollLeft||z.doc.body.scrollLeft,h=Ua.length;h--;){if(c=Ua[h],E&&b.touches){for(var i,j=b.touches.length;j--;) +if(i=b.touches[j],i.identifier==c.el._drag.id){d=i.clientX,e=i.clientY,(b.originalEvent?b.originalEvent:b).preventDefault();break}}else +b.preventDefault();var k,l=c.el.node,m=l.nextSibling,n=l.parentNode,o=l.style.display;z.win.opera&&n.removeChild(l),l.style.display="none",k=c.el.paper.getElementByPoint(d,e),l.style.display=o,z.win.opera&&(m?n.insertBefore(l,m):n.appendChild(l)),k&&a("raphael.drag.over."+c.el.id,c.el,k),d+=g,e+=f,a("raphael.drag.move."+c.el.id,c.move_scope||c.el,d-c.el._drag.x,e-c.el._drag.y,d,e,b)}},Wa=function(c){b.unmousemove(Va).unmouseup(Wa);for(var d,e=Ua.length;e--;) +d=Ua[e],d.el._drag={},a("raphael.drag.end."+d.el.id,d.end_scope||d.start_scope||d.move_scope||d.el,c);Ua=[]},Xa=b.el={},Ya=J.length;Ya--;) +!function(a){b[a]=Xa[a]=function(c,d){return b.is(c,"function")&&(this.events=this.events||[],this.events.push({name:a,f:c,unbind:Ta(this.shape||this.node||z.doc,a,c,d||this)})),this},b["un"+a]=Xa["un"+a]=function(c){for(var d=this.events||[],e=d.length;e--;) +d[e].name!=a||!b.is(c,"undefined")&&d[e].f!=c||(d[e].unbind(),d.splice(e,1),!d.length&&delete this.events);return this}} +(J[Ya]);Xa.data=function(c,d){var e=ja[this.id]=ja[this.id]||{};if(0==arguments.length) +return e;if(1==arguments.length){if(b.is(c,"object")){for(var f in c) +c[y](f)&&this.data(f,c[f]);return this} +return a("raphael.data.get."+this.id,this,e[c],c),e[c]} +return e[c]=d,a("raphael.data.set."+this.id,this,d,c),this},Xa.removeData=function(a){return null==a?ja[this.id]={}:ja[this.id]&&delete ja[this.id][a],this},Xa.getData=function(){return c(ja[this.id]||{})},Xa.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)},Xa.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};var Za=[];Xa.drag=function(c,d,e,f,g,h){function i(i){(i.originalEvent||i).preventDefault();var j=i.clientX,k=i.clientY,l=z.doc.documentElement.scrollTop||z.doc.body.scrollTop,m=z.doc.documentElement.scrollLeft||z.doc.body.scrollLeft;if(this._drag.id=i.identifier,E&&i.touches) +for(var n,o=i.touches.length;o--;) +if(n=i.touches[o],this._drag.id=n.identifier,n.identifier==this._drag.id){j=n.clientX,k=n.clientY;break} +this._drag.x=j+m,this._drag.y=k+l,!Ua.length&&b.mousemove(Va).mouseup(Wa),Ua.push({el:this,move_scope:f,start_scope:g,end_scope:h}),d&&a.on("raphael.drag.start."+this.id,d),c&&a.on("raphael.drag.move."+this.id,c),e&&a.on("raphael.drag.end."+this.id,e),a("raphael.drag.start."+this.id,g||f||this,i.clientX+m,i.clientY+l,i)} +return this._drag={},Za.push({el:this,start:i}),this.mousedown(i),this},Xa.onDragOver=function(b){b?a.on("raphael.drag.over."+this.id,b):a.unbind("raphael.drag.over."+this.id)},Xa.undrag=function(){for(var c=Za.length;c--;) +Za[c].el==this&&(this.unmousedown(Za[c].start),Za.splice(c,1),a.unbind("raphael.drag.*."+this.id));!Za.length&&b.unmousemove(Va).unmouseup(Wa),Ua=[]},u.circle=function(a,c,d){var e=b._engine.circle(this,a||0,c||0,d||0);return this.__set__&&this.__set__.push(e),e},u.rect=function(a,c,d,e,f){var g=b._engine.rect(this,a||0,c||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},u.ellipse=function(a,c,d,e){var f=b._engine.ellipse(this,a||0,c||0,d||0,e||0);return this.__set__&&this.__set__.push(f),f},u.path=function(a){a&&!b.is(a,T)&&!b.is(a[0],U)&&(a+=F);var c=b._engine.path(b.format[C](b,arguments),this);return this.__set__&&this.__set__.push(c),c},u.image=function(a,c,d,e,f){var g=b._engine.image(this,a||"about:blank",c||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},u.text=function(a,c,d){var e=b._engine.text(this,a||0,c||0,H(d));return this.__set__&&this.__set__.push(e),e},u.set=function(a){!b.is(a,"array")&&(a=Array.prototype.splice.call(arguments,0,arguments.length));var c=new jb(a);return this.__set__&&this.__set__.push(c),c.paper=this,c.type="set",c},u.setStart=function(a){this.__set__=a||this.set()},u.setFinish=function(a){var b=this.__set__;return delete this.__set__,b},u.getSize=function(){var a=this.canvas.parentNode;return{width:a.offsetWidth,height:a.offsetHeight}},u.setSize=function(a,c){return b._engine.setSize.call(this,a,c)},u.setViewBox=function(a,c,d,e,f){return b._engine.setViewBox.call(this,a,c,d,e,f)},u.top=u.bottom=null,u.raphael=b;var $a=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument,d=c.body,e=c.documentElement,f=e.clientTop||d.clientTop||0,g=e.clientLeft||d.clientLeft||0,h=b.top+(z.win.pageYOffset||e.scrollTop||d.scrollTop)-f,i=b.left+(z.win.pageXOffset||e.scrollLeft||d.scrollLeft)-g;return{y:h,x:i}};u.getElementByPoint=function(a,b){var c=this,d=c.canvas,e=z.doc.elementFromPoint(a,b);if(z.win.opera&&"svg"==e.tagName){var f=$a(d),g=d.createSVGRect();g.x=a-f.x,g.y=b-f.y,g.width=g.height=1;var h=d.getIntersectionList(g,null);h.length&&(e=h[h.length-1])} +if(!e) +return null;for(;e.parentNode&&e!=d.parentNode&&!e.raphael;) +e=e.parentNode;return e==c.canvas.parentNode&&(e=d),e=e&&e.raphael?c.getById(e.raphaelid):null},u.getElementsByBBox=function(a){var c=this.set();return this.forEach(function(d){b.isBBoxIntersect(d.getBBox(),a)&&c.push(d)}),c},u.getById=function(a){for(var b=this.bottom;b;){if(b.id==a) +return b;b=b.next} +return null},u.forEach=function(a,b){for(var c=this.bottom;c;){if(a.call(b,c)===!1) +return this;c=c.next} +return this},u.getElementsByPoint=function(a,b){var c=this.set();return this.forEach(function(d){d.isPointInside(a,b)&&c.push(d)}),c},Xa.isPointInside=function(a,c){var d=this.realPath=oa[this.type](this);return this.attr("transform")&&this.attr("transform").length&&(d=b.transformPath(d,this.attr("transform"))),b.isPointInsidePath(d,a,c)},Xa.getBBox=function(a){if(this.removed) +return{};var b=this._;return a?((b.dirty||!b.bboxwt)&&(this.realPath=oa[this.type](this),b.bboxwt=za(this.realPath),b.bboxwt.toString=o,b.dirty=0),b.bboxwt):((b.dirty||b.dirtyT||!b.bbox)&&((b.dirty||!this.realPath)&&(b.bboxwt=0,this.realPath=oa[this.type](this)),b.bbox=za(pa(this.realPath,this.matrix)),b.bbox.toString=o,b.dirty=b.dirtyT=0),b.bbox)},Xa.clone=function(){if(this.removed) +return null;var a=this.paper[this.type]().attr(this.attr());return this.__set__&&this.__set__.push(a),a},Xa.glow=function(a){if("text"==this.type) +return null;a=a||{};var b={width:(a.width||10)+(+this.attr("stroke-width")||1),fill:a.fill||!1,opacity:null==a.opacity?.5:a.opacity,offsetx:a.offsetx||0,offsety:a.offsety||0,color:a.color||"#000"},c=b.width/2,d=this.paper,e=d.set(),f=this.realPath||oa[this.type](this);f=this.matrix?pa(f,this.matrix):f;for(var g=1;c+1>g;g++) +e.push(d.path(f).attr({stroke:b.color,fill:b.fill?b.color:"none","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":+(b.width/c*g).toFixed(3),opacity:+(b.opacity/c).toFixed(3)}));return e.insertBefore(this).translate(b.offsetx,b.offsety)};var _a=function(a,c,d,e,f,g,h,k,l){return null==l?i(a,c,d,e,f,g,h,k):b.findDotsAtSegment(a,c,d,e,f,g,h,k,j(a,c,d,e,f,g,h,k,l))},ab=function(a,c){return function(d,e,f){d=Ia(d);for(var g,h,i,j,k,l="",m={},n=0,o=0,p=d.length;p>o;o++){if(i=d[o],"M"==i[0]) +g=+i[1],h=+i[2];else{if(j=_a(g,h,i[1],i[2],i[3],i[4],i[5],i[6]),n+j>e){if(c&&!m.start){if(k=_a(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),l+=["C"+k.start.x,k.start.y,k.m.x,k.m.y,k.x,k.y],f) +return l;m.start=l,l=["M"+k.x,k.y+"C"+k.n.x,k.n.y,k.end.x,k.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue} +if(!a&&!c) +return k=_a(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),{x:k.x,y:k.y,alpha:k.alpha}} +n+=j,g=+i[5],h=+i[6]} +l+=i.shift()+i} +return m.end=l,k=a?n:c?m:b.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),k.alpha&&(k={x:k.x,y:k.y,alpha:k.alpha}),k}},bb=ab(1),cb=ab(),db=ab(0,1);b.getTotalLength=bb,b.getPointAtLength=cb,b.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6) +return db(a,b).end;var d=db(a,c,1);return b?db(d,b).end:d},Xa.getTotalLength=function(){var a=this.getPath();if(a) +return this.node.getTotalLength?this.node.getTotalLength():bb(a)},Xa.getPointAtLength=function(a){var b=this.getPath();if(b) +return cb(b,a)},Xa.getPath=function(){var a,c=b._getPath[this.type];if("text"!=this.type&&"set"!=this.type) +return c&&(a=c(this)),a},Xa.getSubpath=function(a,c){var d=this.getPath();if(d) +return b.getSubpath(d,a,c)};var eb=b.easing_formulas={linear:function(a){return a},"<":function(a){return Q(a,1.7)},">":function(a){return Q(a,.48)},"<>":function(a){var b=.48-a/1.04,c=M.sqrt(.1734+b*b),d=c-b,e=Q(P(d),1/3)*(0>d?-1:1),f=-c-b,g=Q(P(f),1/3)*(0>f?-1:1),h=e+g+.5;return 3*(1-h)*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a-=1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){return a==!!a?a:Q(2,-10*a)*M.sin(2*(a-.075)*R/.3)+1},bounce:function(a){var b,c=7.5625,d=2.75;return 1/d>a?b=c*a*a:2/d>a?(a-=1.5/d,b=c*a*a+.75):2.5/d>a?(a-=2.25/d,b=c*a*a+.9375):(a-=2.625/d,b=c*a*a+.984375),b}};eb.easeIn=eb["ease-in"]=eb["<"],eb.easeOut=eb["ease-out"]=eb[">"],eb.easeInOut=eb["ease-in-out"]=eb["<>"],eb["back-in"]=eb.backIn,eb["back-out"]=eb.backOut;var fb=[],gb=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,16)},hb=function(){for(var c=+new Date,d=0;dh)) +if(i>h){var q=j(h/i);for(var s in k) +if(k[y](s)){switch(ca[s]){case S:f=+k[s]+q*i*l[s];break;case"colour":f="rgb("+[ib(Z(k[s].r+q*i*l[s].r)),ib(Z(k[s].g+q*i*l[s].g)),ib(Z(k[s].b+q*i*l[s].b))].join(",")+")";break;case"path":f=[];for(var t=0,u=k[s].length;u>t;t++){f[t]=[k[s][t][0]];for(var v=1,w=k[s][t].length;w>v;v++) +f[t][v]=+k[s][t][v]+q*i*l[s][t][v];f[t]=f[t].join(G)} +f=f.join(G);break;case"transform":if(l[s].real) +for(f=[],t=0,u=k[s].length;u>t;t++) +for(f[t]=[k[s][t][0]],v=1,w=k[s][t].length;w>v;v++) +f[t][v]=k[s][t][v]+q*i*l[s][t][v];else{var x=function(a){return+k[s][a]+q*i*l[s][a]};f=[["m",x(0),x(1),x(2),x(3),x(4),x(5)]]} +break;case"csv":if("clip-rect"==s) +for(f=[],t=4;t--;) +f[t]=+k[s][t]+q*i*l[s][t];break;default:var z=[][D](k[s]);for(f=[],t=n.paper.customAttributes[s].length;t--;) +f[t]=+z[t]+q*i*l[s][t]} +o[s]=f} +n.attr(o),function(b,c,d){setTimeout(function(){a("raphael.anim.frame."+b,c,d)})} +(n.id,n,e.anim)}else{if(function(c,d,e){setTimeout(function(){a("raphael.anim.frame."+d.id,d,e),a("raphael.anim.finish."+d.id,d,e),b.is(c,"function")&&c.call(d)})} +(e.callback,n,e.anim),n.attr(m),fb.splice(d--,1),e.repeat>1&&!e.next){for(g in m) +m[y](g)&&(p[g]=e.totalOrigin[g]);e.el.attr(p),r(e.anim,e.el,e.anim.percents[0],null,e.totalOrigin,e.repeat-1)} +e.next&&!e.stop&&r(e.anim,e.el,e.next,null,e.totalOrigin,e.repeat)}}} +fb.length&&gb(hb)},ib=function(a){return a>255?255:0>a?0:a};Xa.animateWith=function(a,c,d,e,f,g){var h=this;if(h.removed) +return g&&g.call(h),h;var i=d instanceof q?d:b.animation(d,e,f,g);r(i,h,i.percents[0],null,h.attr());for(var j=0,k=fb.length;k>j;j++) +if(fb[j].anim==c&&fb[j].el==a){fb[k-1].start=fb[j].start;break} +return h},Xa.onAnimation=function(b){return b?a.on("raphael.anim.frame."+this.id,b):a.unbind("raphael.anim.frame."+this.id),this},q.prototype.delay=function(a){var b=new q(this.anim,this.ms);return b.times=this.times,b.del=+a||0,b},q.prototype.repeat=function(a){var b=new q(this.anim,this.ms);return b.del=this.del,b.times=M.floor(N(a,0))||1,b},b.animation=function(a,c,d,e){if(a instanceof q) +return a;(b.is(d,"function")||!d)&&(e=e||d||null,d=null),a=Object(a),c=+c||0;var f,g,h={};for(g in a) +a[y](g)&&$(g)!=g&&$(g)+"%"!=g&&(f=!0,h[g]=a[g]);if(f) +return d&&(h.easing=d),e&&(h.callback=e),new q({100:h},c);if(e){var i=0;for(var j in a){var k=_(j);a[y](j)&&k>i&&(i=k)} +i+="%",!a[i].callback&&(a[i].callback=e)} +return new q(a,c)},Xa.animate=function(a,c,d,e){var f=this;if(f.removed) +return e&&e.call(f),f;var g=a instanceof q?a:b.animation(a,c,d,e);return r(g,f,g.percents[0],null,f.attr()),f},Xa.setTime=function(a,b){return a&&null!=b&&this.status(a,O(b,a.ms)/a.ms),this},Xa.status=function(a,b){var c,d,e=[],f=0;if(null!=b) +return r(a,this,-1,O(b,1)),this;for(c=fb.length;c>f;f++) +if(d=fb[f],d.el.id==this.id&&(!a||d.anim==a)){if(a) +return d.status;e.push({anim:d.anim,status:d.status})} +return a?0:e},Xa.pause=function(b){for(var c=0;cb;b++) +!a[b]||a[b].constructor!=Xa.constructor&&a[b].constructor!=jb||(this[this.items.length]=this.items[this.items.length]=a[b],this.length++)},kb=jb.prototype;kb.push=function(){for(var a,b,c=0,d=arguments.length;d>c;c++) +a=arguments[c],!a||a.constructor!=Xa.constructor&&a.constructor!=jb||(b=this.items.length,this[b]=this.items[b]=a,this.length++);return this},kb.pop=function(){return this.length&&delete this[this.length--],this.items.pop()},kb.forEach=function(a,b){for(var c=0,d=this.items.length;d>c;c++) +if(a.call(b,this.items[c],c)===!1) +return this;return this};for(var lb in Xa) +Xa[y](lb)&&(kb[lb]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a][C](c,b)})}} +(lb));return kb.attr=function(a,c){if(a&&b.is(a,U)&&b.is(a[0],"object")) +for(var d=0,e=a.length;e>d;d++) +this.items[d].attr(a[d]);else +for(var f=0,g=this.items.length;g>f;f++) +this.items[f].attr(a,c);return this},kb.clear=function(){for(;this.length;) +this.pop()},kb.splice=function(a,b,c){a=0>a?N(this.length+a,0):a,b=N(0,O(this.length-a,b));var d,e=[],f=[],g=[];for(d=2;dd;d++) +f.push(this[a+d]);for(;dd?g[d]:e[d-h];for(d=this.items.length=this.length-=b-h;this[d];) +delete this[d++];return new jb(f)},kb.exclude=function(a){for(var b=0,c=this.length;c>b;b++) +if(this[b]==a) +return this.splice(b,1),!0},kb.animate=function(a,c,d,e){(b.is(d,"function")||!d)&&(e=d||null);var f,g,h=this.items.length,i=h,j=this;if(!h) +return this;e&&(g=function(){!--h&&e.call(j)}),d=b.is(d,T)?d:g;var k=b.animation(a,c,d,g);for(f=this.items[--i].animate(k);i--;) +this.items[i]&&!this.items[i].removed&&this.items[i].animateWith(f,k,k),this.items[i]&&!this.items[i].removed||h--;return this},kb.insertAfter=function(a){for(var b=this.items.length;b--;) +this.items[b].insertAfter(a);return this},kb.getBBox=function(){for(var a=[],b=[],c=[],d=[],e=this.items.length;e--;) +if(!this.items[e].removed){var f=this.items[e].getBBox();a.push(f.x),b.push(f.y),c.push(f.x+f.width),d.push(f.y+f.height)} +return a=O[C](0,a),b=O[C](0,b),c=N[C](0,c),d=N[C](0,d),{x:a,y:b,x2:c,y2:d,width:c-a,height:d-b}},kb.clone=function(a){a=this.paper.set();for(var b=0,c=this.items.length;c>b;b++) +a.push(this.items[b].clone());return a},kb.toString=function(){return"Raphaël‘s set"},kb.glow=function(a){var b=this.paper.set();return this.forEach(function(c,d){var e=c.glow(a);null!=e&&e.forEach(function(a,c){b.push(a)})}),b},kb.isPointInside=function(a,b){var c=!1;return this.forEach(function(d){return d.isPointInside(a,b)?(c=!0,!1):void 0}),c},b.registerFont=function(a){if(!a.face) +return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face) +a.face[y](d)&&(b.face[d]=a.face[d]);if(this.fonts[c]?this.fonts[c].push(b):this.fonts[c]=[b],!a.svg){b.face["units-per-em"]=_(a.face["units-per-em"],10);for(var e in a.glyphs) +if(a.glyphs[y](e)){var f=a.glyphs[e];if(b.glyphs[e]={w:f.w,k:{},d:f.d&&"M"+f.d.replace(/[mlcxtrv]/g,function(a){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"} +[a]||"M"})+"z"},f.k) +for(var g in f.k) +f[y](g)&&(b.glyphs[e].k[g]=f.k[g])}} +return a},u.getFont=function(a,c,d,e){if(e=e||"normal",d=d||"normal",c=+c||{normal:400,bold:700,lighter:300,bolder:800} +[c]||400,b.fonts){var f=b.fonts[a];if(!f){var g=new RegExp("(^|\\s)"+a.replace(/[^\w\d\s+!~.:_-]/g,F)+"(\\s|$)","i");for(var h in b.fonts) +if(b.fonts[y](h)&&g.test(h)){f=b.fonts[h];break}} +var i;if(f) +for(var j=0,k=f.length;k>j&&(i=f[j],i.face["font-weight"]!=c||i.face["font-style"]!=d&&i.face["font-style"]||i.face["font-stretch"]!=e);j++);return i}},u.print=function(a,c,d,e,f,g,h,i){g=g||"middle",h=N(O(h||0,1),-1),i=N(O(i||1,3),1);var j,k=H(d)[I](F),l=0,m=0,n=F;if(b.is(e,"string")&&(e=this.getFont(e)),e){j=(f||16)/e.face["units-per-em"];for(var o=e.face.bbox[I](v),p=+o[0],q=o[3]-o[1],r=0,s=+o[1]+("baseline"==g?q+ +e.face.descent:q/2),t=0,u=k.length;u>t;t++){if("\n"==k[t]) +l=0,x=0,m=0,r+=q*i;else{var w=m&&e.glyphs[k[t-1]]||{},x=e.glyphs[k[t]];l+=m?(w.w||e.w)+(w.k&&w.k[k[t]]||0)+e.w*h:0,m=1} +x&&x.d&&(n+=b.transformPath(x.d,["t",l*j,r*j,"s",j,j,p,s,"t",(a-p)/j,(c-s)/j]))}} +return this.path(n).attr({fill:"#000",stroke:"none"})},u.add=function(a){if(b.is(a,"array")) +for(var c,d=this.set(),e=0,f=a.length;f>e;e++) +c=a[e]||{},w[y](c.type)&&d.push(this[c.type]().attr(c));return d},b.format=function(a,c){var d=b.is(c,U)?[0][D](c):arguments;return a&&b.is(a,T)&&d.length-1&&(a=a.replace(x,function(a,b){return null==d[++b]?F:d[b]})),a||F},b.fullfill=function(){var a=/\{([^\}]+)\}/g,b=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,c=function(a,c,d){var e=d;return c.replace(b,function(a,b,c,d,f){b=b||d,e&&(b in e&&(e=e[b]),"function"==typeof e&&f&&(e=e()))}),e=(null==e||e==d?a:e)+""};return function(b,d){return String(b).replace(a,function(a,b){return c(a,b,d)})}} +(),b.ninja=function(){return A.was?z.win.Raphael=A.is:delete Raphael,b},b.st=kb,a.on("raphael.DOMload",function(){t=!0}),function(a,c,d){function e(){/in/.test(a.readyState)?setTimeout(e,9):b.eve("raphael.DOMload")} +null==a.readyState&&a.addEventListener&&(a.addEventListener(c,d=function(){a.removeEventListener(c,d,!1),a.readyState="complete"},!1),a.readyState="loading"),e()} +(document,"DOMContentLoaded"),b}),function(a,b){"function"==typeof define&&define.amd?define("raphael.svg",["raphael.core"],function(a){return b(a)}):b("object"==typeof exports?require("./raphael.core"):a.Raphael)} +(this,function(a){if(!a||a.svg){var b="hasOwnProperty",c=String,d=parseFloat,e=parseInt,f=Math,g=f.max,h=f.abs,i=f.pow,j=/[, ]+/,k=a.eve,l="",m=" ",n="http://www.w3.org/1999/xlink",o={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},p={};a.toString=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};var q=function(d,e){if(e){"string"==typeof d&&(d=q(d));for(var f in e) +e[b](f)&&("xlink:"==f.substring(0,6)?d.setAttributeNS(n,f.substring(6),c(e[f])):d.setAttribute(f,c(e[f])))}else +d=a._g.doc.createElementNS("http://www.w3.org/2000/svg",d),d.style&&(d.style.webkitTapHighlightColor="rgba(0,0,0,0)");return d},r=function(b,e){var j="linear",k=b.id+e,m=.5,n=.5,o=b.node,p=b.paper,r=o.style,s=a._g.doc.getElementById(k);if(!s){if(e=c(e).replace(a._radial_gradient,function(a,b,c){if(j="radial",b&&c){m=d(b),n=d(c);var e=2*(n>.5)-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&.5!=n&&(n=n.toFixed(5)-1e-5*e)} +return l}),e=e.split(/\s*\-\s*/),"linear"==j){var t=e.shift();if(t=-d(t),isNaN(t)) +return null;var u=[0,0,f.cos(a.rad(t)),f.sin(a.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)} +var w=a._parseDots(e);if(!w) +return null;if(k=k.replace(/[\(\)\s,\xb0#]/g,"_"),b.gradient&&k!=b.gradient.id&&(p.defs.removeChild(b.gradient),delete b.gradient),!b.gradient){s=q(j+"Gradient",{id:k}),b.gradient=s,q(s,"radial"==j?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:b.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;y>x;x++) +s.appendChild(q("stop",{offset:w[x].offset?w[x].offset:x?"100%":"0%","stop-color":w[x].color||"#fff","stop-opacity":isFinite(w[x].opacity)?w[x].opacity:1}))}} +return q(o,{fill:"url('"+document.location.origin+document.location.pathname+"#"+k+"')",opacity:1,"fill-opacity":1}),r.fill=l,r.opacity=1,r.fillOpacity=1,1},s=function(a){var b=a.getBBox(1);q(a.pattern,{patternTransform:a.matrix.invert()+" translate("+b.x+","+b.y+")"})},t=function(d,e,f){if("path"==d.type){for(var g,h,i,j,k,m=c(e).toLowerCase().split("-"),n=d.paper,r=f?"end":"start",s=d.node,t=d.attrs,u=t["stroke-width"],v=m.length,w="classic",x=3,y=3,z=5;v--;) +switch(m[v]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":w=m[v];break;case"wide":y=5;break;case"narrow":y=2;break;case"long":x=5;break;case"short":x=2} +if("open"==w?(x+=2,y+=2,z+=2,i=1,j=f?4:1,k={fill:"none",stroke:t.stroke}):(j=i=x/2,k={fill:t.stroke,stroke:"none"}),d._.arrows?f?(d._.arrows.endPath&&p[d._.arrows.endPath]--,d._.arrows.endMarker&&p[d._.arrows.endMarker]--):(d._.arrows.startPath&&p[d._.arrows.startPath]--,d._.arrows.startMarker&&p[d._.arrows.startMarker]--):d._.arrows={},"none"!=w){var A="raphael-marker-"+w,B="raphael-marker-"+r+w+x+y+"-obj"+d.id;a._g.doc.getElementById(A)?p[A]++:(n.defs.appendChild(q(q("path"),{"stroke-linecap":"round",d:o[w],id:A})),p[A]=1);var C,D=a._g.doc.getElementById(B);D?(p[B]++,C=D.getElementsByTagName("use")[0]):(D=q(q("marker"),{id:B,markerHeight:y,markerWidth:x,orient:"auto",refX:j,refY:y/2}),C=q(q("use"),{"xlink:href":"#"+A,transform:(f?"rotate(180 "+x/2+" "+y/2+") ":l)+"scale("+x/z+","+y/z+")","stroke-width":(1/((x/z+y/z)/2)).toFixed(4)}),D.appendChild(C),n.defs.appendChild(D),p[B]=1),q(C,k);var E=i*("diamond"!=w&&"oval"!=w);f?(g=d._.arrows.startdx*u||0,h=a.getTotalLength(t.path)-E*u):(g=E*u,h=a.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),k={},k["marker-"+r]="url(#"+B+")",(h||g)&&(k.d=a.getSubpath(t.path,g,h)),q(s,k),d._.arrows[r+"Path"]=A,d._.arrows[r+"Marker"]=B,d._.arrows[r+"dx"]=E,d._.arrows[r+"Type"]=w,d._.arrows[r+"String"]=e}else +f?(g=d._.arrows.startdx*u||0,h=a.getTotalLength(t.path)-g):(g=0,h=a.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),d._.arrows[r+"Path"]&&q(s,{d:a.getSubpath(t.path,g,h)}),delete d._.arrows[r+"Path"],delete d._.arrows[r+"Marker"],delete d._.arrows[r+"dx"],delete d._.arrows[r+"Type"],delete d._.arrows[r+"String"];for(k in p) +if(p[b](k)&&!p[k]){var F=a._g.doc.getElementById(k);F&&F.parentNode.removeChild(F)}}},u={"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},v=function(a,b,d){if(b=u[c(b).toLowerCase()]){for(var e=a.attrs["stroke-width"]||"1",f={round:e,square:e,butt:0} +[a.attrs["stroke-linecap"]||d["stroke-linecap"]]||0,g=[],h=b.length;h--;) +g[h]=b[h]*e+(h%2?1:-1)*f;q(a.node,{"stroke-dasharray":g.join(",")})}else +q(a.node,{"stroke-dasharray":"none"})},w=function(d,f){var i=d.node,k=d.attrs,m=i.style.visibility;i.style.visibility="hidden";for(var o in f) +if(f[b](o)){if(!a._availableAttrs[b](o)) +continue;var p=f[o];switch(k[o]=p,o){case"blur":d.blur(p);break;case"title":var u=i.getElementsByTagName("title");if(u.length&&(u=u[0])) +u.firstChild.nodeValue=p;else{u=q("title");var w=a._g.doc.createTextNode(p);u.appendChild(w),i.appendChild(u)} +break;case"href":case"target":var x=i.parentNode;if("a"!=x.tagName.toLowerCase()){var z=q("a");x.insertBefore(z,i),z.appendChild(i),x=z}"target"==o?x.setAttributeNS(n,"show","blank"==p?"new":p):x.setAttributeNS(n,o,p);break;case"cursor":i.style.cursor=p;break;case"transform":d.transform(p);break;case"arrow-start":t(d,p);break;case"arrow-end":t(d,p,1);break;case"clip-rect":var A=c(p).split(j);if(4==A.length){d.clip&&d.clip.parentNode.parentNode.removeChild(d.clip.parentNode);var B=q("clipPath"),C=q("rect");B.id=a.createUUID(),q(C,{x:A[0],y:A[1],width:A[2],height:A[3]}),B.appendChild(C),d.paper.defs.appendChild(B),q(i,{"clip-path":"url(#"+B.id+")"}),d.clip=C} +if(!p){var D=i.getAttribute("clip-path");if(D){var E=a._g.doc.getElementById(D.replace(/(^url\(#|\)$)/g,l));E&&E.parentNode.removeChild(E),q(i,{"clip-path":l}),delete d.clip}} +break;case"path":"path"==d.type&&(q(i,{d:p?k.path=a._pathToAbsolute(p):"M0,0"}),d._.dirty=1,d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1)));break;case"width":if(i.setAttribute(o,p),d._.dirty=1,!k.fx) +break;o="x",p=k.x;case"x":k.fx&&(p=-k.x-(k.width||0));case"rx":if("rx"==o&&"rect"==d.type) +break;case"cx":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"height":if(i.setAttribute(o,p),d._.dirty=1,!k.fy) +break;o="y",p=k.y;case"y":k.fy&&(p=-k.y-(k.height||0));case"ry":if("ry"==o&&"rect"==d.type) +break;case"cy":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"r":"rect"==d.type?q(i,{rx:p,ry:p}):i.setAttribute(o,p),d._.dirty=1;break;case"src":"image"==d.type&&i.setAttributeNS(n,"href",p);break;case"stroke-width":(1!=d._.sx||1!=d._.sy)&&(p/=g(h(d._.sx),h(d._.sy))||1),i.setAttribute(o,p),k["stroke-dasharray"]&&v(d,k["stroke-dasharray"],f),d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"stroke-dasharray":v(d,p,f);break;case"fill":var F=c(p).match(a._ISURL);if(F){B=q("pattern");var G=q("image");B.id=a.createUUID(),q(B,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1}),q(G,{x:0,y:0,"xlink:href":F[1]}),B.appendChild(G),function(b){a._preload(F[1],function(){var a=this.offsetWidth,c=this.offsetHeight;q(b,{width:a,height:c}),q(G,{width:a,height:c})})} +(B),d.paper.defs.appendChild(B),q(i,{fill:"url(#"+B.id+")"}),d.pattern=B,d.pattern&&s(d);break} +var H=a.getRGB(p);if(H.error){if(("circle"==d.type||"ellipse"==d.type||"r"!=c(p).charAt())&&r(d,p)){if("opacity"in k||"fill-opacity"in k){var I=a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l));if(I){var J=I.getElementsByTagName("stop");q(J[J.length-1],{"stop-opacity":("opacity"in k?k.opacity:1)*("fill-opacity"in k?k["fill-opacity"]:1)})}} +k.gradient=p,k.fill="none";break}}else +delete f.gradient,delete k.gradient,!a.is(k.opacity,"undefined")&&a.is(f.opacity,"undefined")&&q(i,{opacity:k.opacity}),!a.is(k["fill-opacity"],"undefined")&&a.is(f["fill-opacity"],"undefined")&&q(i,{"fill-opacity":k["fill-opacity"]});H[b]("opacity")&&q(i,{"fill-opacity":H.opacity>1?H.opacity/100:H.opacity});case"stroke":H=a.getRGB(p),i.setAttribute(o,H.hex),"stroke"==o&&H[b]("opacity")&&q(i,{"stroke-opacity":H.opacity>1?H.opacity/100:H.opacity}),"stroke"==o&&d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"gradient":("circle"==d.type||"ellipse"==d.type||"r"!=c(p).charAt())&&r(d,p);break;case"opacity":k.gradient&&!k[b]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){I=a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),I&&(J=I.getElementsByTagName("stop"),q(J[J.length-1],{"stop-opacity":p}));break} +default:"font-size"==o&&(p=e(p,10)+"px");var K=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[K]=p,d._.dirty=1,i.setAttribute(o,p)}} +y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if("text"==d.type&&(f[b]("text")||f[b]("font")||f[b]("font-size")||f[b]("x")||f[b]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(a._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10;if(f[b]("text")){for(g.text=f.text;h.firstChild;) +h.removeChild(h.firstChild);for(var j,k=c(f.text).split("\n"),m=[],n=0,o=k.length;o>n;n++) +j=q("tspan"),n&&q(j,{dy:i*x,x:g.x}),j.appendChild(a._g.doc.createTextNode(k[n])),h.appendChild(j),m[n]=j}else +for(m=h.getElementsByTagName("tspan"),n=0,o=m.length;o>n;n++) +n?q(m[n],{dy:i*x,x:g.x}):q(m[0],{dy:0});q(h,{x:g.x,y:g.y}),d._.dirty=1;var p=d._getBBox(),r=g.y-(p.y+p.height/2);r&&a.is(r,"finite")&&q(m[0],{dy:r})}},z=function(a){return a.parentNode&&"a"===a.parentNode.tagName.toLowerCase()?a.parentNode:a},A=function(b,c){this[0]=this.node=b,b.raphael=!0,this.id=a._oid++,b.raphaelid=this.id,this.matrix=a.matrix(),this.realPath=null,this.paper=c,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!c.bottom&&(c.bottom=this),this.prev=c.top,c.top&&(c.top.next=this),c.top=this,this.next=null},B=a.el;A.prototype=B,B.constructor=A,a._engine.path=function(a,b){var c=q("path");b.canvas&&b.canvas.appendChild(c);var d=new A(c,b);return d.type="path",w(d,{fill:"none",stroke:"#000",path:a}),d},B.rotate=function(a,b,e){if(this.removed) +return this;if(a=c(a).split(j),a.length-1&&(b=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(b=e),null==b||null==e){var f=this.getBBox(1);b=f.x+f.width/2,e=f.y+f.height/2} +return this.transform(this._.transform.concat([["r",a,b,e]])),this},B.scale=function(a,b,e,f){if(this.removed) +return this;if(a=c(a).split(j),a.length-1&&(b=d(a[1]),e=d(a[2]),f=d(a[3])),a=d(a[0]),null==b&&(b=a),null==f&&(e=f),null==e||null==f) +var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,b,e,f]])),this},B.translate=function(a,b){return this.removed?this:(a=c(a).split(j),a.length-1&&(b=d(a[1])),a=d(a[0])||0,b=+b||0,this.transform(this._.transform.concat([["t",a,b]])),this)},B.transform=function(c){var d=this._;if(null==c) +return d.transform;if(a._extractTransform(this,c),this.clip&&q(this.clip,{transform:this.matrix.invert()}),this.pattern&&s(this),this.node&&q(this.node,{transform:this.matrix}),1!=d.sx||1!=d.sy){var e=this.attrs[b]("stroke-width")?this.attrs["stroke-width"]:1;this.attr({"stroke-width":e})} +return this},B.hide=function(){return this.removed||(this.node.style.display="none"),this},B.show=function(){return this.removed||(this.node.style.display=""),this},B.remove=function(){var b=z(this.node);if(!this.removed&&b.parentNode){var c=this.paper;c.__set__&&c.__set__.exclude(this),k.unbind("raphael.*.*."+this.id),this.gradient&&c.defs.removeChild(this.gradient),a._tear(this,c),b.parentNode.removeChild(b),this.removeData();for(var d in this) +this[d]="function"==typeof this[d]?a._removedFactory(d):null;this.removed=!0}},B._getBBox=function(){if("none"==this.node.style.display){this.show();var a=!0} +var b,c=!1;this.paper.canvas.parentElement?b=this.paper.canvas.parentElement.style:this.paper.canvas.parentNode&&(b=this.paper.canvas.parentNode.style),b&&"none"==b.display&&(c=!0,b.display="");var d={};try{d=this.node.getBBox()}catch(e){d={x:this.node.clientLeft,y:this.node.clientTop,width:this.node.clientWidth,height:this.node.clientHeight}} +finally{d=d||{},c&&(b.display="none")} +return a&&this.hide(),d},B.attr=function(c,d){if(this.removed) +return this;if(null==c){var e={};for(var f in this.attrs) +this.attrs[b](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e} +if(null==d&&a.is(c,"string")){if("fill"==c&&"none"==this.attrs.fill&&this.attrs.gradient) +return this.attrs.gradient;if("transform"==c) +return this._.transform;for(var g=c.split(j),h={},i=0,l=g.length;l>i;i++) +c=g[i],c in this.attrs?h[c]=this.attrs[c]:a.is(this.paper.customAttributes[c],"function")?h[c]=this.paper.customAttributes[c].def:h[c]=a._availableAttrs[c];return l-1?h:h[g[0]]} +if(null==d&&a.is(c,"array")){for(h={},i=0,l=c.length;l>i;i++) +h[c[i]]=this.attr(c[i]);return h} +if(null!=d){var m={};m[c]=d}else +null!=c&&a.is(c,"object")&&(m=c);for(var n in m) +k("raphael.attr."+n+"."+this.id,this,m[n]);for(n in this.paper.customAttributes) +if(this.paper.customAttributes[b](n)&&m[b](n)&&a.is(this.paper.customAttributes[n],"function")){var o=this.paper.customAttributes[n].apply(this,[].concat(m[n]));this.attrs[n]=m[n];for(var p in o) +o[b](p)&&(m[p]=o[p])} +return w(this,m),this},B.toFront=function(){if(this.removed) +return this;var b=z(this.node);b.parentNode.appendChild(b);var c=this.paper;return c.top!=this&&a._tofront(this,c),this},B.toBack=function(){if(this.removed) +return this;var b=z(this.node),c=b.parentNode;c.insertBefore(b,c.firstChild),a._toback(this,this.paper);this.paper;return this},B.insertAfter=function(b){if(this.removed||!b) +return this;var c=z(this.node),d=z(b.node||b[b.length-1].node);return d.nextSibling?d.parentNode.insertBefore(c,d.nextSibling):d.parentNode.appendChild(c),a._insertafter(this,b,this.paper),this},B.insertBefore=function(b){if(this.removed||!b) +return this;var c=z(this.node),d=z(b.node||b[0].node);return d.parentNode.insertBefore(c,d),a._insertbefore(this,b,this.paper),this},B.blur=function(b){var c=this;if(0!==+b){var d=q("filter"),e=q("feGaussianBlur");c.attrs.blur=b,d.id=a.createUUID(),q(e,{stdDeviation:+b||1.5}),d.appendChild(e),c.paper.defs.appendChild(d),c._blur=d,q(c.node,{filter:"url(#"+d.id+")"})}else +c._blur&&(c._blur.parentNode.removeChild(c._blur),delete c._blur,delete c.attrs.blur),c.node.removeAttribute("filter");return c},a._engine.circle=function(a,b,c,d){var e=q("circle");a.canvas&&a.canvas.appendChild(e);var f=new A(e,a);return f.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"},f.type="circle",q(e,f.attrs),f},a._engine.rect=function(a,b,c,d,e,f){var g=q("rect");a.canvas&&a.canvas.appendChild(g);var h=new A(g,a);return h.attrs={x:b,y:c,width:d,height:e,rx:f||0,ry:f||0,fill:"none",stroke:"#000"},h.type="rect",q(g,h.attrs),h},a._engine.ellipse=function(a,b,c,d,e){var f=q("ellipse");a.canvas&&a.canvas.appendChild(f);var g=new A(f,a);return g.attrs={cx:b,cy:c,rx:d,ry:e,fill:"none",stroke:"#000"},g.type="ellipse",q(f,g.attrs),g},a._engine.image=function(a,b,c,d,e,f){var g=q("image");q(g,{x:c,y:d,width:e,height:f,preserveAspectRatio:"none"}),g.setAttributeNS(n,"href",b),a.canvas&&a.canvas.appendChild(g);var h=new A(g,a);return h.attrs={x:c,y:d,width:e,height:f,src:b},h.type="image",h},a._engine.text=function(b,c,d,e){var f=q("text");b.canvas&&b.canvas.appendChild(f);var g=new A(f,b);return g.attrs={x:c,y:d,"text-anchor":"middle",text:e,"font-family":a._availableAttrs["font-family"],"font-size":a._availableAttrs["font-size"],stroke:"none",fill:"#000"},g.type="text",w(g,g.attrs),g},a._engine.setSize=function(a,b){return this.width=a||this.width,this.height=b||this.height,this.canvas.setAttribute("width",this.width),this.canvas.setAttribute("height",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox),this},a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b&&b.container,d=b.x,e=b.y,f=b.width,g=b.height;if(!c) +throw new Error("SVG container not found.");var h,i=q("svg"),j="overflow:hidden;";return d=d||0,e=e||0,f=f||512,g=g||342,q(i,{height:g,version:1.1,width:f,xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}),1==c?(i.style.cssText=j+"position:absolute;left:"+d+"px;top:"+e+"px",a._g.doc.body.appendChild(i),h=1):(i.style.cssText=j+"position:relative",c.firstChild?c.insertBefore(i,c.firstChild):c.appendChild(i)),c=new a._Paper,c.width=f,c.height=g,c.canvas=i,c.clear(),c._left=c._top=0,h&&(c.renderfix=function(){}),c.renderfix(),c},a._engine.setViewBox=function(a,b,c,d,e){k("raphael.setViewBox",this,this._viewBox,[a,b,c,d,e]);var f,h,i=this.getSize(),j=g(c/i.width,d/i.height),l=this.top,n=e?"xMidYMid meet":"xMinYMin";for(null==a?(this._vbSize&&(j=1),delete this._vbSize,f="0 0 "+this.width+m+this.height):(this._vbSize=j,f=a+m+b+m+c+m+d),q(this.canvas,{viewBox:f,preserveAspectRatio:n});j&&l;) +h="stroke-width"in l.attrs?l.attrs["stroke-width"]:1,l.attr({"stroke-width":h}),l._.dirty=1,l._.dirtyT=1,l=l.prev;return this._viewBox=[a,b,c,d,!!e],this},a.prototype.renderfix=function(){var a,b=this.canvas,c=b.style;try{a=b.getScreenCTM()||b.createSVGMatrix()}catch(d){a=b.createSVGMatrix()} +var e=-a.e%1,f=-a.f%1;(e||f)&&(e&&(this._left=(this._left+e)%1,c.left=this._left+"px"),f&&(this._top=(this._top+f)%1,c.top=this._top+"px"))},a.prototype.clear=function(){a.eve("raphael.clear",this);for(var b=this.canvas;b.firstChild;) +b.removeChild(b.firstChild);this.bottom=this.top=null,(this.desc=q("desc")).appendChild(a._g.doc.createTextNode("Created with Raphaël "+a.version)),b.appendChild(this.desc),b.appendChild(this.defs=q("defs"))},a.prototype.remove=function(){k("raphael.remove",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var b in this) +this[b]="function"==typeof this[b]?a._removedFactory(b):null};var C=a.st;for(var D in B) +B[b](D)&&!C[b](D)&&(C[D]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}} +(D))}}),function(a,b){"function"==typeof define&&define.amd?define("raphael.vml",["raphael.core"],function(a){return b(a)}):b("object"==typeof exports?require("./raphael.core"):a.Raphael)} +(this,function(a){if(!a||a.vml){var b="hasOwnProperty",c=String,d=parseFloat,e=Math,f=e.round,g=e.max,h=e.min,i=e.abs,j="fill",k=/[, ]+/,l=a.eve,m=" progid:DXImageTransform.Microsoft",n=" ",o="",p={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},q=/([clmz]),?([^clmz]*)/gi,r=/ progid:\S+Blur\([^\)]+\)/g,s=/-?[^,\s-]+/g,t="position:absolute;left:0;top:0;width:1px;height:1px;behavior:url(#default#VML)",u=21600,v={path:1,rect:1,image:1},w={circle:1,ellipse:1},x=function(b){var d=/[ahqstv]/gi,e=a._pathToAbsolute;if(c(b).match(d)&&(e=a._path2curve),d=/[clmz]/g,e==a._pathToAbsolute&&!c(b).match(d)){var g=c(b).replace(q,function(a,b,c){var d=[],e="m"==b.toLowerCase(),g=p[b];return c.replace(s,function(a){e&&2==d.length&&(g+=d+p["m"==b?"l":"L"],d=[]),d.push(f(a*u))}),g+d});return g} +var h,i,j=e(b);g=[];for(var k=0,l=j.length;l>k;k++){h=j[k],i=j[k][0].toLowerCase(),"z"==i&&(i="x");for(var m=1,r=h.length;r>m;m++) +i+=f(h[m]*u)+(m!=r-1?",":o);g.push(i)} +return g.join(n)},y=function(b,c,d){var e=a.matrix();return e.rotate(-b,.5,.5),{dx:e.x(c,d),dy:e.y(c,d)}},z=function(a,b,c,d,e,f){var g=a._,h=a.matrix,k=g.fillpos,l=a.node,m=l.style,o=1,p="",q=u/b,r=u/c;if(m.visibility="hidden",b&&c){if(l.coordsize=i(q)+n+i(r),m.rotation=f*(0>b*c?-1:1),f){var s=y(f,d,e);d=s.dx,e=s.dy} +if(0>b&&(p+="x"),0>c&&(p+=" y")&&(o=-1),m.flip=p,l.coordorigin=d* -q+n+e* -r,k||g.fillsize){var t=l.getElementsByTagName(j);t=t&&t[0],l.removeChild(t),k&&(s=y(f,h.x(k[0],k[1]),h.y(k[0],k[1])),t.position=s.dx*o+n+s.dy*o),g.fillsize&&(t.size=g.fillsize[0]*i(b)+n+g.fillsize[1]*i(c)),l.appendChild(t)} +m.visibility="visible"}};a.toString=function(){return"Your browser doesn’t support SVG. Falling down to VML.\nYou are running Raphaël "+this.version};var A=function(a,b,d){for(var e=c(b).toLowerCase().split("-"),f=d?"end":"start",g=e.length,h="classic",i="medium",j="medium";g--;) +switch(e[g]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":h=e[g];break;case"wide":case"narrow":j=e[g];break;case"long":case"short":i=e[g]} +var k=a.node.getElementsByTagName("stroke")[0];k[f+"arrow"]=h,k[f+"arrowlength"]=i,k[f+"arrowwidth"]=j},B=function(e,i){e.attrs=e.attrs||{};var l=e.node,m=e.attrs,p=l.style,q=v[e.type]&&(i.x!=m.x||i.y!=m.y||i.width!=m.width||i.height!=m.height||i.cx!=m.cx||i.cy!=m.cy||i.rx!=m.rx||i.ry!=m.ry||i.r!=m.r),r=w[e.type]&&(m.cx!=i.cx||m.cy!=i.cy||m.r!=i.r||m.rx!=i.rx||m.ry!=i.ry),s=e;for(var t in i) +i[b](t)&&(m[t]=i[t]);if(q&&(m.path=a._getPath[e.type](e),e._.dirty=1),i.href&&(l.href=i.href),i.title&&(l.title=i.title),i.target&&(l.target=i.target),i.cursor&&(p.cursor=i.cursor),"blur"in i&&e.blur(i.blur),(i.path&&"path"==e.type||q)&&(l.path=x(~c(m.path).toLowerCase().indexOf("r")?a._pathToAbsolute(m.path):m.path),e._.dirty=1,"image"==e.type&&(e._.fillpos=[m.x,m.y],e._.fillsize=[m.width,m.height],z(e,1,1,0,0,0))),"transform"in i&&e.transform(i.transform),r){var y=+m.cx,B=+m.cy,D=+m.rx||+m.r||0,E=+m.ry||+m.r||0;l.path=a.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x",f((y-D)*u),f((B-E)*u),f((y+D)*u),f((B+E)*u),f(y*u)),e._.dirty=1} +if("clip-rect"in i){var G=c(i["clip-rect"]).split(k);if(4==G.length){G[2]=+G[2]+ +G[0],G[3]=+G[3]+ +G[1];var H=l.clipRect||a._g.doc.createElement("div"),I=H.style;I.clip=a.format("rect({1}px {2}px {3}px {0}px)",G),l.clipRect||(I.position="absolute",I.top=0,I.left=0,I.width=e.paper.width+"px",I.height=e.paper.height+"px",l.parentNode.insertBefore(H,l),H.appendChild(l),l.clipRect=H)} +i["clip-rect"]||l.clipRect&&(l.clipRect.style.clip="auto")} +if(e.textpath){var J=e.textpath.style;i.font&&(J.font=i.font),i["font-family"]&&(J.fontFamily='"'+i["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,o)+'"'),i["font-size"]&&(J.fontSize=i["font-size"]),i["font-weight"]&&(J.fontWeight=i["font-weight"]),i["font-style"]&&(J.fontStyle=i["font-style"])} +if("arrow-start"in i&&A(s,i["arrow-start"]),"arrow-end"in i&&A(s,i["arrow-end"],1),null!=i.opacity||null!=i["stroke-width"]||null!=i.fill||null!=i.src||null!=i.stroke||null!=i["stroke-width"]||null!=i["stroke-opacity"]||null!=i["fill-opacity"]||null!=i["stroke-dasharray"]||null!=i["stroke-miterlimit"]||null!=i["stroke-linejoin"]||null!=i["stroke-linecap"]){var K=l.getElementsByTagName(j),L=!1;if(K=K&&K[0],!K&&(L=K=F(j)),"image"==e.type&&i.src&&(K.src=i.src),i.fill&&(K.on=!0),(null==K.on||"none"==i.fill||null===i.fill)&&(K.on=!1),K.on&&i.fill){var M=c(i.fill).match(a._ISURL);if(M){K.parentNode==l&&l.removeChild(K),K.rotate=!0,K.src=M[1],K.type="tile";var N=e.getBBox(1);K.position=N.x+n+N.y,e._.fillpos=[N.x,N.y],a._preload(M[1],function(){e._.fillsize=[this.offsetWidth,this.offsetHeight]})}else +K.color=a.getRGB(i.fill).hex,K.src=o,K.type="solid",a.getRGB(i.fill).error&&(s.type in{circle:1,ellipse:1}||"r"!=c(i.fill).charAt())&&C(s,i.fill,K)&&(m.fill="none",m.gradient=i.fill,K.rotate=!1)} +if("fill-opacity"in i||"opacity"in i){var O=((+m["fill-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+a.getRGB(i.fill).o+1||2)-1);O=h(g(O,0),1),K.opacity=O,K.src&&(K.color="none")} +l.appendChild(K);var P=l.getElementsByTagName("stroke")&&l.getElementsByTagName("stroke")[0],Q=!1;!P&&(Q=P=F("stroke")),(i.stroke&&"none"!=i.stroke||i["stroke-width"]||null!=i["stroke-opacity"]||i["stroke-dasharray"]||i["stroke-miterlimit"]||i["stroke-linejoin"]||i["stroke-linecap"])&&(P.on=!0),("none"==i.stroke||null===i.stroke||null==P.on||0==i.stroke||0==i["stroke-width"])&&(P.on=!1);var R=a.getRGB(i.stroke);P.on&&i.stroke&&(P.color=R.hex),O=((+m["stroke-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+R.o+1||2)-1);var S=.75*(d(i["stroke-width"])||1);if(O=h(g(O,0),1),null==i["stroke-width"]&&(S=m["stroke-width"]),i["stroke-width"]&&(P.weight=S),S&&1>S&&(O*=S)&&(P.weight=1),P.opacity=O,i["stroke-linejoin"]&&(P.joinstyle=i["stroke-linejoin"]||"miter"),P.miterlimit=i["stroke-miterlimit"]||8,i["stroke-linecap"]&&(P.endcap="butt"==i["stroke-linecap"]?"flat":"square"==i["stroke-linecap"]?"square":"round"),"stroke-dasharray"in i){var T={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};P.dashstyle=T[b](i["stroke-dasharray"])?T[i["stroke-dasharray"]]:o} +Q&&l.appendChild(P)} +if("text"==s.type){s.paper.canvas.style.display=o;var U=s.paper.span,V=100,W=m.font&&m.font.match(/\d+(?:\.\d*)?(?=px)/);p=U.style,m.font&&(p.font=m.font),m["font-family"]&&(p.fontFamily=m["font-family"]),m["font-weight"]&&(p.fontWeight=m["font-weight"]),m["font-style"]&&(p.fontStyle=m["font-style"]),W=d(m["font-size"]||W&&W[0])||10,p.fontSize=W*V+"px",s.textpath.string&&(U.innerHTML=c(s.textpath.string).replace(/"));var X=U.getBoundingClientRect();s.W=m.w=(X.right-X.left)/V,s.H=m.h=(X.bottom-X.top)/V,s.X=m.x,s.Y=m.y+s.H/2,("x"in i||"y"in i)&&(s.path.v=a.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));for(var Y=["x","y","text","font","font-family","font-weight","font-style","font-size"],Z=0,$=Y.length;$>Z;Z++) +if(Y[Z]in i){s._.dirty=1;break} +switch(m["text-anchor"]){case"start":s.textpath.style["v-text-align"]="left",s.bbx=s.W/2;break;case"end":s.textpath.style["v-text-align"]="right",s.bbx=-s.W/2;break;default:s.textpath.style["v-text-align"]="center",s.bbx=0} +s.textpath.style["v-text-kern"]=!0}},C=function(b,f,g){b.attrs=b.attrs||{};var h=(b.attrs,Math.pow),i="linear",j=".5 .5";if(b.attrs.gradient=f,f=c(f).replace(a._radial_gradient,function(a,b,c){return i="radial",b&&c&&(b=d(b),c=d(c),h(b-.5,2)+h(c-.5,2)>.25&&(c=e.sqrt(.25-h(b-.5,2))*(2*(c>.5)-1)+.5),j=b+n+c),o}),f=f.split(/\s*\-\s*/),"linear"==i){var k=f.shift();if(k=-d(k),isNaN(k)) +return null} +var l=a._parseDots(f);if(!l) +return null;if(b=b.shape||b.node,l.length){b.removeChild(g),g.on=!0,g.method="none",g.color=l[0].color,g.color2=l[l.length-1].color;for(var m=[],p=0,q=l.length;q>p;p++) +l[p].offset&&m.push(l[p].offset+n+l[p].color);g.colors=m.length?m.join():"0% "+g.color,"radial"==i?(g.type="gradientTitle",g.focus="100%",g.focussize="0 0",g.focusposition=j,g.angle=0):(g.type="gradient",g.angle=(270-k)%360),b.appendChild(g)} +return 1},D=function(b,c){this[0]=this.node=b,b.raphael=!0,this.id=a._oid++,b.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=c,this.matrix=a.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!c.bottom&&(c.bottom=this),this.prev=c.top,c.top&&(c.top.next=this),c.top=this,this.next=null},E=a.el;D.prototype=E,E.constructor=D,E.transform=function(b){if(null==b) +return this._.transform;var d,e=this.paper._viewBoxShift,f=e?"s"+[e.scale,e.scale]+"-1-1t"+[e.dx,e.dy]:o;e&&(d=b=c(b).replace(/\.{3}|\u2026/g,this._.transform||o)),a._extractTransform(this,f+b);var g,h=this.matrix.clone(),i=this.skew,j=this.node,k=~c(this.attrs.fill).indexOf("-"),l=!c(this.attrs.fill).indexOf("url(");if(h.translate(1,1),l||k||"image"==this.type) +if(i.matrix="1 0 0 1",i.offset="0 0",g=h.split(),k&&g.noRotation||!g.isSimple){j.style.filter=h.toFilter();var m=this.getBBox(),p=this.getBBox(1),q=m.x-p.x,r=m.y-p.y;j.coordorigin=q* -u+n+r* -u,z(this,1,1,q,r,0)}else +j.style.filter=o,z(this,g.scalex,g.scaley,g.dx,g.dy,g.rotate);else +j.style.filter=o,i.matrix=c(h),i.offset=h.offset();return null!==d&&(this._.transform=d,a._extractTransform(this,d)),this},E.rotate=function(a,b,e){if(this.removed) +return this;if(null!=a){if(a=c(a).split(k),a.length-1&&(b=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(b=e),null==b||null==e){var f=this.getBBox(1);b=f.x+f.width/2,e=f.y+f.height/2} +return this._.dirtyT=1,this.transform(this._.transform.concat([["r",a,b,e]])),this}},E.translate=function(a,b){return this.removed?this:(a=c(a).split(k),a.length-1&&(b=d(a[1])),a=d(a[0])||0,b=+b||0,this._.bbox&&(this._.bbox.x+=a,this._.bbox.y+=b),this.transform(this._.transform.concat([["t",a,b]])),this)},E.scale=function(a,b,e,f){if(this.removed) +return this;if(a=c(a).split(k),a.length-1&&(b=d(a[1]),e=d(a[2]),f=d(a[3]),isNaN(e)&&(e=null),isNaN(f)&&(f=null)),a=d(a[0]),null==b&&(b=a),null==f&&(e=f),null==e||null==f) +var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,b,e,f]])),this._.dirtyT=1,this},E.hide=function(){return!this.removed&&(this.node.style.display="none"),this},E.show=function(){return!this.removed&&(this.node.style.display=o),this},E.auxGetBBox=a.el.getBBox,E.getBBox=function(){var a=this.auxGetBBox();if(this.paper&&this.paper._viewBoxShift){var b={},c=1/this.paper._viewBoxShift.scale;return b.x=a.x-this.paper._viewBoxShift.dx,b.x*=c,b.y=a.y-this.paper._viewBoxShift.dy,b.y*=c,b.width=a.width*c,b.height=a.height*c,b.x2=b.x+b.width,b.y2=b.y+b.height,b} +return a},E._getBBox=function(){return this.removed?{}:{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},E.remove=function(){if(!this.removed&&this.node.parentNode){this.paper.__set__&&this.paper.__set__.exclude(this),a.eve.unbind("raphael.*.*."+this.id),a._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var b in this) +this[b]="function"==typeof this[b]?a._removedFactory(b):null;this.removed=!0}},E.attr=function(c,d){if(this.removed) +return this;if(null==c){var e={};for(var f in this.attrs) +this.attrs[b](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e} +if(null==d&&a.is(c,"string")){if(c==j&&"none"==this.attrs.fill&&this.attrs.gradient) +return this.attrs.gradient;for(var g=c.split(k),h={},i=0,m=g.length;m>i;i++) +c=g[i],c in this.attrs?h[c]=this.attrs[c]:a.is(this.paper.customAttributes[c],"function")?h[c]=this.paper.customAttributes[c].def:h[c]=a._availableAttrs[c];return m-1?h:h[g[0]]} +if(this.attrs&&null==d&&a.is(c,"array")){for(h={},i=0,m=c.length;m>i;i++) +h[c[i]]=this.attr(c[i]);return h} +var n;null!=d&&(n={},n[c]=d),null==d&&a.is(c,"object")&&(n=c);for(var o in n) +l("raphael.attr."+o+"."+this.id,this,n[o]);if(n){for(o in this.paper.customAttributes) +if(this.paper.customAttributes[b](o)&&n[b](o)&&a.is(this.paper.customAttributes[o],"function")){var p=this.paper.customAttributes[o].apply(this,[].concat(n[o]));this.attrs[o]=n[o];for(var q in p) +p[b](q)&&(n[q]=p[q])} +n.text&&"text"==this.type&&(this.textpath.string=n.text),B(this,n)} +return this},E.toFront=function(){return!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&a._tofront(this,this.paper),this},E.toBack=function(){return this.removed?this:(this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),a._toback(this,this.paper)),this)},E.insertAfter=function(b){return this.removed?this:(b.constructor==a.st.constructor&&(b=b[b.length-1]),b.node.nextSibling?b.node.parentNode.insertBefore(this.node,b.node.nextSibling):b.node.parentNode.appendChild(this.node),a._insertafter(this,b,this.paper),this)},E.insertBefore=function(b){return this.removed?this:(b.constructor==a.st.constructor&&(b=b[0]),b.node.parentNode.insertBefore(this.node,b.node),a._insertbefore(this,b,this.paper),this)},E.blur=function(b){var c=this.node.runtimeStyle,d=c.filter;return d=d.replace(r,o),0!==+b?(this.attrs.blur=b,c.filter=d+n+m+".Blur(pixelradius="+(+b||1.5)+")",c.margin=a.format("-{0}px 0 0 -{0}px",f(+b||1.5))):(c.filter=d,c.margin=0,delete this.attrs.blur),this},a._engine.path=function(a,b){var c=F("shape");c.style.cssText=t,c.coordsize=u+n+u,c.coordorigin=b.coordorigin;var d=new D(c,b),e={fill:"none",stroke:"#000"};a&&(e.path=a),d.type="path",d.path=[],d.Path=o,B(d,e),b.canvas.appendChild(c);var f=F("skew");return f.on=!0,c.appendChild(f),d.skew=f,d.transform(o),d},a._engine.rect=function(b,c,d,e,f,g){var h=a._rectPath(c,d,e,f,g),i=b.path(h),j=i.attrs;return i.X=j.x=c,i.Y=j.y=d,i.W=j.width=e,i.H=j.height=f,j.r=g,j.path=h,i.type="rect",i},a._engine.ellipse=function(a,b,c,d,e){{var f=a.path();f.attrs} +return f.X=b-d,f.Y=c-e,f.W=2*d,f.H=2*e,f.type="ellipse",B(f,{cx:b,cy:c,rx:d,ry:e}),f},a._engine.circle=function(a,b,c,d){{var e=a.path();e.attrs} +return e.X=b-d,e.Y=c-d,e.W=e.H=2*d,e.type="circle",B(e,{cx:b,cy:c,r:d}),e},a._engine.image=function(b,c,d,e,f,g){var h=a._rectPath(d,e,f,g),i=b.path(h).attr({stroke:"none"}),k=i.attrs,l=i.node,m=l.getElementsByTagName(j)[0];return k.src=c,i.X=k.x=d,i.Y=k.y=e,i.W=k.width=f,i.H=k.height=g,k.path=h,i.type="image",m.parentNode==l&&l.removeChild(m),m.rotate=!0,m.src=c,m.type="tile",i._.fillpos=[d,e],i._.fillsize=[f,g],l.appendChild(m),z(i,1,1,0,0,0),i},a._engine.text=function(b,d,e,g){var h=F("shape"),i=F("path"),j=F("textpath");d=d||0,e=e||0,g=g||"",i.v=a.format("m{0},{1}l{2},{1}",f(d*u),f(e*u),f(d*u)+1),i.textpathok=!0,j.string=c(g),j.on=!0,h.style.cssText=t,h.coordsize=u+n+u,h.coordorigin="0 0";var k=new D(h,b),l={fill:"#000",stroke:"none",font:a._availableAttrs.font,text:g};k.shape=h,k.path=i,k.textpath=j,k.type="text",k.attrs.text=c(g),k.attrs.x=d,k.attrs.y=e,k.attrs.w=1,k.attrs.h=1,B(k,l),h.appendChild(j),h.appendChild(i),b.canvas.appendChild(h);var m=F("skew");return m.on=!0,h.appendChild(m),k.skew=m,k.transform(o),k},a._engine.setSize=function(b,c){var d=this.canvas.style;return this.width=b,this.height=c,b==+b&&(b+="px"),c==+c&&(c+="px"),d.width=b,d.height=c,d.clip="rect(0 "+b+" "+c+" 0)",this._viewBox&&a._engine.setViewBox.apply(this,this._viewBox),this},a._engine.setViewBox=function(b,c,d,e,f){a.eve("raphael.setViewBox",this,this._viewBox,[b,c,d,e,f]);var g,h,i=this.getSize(),j=i.width,k=i.height;return f&&(g=k/e,h=j/d,j>d*g&&(b-=(j-d*g)/2/g),k>e*h&&(c-=(k-e*h)/2/h)),this._viewBox=[b,c,d,e,!!f],this._viewBoxShift={dx:-b,dy:-c,scale:i},this.forEach(function(a){a.transform("...")}),this};var F;a._engine.initWin=function(a){var b=a.document;b.styleSheets.length<31?b.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)"):b.styleSheets[0].addRule(".rvml","behavior:url(#default#VML)");try{!b.namespaces.rvml&&b.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),F=function(a){return b.createElement("')}}catch(c){F=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},a._engine.initWin(a._g.win),a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b.container,d=b.height,e=b.width,f=b.x,g=b.y;if(!c) +throw new Error("VML container not found.");var h=new a._Paper,i=h.canvas=a._g.doc.createElement("div"),j=i.style;return f=f||0,g=g||0,e=e||512,d=d||342,h.width=e,h.height=d,e==+e&&(e+="px"),d==+d&&(d+="px"),h.coordsize=1e3*u+n+1e3*u,h.coordorigin="0 0",h.span=a._g.doc.createElement("span"),h.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",i.appendChild(h.span),j.cssText=a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",e,d),1==c?(a._g.doc.body.appendChild(i),j.left=f+"px",j.top=g+"px",j.position="absolute"):c.firstChild?c.insertBefore(i,c.firstChild):c.appendChild(i),h.renderfix=function(){},h},a.prototype.clear=function(){a.eve("raphael.clear",this),this.canvas.innerHTML=o,this.span=a._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},a.prototype.remove=function(){a.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var b in this) +this[b]="function"==typeof this[b]?a._removedFactory(b):null;return!0};var G=a.st;for(var H in E) +E[b](H)&&!G[b](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}} +(H))}});JustGage=function(config){var obj=this;if(config===null||config===undefined){console.log('* justgage: Make sure to pass options to the constructor!');return false;} +var node;if(config.id!==null&&config.id!==undefined){node=document.getElementById(config.id);if(!node){console.log('* justgage: No element with id : %s found',config.id);return false;}}else if(config.parentNode!==null&&config.parentNode!==undefined){node=config.parentNode;}else{console.log('* justgage: Make sure to pass the existing element id or parentNode to the constructor.');return false;} +var dataset=node.dataset?node.dataset:{};var defaults=(config.defaults!==null&&config.defaults!==undefined)?config.defaults:false;if(defaults!==false){config=extend({},config,defaults);delete config.defaults;} +obj.config={id:config.id,value:kvLookup('value',config,dataset,0,'float'),defaults:kvLookup('defaults',config,dataset,0,false),parentNode:kvLookup('parentNode',config,dataset,null),width:kvLookup('width',config,dataset,null),height:kvLookup('height',config,dataset,null),title:kvLookup('title',config,dataset,""),titleFontColor:kvLookup('titleFontColor',config,dataset,"#999999"),titleFontFamily:kvLookup('titleFontFamily',config,dataset,"sans-serif"),titlePosition:kvLookup('titlePosition',config,dataset,"above"),valueFontColor:kvLookup('valueFontColor',config,dataset,"#010101"),valueFontFamily:kvLookup('valueFontFamily',config,dataset,"Arial"),symbol:kvLookup('symbol',config,dataset,''),min:kvLookup('min',config,dataset,0,'float'),max:kvLookup('max',config,dataset,100,'float'),reverse:kvLookup('reverse',config,dataset,false),humanFriendlyDecimal:kvLookup('humanFriendlyDecimal',config,dataset,0),textRenderer:kvLookup('textRenderer',config,dataset,null),gaugeWidthScale:kvLookup('gaugeWidthScale',config,dataset,1.0),gaugeColor:kvLookup('gaugeColor',config,dataset,"#edebeb"),label:kvLookup('label',config,dataset,''),labelFontColor:kvLookup('labelFontColor',config,dataset,"#b3b3b3"),shadowOpacity:kvLookup('shadowOpacity',config,dataset,0.2),shadowSize:kvLookup('shadowSize',config,dataset,5),shadowVerticalOffset:kvLookup('shadowVerticalOffset',config,dataset,3),levelColors:kvLookup('levelColors',config,dataset,["#a9d70b","#f9c802","#ff0000"],'array',','),startAnimationTime:kvLookup('startAnimationTime',config,dataset,700),startAnimationType:kvLookup('startAnimationType',config,dataset,'>'),refreshAnimationTime:kvLookup('refreshAnimationTime',config,dataset,700),refreshAnimationType:kvLookup('refreshAnimationType',config,dataset,'>'),donutStartAngle:kvLookup('donutStartAngle',config,dataset,90),valueMinFontSize:kvLookup('valueMinFontSize',config,dataset,16),titleMinFontSize:kvLookup('titleMinFontSize',config,dataset,10),labelMinFontSize:kvLookup('labelMinFontSize',config,dataset,10),minLabelMinFontSize:kvLookup('minLabelMinFontSize',config,dataset,10),maxLabelMinFontSize:kvLookup('maxLabelMinFontSize',config,dataset,10),hideValue:kvLookup('hideValue',config,dataset,false),hideMinMax:kvLookup('hideMinMax',config,dataset,false),hideInnerShadow:kvLookup('hideInnerShadow',config,dataset,false),humanFriendly:kvLookup('humanFriendly',config,dataset,false),noGradient:kvLookup('noGradient',config,dataset,false),donut:kvLookup('donut',config,dataset,false),relativeGaugeSize:kvLookup('relativeGaugeSize',config,dataset,false),counter:kvLookup('counter',config,dataset,false),decimals:kvLookup('decimals',config,dataset,0),customSectors:kvLookup('customSectors',config,dataset,[]),formatNumber:kvLookup('formatNumber',config,dataset,false),pointer:kvLookup('pointer',config,dataset,false),pointerOptions:kvLookup('pointerOptions',config,dataset,[])};var +canvasW,canvasH,widgetW,widgetH,aspect,dx,dy,titleFontSize,titleX,titleY,valueFontSize,valueX,valueY,labelFontSize,labelX,labelY,minFontSize,minX,minY,maxFontSize,maxX,maxY;if(obj.config.value>obj.config.max) +obj.config.value=obj.config.max;if(obj.config.valuecanvasH){widgetH=canvasH;widgetW=widgetH;}else if(canvasWcanvasH){aspect=widgetH/canvasH;widgetH=widgetH/aspect;widgetW=widgetH/aspect;}}else{widgetW=canvasW;widgetH=widgetW;} +dx=(canvasW-widgetW)/2;dy=(canvasH-widgetH)/2;titleFontSize=((widgetH/8)>10)?(widgetH/10):10;titleX=dx+widgetW/2;titleY=dy+widgetH/11;valueFontSize=((widgetH/6.4)>16)?(widgetH/5.4):18;valueX=dx+widgetW/2;if(obj.config.label!==''){valueY=dy+widgetH/1.85;}else{valueY=dy+widgetH/1.7;} +labelFontSize=((widgetH/16)>10)?(widgetH/16):10;labelX=dx+widgetW/2;labelY=valueY+labelFontSize;minFontSize=((widgetH/16)>10)?(widgetH/16):10;minX=dx+(widgetW/10)+(widgetW/6.666666666666667*obj.config.gaugeWidthScale)/2;minY=labelY;maxFontSize=((widgetH/16)>10)?(widgetH/16):10;maxX=dx+widgetW-(widgetW/10)-(widgetW/6.666666666666667*obj.config.gaugeWidthScale)/2;maxY=labelY;}else{if(canvasW>canvasH){widgetH=canvasH;widgetW=widgetH*1.25;if(widgetW>canvasW){aspect=widgetW/canvasW;widgetW=widgetW/aspect;widgetH=widgetH/aspect;}}else if(canvasWcanvasH){aspect=widgetH/canvasH;widgetH=widgetH/aspect;widgetW=widgetH/aspect;}}else{widgetW=canvasW;widgetH=widgetW*0.75;} +dx=(canvasW-widgetW)/2;dy=(canvasH-widgetH)/2;if(obj.config.titlePosition==='below'){dy-=(widgetH/6.4);} +titleFontSize=((widgetH/8)>obj.config.titleMinFontSize)?(widgetH/10):obj.config.titleMinFontSize;titleX=dx+widgetW/2;titleY=dy+(obj.config.titlePosition==='below'?(widgetH*1.07):(widgetH/6.4));valueFontSize=((widgetH/6.5)>obj.config.valueMinFontSize)?(widgetH/6.5):obj.config.valueMinFontSize;valueX=dx+widgetW/2;valueY=dy+widgetH/1.275;labelFontSize=((widgetH/16)>obj.config.labelMinFontSize)?(widgetH/16):obj.config.labelMinFontSize;labelX=dx+widgetW/2;labelY=valueY+valueFontSize/2+5;minFontSize=((widgetH/16)>obj.config.minLabelMinFontSize)?(widgetH/16):obj.config.minLabelMinFontSize;minX=dx+(widgetW/10)+(widgetW/6.666666666666667*obj.config.gaugeWidthScale)/2;minY=labelY;maxFontSize=((widgetH/16)>obj.config.maxLabelMinFontSize)?(widgetH/16):obj.config.maxLabelMinFontSize;maxX=dx+widgetW-(widgetW/10)-(widgetW/6.666666666666667*obj.config.gaugeWidthScale)/2;maxY=labelY;} +obj.params={canvasW:canvasW,canvasH:canvasH,widgetW:widgetW,widgetH:widgetH,dx:dx,dy:dy,titleFontSize:titleFontSize,titleX:titleX,titleY:titleY,valueFontSize:valueFontSize,valueX:valueX,valueY:valueY,labelFontSize:labelFontSize,labelX:labelX,labelY:labelY,minFontSize:minFontSize,minX:minX,minY:minY,maxFontSize:maxFontSize,maxX:maxX,maxY:maxY};canvasW,canvasH,widgetW,widgetH,aspect,dx,dy,titleFontSize,titleX,titleY,valueFontSize,valueX,valueY,labelFontSize,labelX,labelY,minFontSize,minX,minY,maxFontSize,maxX,maxY=null;obj.canvas.customAttributes.pki=function(value,min,max,w,h,dx,dy,gws,donut,reverse){var alpha,Ro,Ri,Cx,Cy,Xo,Yo,Xi,Yi,path;if(donut){alpha=(1-2*(value-min)/(max-min))*Math.PI;Ro=w/2-w/7;Ri=Ro-w/6.666666666666667*gws;Cx=w/2+dx;Cy=h/1.95+dy;Xo=w/2+dx+Ro*Math.cos(alpha);Yo=h-(h-Cy)-Ro*Math.sin(alpha);Xi=w/2+dx+Ri*Math.cos(alpha);Yi=h-(h-Cy)-Ri*Math.sin(alpha);path="M"+(Cx-Ri)+","+Cy+" ";path+="L"+(Cx-Ro)+","+Cy+" ";if(value>((max-min)/2)){path+="A"+Ro+","+Ro+" 0 0 1 "+(Cx+Ro)+","+Cy+" ";} +path+="A"+Ro+","+Ro+" 0 0 1 "+Xo+","+Yo+" ";path+="L"+Xi+","+Yi+" ";if(value>((max-min)/2)){path+="A"+Ri+","+Ri+" 0 0 0 "+(Cx+Ri)+","+Cy+" ";} +path+="A"+Ri+","+Ri+" 0 0 0 "+(Cx-Ri)+","+Cy+" ";path+="Z ";return{path:path};}else{alpha=(1-(value-min)/(max-min))*Math.PI;Ro=w/2-w/10;Ri=Ro-w/6.666666666666667*gws;Cx=w/2+dx;Cy=h/1.25+dy;Xo=w/2+dx+Ro*Math.cos(alpha);Yo=h-(h-Cy)-Ro*Math.sin(alpha);Xi=w/2+dx+Ri*Math.cos(alpha);Yi=h-(h-Cy)-Ri*Math.sin(alpha);path="M"+(Cx-Ri)+","+Cy+" ";path+="L"+(Cx-Ro)+","+Cy+" ";path+="A"+Ro+","+Ro+" 0 0 1 "+Xo+","+Yo+" ";path+="L"+Xi+","+Yi+" ";path+="A"+Ri+","+Ri+" 0 0 0 "+(Cx-Ri)+","+Cy+" ";path+="Z ";return{path:path};} +alpha,Ro,Ri,Cx,Cy,Xo,Yo,Xi,Yi,path=null;};obj.canvas.customAttributes.ndl=function(value,min,max,w,h,dx,dy,gws,donut){var dlt=w*3.5/100;var dlb=w/15;var dw=w/100;if(obj.config.pointerOptions.toplength!=null&&obj.config.pointerOptions.toplength!=undefined) +dlt=obj.config.pointerOptions.toplength;if(obj.config.pointerOptions.bottomlength!=null&&obj.config.pointerOptions.bottomlength!=undefined) +dlb=obj.config.pointerOptions.bottomlength;if(obj.config.pointerOptions.bottomwidth!=null&&obj.config.pointerOptions.bottomwidth!=undefined) +dw=obj.config.pointerOptions.bottomwidth;var alpha,Ro,Ri,Cx,Cy,Xo,Yo,Xi,Yi,Xc,Yc,Xz,Yz,Xa,Ya,Xb,Yb,path;if(donut){alpha=(1-2*(value-min)/(max-min))*Math.PI;Ro=w/2-w/7;Ri=Ro-w/6.666666666666667*gws;Cx=w/2+dx;Cy=h/1.95+dy;Xo=w/2+dx+Ro*Math.cos(alpha);Yo=h-(h-Cy)-Ro*Math.sin(alpha);Xi=w/2+dx+Ri*Math.cos(alpha);Yi=h-(h-Cy)-Ri*Math.sin(alpha);Xc=Xo+dlt*Math.cos(alpha);Yc=Yo-dlt*Math.sin(alpha);Xz=Xi-dlb*Math.cos(alpha);Yz=Yi+dlb*Math.sin(alpha);Xa=Xz+dw*Math.sin(alpha);Ya=Yz+dw*Math.cos(alpha);Xb=Xz-dw*Math.sin(alpha);Yb=Yz-dw*Math.cos(alpha);path='M'+Xa+','+Ya+' ';path+='L'+Xb+','+Yb+' ';path+='L'+Xc+','+Yc+' ';path+='Z ';return{path:path};}else{alpha=(1-(value-min)/(max-min))*Math.PI;Ro=w/2-w/10;Ri=Ro-w/6.666666666666667*gws;Cx=w/2+dx;Cy=h/1.25+dy;Xo=w/2+dx+Ro*Math.cos(alpha);Yo=h-(h-Cy)-Ro*Math.sin(alpha);Xi=w/2+dx+Ri*Math.cos(alpha);Yi=h-(h-Cy)-Ri*Math.sin(alpha);Xc=Xo+dlt*Math.cos(alpha);Yc=Yo-dlt*Math.sin(alpha);Xz=Xi-dlb*Math.cos(alpha);Yz=Yi+dlb*Math.sin(alpha);Xa=Xz+dw*Math.sin(alpha);Ya=Yz+dw*Math.cos(alpha);Xb=Xz-dw*Math.sin(alpha);Yb=Yz-dw*Math.cos(alpha);path='M'+Xa+','+Ya+' ';path+='L'+Xb+','+Yb+' ';path+='L'+Xc+','+Yc+' ';path+='Z ';return{path:path};} +alpha,Ro,Ri,Cx,Cy,Xo,Yo,Xi,Yi,Xc,Yc,Xz,Yz,Xa,Ya,Xb,Yb,path=null;};obj.gauge=obj.canvas.path().attr({"stroke":"none","fill":obj.config.gaugeColor,pki:[obj.config.max,obj.config.min,obj.config.max,obj.params.widgetW,obj.params.widgetH,obj.params.dx,obj.params.dy,obj.config.gaugeWidthScale,obj.config.donut,obj.config.reverse]});obj.level=obj.canvas.path().attr({"stroke":"none","fill":getColor(obj.config.value,(obj.config.value-obj.config.min)/(obj.config.max-obj.config.min),obj.config.levelColors,obj.config.noGradient,obj.config.customSectors),pki:[obj.config.min,obj.config.min,obj.config.max,obj.params.widgetW,obj.params.widgetH,obj.params.dx,obj.params.dy,obj.config.gaugeWidthScale,obj.config.donut,obj.config.reverse]});if(obj.config.donut){obj.level.transform("r"+obj.config.donutStartAngle+", "+(obj.params.widgetW/2+obj.params.dx)+", "+(obj.params.widgetH/1.95+obj.params.dy));} +if(obj.config.pointer){obj.needle=obj.canvas.path().attr({"stroke":(obj.config.pointerOptions.stroke!==null&&obj.config.pointerOptions.stroke!==undefined)?obj.config.pointerOptions.stroke:"none","stroke-width":(obj.config.pointerOptions.stroke_width!==null&&obj.config.pointerOptions.stroke_width!==undefined)?obj.config.pointerOptions.stroke_width:0,"stroke-linecap":(obj.config.pointerOptions.stroke_linecap!==null&&obj.config.pointerOptions.stroke_linecap!==undefined)?obj.config.pointerOptions.stroke_linecap:"square","fill":(obj.config.pointerOptions.color!==null&&obj.config.pointerOptions.color!==undefined)?obj.config.pointerOptions.color:"#000000",ndl:[obj.config.min,obj.config.min,obj.config.max,obj.params.widgetW,obj.params.widgetH,obj.params.dx,obj.params.dy,obj.config.gaugeWidthScale,obj.config.donut]});if(obj.config.donut){obj.needle.transform("r"+obj.config.donutStartAngle+", "+(obj.params.widgetW/2+obj.params.dx)+", "+(obj.params.widgetH/1.95+obj.params.dy));}} +obj.txtTitle=obj.canvas.text(obj.params.titleX,obj.params.titleY,obj.config.title);obj.txtTitle.attr({"font-size":obj.params.titleFontSize,"font-weight":"bold","font-family":obj.config.titleFontFamily,"fill":obj.config.titleFontColor,"fill-opacity":"1"});setDy(obj.txtTitle,obj.params.titleFontSize,obj.params.titleY);obj.txtValue=obj.canvas.text(obj.params.valueX,obj.params.valueY,0);obj.txtValue.attr({"font-size":obj.params.valueFontSize,"font-weight":"bold","font-family":obj.config.valueFontFamily,"fill":obj.config.valueFontColor,"fill-opacity":"0"});setDy(obj.txtValue,obj.params.valueFontSize,obj.params.valueY);obj.txtLabel=obj.canvas.text(obj.params.labelX,obj.params.labelY,obj.config.label);obj.txtLabel.attr({"font-size":obj.params.labelFontSize,"font-weight":"normal","font-family":"Arial","fill":obj.config.labelFontColor,"fill-opacity":"0"});setDy(obj.txtLabel,obj.params.labelFontSize,obj.params.labelY);var min=obj.config.min;if(obj.config.reverse){min=obj.config.max;} +obj.txtMinimum=min;if(obj.config.humanFriendly){obj.txtMinimum=humanFriendlyNumber(min,obj.config.humanFriendlyDecimal);}else if(obj.config.formatNumber){obj.txtMinimum=formatNumber(min);} +obj.txtMin=obj.canvas.text(obj.params.minX,obj.params.minY,obj.txtMinimum);obj.txtMin.attr({"font-size":obj.params.minFontSize,"font-weight":"normal","font-family":"Arial","fill":obj.config.labelFontColor,"fill-opacity":(obj.config.hideMinMax||obj.config.donut)?"0":"1"});setDy(obj.txtMin,obj.params.minFontSize,obj.params.minY);var max=obj.config.max;if(obj.config.reverse){max=obj.config.min;} +obj.txtMaximum=max;if(obj.config.humanFriendly){obj.txtMaximum=humanFriendlyNumber(max,obj.config.humanFriendlyDecimal);}else if(obj.config.formatNumber){obj.txtMaximum=formatNumber(max);} +obj.txtMax=obj.canvas.text(obj.params.maxX,obj.params.maxY,obj.txtMaximum);obj.txtMax.attr({"font-size":obj.params.maxFontSize,"font-weight":"normal","font-family":"Arial","fill":obj.config.labelFontColor,"fill-opacity":(obj.config.hideMinMax||obj.config.donut)?"0":"1"});setDy(obj.txtMax,obj.params.maxFontSize,obj.params.maxY);var defs=obj.canvas.canvas.childNodes[1];var svg="http://www.w3.org/2000/svg";if(ie!=='undefined'&&ie<9){} +else if(ie!=='undefined'){onCreateElementNsReady(function(){obj.generateShadow(svg,defs);});}else{obj.generateShadow(svg,defs);} +defs,svg=null;if(obj.config.textRenderer){obj.originalValue=obj.config.textRenderer(obj.originalValue);}else if(obj.config.humanFriendly){obj.originalValue=humanFriendlyNumber(obj.originalValue,obj.config.humanFriendlyDecimal)+obj.config.symbol;}else if(obj.config.formatNumber){obj.originalValue=formatNumber(obj.originalValue)+obj.config.symbol;}else{obj.originalValue=(obj.originalValue*1).toFixed(obj.config.decimals)+obj.config.symbol;} +if(obj.config.counter===true){eve.on("raphael.anim.frame."+(obj.level.id),function(){var currentValue=obj.level.attr("pki")[0];if(obj.config.reverse){currentValue=(obj.config.max*1)+(obj.config.min*1)-(obj.level.attr("pki")[0]*1);} +if(obj.config.textRenderer){obj.txtValue.attr("text",obj.config.textRenderer(Math.floor(currentValue)));}else if(obj.config.humanFriendly){obj.txtValue.attr("text",humanFriendlyNumber(Math.floor(currentValue),obj.config.humanFriendlyDecimal)+obj.config.symbol);}else if(obj.config.formatNumber){obj.txtValue.attr("text",formatNumber(Math.floor(currentValue))+obj.config.symbol);}else{obj.txtValue.attr("text",(currentValue*1).toFixed(obj.config.decimals)+obj.config.symbol);} +setDy(obj.txtValue,obj.params.valueFontSize,obj.params.valueY);currentValue=null;});eve.on("raphael.anim.finish."+(obj.level.id),function(){obj.txtValue.attr({"text":obj.originalValue});setDy(obj.txtValue,obj.params.valueFontSize,obj.params.valueY);});}else{eve.on("raphael.anim.start."+(obj.level.id),function(){obj.txtValue.attr({"text":obj.originalValue});setDy(obj.txtValue,obj.params.valueFontSize,obj.params.valueY);});} +var rvl=obj.config.value;if(obj.config.reverse){rvl=(obj.config.max*1)+(obj.config.min*1)-(obj.config.value*1);} +obj.level.animate({pki:[rvl,obj.config.min,obj.config.max,obj.params.widgetW,obj.params.widgetH,obj.params.dx,obj.params.dy,obj.config.gaugeWidthScale,obj.config.donut,obj.config.reverse]},obj.config.startAnimationTime,obj.config.startAnimationType);if(obj.config.pointer){obj.needle.animate({ndl:[rvl,obj.config.min,obj.config.max,obj.params.widgetW,obj.params.widgetH,obj.params.dx,obj.params.dy,obj.config.gaugeWidthScale,obj.config.donut]},obj.config.startAnimationTime,obj.config.startAnimationType);} +obj.txtValue.animate({"fill-opacity":(obj.config.hideValue)?"0":"1"},obj.config.startAnimationTime,obj.config.startAnimationType);obj.txtLabel.animate({"fill-opacity":"1"},obj.config.startAnimationTime,obj.config.startAnimationType);};JustGage.prototype.refresh=function(val,max){var obj=this;var displayVal,color,max=max||null;if(max!==null){obj.config.max=max;obj.txtMaximum=obj.config.max;if(obj.config.humanFriendly){obj.txtMaximum=humanFriendlyNumber(obj.config.max,obj.config.humanFriendlyDecimal);}else if(obj.config.formatNumber){obj.txtMaximum=formatNumber(obj.config.max);} +if(!obj.config.reverse){obj.txtMax.attr({"text":obj.txtMaximum});setDy(obj.txtMax,obj.params.maxFontSize,obj.params.maxY);}else{obj.txtMin.attr({"text":obj.txtMaximum});setDy(obj.txtMin,obj.params.minFontSize,obj.params.minY);}} +displayVal=val;if((val*1)>(obj.config.max*1)){val=(obj.config.max*1);} +if((val*1)<(obj.config.min*1)){val=(obj.config.min*1);} +color=getColor(val,(val-obj.config.min)/(obj.config.max-obj.config.min),obj.config.levelColors,obj.config.noGradient,obj.config.customSectors);if(obj.config.textRenderer){displayVal=obj.config.textRenderer(displayVal);}else if(obj.config.humanFriendly){displayVal=humanFriendlyNumber(displayVal,obj.config.humanFriendlyDecimal)+obj.config.symbol;}else if(obj.config.formatNumber){displayVal=formatNumber((displayVal*1).toFixed(obj.config.decimals))+obj.config.symbol;}else{displayVal=(displayVal*1).toFixed(obj.config.decimals)+obj.config.symbol;} +obj.originalValue=displayVal;obj.config.value=val*1;if(!obj.config.counter){obj.txtValue.attr({"text":displayVal});setDy(obj.txtValue,obj.params.valueFontSize,obj.params.valueY);} +var rvl=obj.config.value;if(obj.config.reverse){rvl=(obj.config.max*1)+(obj.config.min*1)-(obj.config.value*1);} +obj.level.animate({pki:[rvl,obj.config.min,obj.config.max,obj.params.widgetW,obj.params.widgetH,obj.params.dx,obj.params.dy,obj.config.gaugeWidthScale,obj.config.donut,obj.config.reverse],"fill":color},obj.config.refreshAnimationTime,obj.config.refreshAnimationType);if(obj.config.pointer){obj.needle.animate({ndl:[rvl,obj.config.min,obj.config.max,obj.params.widgetW,obj.params.widgetH,obj.params.dx,obj.params.dy,obj.config.gaugeWidthScale,obj.config.donut]},obj.config.refreshAnimationTime,obj.config.refreshAnimationType);} +obj,displayVal,color,max=null;};JustGage.prototype.generateShadow=function(svg,defs){var obj=this;var sid="inner-shadow-"+obj.config.id;var gaussFilter,feOffset,feGaussianBlur,feComposite1,feFlood,feComposite2,feComposite3;gaussFilter=document.createElementNS(svg,"filter");gaussFilter.setAttribute("id",sid);defs.appendChild(gaussFilter);feOffset=document.createElementNS(svg,"feOffset");feOffset.setAttribute("dx",0);feOffset.setAttribute("dy",obj.config.shadowVerticalOffset);gaussFilter.appendChild(feOffset);feGaussianBlur=document.createElementNS(svg,"feGaussianBlur");feGaussianBlur.setAttribute("result","offset-blur");feGaussianBlur.setAttribute("stdDeviation",obj.config.shadowSize);gaussFilter.appendChild(feGaussianBlur);feComposite1=document.createElementNS(svg,"feComposite");feComposite1.setAttribute("operator","out");feComposite1.setAttribute("in","SourceGraphic");feComposite1.setAttribute("in2","offset-blur");feComposite1.setAttribute("result","inverse");gaussFilter.appendChild(feComposite1);feFlood=document.createElementNS(svg,"feFlood");feFlood.setAttribute("flood-color","black");feFlood.setAttribute("flood-opacity",obj.config.shadowOpacity);feFlood.setAttribute("result","color");gaussFilter.appendChild(feFlood);feComposite2=document.createElementNS(svg,"feComposite");feComposite2.setAttribute("operator","in");feComposite2.setAttribute("in","color");feComposite2.setAttribute("in2","inverse");feComposite2.setAttribute("result","shadow");gaussFilter.appendChild(feComposite2);feComposite3=document.createElementNS(svg,"feComposite");feComposite3.setAttribute("operator","over");feComposite3.setAttribute("in","shadow");feComposite3.setAttribute("in2","SourceGraphic");gaussFilter.appendChild(feComposite3);if(!obj.config.hideInnerShadow){obj.canvas.canvas.childNodes[2].setAttribute("filter","url(#"+sid+")");obj.canvas.canvas.childNodes[3].setAttribute("filter","url(#"+sid+")");} +gaussFilter,feOffset,feGaussianBlur,feComposite1,feFlood,feComposite2,feComposite3=null;};function kvLookup(key,tablea,tableb,defval,datatype,delimiter){var val=defval;var canConvert=false;if(!(key===null||key===undefined)){if(tableb!==null&&tableb!==undefined&&typeof tableb==="object"&&key in tableb){val=tableb[key];canConvert=true;}else if(tablea!==null&&tablea!==undefined&&typeof tablea==="object"&&key in tablea){val=tablea[key];canConvert=true;}else{val=defval;} +if(canConvert===true){if(datatype!==null&&datatype!==undefined){switch(datatype){case'int':val=parseInt(val,10);break;case'float':val=parseFloat(val);break;default:break;}}}} +return val;};function getColor(val,pct,col,noGradient,custSec){var no,inc,colors,percentage,rval,gval,bval,lower,upper,range,rangePct,pctLower,pctUpper,color;var noGradient=noGradient||custSec.length>0;if(custSec.length>0){for(var i=0;icustSec[i].lo&&val<=custSec[i].hi){return custSec[i].color;}}} +no=col.length;if(no===1) +return col[0];inc=(noGradient)?(1/no):(1/(no-1));colors=[];for(i=0;i9)&&elem.node.firstChild.attributes.dy){elem.node.firstChild.attributes.dy.value=0;}} +function getRandomInt(min,max){return Math.floor(Math.random()*(max-min+1))+min;} +function cutHex(str){return(str.charAt(0)=="#")?str.substring(1,7):str;} +function humanFriendlyNumber(n,d){var p,d2,i,s;p=Math.pow;d2=p(10,d);i=7;while(i){s=p(10,i-- *3);if(s<=n){n=Math.round(n*d2/s)/d2+"KMGTPE"[i];}} +return n;} +function formatNumber(x){var parts=x.toString().split(".");parts[0]=parts[0].replace(/\B(?=(\d{3})+(?!\d))/g,",");return parts.join(".");} +function getStyle(oElm,strCssRule){var strValue="";if(document.defaultView&&document.defaultView.getComputedStyle){strValue=document.defaultView.getComputedStyle(oElm,"").getPropertyValue(strCssRule);}else if(oElm.currentStyle){strCssRule=strCssRule.replace(/\-(\w)/g,function(strMatch,p1){return p1.toUpperCase();});strValue=oElm.currentStyle[strCssRule];} +return strValue;} +function onCreateElementNsReady(func){if(document.createElementNS!==undefined){func();}else{setTimeout(function(){onCreateElementNsReady(func);},100);}} +var ie=(function(){var undef,v=3,div=document.createElement('div'),all=div.getElementsByTagName('i');while(div.innerHTML='',all[0]);return v>4?v:undef;} +());function extend(out){out=out||{};for(var i=1;iW1H(KP1_lEI2tPxOf#H}a1A_(w1A_oa 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 literal 0 HcmV?d00001 diff --git a/examples/SmartSwitch/data_src/index.htm b/examples/SmartSwitch/data_src/index.htm new file mode 100644 index 0000000..44c86bf --- /dev/null +++ b/examples/SmartSwitch/data_src/index.htm @@ -0,0 +1,585 @@ + + + + + + Smart Switch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + + + + + +
+ + + + + +
+
+ +
+
+
+ +
+
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/.exclude.files b/examples/SmartSwitch/data_src/js_css_src/.exclude.files new file mode 100644 index 0000000..955397f --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/.exclude.files @@ -0,0 +1,2 @@ +/*.js.gz +/.exclude.files diff --git a/examples/SmartSwitch/data_src/js_css_src/ace.js b/examples/SmartSwitch/data_src/js_css_src/ace.js new file mode 100644 index 0000000..f54ebb2 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/ace.js @@ -0,0 +1,14 @@ +(function(){function o(n){var i=e;n&&(e[n]||(e[n]={}),i=e[n]);if(!i.define||!i.define.packaged)t.original=i.define,i.define=t,i.define.packaged=!0;if(!i.require||!i.require.packaged)r.original=i.require,i.require=r,i.require.packaged=!0}var ACE_NAMESPACE="",e=function(){return this}();!e&&typeof window!="undefined"&&(e=window);if(!ACE_NAMESPACE&&typeof requirejs!="undefined")return;var t=function(e,n,r){if(typeof e!="string"){t.original?t.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace());return}arguments.length==2&&(r=n),t.modules[e]||(t.payloads[e]=r,t.modules[e]=null)};t.modules={},t.payloads={};var n=function(e,t,n){if(typeof t=="string"){var i=s(e,t);if(i!=undefined)return n&&n(),i}else if(Object.prototype.toString.call(t)==="[object Array]"){var o=[];for(var u=0,a=t.length;u1&&u(t,"")>-1&&(a=RegExp(this.source,r.replace.call(o(this),"g","")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;et.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t==="undefined"||t==="boolean"||t==="number"||t==="string"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n=="function"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r=="function"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError("Function.prototype.bind called on incompatible "+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,"__defineGetter__"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,"XXX"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h>>0;if(a(t)!="[object Function]")throw new TypeError;while(++s>>0,s=Array(i),o=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var u=0;u>>0,s=[],o,u=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var f=0;f>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduce of empty array with no initial value");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}while(!0);for(;s>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduceRight of empty array with no initial value");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)=="[object String]"?this.split(""):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document=="undefined"||w(document.createElement("div"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T="Property description must be an object: ",N="Object.defineProperty called on non-object: ",C="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(N+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,"value"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,"get")&&l(t,n,r.get),f(r,"set")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(f(t,n))n+="?";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n=0?parseFloat((i.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((i.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&window.navigator.product==="Gecko",t.isOldGecko=t.isGecko&&parseInt((i.match(/rv:(\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&Object.prototype.toString.call(window.opera)=="[object Opera]",t.isWebKit=parseFloat(i.split("WebKit/")[1])||undefined,t.isChrome=parseFloat(i.split(" Chrome/")[1])||undefined,t.isAIR=i.indexOf("AdobeAIR")>=0,t.isIPad=i.indexOf("iPad")>=0,t.isTouchPad=i.indexOf("TouchPad")>=0,t.isChromeOS=i.indexOf(" CrOS ")>=0}),define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,n){"use strict";function a(e,t,n){var a=u(t);if(!i.isMac&&s){t.getModifierState&&(t.getModifierState("OS")||t.getModifierState("Win"))&&(a|=8);if(s.altGr){if((3&a)==3)return;s.altGr=0}if(n===18||n===17){var f="location"in t?t.location:t.keyLocation;if(n===17&&f===1)s[n]==1&&(o=t.timeStamp);else if(n===18&&a===3&&f===2){var l=t.timeStamp-o;l<50&&(s.altGr=!0)}}}n in r.MODIFIER_KEYS&&(n=-1),a&8&&n>=91&&n<=93&&(n=-1);if(!a&&n===13){var f="location"in t?t.location:t.keyLocation;if(f===3){e(t,a,-n);if(t.defaultPrevented)return}}if(i.isChromeOS&&a&8){e(t,a,n);if(t.defaultPrevented)return;a&=-9}return!!a||n in r.FUNCTION_KEYS||n in r.PRINTABLE_KEYS?e(t,a,n):!1}function f(){s=Object.create(null)}var r=e("./keys"),i=e("./useragent"),s=null,o=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var r=function(){n.call(e,window.event)};n._wrapper=r,e.attachEvent("on"+t,r)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent("on"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return e.type=="dblclick"?0:e.type=="contextmenu"||i.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,r){function i(e){n&&n(e),r&&r(e),t.removeListener(document,"mousemove",n,!0),t.removeListener(document,"mouseup",i,!0),t.removeListener(document,"dragstart",i,!0)}return t.addListener(document,"mousemove",n,!0),t.addListener(document,"mouseup",i,!0),t.addListener(document,"dragstart",i,!0),i},t.addTouchMoveListener=function(e,n){if("ontouchmove"in e){var r,i;t.addListener(e,"touchstart",function(e){var t=e.changedTouches[0];r=t.clientX,i=t.clientY}),t.addListener(e,"touchmove",function(e){var t=1,s=e.changedTouches[0];e.wheelX=-(s.clientX-r)/t,e.wheelY=-(s.clientY-i)/t,r=s.clientX,i=s.clientY,n(e)})}},t.addMouseWheelListener=function(e,n){"onmousewheel"in e?t.addListener(e,"mousewheel",function(e){var t=8;e.wheelDeltaX!==undefined?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)}):"onwheel"in e?t.addListener(e,"wheel",function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=(e.deltaX||0)*5,e.wheelY=(e.deltaY||0)*5}n(e)}):t.addListener(e,"DOMMouseScroll",function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=(e.detail||0)*5,e.wheelY=0):(e.wheelX=0,e.wheelY=(e.detail||0)*5),n(e)})},t.addMultiMouseDownListener=function(e,n,r,s){function c(e){t.getButton(e)!==0?o=0:e.detail>1?(o++,o>4&&(o=1)):o=1;if(i.isIE){var c=Math.abs(e.clientX-u)>5||Math.abs(e.clientY-a)>5;if(!f||c)o=1;f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),o==1&&(u=e.clientX,a=e.clientY)}e._clicks=o,r[s]("mousedown",e);if(o>4)o=0;else if(o>1)return r[s](l[o],e)}function h(e){o=2,f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),r[s]("mousedown",e),r[s](l[o],e)}var o=0,u,a,f,l={2:"dblclick",3:"tripleclick",4:"quadclick"};Array.isArray(e)||(e=[e]),e.forEach(function(e){t.addListener(e,"mousedown",c),i.isOldIE&&t.addListener(e,"dblclick",h)})};var u=!i.isMac||!i.isOpera||"KeyboardEvent"in window?function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)}:function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)};t.getModifierString=function(e){return r.KEY_MODS[u(e)]},t.addCommandKeyListener=function(e,n){var r=t.addListener;if(i.isOldGecko||i.isOpera&&!("KeyboardEvent"in window)){var o=null;r(e,"keydown",function(e){o=e.keyCode}),r(e,"keypress",function(e){return a(n,e,o)})}else{var u=null;r(e,"keydown",function(e){s[e.keyCode]=(s[e.keyCode]||0)+1;var t=a(n,e,e.keyCode);return u=e.defaultPrevented,t}),r(e,"keypress",function(e){u&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),u=null)}),r(e,"keyup",function(e){s[e.keyCode]=null}),s||(f(),r(window,"focus",f))}};if(typeof window=="object"&&window.postMessage&&!i.isOldIE){var l=1;t.nextTick=function(e,n){n=n||window;var r="zero-timeout-message-"+l;t.addListener(n,"message",function i(s){s.data==r&&(t.stopPropagation(s),t.removeListener(n,"message",i),e())}),n.postMessage(r,"*")}}t.nextFrame=typeof window=="object"&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),define("ace/lib/lang",["require","exports","module"],function(e,t,n){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){var n="";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n=53&&O()},I=o.delayedCall(j,50);r.addListener(n,"compositionstart",B),i.isGecko?r.addListener(n,"text",function(){I.schedule()}):(r.addListener(n,"keyup",function(){I.schedule()}),r.addListener(n,"keydown",function(){I.schedule()})),r.addListener(n,"compositionend",F),this.getElement=function(){return n},this.setReadOnly=function(e){n.readOnly=e},this.onContextMenu=function(e){L=!0,b(t.selection.isEmpty()),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,o){if(!o&&i.isOldIE)return;p||(p=n.style.cssText),n.style.cssText=(o?"z-index:100000;":"")+"height:"+n.style.height+";"+(i.isIE?"opacity:0.1;":"");var u=t.container.getBoundingClientRect(),a=s.computedStyle(t.container),f=u.top+(parseInt(a.borderTopWidth)||0),l=u.left+(parseInt(u.borderLeftWidth)||0),c=u.bottom-f-n.clientHeight-2,h=function(e){n.style.left=e.clientX-l-2+"px",n.style.top=Math.min(e.clientY-f-2,c)+"px"};h(e);if(e.type!="mousedown")return;t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(q),i.isWin&&!i.isOldIE&&r.capture(t.container,h,R)},this.onContextMenuClose=R;var q,U=function(e){t.textInput.onContextMenu(e),R()};r.addListener(n,"mouseup",U),r.addListener(n,"mousedown",function(e){e.preventDefault(),R()}),r.addListener(t.renderer.scroller,"contextmenu",U),r.addListener(n,"contextmenu",U)};t.TextInput=f}),define("ace/mouse/default_handlers",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";function u(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler("mousedown",this.onMouseDown.bind(e)),t.setDefaultHandler("dblclick",this.onDoubleClick.bind(e)),t.setDefaultHandler("tripleclick",this.onTripleClick.bind(e)),t.setDefaultHandler("quadclick",this.onQuadClick.bind(e)),t.setDefaultHandler("mousewheel",this.onMouseWheel.bind(e)),t.setDefaultHandler("touchmove",this.onTouchMove.bind(e));var n=["select","startSelect","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","dragWait","dragWaitEnd","focusWait"];n.forEach(function(t){e[t]=this[t]},this),e.selectByLines=this.extendSelectionBy.bind(e,"getLineRange"),e.selectByWords=this.extendSelectionBy.bind(e,"getWordRange")}function a(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}function f(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row==e.end.row-1&&!e.start.column&&!e.end.column)var n=t.column-4;else var n=2*t.row-e.start.row-e.end.row;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}var r=e("../lib/dom"),i=e("../lib/event"),s=e("../lib/useragent"),o=0;(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var r=this.editor,i=e.getButton();if(i!==0){var s=r.getSelectionRange(),o=s.isEmpty();r.$blockScrolling++,(o||i==1)&&r.selection.moveToPosition(n),r.$blockScrolling--,i==2&&r.textInput.onContextMenu(e.domEvent);return}this.mousedownEvent.time=Date.now();if(t&&!r.isFocused()){r.focus();if(this.$focusTimout&&!this.$clickSelection&&!r.inMultiSelectMode){this.setState("focusWait"),this.captureMouse(e);return}}return this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;n.$blockScrolling++,this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle("ace_selecting"),this.setState("select"),n.$blockScrolling--},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);t.$blockScrolling++;if(this.$clickSelection){var r=this.$clickSelection.comparePoint(n);if(r==-1)e=this.$clickSelection.end;else if(r==1)e=this.$clickSelection.start;else{var i=f(this.$clickSelection,n);n=i.cursor,e=i.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,r=n.renderer.screenToTextCoordinates(this.x,this.y),i=n.selection[e](r.row,r.column);n.$blockScrolling++;if(this.$clickSelection){var s=this.$clickSelection.comparePoint(i.start),o=this.$clickSelection.comparePoint(i.end);if(s==-1&&o<=0){t=this.$clickSelection.end;if(i.end.row!=r.row||i.end.column!=r.column)r=i.start}else if(o==1&&s>=0){t=this.$clickSelection.start;if(i.start.row!=r.row||i.start.column!=r.column)r=i.end}else if(s==-1&&o==1)r=i.end,t=i.start;else{var u=f(this.$clickSelection,r);r=u.cursor,t=u.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(r),n.$blockScrolling--,n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>o||t-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,r=n.session,i=r.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState("select")):(i=n.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState("selectByLines");var r=n.getSelectionRange();r.isMultiLine()&&r.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(r.start.row),this.$clickSelection.end=n.selection.getLineRange(r.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(e.getAccelKey())return;e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=e.domEvent.timeStamp,n=t-(this.$lastScrollTime||0),r=this.editor,i=r.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed);if(i||n<200)return this.$lastScrollTime=t,r.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()},this.onTouchMove=function(e){var t=e.domEvent.timeStamp,n=t-(this.$lastScrollTime||0),r=this.editor,i=r.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed);if(i||n<200)return this.$lastScrollTime=t,r.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()}}).call(u.prototype),t.DefaultHandlers=u}),define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],function(e,t,n){"use strict";function s(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}var r=e("./lib/oop"),i=e("./lib/dom");(function(){this.$init=function(){return this.$element=i.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){i.setInnerText(this.getElement(),e)},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+"px",this.getElement().style.top=t+"px"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){e!=null&&this.setText(e),t!=null&&n!=null&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth}}).call(s.prototype),t.Tooltip=s}),define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],function(e,t,n){"use strict";function u(e){function l(){var r=u.getDocumentPosition().row,s=n.$annotations[r];if(!s)return c();var o=t.session.getLength();if(r==o){var a=t.renderer.pixelToScreenCoordinates(0,u.y).row,l=u.$pos;if(a>t.session.documentToScreenRow(l.row,l.column))return c()}if(f==s)return;f=s.text.join("
"),i.setHtml(f),i.show(),t._signal("showGutterTooltip",i),t.on("mousewheel",c);if(e.$tooltipFollowsMouse)h(u);else{var p=u.domEvent.target,d=p.getBoundingClientRect(),v=i.getElement().style;v.left=d.right+"px",v.top=d.bottom+"px"}}function c(){o&&(o=clearTimeout(o)),f&&(i.hide(),f=null,t._signal("hideGutterTooltip",i),t.removeEventListener("mousewheel",c))}function h(e){i.setPosition(e.x,e.y)}var t=e.editor,n=t.renderer.$gutterLayer,i=new a(t.container);e.editor.setDefaultHandler("guttermousedown",function(r){if(!t.isFocused()||r.getButton()!=0)return;var i=n.getRegion(r);if(i=="foldWidgets")return;var s=r.getDocumentPosition().row,o=t.session.selection;if(r.getShiftKey())o.selectTo(s,0);else{if(r.domEvent.detail==2)return t.selectAll(),r.preventDefault();e.$clickSelection=t.selection.getLineRange(s)}return e.setState("selectByLines"),e.captureMouse(r),r.preventDefault()});var o,u,f;e.editor.setDefaultHandler("guttermousemove",function(t){var n=t.domEvent.target||t.domEvent.srcElement;if(r.hasCssClass(n,"ace_fold-widget"))return c();f&&e.$tooltipFollowsMouse&&h(t),u=t;if(o)return;o=setTimeout(function(){o=null,u&&!e.isMousePressed?l():c()},50)}),s.addListener(t.renderer.$gutter,"mouseout",function(e){u=null;if(!f||o)return;o=setTimeout(function(){o=null,c()},50)}),t.on("changeSession",c)}function a(e){o.call(this,e)}var r=e("../lib/dom"),i=e("../lib/oop"),s=e("../lib/event"),o=e("../tooltip").Tooltip;i.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+i>n&&(e-=e+i-n),t+s>r&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=u}),define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";var r=e("../lib/event"),i=e("../lib/useragent"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos?this.$pos:(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)}),define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";function f(e){function T(e,n){var r=Date.now(),i=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!S||i||s)t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,S=r,x={x:p,y:d};else{var o=l(x.x,x.y,p,d);o>a?S=null:r-S>=u&&(t.renderer.scrollCursorIntoView(),S=null)}}function N(e,n){var r=Date.now(),i=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,u=t.renderer.scroller.getBoundingClientRect(),a={x:{left:p-u.left,right:u.right-p},y:{top:d-u.top,bottom:u.bottom-d}},f=Math.min(a.x.left,a.x.right),l=Math.min(a.y.top,a.y.bottom),c={row:e.row,column:e.column};f/s<=2&&(c.column+=a.x.left=o&&t.renderer.scrollCursorIntoView(c):E=r:E=null}function C(){var e=g;g=t.renderer.screenToTextCoordinates(p,d),T(g,e),N(g,e)}function k(){m=t.selection.toOrientedRange(),h=t.session.addMarker(m,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(v),C(),v=setInterval(C,20),y=0,i.addListener(document,"mousemove",O)}function L(){clearInterval(v),t.session.removeMarker(h),h=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(m),t.$blockScrolling-=1,t.isFocused()&&!w&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),m=null,g=null,y=0,E=null,S=null,i.removeListener(document,"mousemove",O)}function O(){A==null&&(A=setTimeout(function(){A!=null&&h&&L()},20))}function M(e){var t=e.types;return!t||Array.prototype.some.call(t,function(e){return e=="text/plain"||e=="Text"})}function _(e){var t=["copy","copymove","all","uninitialized"],n=["move","copymove","linkmove","all","uninitialized"],r=s.isMac?e.altKey:e.ctrlKey,i="uninitialized";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var o="none";return r&&t.indexOf(i)>=0?o="copy":n.indexOf(i)>=0?o="move":t.indexOf(i)>=0&&(o="copy"),o}var t=e.editor,n=r.createElement("img");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",s.isOpera&&(n.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;");var f=["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"];f.forEach(function(t){e[t]=this[t]},this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var c=t.container,h,p,d,v,m,g,y=0,b,w,E,S,x;this.onDragStart=function(e){if(this.cancelDrag||!c.draggable){var r=this;return setTimeout(function(){r.startSelect(),r.captureMouse(e)},0),e.preventDefault()}m=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?"copy":"copyMove",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),i.setDragImage&&i.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),i.clearData(),i.setData("Text",t.session.getTextRange()),w=!0,this.setState("drag")},this.onDragEnd=function(e){c.draggable=!1,w=!1,this.setState(null);if(!t.getReadOnly()){var n=e.dataTransfer.dropEffect;!b&&n=="move"&&t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||k(),y++,e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragOver=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||(k(),y++),A!==null&&(A=null),e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragLeave=function(e){y--;if(y<=0&&h)return L(),b=null,i.preventDefault(e)},this.onDrop=function(e){if(!g)return;var n=e.dataTransfer;if(w)switch(b){case"move":m.contains(g.row,g.column)?m={start:g,end:g}:m=t.moveText(m,g);break;case"copy":m=t.moveText(m,g,!0)}else{var r=n.getData("Text");m={start:g,end:t.session.insert(g,r)},t.focus(),b=null}return L(),i.preventDefault(e)},i.addListener(c,"dragstart",this.onDragStart.bind(e)),i.addListener(c,"dragend",this.onDragEnd.bind(e)),i.addListener(c,"dragenter",this.onDragEnter.bind(e)),i.addListener(c,"dragover",this.onDragOver.bind(e)),i.addListener(c,"dragleave",this.onDragLeave.bind(e)),i.addListener(c,"drop",this.onDrop.bind(e));var A=null}function l(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}var r=e("../lib/dom"),i=e("../lib/event"),s=e("../lib/useragent"),o=200,u=200,a=5;(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor,t=e.container;t.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var n=s.isWin?"default":"move";e.renderer.setCursorStyle(n),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;if(s.isIE&&this.state=="dragReady"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if(this.state==="dragWait"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(!this.$dragEnabled)return;this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),r=e.getButton(),i=e.domEvent.detail||1;if(i===1&&r===0&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var o=e.domEvent.target||e.domEvent.srcElement;"unselectable"in o&&(o.unselectable="on");if(t.getDragDelay()){if(s.isWebKit){this.cancelDrag=!0;var u=t.container;u.draggable=!0}this.setState("dragWait")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}).call(f.prototype),t.DragdropHandler=f}),define("ace/lib/net",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("./dom");t.get=function(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.onreadystatechange=function(){n.readyState===4&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=r.getDocumentHead(),i=document.createElement("script");i.src=e,n.appendChild(i),i.onload=i.onreadystatechange=function(e,n){if(n||!i.readyState||i.readyState=="loaded"||i.readyState=="complete")i=i.onload=i.onreadystatechange=null,n||t()}},t.qualifyURL=function(e){var t=document.createElement("a");return t.href=e,t.href}}),define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){"use strict";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o1&&(i=n[n.length-2]);var o=a[t+"Path"];return o==null?o=a.basePath:r=="/"&&(t=r=""),o&&o.slice(-1)!="/"&&(o+="/"),o+t+r+i+this.get("suffix")},t.setModuleUrl=function(e,t){return a.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,r){var i,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{i=e(n)}catch(u){}if(i&&!t.$loading[n])return r&&r(i);t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(r);if(t.$loading[n].length>1)return;var a=function(){e([n],function(e){t._emit("load.module",{name:n,module:e});var r=t.$loading[n];t.$loading[n]=null,r.forEach(function(t){t&&t(e)})})};if(!t.get("packaged"))return a();s.loadScript(t.moduleUrl(n,o),a)},t.init=f}),define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],function(e,t,n){"use strict";var r=e("../lib/event"),i=e("../lib/useragent"),s=e("./default_handlers").DefaultHandlers,o=e("./default_gutter_handler").GutterHandler,u=e("./mouse_event").MouseEvent,a=e("./dragdrop_handler").DragdropHandler,f=e("../config"),l=function(e){var t=this;this.editor=e,new s(this),new o(this),new a(this);var n=function(t){var n=!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement());n&&window.focus(),e.focus()},u=e.renderer.getMouseEventTarget();r.addListener(u,"click",this.onMouseEvent.bind(this,"click")),r.addListener(u,"mousemove",this.onMouseMove.bind(this,"mousemove")),r.addMultiMouseDownListener([u,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,"onMouseEvent"),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel")),r.addTouchMoveListener(e.container,this.onTouchMove.bind(this,"touchmove"));var f=e.renderer.$gutter;r.addListener(f,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),r.addListener(f,"click",this.onMouseEvent.bind(this,"gutterclick")),r.addListener(f,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),r.addListener(f,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),r.addListener(u,"mousedown",n),r.addListener(f,"mousedown",n),i.isIE&&e.renderer.scrollBarV&&(r.addListener(e.renderer.scrollBarV.element,"mousedown",n),r.addListener(e.renderer.scrollBarH.element,"mousedown",n)),e.on("mousemove",function(n){if(t.state||t.$dragDelay||!t.$dragEnabled)return;var r=e.renderer.screenToTextCoordinates(n.x,n.y),i=e.session.selection.getRange(),s=e.renderer;!i.isEmpty()&&i.insideStart(r.row,r.column)?s.setCursorStyle("default"):s.setCursorStyle("")})};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new u(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!n||!n.length)return;this.editor._emit(e,new u(t,this.editor))},this.onMouseWheel=function(e,t){var n=new u(t,this.editor);n.speed=this.$scrollSpeed*2,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.onTouchMove=function(e,t){var n=new u(t,this.editor);n.speed=1,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor.renderer;n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=null);var s=this,o=function(e){if(!e)return;if(i.isWebKit&&!e.which&&s.releaseMouse)return s.releaseMouse();s.x=e.clientX,s.y=e.clientY,t&&t(e),s.mouseEvent=new u(e,s.editor),s.$mouseMoved=!0},a=function(e){clearInterval(l),f(),s[s.state+"End"]&&s[s.state+"End"](e),s.state="",n.$keepTextAreaAtCursor==null&&(n.$keepTextAreaAtCursor=!0,n.$moveTextAreaToCursor()),s.isMousePressed=!1,s.$onCaptureMouseMove=s.releaseMouse=null,e&&s.onMouseEvent("mouseup",e)},f=function(){s[s.state]&&s[s.state](),s.$mouseMoved=!1};if(i.isOldIE&&e.domEvent.type=="dblclick")return setTimeout(function(){a(e)});s.$onCaptureMouseMove=o,s.releaseMouse=r.capture(this.editor.container,o,a);var l=setInterval(f,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){if(t&&t.domEvent&&t.domEvent.type!="contextmenu")return;this.editor.off("nativecontextmenu",e),t&&t.domEvent&&r.stopEvent(t.domEvent)}.bind(this);setTimeout(e,10),this.editor.on("nativecontextmenu",e)}}).call(l.prototype),f.defineOptions(l.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=l}),define("ace/mouse/fold_handler",["require","exports","module"],function(e,t,n){"use strict";function r(e){e.on("click",function(t){var n=t.getDocumentPosition(),r=e.session,i=r.getFoldAt(n.row,n.column,1);i&&(t.getAccelKey()?r.removeFold(i):r.expandFold(i),t.stop())}),e.on("gutterclick",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session;i.foldWidgets&&i.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),e.isFocused()||e.focus(),t.stop()}}),e.on("gutterdblclick",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session,s=i.getParentFoldRangeData(r,!0),o=s.range||s.firstRange;if(o){r=o.start.row;var u=i.getFoldAt(r,i.getLine(r).length,1);u?i.removeFold(u):(i.addFold("...",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}})}t.FoldHandler=r}),define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],function(e,t,n){"use strict";var r=e("../lib/keys"),i=e("../lib/event"),s=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]==e)return;while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)},this.addKeyboardHandler=function(e,t){if(!e)return;typeof e=="function"&&!e.handleKeyboard&&(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);n!=-1&&this.$handlers.splice(n,1),t==undefined?this.$handlers.push(e):this.$handlers.splice(t,0,e),n==-1&&e.attach&&e.attach(this.$editor)},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return t==-1?!1:(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map(function(n){return n.getStatusText&&n.getStatusText(t,e)||""}).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(e,t,n,r){var s,o=!1,u=this.$editor.commands;for(var a=this.$handlers.length;a--;){s=this.$handlers[a].handleKeyboard(this.$data,e,t,n,r);if(!s||!s.command)continue;s.command=="null"?o=!0:o=u.exec(s.command,this.$editor,s.args,r),o&&r&&e!=-1&&s.passEvent!=1&&s.command.passEvent!=1&&i.stopEvent(r);if(o)break}return!o&&e==-1&&(s={command:"insertstring"},o=u.exec("insertstring",this.$editor,t)),o&&this.$editor._signal&&this.$editor._signal("keyboardActivity",s),o},this.onCommandKey=function(e,t,n){var i=r.keyCodeToString(n);this.$callKeyboardHandlers(t,i,n,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(s.prototype),t.KeyBinding=s}),define("ace/range",["require","exports","module"],function(e,t,n){"use strict";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?tthis.end.column?1:0:ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var r={row:t+1,column:0};else if(this.start.rowt.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(typeof t=="undefined"){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n=typeof e=="number"?e:this.lead.row,r,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,t===!0?new o(n,0,r,this.session.getLine(r).length):new o(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(e.column===0)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var n=this.session.getTabSize();this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(e.column-n,e.column).split(" ").length-1==n?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=r)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var s=this.session.getFoldAt(e,t,1);if(s){this.moveCursorTo(s.end.row,s.end.column);return}if(i=this.session.nonTokenRe.exec(r))t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t);if(t>=n.length){this.moveCursorTo(e,n.length),this.moveCursorRight(),e0&&this.moveCursorWordLeft();return}if(o=this.session.tokenRe.exec(s))t-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(e,t)},this.$shortWordEndIndex=function(e){var t,n=0,r,i=/\s/,s=this.session.tokenRe;s.lastIndex=0;if(t=this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{while((r=e[n])&&i.test(r))n++;if(n<1){s.lastIndex=0;while((r=e[n])&&!s.test(r)){s.lastIndex=0,n++;if(i.test(r)){if(n>2){n--;break}while((r=e[n])&&i.test(r))n++;if(n>2)break}}}}return s.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==n.length){var s=this.doc.getLength();do e++,r=this.doc.getLine(e);while(e0&&/^\s*$/.test(r));t=r.length,/\s+$/.test(r)||(r="")}var s=i.stringReverse(r),o=this.$shortWordEndIndex(s);return this.moveCursorTo(e,t-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column);t===0&&(this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var r=this.session.screenToDocumentPosition(n.row+e,n.column);e!==0&&t===0&&r.row===this.lead.row&&r.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[r.row]&&(r.row>0||e>0)&&r.row++,this.moveCursorTo(r.row,r.column+t,t===0)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0,this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return o.fromPoints(t,n)}catch(r){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else{var e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(e.start==undefined){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(u.prototype),t.Selection=u}),define("ace/tokenizer",["require","exports","module","ace/config"],function(e,t,n){"use strict";var r=e("./config"),i=2e3,s=function(e){this.states=e,this.regExps={},this.matchMappings={};for(var t in this.states){var n=this.states[t],r=[],i=0,s=this.matchMappings[t]={defaultToken:"text"},o="g",u=[];for(var a=0;a1?f.onMatch=this.$applyToken:f.onMatch=f.token),c>1&&(/\\\d/.test(f.regex)?l=f.regex.replace(/\\([0-9]+)/g,function(e,t){return"\\"+(parseInt(t,10)+i+1)}):(c=1,l=this.removeCapturingGroups(f.regex)),!f.splitRegex&&typeof f.token!="string"&&u.push(f)),s[i]=a,i+=c,r.push(l),f.onMatch||(f.onMatch=null)}r.length||(s[0]=0,r.push("$")),u.forEach(function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)},this),this.regExps[t]=new RegExp("("+r.join(")|(")+")|($)",o)}};(function(){this.$setMaxTokenCount=function(e){i=e|0},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(typeof n=="string")return[{type:n,value:e}];var r=[];for(var i=0,s=n.length;il){var g=e.substring(l,m-v.length);h.type==p?h.value+=g:(h.type&&f.push(h),h={type:p,value:g})}for(var y=0;yi){c>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});while(l1&&n[0]!==r&&n.unshift("#tmp",r),{tokens:f,state:n.length?n:r}},this.reportError=r.reportError}).call(s.prototype),t.Tokenizer=s}),define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../lib/lang"),i=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(!t){for(var n in e)this.$rules[n]=e[n];return}for(var n in e){var r=e[n];for(var i=0;i=this.$rowTokens.length){this.$row+=1,e||(e=this.$session.getLength());if(this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(n!==undefined)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}}}).call(r.prototype),t.TokenIterator=r}),define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return h(a,l,"{","}");if(p.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(p.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var d=u.substring(s.column,s.column+1);if(d=="}"){var v=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var m="";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat("}",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d==="}"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:"\n"+b+"\n"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return h(s,o,"(",")");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return h(s,o,"[","]");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){if(this.lineCommentStart&&this.lineCommentStart.indexOf(i)!=-1)return;c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g,y&&/string\.end/.test(v.type)&&(y=!1);else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\s;,.})\]\\]/.test(p))return null;y=!0}return{text:y?s+s:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),define("ace/unicode",["require","exports","module"],function(e,t,n){"use strict";function r(e){var n=/\w{4}/g;for(var r in e)t.packages[r]=e[r].replace(n,"\\u$&")}t.packages={},r({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Ll:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",Lo:"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048906DE20DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",So:"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"})}),define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour/cstyle","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"],function(e,t,n){"use strict";var r=e("../tokenizer").Tokenizer,i=e("./text_highlight_rules").TextHighlightRules,s=e("./behaviour/cstyle").CstyleBehaviour,o=e("../unicode"),u=e("../lib/lang"),a=e("../token_iterator").TokenIterator,f=e("../range").Range,l=function(){this.HighlightRules=i};(function(){this.$defaultBehaviour=new s,this.tokenRe=new RegExp("^["+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+"\\$_]|\\s])+","g"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules(this.$highlightRuleConfig),this.$tokenizer=new r(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart="",this.blockComment="",this.toggleCommentLines=function(e,t,n,r){function w(e){for(var t=n;t<=r;t++)e(i.getLine(t),t)}var i=t.doc,s=!0,o=!0,a=Infinity,f=t.getTabSize(),l=!1;if(!this.lineCommentStart){if(!this.blockComment)return!1;var c=this.blockComment.start,h=this.blockComment.end,p=new RegExp("^(\\s*)(?:"+u.escapeRegExp(c)+")"),d=new RegExp("(?:"+u.escapeRegExp(h)+")\\s*$"),v=function(e,t){if(g(e,t))return;if(!s||/\S/.test(e))i.insertInLine({row:t,column:e.length},h),i.insertInLine({row:t,column:a},c)},m=function(e,t){var n;(n=e.match(d))&&i.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(p))&&i.removeInLine(t,n[1].length,n[0].length)},g=function(e,n){if(p.test(e))return!0;var r=t.getTokens(n);for(var i=0;i2?r%f!=f-1:r%f==0}}var E=Infinity;w(function(e,t){var n=e.search(/\S/);n!==-1?(ne.length&&(E=e.length)}),a==Infinity&&(a=E,s=!1,o=!1),l&&a%f!=0&&(a=Math.floor(a/f)*f),w(o?m:v)},this.toggleBlockComment=function(e,t,n,r){var i=this.blockComment;if(!i)return;!i.start&&i[0]&&(i=i[0]);var s=new a(t,r.row,r.column),o=s.getCurrentToken(),u=t.selection,l=t.selection.toOrientedRange(),c,h;if(o&&/comment/.test(o.type)){var p,d;while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.start);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;p=new f(m,g,m,g+i.start.length);break}o=s.stepBackward()}var s=new a(t,r.row,r.column),o=s.getCurrentToken();while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.end);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;d=new f(m,g,m,g+i.end.length);break}o=s.stepForward()}d&&t.remove(d),p&&(t.remove(p),c=p.start.row,h=-i.start.length)}else h=i.start.length,c=n.start.row,t.insert(n.end,i.end),t.insert(n.start,i.start);l.start.row==c&&(l.start.column+=h),l.end.row==c&&(l.end.column+=h),t.selection.fromOrientedRange(l)},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){this.$embeds=[],this.$modes={};for(var t in e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var n=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(var t=0;t=0&&t.row=0&&t.column<=e[t.row].length}function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.action must be 'insert' or 'remove'"),t.lines instanceof Array||r(t,"delta.lines must be an Array"),(!t.start||!t.end)&&r(t,"delta.start/end must be an present");var n=t.start;i(e,t.start)||r(t,"delta.start must be contained in document");var s=t.end;t.action=="remove"&&!i(e,s)&&r(t,"delta.end must contained in document for 'remove' actions");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,"delta.range must match delta lines")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||"";switch(t.action){case"insert":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case"remove":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n=="undefined"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.columnthis.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal("change",{old:i,value:r})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./apply_delta").applyDelta,s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,u=e("./anchor").Anchor,a=function(e){this.$lines=[""],e.length===0?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},"aaa".split(/a/).length===0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal("changeNewLineMode")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:"insert",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e0,r=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action=="insert";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal("change",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(""),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action=="insert"?"remove":"insert",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,s<=r&&n.fireUpdateEvent(s,r)}};(function(){r.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal("update",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.lines[t]=null;else if(e.action=="remove")this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.lines.splice.apply(this.lines,r),this.states.splice.apply(this.states,r)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],r=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+""!=r.state+""?(this.states[e]=r.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=r.tokens}}).call(s.prototype),t.BackgroundTokenizer=s}),define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){"use strict";var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){if(this.regExp+""==e+"")return;this.regExp=e,this.cache=[]},this.update=function(e,t,n,i){if(!this.regExp)return;var o=i.firstRow,u=i.lastRow;for(var a=o;a<=u;a++){var f=this.cache[a];f==null&&(f=r.getMatchOffsets(n.getLine(a),this.regExp),f.length>this.MAX_RANGES&&(f=f.slice(0,this.MAX_RANGES)),f=f.map(function(e){return new s(a,e.offset,a,e.offset+e.length)}),this.cache[a]=f.length?f:"");for(var l=f.length;l--;)t.drawSingleLineMarker(e,f[l].toScreenRange(n),this.clazz,i)}}}).call(o.prototype),t.SearchHighlight=o}),define("ace/edit_session/fold_line",["require","exports","module","ace/range"],function(e,t,n){"use strict";function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new r(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}var r=e("../range").Range;(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r=0,i=this.folds,s,o,u,a=!0;t==null&&(t=this.end.row,n=this.end.column);for(var f=0;f0)continue;var a=i(e,o.start);return u===0?t&&a!==0?-s-2:s:a>0||a===0&&!t?s:-s-1}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var r=this.pointIndex(e.end,t,n);return r<0?r=-r-1:r++,this.ranges.splice(n,r-n,e)},this.addList=function(e){var t=[];for(var n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort(function(e,t){return i(e.start,t.start)});var n=t[0],r;for(var s=1;s=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.rowr)break;l.start.row==r&&l.start.column>=t.column&&(l.start.column!=t.column||!this.$insertRight)&&(l.start.column+=o,l.start.row+=s);if(l.end.row==r&&l.end.column>=t.column){if(l.end.column==t.column&&this.$insertRight)continue;l.end.column==t.column&&o>0&&al.start.column&&l.end.column==u[a+1].start.column&&(l.end.column-=o),l.end.column+=o,l.end.row+=s}}if(s!=0&&a=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r=e)return i}return null},this.getFoldedRowCount=function(e,t){var n=this.$foldData,r=t-e+1;for(var i=0;i=t){u=e?r-=t-u:r=0);break}o>=e&&(u>=e?r-=o-u:r-=o-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var n=this.$foldData,r=!1,o;e instanceof s?o=e:(o=new s(t,e),o.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(o.range);var u=o.start.row,a=o.start.column,f=o.end.row,l=o.end.column;if(u0&&(this.removeFolds(p),p.forEach(function(e){o.addSubFold(e)}));for(var d=0;d0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var n,i;e==null?(n=new r(0,0,this.getLength(),0),t=!0):typeof e=="number"?n=new r(e,0,e,this.getLine(e).length):"row"in e?n=r.fromPoints(e,e):n=e,i=this.getFoldsInRangeList(n);if(t)this.removeFolds(i);else{var s=i;while(s.length)this.expandFolds(s),s=this.getFoldsInRangeList(n)}if(i.length)return i},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,r,i){r==null&&(r=e.start.row),i==null&&(i=0),t==null&&(t=e.end.row),n==null&&(n=this.getLine(t).length);var s=this.doc,o="";return e.walk(function(e,t,n,u){if(t=e){i=s.end.row;try{var o=this.addFold("...",s);o&&(o.collapseChildren=n)}catch(u){}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle==e)return;this.$foldStyle=e,e=="manual"&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)},this.$setFolding=function(e){if(this.$foldMode==e)return;this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation");if(!e||this.$foldStyle=="manual"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var r=e-1,i;while(r>=0){var s=n[r];s==null&&(s=n[r]=this.getFoldWidget(r));if(s=="start"){var o=this.getFoldWidgetRange(r);i||(i=o);if(o&&o.end.row>=e)break}r--}return{range:r!==-1&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},r=this.$toggleFoldWidget(e,n);if(!r){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(!this.getFoldWidget)return;var n=this.getFoldWidget(e),r=this.getLine(e),i=n==="end"?-1:1,s=this.getFoldAt(e,i===-1?0:r.length,i);if(s)return t.children||t.all?this.removeFold(s):this.expandFold(s),s;var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()){s=this.getFoldAt(o.start.row,o.start.column,1);if(s&&o.isEqual(s.range))return this.removeFold(s),s}if(t.siblings){var u=this.getParentFoldRangeData(e);if(u.range)var a=u.range.start.row+1,f=u.range.end.row;this.foldAll(a,f,t.all?1e4:0)}else t.children?(f=o?o.end.row:this.getLength(),this.foldAll(e+1,f,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold("...",o));return o},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(n)return;var r=this.getParentFoldRangeData(t,!0);n=r.range||r.firstRange;if(n){t=n.start.row;var i=this.getFoldAt(t,this.getLine(t).length,1);i?this.removeFold(i):this.addFold("...",n)}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.foldWidgets[t]=null;else if(e.action=="remove")this.foldWidgets.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,r)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}var r=e("../range").Range,i=e("./fold_line").FoldLine,s=e("./fold").Fold,o=e("../token_iterator").TokenIterator;t.Folding=u}),define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],function(e,t,n){"use strict";function s(){this.findMatchingBracket=function(e,t){if(e.column==0)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(n=="")return null;var r=n.match(/([\(\[\{])|([\)\]\}])/);return r?r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e):null},this.getBracketRange=function(e){var t=this.getLine(e.row),n=!0,r,s=t.charAt(e.column-1),o=s&&s.match(/([\(\[\{])|([\)\]\}])/);o||(s=t.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\(\[\{])|([\)\]\}])/),n=!1);if(!o)return null;if(o[1]){var u=this.$findClosingBracket(o[1],e);if(!u)return null;r=i.fromPoints(e,u),n||(r.end.column++,r.start.column--),r.cursor=r.end}else{var u=this.$findOpeningBracket(o[2],e);if(!u)return null;r=i.fromPoints(u,e),n||(r.start.column++,r.end.column--),r.cursor=r.start}return r},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));var a=t.column-o.getCurrentTokenColumn()-2,f=u.value;for(;;){while(a>=0){var l=f.charAt(a);if(l==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else l==e&&(s+=1);a-=1}do u=o.stepBackward();while(u&&!n.test(u.type));if(u==null)break;f=u.value,a=f.length-1}return null},this.$findClosingBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));var a=t.column-o.getCurrentTokenColumn();for(;;){var f=u.value,l=f.length;while(a=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510}r.implement(this,o),this.setDocument=function(e){this.doc&&this.doc.removeListener("change",this.$onChange),this.doc=e,e.on("change",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e){this.$docRowCache=[],this.$screenRowCache=[];return}var t=this.$docRowCache.length,n=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>n&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,r=e.length-1;while(n<=r){var i=n+r>>1,s=e[i];if(t>s)n=i+1;else{if(!(t=t)break}return r=n[s],r?(r.index=s,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel();if(e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:"fold",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:"doc",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:"aceupdate",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(" ",this.getTabSize()):" "},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(r=!!n.charAt(t-1).match(this.tokenRe)),r||(r=!!n.charAt(t).match(this.tokenRe));if(r)var i=this.tokenRe;else if(/^\s+$/.test(n.slice(t-1,t+1)))var i=/\s/;else var i=this.nonTokenRe;var s=t;if(s>0){do s--;while(s>=0&&n.charAt(s).match(i));s++}var o=t;while(oe&&(e=t.screenWidth)}),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){this.$modified=!1;if(this.$useWrapMode)return this.screenWidth=this.$wrapLimit;var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,i=0,s=this.$foldData[i],o=s?s.start.row:Infinity,u=t.length;for(var a=0;ao){a=s.end.row+1;if(a>=u)break;s=this.$foldData[i++],o=s?s.start.row:Infinity}n[a]==null&&(n[a]=this.$getStringScreenWidth(t[a])[0]),n[a]>r&&(r=n[a])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=e.length-1;r!=-1;r--){var i=e[r];i.group=="doc"?(this.doc.revertDeltas(i.deltas),n=this.$getUndoSelection(i.deltas,!0,n)):i.deltas.forEach(function(e){this.addFolds(e.folds)},this)}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n},this.redoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=0;re.end.column&&(s.start.column+=u),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=u)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}s.end=this.insert(s.start,r);if(i.length){var a=e.start,l=s.start,o=l.row-a.row,u=l.column-a.column;this.addFolds(i.map(function(e){return e=e.clone(),e.start.row==a.row&&(e.start.column+=u),e.end.row==a.row&&(e.end.column+=u),e.start.row+=o,e.end.row+=o,e}))}return s},this.indentRows=function(e,t,n){n=n.replace(/\t/g,this.getTabString());for(var r=e;r<=t;r++)this.doc.insertInLine({row:r,column:0},n)},this.outdentRows=function(e){var t=e.collapseRows(),n=new f(0,0,0,0),r=this.getTabSize();for(var i=t.start.row;i<=t.end.row;++i){var s=this.getLine(i);n.start.row=i,n.end.row=i;for(var o=0;o0){var r=this.getRowFoldEnd(t+n);if(r>this.doc.getLength()-1)return 0;var i=r-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);var i=t-e+1}var s=new f(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map(function(e){return e=e.clone(),e.start.row+=i,e.end.row+=i,e}),u=n==0?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+i,u),o.length&&this.addFolds(o),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){t=Math.max(0,t);if(e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0);if(e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){if(this.$wrapLimitRange.min!==e||this.$wrapLimitRange.max!==t)this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$useWrapMode&&this._signal("changeWrapMode")},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var r=this.$constrainWrapLimit(e,n.min,n.max);return r!=this.$wrapLimit&&r>1?(this.$wrapLimit=r,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0):!1},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=null;this.$updating=!0;if(u!=0)if(n==="remove"){this[t?"$wrapData":"$rowLengthCache"].splice(s,u);var f=this.$foldData;a=this.getFoldsInRange(e),this.removeFolds(a);var l=this.getFoldLine(i.row),c=0;if(l){l.addRemoveChars(i.row,i.column,r.column-i.column),l.shiftRow(-u);var h=this.getFoldLine(s);h&&h!==l&&(h.merge(l),l=h),c=f.indexOf(l)+1}for(c;c=i.row&&l.shiftRow(-u)}o=s}else{var p=Array(u);p.unshift(s,0);var d=t?this.$wrapData:this.$rowLengthCache;d.splice.apply(d,p);var f=this.$foldData,l=this.getFoldLine(s),c=0;if(l){var v=l.range.compareInside(r.row,r.column);v==0?(l=l.split(r.row,r.column),l&&(l.shiftRow(u),l.addRemoveChars(o,0,i.column-r.column))):v==-1&&(l.addRemoveChars(s,0,i.column-r.column),l.shiftRow(u)),c=f.indexOf(l)+1}for(c;c=s&&l.shiftRow(u)}}else{u=Math.abs(e.start.column-e.end.column),n==="remove"&&(a=this.getFoldsInRange(e),this.removeFolds(a),u=-u);var l=this.getFoldLine(s);l&&l.addRemoveChars(s,r.column,u)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(s,o):this.$updateRowLengthCache(s,o),a},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var r=this.doc.getAllLines(),i=this.getTabSize(),s=this.$wrapData,o=this.$wrapLimit,a,f,l=e;t=Math.min(t,r.length-1);while(l<=t)f=this.getFoldLine(l,f),f?(a=[],f.walk(function(e,t,i,s){var o;if(e!=null){o=this.$getDisplayTokens(e,a.length),o[0]=n;for(var f=1;fr-b){var w=a+r-b;if(e[w-1]>=p&&e[w]>=p){y(w);continue}if(e[w]==n||e[w]==u){for(w;w!=a-1;w--)if(e[w]==n)break;if(w>a){y(w);continue}w=a+r;for(w;w>2)),a-1);while(w>E&&e[w]E&&e[w]E&&e[w]==l)w--}else while(w>E&&e[w]E){y(++w);continue}w=a+r,e[w]==t&&w--,y(w-b)}return s},this.$getDisplayTokens=function(n,r){var i=[],s;r=r||0;for(var o=0;o39&&u<48||u>57&&u<64?i.push(l):u>=4352&&m(u)?i.push(e,t):i.push(e)}return i},this.$getStringScreenWidth=function(e,t,n){if(t==0)return[0,0];t==null&&(t=Infinity),n=n||0;var r,i;for(i=0;i=4352&&m(r)?n+=2:n+=1;if(n>t)break}return[n,i]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.getRowLineCount=function(e){return!this.$useWrapMode||!this.$wrapData[e]?1:this.$wrapData[e].length+1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]=0)var o=a[f],r=this.$docRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getLength()-1,p=this.getNextFoldLine(r),d=p?p.start.row:Infinity;while(o<=e){u=this.getRowLength(r);if(o+u>e||r>=h)break;o+=u,r++,r>d&&(r=p.end.row+1,p=this.getNextFoldLine(r,p),d=p?p.start.row:Infinity),c&&(this.$docRowCache.push(r),this.$screenRowCache.push(o))}if(p&&p.start.row<=r)n=this.getFoldDisplayLine(p),r=p.start.row;else{if(o+u<=e||r>h)return{row:h,column:this.getLine(h).length};n=this.getLine(r),p=null}var v=0;if(this.$useWrapMode){var m=this.$wrapData[r];if(m){var g=Math.floor(e-o);s=m[g],g>0&&m.length&&(v=m.indent,i=m[g-1]||m[m.length-1],n=n.substring(i))}}return i+=this.$getStringScreenWidth(n,t-v)[1],this.$useWrapMode&&i>=s&&(i=s-1),p?p.idxToPosition(i):{row:r,column:i}},this.documentToScreenPosition=function(e,t){if(typeof t=="undefined")var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var r=0,i=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var o,u=0,a=this.$docRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var u=a[f],r=this.$screenRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getNextFoldLine(u),p=h?h.start.row:Infinity;while(u=p){o=h.end.row+1;if(o>e)break;h=this.getNextFoldLine(o,h),p=h?h.start.row:Infinity}else o=u+1;r+=this.getRowLength(u),u=o,c&&(this.$docRowCache.push(u),this.$screenRowCache.push(r))}var d="";h&&u>=p?(d=this.getFoldDisplayLine(h,e,t),i=h.start.row):(d=this.getLine(e).substring(0,t),i=e);var v=0;if(this.$useWrapMode){var m=this.$wrapData[i];if(m){var g=0;while(d.length>=m[g])r++,g++;d=d.substring(m[g-1]||0,d.length),v=g>0?m.indent:0}}return{row:r,column:v+this.$getStringScreenWidth(d)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(!this.$useWrapMode){e=this.getLength();var n=this.$foldData;for(var r=0;ro&&(s=t.end.row+1,t=this.$foldData[r++],o=t?t.start.row:Infinity)}}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){if(!this.$enableVarChar)return;this.$getStringScreenWidth=function(t,n,r){if(n===0)return[0,0];n||(n=Infinity),r=r||0;var i,s;for(s=0;sn)break}return[r,s]}},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()}}).call(p.prototype),e("./edit_session/folding").Folding.call(p.prototype),e("./edit_session/bracket_match").BracketMatch.call(p.prototype),s.defineOptions(p.prototype,"session",{wrap:{set:function(e){!e||e=="off"?e=!1:e=="free"?e=!0:e=="printMargin"?e=-1:typeof e=="string"&&(e=parseInt(e,10)||!1);if(this.$wrap==e)return;this.$wrap=e;if(!e)this.setUseWrapMode(!1);else{var t=typeof e=="number"?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}},get:function(){return this.getUseWrapMode()?this.$wrap==-1?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){e=e=="auto"?this.$mode.type!="text":e!="text",e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:"auto"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){if(isNaN(e)||this.$tabSize===e)return;this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize")},initialValue:4,handlesSet:!0},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=p}),define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){"use strict";function u(e,t){function n(e){return/\w/.test(e)||t.regExp?"\\b":""}return n(e[0])+e+n(e[e.length-1])}var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var r=null;return n.forEach(function(e,n,i){if(!e.start){var o=e.offset+(i||0);r=new s(n,o,n,o+e.length);if(!e.length&&t.start&&t.start.start&&t.skipCurrent!=0&&r.isEqual(t.start))return r=null,!1}else r=e;return!0}),r},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,i=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],u=t.re;if(t.$isMultiLine){var a=u.length,f=i.length-a,l;e:for(var c=u.offset||0;c<=f;c++){for(var h=0;hv)continue;o.push(l=new s(c,v,c+a-1,m)),a>2&&(c=c+a-2)}}else for(var g=0;gE&&o[h].end.row==n.end.row)h--;o=o.slice(g,h+1);for(g=0,h=o.length;g=0;u--)if(i(o[u],t,s))return!0};else var u=function(e,t,s){var o=r.getMatchOffsets(e,n);for(var u=0;u=o;r--)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=u,o=s.row;r>=o;r--)if(n(e.getLine(r),r))return}:function(n){var r=s.row,i=e.getLine(r).substr(s.column);if(n(i,r,s.column))return;for(r+=1;r<=u;r++)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=o,u=s.row;r<=u;r++)if(n(e.getLine(r),r))return};return{forEach:a}}}).call(o.prototype),t.Search=o}),define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,n){"use strict";function o(e,t){this.platform=t||(i.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function u(e,t){o.call(this,e,t),this.$singleCommand=!1}var r=e("../lib/keys"),i=e("../lib/useragent"),s=r.KEY_MODS;u.prototype=o.prototype,function(){function e(e){return typeof e=="object"&&e.bindKey&&e.bindKey.position||0}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&(typeof e=="string"?e:e.name);e=this.commands[n],t||delete this.commands[n];var r=this.commandKeyBinding;for(var i in r){var s=r[i];if(s==e)delete r[i];else if(Array.isArray(s)){var o=s.indexOf(e);o!=-1&&(s.splice(o,1),s.length==1&&(r[i]=s[0]))}}},this.bindKey=function(e,t,n){typeof e=="object"&&e&&(n==undefined&&(n=e.position),e=e[this.platform]);if(!e)return;if(typeof t=="function")return this.addCommand({exec:t,bindKey:e,name:t.name||e});e.split("|").forEach(function(e){var r="";if(e.indexOf(" ")!=-1){var i=e.split(/\s+/);e=i.pop(),i.forEach(function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;r+=(r?" ":"")+n,this._addCommandToBinding(r,"chainKeys")},this),r+=" "}var o=this.parseKeys(e),u=s[o.hashId]+o.key;this._addCommandToBinding(r+u,t,n)},this)},this._addCommandToBinding=function(t,n,r){var i=this.commandKeyBinding,s;if(!n)delete i[t];else if(!i[t]||this.$singleCommand)i[t]=n;else{Array.isArray(i[t])?(s=i[t].indexOf(n))!=-1&&i[t].splice(s,1):i[t]=[i[t]],typeof r!="number"&&(r||n.isDefault?r=-100:r=e(n));var o=i[t];for(s=0;sr)break}o.splice(s,0,n)}},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var n=e[t];if(!n)return;if(typeof n=="string")return this.bindKey(n,t);typeof n=="function"&&(n={exec:n});if(typeof n!="object")return;n.name||(n.name=t),this.addCommand(n)},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(e){return e}),n=t.pop(),i=r[n];if(r.FUNCTION_KEYS[i])n=r.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(t.length==1&&t[0]=="shift")return{key:n.toUpperCase(),hashId:-1}}var s=0;for(var o=t.length;o--;){var u=r.KEY_MODS[t[o]];if(u==null)return typeof console!="undefined"&&console.error("invalid modifier "+t[o]+" in "+e),!1;s|=u}return{key:n,hashId:s}},this.findKeyCommand=function(t,n){var r=s[t]+n;return this.commandKeyBinding[r]},this.handleKeyboard=function(e,t,n,r){if(r<0)return;var i=s[t]+n,o=this.commandKeyBinding[i];e.$keyChain&&(e.$keyChain+=" "+i,o=this.commandKeyBinding[e.$keyChain]||o);if(o)if(o=="chainKeys"||o[o.length-1]=="chainKeys")return e.$keyChain=e.$keyChain||i,{command:"null"};if(e.$keyChain)if(!!t&&t!=4||n.length!=1){if(t==-1||r>0)e.$keyChain=""}else e.$keyChain=e.$keyChain.slice(0,-i.length-1);return{command:o}},this.getStatusText=function(e,t){return t.$keyChain||""}}.call(o.prototype),t.HashHandler=o,t.MultiHashHandler=u}),define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../keyboard/hash_handler").MultiHashHandler,s=e("../lib/event_emitter").EventEmitter,o=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",function(e){return e.command.exec(e.editor,e.args||{})})};r.inherits(o,i),function(){r.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var r=e.length;r--;)if(this.exec(e[r],t,n))return!0;return!1}typeof e=="string"&&(e=this.commands[e]);if(!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;var i={editor:t,command:e,args:n};return i.returnValue=this._emit("exec",i),this._signal("afterExec",i),i.returnValue===!1?!1:!0},this.toggleRecording=function(e){if(this.$inReplay)return;return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){typeof t=="string"?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(e){return e.map(function(e){return typeof e[0]!="string"&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(o.prototype),t.CommandManager=o}),define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],function(e,t,n){"use strict";function o(e,t){return{win:e,mac:t}}var r=e("../lib/lang"),i=e("../config"),s=e("../range").Range;t.commands=[{name:"showSettingsMenu",bindKey:o("Ctrl-,","Command-,"),exec:function(e){i.loadModule("ace/ext/settings_menu",function(t){t.init(e),e.showSettingsMenu()})},readOnly:!0},{name:"goToNextError",bindKey:o("Alt-E","F4"),exec:function(e){i.loadModule("ace/ext/error_marker",function(t){t.showErrorMarker(e,1)})},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:o("Alt-Shift-E","Shift-F4"),exec:function(e){i.loadModule("ace/ext/error_marker",function(t){t.showErrorMarker(e,-1)})},scrollIntoView:"animate",readOnly:!0},{name:"selectall",bindKey:o("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",bindKey:o(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:o("Ctrl-L","Command-L"),exec:function(e){var t=parseInt(prompt("Enter line number:"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:"fold",bindKey:o("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:o("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:o("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:o("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",bindKey:o(null,"Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",bindKey:o("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",bindKey:o("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",bindKey:o("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",bindKey:o("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",bindKey:o("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",bindKey:o("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",bindKey:o("Ctrl-F","Command-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e)})},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:o("Ctrl-Shift-Home","Command-Shift-Home|Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",bindKey:o("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",bindKey:o("Shift-Up","Shift-Up|Ctrl-Shift-P"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",bindKey:o("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",bindKey:o("Ctrl-Shift-End","Command-Shift-End|Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",bindKey:o("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",bindKey:o("Shift-Down","Shift-Down|Ctrl-Shift-N"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",bindKey:o("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",bindKey:o("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",bindKey:o("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",bindKey:o("Alt-Shift-Left","Command-Shift-Left|Ctrl-Shift-A"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",bindKey:o("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",bindKey:o("Shift-Left","Shift-Left|Ctrl-Shift-B"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",bindKey:o("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",bindKey:o("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",bindKey:o("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",bindKey:o("Alt-Shift-Right","Command-Shift-Right|Shift-End|Ctrl-Shift-E"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",bindKey:o("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",bindKey:o("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",bindKey:o("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:o(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:o("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:o(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:o("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:o("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",bindKey:o("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",bindKey:o("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",bindKey:o("Ctrl-P","Ctrl-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",bindKey:o("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",bindKey:o("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",bindKey:o(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",exec:function(e){},readOnly:!0},{name:"cut",exec:function(e){var t=e.getSelectionRange();e._emit("cut",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:"cursor"},{name:"removeline",bindKey:o("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",bindKey:o("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",bindKey:o("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",bindKey:o("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",bindKey:o("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",bindKey:o("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:o("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",bindKey:o("Ctrl-H","Command-Option-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e,!0)})}},{name:"undo",bindKey:o("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",bindKey:o("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",bindKey:o("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",bindKey:o("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",bindKey:o("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",bindKey:o("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",bindKey:o("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",bindKey:o("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",bindKey:o("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",bindKey:o("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",bindKey:o("Alt-Delete","Ctrl-K"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",bindKey:o("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",bindKey:o("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",bindKey:o("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",bindKey:o("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",bindKey:o("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",bindKey:o("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",exec:function(e,t){e.insert(r.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",bindKey:o(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",bindKey:o("Ctrl-T","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",bindKey:o("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",bindKey:o("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",bindKey:o("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",bindKey:o(null,null),exec:function(e){var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),i=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,u=e.session.doc.getTextRange(e.selection.getRange()),a=u.replace(/\n\s*/," ").length,f=e.session.doc.getLine(n.row);for(var l=n.row+1;l<=i.row+1;l++){var c=r.stringTrimLeft(r.stringTrimRight(e.session.doc.getLine(l)));c.length!==0&&(c=" "+c),f+=c}i.row+10?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,r=e.selection.rangeList.ranges,i=[];r.length<1&&(r=[e.selection.getRange()]);for(var o=0;o0&&this.$blockScrolling--;var n=t&&t.scrollIntoView;if(n){switch(n){case"center-animate":n="animate";case"center":this.renderer.scrollCursorIntoView(null,.5);break;case"animate":case"cursor":this.renderer.scrollCursorIntoView();break;case"selectionPart":var r=this.selection.getRange(),i=this.renderer.layerConfig;(r.start.row>=i.lastRow||r.end.row<=i.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:}n=="animate"&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(!this.$mergeUndoDeltas)return;var t=this.prevOp,n=this.$mergeableCommands,r=t.command&&e.command.name==t.command.name;if(e.command.name=="insertstring"){var i=e.args;this.mergeNextCommand===undefined&&(this.mergeNextCommand=!0),r=r&&this.mergeNextCommand&&(!/\s/.test(i)||/\s/.test(t.args)),this.mergeNextCommand=!0}else r=r&&n.indexOf(e.command.name)!==-1;this.$mergeUndoDeltas!="always"&&Date.now()-this.sequenceStartTime>2e3&&(r=!1),r?this.session.mergeUndoDeltas=!0:n.indexOf(e.command.name)!==-1&&(this.sequenceStartTime=Date.now())},this.setKeyboardHandler=function(e,t){if(e&&typeof e=="string"){this.$keybindingId=e;var n=this;g.loadModule(["keybinding",e],function(r){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(r&&r.handler),t&&t()})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session==e)return;this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var n=this.session.getSelection();n.off("changeCursor",this.$onCursorChange),n.off("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),this.curOp=null,t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this})},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?t==1?this.navigateFileEnd():t==-1&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||i.computedStyle(this.container,"fontSize")},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=t.findMatchingBracket(e.getCursorPosition());if(n)var r=new p(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)var r=t.$mode.getMatching(e.session);r&&(t.$bracketHighlight=t.addMarker(r,"ace_bracket","text"))},50)},this.$highlightTags=function(){if(this.$highlightTagPending)return;var e=this;this.$highlightTagPending=!0,setTimeout(function(){e.$highlightTagPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=e.getCursorPosition(),r=new y(e.session,n.row,n.column),i=r.getCurrentToken();if(!i||!/\b(?:tag-open|tag-name)/.test(i.type)){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}if(i.type.indexOf("tag-open")!=-1){i=r.stepForward();if(!i)return}var s=i.value,o=0,u=r.stepBackward();if(u.value=="<"){do u=i,i=r.stepForward(),i&&i.value===s&&i.type.indexOf("tag-name")!==-1&&(u.value==="<"?o++:u.value==="=0)}else{do i=u,u=r.stepBackward(),i&&i.value===s&&i.type.indexOf("tag-name")!==-1&&(u.value==="<"?o++:u.value==="1)&&(t=!1)}if(e.$highlightLineMarker&&!t)e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null;else if(!e.$highlightLineMarker&&t){var n=new p(t.row,t.column,t.row,Infinity);n.id=e.addMarker(n,"ace_active-line","screenLine"),e.$highlightLineMarker=n}else t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e.$highlightLineMarker.start.column=t.column,e._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null;if(!this.selection.isEmpty()){var n=this.selection.getRange(),r=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,"ace_selection",r)}else this.$updateHighlightActiveLine();var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(t.isEmpty()||t.isMultiLine())return;var n=t.start.column-1,r=t.end.column+1,i=e.getLine(t.start.row),s=i.length,o=i.substring(Math.max(n,0),Math.min(r,s));if(n>=0&&/^[\w\d]/.test(o)||r<=s&&/[\w\d]$/.test(o))return;o=i.substring(t.start.column,t.end.column);if(!/^[\w\d]+$/.test(o))return;var u=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:o});return u},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal("copy",e),e},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(e,t){var n={text:e,event:t};this.commands.exec("paste",this,n)},this.$handlePaste=function(e){typeof e=="string"&&(e={text:e}),this._signal("paste",e);var t=e.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(t);else{var n=t.split(/\r\n|\r|\n/),r=this.selection.rangeList.ranges;if(n.length>r.length||n.length<2||!n[1])return this.commands.exec("insertstring",this,t);for(var i=r.length;i--;){var s=r[i];s.isEmpty()||this.session.remove(s),this.session.insert(s.start,n[i])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,r=n.getMode(),i=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var s=r.transformAction(n.getState(i.row),"insertion",this,n,e);s&&(e!==s.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=s.text)}e==" "&&(e=this.session.getTabString());if(!this.selection.isEmpty()){var o=this.getSelectionRange();i=this.session.remove(o),this.clearSelection()}else if(this.session.getOverwrite()){var o=new p.fromPoints(i,i);o.end.column+=e.length,this.session.remove(o)}if(e=="\n"||e=="\r\n"){var u=n.getLine(i.row);if(i.column>u.search(/\S|$/)){var a=u.substr(i.column).search(/\S|$/);n.doc.removeInLine(i.row,i.column,i.column+a)}}this.clearSelection();var f=i.column,l=n.getState(i.row),u=n.getLine(i.row),c=r.checkOutdent(l,u,e),h=n.insert(i,e);s&&s.selection&&(s.selection.length==2?this.selection.setSelectionRange(new p(i.row,f+s.selection[0],i.row,f+s.selection[1])):this.selection.setSelectionRange(new p(i.row+s.selection[0],s.selection[1],i.row+s.selection[2],s.selection[3])));if(n.getDocument().isNewLine(e)){var d=r.getNextLineIndent(l,u.slice(0,i.column),n.getTabString());n.insert({row:i.row+1,column:0},d)}c&&r.autoOutdent(l,n,i.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&(e=="left"?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,r=n.getState(t.start.row),i=n.getMode().transformAction(r,"deletion",this,n,t);if(t.end.column===0){var s=n.getTextRange(t);if(s[s.length-1]=="\n"){var o=n.getLine(t.end.row);/^\s+$/.test(o)&&(t.end.column=o.length)}}i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var e=this.getCursorPosition(),t=e.column;if(t===0)return;var n=this.session.getLine(e.row),r,i;tt.toLowerCase()?1:0});var r=new p(0,0,0,0);for(var i=e.first;i<=e.last;i++){var s=t.getLine(i);r.start.row=i,r.end.row=i,r.end.column=s.length,t.replace(r,n[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\-]?[0-9]+(?:\.[0-9]+)?/g;n.lastIndex=0;var r=this.session.getLine(e);while(n.lastIndex=t){var s={value:i[0],start:i.index,end:i.index+i[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,r=new p(t,n-1,t,n),i=this.session.getTextRange(r);if(!isNaN(parseFloat(i))&&isFinite(i)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(".")>=0?s.start+s.value.indexOf(".")+1:s.end,u=s.start+s.value.length-o,a=parseFloat(s.value);a*=Math.pow(10,u),o!==s.end&&np+1)break;p=d.last}l--,u=this.session.$moveLines(h,p,t?0:e),t&&e==-1&&(c=l+1);while(c<=l)o[c].moveBy(u,0),c++;t||(u=0),a+=u}i.fromOrientedRange(i.ranges[0]),i.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,i=e*Math.floor(r.height/r.lineHeight);this.$blockScrolling++,t===!0?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):t===!1&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection()),this.$blockScrolling--;var s=n.scrollTop;n.scrollBy(0,i*r.lineHeight),t!=null&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),r=new y(this.session,n.row,n.column),i=r.getCurrentToken(),s=i||r.stepForward();if(!s)return;var o,u=!1,a={},f=n.column-s.start,l,c={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(s.value.match(/[{}()\[\]]/g))for(;f=0;--s)this.$tryReplace(n[s],e)&&r++;return this.selection.setSelectionRange(i),this.$blockScrolling-=1,r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),t!==null?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),typeof e=="string"||e instanceof RegExp?t.needle=e:typeof e=="object"&&r.mixin(t,e);var i=this.selection.getRange();t.needle==null&&(e=this.session.getTextRange(i)||this.$search.$options.needle,e||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var s=this.$search.find(this.session);if(t.preventScroll)return s;if(s)return this.revealRange(s,n),s;t.backwards?i.start=i.end:i.end=i.start,this.selection.setRange(i)},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),t!==!1&&this.renderer.animateScrolling(n)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(!e)return;var t,n=this,r=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var i=this.$scrollAnchor;i.style.cssText="position:absolute",this.container.insertBefore(i,this.container.firstChild);var s=this.on("changeSelection",function(){r=!0}),o=this.renderer.on("beforeRender",function(){r&&(t=n.renderer.container.getBoundingClientRect())}),u=this.renderer.on("afterRender",function(){if(r&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,u=s.top-o.offset;s.top>=0&&u+t.top<0?r=!0:s.topwindow.innerHeight?r=!1:r=null,r!=null&&(i.style.top=u+"px",i.style.left=s.left+"px",i.style.height=o.lineHeight+"px",i.scrollIntoView(r)),r=t=null}});this.setAutoScrollEditorIntoView=function(e){if(e)return;delete this.setAutoScrollEditorIntoView,this.off("changeSelection",s),this.renderer.off("afterRender",u),this.renderer.off("beforeRender",o)}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;if(!t)return;t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&e!="wide",i.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e))}}).call(b.prototype),g.defineOptions(b.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.keybindingId},handlesSet:!0},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",showLineNumbers:"renderer",showGutter:"renderer",displayIndentGuides:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"}),t.Editor=b}),define("ace/undomanager",["require","exports","module"],function(e,t,n){"use strict";var r=function(){this.reset()};(function(){function e(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines.length==1?null:e.lines,text:e.lines.length==1?e.lines[0]:null}}function t(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines||[e.text]}}function n(e,t){var n=new Array(e.length);for(var r=0;r0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return this.dirtyCounter===0},this.$serializeDeltas=function(t){return n(t,e)},this.$deserializeDeltas=function(e){return n(e,t)}}).call(r.prototype),t.UndoManager=r}),define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/dom"),i=e("../lib/oop"),s=e("../lib/lang"),o=e("../lib/event_emitter").EventEmitter,u=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_gutter-layer",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){i.implement(this,o),this.setSession=function(e){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=e,e&&e.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;to&&(v=s.end.row+1,s=t.getNextFoldLine(v,s),o=s?s.start.row:Infinity);if(v>i){while(this.$cells.length>d+1)p=this.$cells.pop(),this.element.removeChild(p.element);break}p=this.$cells[++d],p||(p={element:null,textNode:null,foldWidget:null},p.element=r.createElement("div"),p.textNode=document.createTextNode(""),p.element.appendChild(p.textNode),this.element.appendChild(p.element),this.$cells[d]=p);var m="ace_gutter-cell ";a[v]&&(m+=a[v]),f[v]&&(m+=f[v]),this.$annotations[v]&&(m+=this.$annotations[v].className),p.element.className!=m&&(p.element.className=m);var g=t.getRowLength(v)*e.lineHeight+"px";g!=p.element.style.height&&(p.element.style.height=g);if(u){var y=u[v];y==null&&(y=u[v]=t.getFoldWidget(v))}if(y){p.foldWidget||(p.foldWidget=r.createElement("span"),p.element.appendChild(p.foldWidget));var m="ace_fold-widget ace_"+y;y=="start"&&v==o&&vn.right-t.right)return"foldWidgets"}}).call(u.prototype),t.Gutter=u}),define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../range").Range,i=e("../lib/dom"),s=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){function e(e,t,n,r){return(e?1:0)|(t?2:0)|(n?4:0)|(r?8:0)}this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){var e=e||this.config;if(!e)return;this.config=e;var t=[];for(var n in this.markers){var r=this.markers[n];if(!r.range){r.update(t,this,this.session,e);continue}var i=r.range.clipRows(e.firstRow,e.lastRow);if(i.isEmpty())continue;i=i.toScreenRange(this.session);if(r.renderer){var s=this.$getTop(i.start.row,e),o=this.$padding+i.start.column*e.characterWidth;r.renderer(t,i,o,s,e)}else r.type=="fullLine"?this.drawFullLineMarker(t,i,r.clazz,e):r.type=="screenLine"?this.drawScreenLineMarker(t,i,r.clazz,e):i.isMultiLine()?r.type=="text"?this.drawTextMarker(t,i,r.clazz,e):this.drawMultiLineMarker(t,i,r.clazz,e):this.drawSingleLineMarker(t,i,r.clazz+" ace_start"+" ace_br15",e)}this.element.innerHTML=t.join("")},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(t,n,i,s,o){var u=this.session,a=n.start.row,f=n.end.row,l=a,c=0,h=0,p=u.getScreenLastRowColumn(l),d=new r(l,n.start.column,l,h);for(;l<=f;l++)d.start.row=d.end.row=l,d.start.column=l==a?n.start.column:u.getRowWrapIndent(l),d.end.column=p,c=h,h=p,p=l+1p,l==f),s,l==f?0:1,o)},this.drawMultiLineMarker=function(e,t,n,r,i){var s=this.$padding,o=r.lineHeight,u=this.$getTop(t.start.row,r),a=s+t.start.column*r.characterWidth;i=i||"",e.push("
"),u=this.$getTop(t.end.row,r);var f=t.end.column*r.characterWidth;e.push("
"),o=(t.end.row-t.start.row-1)*r.lineHeight;if(o<=0)return;u=this.$getTop(t.start.row+1,r);var l=(t.start.column?1:0)|(t.end.column?0:8);e.push("
")},this.drawSingleLineMarker=function(e,t,n,r,i,s){var o=r.lineHeight,u=(t.end.column+(i||0)-t.start.column)*r.characterWidth,a=this.$getTop(t.start.row,r),f=this.$padding+t.start.column*r.characterWidth;e.push("
")},this.drawFullLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,r)-s),e.push("
")},this.drawScreenLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;e.push("
")}}).call(s.prototype),t.Marker=s}),define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/useragent"),u=e("../lib/event_emitter").EventEmitter,a=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){r.implement(this,u),this.EOF_CHAR="\u00b6",this.EOL_CHAR_LF="\u00ac",this.EOL_CHAR_CRLF="\u00a4",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="\u2014",this.SPACE_CHAR="\u00b7",this.$padding=0,this.$updateEolChar=function(){var e=this.session.doc.getNewLineCharacter()=="\n"?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles==e?!1:(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides==e?!1:(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;var t=this.$tabStrings=[0];for(var n=1;n"+s.stringRepeat(this.TAB_CHAR,n)+""):t.push(s.stringRepeat(" ",n));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var r="ace_indent-guide",i="",o="";if(this.showInvisibles){r+=" ace_invisible",i=" ace_invisible_space",o=" ace_invisible_tab";var u=s.stringRepeat(this.SPACE_CHAR,this.tabSize),a=s.stringRepeat(this.TAB_CHAR,this.tabSize)}else var u=s.stringRepeat(" ",this.tabSize),a=u;this.$tabStrings[" "]=""+u+"",this.$tabStrings[" "]=""+a+""}},this.updateLines=function(e,t,n){(this.config.lastRow!=e.lastRow||this.config.firstRow!=e.firstRow)&&this.scrollLines(e),this.config=e;var r=Math.max(t,e.firstRow),i=Math.min(n,e.lastRow),s=this.element.childNodes,o=0;for(var u=e.firstRow;uf&&(u=a.end.row+1,a=this.session.getNextFoldLine(u,a),f=a?a.start.row:Infinity);if(u>i)break;var l=s[o++];if(l){var c=[];this.$renderLine(c,u,!this.$useLineGroups(),u==f?a:!1),l.style.height=e.lineHeight*this.session.getRowLength(u)+"px",l.innerHTML=c.join("")}u++}},this.scrollLines=function(e){var t=this.config;this.config=e;if(!t||t.lastRow0;r--)n.removeChild(n.firstChild);if(t.lastRow>e.lastRow)for(var r=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);r>0;r--)n.removeChild(n.lastChild);if(e.firstRowt.lastRow){var i=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);n.appendChild(i)}},this.$renderLinesFragment=function(e,t,n){var r=this.element.ownerDocument.createDocumentFragment(),s=t,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>n)break;var a=i.createElement("div"),f=[];this.$renderLine(f,s,!1,s==u?o:!1),a.innerHTML=f.join("");if(this.$useLineGroups())a.className="ace_line_group",r.appendChild(a),a.style.height=e.lineHeight*this.session.getRowLength(s)+"px";else while(a.firstChild)r.appendChild(a.firstChild);s++}return r},this.update=function(e){this.config=e;var t=[],n=e.firstRow,r=e.lastRow,i=n,s=this.session.getNextFoldLine(i),o=s?s.start.row:Infinity;for(;;){i>o&&(i=s.end.row+1,s=this.session.getNextFoldLine(i,s),o=s?s.start.row:Infinity);if(i>r)break;this.$useLineGroups()&&t.push("
"),this.$renderLine(t,i,!1,i==o?s:!1),this.$useLineGroups()&&t.push("
"),i++}this.element.innerHTML=t.join("")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){var i=this,o=/\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g,u=function(e,n,r,o,u){if(n)return i.showInvisibles?""+s.stringRepeat(i.SPACE_CHAR,e.length)+"":e;if(e=="&")return"&";if(e=="<")return"<";if(e==">")return">";if(e==" "){var a=i.session.getScreenTabSize(t+o);return t+=a-1,i.$tabStrings[a]}if(e=="\u3000"){var f=i.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",l=i.showInvisibles?i.SPACE_CHAR:"";return t+=1,""+l+""}return r?""+i.SPACE_CHAR+"":(t+=1,""+e+"")},a=r.replace(o,u);if(!this.$textToken[n.type]){var f="ace_"+n.type.replace(/\./g," ace_"),l="";n.type=="fold"&&(l=" style='width:"+n.value.length*this.config.characterWidth+"px;' "),e.push("",a,"")}else e.push(a);return t+r.length},this.renderIndentGuide=function(e,t,n){var r=t.search(this.$indentGuideRe);return r<=0||r>=n?t:t[0]==" "?(r-=r%this.tabSize,e.push(s.stringRepeat(this.$tabStrings[" "],r/this.tabSize)),t.substr(r)):t[0]==" "?(e.push(s.stringRepeat(this.$tabStrings[" "],r)),t.substr(r)):t},this.$renderWrappedLine=function(e,t,n,r){var i=0,o=0,u=n[0],a=0;for(var f=0;f=u)a=this.$renderToken(e,a,l,c.substring(0,u-i)),c=c.substring(u-i),i=u,r||e.push("","
"),e.push(s.stringRepeat("\u00a0",n.indent)),o++,a=0,u=n[o]||Number.MAX_VALUE;c.length!=0&&(i+=c.length,a=this.$renderToken(e,a,l,c))}}},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],i=r.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(n=this.$renderToken(e,n,r,i));for(var s=1;s");if(i.length){var s=this.session.getRowSplitData(t);s&&s.length?this.$renderWrappedLine(e,i,s,n):this.$renderSimpleLine(e,i)}this.showInvisibles&&(r&&(t=r.end.row),e.push("",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"")),n||e.push("
")},this.$getFoldLineTokens=function(e,t){function i(e,t,n){var i=0,s=0;while(s+e[i].value.lengthn-t&&(o=o.substring(0,n-t)),r.push({type:e[i].type,value:o}),s=t+o.length,i+=1}while(sn?r.push({type:e[i].type,value:o.substring(0,n-s)}):r.push(e[i]),s+=o.length,i+=1}}var n=this.session,r=[],s=n.getTokens(e);return t.walk(function(e,t,o,u,a){e!=null?r.push({type:"fold",value:e}):(a&&(s=n.getTokens(t)),s.length&&i(s,u,o))},t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a}),define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../lib/dom"),i,s=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),i===undefined&&(i=!("opacity"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=(i?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(e){var t=this.cursors;for(var n=t.length;n--;)t[n].style.visibility=e?"":"hidden"},this.$updateOpacity=function(e){var t=this.cursors;for(var n=t.length;n--;)t[n].style.opacity=e?"":"0"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&!i&&(this.smoothBlinking=e,r.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var e=r.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&r.removeCssClass(this.element,"ace_smooth-blinking"),e(!0);if(!this.isBlinking||!this.blinkInterval||!this.isVisible)return;this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var t=function(){this.timeoutId=setTimeout(function(){e(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){e(!0),t()},this.blinkInterval),t()},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),r=this.$padding+n.column*this.config.characterWidth,i=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:r,top:i}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,r=0;if(t===undefined||t.length===0)t=[{cursor:null}];for(var n=0,i=t.length;ne.height+e.offset||s.top<0)&&n>1)continue;var o=(this.cursors[r++]||this.addCursor()).style;this.drawCursor?this.drawCursor(o,s,e,t[n],this.session):(o.left=s.left+"px",o.top=s.top+"px",o.width=e.characterWidth+"px",o.height=e.lineHeight+"px")}while(this.cursors.length>r)this.removeCursor();var u=this.session.getOverwrite();this.$setOverwrite(u),this.$pixelPos=s,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,"ace_overwrite-cursors"):r.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(s.prototype),t.Cursor=s}),define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./lib/event"),o=e("./lib/event_emitter").EventEmitter,u=32768,a=function(e){this.element=i.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=i.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,"scroll",this.onScroll.bind(this)),s.addListener(this.element,"mousedown",s.preventDefault)};(function(){r.implement(this,o),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e,this.coeff=1}}).call(a.prototype);var f=function(e,t){a.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=i.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px"};r.inherits(f,a),function(){this.classSuffix="-v",this.onScroll=function(){if(!this.skipEvent){this.scrollTop=this.element.scrollTop;if(this.coeff!=1){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return this.isVisible?this.width:0},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>u?(this.coeff=u/e,e=u):this.coeff!=1&&(this.coeff=1),this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(f.prototype);var l=function(e,t){a.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};r.inherits(l,a),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(l.prototype),t.ScrollBar=f,t.ScrollBarV=f,t.ScrollBarH=l,t.VScrollBar=f,t.HScrollBar=l}),define("ace/renderloop",["require","exports","module","ace/lib/event"],function(e,t,n){"use strict";var r=e("./lib/event"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){this.changes=this.changes|e;if(!this.pending&&this.changes){this.pending=!0;var t=this;r.nextFrame(function(){t.pending=!1;var e;while(e=t.changes)t.changes=0,t.onRender(e)},this.window)}}}).call(i.prototype),t.RenderLoop=i}),define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/useragent"),u=e("../lib/event_emitter").EventEmitter,a=0,f=t.FontMetrics=function(e){this.el=i.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),a||this.$testFractionalRect(),this.$measureNode.innerHTML=s.stringRepeat("X",a),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){r.implement(this,u),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=i.createElement("div");this.$setMeasureNodeStyles(e.style),e.style.width="0.2px",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;t>0&&t<1?a=50:a=100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",o.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval(function(){e.checkForSizeChanges()},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(a===50){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(t){e={width:0,height:0}}var n={height:e.height,width:e.width/a}}else var n={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/a};return n.width===0||n.height===0?null:n},this.$measureCharWidth=function(e){this.$main.innerHTML=s.stringRepeat(e,a);var t=this.$main.getBoundingClientRect();return t.width/a},this.getCharacterWidth=function(e){var t=this.charSizes[e];return t===undefined&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(f.prototype)}),define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./config"),o=e("./lib/useragent"),u=e("./layer/gutter").Gutter,a=e("./layer/marker").Marker,f=e("./layer/text").Text,l=e("./layer/cursor").Cursor,c=e("./scrollbar").HScrollBar,h=e("./scrollbar").VScrollBar,p=e("./renderloop").RenderLoop,d=e("./layer/font_metrics").FontMetrics,v=e("./lib/event_emitter").EventEmitter,m='.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;text-align: left;}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;min-width: 100%;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: inherit;color: inherit;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-webkit-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_editor.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-webkit-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-webkit-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}';i.importCssString(m,"ace_editor.css");var g=function(e,t){var n=this;this.container=e||i.createElement("div"),this.$keepTextAreaAtCursor=!o.isOldIE,i.addCssClass(this.container,"ace_editor"),this.setTheme(t),this.$gutter=i.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.scroller=i.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=i.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new u(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new a(this.content);var r=this.$textLayer=new f(this.content);this.canvas=r.element,this.$markerFront=new a(this.content),this.$cursorLayer=new l(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new h(this.container,this),this.scrollBarH=new c(this.container,this),this.scrollBarV.addEventListener("scroll",function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)}),this.scrollBarH.addEventListener("scroll",function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new d(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal("changeCharacterSize",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new p(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,v),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e);if(!e)return;this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode)},this.updateLines=function(e,t,n){t===undefined&&(t=Infinity),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow)return;this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar()},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,r){if(this.resizing>2)return;this.resizing>0?this.resizing++:this.resizing=e?1:0;var i=this.container;r||(r=i.clientHeight||i.scrollHeight),n||(n=i.clientWidth||i.scrollWidth);var s=this.$updateCachedSize(e,t,n,r);if(!this.$size.scrollerHeight||!n&&!r)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null},this.$updateCachedSize=function(e,t,n,r){r-=this.$extraHeight||0;var i=0,s=this.$size,o={width:s.width,height:s.height,scrollerHeight:s.scrollerHeight,scrollerWidth:s.scrollerWidth};r&&(e||s.height!=r)&&(s.height=r,i|=this.CHANGE_SIZE,s.scrollerHeight=s.height,this.$horizScroll&&(s.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",i|=this.CHANGE_SCROLL);if(n&&(e||s.width!=n)){i|=this.CHANGE_SIZE,s.width=n,t==null&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+"px",s.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+"px",this.scroller.style.bottom=this.scrollBarH.getHeight()+"px";if(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)i|=this.CHANGE_FULL}return s.$dirty=!n||!r,i&&this._signal("resize",o),i},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()?this.$loop.schedule(this.CHANGE_FULL):this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-this.$padding*2,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var n=this.session.selection.getCursor();n.column=0,e=this.$cursorLayer.getPixelPosition(n,!0),t*=this.session.getRowLength(n.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=t+"px"},this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl)return;if(!this.$printMarginEl){var e=i.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=i.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&this.session.$wrap==-1&&this.adjustWrapLimit()},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(!this.$keepTextAreaAtCursor)return;var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,n=this.$cursorLayer.$pixelPos.left;t-=e.offset;var r=this.textarea.style,i=this.lineHeight;if(t<0||t>e.height-i){r.top=r.left="0";return}var s=this.characterWidth;if(this.$composition){var o=this.textarea.value.replace(/^\x01+/,"");s*=this.session.$getStringScreenWidth(o)[0]+2,i+=2}n-=this.scrollLeft,n>this.$size.scrollerWidth-s&&(n=this.$size.scrollerWidth-s),n+=this.gutterWidth,r.height=i+"px",r.width=s+"px",r.left=Math.min(n,this.$size.scrollerWidth-s)+"px",r.top=Math.min(t,this.$size.height-i)+"px"},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow,n=this.session.documentToScreenRow(t,0)*e.lineHeight;return n-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,r){var i=this.scrollMargin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){this.$changes&&(e|=this.$changes,this.$changes=0);if(!this.session||!this.container.offsetWidth||this.$frozen||!e&&!t){this.$changes|=e;return}if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender");var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){e|=this.$computeLayerConfig();if(n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var r=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;r>0&&(this.scrollTop=r,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-n.offset+"px",this.content.style.marginTop=-n.offset+"px",this.content.style.width=n.width+2*this.$padding+"px",this.content.style.height=n.minHeight+"px"}e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+"px",this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left");if(e&this.CHANGE_FULL){this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this._signal("afterRender");return}if(e&this.CHANGE_SCROLL){e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),this._signal("afterRender");return}e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal("afterRender")},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight);var r=e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||r!=this.$vScroll){r!=this.$vScroll&&(this.$vScroll=r,this.scrollBarV.setVisible(r));var i=this.container.clientWidth;this.container.style.height=n+"px",this.$updateCachedSize(!0,this.$gutterWidth,i,n),this.desiredHeight=n,this._signal("autosize")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,r=this.session.getScreenLength(),i=r*this.lineHeight,s=this.$getLongestLine(),o=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-s-2*this.$padding<0),u=this.$horizScroll!==o;u&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var f=this.scrollTop%this.lineHeight,l=t.scrollerHeight+this.lineHeight,c=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=c;var h=this.scrollMargin;this.session.setScrollTop(Math.max(-h.top,Math.min(this.scrollTop,i-t.scrollerHeight+h.bottom))),this.session.setScrollLeft(Math.max(-h.left,Math.min(this.scrollLeft,s+2*this.$padding-t.scrollerWidth+h.right)));var p=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+c<0||this.scrollTop>h.top),d=a!==p;d&&(this.$vScroll=p,this.scrollBarV.setVisible(p));var v=Math.ceil(l/this.lineHeight)-1,m=Math.max(0,Math.round((this.scrollTop-f)/this.lineHeight)),g=m+v,y,b,w=this.lineHeight;m=e.screenToDocumentRow(m,0);var E=e.getFoldLine(m);E&&(m=E.start.row),y=e.documentToScreenRow(m,0),b=e.getRowLength(m)*w,g=Math.min(e.screenToDocumentRow(g,0),e.getLength()-1),l=t.scrollerHeight+e.getRowLength(g)*w+b,f=this.scrollTop-y*w;var S=0;this.layerConfig.width!=s&&(S=this.CHANGE_H_SCROLL);if(u||d)S=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),d&&(s=this.$getLongestLine());return this.layerConfig={width:s,padding:this.$padding,firstRow:m,firstRowScreen:y,lastRow:g,lineHeight:w,characterWidth:this.characterWidth,minHeight:l,maxHeight:i,offset:f,gutterOffset:w?Math.max(0,Math.ceil((f+t.height-t.scrollerHeight)/w)):0,height:this.$size.scrollerHeight},S},this.$updateLines=function(){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(e>n.lastRow+1)return;if(ts?(t&&a+o>s+this.lineHeight&&(s-=t*this.$size.scrollerHeight),s===0&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):a+this.$size.scrollerHeight-ui?(i=1-this.scrollMargin.top)return!0;if(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom)return!0;if(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left)return!0;if(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right)return!0},this.pixelToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=(e+this.scrollLeft-n.left-this.$padding)/this.characterWidth,i=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),s=Math.round(r);return{row:i,column:s,side:r-s>0?1:-1}},this.screenToTextCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=Math.round((e+this.scrollLeft-n.left-this.$padding)/this.characterWidth),i=(t+this.scrollTop-n.top)/this.lineHeight;return this.session.screenToDocumentPosition(i,Math.max(r,0))},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=this.session.documentToScreenPosition(e,t),i=this.$padding+Math.round(r.column*this.characterWidth),s=r.row*this.lineHeight;return{pageX:n.left+i-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){i.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){if(!this.$composition)return;i.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null},this.setTheme=function(e,t){function o(r){if(n.$themeId!=e)return t&&t();if(!r||!r.cssClass)throw new Error("couldn't load module "+e+" or it didn't call define");i.importCssString(r.cssText,r.cssClass,n.container.ownerDocument),n.theme&&i.removeCssClass(n.container,n.theme.cssClass);var s="padding"in r?r.padding:"padding"in(n.theme||{})?4:n.$padding;n.$padding&&s!=n.$padding&&n.setPadding(s),n.$theme=r.cssClass,n.theme=r,i.addCssClass(n.container,r.cssClass),i.setCssClass(n.container,"ace_dark",r.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent("themeLoaded",{theme:r}),t&&t()}var n=this;this.$themeId=e,n._dispatchEvent("themeChange",{theme:e});if(!e||typeof e=="string"){var r=e||this.$options.theme.initialValue;s.loadModule(["theme",r],o)}else o(e)},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){i.setCssClass(this.container,e,t!==!1)},this.unsetStyle=function(e){i.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(g.prototype),s.defineOptions(g.prototype,"renderer",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){typeof e=="number"&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){i.setCssClass(this.$gutter,"ace_fade-fold-widgets",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight){this.$gutterLineHighlight=i.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",this.$gutter.appendChild(this.$gutterLineHighlight);return}this.$gutterLineHighlight.style.display=e?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){(!this.$hScrollBarAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){(!this.$vScrollBarAlwaysVisible||!this.$vScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){typeof e=="number"&&(e+="px"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},maxPixelHeight:{set:function(e){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(e){e=+e||0;if(this.$scrollPastEnd==e)return;this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0}}),t.VirtualRenderer=g}),define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/net"),s=e("../lib/event_emitter").EventEmitter,o=e("../config"),u=function(t,n,r,i){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl);if(o.get("packaged")||!e.toUrl)i=i||o.moduleUrl(n,"worker");else{var s=this.$normalizePath;i=i||s(e.toUrl("ace/worker/worker.js",null,"_"));var u={};t.forEach(function(t){u[t]=s(e.toUrl(t,null,"_").replace(/(\.js)?(\?.*)?$/,""))})}try{this.$worker=new Worker(i)}catch(a){if(!(a instanceof window.DOMException))throw a;var f=this.$workerBlob(i),l=window.URL||window.webkitURL,c=l.createObjectURL(f);this.$worker=new Worker(c),l.revokeObjectURL(c)}this.$worker.postMessage({init:!0,tlns:u,module:n,classname:r}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){r.implement(this,s),this.onMessage=function(e){var t=e.data;switch(t.type){case"event":this._signal(t.name,{data:t.data});break;case"call":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case"error":this.reportError(t.data);break;case"log":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return i.qualifyURL(e)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off("change",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var r=this.callbackId++;this.callbacks[r]=n,t.push(r)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){console.error(n.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call("setValue",[e.getValue()]),e.on("change",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),e.action=="insert"?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;if(!e)return;this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e})},this.$workerBlob=function(e){var t="importScripts('"+i.qualifyURL(e)+"');";try{return new Blob([t],{type:"application/javascript"})}catch(n){var r=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,s=new r;return s.append(t),s.getBlob("application/javascript")}}}).call(u.prototype);var a=function(e,t,n){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var r=null,i=!1,u=Object.create(s),a=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){a.messageBuffer.push(e),r&&(i?setTimeout(f):f())},this.setEmitSync=function(e){i=e};var f=function(){var e=a.messageBuffer.shift();e.command?r[e.command].apply(r,e.args):e.event&&u._signal(e.event,e.data)};u.postMessage=function(e){a.onMessage({data:e})},u.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},u.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},o.loadModule(["worker",t],function(e){r=new e[n](u);while(a.messageBuffer.length)f()})};a.prototype=u.prototype,t.UIWorkerClient=a,t.WorkerClient=u}),define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],function(e,t,n){"use strict";var r=e("./range").Range,i=e("./lib/event_emitter").EventEmitter,s=e("./lib/oop"),o=function(e,t,n,r,i,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout(function(){o.onCursorChange()})},this.$pos=n;var u=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=u.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){s.implement(this,i),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var i=this.pos;i.$insertRight=!0,i.detach(),i.markerId=n.addMarker(new r(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach(function(n){var r=t.createAnchor(n.row,n.column);r.$insertRight=!0,r.detach(),e.others.push(r)}),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var e=0;e=this.pos.column&&t.start.column<=this.pos.column+this.length+1,s=t.start.column-this.pos.column;this.updateAnchors(e),i&&(this.length+=n);if(i&&!this.session.$fromUndo)if(e.action==="insert")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.insertMergedLines(a,e.lines)}else if(e.action==="remove")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.remove(new r(a.row,a.column,a.row,a.column-n))}this.$updating=!1,this.updateMarkers()},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(this.$updating)return;var e=this,t=this.session,n=function(n,i){t.removeMarker(n.markerId),n.markerId=t.addMarker(new r(n.row,n.column,n.row,n.column+e.length),i,null,!1)};n(this.pos,this.mainClass);for(var i=this.others.length;i--;)n(this.others[i],this.othersClass)},this.onCursorChange=function(e){if(this.$updating||!this.session)return;var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(this.$undoStackDepth===-1)return;var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth;for(var n=0;n1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._signal("removeRange",{ranges:e}),this.rangeCount===0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new r,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var n=this.getRange(),r=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(r)var u=n.end,a=n.start;else var u=n.start,a=n.end;this.addRange(i.fromPoints(a,a)),this.addRange(i.fromPoints(u,u));return}var f=[],l=this.getLineRange(s,!0);l.start.column=n.start.column,f.push(l);for(var c=s+1;c1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var r=this.session.documentToScreenPosition(this.selectionLead),s=this.session.documentToScreenPosition(this.selectionAnchor),o=this.rectangularRangeBlock(r,s);o.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var r=[],s=e.column0)d--;if(d>0){var m=0;while(r[m].isEmpty())m++}for(var g=d;g>=m;g--)r[g].isEmpty()&&r.splice(g,1)}return r}}.call(s.prototype);var d=e("./editor").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(!e.marker)return;this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);t!=-1&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(e){var t=this.session.$selectionMarkers;for(var n=e.length;n--;){var r=e[n];if(!r.marker)continue;this.session.removeMarker(r.marker);var i=t.indexOf(r);i!=-1&&t.splice(i,1)}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(f.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(e){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(f.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection")},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(!n.multiSelect)return;if(!t.multiSelectAction){var r=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}else t.multiSelectAction=="forEach"?r=n.forEachSelection(t,e.args):t.multiSelectAction=="forEachLine"?r=n.forEachSelection(t,e.args,!0):t.multiSelectAction=="single"?(n.exitMultiSelectMode(),r=t.exec(n,e.args||{})):r=t.multiSelectAction(n,e.args||{});return r},this.forEachSelection=function(e,t,n){if(this.inVirtualSelectionMode)return;var r=n&&n.keepOrder,i=n==1||n&&n.$byLines,o=this.session,u=this.selection,a=u.rangeList,f=(r?u:a).ranges,l;if(!f.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var c=u._eventRegistry;u._eventRegistry={};var h=new s(o);this.inVirtualSelectionMode=!0;for(var p=f.length;p--;){if(i)while(p>0&&f[p].start.row==f[p-1].end.row)p--;h.fromOrientedRange(f[p]),h.index=p,this.selection=o.selection=h;var d=e.exec?e.exec(this,t||{}):e(this,t||{});!l&&d!==undefined&&(l=d),h.toOrientedRange(f[p])}h.detach(),this.selection=o.selection=u,this.inVirtualSelectionMode=!1,u._eventRegistry=c,u.mergeOverlappingRanges();var v=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),v&&v.from==v.to&&this.renderer.animateScrolling(v.from),l},this.exitMultiSelectMode=function(){if(!this.inMultiSelectMode||this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var t=this.multiSelect.rangeList.ranges,n=[];for(var r=0;r0);u<0&&(u=0),f>=c&&(f=c-1)}var p=this.session.removeFullLines(u,f);p=this.$reAlignText(p,l),this.session.insert({row:u,column:0},p.join("\n")+"\n"),l||(o.start.column=0,o.end.column=p[p.length-1].length),this.selection.setRange(o)}else{s.forEach(function(e){t.substractPoint(e.cursor)});var d=0,v=Infinity,m=n.map(function(t){var n=t.cursor,r=e.getLine(n.row),i=r.substr(n.column).search(/\S/g);return i==-1&&(i=0),n.column>d&&(d=n.column),io?e.insert(r,a.stringRepeat(" ",s-o)):e.remove(new i(r.row,r.column,r.row,r.column-s+o)),t.start.column=t.end.column=d,t.start.row=t.end.row=r.row,t.cursor=t.end}),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}},this.$reAlignText=function(e,t){function u(e){return a.stringRepeat(" ",e)}function f(e){return e[2]?u(i)+e[2]+u(s-e[2].length+o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function l(e){return e[2]?u(i+s-e[2].length)+e[2]+u(o," ")+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function c(e){return e[2]?u(i)+e[2]+u(o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}var n=!0,r=!0,i,s,o;return e.map(function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?i==null?(i=t[1].length,s=t[2].length,o=t[3].length,t):(i+s+o!=t[1].length+t[2].length+t[3].length&&(r=!1),i!=t[1].length&&(n=!1),i>t[1].length&&(i=t[1].length),st[3].length&&(o=t[3].length),t):[e]}).map(t?f:n?r?l:f:c)}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off("addRange",this.$onAddRange),n.multiSelect.off("removeRange",this.$onRemoveRange),n.multiSelect.off("multiSelect",this.$onMultiSelect),n.multiSelect.off("singleSelect",this.$onSingleSelect),n.multiSelect.lead.off("change",this.$checkMultiselectChange),n.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e("./config").defineOptions(d.prototype,"editor",{enableMultiselect:{set:function(e){m(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",o)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",o))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})}),define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../../range").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?"start":t=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(r)?"end":""},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var i=/\S/,s=e.getLine(t),o=s.search(i);if(o==-1)return;var u=n||s.length,a=e.getLength(),f=t,l=t;while(++tf){var h=e.getLine(l).length;return new r(f,u,l,h)}},this.openingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i+1},u=e.$findClosingBracket(t,o,s);if(!u)return;var a=e.foldWidgets[u.row];return a==null&&(a=e.getFoldWidget(u.row)),a=="start"&&u.row>o.row&&(u.row--,u.column=e.getLine(u.row).length),r.fromPoints(o,u)},this.closingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i},u=e.$findOpeningBracket(t,o);if(!u)return;return u.column++,o.column--,r.fromPoints(u,o)}}).call(i.prototype)}),define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}),define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],function(e,t,n){"use strict";function o(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./range").Range;(function(){this.getRowLength=function(e){var t;return this.lineWidgets?t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0:t=0,!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach(function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)}),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach();if(this.editor==e)return;this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets))},this.detach=function(e){var t=this.editor;if(!t)return;this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(!n||!e.action)return;var r=e.data,i=r.start.row,s=r.end.row,o=e.action=="add";for(var u=i+1;u0&&!r[i])i--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=i;o<=s;o++){var u=r[o];if(!u||!u.el)continue;if(u.hidden){u.el.style.top=-100-(u.pixelHeight||0)+"px";continue}u._inDocument||(u._inDocument=!0,t.container.appendChild(u.el));var a=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;u.coverLine||(a+=n.lineHeight*this.session.getRowLineCount(u.row)),u.el.style.top=a-n.offset+"px";var f=u.coverGutter?0:t.gutterWidth;u.fixedWidth||(f-=t.scrollLeft),u.el.style.left=f+"px",u.fullWidth&&u.screenWidth&&(u.el.style.minWidth=n.width+2*n.padding+"px"),u.fixedWidth?u.el.style.right=t.scrollBar.getWidth()+"px":u.el.style.right=""}}}).call(o.prototype),t.LineWidgets=o}),define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],function(e,t,n){"use strict";function o(e,t,n){var r=0,i=e.length-1;while(r<=i){var s=r+i>>1,o=n(t,e[s]);if(o>0)r=s+1;else{if(!(o<0))return s;i=s-1}}return-(r+1)}function u(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(!r.length)return;var i=o(r,{row:t,column:-1},s.comparePoints);i<0&&(i=-i-1),i>=r.length?i=n>0?0:r.length-1:i===0&&n<0&&(i=r.length-1);var u=r[i];if(!u||!n)return;if(u.row===t){do u=r[i+=n];while(u&&u.row===t);if(!u)return r.slice()}var a=[];t=u.row;do a[n<0?"unshift":"push"](u),u=r[i+=n];while(u&&u.row==t);return a.length&&a}var r=e("../line_widgets").LineWidgets,i=e("../lib/dom"),s=e("../range").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),o=s.row,a=n.widgetManager.getWidgetsAtRow(o).filter(function(e){return e.type=="errorMarker"})[0];a?a.destroy():o-=t;var f=u(n,o,t),l;if(f){var c=f[0];s.column=(c.pos&&typeof c.column!="number"?c.pos.sc:c.column)||0,s.row=c.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(a)return;l={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement("div"),type:"errorMarker"},p=h.el.appendChild(i.createElement("div")),d=h.el.appendChild(i.createElement("div"));d.className="error_widget_arrow "+l.className;var v=e.renderer.$cursorLayer.getPixelPosition(s).left;d.style.left=v+e.renderer.gutterWidth-5+"px",h.el.className="error_widget_wrapper",p.className="error_widget "+l.className,p.innerHTML=l.text.join("
"),p.appendChild(i.createElement("div"));var m=function(e,t,n){if(t===0&&(n==="esc"||n==="return"))return h.destroy(),{command:"null"}};h.destroy=function(){if(e.$mouseHandler.isMousePressed)return;e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off("changeSelection",h.destroy),e.off("changeSession",h.destroy),e.off("mouseup",h.destroy),e.off("change",h.destroy)},e.keyBinding.addKeyboardHandler(m),e.on("changeSelection",h.destroy),e.on("changeSession",h.destroy),e.on("mouseup",h.destroy),e.on("change",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},i.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")}),define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],function(e,t,n){"use strict";e("./lib/fixoldbrowsers");var r=e("./lib/dom"),i=e("./lib/event"),s=e("./editor").Editor,o=e("./edit_session").EditSession,u=e("./undomanager").UndoManager,a=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.require=e,typeof define=="function"&&(t.define=define),t.edit=function(e){if(typeof e=="string"){var n=e;e=document.getElementById(n);if(!e)throw new Error("ace.edit can't find div #"+n)}if(e&&e.env&&e.env.editor instanceof s)return e.env.editor;var o="";if(e&&/input|textarea/i.test(e.tagName)){var u=e;o=u.value,e=r.createElement("pre"),u.parentNode.replaceChild(e,u)}else e&&(o=r.getInnerText(e),e.innerHTML="");var f=t.createEditSession(o),l=new s(new a(e));l.setSession(f);var c={document:f,editor:l,onResize:l.resize.bind(l,null)};return u&&(c.textarea=u),i.addListener(window,"resize",c.onResize),l.on("destroy",function(){i.removeListener(window,"resize",c.onResize),c.editor.container.env=null}),l.container.env=l.env=c,l},t.createEditSession=function(e,t){var n=new o(e,t);return n.setUndoManager(new u),n},t.EditSession=o,t.UndoManager=u,t.version="1.2.6"}); + (function() { + window.require(["ace/ace"], function(a) { + if (a) { + a.config.init(true); + a.define = window.define; + } + if (!window.ace) + window.ace = a; + for (var key in a) if (a.hasOwnProperty(key)) + window.ace[key] = a[key]; + }); + })(); + \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/app.js b/examples/SmartSwitch/data_src/js_css_src/app.js new file mode 100644 index 0000000..46305f2 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/app.js @@ -0,0 +1,5787 @@ +var tpick = { + attach: function (target) { + + var dig = document.getElementById(target).value.split(":"); + var t1 = dig[0] || "23"; + var t2 = dig[1] || "59"; + + var uniqueID = 0; + while (document.getElementById("tpick-" + uniqueID) != null) { + uniqueID = Math.floor(Math.random() * (100 - 2)) + 1; + } + var tw = document.createElement("div"); + tw.id = "tpick-" + uniqueID; + tw.classList.add("tpop"); + tw.dataset.target = target; + tw.addEventListener("click", function (evt) { + if (evt.target.classList.contains("tpop")) { + this.classList.remove("show"); + } + }); + var tp = document.createElement("div"); + tp.classList.add("tpicker"); + tp.appendChild(this.draw("h",t1)); + tp.appendChild(this.draw("m",t2)); + var bottom = document.createElement("div"), + ok = document.createElement("input"); + ok.setAttribute("type", "button"); + ok.value = "OK"; + ok.addEventListener("click", function () { + tpick.set(this); + }); + bottom.classList.add("tpicker-btn"); + bottom.appendChild(ok); + tp.appendChild(bottom); + tw.appendChild(tp); + document.body.appendChild(tw); + var target = document.getElementById(target); + target.dataset.dp = uniqueID; + target.onfocus = function () { + document.getElementById("tpick-" + this.dataset.dp).classList.add("show"); + }; + }, + draw: function (type,tv) { + var docket = document.createElement("div"), + up = document.createElement("div"), + down = document.createElement("div"), + text = document.createElement("input"); + docket.classList.add("tpicker-" + type); + up.classList.add("tpicker-up"); + down.classList.add("tpicker-down"); + up.innerHTML = "︿"; + down.innerHTML = "﹀"; + text.readOnly = true; + text.setAttribute("type", "text"); + if (type == "h") { + text.value = tv; + up.addEventListener("click", function () { + tpick.spin("h", 1, this); + }); + down.addEventListener("click", function () { + tpick.spin("h", 0, this); + }); + } else if (type == "m") { + text.value = tv; + up.addEventListener("click", function () { + tpick.spin("m", 1, this); + }); + down.addEventListener("click", function () { + tpick.spin("m", 0, this); + }); + } + docket.appendChild(up); + docket.appendChild(text); + docket.appendChild(down); + return docket; + }, + spin: function (type, direction, el) { + var parent = el.parentElement, + field = parent.getElementsByTagName("input")[0], + value = field.value; + if (type == "h") { + value = parseInt(value); + if (direction) { + value++; + } else { + value--; + } + if (value == -1) { + value = 23; + } else if (value > 23) { + value = 0; + } + } else if (type == "m") { + value = parseInt(value); + if (direction) { + value += 5; + } else { + value -= 5; + } + if (value < 0) { + value = 55; + } else if (value > 59) { + value = 0; + } + if (value < 10) { + value = "0" + value; + } + } + field.value = ('00' + value).substr(-2); + }, + set: function (el) { + var parent = el.parentElement; + while (parent.classList.contains("tpop") == false) { + parent = parent.parentElement; + } + var input = parent.querySelectorAll("input[type=text]"); + var time = input[0].value + ":" + input[1].value; + document.getElementById(parent.dataset.target).value = time; + parent.classList.remove("show"); + } +}; +var fpick = { + attach: function (target) { + + var dig = document.getElementById(target).value.split("."); + var t1 = dig[0] || "1"; + var t2 = dig[1] || "2"; + var uniqueID = 0; + while (document.getElementById("fpick-" + uniqueID) != null) { + uniqueID = Math.floor(Math.random() * (100 - 2)) + 1; + } + var tw = document.createElement("div"); + tw.id = "fpick-" + uniqueID; + tw.classList.add("tpop"); + tw.dataset.target = target; + tw.addEventListener("click", function (evt) { + if (evt.target.classList.contains("tpop")) { + this.classList.remove("show"); + } + }); + var tp = document.createElement("div"); + tp.classList.add("fpicker"); + tp.appendChild(this.draw("h",t1)); + tp.appendChild(this.draw("m",t2)); + var bottom = document.createElement("div"), + ok = document.createElement("input"); + ok.setAttribute("type", "button"); + ok.value = "OK"; + ok.addEventListener("click", function () { + fpick.set(this); + }); + bottom.classList.add("fpicker-btn"); + bottom.appendChild(ok); + tp.appendChild(bottom); + tw.appendChild(tp); + document.body.appendChild(tw); + var target = document.getElementById(target); + target.dataset.dp = uniqueID; + target.onfocus = function () { + document.getElementById("fpick-" + this.dataset.dp).classList.add("show"); + }; + }, + draw: function (type,tv) { + + var docket = document.createElement("div"), + up = document.createElement("div"), + down = document.createElement("div"), + text = document.createElement("input"); + docket.classList.add("fpicker-" + type); + up.classList.add("fpicker-up"); + down.classList.add("fpicker-down"); + up.innerHTML = "︿"; + down.innerHTML = "﹀"; + text.readOnly = true; + text.setAttribute("type", "text"); + if (type == "h") { + text.value = tv; + up.addEventListener("click", function () { + fpick.spin("h", 1, this); + }); + down.addEventListener("click", function () { + fpick.spin("h", 0, this); + }); + } else if (type == "m") { + text.value = tv; + up.addEventListener("click", function () { + fpick.spin("m", 1, this); + }); + down.addEventListener("click", function () { + fpick.spin("m", 0, this); + }); + } + docket.appendChild(up); + docket.appendChild(text); + docket.appendChild(down); + return docket; + }, + spin: function (type, direction, el) { + var parent = el.parentElement, + field = parent.getElementsByTagName("input")[0], + value = field.value; + if (type == "h") { + value = parseInt(value); + if (direction) { + value++; + } else { + value--; + } + if (value == -41) { + value = 99; + } else if (value > 99) { + value = -40; + } + } else if (type == "m") { + value = parseInt(value); + if (direction) { + value++; + } else { + value--; + } + if (value < 0) { + value = 9; + } else if (value > 9) { + value = 0; + } + } + field.value = value; + }, + set: function (el) { + var parent = el.parentElement; + while (parent.classList.contains("tpop") == false) { + parent = parent.parentElement; + } + var input = parent.querySelectorAll("input[type=text]"); + var temperature = input[0].value + "." + input[1].value; + document.getElementById(parent.dataset.target).value = temperature; + parent.classList.remove("show"); + } +}; +!function (t) { + function n(i) { + if (e[i]) + return e[i].exports; + var o = e[i] = { + i: i, + l: !1, + exports: {} + }; + return t[i].call(o.exports, o, o.exports, n), + o.l = !0, + o.exports + } + var e = {}; + n.m = t, + n.c = e, + n.d = function (t, e, i) { + n.o(t, e) || Object.defineProperty(t, e, { + configurable: !1, + enumerable: !0, + get: i + }) + }, + n.n = function (t) { + var e = t && t.__esModule ? function () { + return t.default + } + : function () { + return t + }; + return n.d(e, "a", e), + e + }, + n.o = function (t, n) { + return Object.prototype.hasOwnProperty.call(t, n) + }, + n.p = "", + n(n.s = 0) +} +([function (t, n, e) { + e(1), + t.exports = e(4) + }, function (t, n, e) { + "use strict"; + var i = Object.assign || function (t) { + for (var n = 1; n < arguments.length; n++) { + var e = arguments[n]; + for (var i in e) + Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i]) + } + return t + }; + e(2); + var o = e(3); + !function (t) { + function n(t) { + return t = i({}, c, t), + function (t) { + return ["nfc-top-left", "nfc-top-right", "nfc-bottom-left", "nfc-bottom-right"].indexOf(t) > -1 + } + (t.positionClass) || (console.warn("An invalid notification position class has been specified."), t.positionClass = c.positionClass), + t.onclick && "function" != typeof t.onclick && (console.warn("Notification on click must be a function."), t.onclick = c.onclick), + "number" != typeof t.showDuration && (t.showDuration = c.showDuration), + (0, o.isString)(t.theme) && 0 !== t.theme.length || (console.warn("Notification theme must be a string with length"), t.theme = c.theme), + t + } + function e(t) { + return t = n(t), + function () { + var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, + e = n.title, + i = n.message, + c = r(t.positionClass); + if (!e && !i) + return console.warn("Notification must contain a title or a message!"); + var a = (0, o.createElement)("div", "ncf", t.theme); + if (!0 === t.closeOnClick && a.addEventListener("click", function () { + return c.removeChild(a) + }), t.onclick && a.addEventListener("click", function (n) { + return t.onclick(n) + }), t.displayCloseButton) { + var s = (0, o.createElement)("button"); + s.innerText = "X", + !1 === t.closeOnClick && s.addEventListener("click", function () { + return c.removeChild(a) + }), + (0, o.append)(a, s) + } + if ((0, o.isString)(e) && e.length && (0, o.append)(a, (0, o.createParagraph)("ncf-title")(e)), (0, o.isString)(i) && i.length && (0, o.append)(a, (0, o.createParagraph)("nfc-message")(i)), (0, o.append)(c, a), t.showDuration && t.showDuration > 0) { + var l = setTimeout(function () { + c.removeChild(a), + 0 === c.querySelectorAll(".ncf").length && document.body.removeChild(c) + }, t.showDuration); + (t.closeOnClick || t.displayCloseButton) && a.addEventListener("click", function () { + return clearTimeout(l) + }) + } + } + } + function r(t) { + var n = document.querySelector("." + t); + return n || (n = (0, o.createElement)("div", "ncf-container", t), (0, o.append)(document.body, n)), + n + } + var c = { + closeOnClick: !0, + displayCloseButton: !1, + positionClass: "nfc-top-right", + onclick: !1, + showDuration: 3500, + theme: "success" + }; + t.createNotification ? console.warn("Window already contains a create notification function. Have you included the script twice?") : t.createNotification = e + } + (window) + }, function (t, n, e) { + "use strict"; + !function () { + function t(t) { + this.el = t; + for (var n = t.className.replace(/^\s+|\s+$/g, "").split(/\s+/), i = 0; i < n.length; i++) + e.call(this, n[i]) + } + if (!(void 0 === window.Element || "classList" in document.documentElement)) { + var n = Array.prototype, + e = n.push, + i = n.splice, + o = n.join; + t.prototype = { + add: function (t) { + this.contains(t) || (e.call(this, t), this.el.className = this.toString()) + }, + contains: function (t) { + return -1 != this.el.className.indexOf(t) + }, + item: function (t) { + return this[t] || null + }, + remove: function (t) { + if (this.contains(t)) { + for (var n = 0; n < this.length && this[n] != t; n++); + i.call(this, n, 1), + this.el.className = this.toString() + } + }, + toString: function () { + return o.call(this, " ") + }, + toggle: function (t) { + return this.contains(t) ? this.remove(t) : this.add(t), + this.contains(t) + } + }, + window.DOMTokenList = t, + function (t, n, e) { + Object.defineProperty ? Object.defineProperty(t, n, { + get: e + }) : t.__defineGetter__(n, e) + } + (Element.prototype, "classList", function () { + return new t(this) + }) + } + } + () + }, function (t, n, e) { + "use strict"; + Object.defineProperty(n, "__esModule", { + value: !0 + }); + var i = n.partial = function (t) { + for (var n = arguments.length, e = Array(n > 1 ? n - 1 : 0), i = 1; i < n; i++) + e[i - 1] = arguments[i]; + return function () { + for (var n = arguments.length, i = Array(n), o = 0; o < n; o++) + i[o] = arguments[o]; + return t.apply(void 0, e.concat(i)) + } + }, + o = (n.append = function (t) { + for (var n = arguments.length, e = Array(n > 1 ? n - 1 : 0), i = 1; i < n; i++) + e[i - 1] = arguments[i]; + return e.forEach(function (n) { + return t.appendChild(n) + }) + }, n.isString = function (t) { + return "string" == typeof t + }, n.createElement = function (t) { + for (var n = arguments.length, e = Array(n > 1 ? n - 1 : 0), i = 1; i < n; i++) + e[i - 1] = arguments[i]; + var o = document.createElement(t); + return e.length && e.forEach(function (t) { + return o.classList.add(t) + }), + o + }), + r = function (t, n) { + return t.innerText = n, + t + }, + c = function (t) { + for (var n = arguments.length, e = Array(n > 1 ? n - 1 : 0), c = 1; c < n; c++) + e[c - 1] = arguments[c]; + return i(r, o.apply(void 0, [t].concat(e))) + }; + n.createParagraph = function () { + for (var t = arguments.length, n = Array(t), e = 0; e < t; e++) + n[e] = arguments[e]; + return c.apply(void 0, ["p"].concat(n)) + } + }, function (t, n) {} + ]); +!function (a, b) { + "function" == typeof define && define.amd ? define("eve", function () { + return b() + }) : "object" == typeof exports ? module.exports = b() : a.eve = b() +} +(this, function () { + var a, + b, + c = "0.4.2", + d = "hasOwnProperty", + e = /[\.\/]/, + f = "*", + g = function () {}, + h = function (a, b) { + return a - b + }, + i = { + n: {} + }, + j = function (c, d) { + c = String(c); + var e, + f = b, + g = Array.prototype.slice.call(arguments, 2), + i = j.listeners(c), + k = 0, + l = [], + m = {}, + n = [], + o = a; + a = c, + b = 0; + for (var p = 0, q = i.length; q > p; p++) + "zIndex" in i[p] && (l.push(i[p].zIndex), i[p].zIndex < 0 && (m[i[p].zIndex] = i[p])); + for (l.sort(h); l[k] < 0; ) + if (e = m[l[k++]], n.push(e.apply(d, g)), b) + return b = f, n; + for (p = 0; q > p; p++) + if (e = i[p], "zIndex" in e) + if (e.zIndex == l[k]) { + if (n.push(e.apply(d, g)), b) + break; + do + if (k++, e = m[l[k]], e && n.push(e.apply(d, g)), b) + break; + while (e) + } else + m[e.zIndex] = e; + else if (n.push(e.apply(d, g)), b) + break; + return b = f, + a = o, + n.length ? n : null + }; + return j._events = i, + j.listeners = function (a) { + var b, + c, + d, + g, + h, + j, + k, + l, + m = a.split(e), + n = i, + o = [n], + p = []; + for (g = 0, h = m.length; h > g; g++) { + for (l = [], j = 0, k = o.length; k > j; j++) + for (n = o[j].n, c = [n[m[g]], n[f]], d = 2; d--; ) + b = c[d], b && (l.push(b), p = p.concat(b.f || [])); + o = l + } + return p + }, + j.on = function (a, b) { + if (a = String(a), "function" != typeof b) + return function () {}; + for (var c = a.split(e), d = i, f = 0, h = c.length; h > f; f++) + d = d.n, d = d.hasOwnProperty(c[f]) && d[c[f]] || (d[c[f]] = { + n: {} + }); + for (d.f = d.f || [], f = 0, h = d.f.length; h > f; f++) + if (d.f[f] == b) + return g; + return d.f.push(b), + function (a) { + +a == +a && (b.zIndex = +a) + } + }, + j.f = function (a) { + var b = [].slice.call(arguments, 1); + return function () { + j.apply(null, [a, null].concat(b).concat([].slice.call(arguments, 0))) + } + }, + j.stop = function () { + b = 1 + }, + j.nt = function (b) { + return b ? new RegExp("(?:\\.|\\/|^)" + b + "(?:\\.|\\/|$)").test(a) : a + }, + j.nts = function () { + return a.split(e) + }, + j.off = j.unbind = function (a, b) { + if (!a) + return void(j._events = i = { + n: {} + }); + var c, + g, + h, + k, + l, + m, + n, + o = a.split(e), + p = [i]; + for (k = 0, l = o.length; l > k; k++) + for (m = 0; m < p.length; m += h.length - 2) { + if (h = [m, 1], c = p[m].n, o[k] != f) + c[o[k]] && h.push(c[o[k]]); + else + for (g in c) + c[d](g) && h.push(c[g]); + p.splice.apply(p, h) + } + for (k = 0, l = p.length; l > k; k++) + for (c = p[k]; c.n; ) { + if (b) { + if (c.f) { + for (m = 0, n = c.f.length; n > m; m++) + if (c.f[m] == b) { + c.f.splice(m, 1); + break + } + !c.f.length && delete c.f + } + for (g in c.n) + if (c.n[d](g) && c.n[g].f) { + var q = c.n[g].f; + for (m = 0, n = q.length; n > m; m++) + if (q[m] == b) { + q.splice(m, 1); + break + } + !q.length && delete c.n[g].f + } + } else { + delete c.f; + for (g in c.n) + c.n[d](g) && c.n[g].f && delete c.n[g].f + } + c = c.n + } + }, + j.once = function (a, b) { + var c = function () { + return j.unbind(a, c), + b.apply(this, arguments) + }; + return j.on(a, c) + }, + j.version = c, + j.toString = function () { + return "You are running Eve " + c + }, + j +}), function (a, b) { + "function" == typeof define && define.amd ? define("raphael.core", ["eve"], function (a) { + return b(a) + }) : "object" == typeof exports ? module.exports = b(require("eve")) : a.Raphael = b(a.eve) +} +(this, function (a) { + function b(c) { + if (b.is(c, "function")) + return t ? c() : a.on("raphael.DOMload", c); + if (b.is(c, U)) + return b._engine.create[C](b, c.splice(0, 3 + b.is(c[0], S))).add(c); + var d = Array.prototype.slice.call(arguments, 0); + if (b.is(d[d.length - 1], "function")) { + var e = d.pop(); + return t ? e.call(b._engine.create[C](b, d)) : a.on("raphael.DOMload", function () { + e.call(b._engine.create[C](b, d)) + }) + } + return b._engine.create[C](b, arguments) + } + function c(a) { + if ("function" == typeof a || Object(a) !== a) + return a; + var b = new a.constructor; + for (var d in a) + a[y](d) && (b[d] = c(a[d])); + return b + } + function d(a, b) { + for (var c = 0, d = a.length; d > c; c++) + if (a[c] === b) + return a.push(a.splice(c, 1)[0]) + } + function e(a, b, c) { + function e() { + var f = Array.prototype.slice.call(arguments, 0), + g = f.join("␀"), + h = e.cache = e.cache || {}, + i = e.count = e.count || []; + return h[y](g) ? (d(i, g), c ? c(h[g]) : h[g]) : (i.length >= 1e3 && delete h[i.shift()], i.push(g), h[g] = a[C](b, f), c ? c(h[g]) : h[g]) + } + return e + } + function f() { + return this.hex + } + function g(a, b) { + for (var c = [], d = 0, e = a.length; e - 2 * !b > d; d += 2) { + var f = [{ + x: +a[d - 2], + y: +a[d - 1] + }, { + x: +a[d], + y: +a[d + 1] + }, { + x: +a[d + 2], + y: +a[d + 3] + }, { + x: +a[d + 4], + y: +a[d + 5] + } + ]; + b ? d ? e - 4 == d ? f[3] = { + x: +a[0], + y: +a[1] + } + : e - 2 == d && (f[2] = { + x: +a[0], + y: +a[1] + }, f[3] = { + x: +a[2], + y: +a[3] + }) : f[0] = { + x: +a[e - 2], + y: +a[e - 1] + } + : e - 4 == d ? f[3] = f[2] : d || (f[0] = { + x: +a[d], + y: +a[d + 1] + }), + c.push(["C", (-f[0].x + 6 * f[1].x + f[2].x) / 6, (-f[0].y + 6 * f[1].y + f[2].y) / 6, (f[1].x + 6 * f[2].x - f[3].x) / 6, (f[1].y + 6 * f[2].y - f[3].y) / 6, f[2].x, f[2].y]) + } + return c + } + function h(a, b, c, d, e) { + var f = -3 * b + 9 * c - 9 * d + 3 * e, + g = a * f + 6 * b - 12 * c + 6 * d; + return a * g - 3 * b + 3 * c + } + function i(a, b, c, d, e, f, g, i, j) { + null == j && (j = 1), + j = j > 1 ? 1 : 0 > j ? 0 : j; + for (var k = j / 2, l = 12, m = [ - .1252, .1252, - .3678, .3678, - .5873, .5873, - .7699, .7699, - .9041, .9041, - .9816, .9816], n = [.2491, .2491, .2335, .2335, .2032, .2032, .1601, .1601, .1069, .1069, .0472, .0472], o = 0, p = 0; l > p; p++) { + var q = k * m[p] + k, + r = h(q, a, c, e, g), + s = h(q, b, d, f, i), + t = r * r + s * s; + o += n[p] * M.sqrt(t) + } + return k * o + } + function j(a, b, c, d, e, f, g, h, j) { + if (!(0 > j || i(a, b, c, d, e, f, g, h) < j)) { + var k, + l = 1, + m = l / 2, + n = l - m, + o = .01; + for (k = i(a, b, c, d, e, f, g, h, n); P(k - j) > o; ) + m /= 2, n += (j > k ? 1 : -1) * m, k = i(a, b, c, d, e, f, g, h, n); + return n + } + } + function k(a, b, c, d, e, f, g, h) { + if (!(N(a, c) < O(e, g) || O(a, c) > N(e, g) || N(b, d) < O(f, h) || O(b, d) > N(f, h))) { + var i = (a * d - b * c) * (e - g) - (a - c) * (e * h - f * g), + j = (a * d - b * c) * (f - h) - (b - d) * (e * h - f * g), + k = (a - c) * (f - h) - (b - d) * (e - g); + if (k) { + var l = i / k, + m = j / k, + n = +l.toFixed(2), + o = +m.toFixed(2); + if (!(n < +O(a, c).toFixed(2) || n > +N(a, c).toFixed(2) || n < +O(e, g).toFixed(2) || n > +N(e, g).toFixed(2) || o < +O(b, d).toFixed(2) || o > +N(b, d).toFixed(2) || o < +O(f, h).toFixed(2) || o > +N(f, h).toFixed(2))) + return { + x: l, + y: m + } + } + } + } + function l(a, c, d) { + var e = b.bezierBBox(a), + f = b.bezierBBox(c); + if (!b.isBBoxIntersect(e, f)) + return d ? 0 : []; + for (var g = i.apply(0, a), h = i.apply(0, c), j = N(~~(g / 5), 1), l = N(~~(h / 5), 1), m = [], n = [], o = {}, p = d ? 0 : [], q = 0; j + 1 > q; q++) { + var r = b.findDotsAtSegment.apply(b, a.concat(q / j)); + m.push({ + x: r.x, + y: r.y, + t: q / j + }) + } + for (q = 0; l + 1 > q; q++) + r = b.findDotsAtSegment.apply(b, c.concat(q / l)), n.push({ + x: r.x, + y: r.y, + t: q / l + }); + for (q = 0; j > q; q++) + for (var s = 0; l > s; s++) { + var t = m[q], + u = m[q + 1], + v = n[s], + w = n[s + 1], + x = P(u.x - t.x) < .001 ? "y" : "x", + y = P(w.x - v.x) < .001 ? "y" : "x", + z = k(t.x, t.y, u.x, u.y, v.x, v.y, w.x, w.y); + if (z) { + if (o[z.x.toFixed(4)] == z.y.toFixed(4)) + continue; + o[z.x.toFixed(4)] = z.y.toFixed(4); + var A = t.t + P((z[x] - t[x]) / (u[x] - t[x])) * (u.t - t.t), + B = v.t + P((z[y] - v[y]) / (w[y] - v[y])) * (w.t - v.t); + A >= 0 && 1.001 >= A && B >= 0 && 1.001 >= B && (d ? p++ : p.push({ + x: z.x, + y: z.y, + t1: O(A, 1), + t2: O(B, 1) + })) + } + } + return p + } + function m(a, c, d) { + a = b._path2curve(a), + c = b._path2curve(c); + for (var e, f, g, h, i, j, k, m, n, o, p = d ? 0 : [], q = 0, r = a.length; r > q; q++) { + var s = a[q]; + if ("M" == s[0]) + e = i = s[1], f = j = s[2]; + else { + "C" == s[0] ? (n = [e, f].concat(s.slice(1)), e = n[6], f = n[7]) : (n = [e, f, e, f, i, j, i, j], e = i, f = j); + for (var t = 0, u = c.length; u > t; t++) { + var v = c[t]; + if ("M" == v[0]) + g = k = v[1], h = m = v[2]; + else { + "C" == v[0] ? (o = [g, h].concat(v.slice(1)), g = o[6], h = o[7]) : (o = [g, h, g, h, k, m, k, m], g = k, h = m); + var w = l(n, o, d); + if (d) + p += w; + else { + for (var x = 0, y = w.length; y > x; x++) + w[x].segment1 = q, w[x].segment2 = t, w[x].bez1 = n, w[x].bez2 = o; + p = p.concat(w) + } + } + } + } + } + return p + } + function n(a, b, c, d, e, f) { + null != a ? (this.a = +a, this.b = +b, this.c = +c, this.d = +d, this.e = +e, this.f = +f) : (this.a = 1, this.b = 0, this.c = 0, this.d = 1, this.e = 0, this.f = 0) + } + function o() { + return this.x + G + this.y + G + this.width + " × " + this.height + } + function p(a, b, c, d, e, f) { + function g(a) { + return ((l * a + k) * a + j) * a + } + function h(a, b) { + var c = i(a, b); + return ((o * c + n) * c + m) * c + } + function i(a, b) { + var c, + d, + e, + f, + h, + i; + for (e = a, i = 0; 8 > i; i++) { + if (f = g(e) - a, P(f) < b) + return e; + if (h = (3 * l * e + 2 * k) * e + j, P(h) < 1e-6) + break; + e -= f / h + } + if (c = 0, d = 1, e = a, c > e) + return c; + if (e > d) + return d; + for (; d > c; ) { + if (f = g(e), P(f - a) < b) + return e; + a > f ? c = e : d = e, + e = (d - c) / 2 + c + } + return e + } + var j = 3 * b, + k = 3 * (d - b) - j, + l = 1 - j - k, + m = 3 * c, + n = 3 * (e - c) - m, + o = 1 - m - n; + return h(a, 1 / (200 * f)) + } + function q(a, b) { + var c = [], + d = {}; + if (this.ms = b, this.times = 1, a) { + for (var e in a) + a[y](e) && (d[$(e)] = a[e], c.push($(e))); + c.sort(ka) + } + this.anim = d, + this.top = c[c.length - 1], + this.percents = c + } + function r(c, d, e, f, g, h) { + e = $(e); + var i, + j, + k, + l, + m, + o, + q = c.ms, + r = {}, + s = {}, + t = {}; + if (f) + for (w = 0, x = fb.length; x > w; w++) { + var u = fb[w]; + if (u.el.id == d.id && u.anim == c) { + u.percent != e ? (fb.splice(w, 1), k = 1) : j = u, + d.attr(u.totalOrigin); + break + } + } + else + f = +s; + for (var w = 0, x = c.percents.length; x > w; w++) { + if (c.percents[w] == e || c.percents[w] > f * c.top) { + e = c.percents[w], + m = c.percents[w - 1] || 0, + q = q / c.top * (e - m), + l = c.percents[w + 1], + i = c.anim[e]; + break + } + f && d.attr(c.anim[c.percents[w]]) + } + if (i) { + if (j) + j.initstatus = f, j.start = new Date - j.ms * f; + else { + for (var z in i) + if (i[y](z) && (ca[y](z) || d.paper.customAttributes[y](z))) + switch (r[z] = d.attr(z), null == r[z] && (r[z] = ba[z]), s[z] = i[z], ca[z]) { + case S: + t[z] = (s[z] - r[z]) / q; + break; + case "colour": + r[z] = b.getRGB(r[z]); + var A = b.getRGB(s[z]); + t[z] = { + r: (A.r - r[z].r) / q, + g: (A.g - r[z].g) / q, + b: (A.b - r[z].b) / q + }; + break; + case "path": + var B = Ia(r[z], s[z]), + C = B[1]; + for (r[z] = B[0], t[z] = [], w = 0, x = r[z].length; x > w; w++) { + t[z][w] = [0]; + for (var E = 1, F = r[z][w].length; F > E; E++) + t[z][w][E] = (C[w][E] - r[z][w][E]) / q + } + break; + case "transform": + var G = d._, + J = Na(G[z], s[z]); + if (J) + for (r[z] = J.from, s[z] = J.to, t[z] = [], t[z].real = !0, w = 0, x = r[z].length; x > w; w++) + for (t[z][w] = [r[z][w][0]], E = 1, F = r[z][w].length; F > E; E++) + t[z][w][E] = (s[z][w][E] - r[z][w][E]) / q; + else { + var K = d.matrix || new n, + L = { + _: { + transform: G.transform + }, + getBBox: function () { + return d.getBBox(1) + } + }; + r[z] = [K.a, K.b, K.c, K.d, K.e, K.f], + La(L, s[z]), + s[z] = L._.transform, + t[z] = [(L.matrix.a - K.a) / q, (L.matrix.b - K.b) / q, (L.matrix.c - K.c) / q, (L.matrix.d - K.d) / q, (L.matrix.e - K.e) / q, (L.matrix.f - K.f) / q] + } + break; + case "csv": + var M = H(i[z])[I](v), + N = H(r[z])[I](v); + if ("clip-rect" == z) + for (r[z] = N, t[z] = [], w = N.length; w--; ) + t[z][w] = (M[w] - r[z][w]) / q; + s[z] = M; + break; + default: + for (M = [][D](i[z]), N = [][D](r[z]), t[z] = [], w = d.paper.customAttributes[z].length; w--; ) + t[z][w] = ((M[w] || 0) - (N[w] || 0)) / q + } + var O = i.easing, + P = b.easing_formulas[O]; + if (!P) + if (P = H(O).match(Y), P && 5 == P.length) { + var Q = P; + P = function (a) { + return p(a, +Q[1], +Q[2], +Q[3], +Q[4], q) + } + } else + P = la; + if (o = i.start || c.start || +new Date, u = { + anim: c, + percent: e, + timestamp: o, + start: o + (c.del || 0), + status: 0, + initstatus: f || 0, + stop: !1, + ms: q, + easing: P, + from: r, + diff: t, + to: s, + el: d, + callback: i.callback, + prev: m, + next: l, + repeat: h || c.times, + origin: d.attr(), + totalOrigin: g + }, fb.push(u), f && !j && !k && (u.stop = !0, u.start = new Date - q * f, 1 == fb.length)) + return hb(); + k && (u.start = new Date - u.ms * f), + 1 == fb.length && gb(hb) + } + a("raphael.anim.start." + d.id, d, c) + } + } + function s(a) { + for (var b = 0; b < fb.length; b++) + fb[b].el.paper == a && fb.splice(b--, 1) + } + b.version = "2.1.4", + b.eve = a; + var t, + u, + v = /[, ]+/, + w = { + circle: 1, + rect: 1, + path: 1, + ellipse: 1, + text: 1, + image: 1 + }, + x = /\{(\d+)\}/g, + y = "hasOwnProperty", + z = { + doc: document, + win: window + }, + A = { + was: Object.prototype[y].call(z.win, "Raphael"), + is: z.win.Raphael + }, + B = function () { + this.ca = this.customAttributes = {} + }, + C = "apply", + D = "concat", + E = "ontouchstart" in z.win || z.win.DocumentTouch && z.doc instanceof DocumentTouch, + F = "", + G = " ", + H = String, + I = "split", + J = "click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel"[I](G), + K = { + mousedown: "touchstart", + mousemove: "touchmove", + mouseup: "touchend" + }, + L = H.prototype.toLowerCase, + M = Math, + N = M.max, + O = M.min, + P = M.abs, + Q = M.pow, + R = M.PI, + S = "number", + T = "string", + U = "array", + V = Object.prototype.toString, + W = (b._ISURL = /^url\(['"]?(.+?)['"]?\)$/i, /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i), + X = { + NaN: 1, + Infinity: 1, + "-Infinity": 1 + }, + Y = /^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/, + Z = M.round, + $ = parseFloat, + _ = parseInt, + aa = H.prototype.toUpperCase, + ba = b._availableAttrs = { + "arrow-end": "none", + "arrow-start": "none", + blur: 0, + "clip-rect": "0 0 1e9 1e9", + cursor: "default", + cx: 0, + cy: 0, + fill: "#fff", + "fill-opacity": 1, + font: '10px "Arial"', + "font-family": '"Arial"', + "font-size": "10", + "font-style": "normal", + "font-weight": 400, + gradient: 0, + height: 0, + href: "http://raphaeljs.com/", + "letter-spacing": 0, + opacity: 1, + path: "M0,0", + r: 0, + rx: 0, + ry: 0, + src: "", + stroke: "#000", + "stroke-dasharray": "", + "stroke-linecap": "butt", + "stroke-linejoin": "butt", + "stroke-miterlimit": 0, + "stroke-opacity": 1, + "stroke-width": 1, + target: "_blank", + "text-anchor": "middle", + title: "Raphael", + transform: "", + width: 0, + x: 0, + y: 0 + }, + ca = b._availableAnimAttrs = { + blur: S, + "clip-rect": "csv", + cx: S, + cy: S, + fill: "colour", + "fill-opacity": S, + "font-size": S, + height: S, + opacity: S, + path: "path", + r: S, + rx: S, + ry: S, + stroke: "colour", + "stroke-opacity": S, + "stroke-width": S, + transform: "transform", + width: S, + x: S, + y: S + }, + da = /[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/, + ea = { + hs: 1, + rg: 1 + }, + fa = /,?([achlmqrstvxz]),?/gi, + ga = /([achlmrqstvz])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi, + ha = /([rstm])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi, + ia = /(-?\d*\.?\d*(?:e[\-+]?\d+)?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/gi, + ja = (b._radial_gradient = /^r(?:\(([^,]+?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*([^\)]+?)\))?/, {}), + ka = function (a, b) { + return $(a) - $(b) + }, + la = function (a) { + return a + }, + ma = b._rectPath = function (a, b, c, d, e) { + return e ? [["M", a + e, b], ["l", c - 2 * e, 0], ["a", e, e, 0, 0, 1, e, e], ["l", 0, d - 2 * e], ["a", e, e, 0, 0, 1, -e, e], ["l", 2 * e - c, 0], ["a", e, e, 0, 0, 1, -e, -e], ["l", 0, 2 * e - d], ["a", e, e, 0, 0, 1, e, -e], ["z"]] : [["M", a, b], ["l", c, 0], ["l", 0, d], ["l", -c, 0], ["z"]] + }, + na = function (a, b, c, d) { + return null == d && (d = c), + [["M", a, b], ["m", 0, -d], ["a", c, d, 0, 1, 1, 0, 2 * d], ["a", c, d, 0, 1, 1, 0, -2 * d], ["z"]] + }, + oa = b._getPath = { + path: function (a) { + return a.attr("path") + }, + circle: function (a) { + var b = a.attrs; + return na(b.cx, b.cy, b.r) + }, + ellipse: function (a) { + var b = a.attrs; + return na(b.cx, b.cy, b.rx, b.ry) + }, + rect: function (a) { + var b = a.attrs; + return ma(b.x, b.y, b.width, b.height, b.r) + }, + image: function (a) { + var b = a.attrs; + return ma(b.x, b.y, b.width, b.height) + }, + text: function (a) { + var b = a._getBBox(); + return ma(b.x, b.y, b.width, b.height) + }, + set: function (a) { + var b = a._getBBox(); + return ma(b.x, b.y, b.width, b.height) + } + }, + pa = b.mapPath = function (a, b) { + if (!b) + return a; + var c, + d, + e, + f, + g, + h, + i; + for (a = Ia(a), e = 0, g = a.length; g > e; e++) + for (i = a[e], f = 1, h = i.length; h > f; f += 2) + c = b.x(i[f], i[f + 1]), d = b.y(i[f], i[f + 1]), i[f] = c, i[f + 1] = d; + return a + }; + if (b._g = z, b.type = z.win.SVGAngle || z.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") ? "SVG" : "VML", "VML" == b.type) { + var qa, + ra = z.doc.createElement("div"); + if (ra.innerHTML = '', qa = ra.firstChild, qa.style.behavior = "url(#default#VML)", !qa || "object" != typeof qa.adj) + return b.type = F; + ra = null + } + b.svg = !(b.vml = "VML" == b.type), + b._Paper = B, + b.fn = u = B.prototype = b.prototype, + b._id = 0, + b._oid = 0, + b.is = function (a, b) { + return b = L.call(b), + "finite" == b ? !X[y](+a) : "array" == b ? a instanceof Array : "null" == b && null === a || b == typeof a && null !== a || "object" == b && a === Object(a) || "array" == b && Array.isArray && Array.isArray(a) || V.call(a).slice(8, -1).toLowerCase() == b + }, + b.angle = function (a, c, d, e, f, g) { + if (null == f) { + var h = a - d, + i = c - e; + return h || i ? (180 + 180 * M.atan2(-i, -h) / R + 360) % 360 : 0 + } + return b.angle(a, c, f, g) - b.angle(d, e, f, g) + }, + b.rad = function (a) { + return a % 360 * R / 180 + }, + b.deg = function (a) { + return Math.round(180 * a / R % 360 * 1e3) / 1e3 + }, + b.snapTo = function (a, c, d) { + if (d = b.is(d, "finite") ? d : 10, b.is(a, U)) { + for (var e = a.length; e--; ) + if (P(a[e] - c) <= d) + return a[e] + } else { + a = +a; + var f = c % a; + if (d > f) + return c - f; + if (f > a - d) + return c - f + a + } + return c + }; + b.createUUID = function (a, b) { + return function () { + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a, b).toUpperCase() + } + } + (/[xy]/g, function (a) { + var b = 16 * M.random() | 0, + c = "x" == a ? b : 3 & b | 8; + return c.toString(16) + }); + b.setWindow = function (c) { + a("raphael.setWindow", b, z.win, c), + z.win = c, + z.doc = z.win.document, + b._engine.initWin && b._engine.initWin(z.win) + }; + var sa = function (a) { + if (b.vml) { + var c, + d = /^\s+|\s+$/g; + try { + var f = new ActiveXObject("htmlfile"); + f.write(""), + f.close(), + c = f.body + } catch (g) { + c = createPopup().document.body + } + var h = c.createTextRange(); + sa = e(function (a) { + try { + c.style.color = H(a).replace(d, F); + var b = h.queryCommandValue("ForeColor"); + return b = (255 & b) << 16 | 65280 & b | (16711680 & b) >>> 16, + "#" + ("000000" + b.toString(16)).slice(-6) + } catch (e) { + return "none" + } + }) + } else { + var i = z.doc.createElement("i"); + i.title = "Raphaël Colour Picker", + i.style.display = "none", + z.doc.body.appendChild(i), + sa = e(function (a) { + return i.style.color = a, + z.doc.defaultView.getComputedStyle(i, F).getPropertyValue("color") + }) + } + return sa(a) + }, + ta = function () { + return "hsb(" + [this.h, this.s, this.b] + ")" + }, + ua = function () { + return "hsl(" + [this.h, this.s, this.l] + ")" + }, + va = function () { + return this.hex + }, + wa = function (a, c, d) { + if (null == c && b.is(a, "object") && "r" in a && "g" in a && "b" in a && (d = a.b, c = a.g, a = a.r), null == c && b.is(a, T)) { + var e = b.getRGB(a); + a = e.r, + c = e.g, + d = e.b + } + return (a > 1 || c > 1 || d > 1) && (a /= 255, c /= 255, d /= 255), + [a, c, d] + }, + xa = function (a, c, d, e) { + a *= 255, + c *= 255, + d *= 255; + var f = { + r: a, + g: c, + b: d, + hex: b.rgb(a, c, d), + toString: va + }; + return b.is(e, "finite") && (f.opacity = e), + f + }; + b.color = function (a) { + var c; + return b.is(a, "object") && "h" in a && "s" in a && "b" in a ? (c = b.hsb2rgb(a), a.r = c.r, a.g = c.g, a.b = c.b, a.hex = c.hex) : b.is(a, "object") && "h" in a && "s" in a && "l" in a ? (c = b.hsl2rgb(a), a.r = c.r, a.g = c.g, a.b = c.b, a.hex = c.hex) : (b.is(a, "string") && (a = b.getRGB(a)), b.is(a, "object") && "r" in a && "g" in a && "b" in a ? (c = b.rgb2hsl(a), a.h = c.h, a.s = c.s, a.l = c.l, c = b.rgb2hsb(a), a.v = c.b) : (a = { + hex: "none" + }, a.r = a.g = a.b = a.h = a.s = a.v = a.l = -1)), + a.toString = va, + a + }, + b.hsb2rgb = function (a, b, c, d) { + this.is(a, "object") && "h" in a && "s" in a && "b" in a && (c = a.b, b = a.s, d = a.o, a = a.h), + a *= 360; + var e, + f, + g, + h, + i; + return a = a % 360 / 60, + i = c * b, + h = i * (1 - P(a % 2 - 1)), + e = f = g = c - i, + a = ~~a, + e += [i, h, 0, 0, h, i][a], + f += [h, i, i, h, 0, 0][a], + g += [0, 0, h, i, i, h][a], + xa(e, f, g, d) + }, + b.hsl2rgb = function (a, b, c, d) { + this.is(a, "object") && "h" in a && "s" in a && "l" in a && (c = a.l, b = a.s, a = a.h), + (a > 1 || b > 1 || c > 1) && (a /= 360, b /= 100, c /= 100), + a *= 360; + var e, + f, + g, + h, + i; + return a = a % 360 / 60, + i = 2 * b * (.5 > c ? c : 1 - c), + h = i * (1 - P(a % 2 - 1)), + e = f = g = c - i / 2, + a = ~~a, + e += [i, h, 0, 0, h, i][a], + f += [h, i, i, h, 0, 0][a], + g += [0, 0, h, i, i, h][a], + xa(e, f, g, d) + }, + b.rgb2hsb = function (a, b, c) { + c = wa(a, b, c), + a = c[0], + b = c[1], + c = c[2]; + var d, + e, + f, + g; + return f = N(a, b, c), + g = f - O(a, b, c), + d = 0 == g ? null : f == a ? (b - c) / g : f == b ? (c - a) / g + 2 : (a - b) / g + 4, + d = (d + 360) % 6 * 60 / 360, + e = 0 == g ? 0 : g / f, { + h: d, + s: e, + b: f, + toString: ta + } + }, + b.rgb2hsl = function (a, b, c) { + c = wa(a, b, c), + a = c[0], + b = c[1], + c = c[2]; + var d, + e, + f, + g, + h, + i; + return g = N(a, b, c), + h = O(a, b, c), + i = g - h, + d = 0 == i ? null : g == a ? (b - c) / i : g == b ? (c - a) / i + 2 : (a - b) / i + 4, + d = (d + 360) % 6 * 60 / 360, + f = (g + h) / 2, + e = 0 == i ? 0 : .5 > f ? i / (2 * f) : i / (2 - 2 * f), { + h: d, + s: e, + l: f, + toString: ua + } + }, + b._path2string = function () { + return this.join(",").replace(fa, "$1") + }; + b._preload = function (a, b) { + var c = z.doc.createElement("img"); + c.style.cssText = "position:absolute;left:-9999em;top:-9999em", + c.onload = function () { + b.call(this), + this.onload = null, + z.doc.body.removeChild(this) + }, + c.onerror = function () { + z.doc.body.removeChild(this) + }, + z.doc.body.appendChild(c), + c.src = a + }; + b.getRGB = e(function (a) { + if (!a || (a = H(a)).indexOf("-") + 1) + return { + r: -1, + g: -1, + b: -1, + hex: "none", + error: 1, + toString: f + }; + if ("none" == a) + return { + r: -1, + g: -1, + b: -1, + hex: "none", + toString: f + }; + !(ea[y](a.toLowerCase().substring(0, 2)) || "#" == a.charAt()) && (a = sa(a)); + var c, + d, + e, + g, + h, + i, + j = a.match(W); + return j ? (j[2] && (e = _(j[2].substring(5), 16), d = _(j[2].substring(3, 5), 16), c = _(j[2].substring(1, 3), 16)), j[3] && (e = _((h = j[3].charAt(3)) + h, 16), d = _((h = j[3].charAt(2)) + h, 16), c = _((h = j[3].charAt(1)) + h, 16)), j[4] && (i = j[4][I](da), c = $(i[0]), "%" == i[0].slice(-1) && (c *= 2.55), d = $(i[1]), "%" == i[1].slice(-1) && (d *= 2.55), e = $(i[2]), "%" == i[2].slice(-1) && (e *= 2.55), "rgba" == j[1].toLowerCase().slice(0, 4) && (g = $(i[3])), i[3] && "%" == i[3].slice(-1) && (g /= 100)), j[5] ? (i = j[5][I](da), c = $(i[0]), "%" == i[0].slice(-1) && (c *= 2.55), d = $(i[1]), "%" == i[1].slice(-1) && (d *= 2.55), e = $(i[2]), "%" == i[2].slice(-1) && (e *= 2.55), ("deg" == i[0].slice(-3) || "°" == i[0].slice(-1)) && (c /= 360), "hsba" == j[1].toLowerCase().slice(0, 4) && (g = $(i[3])), i[3] && "%" == i[3].slice(-1) && (g /= 100), b.hsb2rgb(c, d, e, g)) : j[6] ? (i = j[6][I](da), c = $(i[0]), "%" == i[0].slice(-1) && (c *= 2.55), d = $(i[1]), "%" == i[1].slice(-1) && (d *= 2.55), e = $(i[2]), "%" == i[2].slice(-1) && (e *= 2.55), ("deg" == i[0].slice(-3) || "°" == i[0].slice(-1)) && (c /= 360), "hsla" == j[1].toLowerCase().slice(0, 4) && (g = $(i[3])), i[3] && "%" == i[3].slice(-1) && (g /= 100), b.hsl2rgb(c, d, e, g)) : (j = { + r: c, + g: d, + b: e, + toString: f + }, j.hex = "#" + (16777216 | e | d << 8 | c << 16).toString(16).slice(1), b.is(g, "finite") && (j.opacity = g), j)) : { + r: -1, + g: -1, + b: -1, + hex: "none", + error: 1, + toString: f + } + }, b), + b.hsb = e(function (a, c, d) { + return b.hsb2rgb(a, c, d).hex + }), + b.hsl = e(function (a, c, d) { + return b.hsl2rgb(a, c, d).hex + }), + b.rgb = e(function (a, b, c) { + function d(a) { + return a + .5 | 0 + } + return "#" + (16777216 | d(c) | d(b) << 8 | d(a) << 16).toString(16).slice(1) + }), + b.getColor = function (a) { + var b = this.getColor.start = this.getColor.start || { + h: 0, + s: 1, + b: a || .75 + }, + c = this.hsb2rgb(b.h, b.s, b.b); + return b.h += .075, + b.h > 1 && (b.h = 0, b.s -= .2, b.s <= 0 && (this.getColor.start = { + h: 0, + s: 1, + b: b.b + })), + c.hex + }, + b.getColor.reset = function () { + delete this.start + }, + b.parsePathString = function (a) { + if (!a) + return null; + var c = ya(a); + if (c.arr) + return Aa(c.arr); + var d = { + a: 7, + c: 6, + h: 1, + l: 2, + m: 2, + r: 4, + q: 4, + s: 4, + t: 2, + v: 1, + z: 0 + }, + e = []; + return b.is(a, U) && b.is(a[0], U) && (e = Aa(a)), + e.length || H(a).replace(ga, function (a, b, c) { + var f = [], + g = b.toLowerCase(); + if (c.replace(ia, function (a, b) { + b && f.push(+b) + }), "m" == g && f.length > 2 && (e.push([b][D](f.splice(0, 2))), g = "l", b = "m" == b ? "l" : "L"), "r" == g) + e.push([b][D](f)); + else + for (; f.length >= d[g] && (e.push([b][D](f.splice(0, d[g]))), d[g]); ); + }), + e.toString = b._path2string, + c.arr = Aa(e), + e + }, + b.parseTransformString = e(function (a) { + if (!a) + return null; + var c = []; + return b.is(a, U) && b.is(a[0], U) && (c = Aa(a)), + c.length || H(a).replace(ha, function (a, b, d) { { + var e = []; + L.call(b) + } + d.replace(ia, function (a, b) { + b && e.push(+b) + }), + c.push([b][D](e)) + }), + c.toString = b._path2string, + c + }); + var ya = function (a) { + var b = ya.ps = ya.ps || {}; + return b[a] ? b[a].sleep = 100 : b[a] = { + sleep: 100 + }, + setTimeout(function () { + for (var c in b) + b[y](c) && c != a && (b[c].sleep--, !b[c].sleep && delete b[c]) + }), + b[a] + }; + b.findDotsAtSegment = function (a, b, c, d, e, f, g, h, i) { + var j = 1 - i, + k = Q(j, 3), + l = Q(j, 2), + m = i * i, + n = m * i, + o = k * a + 3 * l * i * c + 3 * j * i * i * e + n * g, + p = k * b + 3 * l * i * d + 3 * j * i * i * f + n * h, + q = a + 2 * i * (c - a) + m * (e - 2 * c + a), + r = b + 2 * i * (d - b) + m * (f - 2 * d + b), + s = c + 2 * i * (e - c) + m * (g - 2 * e + c), + t = d + 2 * i * (f - d) + m * (h - 2 * f + d), + u = j * a + i * c, + v = j * b + i * d, + w = j * e + i * g, + x = j * f + i * h, + y = 90 - 180 * M.atan2(q - s, r - t) / R; + return (q > s || t > r) && (y += 180), { + x: o, + y: p, + m: { + x: q, + y: r + }, + n: { + x: s, + y: t + }, + start: { + x: u, + y: v + }, + end: { + x: w, + y: x + }, + alpha: y + } + }, + b.bezierBBox = function (a, c, d, e, f, g, h, i) { + b.is(a, "array") || (a = [a, c, d, e, f, g, h, i]); + var j = Ha.apply(null, a); + return { + x: j.min.x, + y: j.min.y, + x2: j.max.x, + y2: j.max.y, + width: j.max.x - j.min.x, + height: j.max.y - j.min.y + } + }, + b.isPointInsideBBox = function (a, b, c) { + return b >= a.x && b <= a.x2 && c >= a.y && c <= a.y2 + }, + b.isBBoxIntersect = function (a, c) { + var d = b.isPointInsideBBox; + return d(c, a.x, a.y) || d(c, a.x2, a.y) || d(c, a.x, a.y2) || d(c, a.x2, a.y2) || d(a, c.x, c.y) || d(a, c.x2, c.y) || d(a, c.x, c.y2) || d(a, c.x2, c.y2) || (a.x < c.x2 && a.x > c.x || c.x < a.x2 && c.x > a.x) && (a.y < c.y2 && a.y > c.y || c.y < a.y2 && c.y > a.y) + }, + b.pathIntersection = function (a, b) { + return m(a, b) + }, + b.pathIntersectionNumber = function (a, b) { + return m(a, b, 1) + }, + b.isPointInsidePath = function (a, c, d) { + var e = b.pathBBox(a); + return b.isPointInsideBBox(e, c, d) && m(a, [["M", c, d], ["H", e.x2 + 10]], 1) % 2 == 1 + }, + b._removedFactory = function (b) { + return function () { + a("raphael.log", null, "Raphaël: you are calling to method “" + b + "” of removed object", b) + } + }; + var za = b.pathBBox = function (a) { + var b = ya(a); + if (b.bbox) + return c(b.bbox); + if (!a) + return { + x: 0, + y: 0, + width: 0, + height: 0, + x2: 0, + y2: 0 + }; + a = Ia(a); + for (var d, e = 0, f = 0, g = [], h = [], i = 0, j = a.length; j > i; i++) + if (d = a[i], "M" == d[0]) + e = d[1], f = d[2], g.push(e), h.push(f); + else { + var k = Ha(e, f, d[1], d[2], d[3], d[4], d[5], d[6]); + g = g[D](k.min.x, k.max.x), + h = h[D](k.min.y, k.max.y), + e = d[5], + f = d[6] + } + var l = O[C](0, g), + m = O[C](0, h), + n = N[C](0, g), + o = N[C](0, h), + p = n - l, + q = o - m, + r = { + x: l, + y: m, + x2: n, + y2: o, + width: p, + height: q, + cx: l + p / 2, + cy: m + q / 2 + }; + return b.bbox = c(r), + r + }, + Aa = function (a) { + var d = c(a); + return d.toString = b._path2string, + d + }, + Ba = b._pathToRelative = function (a) { + var c = ya(a); + if (c.rel) + return Aa(c.rel); + b.is(a, U) && b.is(a && a[0], U) || (a = b.parsePathString(a)); + var d = [], + e = 0, + f = 0, + g = 0, + h = 0, + i = 0; + "M" == a[0][0] && (e = a[0][1], f = a[0][2], g = e, h = f, i++, d.push(["M", e, f])); + for (var j = i, k = a.length; k > j; j++) { + var l = d[j] = [], + m = a[j]; + if (m[0] != L.call(m[0])) + switch (l[0] = L.call(m[0]), l[0]) { + case "a": + l[1] = m[1], + l[2] = m[2], + l[3] = m[3], + l[4] = m[4], + l[5] = m[5], + l[6] = + (m[6] - e).toFixed(3), + l[7] = + (m[7] - f).toFixed(3); + break; + case "v": + l[1] = + (m[1] - f).toFixed(3); + break; + case "m": + g = m[1], + h = m[2]; + default: + for (var n = 1, o = m.length; o > n; n++) + l[n] = + (m[n] - (n % 2 ? e : f)).toFixed(3) + } + else { + l = d[j] = [], + "m" == m[0] && (g = m[1] + e, h = m[2] + f); + for (var p = 0, q = m.length; q > p; p++) + d[j][p] = m[p] + } + var r = d[j].length; + switch (d[j][0]) { + case "z": + e = g, + f = h; + break; + case "h": + e += +d[j][r - 1]; + break; + case "v": + f += +d[j][r - 1]; + break; + default: + e += +d[j][r - 2], + f += +d[j][r - 1] + } + } + return d.toString = b._path2string, + c.rel = Aa(d), + d + }, + Ca = b._pathToAbsolute = function (a) { + var c = ya(a); + if (c.abs) + return Aa(c.abs); + if (b.is(a, U) && b.is(a && a[0], U) || (a = b.parsePathString(a)), !a || !a.length) + return [["M", 0, 0]]; + var d = [], + e = 0, + f = 0, + h = 0, + i = 0, + j = 0; + "M" == a[0][0] && (e = +a[0][1], f = +a[0][2], h = e, i = f, j++, d[0] = ["M", e, f]); + for (var k, l, m = 3 == a.length && "M" == a[0][0] && "R" == a[1][0].toUpperCase() && "Z" == a[2][0].toUpperCase(), n = j, o = a.length; o > n; n++) { + if (d.push(k = []), l = a[n], l[0] != aa.call(l[0])) + switch (k[0] = aa.call(l[0]), k[0]) { + case "A": + k[1] = l[1], + k[2] = l[2], + k[3] = l[3], + k[4] = l[4], + k[5] = l[5], + k[6] = + (l[6] + e), + k[7] = + (l[7] + f); + break; + case "V": + k[1] = +l[1] + f; + break; + case "H": + k[1] = +l[1] + e; + break; + case "R": + for (var p = [e, f][D](l.slice(1)), q = 2, r = p.length; r > q; q++) + p[q] = +p[q] + e, p[++q] = +p[q] + f; + d.pop(), + d = d[D](g(p, m)); + break; + case "M": + h = +l[1] + e, + i = +l[2] + f; + default: + for (q = 1, r = l.length; r > q; q++) + k[q] = +l[q] + (q % 2 ? e : f) + } + else if ("R" == l[0]) + p = [e, f][D](l.slice(1)), d.pop(), d = d[D](g(p, m)), k = ["R"][D](l.slice(-2)); + else + for (var s = 0, t = l.length; t > s; s++) + k[s] = l[s]; + switch (k[0]) { + case "Z": + e = h, + f = i; + break; + case "H": + e = k[1]; + break; + case "V": + f = k[1]; + break; + case "M": + h = k[k.length - 2], + i = k[k.length - 1]; + default: + e = k[k.length - 2], + f = k[k.length - 1] + } + } + return d.toString = b._path2string, + c.abs = Aa(d), + d + }, + Da = function (a, b, c, d) { + return [a, b, c, d, c, d] + }, + Ea = function (a, b, c, d, e, f) { + var g = 1 / 3, + h = 2 / 3; + return [g * a + h * c, g * b + h * d, g * e + h * c, g * f + h * d, e, f] + }, + Fa = function (a, b, c, d, f, g, h, i, j, k) { + var l, + m = 120 * R / 180, + n = R / 180 * (+f || 0), + o = [], + p = e(function (a, b, c) { + var d = a * M.cos(c) - b * M.sin(c), + e = a * M.sin(c) + b * M.cos(c); + return { + x: d, + y: e + } + }); + if (k) + y = k[0], z = k[1], w = k[2], x = k[3]; + else { + l = p(a, b, -n), + a = l.x, + b = l.y, + l = p(i, j, -n), + i = l.x, + j = l.y; + var q = (M.cos(R / 180 * f), M.sin(R / 180 * f), (a - i) / 2), + r = (b - j) / 2, + s = q * q / (c * c) + r * r / (d * d); + s > 1 && (s = M.sqrt(s), c = s * c, d = s * d); + var t = c * c, + u = d * d, + v = (g == h ? -1 : 1) * M.sqrt(P((t * u - t * r * r - u * q * q) / (t * r * r + u * q * q))), + w = v * c * r / d + (a + i) / 2, + x = v * -d * q / c + (b + j) / 2, + y = M.asin(((b - x) / d).toFixed(9)), + z = M.asin(((j - x) / d).toFixed(9)); + y = w > a ? R - y : y, + z = w > i ? R - z : z, + 0 > y && (y = 2 * R + y), + 0 > z && (z = 2 * R + z), + h && y > z && (y -= 2 * R), + !h && z > y && (z -= 2 * R) + } + var A = z - y; + if (P(A) > m) { + var B = z, + C = i, + E = j; + z = y + m * (h && z > y ? 1 : -1), + i = w + c * M.cos(z), + j = x + d * M.sin(z), + o = Fa(i, j, c, d, f, 0, h, C, E, [z, B, w, x]) + } + A = z - y; + var F = M.cos(y), + G = M.sin(y), + H = M.cos(z), + J = M.sin(z), + K = M.tan(A / 4), + L = 4 / 3 * c * K, + N = 4 / 3 * d * K, + O = [a, b], + Q = [a + L * G, b - N * F], + S = [i + L * J, j - N * H], + T = [i, j]; + if (Q[0] = 2 * O[0] - Q[0], Q[1] = 2 * O[1] - Q[1], k) + return [Q, S, T][D](o); + o = [Q, S, T][D](o).join()[I](","); + for (var U = [], V = 0, W = o.length; W > V; V++) + U[V] = V % 2 ? p(o[V - 1], o[V], n).y : p(o[V], o[V + 1], n).x; + return U + }, + Ga = function (a, b, c, d, e, f, g, h, i) { + var j = 1 - i; + return { + x: Q(j, 3) * a + 3 * Q(j, 2) * i * c + 3 * j * i * i * e + Q(i, 3) * g, + y: Q(j, 3) * b + 3 * Q(j, 2) * i * d + 3 * j * i * i * f + Q(i, 3) * h + } + }, + Ha = e(function (a, b, c, d, e, f, g, h) { + var i, + j = e - 2 * c + a - (g - 2 * e + c), + k = 2 * (c - a) - 2 * (e - c), + l = a - c, + m = (-k + M.sqrt(k * k - 4 * j * l)) / 2 / j, + n = (-k - M.sqrt(k * k - 4 * j * l)) / 2 / j, + o = [b, h], + p = [a, g]; + return P(m) > "1e12" && (m = .5), + P(n) > "1e12" && (n = .5), + m > 0 && 1 > m && (i = Ga(a, b, c, d, e, f, g, h, m), p.push(i.x), o.push(i.y)), + n > 0 && 1 > n && (i = Ga(a, b, c, d, e, f, g, h, n), p.push(i.x), o.push(i.y)), + j = f - 2 * d + b - (h - 2 * f + d), + k = 2 * (d - b) - 2 * (f - d), + l = b - d, + m = (-k + M.sqrt(k * k - 4 * j * l)) / 2 / j, + n = (-k - M.sqrt(k * k - 4 * j * l)) / 2 / j, + P(m) > "1e12" && (m = .5), + P(n) > "1e12" && (n = .5), + m > 0 && 1 > m && (i = Ga(a, b, c, d, e, f, g, h, m), p.push(i.x), o.push(i.y)), + n > 0 && 1 > n && (i = Ga(a, b, c, d, e, f, g, h, n), p.push(i.x), o.push(i.y)), { + min: { + x: O[C](0, p), + y: O[C](0, o) + }, + max: { + x: N[C](0, p), + y: N[C](0, o) + } + } + }), + Ia = b._path2curve = e(function (a, b) { + var c = !b && ya(a); + if (!b && c.curve) + return Aa(c.curve); + for (var d = Ca(a), e = b && Ca(b), f = { + x: 0, + y: 0, + bx: 0, + by: 0, + X: 0, + Y: 0, + qx: null, + qy: null + }, g = { + x: 0, + y: 0, + bx: 0, + by: 0, + X: 0, + Y: 0, + qx: null, + qy: null + }, h = (function (a, b, c) { + var d, + e, + f = { + T: 1, + Q: 1 + }; + if (!a) + return ["C", b.x, b.y, b.x, b.y, b.x, b.y]; + switch (!(a[0]in f) && (b.qx = b.qy = null), a[0]) { + case "M": + b.X = a[1], + b.Y = a[2]; + break; + case "A": + a = ["C"][D](Fa[C](0, [b.x, b.y][D](a.slice(1)))); + break; + case "S": + "C" == c || "S" == c ? (d = 2 * b.x - b.bx, e = 2 * b.y - b.by) : (d = b.x, e = b.y), + a = ["C", d, e][D](a.slice(1)); + break; + case "T": + "Q" == c || "T" == c ? (b.qx = 2 * b.x - b.qx, b.qy = 2 * b.y - b.qy) : (b.qx = b.x, b.qy = b.y), + a = ["C"][D](Ea(b.x, b.y, b.qx, b.qy, a[1], a[2])); + break; + case "Q": + b.qx = a[1], + b.qy = a[2], + a = ["C"][D](Ea(b.x, b.y, a[1], a[2], a[3], a[4])); + break; + case "L": + a = ["C"][D](Da(b.x, b.y, a[1], a[2])); + break; + case "H": + a = ["C"][D](Da(b.x, b.y, a[1], b.y)); + break; + case "V": + a = ["C"][D](Da(b.x, b.y, b.x, a[1])); + break; + case "Z": + a = ["C"][D](Da(b.x, b.y, b.X, b.Y)) + } + return a + }), i = function (a, b) { + if (a[b].length > 7) { + a[b].shift(); + for (var c = a[b]; c.length; ) + k[b] = "A", e && (l[b] = "A") , a.splice(b++, 0, ["C"][D](c.splice(0, 6))); + a.splice(b, 1), + p = N(d.length, e && e.length || 0) + } + }, j = function (a, b, c, f, g) { + a && b && "M" == a[g][0] && "M" != b[g][0] && (b.splice(g, 0, ["M", f.x, f.y]), c.bx = 0, c.by = 0, c.x = a[g][1], c.y = a[g][2], p = N(d.length, e && e.length || 0)) + }, k = [], l = [], m = "", n = "", o = 0, p = N(d.length, e && e.length || 0); p > o; o++) { + d[o] && (m = d[o][0]), + "C" != m && (k[o] = m, o && (n = k[o - 1])), + d[o] = h(d[o], f, n), + "A" != k[o] && "C" == m && (k[o] = "C"), + i(d, o), + e && (e[o] && (m = e[o][0]), "C" != m && (l[o] = m, o && (n = l[o - 1])), e[o] = h(e[o], g, n), "A" != l[o] && "C" == m && (l[o] = "C"), i(e, o)), + j(d, e, f, g, o), + j(e, d, g, f, o); + var q = d[o], + r = e && e[o], + s = q.length, + t = e && r.length; + f.x = q[s - 2], + f.y = q[s - 1], + f.bx = $(q[s - 4]) || f.x, + f.by = $(q[s - 3]) || f.y, + g.bx = e && ($(r[t - 4]) || g.x), + g.by = e && ($(r[t - 3]) || g.y), + g.x = e && r[t - 2], + g.y = e && r[t - 1] + } + return e || (c.curve = Aa(d)), + e ? [d, e] : d + }, null, Aa), + Ja = (b._parseDots = e(function (a) { + for (var c = [], d = 0, e = a.length; e > d; d++) { + var f = {}, + g = a[d].match(/^([^:]*):?([\d\.]*)/); + if (f.color = b.getRGB(g[1]), f.color.error) + return null; + f.opacity = f.color.opacity, + f.color = f.color.hex, + g[2] && (f.offset = g[2] + "%"), + c.push(f) + } + for (d = 1, e = c.length - 1; e > d; d++) + if (!c[d].offset) { + for (var h = $(c[d - 1].offset || 0), i = 0, j = d + 1; e > j; j++) + if (c[j].offset) { + i = c[j].offset; + break + } + i || (i = 100, j = e), + i = $(i); + for (var k = (i - h) / (j - d + 1); j > d; d++) + h += k, c[d].offset = h + "%" + } + return c + }), b._tear = function (a, b) { + a == b.top && (b.top = a.prev), + a == b.bottom && (b.bottom = a.next), + a.next && (a.next.prev = a.prev), + a.prev && (a.prev.next = a.next) + }), + Ka = (b._tofront = function (a, b) { + b.top !== a && (Ja(a, b), a.next = null, a.prev = b.top, b.top.next = a, b.top = a) + }, b._toback = function (a, b) { + b.bottom !== a && (Ja(a, b), a.next = b.bottom, a.prev = null, b.bottom.prev = a, b.bottom = a) + }, b._insertafter = function (a, b, c) { + Ja(a, c), + b == c.top && (c.top = a), + b.next && (b.next.prev = a), + a.next = b.next, + a.prev = b, + b.next = a + }, b._insertbefore = function (a, b, c) { + Ja(a, c), + b == c.bottom && (c.bottom = a), + b.prev && (b.prev.next = a), + a.prev = b.prev, + b.prev = a, + a.next = b + }, b.toMatrix = function (a, b) { + var c = za(a), + d = { + _: { + transform: F + }, + getBBox: function () { + return c + } + }; + return La(d, b), + d.matrix + }), + La = (b.transformPath = function (a, b) { + return pa(a, Ka(a, b)) + }, b._extractTransform = function (a, c) { + if (null == c) + return a._.transform; + c = H(c).replace(/\.{3}|\u2026/g, a._.transform || F); + var d = b.parseTransformString(c), + e = 0, + f = 0, + g = 0, + h = 1, + i = 1, + j = a._, + k = new n; + if (j.transform = d || [], d) + for (var l = 0, m = d.length; m > l; l++) { + var o, + p, + q, + r, + s, + t = d[l], + u = t.length, + v = H(t[0]).toLowerCase(), + w = t[0] != v, + x = w ? k.invert() : 0; + "t" == v && 3 == u ? w ? (o = x.x(0, 0), p = x.y(0, 0), q = x.x(t[1], t[2]), r = x.y(t[1], t[2]), k.translate(q - o, r - p)) : k.translate(t[1], t[2]) : "r" == v ? 2 == u ? (s = s || a.getBBox(1), k.rotate(t[1], s.x + s.width / 2, s.y + s.height / 2), e += t[1]) : 4 == u && (w ? (q = x.x(t[2], t[3]), r = x.y(t[2], t[3]), k.rotate(t[1], q, r)) : k.rotate(t[1], t[2], t[3]), e += t[1]) : "s" == v ? 2 == u || 3 == u ? (s = s || a.getBBox(1), k.scale(t[1], t[u - 1], s.x + s.width / 2, s.y + s.height / 2), h *= t[1], i *= t[u - 1]) : 5 == u && (w ? (q = x.x(t[3], t[4]), r = x.y(t[3], t[4]), k.scale(t[1], t[2], q, r)) : k.scale(t[1], t[2], t[3], t[4]), h *= t[1], i *= t[2]) : "m" == v && 7 == u && k.add(t[1], t[2], t[3], t[4], t[5], t[6]), + j.dirtyT = 1, + a.matrix = k + } + a.matrix = k, + j.sx = h, + j.sy = i, + j.deg = e, + j.dx = f = k.e, + j.dy = g = k.f, + 1 == h && 1 == i && !e && j.bbox ? (j.bbox.x += +f, j.bbox.y += +g) : j.dirtyT = 1 + }), + Ma = function (a) { + var b = a[0]; + switch (b.toLowerCase()) { + case "t": + return [b, 0, 0]; + case "m": + return [b, 1, 0, 0, 1, 0, 0]; + case "r": + return 4 == a.length ? [b, 0, a[2], a[3]] : [b, 0]; + case "s": + return 5 == a.length ? [b, 1, 1, a[3], a[4]] : 3 == a.length ? [b, 1, 1] : [b, 1] + } + }, + Na = b._equaliseTransform = function (a, c) { + c = H(c).replace(/\.{3}|\u2026/g, a), + a = b.parseTransformString(a) || [], + c = b.parseTransformString(c) || []; + for (var d, e, f, g, h = N(a.length, c.length), i = [], j = [], k = 0; h > k; k++) { + if (f = a[k] || Ma(c[k]), g = c[k] || Ma(f), f[0] != g[0] || "r" == f[0].toLowerCase() && (f[2] != g[2] || f[3] != g[3]) || "s" == f[0].toLowerCase() && (f[3] != g[3] || f[4] != g[4])) + return; + for (i[k] = [], j[k] = [], d = 0, e = N(f.length, g.length); e > d; d++) + d in f && (i[k][d] = f[d]), d in g && (j[k][d] = g[d]) + } + return { + from: i, + to: j + } + }; + b._getContainer = function (a, c, d, e) { + var f; + return f = null != e || b.is(a, "object") ? a : z.doc.getElementById(a), + null != f ? f.tagName ? null == c ? { + container: f, + width: f.style.pixelWidth || f.offsetWidth, + height: f.style.pixelHeight || f.offsetHeight + } + : { + container: f, + width: c, + height: d + } + : { + container: 1, + x: a, + y: c, + width: d, + height: e + } + : void 0 + }, + b.pathToRelative = Ba, + b._engine = {}, + b.path2curve = Ia, + b.matrix = function (a, b, c, d, e, f) { + return new n(a, b, c, d, e, f) + }, + function (a) { + function c(a) { + return a[0] * a[0] + a[1] * a[1] + } + function d(a) { + var b = M.sqrt(c(a)); + a[0] && (a[0] /= b), + a[1] && (a[1] /= b) + } + a.add = function (a, b, c, d, e, f) { + var g, + h, + i, + j, + k = [[], [], []], + l = [[this.a, this.c, this.e], [this.b, this.d, this.f], [0, 0, 1]], + m = [[a, c, e], [b, d, f], [0, 0, 1]]; + for (a && a instanceof n && (m = [[a.a, a.c, a.e], [a.b, a.d, a.f], [0, 0, 1]]), g = 0; 3 > g; g++) + for (h = 0; 3 > h; h++) { + for (j = 0, i = 0; 3 > i; i++) + j += l[g][i] * m[i][h]; + k[g][h] = j + } + this.a = k[0][0], + this.b = k[1][0], + this.c = k[0][1], + this.d = k[1][1], + this.e = k[0][2], + this.f = k[1][2] + }, + a.invert = function () { + var a = this, + b = a.a * a.d - a.b * a.c; + return new n(a.d / b, -a.b / b, -a.c / b, a.a / b, (a.c * a.f - a.d * a.e) / b, (a.b * a.e - a.a * a.f) / b) + }, + a.clone = function () { + return new n(this.a, this.b, this.c, this.d, this.e, this.f) + }, + a.translate = function (a, b) { + this.add(1, 0, 0, 1, a, b) + }, + a.scale = function (a, b, c, d) { + null == b && (b = a), + (c || d) && this.add(1, 0, 0, 1, c, d), + this.add(a, 0, 0, b, 0, 0), + (c || d) && this.add(1, 0, 0, 1, -c, -d) + }, + a.rotate = function (a, c, d) { + a = b.rad(a), + c = c || 0, + d = d || 0; + var e = +M.cos(a).toFixed(9), + f = +M.sin(a).toFixed(9); + this.add(e, f, -f, e, c, d), + this.add(1, 0, 0, 1, -c, -d) + }, + a.x = function (a, b) { + return a * this.a + b * this.c + this.e + }, + a.y = function (a, b) { + return a * this.b + b * this.d + this.f + }, + a.get = function (a) { + return +this[H.fromCharCode(97 + a)].toFixed(4) + }, + a.toString = function () { + return b.svg ? "matrix(" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)].join() + ")" : [this.get(0), this.get(2), this.get(1), this.get(3), 0, 0].join() + }, + a.toFilter = function () { + return "progid:DXImageTransform.Microsoft.Matrix(M11=" + this.get(0) + ", M12=" + this.get(2) + ", M21=" + this.get(1) + ", M22=" + this.get(3) + ", Dx=" + this.get(4) + ", Dy=" + this.get(5) + ", sizingmethod='auto expand')" + }, + a.offset = function () { + return [this.e.toFixed(4), this.f.toFixed(4)] + }, + a.split = function () { + var a = {}; + a.dx = this.e, + a.dy = this.f; + var e = [[this.a, this.c], [this.b, this.d]]; + a.scalex = M.sqrt(c(e[0])), + d(e[0]), + a.shear = e[0][0] * e[1][0] + e[0][1] * e[1][1], + e[1] = [e[1][0] - e[0][0] * a.shear, e[1][1] - e[0][1] * a.shear], + a.scaley = M.sqrt(c(e[1])), + d(e[1]), + a.shear /= a.scaley; + var f = -e[0][1], + g = e[1][1]; + return 0 > g ? (a.rotate = b.deg(M.acos(g)), 0 > f && (a.rotate = 360 - a.rotate)) : a.rotate = b.deg(M.asin(f)), + a.isSimple = !(+a.shear.toFixed(9) || a.scalex.toFixed(9) != a.scaley.toFixed(9) && a.rotate), + a.isSuperSimple = !+a.shear.toFixed(9) && a.scalex.toFixed(9) == a.scaley.toFixed(9) && !a.rotate, + a.noRotation = !+a.shear.toFixed(9) && !a.rotate, + a + }, + a.toTransformString = function (a) { + var b = a || this[I](); + return b.isSimple ? (b.scalex = +b.scalex.toFixed(4), b.scaley = +b.scaley.toFixed(4), b.rotate = +b.rotate.toFixed(4), (b.dx || b.dy ? "t" + [b.dx, b.dy] : F) + (1 != b.scalex || 1 != b.scaley ? "s" + [b.scalex, b.scaley, 0, 0] : F) + (b.rotate ? "r" + [b.rotate, 0, 0] : F)) : "m" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)] + } + } + (n.prototype); + for (var Oa = function () { + this.returnValue = !1 + }, Pa = function () { + return this.originalEvent.preventDefault() + }, Qa = function () { + this.cancelBubble = !0 + }, Ra = function () { + return this.originalEvent.stopPropagation() + }, Sa = function (a) { + var b = z.doc.documentElement.scrollTop || z.doc.body.scrollTop, + c = z.doc.documentElement.scrollLeft || z.doc.body.scrollLeft; + return { + x: a.clientX + c, + y: a.clientY + b + } + }, Ta = function () { + return z.doc.addEventListener ? function (a, b, c, d) { + var e = function (a) { + var b = Sa(a); + return c.call(d, a, b.x, b.y) + }; + if (a.addEventListener(b, e, !1), E && K[b]) { + var f = function (b) { + for (var e = Sa(b), f = b, g = 0, h = b.targetTouches && b.targetTouches.length; h > g; g++) + if (b.targetTouches[g].target == a) { + b = b.targetTouches[g], + b.originalEvent = f, + b.preventDefault = Pa, + b.stopPropagation = Ra; + break + } + return c.call(d, b, e.x, e.y) + }; + a.addEventListener(K[b], f, !1) + } + return function () { + return a.removeEventListener(b, e, !1), + E && K[b] && a.removeEventListener(K[b], f, !1), + !0 + } + } + : z.doc.attachEvent ? function (a, b, c, d) { + var e = function (a) { + a = a || z.win.event; + var b = z.doc.documentElement.scrollTop || z.doc.body.scrollTop, + e = z.doc.documentElement.scrollLeft || z.doc.body.scrollLeft, + f = a.clientX + e, + g = a.clientY + b; + return a.preventDefault = a.preventDefault || Oa, + a.stopPropagation = a.stopPropagation || Qa, + c.call(d, a, f, g) + }; + a.attachEvent("on" + b, e); + var f = function () { + return a.detachEvent("on" + b, e), + !0 + }; + return f + } + : void 0 + } + (), Ua = [], Va = function (b) { + for (var c, d = b.clientX, e = b.clientY, f = z.doc.documentElement.scrollTop || z.doc.body.scrollTop, g = z.doc.documentElement.scrollLeft || z.doc.body.scrollLeft, h = Ua.length; h--; ) { + if (c = Ua[h], E && b.touches) { + for (var i, j = b.touches.length; j--; ) + if (i = b.touches[j], i.identifier == c.el._drag.id) { + d = i.clientX, + e = i.clientY, + (b.originalEvent ? b.originalEvent : b).preventDefault(); + break + } + } else + b.preventDefault(); + var k, + l = c.el.node, + m = l.nextSibling, + n = l.parentNode, + o = l.style.display; + z.win.opera && n.removeChild(l), + l.style.display = "none", + k = c.el.paper.getElementByPoint(d, e), + l.style.display = o, + z.win.opera && (m ? n.insertBefore(l, m) : n.appendChild(l)), + k && a("raphael.drag.over." + c.el.id, c.el, k), + d += g, + e += f, + a("raphael.drag.move." + c.el.id, c.move_scope || c.el, d - c.el._drag.x, e - c.el._drag.y, d, e, b) + } + }, Wa = function (c) { + b.unmousemove(Va).unmouseup(Wa); + for (var d, e = Ua.length; e--; ) + d = Ua[e], d.el._drag = {}, + a("raphael.drag.end." + d.el.id, d.end_scope || d.start_scope || d.move_scope || d.el, c); + Ua = [] + }, Xa = b.el = {}, Ya = J.length; Ya--; ) + !function (a) { + b[a] = Xa[a] = function (c, d) { + return b.is(c, "function") && (this.events = this.events || [], this.events.push({ + name: a, + f: c, + unbind: Ta(this.shape || this.node || z.doc, a, c, d || this) + })), + this + }, + b["un" + a] = Xa["un" + a] = function (c) { + for (var d = this.events || [], e = d.length; e--; ) + d[e].name != a || !b.is(c, "undefined") && d[e].f != c || (d[e].unbind(), d.splice(e, 1), !d.length && delete this.events); + return this + } + } + (J[Ya]); + Xa.data = function (c, d) { + var e = ja[this.id] = ja[this.id] || {}; + if (0 == arguments.length) + return e; + if (1 == arguments.length) { + if (b.is(c, "object")) { + for (var f in c) + c[y](f) && this.data(f, c[f]); + return this + } + return a("raphael.data.get." + this.id, this, e[c], c), + e[c] + } + return e[c] = d, + a("raphael.data.set." + this.id, this, d, c), + this + }, + Xa.removeData = function (a) { + return null == a ? ja[this.id] = {} + : ja[this.id] && delete ja[this.id][a], + this + }, + Xa.getData = function () { + return c(ja[this.id] || {}) + }, + Xa.hover = function (a, b, c, d) { + return this.mouseover(a, c).mouseout(b, d || c) + }, + Xa.unhover = function (a, b) { + return this.unmouseover(a).unmouseout(b) + }; + var Za = []; + Xa.drag = function (c, d, e, f, g, h) { + function i(i) { + (i.originalEvent || i).preventDefault(); + var j = i.clientX, + k = i.clientY, + l = z.doc.documentElement.scrollTop || z.doc.body.scrollTop, + m = z.doc.documentElement.scrollLeft || z.doc.body.scrollLeft; + if (this._drag.id = i.identifier, E && i.touches) + for (var n, o = i.touches.length; o--; ) + if (n = i.touches[o], this._drag.id = n.identifier, n.identifier == this._drag.id) { + j = n.clientX, + k = n.clientY; + break + } + this._drag.x = j + m, + this._drag.y = k + l, + !Ua.length && b.mousemove(Va).mouseup(Wa), + Ua.push({ + el: this, + move_scope: f, + start_scope: g, + end_scope: h + }), + d && a.on("raphael.drag.start." + this.id, d), + c && a.on("raphael.drag.move." + this.id, c), + e && a.on("raphael.drag.end." + this.id, e), + a("raphael.drag.start." + this.id, g || f || this, i.clientX + m, i.clientY + l, i) + } + return this._drag = {}, + Za.push({ + el: this, + start: i + }), + this.mousedown(i), + this + }, + Xa.onDragOver = function (b) { + b ? a.on("raphael.drag.over." + this.id, b) : a.unbind("raphael.drag.over." + this.id) + }, + Xa.undrag = function () { + for (var c = Za.length; c--; ) + Za[c].el == this && (this.unmousedown(Za[c].start), Za.splice(c, 1), a.unbind("raphael.drag.*." + this.id)); + !Za.length && b.unmousemove(Va).unmouseup(Wa), + Ua = [] + }, + u.circle = function (a, c, d) { + var e = b._engine.circle(this, a || 0, c || 0, d || 0); + return this.__set__ && this.__set__.push(e), + e + }, + u.rect = function (a, c, d, e, f) { + var g = b._engine.rect(this, a || 0, c || 0, d || 0, e || 0, f || 0); + return this.__set__ && this.__set__.push(g), + g + }, + u.ellipse = function (a, c, d, e) { + var f = b._engine.ellipse(this, a || 0, c || 0, d || 0, e || 0); + return this.__set__ && this.__set__.push(f), + f + }, + u.path = function (a) { + a && !b.is(a, T) && !b.is(a[0], U) && (a += F); + var c = b._engine.path(b.format[C](b, arguments), this); + return this.__set__ && this.__set__.push(c), + c + }, + u.image = function (a, c, d, e, f) { + var g = b._engine.image(this, a || "about:blank", c || 0, d || 0, e || 0, f || 0); + return this.__set__ && this.__set__.push(g), + g + }, + u.text = function (a, c, d) { + var e = b._engine.text(this, a || 0, c || 0, H(d)); + return this.__set__ && this.__set__.push(e), + e + }, + u.set = function (a) { + !b.is(a, "array") && (a = Array.prototype.splice.call(arguments, 0, arguments.length)); + var c = new jb(a); + return this.__set__ && this.__set__.push(c), + c.paper = this, + c.type = "set", + c + }, + u.setStart = function (a) { + this.__set__ = a || this.set() + }, + u.setFinish = function (a) { + var b = this.__set__; + return delete this.__set__, + b + }, + u.getSize = function () { + var a = this.canvas.parentNode; + return { + width: a.offsetWidth, + height: a.offsetHeight + } + }, + u.setSize = function (a, c) { + return b._engine.setSize.call(this, a, c) + }, + u.setViewBox = function (a, c, d, e, f) { + return b._engine.setViewBox.call(this, a, c, d, e, f) + }, + u.top = u.bottom = null, + u.raphael = b; + var $a = function (a) { + var b = a.getBoundingClientRect(), + c = a.ownerDocument, + d = c.body, + e = c.documentElement, + f = e.clientTop || d.clientTop || 0, + g = e.clientLeft || d.clientLeft || 0, + h = b.top + (z.win.pageYOffset || e.scrollTop || d.scrollTop) - f, + i = b.left + (z.win.pageXOffset || e.scrollLeft || d.scrollLeft) - g; + return { + y: h, + x: i + } + }; + u.getElementByPoint = function (a, b) { + var c = this, + d = c.canvas, + e = z.doc.elementFromPoint(a, b); + if (z.win.opera && "svg" == e.tagName) { + var f = $a(d), + g = d.createSVGRect(); + g.x = a - f.x, + g.y = b - f.y, + g.width = g.height = 1; + var h = d.getIntersectionList(g, null); + h.length && (e = h[h.length - 1]) + } + if (!e) + return null; + for (; e.parentNode && e != d.parentNode && !e.raphael; ) + e = e.parentNode; + return e == c.canvas.parentNode && (e = d), + e = e && e.raphael ? c.getById(e.raphaelid) : null + }, + u.getElementsByBBox = function (a) { + var c = this.set(); + return this.forEach(function (d) { + b.isBBoxIntersect(d.getBBox(), a) && c.push(d) + }), + c + }, + u.getById = function (a) { + for (var b = this.bottom; b; ) { + if (b.id == a) + return b; + b = b.next + } + return null + }, + u.forEach = function (a, b) { + for (var c = this.bottom; c; ) { + if (a.call(b, c) === !1) + return this; + c = c.next + } + return this + }, + u.getElementsByPoint = function (a, b) { + var c = this.set(); + return this.forEach(function (d) { + d.isPointInside(a, b) && c.push(d) + }), + c + }, + Xa.isPointInside = function (a, c) { + var d = this.realPath = oa[this.type](this); + return this.attr("transform") && this.attr("transform").length && (d = b.transformPath(d, this.attr("transform"))), + b.isPointInsidePath(d, a, c) + }, + Xa.getBBox = function (a) { + if (this.removed) + return {}; + var b = this._; + return a ? ((b.dirty || !b.bboxwt) && (this.realPath = oa[this.type](this), b.bboxwt = za(this.realPath), b.bboxwt.toString = o, b.dirty = 0), b.bboxwt) : ((b.dirty || b.dirtyT || !b.bbox) && ((b.dirty || !this.realPath) && (b.bboxwt = 0, this.realPath = oa[this.type](this)), b.bbox = za(pa(this.realPath, this.matrix)), b.bbox.toString = o, b.dirty = b.dirtyT = 0), b.bbox) + }, + Xa.clone = function () { + if (this.removed) + return null; + var a = this.paper[this.type]().attr(this.attr()); + return this.__set__ && this.__set__.push(a), + a + }, + Xa.glow = function (a) { + if ("text" == this.type) + return null; + a = a || {}; + var b = { + width: (a.width || 10) + (+this.attr("stroke-width") || 1), + fill: a.fill || !1, + opacity: null == a.opacity ? .5 : a.opacity, + offsetx: a.offsetx || 0, + offsety: a.offsety || 0, + color: a.color || "#000" + }, + c = b.width / 2, + d = this.paper, + e = d.set(), + f = this.realPath || oa[this.type](this); + f = this.matrix ? pa(f, this.matrix) : f; + for (var g = 1; c + 1 > g; g++) + e.push(d.path(f).attr({ + stroke: b.color, + fill: b.fill ? b.color : "none", + "stroke-linejoin": "round", + "stroke-linecap": "round", + "stroke-width": + (b.width / c * g).toFixed(3), + opacity: + (b.opacity / c).toFixed(3) + })); + return e.insertBefore(this).translate(b.offsetx, b.offsety) + }; + var _a = function (a, c, d, e, f, g, h, k, l) { + return null == l ? i(a, c, d, e, f, g, h, k) : b.findDotsAtSegment(a, c, d, e, f, g, h, k, j(a, c, d, e, f, g, h, k, l)) + }, + ab = function (a, c) { + return function (d, e, f) { + d = Ia(d); + for (var g, h, i, j, k, l = "", m = {}, n = 0, o = 0, p = d.length; p > o; o++) { + if (i = d[o], "M" == i[0]) + g = +i[1], h = +i[2]; + else { + if (j = _a(g, h, i[1], i[2], i[3], i[4], i[5], i[6]), n + j > e) { + if (c && !m.start) { + if (k = _a(g, h, i[1], i[2], i[3], i[4], i[5], i[6], e - n), l += ["C" + k.start.x, k.start.y, k.m.x, k.m.y, k.x, k.y], f) + return l; + m.start = l, + l = ["M" + k.x, k.y + "C" + k.n.x, k.n.y, k.end.x, k.end.y, i[5], i[6]].join(), + n += j, + g = +i[5], + h = +i[6]; + continue + } + if (!a && !c) + return k = _a(g, h, i[1], i[2], i[3], i[4], i[5], i[6], e - n), { + x: k.x, + y: k.y, + alpha: k.alpha + } + } + n += j, + g = +i[5], + h = +i[6] + } + l += i.shift() + i + } + return m.end = l, + k = a ? n : c ? m : b.findDotsAtSegment(g, h, i[0], i[1], i[2], i[3], i[4], i[5], 1), + k.alpha && (k = { + x: k.x, + y: k.y, + alpha: k.alpha + }), + k + } + }, + bb = ab(1), + cb = ab(), + db = ab(0, 1); + b.getTotalLength = bb, + b.getPointAtLength = cb, + b.getSubpath = function (a, b, c) { + if (this.getTotalLength(a) - c < 1e-6) + return db(a, b).end; + var d = db(a, c, 1); + return b ? db(d, b).end : d + }, + Xa.getTotalLength = function () { + var a = this.getPath(); + if (a) + return this.node.getTotalLength ? this.node.getTotalLength() : bb(a) + }, + Xa.getPointAtLength = function (a) { + var b = this.getPath(); + if (b) + return cb(b, a) + }, + Xa.getPath = function () { + var a, + c = b._getPath[this.type]; + if ("text" != this.type && "set" != this.type) + return c && (a = c(this)), a + }, + Xa.getSubpath = function (a, c) { + var d = this.getPath(); + if (d) + return b.getSubpath(d, a, c) + }; + var eb = b.easing_formulas = { + linear: function (a) { + return a + }, + "<": function (a) { + return Q(a, 1.7) + }, + ">": function (a) { + return Q(a, .48) + }, + "<>": function (a) { + var b = .48 - a / 1.04, + c = M.sqrt(.1734 + b * b), + d = c - b, + e = Q(P(d), 1 / 3) * (0 > d ? -1 : 1), + f = -c - b, + g = Q(P(f), 1 / 3) * (0 > f ? -1 : 1), + h = e + g + .5; + return 3 * (1 - h) * h * h + h * h * h + }, + backIn: function (a) { + var b = 1.70158; + return a * a * ((b + 1) * a - b) + }, + backOut: function (a) { + a -= 1; + var b = 1.70158; + return a * a * ((b + 1) * a + b) + 1 + }, + elastic: function (a) { + return a == !!a ? a : Q(2, -10 * a) * M.sin(2 * (a - .075) * R / .3) + 1 + }, + bounce: function (a) { + var b, + c = 7.5625, + d = 2.75; + return 1 / d > a ? b = c * a * a : 2 / d > a ? (a -= 1.5 / d, b = c * a * a + .75) : 2.5 / d > a ? (a -= 2.25 / d, b = c * a * a + .9375) : (a -= 2.625 / d, b = c * a * a + .984375), + b + } + }; + eb.easeIn = eb["ease-in"] = eb["<"], + eb.easeOut = eb["ease-out"] = eb[">"], + eb.easeInOut = eb["ease-in-out"] = eb["<>"], + eb["back-in"] = eb.backIn, + eb["back-out"] = eb.backOut; + var fb = [], + gb = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (a) { + setTimeout(a, 16) + }, + hb = function () { + for (var c = +new Date, d = 0; d < fb.length; d++) { + var e = fb[d]; + if (!e.el.removed && !e.paused) { + var f, + g, + h = c - e.start, + i = e.ms, + j = e.easing, + k = e.from, + l = e.diff, + m = e.to, + n = (e.t, e.el), + o = {}, + p = {}; + if (e.initstatus ? (h = (e.initstatus * e.anim.top - e.prev) / (e.percent - e.prev) * i, e.status = e.initstatus, delete e.initstatus, e.stop && fb.splice(d--, 1)) : e.status = (e.prev + (e.percent - e.prev) * (h / i)) / e.anim.top, !(0 > h)) + if (i > h) { + var q = j(h / i); + for (var s in k) + if (k[y](s)) { + switch (ca[s]) { + case S: + f = +k[s] + q * i * l[s]; + break; + case "colour": + f = "rgb(" + [ib(Z(k[s].r + q * i * l[s].r)), ib(Z(k[s].g + q * i * l[s].g)), ib(Z(k[s].b + q * i * l[s].b))].join(",") + ")"; + break; + case "path": + f = []; + for (var t = 0, u = k[s].length; u > t; t++) { + f[t] = [k[s][t][0]]; + for (var v = 1, w = k[s][t].length; w > v; v++) + f[t][v] = +k[s][t][v] + q * i * l[s][t][v]; + f[t] = f[t].join(G) + } + f = f.join(G); + break; + case "transform": + if (l[s].real) + for (f = [], t = 0, u = k[s].length; u > t; t++) + for (f[t] = [k[s][t][0]], v = 1, w = k[s][t].length; w > v; v++) + f[t][v] = k[s][t][v] + q * i * l[s][t][v]; + else { + var x = function (a) { + return +k[s][a] + q * i * l[s][a] + }; + f = [["m", x(0), x(1), x(2), x(3), x(4), x(5)]] + } + break; + case "csv": + if ("clip-rect" == s) + for (f = [], t = 4; t--; ) + f[t] = +k[s][t] + q * i * l[s][t]; + break; + default: + var z = [][D](k[s]); + for (f = [], t = n.paper.customAttributes[s].length; t--; ) + f[t] = +z[t] + q * i * l[s][t] + } + o[s] = f + } + n.attr(o), + function (b, c, d) { + setTimeout(function () { + a("raphael.anim.frame." + b, c, d) + }) + } + (n.id, n, e.anim) + } else { + if (function (c, d, e) { + setTimeout(function () { + a("raphael.anim.frame." + d.id, d, e), + a("raphael.anim.finish." + d.id, d, e), + b.is(c, "function") && c.call(d) + }) + } + (e.callback, n, e.anim), n.attr(m), fb.splice(d--, 1), e.repeat > 1 && !e.next) { + for (g in m) + m[y](g) && (p[g] = e.totalOrigin[g]); + e.el.attr(p), + r(e.anim, e.el, e.anim.percents[0], null, e.totalOrigin, e.repeat - 1) + } + e.next && !e.stop && r(e.anim, e.el, e.next, null, e.totalOrigin, e.repeat) + } + } + } + fb.length && gb(hb) + }, + ib = function (a) { + return a > 255 ? 255 : 0 > a ? 0 : a + }; + Xa.animateWith = function (a, c, d, e, f, g) { + var h = this; + if (h.removed) + return g && g.call(h), h; + var i = d instanceof q ? d : b.animation(d, e, f, g); + r(i, h, i.percents[0], null, h.attr()); + for (var j = 0, k = fb.length; k > j; j++) + if (fb[j].anim == c && fb[j].el == a) { + fb[k - 1].start = fb[j].start; + break + } + return h + }, + Xa.onAnimation = function (b) { + return b ? a.on("raphael.anim.frame." + this.id, b) : a.unbind("raphael.anim.frame." + this.id), + this + }, + q.prototype.delay = function (a) { + var b = new q(this.anim, this.ms); + return b.times = this.times, + b.del = +a || 0, + b + }, + q.prototype.repeat = function (a) { + var b = new q(this.anim, this.ms); + return b.del = this.del, + b.times = M.floor(N(a, 0)) || 1, + b + }, + b.animation = function (a, c, d, e) { + if (a instanceof q) + return a; + (b.is(d, "function") || !d) && (e = e || d || null, d = null), + a = Object(a), + c = +c || 0; + var f, + g, + h = {}; + for (g in a) + a[y](g) && $(g) != g && $(g) + "%" != g && (f = !0, h[g] = a[g]); + if (f) + return d && (h.easing = d), e && (h.callback = e), new q({ + 100: h + }, c); + if (e) { + var i = 0; + for (var j in a) { + var k = _(j); + a[y](j) && k > i && (i = k) + } + i += "%", + !a[i].callback && (a[i].callback = e) + } + return new q(a, c) + }, + Xa.animate = function (a, c, d, e) { + var f = this; + if (f.removed) + return e && e.call(f), f; + var g = a instanceof q ? a : b.animation(a, c, d, e); + return r(g, f, g.percents[0], null, f.attr()), + f + }, + Xa.setTime = function (a, b) { + return a && null != b && this.status(a, O(b, a.ms) / a.ms), + this + }, + Xa.status = function (a, b) { + var c, + d, + e = [], + f = 0; + if (null != b) + return r(a, this, -1, O(b, 1)), this; + for (c = fb.length; c > f; f++) + if (d = fb[f], d.el.id == this.id && (!a || d.anim == a)) { + if (a) + return d.status; + e.push({ + anim: d.anim, + status: d.status + }) + } + return a ? 0 : e + }, + Xa.pause = function (b) { + for (var c = 0; c < fb.length; c++) + fb[c].el.id != this.id || b && fb[c].anim != b || a("raphael.anim.pause." + this.id, this, fb[c].anim) !== !1 && (fb[c].paused = !0); + return this + }, + Xa.resume = function (b) { + for (var c = 0; c < fb.length; c++) + if (fb[c].el.id == this.id && (!b || fb[c].anim == b)) { + var d = fb[c]; + a("raphael.anim.resume." + this.id, this, d.anim) !== !1 && (delete d.paused, this.status(d.anim, d.status)) + } + return this + }, + Xa.stop = function (b) { + for (var c = 0; c < fb.length; c++) + fb[c].el.id != this.id || b && fb[c].anim != b || a("raphael.anim.stop." + this.id, this, fb[c].anim) !== !1 && fb.splice(c--, 1); + return this + }, + a.on("raphael.remove", s), + a.on("raphael.clear", s), + Xa.toString = function () { + return "Raphaël’s object" + }; + var jb = function (a) { + if (this.items = [], this.length = 0, this.type = "set", a) + for (var b = 0, c = a.length; c > b; b++) + !a[b] || a[b].constructor != Xa.constructor && a[b].constructor != jb || (this[this.items.length] = this.items[this.items.length] = a[b], this.length++) + }, + kb = jb.prototype; + kb.push = function () { + for (var a, b, c = 0, d = arguments.length; d > c; c++) + a = arguments[c], !a || a.constructor != Xa.constructor && a.constructor != jb || (b = this.items.length, this[b] = this.items[b] = a, this.length++); + return this + }, + kb.pop = function () { + return this.length && delete this[this.length--], + this.items.pop() + }, + kb.forEach = function (a, b) { + for (var c = 0, d = this.items.length; d > c; c++) + if (a.call(b, this.items[c], c) === !1) + return this; + return this + }; + for (var lb in Xa) + Xa[y](lb) && (kb[lb] = function (a) { + return function () { + var b = arguments; + return this.forEach(function (c) { + c[a][C](c, b) + }) + } + } + (lb)); + return kb.attr = function (a, c) { + if (a && b.is(a, U) && b.is(a[0], "object")) + for (var d = 0, e = a.length; e > d; d++) + this.items[d].attr(a[d]); + else + for (var f = 0, g = this.items.length; g > f; f++) + this.items[f].attr(a, c); + return this + }, + kb.clear = function () { + for (; this.length; ) + this.pop() + }, + kb.splice = function (a, b, c) { + a = 0 > a ? N(this.length + a, 0) : a, + b = N(0, O(this.length - a, b)); + var d, + e = [], + f = [], + g = []; + for (d = 2; d < arguments.length; d++) + g.push(arguments[d]); + for (d = 0; b > d; d++) + f.push(this[a + d]); + for (; d < this.length - a; d++) + e.push(this[a + d]); + var h = g.length; + for (d = 0; d < h + e.length; d++) + this.items[a + d] = this[a + d] = h > d ? g[d] : e[d - h]; + for (d = this.items.length = this.length -= b - h; this[d]; ) + delete this[d++]; + return new jb(f) + }, + kb.exclude = function (a) { + for (var b = 0, c = this.length; c > b; b++) + if (this[b] == a) + return this.splice(b, 1), !0 + }, + kb.animate = function (a, c, d, e) { + (b.is(d, "function") || !d) && (e = d || null); + var f, + g, + h = this.items.length, + i = h, + j = this; + if (!h) + return this; + e && (g = function () { + !--h && e.call(j) + }), + d = b.is(d, T) ? d : g; + var k = b.animation(a, c, d, g); + for (f = this.items[--i].animate(k); i--; ) + this.items[i] && !this.items[i].removed && this.items[i].animateWith(f, k, k), this.items[i] && !this.items[i].removed || h--; + return this + }, + kb.insertAfter = function (a) { + for (var b = this.items.length; b--; ) + this.items[b].insertAfter(a); + return this + }, + kb.getBBox = function () { + for (var a = [], b = [], c = [], d = [], e = this.items.length; e--; ) + if (!this.items[e].removed) { + var f = this.items[e].getBBox(); + a.push(f.x), + b.push(f.y), + c.push(f.x + f.width), + d.push(f.y + f.height) + } + return a = O[C](0, a), + b = O[C](0, b), + c = N[C](0, c), + d = N[C](0, d), { + x: a, + y: b, + x2: c, + y2: d, + width: c - a, + height: d - b + } + }, + kb.clone = function (a) { + a = this.paper.set(); + for (var b = 0, c = this.items.length; c > b; b++) + a.push(this.items[b].clone()); + return a + }, + kb.toString = function () { + return "Raphaël‘s set" + }, + kb.glow = function (a) { + var b = this.paper.set(); + return this.forEach(function (c, d) { + var e = c.glow(a); + null != e && e.forEach(function (a, c) { + b.push(a) + }) + }), + b + }, + kb.isPointInside = function (a, b) { + var c = !1; + return this.forEach(function (d) { + return d.isPointInside(a, b) ? (c = !0, !1) : void 0 + }), + c + }, + b.registerFont = function (a) { + if (!a.face) + return a; + this.fonts = this.fonts || {}; + var b = { + w: a.w, + face: {}, + glyphs: {} + }, + c = a.face["font-family"]; + for (var d in a.face) + a.face[y](d) && (b.face[d] = a.face[d]); + if (this.fonts[c] ? this.fonts[c].push(b) : this.fonts[c] = [b], !a.svg) { + b.face["units-per-em"] = _(a.face["units-per-em"], 10); + for (var e in a.glyphs) + if (a.glyphs[y](e)) { + var f = a.glyphs[e]; + if (b.glyphs[e] = { + w: f.w, + k: {}, + d: f.d && "M" + f.d.replace(/[mlcxtrv]/g, function (a) { + return { + l: "L", + c: "C", + x: "z", + t: "m", + r: "l", + v: "c" + } + [a] || "M" + }) + "z" + }, f.k) + for (var g in f.k) + f[y](g) && (b.glyphs[e].k[g] = f.k[g]) + } + } + return a + }, + u.getFont = function (a, c, d, e) { + if (e = e || "normal", d = d || "normal", c = +c || { + normal: 400, + bold: 700, + lighter: 300, + bolder: 800 + } + [c] || 400, b.fonts) { + var f = b.fonts[a]; + if (!f) { + var g = new RegExp("(^|\\s)" + a.replace(/[^\w\d\s+!~.:_-]/g, F) + "(\\s|$)", "i"); + for (var h in b.fonts) + if (b.fonts[y](h) && g.test(h)) { + f = b.fonts[h]; + break + } + } + var i; + if (f) + for (var j = 0, k = f.length; k > j && (i = f[j], i.face["font-weight"] != c || i.face["font-style"] != d && i.face["font-style"] || i.face["font-stretch"] != e); j++); + return i + } + }, + u.print = function (a, c, d, e, f, g, h, i) { + g = g || "middle", + h = N(O(h || 0, 1), -1), + i = N(O(i || 1, 3), 1); + var j, + k = H(d)[I](F), + l = 0, + m = 0, + n = F; + if (b.is(e, "string") && (e = this.getFont(e)), e) { + j = (f || 16) / e.face["units-per-em"]; + for (var o = e.face.bbox[I](v), p = +o[0], q = o[3] - o[1], r = 0, s = +o[1] + ("baseline" == g ? q + +e.face.descent : q / 2), t = 0, u = k.length; u > t; t++) { + if ("\n" == k[t]) + l = 0, x = 0, m = 0, r += q * i; + else { + var w = m && e.glyphs[k[t - 1]] || {}, + x = e.glyphs[k[t]]; + l += m ? (w.w || e.w) + (w.k && w.k[k[t]] || 0) + e.w * h : 0, + m = 1 + } + x && x.d && (n += b.transformPath(x.d, ["t", l * j, r * j, "s", j, j, p, s, "t", (a - p) / j, (c - s) / j])) + } + } + return this.path(n).attr({ + fill: "#000", + stroke: "none" + }) + }, + u.add = function (a) { + if (b.is(a, "array")) + for (var c, d = this.set(), e = 0, f = a.length; f > e; e++) + c = a[e] || {}, + w[y](c.type) && d.push(this[c.type]().attr(c)); + return d + }, + b.format = function (a, c) { + var d = b.is(c, U) ? [0][D](c) : arguments; + return a && b.is(a, T) && d.length - 1 && (a = a.replace(x, function (a, b) { + return null == d[++b] ? F : d[b] + })), + a || F + }, + b.fullfill = function () { + var a = /\{([^\}]+)\}/g, + b = /(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g, + c = function (a, c, d) { + var e = d; + return c.replace(b, function (a, b, c, d, f) { + b = b || d, + e && (b in e && (e = e[b]), "function" == typeof e && f && (e = e())) + }), + e = (null == e || e == d ? a : e) + "" + }; + return function (b, d) { + return String(b).replace(a, function (a, b) { + return c(a, b, d) + }) + } + } + (), + b.ninja = function () { + return A.was ? z.win.Raphael = A.is : delete Raphael, + b + }, + b.st = kb, + a.on("raphael.DOMload", function () { + t = !0 + }), + function (a, c, d) { + function e() { + /in/.test(a.readyState) ? setTimeout(e, 9) : b.eve("raphael.DOMload") + } + null == a.readyState && a.addEventListener && (a.addEventListener(c, d = function () { + a.removeEventListener(c, d, !1), + a.readyState = "complete" + }, !1), a.readyState = "loading"), + e() + } + (document, "DOMContentLoaded"), + b +}), function (a, b) { + "function" == typeof define && define.amd ? define("raphael.svg", ["raphael.core"], function (a) { + return b(a) + }) : b("object" == typeof exports ? require("./raphael.core") : a.Raphael) +} +(this, function (a) { + if (!a || a.svg) { + var b = "hasOwnProperty", + c = String, + d = parseFloat, + e = parseInt, + f = Math, + g = f.max, + h = f.abs, + i = f.pow, + j = /[, ]+/, + k = a.eve, + l = "", + m = " ", + n = "http://www.w3.org/1999/xlink", + o = { + block: "M5,0 0,2.5 5,5z", + classic: "M5,0 0,2.5 5,5 3.5,3 3.5,2z", + diamond: "M2.5,0 5,2.5 2.5,5 0,2.5z", + open: "M6,1 1,3.5 6,6", + oval: "M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z" + }, + p = {}; + a.toString = function () { + return "Your browser supports SVG.\nYou are running Raphaël " + this.version + }; + var q = function (d, e) { + if (e) { + "string" == typeof d && (d = q(d)); + for (var f in e) + e[b](f) && ("xlink:" == f.substring(0, 6) ? d.setAttributeNS(n, f.substring(6), c(e[f])) : d.setAttribute(f, c(e[f]))) + } else + d = a._g.doc.createElementNS("http://www.w3.org/2000/svg", d), d.style && (d.style.webkitTapHighlightColor = "rgba(0,0,0,0)"); + return d + }, + r = function (b, e) { + var j = "linear", + k = b.id + e, + m = .5, + n = .5, + o = b.node, + p = b.paper, + r = o.style, + s = a._g.doc.getElementById(k); + if (!s) { + if (e = c(e).replace(a._radial_gradient, function (a, b, c) { + if (j = "radial", b && c) { + m = d(b), + n = d(c); + var e = 2 * (n > .5) - 1; + i(m - .5, 2) + i(n - .5, 2) > .25 && (n = f.sqrt(.25 - i(m - .5, 2)) * e + .5) && .5 != n && (n = n.toFixed(5) - 1e-5 * e) + } + return l + }), e = e.split(/\s*\-\s*/), "linear" == j) { + var t = e.shift(); + if (t = -d(t), isNaN(t)) + return null; + var u = [0, 0, f.cos(a.rad(t)), f.sin(a.rad(t))], + v = 1 / (g(h(u[2]), h(u[3])) || 1); + u[2] *= v, + u[3] *= v, + u[2] < 0 && (u[0] = -u[2], u[2] = 0), + u[3] < 0 && (u[1] = -u[3], u[3] = 0) + } + var w = a._parseDots(e); + if (!w) + return null; + if (k = k.replace(/[\(\)\s,\xb0#]/g, "_"), b.gradient && k != b.gradient.id && (p.defs.removeChild(b.gradient), delete b.gradient), !b.gradient) { + s = q(j + "Gradient", { + id: k + }), + b.gradient = s, + q(s, "radial" == j ? { + fx: m, + fy: n + } + : { + x1: u[0], + y1: u[1], + x2: u[2], + y2: u[3], + gradientTransform: b.matrix.invert() + }), + p.defs.appendChild(s); + for (var x = 0, y = w.length; y > x; x++) + s.appendChild(q("stop", { + offset: w[x].offset ? w[x].offset : x ? "100%" : "0%", + "stop-color": w[x].color || "#fff", + "stop-opacity": isFinite(w[x].opacity) ? w[x].opacity : 1 + })) + } + } + return q(o, { + fill: "url('" + document.location.origin + document.location.pathname + "#" + k + "')", + opacity: 1, + "fill-opacity": 1 + }), + r.fill = l, + r.opacity = 1, + r.fillOpacity = 1, + 1 + }, + s = function (a) { + var b = a.getBBox(1); + q(a.pattern, { + patternTransform: a.matrix.invert() + " translate(" + b.x + "," + b.y + ")" + }) + }, + t = function (d, e, f) { + if ("path" == d.type) { + for (var g, h, i, j, k, m = c(e).toLowerCase().split("-"), n = d.paper, r = f ? "end" : "start", s = d.node, t = d.attrs, u = t["stroke-width"], v = m.length, w = "classic", x = 3, y = 3, z = 5; v--; ) + switch (m[v]) { + case "block": + case "classic": + case "oval": + case "diamond": + case "open": + case "none": + w = m[v]; + break; + case "wide": + y = 5; + break; + case "narrow": + y = 2; + break; + case "long": + x = 5; + break; + case "short": + x = 2 + } + if ("open" == w ? (x += 2, y += 2, z += 2, i = 1, j = f ? 4 : 1, k = { + fill: "none", + stroke: t.stroke + }) : (j = i = x / 2, k = { + fill: t.stroke, + stroke: "none" + }), d._.arrows ? f ? (d._.arrows.endPath && p[d._.arrows.endPath]--, d._.arrows.endMarker && p[d._.arrows.endMarker]--) : (d._.arrows.startPath && p[d._.arrows.startPath]--, d._.arrows.startMarker && p[d._.arrows.startMarker]--) : d._.arrows = {}, "none" != w) { + var A = "raphael-marker-" + w, + B = "raphael-marker-" + r + w + x + y + "-obj" + d.id; + a._g.doc.getElementById(A) ? p[A]++ : (n.defs.appendChild(q(q("path"), { + "stroke-linecap": "round", + d: o[w], + id: A + })), p[A] = 1); + var C, + D = a._g.doc.getElementById(B); + D ? (p[B]++, C = D.getElementsByTagName("use")[0]) : (D = q(q("marker"), { + id: B, + markerHeight: y, + markerWidth: x, + orient: "auto", + refX: j, + refY: y / 2 + }), C = q(q("use"), { + "xlink:href": "#" + A, + transform: (f ? "rotate(180 " + x / 2 + " " + y / 2 + ") " : l) + "scale(" + x / z + "," + y / z + ")", + "stroke-width": (1 / ((x / z + y / z) / 2)).toFixed(4) + }), D.appendChild(C), n.defs.appendChild(D), p[B] = 1), + q(C, k); + var E = i * ("diamond" != w && "oval" != w); + f ? (g = d._.arrows.startdx * u || 0, h = a.getTotalLength(t.path) - E * u) : (g = E * u, h = a.getTotalLength(t.path) - (d._.arrows.enddx * u || 0)), + k = {}, + k["marker-" + r] = "url(#" + B + ")", + (h || g) && (k.d = a.getSubpath(t.path, g, h)), + q(s, k), + d._.arrows[r + "Path"] = A, + d._.arrows[r + "Marker"] = B, + d._.arrows[r + "dx"] = E, + d._.arrows[r + "Type"] = w, + d._.arrows[r + "String"] = e + } else + f ? (g = d._.arrows.startdx * u || 0, h = a.getTotalLength(t.path) - g) : (g = 0, h = a.getTotalLength(t.path) - (d._.arrows.enddx * u || 0)), d._.arrows[r + "Path"] && q(s, { + d: a.getSubpath(t.path, g, h) + }), delete d._.arrows[r + "Path"], delete d._.arrows[r + "Marker"], delete d._.arrows[r + "dx"], delete d._.arrows[r + "Type"], delete d._.arrows[r + "String"]; + for (k in p) + if (p[b](k) && !p[k]) { + var F = a._g.doc.getElementById(k); + F && F.parentNode.removeChild(F) + } + } + }, + u = { + "-": [3, 1], + ".": [1, 1], + "-.": [3, 1, 1, 1], + "-..": [3, 1, 1, 1, 1, 1], + ". ": [1, 3], + "- ": [4, 3], + "--": [8, 3], + "- .": [4, 3, 1, 3], + "--.": [8, 3, 1, 3], + "--..": [8, 3, 1, 3, 1, 3] + }, + v = function (a, b, d) { + if (b = u[c(b).toLowerCase()]) { + for (var e = a.attrs["stroke-width"] || "1", f = { + round: e, + square: e, + butt: 0 + } + [a.attrs["stroke-linecap"] || d["stroke-linecap"]] || 0, g = [], h = b.length; h--; ) + g[h] = b[h] * e + (h % 2 ? 1 : -1) * f; + q(a.node, { + "stroke-dasharray": g.join(",") + }) + } else + q(a.node, { + "stroke-dasharray": "none" + }) + }, + w = function (d, f) { + var i = d.node, + k = d.attrs, + m = i.style.visibility; + i.style.visibility = "hidden"; + for (var o in f) + if (f[b](o)) { + if (!a._availableAttrs[b](o)) + continue; + var p = f[o]; + switch (k[o] = p, o) { + case "blur": + d.blur(p); + break; + case "title": + var u = i.getElementsByTagName("title"); + if (u.length && (u = u[0])) + u.firstChild.nodeValue = p; + else { + u = q("title"); + var w = a._g.doc.createTextNode(p); + u.appendChild(w), + i.appendChild(u) + } + break; + case "href": + case "target": + var x = i.parentNode; + if ("a" != x.tagName.toLowerCase()) { + var z = q("a"); + x.insertBefore(z, i), + z.appendChild(i), + x = z + } + "target" == o ? x.setAttributeNS(n, "show", "blank" == p ? "new" : p) : x.setAttributeNS(n, o, p); + break; + case "cursor": + i.style.cursor = p; + break; + case "transform": + d.transform(p); + break; + case "arrow-start": + t(d, p); + break; + case "arrow-end": + t(d, p, 1); + break; + case "clip-rect": + var A = c(p).split(j); + if (4 == A.length) { + d.clip && d.clip.parentNode.parentNode.removeChild(d.clip.parentNode); + var B = q("clipPath"), + C = q("rect"); + B.id = a.createUUID(), + q(C, { + x: A[0], + y: A[1], + width: A[2], + height: A[3] + }), + B.appendChild(C), + d.paper.defs.appendChild(B), + q(i, { + "clip-path": "url(#" + B.id + ")" + }), + d.clip = C + } + if (!p) { + var D = i.getAttribute("clip-path"); + if (D) { + var E = a._g.doc.getElementById(D.replace(/(^url\(#|\)$)/g, l)); + E && E.parentNode.removeChild(E), + q(i, { + "clip-path": l + }), + delete d.clip + } + } + break; + case "path": + "path" == d.type && (q(i, { + d: p ? k.path = a._pathToAbsolute(p) : "M0,0" + }), d._.dirty = 1, d._.arrows && ("startString" in d._.arrows && t(d, d._.arrows.startString), "endString" in d._.arrows && t(d, d._.arrows.endString, 1))); + break; + case "width": + if (i.setAttribute(o, p), d._.dirty = 1, !k.fx) + break; + o = "x", + p = k.x; + case "x": + k.fx && (p = -k.x - (k.width || 0)); + case "rx": + if ("rx" == o && "rect" == d.type) + break; + case "cx": + i.setAttribute(o, p), + d.pattern && s(d), + d._.dirty = 1; + break; + case "height": + if (i.setAttribute(o, p), d._.dirty = 1, !k.fy) + break; + o = "y", + p = k.y; + case "y": + k.fy && (p = -k.y - (k.height || 0)); + case "ry": + if ("ry" == o && "rect" == d.type) + break; + case "cy": + i.setAttribute(o, p), + d.pattern && s(d), + d._.dirty = 1; + break; + case "r": + "rect" == d.type ? q(i, { + rx: p, + ry: p + }) : i.setAttribute(o, p), + d._.dirty = 1; + break; + case "src": + "image" == d.type && i.setAttributeNS(n, "href", p); + break; + case "stroke-width": + (1 != d._.sx || 1 != d._.sy) && (p /= g(h(d._.sx), h(d._.sy)) || 1), + i.setAttribute(o, p), + k["stroke-dasharray"] && v(d, k["stroke-dasharray"], f), + d._.arrows && ("startString" in d._.arrows && t(d, d._.arrows.startString), "endString" in d._.arrows && t(d, d._.arrows.endString, 1)); + break; + case "stroke-dasharray": + v(d, p, f); + break; + case "fill": + var F = c(p).match(a._ISURL); + if (F) { + B = q("pattern"); + var G = q("image"); + B.id = a.createUUID(), + q(B, { + x: 0, + y: 0, + patternUnits: "userSpaceOnUse", + height: 1, + width: 1 + }), + q(G, { + x: 0, + y: 0, + "xlink:href": F[1] + }), + B.appendChild(G), + function (b) { + a._preload(F[1], function () { + var a = this.offsetWidth, + c = this.offsetHeight; + q(b, { + width: a, + height: c + }), + q(G, { + width: a, + height: c + }) + }) + } + (B), + d.paper.defs.appendChild(B), + q(i, { + fill: "url(#" + B.id + ")" + }), + d.pattern = B, + d.pattern && s(d); + break + } + var H = a.getRGB(p); + if (H.error) { + if (("circle" == d.type || "ellipse" == d.type || "r" != c(p).charAt()) && r(d, p)) { + if ("opacity" in k || "fill-opacity" in k) { + var I = a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g, l)); + if (I) { + var J = I.getElementsByTagName("stop"); + q(J[J.length - 1], { + "stop-opacity": ("opacity" in k ? k.opacity : 1) * ("fill-opacity" in k ? k["fill-opacity"] : 1) + }) + } + } + k.gradient = p, + k.fill = "none"; + break + } + } else + delete f.gradient, delete k.gradient, !a.is(k.opacity, "undefined") && a.is(f.opacity, "undefined") && q(i, { + opacity: k.opacity + }), !a.is(k["fill-opacity"], "undefined") && a.is(f["fill-opacity"], "undefined") && q(i, { + "fill-opacity": k["fill-opacity"] + }); + H[b]("opacity") && q(i, { + "fill-opacity": H.opacity > 1 ? H.opacity / 100 : H.opacity + }); + case "stroke": + H = a.getRGB(p), + i.setAttribute(o, H.hex), + "stroke" == o && H[b]("opacity") && q(i, { + "stroke-opacity": H.opacity > 1 ? H.opacity / 100 : H.opacity + }), + "stroke" == o && d._.arrows && ("startString" in d._.arrows && t(d, d._.arrows.startString), "endString" in d._.arrows && t(d, d._.arrows.endString, 1)); + break; + case "gradient": + ("circle" == d.type || "ellipse" == d.type || "r" != c(p).charAt()) && r(d, p); + break; + case "opacity": + k.gradient && !k[b]("stroke-opacity") && q(i, { + "stroke-opacity": p > 1 ? p / 100 : p + }); + case "fill-opacity": + if (k.gradient) { + I = a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g, l)), + I && (J = I.getElementsByTagName("stop"), q(J[J.length - 1], { + "stop-opacity": p + })); + break + } + default: + "font-size" == o && (p = e(p, 10) + "px"); + var K = o.replace(/(\-.)/g, function (a) { + return a.substring(1).toUpperCase() + }); + i.style[K] = p, + d._.dirty = 1, + i.setAttribute(o, p) + } + } + y(d, f), + i.style.visibility = m + }, + x = 1.2, + y = function (d, f) { + if ("text" == d.type && (f[b]("text") || f[b]("font") || f[b]("font-size") || f[b]("x") || f[b]("y"))) { + var g = d.attrs, + h = d.node, + i = h.firstChild ? e(a._g.doc.defaultView.getComputedStyle(h.firstChild, l).getPropertyValue("font-size"), 10) : 10; + if (f[b]("text")) { + for (g.text = f.text; h.firstChild; ) + h.removeChild(h.firstChild); + for (var j, k = c(f.text).split("\n"), m = [], n = 0, o = k.length; o > n; n++) + j = q("tspan"), n && q(j, { + dy: i * x, + x: g.x + }), j.appendChild(a._g.doc.createTextNode(k[n])), h.appendChild(j), m[n] = j + } else + for (m = h.getElementsByTagName("tspan"), n = 0, o = m.length; o > n; n++) + n ? q(m[n], { + dy: i * x, + x: g.x + }) : q(m[0], { + dy: 0 + }); + q(h, { + x: g.x, + y: g.y + }), + d._.dirty = 1; + var p = d._getBBox(), + r = g.y - (p.y + p.height / 2); + r && a.is(r, "finite") && q(m[0], { + dy: r + }) + } + }, + z = function (a) { + return a.parentNode && "a" === a.parentNode.tagName.toLowerCase() ? a.parentNode : a + }, + A = function (b, c) { + this[0] = this.node = b, + b.raphael = !0, + this.id = a._oid++, + b.raphaelid = this.id, + this.matrix = a.matrix(), + this.realPath = null, + this.paper = c, + this.attrs = this.attrs || {}, + this._ = { + transform: [], + sx: 1, + sy: 1, + deg: 0, + dx: 0, + dy: 0, + dirty: 1 + }, + !c.bottom && (c.bottom = this), + this.prev = c.top, + c.top && (c.top.next = this), + c.top = this, + this.next = null + }, + B = a.el; + A.prototype = B, + B.constructor = A, + a._engine.path = function (a, b) { + var c = q("path"); + b.canvas && b.canvas.appendChild(c); + var d = new A(c, b); + return d.type = "path", + w(d, { + fill: "none", + stroke: "#000", + path: a + }), + d + }, + B.rotate = function (a, b, e) { + if (this.removed) + return this; + if (a = c(a).split(j), a.length - 1 && (b = d(a[1]), e = d(a[2])), a = d(a[0]), null == e && (b = e), null == b || null == e) { + var f = this.getBBox(1); + b = f.x + f.width / 2, + e = f.y + f.height / 2 + } + return this.transform(this._.transform.concat([["r", a, b, e]])), + this + }, + B.scale = function (a, b, e, f) { + if (this.removed) + return this; + if (a = c(a).split(j), a.length - 1 && (b = d(a[1]), e = d(a[2]), f = d(a[3])), a = d(a[0]), null == b && (b = a), null == f && (e = f), null == e || null == f) + var g = this.getBBox(1); + return e = null == e ? g.x + g.width / 2 : e, + f = null == f ? g.y + g.height / 2 : f, + this.transform(this._.transform.concat([["s", a, b, e, f]])), + this + }, + B.translate = function (a, b) { + return this.removed ? this : (a = c(a).split(j), a.length - 1 && (b = d(a[1])), a = d(a[0]) || 0, b = +b || 0, this.transform(this._.transform.concat([["t", a, b]])), this) + }, + B.transform = function (c) { + var d = this._; + if (null == c) + return d.transform; + if (a._extractTransform(this, c), this.clip && q(this.clip, { + transform: this.matrix.invert() + }), this.pattern && s(this), this.node && q(this.node, { + transform: this.matrix + }), 1 != d.sx || 1 != d.sy) { + var e = this.attrs[b]("stroke-width") ? this.attrs["stroke-width"] : 1; + this.attr({ + "stroke-width": e + }) + } + return this + }, + B.hide = function () { + return this.removed || (this.node.style.display = "none"), + this + }, + B.show = function () { + return this.removed || (this.node.style.display = ""), + this + }, + B.remove = function () { + var b = z(this.node); + if (!this.removed && b.parentNode) { + var c = this.paper; + c.__set__ && c.__set__.exclude(this), + k.unbind("raphael.*.*." + this.id), + this.gradient && c.defs.removeChild(this.gradient), + a._tear(this, c), + b.parentNode.removeChild(b), + this.removeData(); + for (var d in this) + this[d] = "function" == typeof this[d] ? a._removedFactory(d) : null; + this.removed = !0 + } + }, + B._getBBox = function () { + if ("none" == this.node.style.display) { + this.show(); + var a = !0 + } + var b, + c = !1; + this.paper.canvas.parentElement ? b = this.paper.canvas.parentElement.style : this.paper.canvas.parentNode && (b = this.paper.canvas.parentNode.style), + b && "none" == b.display && (c = !0, b.display = ""); + var d = {}; + try { + d = this.node.getBBox() + } catch (e) { + d = { + x: this.node.clientLeft, + y: this.node.clientTop, + width: this.node.clientWidth, + height: this.node.clientHeight + } + } + finally { + d = d || {}, + c && (b.display = "none") + } + return a && this.hide(), + d + }, + B.attr = function (c, d) { + if (this.removed) + return this; + if (null == c) { + var e = {}; + for (var f in this.attrs) + this.attrs[b](f) && (e[f] = this.attrs[f]); + return e.gradient && "none" == e.fill && (e.fill = e.gradient) && delete e.gradient, + e.transform = this._.transform, + e + } + if (null == d && a.is(c, "string")) { + if ("fill" == c && "none" == this.attrs.fill && this.attrs.gradient) + return this.attrs.gradient; + if ("transform" == c) + return this._.transform; + for (var g = c.split(j), h = {}, i = 0, l = g.length; l > i; i++) + c = g[i], c in this.attrs ? h[c] = this.attrs[c] : a.is(this.paper.customAttributes[c], "function") ? h[c] = this.paper.customAttributes[c].def : h[c] = a._availableAttrs[c]; + return l - 1 ? h : h[g[0]] + } + if (null == d && a.is(c, "array")) { + for (h = {}, i = 0, l = c.length; l > i; i++) + h[c[i]] = this.attr(c[i]); + return h + } + if (null != d) { + var m = {}; + m[c] = d + } else + null != c && a.is(c, "object") && (m = c); + for (var n in m) + k("raphael.attr." + n + "." + this.id, this, m[n]); + for (n in this.paper.customAttributes) + if (this.paper.customAttributes[b](n) && m[b](n) && a.is(this.paper.customAttributes[n], "function")) { + var o = this.paper.customAttributes[n].apply(this, [].concat(m[n])); + this.attrs[n] = m[n]; + for (var p in o) + o[b](p) && (m[p] = o[p]) + } + return w(this, m), + this + }, + B.toFront = function () { + if (this.removed) + return this; + var b = z(this.node); + b.parentNode.appendChild(b); + var c = this.paper; + return c.top != this && a._tofront(this, c), + this + }, + B.toBack = function () { + if (this.removed) + return this; + var b = z(this.node), + c = b.parentNode; + c.insertBefore(b, c.firstChild), + a._toback(this, this.paper); + this.paper; + return this + }, + B.insertAfter = function (b) { + if (this.removed || !b) + return this; + var c = z(this.node), + d = z(b.node || b[b.length - 1].node); + return d.nextSibling ? d.parentNode.insertBefore(c, d.nextSibling) : d.parentNode.appendChild(c), + a._insertafter(this, b, this.paper), + this + }, + B.insertBefore = function (b) { + if (this.removed || !b) + return this; + var c = z(this.node), + d = z(b.node || b[0].node); + return d.parentNode.insertBefore(c, d), + a._insertbefore(this, b, this.paper), + this + }, + B.blur = function (b) { + var c = this; + if (0 !== +b) { + var d = q("filter"), + e = q("feGaussianBlur"); + c.attrs.blur = b, + d.id = a.createUUID(), + q(e, { + stdDeviation: +b || 1.5 + }), + d.appendChild(e), + c.paper.defs.appendChild(d), + c._blur = d, + q(c.node, { + filter: "url(#" + d.id + ")" + }) + } else + c._blur && (c._blur.parentNode.removeChild(c._blur), delete c._blur, delete c.attrs.blur), c.node.removeAttribute("filter"); + return c + }, + a._engine.circle = function (a, b, c, d) { + var e = q("circle"); + a.canvas && a.canvas.appendChild(e); + var f = new A(e, a); + return f.attrs = { + cx: b, + cy: c, + r: d, + fill: "none", + stroke: "#000" + }, + f.type = "circle", + q(e, f.attrs), + f + }, + a._engine.rect = function (a, b, c, d, e, f) { + var g = q("rect"); + a.canvas && a.canvas.appendChild(g); + var h = new A(g, a); + return h.attrs = { + x: b, + y: c, + width: d, + height: e, + rx: f || 0, + ry: f || 0, + fill: "none", + stroke: "#000" + }, + h.type = "rect", + q(g, h.attrs), + h + }, + a._engine.ellipse = function (a, b, c, d, e) { + var f = q("ellipse"); + a.canvas && a.canvas.appendChild(f); + var g = new A(f, a); + return g.attrs = { + cx: b, + cy: c, + rx: d, + ry: e, + fill: "none", + stroke: "#000" + }, + g.type = "ellipse", + q(f, g.attrs), + g + }, + a._engine.image = function (a, b, c, d, e, f) { + var g = q("image"); + q(g, { + x: c, + y: d, + width: e, + height: f, + preserveAspectRatio: "none" + }), + g.setAttributeNS(n, "href", b), + a.canvas && a.canvas.appendChild(g); + var h = new A(g, a); + return h.attrs = { + x: c, + y: d, + width: e, + height: f, + src: b + }, + h.type = "image", + h + }, + a._engine.text = function (b, c, d, e) { + var f = q("text"); + b.canvas && b.canvas.appendChild(f); + var g = new A(f, b); + return g.attrs = { + x: c, + y: d, + "text-anchor": "middle", + text: e, + "font-family": a._availableAttrs["font-family"], + "font-size": a._availableAttrs["font-size"], + stroke: "none", + fill: "#000" + }, + g.type = "text", + w(g, g.attrs), + g + }, + a._engine.setSize = function (a, b) { + return this.width = a || this.width, + this.height = b || this.height, + this.canvas.setAttribute("width", this.width), + this.canvas.setAttribute("height", this.height), + this._viewBox && this.setViewBox.apply(this, this._viewBox), + this + }, + a._engine.create = function () { + var b = a._getContainer.apply(0, arguments), + c = b && b.container, + d = b.x, + e = b.y, + f = b.width, + g = b.height; + if (!c) + throw new Error("SVG container not found."); + var h, + i = q("svg"), + j = "overflow:hidden;"; + return d = d || 0, + e = e || 0, + f = f || 512, + g = g || 342, + q(i, { + height: g, + version: 1.1, + width: f, + xmlns: "http://www.w3.org/2000/svg", + "xmlns:xlink": "http://www.w3.org/1999/xlink" + }), + 1 == c ? (i.style.cssText = j + "position:absolute;left:" + d + "px;top:" + e + "px", a._g.doc.body.appendChild(i), h = 1) : (i.style.cssText = j + "position:relative", c.firstChild ? c.insertBefore(i, c.firstChild) : c.appendChild(i)), + c = new a._Paper, + c.width = f, + c.height = g, + c.canvas = i, + c.clear(), + c._left = c._top = 0, + h && (c.renderfix = function () {}), + c.renderfix(), + c + }, + a._engine.setViewBox = function (a, b, c, d, e) { + k("raphael.setViewBox", this, this._viewBox, [a, b, c, d, e]); + var f, + h, + i = this.getSize(), + j = g(c / i.width, d / i.height), + l = this.top, + n = e ? "xMidYMid meet" : "xMinYMin"; + for (null == a ? (this._vbSize && (j = 1), delete this._vbSize, f = "0 0 " + this.width + m + this.height) : (this._vbSize = j, f = a + m + b + m + c + m + d), q(this.canvas, { + viewBox: f, + preserveAspectRatio: n + }); j && l; ) + h = "stroke-width" in l.attrs ? l.attrs["stroke-width"] : 1, l.attr({ + "stroke-width": h + }), l._.dirty = 1, l._.dirtyT = 1, l = l.prev; + return this._viewBox = [a, b, c, d, !!e], + this + }, + a.prototype.renderfix = function () { + var a, + b = this.canvas, + c = b.style; + try { + a = b.getScreenCTM() || b.createSVGMatrix() + } catch (d) { + a = b.createSVGMatrix() + } + var e = -a.e % 1, + f = -a.f % 1; + (e || f) && (e && (this._left = (this._left + e) % 1, c.left = this._left + "px"), f && (this._top = (this._top + f) % 1, c.top = this._top + "px")) + }, + a.prototype.clear = function () { + a.eve("raphael.clear", this); + for (var b = this.canvas; b.firstChild; ) + b.removeChild(b.firstChild); + this.bottom = this.top = null, + (this.desc = q("desc")).appendChild(a._g.doc.createTextNode("Created with Raphaël " + a.version)), + b.appendChild(this.desc), + b.appendChild(this.defs = q("defs")) + }, + a.prototype.remove = function () { + k("raphael.remove", this), + this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas); + for (var b in this) + this[b] = "function" == typeof this[b] ? a._removedFactory(b) : null + }; + var C = a.st; + for (var D in B) + B[b](D) && !C[b](D) && (C[D] = function (a) { + return function () { + var b = arguments; + return this.forEach(function (c) { + c[a].apply(c, b) + }) + } + } + (D)) + } +}), function (a, b) { + "function" == typeof define && define.amd ? define("raphael.vml", ["raphael.core"], function (a) { + return b(a) + }) : b("object" == typeof exports ? require("./raphael.core") : a.Raphael) +} +(this, function (a) { + if (!a || a.vml) { + var b = "hasOwnProperty", + c = String, + d = parseFloat, + e = Math, + f = e.round, + g = e.max, + h = e.min, + i = e.abs, + j = "fill", + k = /[, ]+/, + l = a.eve, + m = " progid:DXImageTransform.Microsoft", + n = " ", + o = "", + p = { + M: "m", + L: "l", + C: "c", + Z: "x", + m: "t", + l: "r", + c: "v", + z: "x" + }, + q = /([clmz]),?([^clmz]*)/gi, + r = / progid:\S+Blur\([^\)]+\)/g, + s = /-?[^,\s-]+/g, + t = "position:absolute;left:0;top:0;width:1px;height:1px;behavior:url(#default#VML)", + u = 21600, + v = { + path: 1, + rect: 1, + image: 1 + }, + w = { + circle: 1, + ellipse: 1 + }, + x = function (b) { + var d = /[ahqstv]/gi, + e = a._pathToAbsolute; + if (c(b).match(d) && (e = a._path2curve), d = /[clmz]/g, e == a._pathToAbsolute && !c(b).match(d)) { + var g = c(b).replace(q, function (a, b, c) { + var d = [], + e = "m" == b.toLowerCase(), + g = p[b]; + return c.replace(s, function (a) { + e && 2 == d.length && (g += d + p["m" == b ? "l" : "L"], d = []), + d.push(f(a * u)) + }), + g + d + }); + return g + } + var h, + i, + j = e(b); + g = []; + for (var k = 0, l = j.length; l > k; k++) { + h = j[k], + i = j[k][0].toLowerCase(), + "z" == i && (i = "x"); + for (var m = 1, r = h.length; r > m; m++) + i += f(h[m] * u) + (m != r - 1 ? "," : o); + g.push(i) + } + return g.join(n) + }, + y = function (b, c, d) { + var e = a.matrix(); + return e.rotate(-b, .5, .5), { + dx: e.x(c, d), + dy: e.y(c, d) + } + }, + z = function (a, b, c, d, e, f) { + var g = a._, + h = a.matrix, + k = g.fillpos, + l = a.node, + m = l.style, + o = 1, + p = "", + q = u / b, + r = u / c; + if (m.visibility = "hidden", b && c) { + if (l.coordsize = i(q) + n + i(r), m.rotation = f * (0 > b * c ? -1 : 1), f) { + var s = y(f, d, e); + d = s.dx, + e = s.dy + } + if (0 > b && (p += "x"), 0 > c && (p += " y") && (o = -1), m.flip = p, l.coordorigin = d * -q + n + e * -r, k || g.fillsize) { + var t = l.getElementsByTagName(j); + t = t && t[0], + l.removeChild(t), + k && (s = y(f, h.x(k[0], k[1]), h.y(k[0], k[1])), t.position = s.dx * o + n + s.dy * o), + g.fillsize && (t.size = g.fillsize[0] * i(b) + n + g.fillsize[1] * i(c)), + l.appendChild(t) + } + m.visibility = "visible" + } + }; + a.toString = function () { + return "Your browser doesn’t support SVG. Falling down to VML.\nYou are running Raphaël " + this.version + }; + var A = function (a, b, d) { + for (var e = c(b).toLowerCase().split("-"), f = d ? "end" : "start", g = e.length, h = "classic", i = "medium", j = "medium"; g--; ) + switch (e[g]) { + case "block": + case "classic": + case "oval": + case "diamond": + case "open": + case "none": + h = e[g]; + break; + case "wide": + case "narrow": + j = e[g]; + break; + case "long": + case "short": + i = e[g] + } + var k = a.node.getElementsByTagName("stroke")[0]; + k[f + "arrow"] = h, + k[f + "arrowlength"] = i, + k[f + "arrowwidth"] = j + }, + B = function (e, i) { + e.attrs = e.attrs || {}; + var l = e.node, + m = e.attrs, + p = l.style, + q = v[e.type] && (i.x != m.x || i.y != m.y || i.width != m.width || i.height != m.height || i.cx != m.cx || i.cy != m.cy || i.rx != m.rx || i.ry != m.ry || i.r != m.r), + r = w[e.type] && (m.cx != i.cx || m.cy != i.cy || m.r != i.r || m.rx != i.rx || m.ry != i.ry), + s = e; + for (var t in i) + i[b](t) && (m[t] = i[t]); + if (q && (m.path = a._getPath[e.type](e), e._.dirty = 1), i.href && (l.href = i.href), i.title && (l.title = i.title), i.target && (l.target = i.target), i.cursor && (p.cursor = i.cursor), "blur" in i && e.blur(i.blur), (i.path && "path" == e.type || q) && (l.path = x(~c(m.path).toLowerCase().indexOf("r") ? a._pathToAbsolute(m.path) : m.path), e._.dirty = 1, "image" == e.type && (e._.fillpos = [m.x, m.y], e._.fillsize = [m.width, m.height], z(e, 1, 1, 0, 0, 0))), "transform" in i && e.transform(i.transform), r) { + var y = +m.cx, + B = +m.cy, + D = +m.rx || +m.r || 0, + E = +m.ry || +m.r || 0; + l.path = a.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x", f((y - D) * u), f((B - E) * u), f((y + D) * u), f((B + E) * u), f(y * u)), + e._.dirty = 1 + } + if ("clip-rect" in i) { + var G = c(i["clip-rect"]).split(k); + if (4 == G.length) { + G[2] = +G[2] + +G[0], + G[3] = +G[3] + +G[1]; + var H = l.clipRect || a._g.doc.createElement("div"), + I = H.style; + I.clip = a.format("rect({1}px {2}px {3}px {0}px)", G), + l.clipRect || (I.position = "absolute", I.top = 0, I.left = 0, I.width = e.paper.width + "px", I.height = e.paper.height + "px", l.parentNode.insertBefore(H, l), H.appendChild(l), l.clipRect = H) + } + i["clip-rect"] || l.clipRect && (l.clipRect.style.clip = "auto") + } + if (e.textpath) { + var J = e.textpath.style; + i.font && (J.font = i.font), + i["font-family"] && (J.fontFamily = '"' + i["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g, o) + '"'), + i["font-size"] && (J.fontSize = i["font-size"]), + i["font-weight"] && (J.fontWeight = i["font-weight"]), + i["font-style"] && (J.fontStyle = i["font-style"]) + } + if ("arrow-start" in i && A(s, i["arrow-start"]), "arrow-end" in i && A(s, i["arrow-end"], 1), null != i.opacity || null != i["stroke-width"] || null != i.fill || null != i.src || null != i.stroke || null != i["stroke-width"] || null != i["stroke-opacity"] || null != i["fill-opacity"] || null != i["stroke-dasharray"] || null != i["stroke-miterlimit"] || null != i["stroke-linejoin"] || null != i["stroke-linecap"]) { + var K = l.getElementsByTagName(j), + L = !1; + if (K = K && K[0], !K && (L = K = F(j)), "image" == e.type && i.src && (K.src = i.src), i.fill && (K.on = !0), (null == K.on || "none" == i.fill || null === i.fill) && (K.on = !1), K.on && i.fill) { + var M = c(i.fill).match(a._ISURL); + if (M) { + K.parentNode == l && l.removeChild(K), + K.rotate = !0, + K.src = M[1], + K.type = "tile"; + var N = e.getBBox(1); + K.position = N.x + n + N.y, + e._.fillpos = [N.x, N.y], + a._preload(M[1], function () { + e._.fillsize = [this.offsetWidth, this.offsetHeight] + }) + } else + K.color = a.getRGB(i.fill).hex, K.src = o, K.type = "solid", a.getRGB(i.fill).error && (s.type in { + circle: 1, + ellipse: 1 + } + || "r" != c(i.fill).charAt()) && C(s, i.fill, K) && (m.fill = "none", m.gradient = i.fill, K.rotate = !1) + } + if ("fill-opacity" in i || "opacity" in i) { + var O = ((+m["fill-opacity"] + 1 || 2) - 1) * ((+m.opacity + 1 || 2) - 1) * ((+a.getRGB(i.fill).o + 1 || 2) - 1); + O = h(g(O, 0), 1), + K.opacity = O, + K.src && (K.color = "none") + } + l.appendChild(K); + var P = l.getElementsByTagName("stroke") && l.getElementsByTagName("stroke")[0], + Q = !1; + !P && (Q = P = F("stroke")), + (i.stroke && "none" != i.stroke || i["stroke-width"] || null != i["stroke-opacity"] || i["stroke-dasharray"] || i["stroke-miterlimit"] || i["stroke-linejoin"] || i["stroke-linecap"]) && (P.on = !0), + ("none" == i.stroke || null === i.stroke || null == P.on || 0 == i.stroke || 0 == i["stroke-width"]) && (P.on = !1); + var R = a.getRGB(i.stroke); + P.on && i.stroke && (P.color = R.hex), + O = ((+m["stroke-opacity"] + 1 || 2) - 1) * ((+m.opacity + 1 || 2) - 1) * ((+R.o + 1 || 2) - 1); + var S = .75 * (d(i["stroke-width"]) || 1); + if (O = h(g(O, 0), 1), null == i["stroke-width"] && (S = m["stroke-width"]), i["stroke-width"] && (P.weight = S), S && 1 > S && (O *= S) && (P.weight = 1), P.opacity = O, i["stroke-linejoin"] && (P.joinstyle = i["stroke-linejoin"] || "miter"), P.miterlimit = i["stroke-miterlimit"] || 8, i["stroke-linecap"] && (P.endcap = "butt" == i["stroke-linecap"] ? "flat" : "square" == i["stroke-linecap"] ? "square" : "round"), "stroke-dasharray" in i) { + var T = { + "-": "shortdash", + ".": "shortdot", + "-.": "shortdashdot", + "-..": "shortdashdotdot", + ". ": "dot", + "- ": "dash", + "--": "longdash", + "- .": "dashdot", + "--.": "longdashdot", + "--..": "longdashdotdot" + }; + P.dashstyle = T[b](i["stroke-dasharray"]) ? T[i["stroke-dasharray"]] : o + } + Q && l.appendChild(P) + } + if ("text" == s.type) { + s.paper.canvas.style.display = o; + var U = s.paper.span, + V = 100, + W = m.font && m.font.match(/\d+(?:\.\d*)?(?=px)/); + p = U.style, + m.font && (p.font = m.font), + m["font-family"] && (p.fontFamily = m["font-family"]), + m["font-weight"] && (p.fontWeight = m["font-weight"]), + m["font-style"] && (p.fontStyle = m["font-style"]), + W = d(m["font-size"] || W && W[0]) || 10, + p.fontSize = W * V + "px", + s.textpath.string && (U.innerHTML = c(s.textpath.string).replace(/")); + var X = U.getBoundingClientRect(); + s.W = m.w = (X.right - X.left) / V, + s.H = m.h = (X.bottom - X.top) / V, + s.X = m.x, + s.Y = m.y + s.H / 2, + ("x" in i || "y" in i) && (s.path.v = a.format("m{0},{1}l{2},{1}", f(m.x * u), f(m.y * u), f(m.x * u) + 1)); + for (var Y = ["x", "y", "text", "font", "font-family", "font-weight", "font-style", "font-size"], Z = 0, $ = Y.length; $ > Z; Z++) + if (Y[Z]in i) { + s._.dirty = 1; + break + } + switch (m["text-anchor"]) { + case "start": + s.textpath.style["v-text-align"] = "left", + s.bbx = s.W / 2; + break; + case "end": + s.textpath.style["v-text-align"] = "right", + s.bbx = -s.W / 2; + break; + default: + s.textpath.style["v-text-align"] = "center", + s.bbx = 0 + } + s.textpath.style["v-text-kern"] = !0 + } + }, + C = function (b, f, g) { + b.attrs = b.attrs || {}; + var h = (b.attrs, Math.pow), + i = "linear", + j = ".5 .5"; + if (b.attrs.gradient = f, f = c(f).replace(a._radial_gradient, function (a, b, c) { + return i = "radial", + b && c && (b = d(b), c = d(c), h(b - .5, 2) + h(c - .5, 2) > .25 && (c = e.sqrt(.25 - h(b - .5, 2)) * (2 * (c > .5) - 1) + .5), j = b + n + c), + o + }), f = f.split(/\s*\-\s*/), "linear" == i) { + var k = f.shift(); + if (k = -d(k), isNaN(k)) + return null + } + var l = a._parseDots(f); + if (!l) + return null; + if (b = b.shape || b.node, l.length) { + b.removeChild(g), + g.on = !0, + g.method = "none", + g.color = l[0].color, + g.color2 = l[l.length - 1].color; + for (var m = [], p = 0, q = l.length; q > p; p++) + l[p].offset && m.push(l[p].offset + n + l[p].color); + g.colors = m.length ? m.join() : "0% " + g.color, + "radial" == i ? (g.type = "gradientTitle", g.focus = "100%", g.focussize = "0 0", g.focusposition = j, g.angle = 0) : (g.type = "gradient", g.angle = (270 - k) % 360), + b.appendChild(g) + } + return 1 + }, + D = function (b, c) { + this[0] = this.node = b, + b.raphael = !0, + this.id = a._oid++, + b.raphaelid = this.id, + this.X = 0, + this.Y = 0, + this.attrs = {}, + this.paper = c, + this.matrix = a.matrix(), + this._ = { + transform: [], + sx: 1, + sy: 1, + dx: 0, + dy: 0, + deg: 0, + dirty: 1, + dirtyT: 1 + }, + !c.bottom && (c.bottom = this), + this.prev = c.top, + c.top && (c.top.next = this), + c.top = this, + this.next = null + }, + E = a.el; + D.prototype = E, + E.constructor = D, + E.transform = function (b) { + if (null == b) + return this._.transform; + var d, + e = this.paper._viewBoxShift, + f = e ? "s" + [e.scale, e.scale] + "-1-1t" + [e.dx, e.dy] : o; + e && (d = b = c(b).replace(/\.{3}|\u2026/g, this._.transform || o)), + a._extractTransform(this, f + b); + var g, + h = this.matrix.clone(), + i = this.skew, + j = this.node, + k = ~c(this.attrs.fill).indexOf("-"), + l = !c(this.attrs.fill).indexOf("url("); + if (h.translate(1, 1), l || k || "image" == this.type) + if (i.matrix = "1 0 0 1", i.offset = "0 0", g = h.split(), k && g.noRotation || !g.isSimple) { + j.style.filter = h.toFilter(); + var m = this.getBBox(), + p = this.getBBox(1), + q = m.x - p.x, + r = m.y - p.y; + j.coordorigin = q * -u + n + r * -u, + z(this, 1, 1, q, r, 0) + } else + j.style.filter = o, z(this, g.scalex, g.scaley, g.dx, g.dy, g.rotate); + else + j.style.filter = o, i.matrix = c(h), i.offset = h.offset(); + return null !== d && (this._.transform = d, a._extractTransform(this, d)), + this + }, + E.rotate = function (a, b, e) { + if (this.removed) + return this; + if (null != a) { + if (a = c(a).split(k), a.length - 1 && (b = d(a[1]), e = d(a[2])), a = d(a[0]), null == e && (b = e), null == b || null == e) { + var f = this.getBBox(1); + b = f.x + f.width / 2, + e = f.y + f.height / 2 + } + return this._.dirtyT = 1, + this.transform(this._.transform.concat([["r", a, b, e]])), + this + } + }, + E.translate = function (a, b) { + return this.removed ? this : (a = c(a).split(k), a.length - 1 && (b = d(a[1])), a = d(a[0]) || 0, b = +b || 0, this._.bbox && (this._.bbox.x += a, this._.bbox.y += b), this.transform(this._.transform.concat([["t", a, b]])), this) + }, + E.scale = function (a, b, e, f) { + if (this.removed) + return this; + if (a = c(a).split(k), a.length - 1 && (b = d(a[1]), e = d(a[2]), f = d(a[3]), isNaN(e) && (e = null), isNaN(f) && (f = null)), a = d(a[0]), null == b && (b = a), null == f && (e = f), null == e || null == f) + var g = this.getBBox(1); + return e = null == e ? g.x + g.width / 2 : e, + f = null == f ? g.y + g.height / 2 : f, + this.transform(this._.transform.concat([["s", a, b, e, f]])), + this._.dirtyT = 1, + this + }, + E.hide = function () { + return !this.removed && (this.node.style.display = "none"), + this + }, + E.show = function () { + return !this.removed && (this.node.style.display = o), + this + }, + E.auxGetBBox = a.el.getBBox, + E.getBBox = function () { + var a = this.auxGetBBox(); + if (this.paper && this.paper._viewBoxShift) { + var b = {}, + c = 1 / this.paper._viewBoxShift.scale; + return b.x = a.x - this.paper._viewBoxShift.dx, + b.x *= c, + b.y = a.y - this.paper._viewBoxShift.dy, + b.y *= c, + b.width = a.width * c, + b.height = a.height * c, + b.x2 = b.x + b.width, + b.y2 = b.y + b.height, + b + } + return a + }, + E._getBBox = function () { + return this.removed ? {} + : { + x: this.X + (this.bbx || 0) - this.W / 2, + y: this.Y - this.H, + width: this.W, + height: this.H + } + }, + E.remove = function () { + if (!this.removed && this.node.parentNode) { + this.paper.__set__ && this.paper.__set__.exclude(this), + a.eve.unbind("raphael.*.*." + this.id), + a._tear(this, this.paper), + this.node.parentNode.removeChild(this.node), + this.shape && this.shape.parentNode.removeChild(this.shape); + for (var b in this) + this[b] = "function" == typeof this[b] ? a._removedFactory(b) : null; + this.removed = !0 + } + }, + E.attr = function (c, d) { + if (this.removed) + return this; + if (null == c) { + var e = {}; + for (var f in this.attrs) + this.attrs[b](f) && (e[f] = this.attrs[f]); + return e.gradient && "none" == e.fill && (e.fill = e.gradient) && delete e.gradient, + e.transform = this._.transform, + e + } + if (null == d && a.is(c, "string")) { + if (c == j && "none" == this.attrs.fill && this.attrs.gradient) + return this.attrs.gradient; + for (var g = c.split(k), h = {}, i = 0, m = g.length; m > i; i++) + c = g[i], c in this.attrs ? h[c] = this.attrs[c] : a.is(this.paper.customAttributes[c], "function") ? h[c] = this.paper.customAttributes[c].def : h[c] = a._availableAttrs[c]; + return m - 1 ? h : h[g[0]] + } + if (this.attrs && null == d && a.is(c, "array")) { + for (h = {}, i = 0, m = c.length; m > i; i++) + h[c[i]] = this.attr(c[i]); + return h + } + var n; + null != d && (n = {}, n[c] = d), + null == d && a.is(c, "object") && (n = c); + for (var o in n) + l("raphael.attr." + o + "." + this.id, this, n[o]); + if (n) { + for (o in this.paper.customAttributes) + if (this.paper.customAttributes[b](o) && n[b](o) && a.is(this.paper.customAttributes[o], "function")) { + var p = this.paper.customAttributes[o].apply(this, [].concat(n[o])); + this.attrs[o] = n[o]; + for (var q in p) + p[b](q) && (n[q] = p[q]) + } + n.text && "text" == this.type && (this.textpath.string = n.text), + B(this, n) + } + return this + }, + E.toFront = function () { + return !this.removed && this.node.parentNode.appendChild(this.node), + this.paper && this.paper.top != this && a._tofront(this, this.paper), + this + }, + E.toBack = function () { + return this.removed ? this : (this.node.parentNode.firstChild != this.node && (this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild), a._toback(this, this.paper)), this) + }, + E.insertAfter = function (b) { + return this.removed ? this : (b.constructor == a.st.constructor && (b = b[b.length - 1]), b.node.nextSibling ? b.node.parentNode.insertBefore(this.node, b.node.nextSibling) : b.node.parentNode.appendChild(this.node), a._insertafter(this, b, this.paper), this) + }, + E.insertBefore = function (b) { + return this.removed ? this : (b.constructor == a.st.constructor && (b = b[0]), b.node.parentNode.insertBefore(this.node, b.node), a._insertbefore(this, b, this.paper), this) + }, + E.blur = function (b) { + var c = this.node.runtimeStyle, + d = c.filter; + return d = d.replace(r, o), + 0 !== +b ? (this.attrs.blur = b, c.filter = d + n + m + ".Blur(pixelradius=" + (+b || 1.5) + ")", c.margin = a.format("-{0}px 0 0 -{0}px", f(+b || 1.5))) : (c.filter = d, c.margin = 0, delete this.attrs.blur), + this + }, + a._engine.path = function (a, b) { + var c = F("shape"); + c.style.cssText = t, + c.coordsize = u + n + u, + c.coordorigin = b.coordorigin; + var d = new D(c, b), + e = { + fill: "none", + stroke: "#000" + }; + a && (e.path = a), + d.type = "path", + d.path = [], + d.Path = o, + B(d, e), + b.canvas.appendChild(c); + var f = F("skew"); + return f.on = !0, + c.appendChild(f), + d.skew = f, + d.transform(o), + d + }, + a._engine.rect = function (b, c, d, e, f, g) { + var h = a._rectPath(c, d, e, f, g), + i = b.path(h), + j = i.attrs; + return i.X = j.x = c, + i.Y = j.y = d, + i.W = j.width = e, + i.H = j.height = f, + j.r = g, + j.path = h, + i.type = "rect", + i + }, + a._engine.ellipse = function (a, b, c, d, e) { { + var f = a.path(); + f.attrs + } + return f.X = b - d, + f.Y = c - e, + f.W = 2 * d, + f.H = 2 * e, + f.type = "ellipse", + B(f, { + cx: b, + cy: c, + rx: d, + ry: e + }), + f + }, + a._engine.circle = function (a, b, c, d) { { + var e = a.path(); + e.attrs + } + return e.X = b - d, + e.Y = c - d, + e.W = e.H = 2 * d, + e.type = "circle", + B(e, { + cx: b, + cy: c, + r: d + }), + e + }, + a._engine.image = function (b, c, d, e, f, g) { + var h = a._rectPath(d, e, f, g), + i = b.path(h).attr({ + stroke: "none" + }), + k = i.attrs, + l = i.node, + m = l.getElementsByTagName(j)[0]; + return k.src = c, + i.X = k.x = d, + i.Y = k.y = e, + i.W = k.width = f, + i.H = k.height = g, + k.path = h, + i.type = "image", + m.parentNode == l && l.removeChild(m), + m.rotate = !0, + m.src = c, + m.type = "tile", + i._.fillpos = [d, e], + i._.fillsize = [f, g], + l.appendChild(m), + z(i, 1, 1, 0, 0, 0), + i + }, + a._engine.text = function (b, d, e, g) { + var h = F("shape"), + i = F("path"), + j = F("textpath"); + d = d || 0, + e = e || 0, + g = g || "", + i.v = a.format("m{0},{1}l{2},{1}", f(d * u), f(e * u), f(d * u) + 1), + i.textpathok = !0, + j.string = c(g), + j.on = !0, + h.style.cssText = t, + h.coordsize = u + n + u, + h.coordorigin = "0 0"; + var k = new D(h, b), + l = { + fill: "#000", + stroke: "none", + font: a._availableAttrs.font, + text: g + }; + k.shape = h, + k.path = i, + k.textpath = j, + k.type = "text", + k.attrs.text = c(g), + k.attrs.x = d, + k.attrs.y = e, + k.attrs.w = 1, + k.attrs.h = 1, + B(k, l), + h.appendChild(j), + h.appendChild(i), + b.canvas.appendChild(h); + var m = F("skew"); + return m.on = !0, + h.appendChild(m), + k.skew = m, + k.transform(o), + k + }, + a._engine.setSize = function (b, c) { + var d = this.canvas.style; + return this.width = b, + this.height = c, + b == +b && (b += "px"), + c == +c && (c += "px"), + d.width = b, + d.height = c, + d.clip = "rect(0 " + b + " " + c + " 0)", + this._viewBox && a._engine.setViewBox.apply(this, this._viewBox), + this + }, + a._engine.setViewBox = function (b, c, d, e, f) { + a.eve("raphael.setViewBox", this, this._viewBox, [b, c, d, e, f]); + var g, + h, + i = this.getSize(), + j = i.width, + k = i.height; + return f && (g = k / e, h = j / d, j > d * g && (b -= (j - d * g) / 2 / g), k > e * h && (c -= (k - e * h) / 2 / h)), + this._viewBox = [b, c, d, e, !!f], + this._viewBoxShift = { + dx: -b, + dy: -c, + scale: i + }, + this.forEach(function (a) { + a.transform("...") + }), + this + }; + var F; + a._engine.initWin = function (a) { + var b = a.document; + b.styleSheets.length < 31 ? b.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)") : b.styleSheets[0].addRule(".rvml", "behavior:url(#default#VML)"); + try { + !b.namespaces.rvml && b.namespaces.add("rvml", "urn:schemas-microsoft-com:vml"), + F = function (a) { + return b.createElement("') + } + } catch (c) { + F = function (a) { + return b.createElement("<" + a + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">') + } + } + }, + a._engine.initWin(a._g.win), + a._engine.create = function () { + var b = a._getContainer.apply(0, arguments), + c = b.container, + d = b.height, + e = b.width, + f = b.x, + g = b.y; + if (!c) + throw new Error("VML container not found."); + var h = new a._Paper, + i = h.canvas = a._g.doc.createElement("div"), + j = i.style; + return f = f || 0, + g = g || 0, + e = e || 512, + d = d || 342, + h.width = e, + h.height = d, + e == +e && (e += "px"), + d == +d && (d += "px"), + h.coordsize = 1e3 * u + n + 1e3 * u, + h.coordorigin = "0 0", + h.span = a._g.doc.createElement("span"), + h.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;", + i.appendChild(h.span), + j.cssText = a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden", e, d), + 1 == c ? (a._g.doc.body.appendChild(i), j.left = f + "px", j.top = g + "px", j.position = "absolute") : c.firstChild ? c.insertBefore(i, c.firstChild) : c.appendChild(i), + h.renderfix = function () {}, + h + }, + a.prototype.clear = function () { + a.eve("raphael.clear", this), + this.canvas.innerHTML = o, + this.span = a._g.doc.createElement("span"), + this.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;", + this.canvas.appendChild(this.span), + this.bottom = this.top = null + }, + a.prototype.remove = function () { + a.eve("raphael.remove", this), + this.canvas.parentNode.removeChild(this.canvas); + for (var b in this) + this[b] = "function" == typeof this[b] ? a._removedFactory(b) : null; + return !0 + }; + var G = a.st; + for (var H in E) + E[b](H) && !G[b](H) && (G[H] = function (a) { + return function () { + var b = arguments; + return this.forEach(function (c) { + c[a].apply(c, b) + }) + } + } + (H)) + } +}); +JustGage = function (config) { + var obj = this; + if (config === null || config === undefined) { + console.log('* justgage: Make sure to pass options to the constructor!'); + return false; + } + var node; + if (config.id !== null && config.id !== undefined) { + node = document.getElementById(config.id); + if (!node) { + console.log('* justgage: No element with id : %s found', config.id); + return false; + } + } else if (config.parentNode !== null && config.parentNode !== undefined) { + node = config.parentNode; + } else { + console.log('* justgage: Make sure to pass the existing element id or parentNode to the constructor.'); + return false; + } + var dataset = node.dataset ? node.dataset : {}; + var defaults = (config.defaults !== null && config.defaults !== undefined) ? config.defaults : false; + if (defaults !== false) { + config = extend({}, config, defaults); + delete config.defaults; + } + obj.config = { + id: config.id, + value: kvLookup('value', config, dataset, 0, 'float'), + defaults: kvLookup('defaults', config, dataset, 0, false), + parentNode: kvLookup('parentNode', config, dataset, null), + width: kvLookup('width', config, dataset, null), + height: kvLookup('height', config, dataset, null), + title: kvLookup('title', config, dataset, ""), + titleFontColor: kvLookup('titleFontColor', config, dataset, "#999999"), + titleFontFamily: kvLookup('titleFontFamily', config, dataset, "sans-serif"), + titlePosition: kvLookup('titlePosition', config, dataset, "above"), + valueFontColor: kvLookup('valueFontColor', config, dataset, "#010101"), + valueFontFamily: kvLookup('valueFontFamily', config, dataset, "Arial"), + symbol: kvLookup('symbol', config, dataset, ''), + min: kvLookup('min', config, dataset, 0, 'float'), + max: kvLookup('max', config, dataset, 100, 'float'), + reverse: kvLookup('reverse', config, dataset, false), + humanFriendlyDecimal: kvLookup('humanFriendlyDecimal', config, dataset, 0), + textRenderer: kvLookup('textRenderer', config, dataset, null), + gaugeWidthScale: kvLookup('gaugeWidthScale', config, dataset, 1.0), + gaugeColor: kvLookup('gaugeColor', config, dataset, "#edebeb"), + label: kvLookup('label', config, dataset, ''), + labelFontColor: kvLookup('labelFontColor', config, dataset, "#b3b3b3"), + shadowOpacity: kvLookup('shadowOpacity', config, dataset, 0.2), + shadowSize: kvLookup('shadowSize', config, dataset, 5), + shadowVerticalOffset: kvLookup('shadowVerticalOffset', config, dataset, 3), + levelColors: kvLookup('levelColors', config, dataset, ["#a9d70b", "#f9c802", "#ff0000"], 'array', ','), + startAnimationTime: kvLookup('startAnimationTime', config, dataset, 700), + startAnimationType: kvLookup('startAnimationType', config, dataset, '>'), + refreshAnimationTime: kvLookup('refreshAnimationTime', config, dataset, 700), + refreshAnimationType: kvLookup('refreshAnimationType', config, dataset, '>'), + donutStartAngle: kvLookup('donutStartAngle', config, dataset, 90), + valueMinFontSize: kvLookup('valueMinFontSize', config, dataset, 16), + titleMinFontSize: kvLookup('titleMinFontSize', config, dataset, 10), + labelMinFontSize: kvLookup('labelMinFontSize', config, dataset, 10), + minLabelMinFontSize: kvLookup('minLabelMinFontSize', config, dataset, 10), + maxLabelMinFontSize: kvLookup('maxLabelMinFontSize', config, dataset, 10), + hideValue: kvLookup('hideValue', config, dataset, false), + hideMinMax: kvLookup('hideMinMax', config, dataset, false), + hideInnerShadow: kvLookup('hideInnerShadow', config, dataset, false), + humanFriendly: kvLookup('humanFriendly', config, dataset, false), + noGradient: kvLookup('noGradient', config, dataset, false), + donut: kvLookup('donut', config, dataset, false), + relativeGaugeSize: kvLookup('relativeGaugeSize', config, dataset, false), + counter: kvLookup('counter', config, dataset, false), + decimals: kvLookup('decimals', config, dataset, 0), + customSectors: kvLookup('customSectors', config, dataset, []), + formatNumber: kvLookup('formatNumber', config, dataset, false), + pointer: kvLookup('pointer', config, dataset, false), + pointerOptions: kvLookup('pointerOptions', config, dataset, []) + }; + var + canvasW, + canvasH, + widgetW, + widgetH, + aspect, + dx, + dy, + titleFontSize, + titleX, + titleY, + valueFontSize, + valueX, + valueY, + labelFontSize, + labelX, + labelY, + minFontSize, + minX, + minY, + maxFontSize, + maxX, + maxY; + if (obj.config.value > obj.config.max) + obj.config.value = obj.config.max; + if (obj.config.value < obj.config.min) + obj.config.value = obj.config.min; + obj.originalValue = kvLookup('value', config, dataset, -1, 'float'); + if (obj.config.id !== null && (document.getElementById(obj.config.id)) !== null) { + obj.canvas = Raphael(obj.config.id, "100%", "100%"); + } else if (obj.config.parentNode !== null) { + obj.canvas = Raphael(obj.config.parentNode, "100%", "100%"); + } + if (obj.config.relativeGaugeSize === true) { + obj.canvas.setViewBox(0, 0, 200, 150, true); + } + if (obj.config.relativeGaugeSize === true) { + canvasW = 200; + canvasH = 150; + } else if (obj.config.width !== null && obj.config.height !== null) { + canvasW = obj.config.width; + canvasH = obj.config.height; + } else if (obj.config.parentNode !== null) { + obj.canvas.setViewBox(0, 0, 200, 150, true); + canvasW = 200; + canvasH = 150; + } else { + canvasW = getStyle(document.getElementById(obj.config.id), "width").slice(0, -2) * 1; + canvasH = getStyle(document.getElementById(obj.config.id), "height").slice(0, -2) * 1; + } + if (obj.config.donut === true) { + if (canvasW > canvasH) { + widgetH = canvasH; + widgetW = widgetH; + } else if (canvasW < canvasH) { + widgetW = canvasW; + widgetH = widgetW; + if (widgetH > canvasH) { + aspect = widgetH / canvasH; + widgetH = widgetH / aspect; + widgetW = widgetH / aspect; + } + } else { + widgetW = canvasW; + widgetH = widgetW; + } + dx = (canvasW - widgetW) / 2; + dy = (canvasH - widgetH) / 2; + titleFontSize = ((widgetH / 8) > 10) ? (widgetH / 10) : 10; + titleX = dx + widgetW / 2; + titleY = dy + widgetH / 11; + valueFontSize = ((widgetH / 6.4) > 16) ? (widgetH / 5.4) : 18; + valueX = dx + widgetW / 2; + if (obj.config.label !== '') { + valueY = dy + widgetH / 1.85; + } else { + valueY = dy + widgetH / 1.7; + } + labelFontSize = ((widgetH / 16) > 10) ? (widgetH / 16) : 10; + labelX = dx + widgetW / 2; + labelY = valueY + labelFontSize; + minFontSize = ((widgetH / 16) > 10) ? (widgetH / 16) : 10; + minX = dx + (widgetW / 10) + (widgetW / 6.666666666666667 * obj.config.gaugeWidthScale) / 2; + minY = labelY; + maxFontSize = ((widgetH / 16) > 10) ? (widgetH / 16) : 10; + maxX = dx + widgetW - (widgetW / 10) - (widgetW / 6.666666666666667 * obj.config.gaugeWidthScale) / 2; + maxY = labelY; + } else { + if (canvasW > canvasH) { + widgetH = canvasH; + widgetW = widgetH * 1.25; + if (widgetW > canvasW) { + aspect = widgetW / canvasW; + widgetW = widgetW / aspect; + widgetH = widgetH / aspect; + } + } else if (canvasW < canvasH) { + widgetW = canvasW; + widgetH = widgetW / 1.25; + if (widgetH > canvasH) { + aspect = widgetH / canvasH; + widgetH = widgetH / aspect; + widgetW = widgetH / aspect; + } + } else { + widgetW = canvasW; + widgetH = widgetW * 0.75; + } + dx = (canvasW - widgetW) / 2; + dy = (canvasH - widgetH) / 2; + if (obj.config.titlePosition === 'below') { + dy -= (widgetH / 6.4); + } + titleFontSize = ((widgetH / 8) > obj.config.titleMinFontSize) ? (widgetH / 10) : obj.config.titleMinFontSize; + titleX = dx + widgetW / 2; + titleY = dy + (obj.config.titlePosition === 'below' ? (widgetH * 1.07) : (widgetH / 6.4)); + valueFontSize = ((widgetH / 6.5) > obj.config.valueMinFontSize) ? (widgetH / 6.5) : obj.config.valueMinFontSize; + valueX = dx + widgetW / 2; + valueY = dy + widgetH / 1.275; + labelFontSize = ((widgetH / 16) > obj.config.labelMinFontSize) ? (widgetH / 16) : obj.config.labelMinFontSize; + labelX = dx + widgetW / 2; + labelY = valueY + valueFontSize / 2 + 5; + minFontSize = ((widgetH / 16) > obj.config.minLabelMinFontSize) ? (widgetH / 16) : obj.config.minLabelMinFontSize; + minX = dx + (widgetW / 10) + (widgetW / 6.666666666666667 * obj.config.gaugeWidthScale) / 2; + minY = labelY; + maxFontSize = ((widgetH / 16) > obj.config.maxLabelMinFontSize) ? (widgetH / 16) : obj.config.maxLabelMinFontSize; + maxX = dx + widgetW - (widgetW / 10) - (widgetW / 6.666666666666667 * obj.config.gaugeWidthScale) / 2; + maxY = labelY; + } + obj.params = { + canvasW: canvasW, + canvasH: canvasH, + widgetW: widgetW, + widgetH: widgetH, + dx: dx, + dy: dy, + titleFontSize: titleFontSize, + titleX: titleX, + titleY: titleY, + valueFontSize: valueFontSize, + valueX: valueX, + valueY: valueY, + labelFontSize: labelFontSize, + labelX: labelX, + labelY: labelY, + minFontSize: minFontSize, + minX: minX, + minY: minY, + maxFontSize: maxFontSize, + maxX: maxX, + maxY: maxY + }; + canvasW, + canvasH, + widgetW, + widgetH, + aspect, + dx, + dy, + titleFontSize, + titleX, + titleY, + valueFontSize, + valueX, + valueY, + labelFontSize, + labelX, + labelY, + minFontSize, + minX, + minY, + maxFontSize, + maxX, + maxY = null; + obj.canvas.customAttributes.pki = function (value, min, max, w, h, dx, dy, gws, donut, reverse) { + var alpha, + Ro, + Ri, + Cx, + Cy, + Xo, + Yo, + Xi, + Yi, + path; + if (donut) { + alpha = (1 - 2 * (value - min) / (max - min)) * Math.PI; + Ro = w / 2 - w / 7; + Ri = Ro - w / 6.666666666666667 * gws; + Cx = w / 2 + dx; + Cy = h / 1.95 + dy; + Xo = w / 2 + dx + Ro * Math.cos(alpha); + Yo = h - (h - Cy) - Ro * Math.sin(alpha); + Xi = w / 2 + dx + Ri * Math.cos(alpha); + Yi = h - (h - Cy) - Ri * Math.sin(alpha); + path = "M" + (Cx - Ri) + "," + Cy + " "; + path += "L" + (Cx - Ro) + "," + Cy + " "; + if (value > ((max - min) / 2)) { + path += "A" + Ro + "," + Ro + " 0 0 1 " + (Cx + Ro) + "," + Cy + " "; + } + path += "A" + Ro + "," + Ro + " 0 0 1 " + Xo + "," + Yo + " "; + path += "L" + Xi + "," + Yi + " "; + if (value > ((max - min) / 2)) { + path += "A" + Ri + "," + Ri + " 0 0 0 " + (Cx + Ri) + "," + Cy + " "; + } + path += "A" + Ri + "," + Ri + " 0 0 0 " + (Cx - Ri) + "," + Cy + " "; + path += "Z "; + return { + path: path + }; + } else { + alpha = (1 - (value - min) / (max - min)) * Math.PI; + Ro = w / 2 - w / 10; + Ri = Ro - w / 6.666666666666667 * gws; + Cx = w / 2 + dx; + Cy = h / 1.25 + dy; + Xo = w / 2 + dx + Ro * Math.cos(alpha); + Yo = h - (h - Cy) - Ro * Math.sin(alpha); + Xi = w / 2 + dx + Ri * Math.cos(alpha); + Yi = h - (h - Cy) - Ri * Math.sin(alpha); + path = "M" + (Cx - Ri) + "," + Cy + " "; + path += "L" + (Cx - Ro) + "," + Cy + " "; + path += "A" + Ro + "," + Ro + " 0 0 1 " + Xo + "," + Yo + " "; + path += "L" + Xi + "," + Yi + " "; + path += "A" + Ri + "," + Ri + " 0 0 0 " + (Cx - Ri) + "," + Cy + " "; + path += "Z "; + return { + path: path + }; + } + alpha, + Ro, + Ri, + Cx, + Cy, + Xo, + Yo, + Xi, + Yi, + path = null; + }; + obj.canvas.customAttributes.ndl = function (value, min, max, w, h, dx, dy, gws, donut) { + var dlt = w * 3.5 / 100; + var dlb = w / 15; + var dw = w / 100; + if (obj.config.pointerOptions.toplength != null && obj.config.pointerOptions.toplength != undefined) + dlt = obj.config.pointerOptions.toplength; + if (obj.config.pointerOptions.bottomlength != null && obj.config.pointerOptions.bottomlength != undefined) + dlb = obj.config.pointerOptions.bottomlength; + if (obj.config.pointerOptions.bottomwidth != null && obj.config.pointerOptions.bottomwidth != undefined) + dw = obj.config.pointerOptions.bottomwidth; + var alpha, + Ro, + Ri, + Cx, + Cy, + Xo, + Yo, + Xi, + Yi, + Xc, + Yc, + Xz, + Yz, + Xa, + Ya, + Xb, + Yb, + path; + if (donut) { + alpha = (1 - 2 * (value - min) / (max - min)) * Math.PI; + Ro = w / 2 - w / 7; + Ri = Ro - w / 6.666666666666667 * gws; + Cx = w / 2 + dx; + Cy = h / 1.95 + dy; + Xo = w / 2 + dx + Ro * Math.cos(alpha); + Yo = h - (h - Cy) - Ro * Math.sin(alpha); + Xi = w / 2 + dx + Ri * Math.cos(alpha); + Yi = h - (h - Cy) - Ri * Math.sin(alpha); + Xc = Xo + dlt * Math.cos(alpha); + Yc = Yo - dlt * Math.sin(alpha); + Xz = Xi - dlb * Math.cos(alpha); + Yz = Yi + dlb * Math.sin(alpha); + Xa = Xz + dw * Math.sin(alpha); + Ya = Yz + dw * Math.cos(alpha); + Xb = Xz - dw * Math.sin(alpha); + Yb = Yz - dw * Math.cos(alpha); + path = 'M' + Xa + ',' + Ya + ' '; + path += 'L' + Xb + ',' + Yb + ' '; + path += 'L' + Xc + ',' + Yc + ' '; + path += 'Z '; + return { + path: path + }; + } else { + alpha = (1 - (value - min) / (max - min)) * Math.PI; + Ro = w / 2 - w / 10; + Ri = Ro - w / 6.666666666666667 * gws; + Cx = w / 2 + dx; + Cy = h / 1.25 + dy; + Xo = w / 2 + dx + Ro * Math.cos(alpha); + Yo = h - (h - Cy) - Ro * Math.sin(alpha); + Xi = w / 2 + dx + Ri * Math.cos(alpha); + Yi = h - (h - Cy) - Ri * Math.sin(alpha); + Xc = Xo + dlt * Math.cos(alpha); + Yc = Yo - dlt * Math.sin(alpha); + Xz = Xi - dlb * Math.cos(alpha); + Yz = Yi + dlb * Math.sin(alpha); + Xa = Xz + dw * Math.sin(alpha); + Ya = Yz + dw * Math.cos(alpha); + Xb = Xz - dw * Math.sin(alpha); + Yb = Yz - dw * Math.cos(alpha); + path = 'M' + Xa + ',' + Ya + ' '; + path += 'L' + Xb + ',' + Yb + ' '; + path += 'L' + Xc + ',' + Yc + ' '; + path += 'Z '; + return { + path: path + }; + } + alpha, + Ro, + Ri, + Cx, + Cy, + Xo, + Yo, + Xi, + Yi, + Xc, + Yc, + Xz, + Yz, + Xa, + Ya, + Xb, + Yb, + path = null; + }; + obj.gauge = obj.canvas.path().attr({ + "stroke": "none", + "fill": obj.config.gaugeColor, + pki: [obj.config.max, obj.config.min, obj.config.max, obj.params.widgetW, obj.params.widgetH, obj.params.dx, obj.params.dy, obj.config.gaugeWidthScale, obj.config.donut, obj.config.reverse] + }); + obj.level = obj.canvas.path().attr({ + "stroke": "none", + "fill": getColor(obj.config.value, (obj.config.value - obj.config.min) / (obj.config.max - obj.config.min), obj.config.levelColors, obj.config.noGradient, obj.config.customSectors), + pki: [obj.config.min, obj.config.min, obj.config.max, obj.params.widgetW, obj.params.widgetH, obj.params.dx, obj.params.dy, obj.config.gaugeWidthScale, obj.config.donut, obj.config.reverse] + }); + if (obj.config.donut) { + obj.level.transform("r" + obj.config.donutStartAngle + ", " + (obj.params.widgetW / 2 + obj.params.dx) + ", " + (obj.params.widgetH / 1.95 + obj.params.dy)); + } + if (obj.config.pointer) { + obj.needle = obj.canvas.path().attr({ + "stroke": (obj.config.pointerOptions.stroke !== null && obj.config.pointerOptions.stroke !== undefined) ? obj.config.pointerOptions.stroke : "none", + "stroke-width": (obj.config.pointerOptions.stroke_width !== null && obj.config.pointerOptions.stroke_width !== undefined) ? obj.config.pointerOptions.stroke_width : 0, + "stroke-linecap": (obj.config.pointerOptions.stroke_linecap !== null && obj.config.pointerOptions.stroke_linecap !== undefined) ? obj.config.pointerOptions.stroke_linecap : "square", + "fill": (obj.config.pointerOptions.color !== null && obj.config.pointerOptions.color !== undefined) ? obj.config.pointerOptions.color : "#000000", + ndl: [obj.config.min, obj.config.min, obj.config.max, obj.params.widgetW, obj.params.widgetH, obj.params.dx, obj.params.dy, obj.config.gaugeWidthScale, obj.config.donut] + }); + if (obj.config.donut) { + obj.needle.transform("r" + obj.config.donutStartAngle + ", " + (obj.params.widgetW / 2 + obj.params.dx) + ", " + (obj.params.widgetH / 1.95 + obj.params.dy)); + } + } + obj.txtTitle = obj.canvas.text(obj.params.titleX, obj.params.titleY, obj.config.title); + obj.txtTitle.attr({ + "font-size": obj.params.titleFontSize, + "font-weight": "bold", + "font-family": obj.config.titleFontFamily, + "fill": obj.config.titleFontColor, + "fill-opacity": "1" + }); + setDy(obj.txtTitle, obj.params.titleFontSize, obj.params.titleY); + obj.txtValue = obj.canvas.text(obj.params.valueX, obj.params.valueY, 0); + obj.txtValue.attr({ + "font-size": obj.params.valueFontSize, + "font-weight": "bold", + "font-family": obj.config.valueFontFamily, + "fill": obj.config.valueFontColor, + "fill-opacity": "0" + }); + setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY); + obj.txtLabel = obj.canvas.text(obj.params.labelX, obj.params.labelY, obj.config.label); + obj.txtLabel.attr({ + "font-size": obj.params.labelFontSize, + "font-weight": "normal", + "font-family": "Arial", + "fill": obj.config.labelFontColor, + "fill-opacity": "0" + }); + setDy(obj.txtLabel, obj.params.labelFontSize, obj.params.labelY); + var min = obj.config.min; + if (obj.config.reverse) { + min = obj.config.max; + } + obj.txtMinimum = min; + if (obj.config.humanFriendly) { + obj.txtMinimum = humanFriendlyNumber(min, obj.config.humanFriendlyDecimal); + } else if (obj.config.formatNumber) { + obj.txtMinimum = formatNumber(min); + } + obj.txtMin = obj.canvas.text(obj.params.minX, obj.params.minY, obj.txtMinimum); + obj.txtMin.attr({ + "font-size": obj.params.minFontSize, + "font-weight": "normal", + "font-family": "Arial", + "fill": obj.config.labelFontColor, + "fill-opacity": (obj.config.hideMinMax || obj.config.donut) ? "0" : "1" + }); + setDy(obj.txtMin, obj.params.minFontSize, obj.params.minY); + var max = obj.config.max; + if (obj.config.reverse) { + max = obj.config.min; + } + obj.txtMaximum = max; + if (obj.config.humanFriendly) { + obj.txtMaximum = humanFriendlyNumber(max, obj.config.humanFriendlyDecimal); + } else if (obj.config.formatNumber) { + obj.txtMaximum = formatNumber(max); + } + obj.txtMax = obj.canvas.text(obj.params.maxX, obj.params.maxY, obj.txtMaximum); + obj.txtMax.attr({ + "font-size": obj.params.maxFontSize, + "font-weight": "normal", + "font-family": "Arial", + "fill": obj.config.labelFontColor, + "fill-opacity": (obj.config.hideMinMax || obj.config.donut) ? "0" : "1" + }); + setDy(obj.txtMax, obj.params.maxFontSize, obj.params.maxY); + var defs = obj.canvas.canvas.childNodes[1]; + var svg = "http://www.w3.org/2000/svg"; + if (ie !== 'undefined' && ie < 9) {} + else if (ie !== 'undefined') { + onCreateElementNsReady(function () { + obj.generateShadow(svg, defs); + }); + } else { + obj.generateShadow(svg, defs); + } + defs, + svg = null; + if (obj.config.textRenderer) { + obj.originalValue = obj.config.textRenderer(obj.originalValue); + } else if (obj.config.humanFriendly) { + obj.originalValue = humanFriendlyNumber(obj.originalValue, obj.config.humanFriendlyDecimal) + obj.config.symbol; + } else if (obj.config.formatNumber) { + obj.originalValue = formatNumber(obj.originalValue) + obj.config.symbol; + } else { + obj.originalValue = (obj.originalValue * 1).toFixed(obj.config.decimals) + obj.config.symbol; + } + if (obj.config.counter === true) { + eve.on("raphael.anim.frame." + (obj.level.id), function () { + var currentValue = obj.level.attr("pki")[0]; + if (obj.config.reverse) { + currentValue = (obj.config.max * 1) + (obj.config.min * 1) - (obj.level.attr("pki")[0] * 1); + } + if (obj.config.textRenderer) { + obj.txtValue.attr("text", obj.config.textRenderer(Math.floor(currentValue))); + } else if (obj.config.humanFriendly) { + obj.txtValue.attr("text", humanFriendlyNumber(Math.floor(currentValue), obj.config.humanFriendlyDecimal) + obj.config.symbol); + } else if (obj.config.formatNumber) { + obj.txtValue.attr("text", formatNumber(Math.floor(currentValue)) + obj.config.symbol); + } else { + obj.txtValue.attr("text", (currentValue * 1).toFixed(obj.config.decimals) + obj.config.symbol); + } + setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY); + currentValue = null; + }); + eve.on("raphael.anim.finish." + (obj.level.id), function () { + obj.txtValue.attr({ + "text": obj.originalValue + }); + setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY); + }); + } else { + eve.on("raphael.anim.start." + (obj.level.id), function () { + obj.txtValue.attr({ + "text": obj.originalValue + }); + setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY); + }); + } + var rvl = obj.config.value; + if (obj.config.reverse) { + rvl = (obj.config.max * 1) + (obj.config.min * 1) - (obj.config.value * 1); + } + obj.level.animate({ + pki: [rvl, obj.config.min, obj.config.max, obj.params.widgetW, obj.params.widgetH, obj.params.dx, obj.params.dy, obj.config.gaugeWidthScale, obj.config.donut, obj.config.reverse] + }, obj.config.startAnimationTime, obj.config.startAnimationType); + if (obj.config.pointer) { + obj.needle.animate({ + ndl: [rvl, obj.config.min, obj.config.max, obj.params.widgetW, obj.params.widgetH, obj.params.dx, obj.params.dy, obj.config.gaugeWidthScale, obj.config.donut] + }, obj.config.startAnimationTime, obj.config.startAnimationType); + } + obj.txtValue.animate({ + "fill-opacity": (obj.config.hideValue) ? "0" : "1" + }, obj.config.startAnimationTime, obj.config.startAnimationType); + obj.txtLabel.animate({ + "fill-opacity": "1" + }, obj.config.startAnimationTime, obj.config.startAnimationType); +}; +JustGage.prototype.refresh = function (val, max) { + var obj = this; + var displayVal, + color, + max = max || null; + if (max !== null) { + obj.config.max = max; + obj.txtMaximum = obj.config.max; + if (obj.config.humanFriendly) { + obj.txtMaximum = humanFriendlyNumber(obj.config.max, obj.config.humanFriendlyDecimal); + } else if (obj.config.formatNumber) { + obj.txtMaximum = formatNumber(obj.config.max); + } + if (!obj.config.reverse) { + obj.txtMax.attr({ + "text": obj.txtMaximum + }); + setDy(obj.txtMax, obj.params.maxFontSize, obj.params.maxY); + } else { + obj.txtMin.attr({ + "text": obj.txtMaximum + }); + setDy(obj.txtMin, obj.params.minFontSize, obj.params.minY); + } + } + displayVal = val; + if ((val * 1) > (obj.config.max * 1)) { + val = (obj.config.max * 1); + } + if ((val * 1) < (obj.config.min * 1)) { + val = (obj.config.min * 1); + } + color = getColor(val, (val - obj.config.min) / (obj.config.max - obj.config.min), obj.config.levelColors, obj.config.noGradient, obj.config.customSectors); + if (obj.config.textRenderer) { + displayVal = obj.config.textRenderer(displayVal); + } else if (obj.config.humanFriendly) { + displayVal = humanFriendlyNumber(displayVal, obj.config.humanFriendlyDecimal) + obj.config.symbol; + } else if (obj.config.formatNumber) { + displayVal = formatNumber((displayVal * 1).toFixed(obj.config.decimals)) + obj.config.symbol; + } else { + displayVal = (displayVal * 1).toFixed(obj.config.decimals) + obj.config.symbol; + } + obj.originalValue = displayVal; + obj.config.value = val * 1; + if (!obj.config.counter) { + obj.txtValue.attr({ + "text": displayVal + }); + setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY); + } + var rvl = obj.config.value; + if (obj.config.reverse) { + rvl = (obj.config.max * 1) + (obj.config.min * 1) - (obj.config.value * 1); + } + obj.level.animate({ + pki: [rvl, obj.config.min, obj.config.max, obj.params.widgetW, obj.params.widgetH, obj.params.dx, obj.params.dy, obj.config.gaugeWidthScale, obj.config.donut, obj.config.reverse], + "fill": color + }, obj.config.refreshAnimationTime, obj.config.refreshAnimationType); + if (obj.config.pointer) { + obj.needle.animate({ + ndl: [rvl, obj.config.min, obj.config.max, obj.params.widgetW, obj.params.widgetH, obj.params.dx, obj.params.dy, obj.config.gaugeWidthScale, obj.config.donut] + }, obj.config.refreshAnimationTime, obj.config.refreshAnimationType); + } + obj, + displayVal, + color, + max = null; +}; +JustGage.prototype.generateShadow = function (svg, defs) { + var obj = this; + var sid = "inner-shadow-" + obj.config.id; + var gaussFilter, + feOffset, + feGaussianBlur, + feComposite1, + feFlood, + feComposite2, + feComposite3; + gaussFilter = document.createElementNS(svg, "filter"); + gaussFilter.setAttribute("id", sid); + defs.appendChild(gaussFilter); + feOffset = document.createElementNS(svg, "feOffset"); + feOffset.setAttribute("dx", 0); + feOffset.setAttribute("dy", obj.config.shadowVerticalOffset); + gaussFilter.appendChild(feOffset); + feGaussianBlur = document.createElementNS(svg, "feGaussianBlur"); + feGaussianBlur.setAttribute("result", "offset-blur"); + feGaussianBlur.setAttribute("stdDeviation", obj.config.shadowSize); + gaussFilter.appendChild(feGaussianBlur); + feComposite1 = document.createElementNS(svg, "feComposite"); + feComposite1.setAttribute("operator", "out"); + feComposite1.setAttribute("in", "SourceGraphic"); + feComposite1.setAttribute("in2", "offset-blur"); + feComposite1.setAttribute("result", "inverse"); + gaussFilter.appendChild(feComposite1); + feFlood = document.createElementNS(svg, "feFlood"); + feFlood.setAttribute("flood-color", "black"); + feFlood.setAttribute("flood-opacity", obj.config.shadowOpacity); + feFlood.setAttribute("result", "color"); + gaussFilter.appendChild(feFlood); + feComposite2 = document.createElementNS(svg, "feComposite"); + feComposite2.setAttribute("operator", "in"); + feComposite2.setAttribute("in", "color"); + feComposite2.setAttribute("in2", "inverse"); + feComposite2.setAttribute("result", "shadow"); + gaussFilter.appendChild(feComposite2); + feComposite3 = document.createElementNS(svg, "feComposite"); + feComposite3.setAttribute("operator", "over"); + feComposite3.setAttribute("in", "shadow"); + feComposite3.setAttribute("in2", "SourceGraphic"); + gaussFilter.appendChild(feComposite3); + if (!obj.config.hideInnerShadow) { + obj.canvas.canvas.childNodes[2].setAttribute("filter", "url(#" + sid + ")"); + obj.canvas.canvas.childNodes[3].setAttribute("filter", "url(#" + sid + ")"); + } + gaussFilter, + feOffset, + feGaussianBlur, + feComposite1, + feFlood, + feComposite2, + feComposite3 = null; +}; +function kvLookup(key, tablea, tableb, defval, datatype, delimiter) { + var val = defval; + var canConvert = false; + if (!(key === null || key === undefined)) { + if (tableb !== null && tableb !== undefined && typeof tableb === "object" && key in tableb) { + val = tableb[key]; + canConvert = true; + } else if (tablea !== null && tablea !== undefined && typeof tablea === "object" && key in tablea) { + val = tablea[key]; + canConvert = true; + } else { + val = defval; + } + if (canConvert === true) { + if (datatype !== null && datatype !== undefined) { + switch (datatype) { + case 'int': + val = parseInt(val, 10); + break; + case 'float': + val = parseFloat(val); + break; + default: + break; + } + } + } + } + return val; +}; +function getColor(val, pct, col, noGradient, custSec) { + var no, + inc, + colors, + percentage, + rval, + gval, + bval, + lower, + upper, + range, + rangePct, + pctLower, + pctUpper, + color; + var noGradient = noGradient || custSec.length > 0; + if (custSec.length > 0) { + for (var i = 0; i < custSec.length; i++) { + if (val > custSec[i].lo && val <= custSec[i].hi) { + return custSec[i].color; + } + } + } + no = col.length; + if (no === 1) + return col[0]; + inc = (noGradient) ? (1 / no) : (1 / (no - 1)); + colors = []; + for (i = 0; i < col.length; i++) { + percentage = (noGradient) ? (inc * (i + 1)) : (inc * i); + rval = parseInt((cutHex(col[i])).substring(0, 2), 16); + gval = parseInt((cutHex(col[i])).substring(2, 4), 16); + bval = parseInt((cutHex(col[i])).substring(4, 6), 16); + colors[i] = { + pct: percentage, + color: { + r: rval, + g: gval, + b: bval + } + }; + } + if (pct === 0) { + return 'rgb(' + [colors[0].color.r, colors[0].color.g, colors[0].color.b].join(',') + ')'; + } + for (var j = 0; j < colors.length; j++) { + if (pct <= colors[j].pct) { + if (noGradient) { + return 'rgb(' + [colors[j].color.r, colors[j].color.g, colors[j].color.b].join(',') + ')'; + } else { + lower = colors[j - 1]; + upper = colors[j]; + range = upper.pct - lower.pct; + rangePct = (pct - lower.pct) / range; + pctLower = 1 - rangePct; + pctUpper = rangePct; + color = { + r: Math.floor(lower.color.r * pctLower + upper.color.r * pctUpper), + g: Math.floor(lower.color.g * pctLower + upper.color.g * pctUpper), + b: Math.floor(lower.color.b * pctLower + upper.color.b * pctUpper) + }; + return 'rgb(' + [color.r, color.g, color.b].join(',') + ')'; + } + } + } +} +function setDy(elem, fontSize, txtYpos) { + if ((!ie || ie > 9) && elem.node.firstChild.attributes.dy) { + elem.node.firstChild.attributes.dy.value = 0; + } +} +function getRandomInt(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; +} +function cutHex(str) { + return (str.charAt(0) == "#") ? str.substring(1, 7) : str; +} +function humanFriendlyNumber(n, d) { + var p, + d2, + i, + s; + p = Math.pow; + d2 = p(10, d); + i = 7; + while (i) { + s = p(10, i-- * 3); + if (s <= n) { + n = Math.round(n * d2 / s) / d2 + "KMGTPE"[i]; + } + } + return n; +} +function formatNumber(x) { + var parts = x.toString().split("."); + parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); + return parts.join("."); +} +function getStyle(oElm, strCssRule) { + var strValue = ""; + if (document.defaultView && document.defaultView.getComputedStyle) { + strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule); + } else if (oElm.currentStyle) { + strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1) { + return p1.toUpperCase(); + }); + strValue = oElm.currentStyle[strCssRule]; + } + return strValue; +} +function onCreateElementNsReady(func) { + if (document.createElementNS !== undefined) { + func(); + } else { + setTimeout(function () { + onCreateElementNsReady(func); + }, 100); + } +} +var ie = (function () { + var undef, + v = 3, + div = document.createElement('div'), + all = div.getElementsByTagName('i'); + while (div.innerHTML = '', all[0]); + return v > 4 ? v : undef; +} + ()); +function extend(out) { + out = out || {}; + for (var i = 1; i < arguments.length; i++) { + if (!arguments[i]) + continue; + for (var key in arguments[i]) { + if (arguments[i].hasOwnProperty(key)) + out[key] = arguments[i][key]; + } + } + return out; +}; diff --git a/examples/SmartSwitch/data_src/js_css_src/desktop.ini b/examples/SmartSwitch/data_src/js_css_src/desktop.ini new file mode 100644 index 0000000..00f30c4 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/desktop.ini @@ -0,0 +1,2 @@ +[LocalizedFileNames] +Command Prompt.lnk=@%SystemRoot%\system32\shell32.dll,-22022 diff --git a/examples/SmartSwitch/data_src/js_css_src/ext-searchbox.js b/examples/SmartSwitch/data_src/js_css_src/ext-searchbox.js new file mode 100644 index 0000000..b38b622 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/ext-searchbox.js @@ -0,0 +1,5 @@ +define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"],function(e,t,n){"use strict";var r=e("../lib/dom"),i=e("../lib/lang"),s=e("../lib/event"),o=".ace_search {background-color: #ddd;border: 1px solid #cbcbcb;border-top: 0 none;max-width: 325px;overflow: hidden;margin: 0;padding: 4px;padding-right: 6px;padding-bottom: 0;position: absolute;top: 0px;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {border-radius: 3px;border: 1px solid #cbcbcb;float: left;margin-bottom: 4px;overflow: hidden;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {background-color: white;color: black;border-right: 1px solid #cbcbcb;border: 0 none;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;float: left;height: 22px;outline: 0;padding: 0 7px;width: 214px;margin: 0;}.ace_searchbtn,.ace_replacebtn {background: #fff;border: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;float: left;height: 22px;margin: 0;position: relative;}.ace_searchbtn:last-child,.ace_replacebtn:last-child {border-top-right-radius: 3px;border-bottom-right-radius: 3px;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn {background-position: 50% 50%;background-repeat: no-repeat;width: 27px;}.ace_searchbtn.prev {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); }.ace_searchbtn.next {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); }.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;float: right;font: 16px/16px Arial;height: 14px;margin: 5px 1px 9px 5px;padding: 0;text-align: center;width: 14px;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_replacebtn.prev {width: 54px}.ace_replacebtn.next {width: 27px}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;-moz-box-sizing: border-box;box-sizing: border-box;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;}",u=e("../keyboard/hash_handler").HashHandler,a=e("../lib/keys");r.importCssString(o,"ace_searchbox");var f=''.replace(/>\s+/g,">"),l=function(e,t,n){var i=r.createElement("div");i.innerHTML=f,this.element=i.firstChild,this.$init(),this.setEditor(e)};(function(){this.setEditor=function(e){e.searchBox=this,e.container.appendChild(this.element),this.editor=e},this.$initElements=function(e){this.searchBox=e.querySelector(".ace_search_form"),this.replaceBox=e.querySelector(".ace_replace_form"),this.searchOptions=e.querySelector(".ace_search_options"),this.regExpOption=e.querySelector("[action=toggleRegexpMode]"),this.caseSensitiveOption=e.querySelector("[action=toggleCaseSensitive]"),this.wholeWordOption=e.querySelector("[action=toggleWholeWords]"),this.searchInput=this.searchBox.querySelector(".ace_search_field"),this.replaceInput=this.replaceBox.querySelector(".ace_search_field")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,"mousedown",function(e){setTimeout(function(){t.activeInput.focus()},0),s.stopPropagation(e)}),s.addListener(e,"click",function(e){var n=e.target||e.srcElement,r=n.getAttribute("action");r&&t[r]?t[r]():t.$searchBarKb.commands[r]&&t.$searchBarKb.commands[r].exec(t),s.stopPropagation(e)}),s.addCommandKeyListener(e,function(e,n,r){var i=a.keyCodeToString(r),o=t.$searchBarKb.findKeyCommand(n,i);o&&o.exec&&(o.exec(t),s.stopEvent(e))}),this.$onChange=i.delayedCall(function(){t.find(!1,!1)}),s.addListener(this.searchInput,"input",function(){t.$onChange.schedule(20)}),s.addListener(this.searchInput,"focus",function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()}),s.addListener(this.replaceInput,"focus",function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()})},this.$closeSearchBarKb=new u([{bindKey:"Esc",name:"closeSearchBar",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new u,this.$searchBarKb.bindKeys({"Ctrl-f|Command-f":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?"":"none",e.searchInput.focus()},"Ctrl-H|Command-Option-F":function(e){e.replaceBox.style.display="",e.replaceInput.focus()},"Ctrl-G|Command-G":function(e){e.findNext()},"Ctrl-Shift-G|Command-Shift-G":function(e){e.findPrev()},esc:function(e){setTimeout(function(){e.hide()})},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},"Shift-Return":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},"Alt-Return":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:"toggleRegexpMode",bindKey:{win:"Alt-R|Alt-/",mac:"Ctrl-Alt-R|Ctrl-Alt-/"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:"toggleCaseSensitive",bindKey:{win:"Alt-C|Alt-I",mac:"Ctrl-Alt-R|Ctrl-Alt-I"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:"toggleWholeWords",bindKey:{win:"Alt-B|Alt-W",mac:"Ctrl-Alt-B|Ctrl-Alt-W"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}}]),this.$syncOptions=function(){r.setCssClass(this.regExpOption,"checked",this.regExpOption.checked),r.setCssClass(this.wholeWordOption,"checked",this.wholeWordOption.checked),r.setCssClass(this.caseSensitiveOption,"checked",this.caseSensitiveOption.checked),this.find(!1,!1)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t,n){var i=this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:n}),s=!i&&this.searchInput.value;r.setCssClass(this.searchBox,"ace_nomatch",s),this.editor._emit("findSearchBox",{match:!s}),this.highlight()},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;r.setCssClass(this.searchBox,"ace_nomatch",t),this.editor._emit("findSearchBox",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.element.style.display="none",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.element.style.display="",this.replaceBox.style.display=t?"":"none",this.isReplace=t,e&&(this.searchInput.value=e),this.find(!1,!1,!0),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(l.prototype),t.SearchBox=l,t.Search=function(e,t){var n=e.searchBox||new l(e);n.show(e.session.getTextRange(),t)}}); + (function() { + window.require(["ace/ext/searchbox"], function() {}); + })(); + \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/js-time-picker/1-inline.html b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/1-inline.html new file mode 100644 index 0000000..22160e9 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/1-inline.html @@ -0,0 +1,30 @@ + + + + Inline Timepicker Example + + + + + + +

Inline Time Picker

+ +
TIME ON
+
+
TIME OFF
+ + + + + \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/js-time-picker/2-popup.html b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/2-popup.html new file mode 100644 index 0000000..162339a --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/2-popup.html @@ -0,0 +1,27 @@ + + + + Popup Timeicker Example + + + + + + +

Popup Time Picker

+ + + ON/OFF +

Line

+ + + + + \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/js-time-picker/README.txt b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/README.txt new file mode 100644 index 0000000..b09dd21 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/README.txt @@ -0,0 +1,29 @@ +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +LICENSE +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Copyright 2018 by Code Boxx + +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. + + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +MORE +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +Please visit https://code-boxx.com/ for more! \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick-light-pop.css b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick-light-pop.css new file mode 100644 index 0000000..cacbdb3 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick-light-pop.css @@ -0,0 +1,65 @@ +/* [CONTAINER] */ +.tpop { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100vh; + background: rgba(0, 0, 0, 0.7); + transition: all 0.5s; + visibility: hidden; + opacity: 0; +} +.tpop.show { + visibility: visible; + opacity: 1; +} +.tpicker { + background: #f2f2f2; + padding: 10px; + width: 100%; + max-width: 320px; + white-space: nowrap; + font-size: 32px; + font-weight: bold; + text-align: center; +} +.tpop .tpicker { + margin: 20px auto 0 auto; +} + +/* [HR + MIN + AM/PM] */ +.tpicker-h, .tpicker-m, .tpicker-ap { + display: inline-block; + width: 30%; +} +.tpicker input[type=text] { + box-sizing: border-box; + width: 70%; + padding: 10px; + margin: 5px 0; + border: 0; + background: #fff; + color: #888; + text-align: center; + font-size: 28px; +} +.tpicker-up, .tpicker-down { + text-align: center; + color: #ff853f; + cursor: pointer; +} + +/* [CANCEL + OK BUTTON] */ +.tpicker-btn { + margin-top: 10px; +} +.tpicker-btn input[type=button] { + width: 50%; + padding: 10px 0; + border: 0; + background: #a83a0b; + color: #fff; + font-size: 20px; + cursor: pointer; +} \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick-light.css b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick-light.css new file mode 100644 index 0000000..58676b4 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick-light.css @@ -0,0 +1,47 @@ +/* [CONTAINER] */ +.tpicker { + background: #f2f2f2; + padding: 10px; + width: 100%; + max-width: 320px; + white-space: nowrap; + font-size: 32px; + font-weight: bold; + text-align: center; +} + +/* [HR + MIN + AM/PM] */ +.tpicker-h, .tpicker-m, .tpicker-ap { + display: inline-block; + width: 30%; +} +.tpicker input[type=text] { + box-sizing: border-box; + width: 70%; + padding: 10px; + margin: 5px 0; + border: 0; + background: #fff; + color: #888; + text-align: center; + font-size: 28px; +} +.tpicker-up, .tpicker-down { + text-align: center; + color: #ff853f; + cursor: pointer; +} + +/* [CANCEL + OK BUTTON] */ +.tpicker-btn { + margin-top: 10px; +} +.tpicker-btn input[type=button] { + width: 50%; + padding: 10px 0; + border: 0; + background: #a83a0b; + color: #fff; + font-size: 20px; + cursor: pointer; +} \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick-pop.js b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick-pop.js new file mode 100644 index 0000000..c52a2da --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick-pop.js @@ -0,0 +1,136 @@ +var tpick = { + attach : function (target) { + // attach() : attach time picker to target + + // Generate a unique random ID for the time picker + var uniqueID = 0; + while (document.getElementById("tpick-" + uniqueID) != null) { + uniqueID = Math.floor(Math.random() * (100 - 2)) + 1; + } + + // Create wrapper + var tw = document.createElement("div"); + tw.id = "tpick-" + uniqueID; + tw.classList.add("tpop"); + tw.dataset.target = target; + tw.addEventListener("click", function (evt) { + if (evt.target.classList.contains("tpop")) { + this.classList.remove("show"); + } + }); + + // Create new time picker + var tp = document.createElement("div"); + tp.classList.add("tpicker"); + + // Create hour picker + tp.appendChild(this.draw("h")); + tp.appendChild(this.draw("m")); + tp.appendChild(this.draw("ap")); + + // OK button + var bottom = document.createElement("div"), + ok = document.createElement("input"); + ok.setAttribute("type", "button"); + ok.value = "OK"; + ok.addEventListener("click", function(){ tpick.set(this); }); + bottom.classList.add("tpicker-btn"); + bottom.appendChild(ok); + tp.appendChild(bottom); + + // Attach time picker to body + tw.appendChild(tp); + document.body.appendChild(tw); + + // Attach on focus event + var target = document.getElementById(target); + target.dataset.dp = uniqueID; + target.onfocus = function () { + document.getElementById("tpick-" + this.dataset.dp).classList.add("show"); + }; + }, + + draw : function (type) { + // draw() : support function to create the hr, min, am/pm selector + + // Create the controls + var docket = document.createElement("div"), + up = document.createElement("div"), + down = document.createElement("div"), + text = document.createElement("input"); + docket.classList.add("tpicker-" + type); + up.classList.add("tpicker-up"); + down.classList.add("tpicker-down"); + up.innerHTML = "︿"; + down.innerHTML = "﹀"; + text.readOnly = true; + text.setAttribute("type", "text"); + + // Default values + click event + // You can do your own modifications here + if (type=="h") { + text.value = "12"; + up.addEventListener("click", function(){ tpick.spin("h", 1, this); }); + down.addEventListener("click", function(){ tpick.spin("h", 0, this); }); + } else if (type=="m") { + text.value = "10"; + up.addEventListener("click", function(){ tpick.spin("m", 1, this); }); + down.addEventListener("click", function(){ tpick.spin("m", 0, this); }); + } else { + text.value = "AM"; + up.addEventListener("click", function(){ tpick.spin("ap", 1, this); }); + down.addEventListener("click", function(){ tpick.spin("ap", 0, this); }); + } + + // Complete + return the docket + docket.appendChild(up); + docket.appendChild(text); + docket.appendChild(down); + return docket; + }, + + spin : function (type, direction, el) { + // spin() : when the up/down button is pressed + + // Get current field + value + var parent = el.parentElement, + field = parent.getElementsByTagName("input")[0], + value = field.value; + + // Spin it + if (type=="h") { + value = parseInt(value); + if (direction) { value++; } else { value--; } + if (value==0) { value = 12; } + else if (value>12) { value = 1; } + } else if (type=="m") { + value = parseInt(value); + if (direction) { value+=5; } else { value-=5; } + if (value<0) { value = 55; } + else if (value>60) { value = 0; } + if (value<10) { value = "0" + value; } + } + else { + value = value=="PM" ? "AM" : "PM"; + } + field.value = value; + }, + + set : function (el) { + // set() : set the selected time on the target + + // Get the parent container + var parent = el.parentElement; + while (parent.classList.contains("tpop") == false) { + parent = parent.parentElement; + } + + // Formulate + set selected time + var input = parent.querySelectorAll("input[type=text]"); + var time = input[0].value + ":" + input[1].value + " " + input[2].value; + document.getElementById(parent.dataset.target).value = time; + + // Close popup + parent.classList.remove("show"); + } +}; \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick.js b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick.js new file mode 100644 index 0000000..799142c --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/js-time-picker/tpick.js @@ -0,0 +1,116 @@ +var tpick = { + attach : function (container, target) { + // attach() : attach time picker to target + + // Generate a unique random ID for the time picker + var uniqueID = 0; + while (document.getElementById("tpick-" + uniqueID) != null) { + uniqueID = Math.floor(Math.random() * (100 - 2)) + 1; + } + + // Create new time picker + var tp = document.createElement("div"); + tp.id = "tpick-" + uniqueID; + tp.dataset.target = target; + tp.classList.add("tpicker"); + + // Create hour picker + tp.appendChild(this.draw("h")); + tp.appendChild(this.draw("m")); + tp.appendChild(this.draw("ap")); + + // OK button + var bottom = document.createElement("div"), + ok = document.createElement("input"); + ok.setAttribute("type", "button"); + ok.value = "OK"; + ok.addEventListener("click", function(){ tpick.set(this); }); + bottom.classList.add("tpicker-btn"); + bottom.appendChild(ok); + tp.appendChild(bottom); + + // Attach time picker to target container + document.getElementById(container).appendChild(tp); + }, + + draw : function (type) { + // draw() : support function to create the hr, min, am/pm selector + + // Create the controls + var docket = document.createElement("div"), + up = document.createElement("div"), + down = document.createElement("div"), + text = document.createElement("input"); + docket.classList.add("tpicker-" + type); + up.classList.add("tpicker-up"); + down.classList.add("tpicker-down"); + up.innerHTML = "︿"; + down.innerHTML = "﹀"; + text.readOnly = true; + text.setAttribute("type", "text"); + + // Default values + click event + // You can do your own modifications here + if (type=="h") { + text.value = "12"; + up.addEventListener("click", function(){ tpick.spin("h", 1, this); }); + down.addEventListener("click", function(){ tpick.spin("h", 0, this); }); + } else if (type=="m") { + text.value = "10"; + up.addEventListener("click", function(){ tpick.spin("m", 1, this); }); + down.addEventListener("click", function(){ tpick.spin("m", 0, this); }); + } else { + text.value = "AM"; + up.addEventListener("click", function(){ tpick.spin("ap", 1, this); }); + down.addEventListener("click", function(){ tpick.spin("ap", 0, this); }); + } + + // Complete + return the docket + docket.appendChild(up); + docket.appendChild(text); + docket.appendChild(down); + return docket; + }, + + spin : function (type, direction, el) { + // spin() : when the up/down button is pressed + + // Get current field + value + var parent = el.parentElement, + field = parent.getElementsByTagName("input")[0], + value = field.value; + + // Spin it + if (type=="h") { + value = parseInt(value); + if (direction) { value++; } else { value--; } + if (value==0) { value = 12; } + else if (value>12) { value = 1; } + } else if (type=="m") { + value = parseInt(value); + if (direction) { value+=5; } else { value-=5; } + if (value<0) { value = 55; } + else if (value>60) { value = 0; } + if (value<10) { value = "0" + value; } + } + else { + value = value=="PM" ? "AM" : "PM"; + } + field.value = value; + }, + + set : function (el) { + // set() : set the selected time on the target + + // Get the parent container + var parent = el.parentElement; + while (parent.classList.contains("tpicker") == false) { + parent = parent.parentElement; + } + + // Formulate + set selected time + var input = parent.querySelectorAll("input[type=text]"); + var time = input[0].value + ":" + input[1].value + " " + input[2].value; + document.getElementById(parent.dataset.target).value = time; + } +}; \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/auto-adjust.htm b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/auto-adjust.htm new file mode 100644 index 0000000..28903cf --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/auto-adjust.htm @@ -0,0 +1,94 @@ + + + + + Auto-adjust + + + + + + +
+
+
+
+

+ JustGage auto-adjusts to the size of containing element. And to the screen zoom level. And screen density. Nice. This means you’ll get clean, sharp and nice looking gauge at all times. Try zooming the page to see the results. +

+ + + + + + diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/counter.html b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/counter.html new file mode 100644 index 0000000..4069593 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/counter.html @@ -0,0 +1,58 @@ + + + + + + Counter + + + + + + + + + + + + diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-interval.htm b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-interval.htm new file mode 100644 index 0000000..6c58bda --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-interval.htm @@ -0,0 +1,82 @@ + + + + + Custom interval + + + + + +
+
+
+

+ You need to measure, say, between 350 and 980? No problem, just tell it to justGage. Displayed value and color are calculated as a percentage in defined range, with optional min and max labels shown. +

+

+ Also, if displayed value is out of range, relax and kick your feet up - justGage will take care of it for you. +

+ + + + + + diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-node.html b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-node.html new file mode 100644 index 0000000..98964e1 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-node.html @@ -0,0 +1,130 @@ + + + + + Custom Node + + + + + + +
+
+
+
+
+ + +
+
+ + + + +
+ + + + + + diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-sectors.html b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-sectors.html new file mode 100644 index 0000000..a868de6 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-sectors.html @@ -0,0 +1,88 @@ + + + + + + Custom Sectors + + + + + + + + + +
+
+

0-50 is green, 51-100 is red

+ Random Refresh + Update Sectors +
+ + + + + + \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-value-renderer.html b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-value-renderer.html new file mode 100644 index 0000000..2e5b0f3 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/custom-value-renderer.html @@ -0,0 +1,116 @@ + + + + + + Custom Render Function + + + + +
+ Random Refresh + + + + + + diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/customize-style.htm b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/customize-style.htm new file mode 100644 index 0000000..9be11d1 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/customize-style.htm @@ -0,0 +1,137 @@ + + + + + Customize style + + + + + + +
+
+
+
+
+
+

+ Not digging default style? Then mock your own, Picasso! JustGage features bunch of styling options including gauge width, gauge color and shadow, gauge level colors, colors for title, value, min & max etc. +

+

+ Check non-minified version of justgage.js for list of all setup parameters. +

+ + + + + + diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/defaults.html b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/defaults.html new file mode 100644 index 0000000..99f8827 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/defaults.html @@ -0,0 +1,60 @@ + + + + + + Defaults + + + + + +
+
+
+
+ + + + + + diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/font-options.html b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/font-options.html new file mode 100644 index 0000000..11063c7 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/font-options.html @@ -0,0 +1,62 @@ + + + + + + Counter + + + + + + + + + + + + diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/format-number.html b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/format-number.html new file mode 100644 index 0000000..4bf2c36 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/format-number.html @@ -0,0 +1,56 @@ + + + + + + Counter + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/html5-data-attribute-config.html b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/html5-data-attribute-config.html new file mode 100644 index 0000000..3c2ab0b --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/html5-data-attribute-config.html @@ -0,0 +1,54 @@ + + + + + + html5 data-attribute setup + + + + + + + + + +
+
+ +
+ + + + + + \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/human-friendly-numbers.html b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/human-friendly-numbers.html new file mode 100644 index 0000000..f0e7ddc --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/human-friendly-numbers.html @@ -0,0 +1,109 @@ + + + + + + Guage + + + + +
+ Random Refresh + + + + + + diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/pointer.html b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/pointer.html new file mode 100644 index 0000000..b20ae5f --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/pointer.html @@ -0,0 +1,168 @@ + + + + + + Pointer + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + + + + diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/refresh-maximum.html b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/refresh-maximum.html new file mode 100644 index 0000000..e1502a1 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/refresh-maximum.html @@ -0,0 +1,91 @@ + + + + + + Donuts, baby! + + + + + + + + + + + + diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/responsive-gauges.htm b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/responsive-gauges.htm new file mode 100644 index 0000000..68680c6 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/responsive-gauges.htm @@ -0,0 +1,71 @@ + + + + + Dynamic Resize + + + + + +
+
+
+
+
+ + + + + + diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/reverse.html b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/reverse.html new file mode 100644 index 0000000..e17b675 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/examples/reverse.html @@ -0,0 +1,144 @@ + + + + + + Reverse + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + + + + diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/justgage.js b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/justgage.js new file mode 100644 index 0000000..c852491 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/justgage.js @@ -0,0 +1,1220 @@ +/** + * JustGage - animated gauges using RaphaelJS + * Check http://www.justgage.com for official releases + * Licensed under MIT. + * @author Bojan Djuricic (@Toorshia) + **/ + +JustGage = function(config) { + + var obj = this; + + // Helps in case developer wants to debug it. unobtrusive + if (config === null || config === undefined) { + console.log('* justgage: Make sure to pass options to the constructor!'); + return false; + } + + var node; + + if (config.id !== null && config.id !== undefined) { + node = document.getElementById(config.id); + if (!node) { + console.log('* justgage: No element with id : %s found', config.id); + return false; + } + } else if (config.parentNode !== null && config.parentNode !== undefined) { + node = config.parentNode; + } else { + console.log('* justgage: Make sure to pass the existing element id or parentNode to the constructor.'); + return false; + } + + var dataset = node.dataset ? node.dataset : {}; + + // check for defaults + var defaults = (config.defaults !== null && config.defaults !== undefined) ? config.defaults : false; + if (defaults !== false) { + config = extend({}, config, defaults); + delete config.defaults; + } + + // configurable parameters + obj.config = { + // id : string + // this is container element id + id: config.id, + + // value : float + // value gauge is showing + value: kvLookup('value', config, dataset, 0, 'float'), + + // defaults : bool + // defaults parameter to use + defaults: kvLookup('defaults', config, dataset, 0, false), + + // parentNode : node object + // this is container element + parentNode: kvLookup('parentNode', config, dataset, null), + + // width : int + // gauge width + width: kvLookup('width', config, dataset, null), + + // height : int + // gauge height + height: kvLookup('height', config, dataset, null), + + // title : string + // gauge title + title: kvLookup('title', config, dataset, ""), + + // titleFontColor : string + // color of gauge title + titleFontColor: kvLookup('titleFontColor', config, dataset, "#999999"), + + // titleFontFamily : string + // color of gauge title + titleFontFamily: kvLookup('titleFontFamily', config, dataset, "sans-serif"), + + // titlePosition : string + // 'above' or 'below' + titlePosition: kvLookup('titlePosition', config, dataset, "above"), + + // valueFontColor : string + // color of label showing current value + valueFontColor: kvLookup('valueFontColor', config, dataset, "#010101"), + + // valueFontFamily : string + // color of label showing current value + valueFontFamily: kvLookup('valueFontFamily', config, dataset, "Arial"), + + // symbol : string + // special symbol to show next to value + symbol: kvLookup('symbol', config, dataset, ''), + + // min : float + // min value + min: kvLookup('min', config, dataset, 0, 'float'), + + // max : float + // max value + max: kvLookup('max', config, dataset, 100, 'float'), + + // reverse : bool + // reverse min and max + reverse: kvLookup('reverse', config, dataset, false), + + // humanFriendlyDecimal : int + // number of decimal places for our human friendly number to contain + humanFriendlyDecimal: kvLookup('humanFriendlyDecimal', config, dataset, 0), + + + // textRenderer: func + // function applied before rendering text + textRenderer: kvLookup('textRenderer', config, dataset, null), + + // gaugeWidthScale : float + // width of the gauge element + gaugeWidthScale: kvLookup('gaugeWidthScale', config, dataset, 1.0), + + // gaugeColor : string + // background color of gauge element + gaugeColor: kvLookup('gaugeColor', config, dataset, "#edebeb"), + + // label : string + // text to show below value + label: kvLookup('label', config, dataset, ''), + + // labelFontColor : string + // color of label showing label under value + labelFontColor: kvLookup('labelFontColor', config, dataset, "#b3b3b3"), + + // shadowOpacity : int + // 0 ~ 1 + shadowOpacity: kvLookup('shadowOpacity', config, dataset, 0.2), + + // shadowSize: int + // inner shadow size + shadowSize: kvLookup('shadowSize', config, dataset, 5), + + // shadowVerticalOffset : int + // how much shadow is offset from top + shadowVerticalOffset: kvLookup('shadowVerticalOffset', config, dataset, 3), + + // levelColors : string[] + // colors of indicator, from lower to upper, in RGB format + levelColors: kvLookup('levelColors', config, dataset, ["#a9d70b", "#f9c802", "#ff0000"], 'array', ','), + + // startAnimationTime : int + // length of initial animation + startAnimationTime: kvLookup('startAnimationTime', config, dataset, 700), + + // startAnimationType : string + // type of initial animation (linear, >, <, <>, bounce) + startAnimationType: kvLookup('startAnimationType', config, dataset, '>'), + + // refreshAnimationTime : int + // length of refresh animation + refreshAnimationTime: kvLookup('refreshAnimationTime', config, dataset, 700), + + // refreshAnimationType : string + // type of refresh animation (linear, >, <, <>, bounce) + refreshAnimationType: kvLookup('refreshAnimationType', config, dataset, '>'), + + // donutStartAngle : int + // angle to start from when in donut mode + donutStartAngle: kvLookup('donutStartAngle', config, dataset, 90), + + // valueMinFontSize : int + // absolute minimum font size for the value + valueMinFontSize: kvLookup('valueMinFontSize', config, dataset, 16), + + // titleMinFontSize + // absolute minimum font size for the title + titleMinFontSize: kvLookup('titleMinFontSize', config, dataset, 10), + + // labelMinFontSize + // absolute minimum font size for the label + labelMinFontSize: kvLookup('labelMinFontSize', config, dataset, 10), + + // minLabelMinFontSize + // absolute minimum font size for the minimum label + minLabelMinFontSize: kvLookup('minLabelMinFontSize', config, dataset, 10), + + // maxLabelMinFontSize + // absolute minimum font size for the maximum label + maxLabelMinFontSize: kvLookup('maxLabelMinFontSize', config, dataset, 10), + + // hideValue : bool + // hide value text + hideValue: kvLookup('hideValue', config, dataset, false), + + // hideMinMax : bool + // hide min and max values + hideMinMax: kvLookup('hideMinMax', config, dataset, false), + + // hideInnerShadow : bool + // hide inner shadow + hideInnerShadow: kvLookup('hideInnerShadow', config, dataset, false), + + // humanFriendly : bool + // convert large numbers for min, max, value to human friendly (e.g. 1234567 -> 1.23M) + humanFriendly: kvLookup('humanFriendly', config, dataset, false), + + // noGradient : bool + // whether to use gradual color change for value, or sector-based + noGradient: kvLookup('noGradient', config, dataset, false), + + // donut : bool + // show full donut gauge + donut: kvLookup('donut', config, dataset, false), + + // relativeGaugeSize : bool + // whether gauge size should follow changes in container element size + relativeGaugeSize: kvLookup('relativeGaugeSize', config, dataset, false), + + // counter : bool + // animate level number change + counter: kvLookup('counter', config, dataset, false), + + // decimals : int + // number of digits after floating point + decimals: kvLookup('decimals', config, dataset, 0), + + // customSectors : [] of objects + // number of digits after floating point + customSectors: kvLookup('customSectors', config, dataset, []), + + // formatNumber: boolean + // formats numbers with commas where appropriate + formatNumber: kvLookup('formatNumber', config, dataset, false), + + // pointer : bool + // show value pointer + pointer: kvLookup('pointer', config, dataset, false), + + // pointerOptions : object + // define pointer look + pointerOptions: kvLookup('pointerOptions', config, dataset, []) + }; + + // variables + var + canvasW, + canvasH, + widgetW, + widgetH, + aspect, + dx, + dy, + titleFontSize, + titleX, + titleY, + valueFontSize, + valueX, + valueY, + labelFontSize, + labelX, + labelY, + minFontSize, + minX, + minY, + maxFontSize, + maxX, + maxY; + + // overflow values + if (obj.config.value > obj.config.max) obj.config.value = obj.config.max; + if (obj.config.value < obj.config.min) obj.config.value = obj.config.min; + obj.originalValue = kvLookup('value', config, dataset, -1, 'float'); + + // create canvas + if (obj.config.id !== null && (document.getElementById(obj.config.id)) !== null) { + obj.canvas = Raphael(obj.config.id, "100%", "100%"); + } else if (obj.config.parentNode !== null) { + obj.canvas = Raphael(obj.config.parentNode, "100%", "100%"); + } + + if (obj.config.relativeGaugeSize === true) { + obj.canvas.setViewBox(0, 0, 200, 150, true); + } + + // canvas dimensions + if (obj.config.relativeGaugeSize === true) { + canvasW = 200; + canvasH = 150; + } else if (obj.config.width !== null && obj.config.height !== null) { + canvasW = obj.config.width; + canvasH = obj.config.height; + } else if (obj.config.parentNode !== null) { + obj.canvas.setViewBox(0, 0, 200, 150, true); + canvasW = 200; + canvasH = 150; + } else { + canvasW = getStyle(document.getElementById(obj.config.id), "width").slice(0, -2) * 1; + canvasH = getStyle(document.getElementById(obj.config.id), "height").slice(0, -2) * 1; + } + + // widget dimensions + if (obj.config.donut === true) { + + // DONUT ******************************* + + // width more than height + if (canvasW > canvasH) { + widgetH = canvasH; + widgetW = widgetH; + // width less than height + } else if (canvasW < canvasH) { + widgetW = canvasW; + widgetH = widgetW; + // if height don't fit, rescale both + if (widgetH > canvasH) { + aspect = widgetH / canvasH; + widgetH = widgetH / aspect; + widgetW = widgetH / aspect; + } + // equal + } else { + widgetW = canvasW; + widgetH = widgetW; + } + + // delta + dx = (canvasW - widgetW) / 2; + dy = (canvasH - widgetH) / 2; + + // title + titleFontSize = ((widgetH / 8) > 10) ? (widgetH / 10) : 10; + titleX = dx + widgetW / 2; + titleY = dy + widgetH / 11; + + // value + valueFontSize = ((widgetH / 6.4) > 16) ? (widgetH / 5.4) : 18; + valueX = dx + widgetW / 2; + if (obj.config.label !== '') { + valueY = dy + widgetH / 1.85; + } else { + valueY = dy + widgetH / 1.7; + } + + // label + labelFontSize = ((widgetH / 16) > 10) ? (widgetH / 16) : 10; + labelX = dx + widgetW / 2; + labelY = valueY + labelFontSize; + + // min + minFontSize = ((widgetH / 16) > 10) ? (widgetH / 16) : 10; + minX = dx + (widgetW / 10) + (widgetW / 6.666666666666667 * obj.config.gaugeWidthScale) / 2; + minY = labelY; + + // max + maxFontSize = ((widgetH / 16) > 10) ? (widgetH / 16) : 10; + maxX = dx + widgetW - (widgetW / 10) - (widgetW / 6.666666666666667 * obj.config.gaugeWidthScale) / 2; + maxY = labelY; + + } else { + // HALF ******************************* + + // width more than height + if (canvasW > canvasH) { + widgetH = canvasH; + widgetW = widgetH * 1.25; + //if width doesn't fit, rescale both + if (widgetW > canvasW) { + aspect = widgetW / canvasW; + widgetW = widgetW / aspect; + widgetH = widgetH / aspect; + } + // width less than height + } else if (canvasW < canvasH) { + widgetW = canvasW; + widgetH = widgetW / 1.25; + // if height don't fit, rescale both + if (widgetH > canvasH) { + aspect = widgetH / canvasH; + widgetH = widgetH / aspect; + widgetW = widgetH / aspect; + } + // equal + } else { + widgetW = canvasW; + widgetH = widgetW * 0.75; + } + + // delta + dx = (canvasW - widgetW) / 2; + dy = (canvasH - widgetH) / 2; + if (obj.config.titlePosition === 'below') { + // shift whole thing down + dy -= (widgetH / 6.4); + } + + // title + titleFontSize = ((widgetH / 8) > obj.config.titleMinFontSize) ? (widgetH / 10) : obj.config.titleMinFontSize; + titleX = dx + widgetW / 2; + titleY = dy + (obj.config.titlePosition === 'below' ? (widgetH * 1.07) : (widgetH / 6.4)); + + // value + valueFontSize = ((widgetH / 6.5) > obj.config.valueMinFontSize) ? (widgetH / 6.5) : obj.config.valueMinFontSize; + valueX = dx + widgetW / 2; + valueY = dy + widgetH / 1.275; + + // label + labelFontSize = ((widgetH / 16) > obj.config.labelMinFontSize) ? (widgetH / 16) : obj.config.labelMinFontSize; + labelX = dx + widgetW / 2; + labelY = valueY + valueFontSize / 2 + 5; + + // min + minFontSize = ((widgetH / 16) > obj.config.minLabelMinFontSize) ? (widgetH / 16) : obj.config.minLabelMinFontSize; + minX = dx + (widgetW / 10) + (widgetW / 6.666666666666667 * obj.config.gaugeWidthScale) / 2; + minY = labelY; + + // max + maxFontSize = ((widgetH / 16) > obj.config.maxLabelMinFontSize) ? (widgetH / 16) : obj.config.maxLabelMinFontSize; + maxX = dx + widgetW - (widgetW / 10) - (widgetW / 6.666666666666667 * obj.config.gaugeWidthScale) / 2; + maxY = labelY; + } + + // parameters + obj.params = { + canvasW: canvasW, + canvasH: canvasH, + widgetW: widgetW, + widgetH: widgetH, + dx: dx, + dy: dy, + titleFontSize: titleFontSize, + titleX: titleX, + titleY: titleY, + valueFontSize: valueFontSize, + valueX: valueX, + valueY: valueY, + labelFontSize: labelFontSize, + labelX: labelX, + labelY: labelY, + minFontSize: minFontSize, + minX: minX, + minY: minY, + maxFontSize: maxFontSize, + maxX: maxX, + maxY: maxY + }; + + // var clear + canvasW, canvasH, widgetW, widgetH, aspect, dx, dy, titleFontSize, titleX, titleY, valueFontSize, valueX, valueY, labelFontSize, labelX, labelY, minFontSize, minX, minY, maxFontSize, maxX, maxY = null; + + // pki - custom attribute for generating gauge paths + obj.canvas.customAttributes.pki = function(value, min, max, w, h, dx, dy, gws, donut, reverse) { + + var alpha, Ro, Ri, Cx, Cy, Xo, Yo, Xi, Yi, path; + + if (donut) { + alpha = (1 - 2 * (value - min) / (max - min)) * Math.PI; + Ro = w / 2 - w / 7; + Ri = Ro - w / 6.666666666666667 * gws; + + Cx = w / 2 + dx; + Cy = h / 1.95 + dy; + + Xo = w / 2 + dx + Ro * Math.cos(alpha); + Yo = h - (h - Cy) - Ro * Math.sin(alpha); + Xi = w / 2 + dx + Ri * Math.cos(alpha); + Yi = h - (h - Cy) - Ri * Math.sin(alpha); + + path = "M" + (Cx - Ri) + "," + Cy + " "; + path += "L" + (Cx - Ro) + "," + Cy + " "; + if (value > ((max - min) / 2)) { + path += "A" + Ro + "," + Ro + " 0 0 1 " + (Cx + Ro) + "," + Cy + " "; + } + path += "A" + Ro + "," + Ro + " 0 0 1 " + Xo + "," + Yo + " "; + path += "L" + Xi + "," + Yi + " "; + if (value > ((max - min) / 2)) { + path += "A" + Ri + "," + Ri + " 0 0 0 " + (Cx + Ri) + "," + Cy + " "; + } + path += "A" + Ri + "," + Ri + " 0 0 0 " + (Cx - Ri) + "," + Cy + " "; + path += "Z "; + + return { + path: path + }; + + } else { + alpha = (1 - (value - min) / (max - min)) * Math.PI; + Ro = w / 2 - w / 10; + Ri = Ro - w / 6.666666666666667 * gws; + + Cx = w / 2 + dx; + Cy = h / 1.25 + dy; + + Xo = w / 2 + dx + Ro * Math.cos(alpha); + Yo = h - (h - Cy) - Ro * Math.sin(alpha); + Xi = w / 2 + dx + Ri * Math.cos(alpha); + Yi = h - (h - Cy) - Ri * Math.sin(alpha); + + path = "M" + (Cx - Ri) + "," + Cy + " "; + path += "L" + (Cx - Ro) + "," + Cy + " "; + path += "A" + Ro + "," + Ro + " 0 0 1 " + Xo + "," + Yo + " "; + path += "L" + Xi + "," + Yi + " "; + path += "A" + Ri + "," + Ri + " 0 0 0 " + (Cx - Ri) + "," + Cy + " "; + path += "Z "; + + return { + path: path + }; + } + + // var clear + alpha, Ro, Ri, Cx, Cy, Xo, Yo, Xi, Yi, path = null; + }; + + // ndl - custom attribute for generating needle path + obj.canvas.customAttributes.ndl = function(value, min, max, w, h, dx, dy, gws, donut) { + + var dlt = w * 3.5 / 100; + var dlb = w / 15; + var dw = w / 100; + + if (obj.config.pointerOptions.toplength != null && obj.config.pointerOptions.toplength != undefined) dlt = obj.config.pointerOptions.toplength; + if (obj.config.pointerOptions.bottomlength != null && obj.config.pointerOptions.bottomlength != undefined) dlb = obj.config.pointerOptions.bottomlength; + if (obj.config.pointerOptions.bottomwidth != null && obj.config.pointerOptions.bottomwidth != undefined) dw = obj.config.pointerOptions.bottomwidth; + + var alpha, Ro, Ri, Cx, Cy, Xo, Yo, Xi, Yi, Xc, Yc, Xz, Yz, Xa, Ya, Xb, Yb, path; + + if (donut) { + + alpha = (1 - 2 * (value - min) / (max - min)) * Math.PI; + Ro = w / 2 - w / 7; + Ri = Ro - w / 6.666666666666667 * gws; + + Cx = w / 2 + dx; + Cy = h / 1.95 + dy; + + Xo = w / 2 + dx + Ro * Math.cos(alpha); + Yo = h - (h - Cy) - Ro * Math.sin(alpha); + Xi = w / 2 + dx + Ri * Math.cos(alpha); + Yi = h - (h - Cy) - Ri * Math.sin(alpha); + + Xc = Xo + dlt * Math.cos(alpha); + Yc = Yo - dlt * Math.sin(alpha); + Xz = Xi - dlb * Math.cos(alpha); + Yz = Yi + dlb * Math.sin(alpha); + + Xa = Xz + dw * Math.sin(alpha); + Ya = Yz + dw * Math.cos(alpha); + Xb = Xz - dw * Math.sin(alpha); + Yb = Yz - dw * Math.cos(alpha); + + path = 'M' + Xa + ',' + Ya + ' '; + path += 'L' + Xb + ',' + Yb + ' '; + path += 'L' + Xc + ',' + Yc + ' '; + path += 'Z '; + + return { + path: path + }; + + } else { + alpha = (1 - (value - min) / (max - min)) * Math.PI; + Ro = w / 2 - w / 10; + Ri = Ro - w / 6.666666666666667 * gws; + + Cx = w / 2 + dx; + Cy = h / 1.25 + dy; + + Xo = w / 2 + dx + Ro * Math.cos(alpha); + Yo = h - (h - Cy) - Ro * Math.sin(alpha); + Xi = w / 2 + dx + Ri * Math.cos(alpha); + Yi = h - (h - Cy) - Ri * Math.sin(alpha); + + Xc = Xo + dlt * Math.cos(alpha); + Yc = Yo - dlt * Math.sin(alpha); + Xz = Xi - dlb * Math.cos(alpha); + Yz = Yi + dlb * Math.sin(alpha); + + Xa = Xz + dw * Math.sin(alpha); + Ya = Yz + dw * Math.cos(alpha); + Xb = Xz - dw * Math.sin(alpha); + Yb = Yz - dw * Math.cos(alpha); + + path = 'M' + Xa + ',' + Ya + ' '; + path += 'L' + Xb + ',' + Yb + ' '; + path += 'L' + Xc + ',' + Yc + ' '; + path += 'Z '; + + return { + path: path + }; + } + + // var clear + alpha, Ro, Ri, Cx, Cy, Xo, Yo, Xi, Yi, Xc, Yc, Xz, Yz, Xa, Ya, Xb, Yb, path = null; + }; + + // gauge + obj.gauge = obj.canvas.path().attr({ + "stroke": "none", + "fill": obj.config.gaugeColor, + pki: [ + obj.config.max, + obj.config.min, + obj.config.max, + obj.params.widgetW, + obj.params.widgetH, + obj.params.dx, + obj.params.dy, + obj.config.gaugeWidthScale, + obj.config.donut, + obj.config.reverse + ] + }); + + // level + obj.level = obj.canvas.path().attr({ + "stroke": "none", + "fill": getColor(obj.config.value, (obj.config.value - obj.config.min) / (obj.config.max - obj.config.min), obj.config.levelColors, obj.config.noGradient, obj.config.customSectors), + pki: [ + obj.config.min, + obj.config.min, + obj.config.max, + obj.params.widgetW, + obj.params.widgetH, + obj.params.dx, + obj.params.dy, + obj.config.gaugeWidthScale, + obj.config.donut, + obj.config.reverse + ] + }); + if (obj.config.donut) { + obj.level.transform("r" + obj.config.donutStartAngle + ", " + (obj.params.widgetW / 2 + obj.params.dx) + ", " + (obj.params.widgetH / 1.95 + obj.params.dy)); + } + + if (obj.config.pointer) { + // needle + obj.needle = obj.canvas.path().attr({ + "stroke": (obj.config.pointerOptions.stroke !== null && obj.config.pointerOptions.stroke !== undefined) ? obj.config.pointerOptions.stroke : "none", + "stroke-width": (obj.config.pointerOptions.stroke_width !== null && obj.config.pointerOptions.stroke_width !== undefined) ? obj.config.pointerOptions.stroke_width : 0, + "stroke-linecap": (obj.config.pointerOptions.stroke_linecap !== null && obj.config.pointerOptions.stroke_linecap !== undefined) ? obj.config.pointerOptions.stroke_linecap : "square", + "fill": (obj.config.pointerOptions.color !== null && obj.config.pointerOptions.color !== undefined) ? obj.config.pointerOptions.color : "#000000", + ndl: [ + obj.config.min, + obj.config.min, + obj.config.max, + obj.params.widgetW, + obj.params.widgetH, + obj.params.dx, + obj.params.dy, + obj.config.gaugeWidthScale, + obj.config.donut + ] + }); + + if (obj.config.donut) { + obj.needle.transform("r" + obj.config.donutStartAngle + ", " + (obj.params.widgetW / 2 + obj.params.dx) + ", " + (obj.params.widgetH / 1.95 + obj.params.dy)); + } + + } + + // title + obj.txtTitle = obj.canvas.text(obj.params.titleX, obj.params.titleY, obj.config.title); + obj.txtTitle.attr({ + "font-size": obj.params.titleFontSize, + "font-weight": "bold", + "font-family": obj.config.titleFontFamily, + "fill": obj.config.titleFontColor, + "fill-opacity": "1" + }); + setDy(obj.txtTitle, obj.params.titleFontSize, obj.params.titleY); + + // value + obj.txtValue = obj.canvas.text(obj.params.valueX, obj.params.valueY, 0); + obj.txtValue.attr({ + "font-size": obj.params.valueFontSize, + "font-weight": "bold", + "font-family": obj.config.valueFontFamily, + "fill": obj.config.valueFontColor, + "fill-opacity": "0" + }); + setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY); + + // label + obj.txtLabel = obj.canvas.text(obj.params.labelX, obj.params.labelY, obj.config.label); + obj.txtLabel.attr({ + "font-size": obj.params.labelFontSize, + "font-weight": "normal", + "font-family": "Arial", + "fill": obj.config.labelFontColor, + "fill-opacity": "0" + }); + setDy(obj.txtLabel, obj.params.labelFontSize, obj.params.labelY); + + // min + var min = obj.config.min; + if (obj.config.reverse) { + min = obj.config.max; + } + + obj.txtMinimum = min; + if (obj.config.humanFriendly) { + obj.txtMinimum = humanFriendlyNumber(min, obj.config.humanFriendlyDecimal); + } else if (obj.config.formatNumber) { + obj.txtMinimum = formatNumber(min); + } + obj.txtMin = obj.canvas.text(obj.params.minX, obj.params.minY, obj.txtMinimum); + obj.txtMin.attr({ + "font-size": obj.params.minFontSize, + "font-weight": "normal", + "font-family": "Arial", + "fill": obj.config.labelFontColor, + "fill-opacity": (obj.config.hideMinMax || obj.config.donut) ? "0" : "1" + }); + setDy(obj.txtMin, obj.params.minFontSize, obj.params.minY); + + // max + var max = obj.config.max; + if (obj.config.reverse) { + max = obj.config.min; + } + obj.txtMaximum = max; + if (obj.config.humanFriendly) { + obj.txtMaximum = humanFriendlyNumber(max, obj.config.humanFriendlyDecimal); + } else if (obj.config.formatNumber) { + obj.txtMaximum = formatNumber(max); + } + obj.txtMax = obj.canvas.text(obj.params.maxX, obj.params.maxY, obj.txtMaximum); + obj.txtMax.attr({ + "font-size": obj.params.maxFontSize, + "font-weight": "normal", + "font-family": "Arial", + "fill": obj.config.labelFontColor, + "fill-opacity": (obj.config.hideMinMax || obj.config.donut) ? "0" : "1" + }); + setDy(obj.txtMax, obj.params.maxFontSize, obj.params.maxY); + + var defs = obj.canvas.canvas.childNodes[1]; + var svg = "http://www.w3.org/2000/svg"; + + if (ie !== 'undefined' && ie < 9) { + // VML mode - no SVG & SVG filter support + } else if (ie !== 'undefined') { + onCreateElementNsReady(function() { + obj.generateShadow(svg, defs); + }); + } else { + obj.generateShadow(svg, defs); + } + + // var clear + defs, svg = null; + + // set value to display + if (obj.config.textRenderer) { + obj.originalValue = obj.config.textRenderer(obj.originalValue); + } else if (obj.config.humanFriendly) { + obj.originalValue = humanFriendlyNumber(obj.originalValue, obj.config.humanFriendlyDecimal) + obj.config.symbol; + } else if (obj.config.formatNumber) { + obj.originalValue = formatNumber(obj.originalValue) + obj.config.symbol; + } else { + obj.originalValue = (obj.originalValue * 1).toFixed(obj.config.decimals) + obj.config.symbol; + } + + if (obj.config.counter === true) { + //on each animation frame + eve.on("raphael.anim.frame." + (obj.level.id), function() { + var currentValue = obj.level.attr("pki")[0]; + if (obj.config.reverse) { + currentValue = (obj.config.max * 1) + (obj.config.min * 1) - (obj.level.attr("pki")[0] * 1); + } + if (obj.config.textRenderer) { + obj.txtValue.attr("text", obj.config.textRenderer(Math.floor(currentValue))); + } else if (obj.config.humanFriendly) { + obj.txtValue.attr("text", humanFriendlyNumber(Math.floor(currentValue), obj.config.humanFriendlyDecimal) + obj.config.symbol); + } else if (obj.config.formatNumber) { + obj.txtValue.attr("text", formatNumber(Math.floor(currentValue)) + obj.config.symbol); + } else { + obj.txtValue.attr("text", (currentValue * 1).toFixed(obj.config.decimals) + obj.config.symbol); + } + setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY); + currentValue = null; + }); + //on animation end + eve.on("raphael.anim.finish." + (obj.level.id), function() { + obj.txtValue.attr({ + "text": obj.originalValue + }); + setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY); + }); + } else { + //on animation start + eve.on("raphael.anim.start." + (obj.level.id), function() { + obj.txtValue.attr({ + "text": obj.originalValue + }); + setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY); + }); + } + + // animate gauge level, value & label + var rvl = obj.config.value; + if (obj.config.reverse) { + rvl = (obj.config.max * 1) + (obj.config.min * 1) - (obj.config.value * 1); + } + obj.level.animate({ + pki: [ + rvl, + obj.config.min, + obj.config.max, + obj.params.widgetW, + obj.params.widgetH, + obj.params.dx, + obj.params.dy, + obj.config.gaugeWidthScale, + obj.config.donut, + obj.config.reverse + ] + }, obj.config.startAnimationTime, obj.config.startAnimationType); + + if (obj.config.pointer) { + obj.needle.animate({ + ndl: [ + rvl, + obj.config.min, + obj.config.max, + obj.params.widgetW, + obj.params.widgetH, + obj.params.dx, + obj.params.dy, + obj.config.gaugeWidthScale, + obj.config.donut + ] + }, obj.config.startAnimationTime, obj.config.startAnimationType); + } + + obj.txtValue.animate({ + "fill-opacity": (obj.config.hideValue) ? "0" : "1" + }, obj.config.startAnimationTime, obj.config.startAnimationType); + obj.txtLabel.animate({ + "fill-opacity": "1" + }, obj.config.startAnimationTime, obj.config.startAnimationType); +}; + +/** Refresh gauge level */ +JustGage.prototype.refresh = function(val, max) { + + var obj = this; + var displayVal, color, max = max || null; + + // set new max + if (max !== null) { + obj.config.max = max; + // TODO: update customSectors + + obj.txtMaximum = obj.config.max; + if (obj.config.humanFriendly) { + obj.txtMaximum = humanFriendlyNumber(obj.config.max, obj.config.humanFriendlyDecimal); + } else if (obj.config.formatNumber) { + obj.txtMaximum = formatNumber(obj.config.max); + } + if (!obj.config.reverse) { + obj.txtMax.attr({ + "text": obj.txtMaximum + }); + setDy(obj.txtMax, obj.params.maxFontSize, obj.params.maxY); + } else { + obj.txtMin.attr({ + "text": obj.txtMaximum + }); + setDy(obj.txtMin, obj.params.minFontSize, obj.params.minY); + } + } + + // overflow values + displayVal = val; + if ((val * 1) > (obj.config.max * 1)) { + val = (obj.config.max * 1); + } + if ((val * 1) < (obj.config.min * 1)) { + val = (obj.config.min * 1); + } + + color = getColor(val, (val - obj.config.min) / (obj.config.max - obj.config.min), obj.config.levelColors, obj.config.noGradient, obj.config.customSectors); + + if (obj.config.textRenderer) { + displayVal = obj.config.textRenderer(displayVal); + } else if (obj.config.humanFriendly) { + displayVal = humanFriendlyNumber(displayVal, obj.config.humanFriendlyDecimal) + obj.config.symbol; + } else if (obj.config.formatNumber) { + displayVal = formatNumber((displayVal * 1).toFixed(obj.config.decimals)) + obj.config.symbol; + } else { + displayVal = (displayVal * 1).toFixed(obj.config.decimals) + obj.config.symbol; + } + obj.originalValue = displayVal; + obj.config.value = val * 1; + + if (!obj.config.counter) { + obj.txtValue.attr({ + "text": displayVal + }); + setDy(obj.txtValue, obj.params.valueFontSize, obj.params.valueY); + } + + var rvl = obj.config.value; + if (obj.config.reverse) { + rvl = (obj.config.max * 1) + (obj.config.min * 1) - (obj.config.value * 1); + } + obj.level.animate({ + pki: [ + rvl, + obj.config.min, + obj.config.max, + obj.params.widgetW, + obj.params.widgetH, + obj.params.dx, + obj.params.dy, + obj.config.gaugeWidthScale, + obj.config.donut, + obj.config.reverse + ], + "fill": color + }, obj.config.refreshAnimationTime, obj.config.refreshAnimationType); + + if (obj.config.pointer) { + obj.needle.animate({ + ndl: [ + rvl, + obj.config.min, + obj.config.max, + obj.params.widgetW, + obj.params.widgetH, + obj.params.dx, + obj.params.dy, + obj.config.gaugeWidthScale, + obj.config.donut + ] + }, obj.config.refreshAnimationTime, obj.config.refreshAnimationType); + } + + // var clear + obj, displayVal, color, max = null; +}; + +/** Generate shadow */ +JustGage.prototype.generateShadow = function(svg, defs) { + + var obj = this; + var sid = "inner-shadow-" + obj.config.id; + var gaussFilter, feOffset, feGaussianBlur, feComposite1, feFlood, feComposite2, feComposite3; + + // FILTER + gaussFilter = document.createElementNS(svg, "filter"); + gaussFilter.setAttribute("id", sid); + defs.appendChild(gaussFilter); + + // offset + feOffset = document.createElementNS(svg, "feOffset"); + feOffset.setAttribute("dx", 0); + feOffset.setAttribute("dy", obj.config.shadowVerticalOffset); + gaussFilter.appendChild(feOffset); + + // blur + feGaussianBlur = document.createElementNS(svg, "feGaussianBlur"); + feGaussianBlur.setAttribute("result", "offset-blur"); + feGaussianBlur.setAttribute("stdDeviation", obj.config.shadowSize); + gaussFilter.appendChild(feGaussianBlur); + + // composite 1 + feComposite1 = document.createElementNS(svg, "feComposite"); + feComposite1.setAttribute("operator", "out"); + feComposite1.setAttribute("in", "SourceGraphic"); + feComposite1.setAttribute("in2", "offset-blur"); + feComposite1.setAttribute("result", "inverse"); + gaussFilter.appendChild(feComposite1); + + // flood + feFlood = document.createElementNS(svg, "feFlood"); + feFlood.setAttribute("flood-color", "black"); + feFlood.setAttribute("flood-opacity", obj.config.shadowOpacity); + feFlood.setAttribute("result", "color"); + gaussFilter.appendChild(feFlood); + + // composite 2 + feComposite2 = document.createElementNS(svg, "feComposite"); + feComposite2.setAttribute("operator", "in"); + feComposite2.setAttribute("in", "color"); + feComposite2.setAttribute("in2", "inverse"); + feComposite2.setAttribute("result", "shadow"); + gaussFilter.appendChild(feComposite2); + + // composite 3 + feComposite3 = document.createElementNS(svg, "feComposite"); + feComposite3.setAttribute("operator", "over"); + feComposite3.setAttribute("in", "shadow"); + feComposite3.setAttribute("in2", "SourceGraphic"); + gaussFilter.appendChild(feComposite3); + + // set shadow + if (!obj.config.hideInnerShadow) { + obj.canvas.canvas.childNodes[2].setAttribute("filter", "url(#" + sid + ")"); + obj.canvas.canvas.childNodes[3].setAttribute("filter", "url(#" + sid + ")"); + } + + // var clear + gaussFilter, feOffset, feGaussianBlur, feComposite1, feFlood, feComposite2, feComposite3 = null; +}; + +// +// tiny helper function to lookup value of a key from two hash tables +// if none found, return defaultvalue +// +// key: string +// tablea: object +// tableb: DOMStringMap|object +// defval: string|integer|float|null +// datatype: return datatype +// delimiter: delimiter to be used in conjunction with datatype formatting +// +function kvLookup(key, tablea, tableb, defval, datatype, delimiter) { + var val = defval; + var canConvert = false; + if (!(key === null || key === undefined)) { + if (tableb !== null && tableb !== undefined && typeof tableb === "object" && key in tableb) { + val = tableb[key]; + canConvert = true; + } else if (tablea !== null && tablea !== undefined && typeof tablea === "object" && key in tablea) { + val = tablea[key]; + canConvert = true; + } else { + val = defval; + } + if (canConvert === true) { + if (datatype !== null && datatype !== undefined) { + switch (datatype) { + case 'int': + val = parseInt(val, 10); + break; + case 'float': + val = parseFloat(val); + break; + default: + break; + } + } + } + } + return val; +}; + +/** Get color for value */ +function getColor(val, pct, col, noGradient, custSec) { + + var no, inc, colors, percentage, rval, gval, bval, lower, upper, range, rangePct, pctLower, pctUpper, color; + var noGradient = noGradient || custSec.length > 0; + + if (custSec.length > 0) { + for (var i = 0; i < custSec.length; i++) { + if (val > custSec[i].lo && val <= custSec[i].hi) { + return custSec[i].color; + } + } + } + + no = col.length; + if (no === 1) return col[0]; + inc = (noGradient) ? (1 / no) : (1 / (no - 1)); + colors = []; + for (i = 0; i < col.length; i++) { + percentage = (noGradient) ? (inc * (i + 1)) : (inc * i); + rval = parseInt((cutHex(col[i])).substring(0, 2), 16); + gval = parseInt((cutHex(col[i])).substring(2, 4), 16); + bval = parseInt((cutHex(col[i])).substring(4, 6), 16); + colors[i] = { + pct: percentage, + color: { + r: rval, + g: gval, + b: bval + } + }; + } + + if (pct === 0) { + return 'rgb(' + [colors[0].color.r, colors[0].color.g, colors[0].color.b].join(',') + ')'; + } + + for (var j = 0; j < colors.length; j++) { + if (pct <= colors[j].pct) { + if (noGradient) { + return 'rgb(' + [colors[j].color.r, colors[j].color.g, colors[j].color.b].join(',') + ')'; + } else { + lower = colors[j - 1]; + upper = colors[j]; + range = upper.pct - lower.pct; + rangePct = (pct - lower.pct) / range; + pctLower = 1 - rangePct; + pctUpper = rangePct; + color = { + r: Math.floor(lower.color.r * pctLower + upper.color.r * pctUpper), + g: Math.floor(lower.color.g * pctLower + upper.color.g * pctUpper), + b: Math.floor(lower.color.b * pctLower + upper.color.b * pctUpper) + }; + return 'rgb(' + [color.r, color.g, color.b].join(',') + ')'; + } + } + } + +} + +/** Fix Raphael display:none tspan dy attribute bug */ +function setDy(elem, fontSize, txtYpos) { + if ((!ie || ie > 9) && elem.node.firstChild.attributes.dy) { + elem.node.firstChild.attributes.dy.value = 0; + } +} + +/** Random integer */ +function getRandomInt(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +/** Cut hex */ +function cutHex(str) { + return (str.charAt(0) == "#") ? str.substring(1, 7) : str; +} + +/** Human friendly number suffix - From: http://stackoverflow.com/questions/2692323/code-golf-friendly-number-abbreviator */ +function humanFriendlyNumber(n, d) { + var p, d2, i, s; + + p = Math.pow; + d2 = p(10, d); + i = 7; + while (i) { + s = p(10, i-- * 3); + if (s <= n) { + n = Math.round(n * d2 / s) / d2 + "KMGTPE" [i]; + } + } + return n; +} + +/** Format numbers with commas - From: http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript */ +function formatNumber(x) { + var parts = x.toString().split("."); + parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); + return parts.join("."); +} + +/** Get style */ +function getStyle(oElm, strCssRule) { + var strValue = ""; + if (document.defaultView && document.defaultView.getComputedStyle) { + strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule); + } else if (oElm.currentStyle) { + strCssRule = strCssRule.replace(/\-(\w)/g, function(strMatch, p1) { + return p1.toUpperCase(); + }); + strValue = oElm.currentStyle[strCssRule]; + } + return strValue; +} + +/** Create Element NS Ready */ +function onCreateElementNsReady(func) { + if (document.createElementNS !== undefined) { + func(); + } else { + setTimeout(function() { + onCreateElementNsReady(func); + }, 100); + } +} + +/** Get IE version */ +// ---------------------------------------------------------- +// A short snippet for detecting versions of IE in JavaScript +// without resorting to user-agent sniffing +// ---------------------------------------------------------- +// If you're not in IE (or IE version is less than 5) then: +// ie === undefined +// If you're in IE (>=5) then you can determine which version: +// ie === 7; // IE7 +// Thus, to detect IE: +// if (ie) {} +// And to detect the version: +// ie === 6 // IE6 +// ie > 7 // IE8, IE9 ... +// ie < 9 // Anything less than IE9 +// ---------------------------------------------------------- +// UPDATE: Now using Live NodeList idea from @jdalton +var ie = (function() { + + var undef, + v = 3, + div = document.createElement('div'), + all = div.getElementsByTagName('i'); + + while ( + div.innerHTML = '', + all[0] + ); + return v > 4 ? v : undef; +}()); + +// extend target object with second object +function extend(out) { + out = out || {}; + + for (var i = 1; i < arguments.length; i++) { + if (!arguments[i]) + continue; + + for (var key in arguments[i]) { + if (arguments[i].hasOwnProperty(key)) + out[key] = arguments[i][key]; + } + } + + return out; +}; diff --git a/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/raphael-2.1.4.min.js b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/raphael-2.1.4.min.js new file mode 100644 index 0000000..b907338 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/justgage-1.2.2/raphael-2.1.4.min.js @@ -0,0 +1,12 @@ +// ┌────────────────────────────────────────────────────────────────────┐ \\ +// │ Raphaël 2.1.4 - JavaScript Vector Library │ \\ +// ├────────────────────────────────────────────────────────────────────┤ \\ +// │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com) │ \\ +// │ Copyright © 2008-2012 Sencha Labs (http://sencha.com) │ \\ +// ├────────────────────────────────────────────────────────────────────┤ \\ +// │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\ +// └────────────────────────────────────────────────────────────────────┘ \\ +!function(a,b){"function"==typeof define&&define.amd?define("eve",function(){return b()}):"object"==typeof exports?module.exports=b():a.eve=b()}(this,function(){var a,b,c="0.4.2",d="hasOwnProperty",e=/[\.\/]/,f="*",g=function(){},h=function(a,b){return a-b},i={n:{}},j=function(c,d){c=String(c);var e,f=b,g=Array.prototype.slice.call(arguments,2),i=j.listeners(c),k=0,l=[],m={},n=[],o=a;a=c,b=0;for(var p=0,q=i.length;q>p;p++)"zIndex"in i[p]&&(l.push(i[p].zIndex),i[p].zIndex<0&&(m[i[p].zIndex]=i[p]));for(l.sort(h);l[k]<0;)if(e=m[l[k++]],n.push(e.apply(d,g)),b)return b=f,n;for(p=0;q>p;p++)if(e=i[p],"zIndex"in e)if(e.zIndex==l[k]){if(n.push(e.apply(d,g)),b)break;do if(k++,e=m[l[k]],e&&n.push(e.apply(d,g)),b)break;while(e)}else m[e.zIndex]=e;else if(n.push(e.apply(d,g)),b)break;return b=f,a=o,n.length?n:null};return j._events=i,j.listeners=function(a){var b,c,d,g,h,j,k,l,m=a.split(e),n=i,o=[n],p=[];for(g=0,h=m.length;h>g;g++){for(l=[],j=0,k=o.length;k>j;j++)for(n=o[j].n,c=[n[m[g]],n[f]],d=2;d--;)b=c[d],b&&(l.push(b),p=p.concat(b.f||[]));o=l}return p},j.on=function(a,b){if(a=String(a),"function"!=typeof b)return function(){};for(var c=a.split(e),d=i,f=0,h=c.length;h>f;f++)d=d.n,d=d.hasOwnProperty(c[f])&&d[c[f]]||(d[c[f]]={n:{}});for(d.f=d.f||[],f=0,h=d.f.length;h>f;f++)if(d.f[f]==b)return g;return d.f.push(b),function(a){+a==+a&&(b.zIndex=+a)}},j.f=function(a){var b=[].slice.call(arguments,1);return function(){j.apply(null,[a,null].concat(b).concat([].slice.call(arguments,0)))}},j.stop=function(){b=1},j.nt=function(b){return b?new RegExp("(?:\\.|\\/|^)"+b+"(?:\\.|\\/|$)").test(a):a},j.nts=function(){return a.split(e)},j.off=j.unbind=function(a,b){if(!a)return void(j._events=i={n:{}});var c,g,h,k,l,m,n,o=a.split(e),p=[i];for(k=0,l=o.length;l>k;k++)for(m=0;mk;k++)for(c=p[k];c.n;){if(b){if(c.f){for(m=0,n=c.f.length;n>m;m++)if(c.f[m]==b){c.f.splice(m,1);break}!c.f.length&&delete c.f}for(g in c.n)if(c.n[d](g)&&c.n[g].f){var q=c.n[g].f;for(m=0,n=q.length;n>m;m++)if(q[m]==b){q.splice(m,1);break}!q.length&&delete c.n[g].f}}else{delete c.f;for(g in c.n)c.n[d](g)&&c.n[g].f&&delete c.n[g].f}c=c.n}},j.once=function(a,b){var c=function(){return j.unbind(a,c),b.apply(this,arguments)};return j.on(a,c)},j.version=c,j.toString=function(){return"You are running Eve "+c},j}),function(a,b){"function"==typeof define&&define.amd?define("raphael.core",["eve"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("eve")):a.Raphael=b(a.eve)}(this,function(a){function b(c){if(b.is(c,"function"))return t?c():a.on("raphael.DOMload",c);if(b.is(c,U))return b._engine.create[C](b,c.splice(0,3+b.is(c[0],S))).add(c);var d=Array.prototype.slice.call(arguments,0);if(b.is(d[d.length-1],"function")){var e=d.pop();return t?e.call(b._engine.create[C](b,d)):a.on("raphael.DOMload",function(){e.call(b._engine.create[C](b,d))})}return b._engine.create[C](b,arguments)}function c(a){if("function"==typeof a||Object(a)!==a)return a;var b=new a.constructor;for(var d in a)a[y](d)&&(b[d]=c(a[d]));return b}function d(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return a.push(a.splice(c,1)[0])}function e(a,b,c){function e(){var f=Array.prototype.slice.call(arguments,0),g=f.join("␀"),h=e.cache=e.cache||{},i=e.count=e.count||[];return h[y](g)?(d(i,g),c?c(h[g]):h[g]):(i.length>=1e3&&delete h[i.shift()],i.push(g),h[g]=a[C](b,f),c?c(h[g]):h[g])}return e}function f(){return this.hex}function g(a,b){for(var c=[],d=0,e=a.length;e-2*!b>d;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}function h(a,b,c,d,e){var f=-3*b+9*c-9*d+3*e,g=a*f+6*b-12*c+6*d;return a*g-3*b+3*c}function i(a,b,c,d,e,f,g,i,j){null==j&&(j=1),j=j>1?1:0>j?0:j;for(var k=j/2,l=12,m=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],n=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],o=0,p=0;l>p;p++){var q=k*m[p]+k,r=h(q,a,c,e,g),s=h(q,b,d,f,i),t=r*r+s*s;o+=n[p]*M.sqrt(t)}return k*o}function j(a,b,c,d,e,f,g,h,j){if(!(0>j||i(a,b,c,d,e,f,g,h)o;)m/=2,n+=(j>k?1:-1)*m,k=i(a,b,c,d,e,f,g,h,n);return n}}function k(a,b,c,d,e,f,g,h){if(!(N(a,c)N(e,g)||N(b,d)N(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(k){var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(!(n<+O(a,c).toFixed(2)||n>+N(a,c).toFixed(2)||n<+O(e,g).toFixed(2)||n>+N(e,g).toFixed(2)||o<+O(b,d).toFixed(2)||o>+N(b,d).toFixed(2)||o<+O(f,h).toFixed(2)||o>+N(f,h).toFixed(2)))return{x:l,y:m}}}}function l(a,c,d){var e=b.bezierBBox(a),f=b.bezierBBox(c);if(!b.isBBoxIntersect(e,f))return d?0:[];for(var g=i.apply(0,a),h=i.apply(0,c),j=N(~~(g/5),1),l=N(~~(h/5),1),m=[],n=[],o={},p=d?0:[],q=0;j+1>q;q++){var r=b.findDotsAtSegment.apply(b,a.concat(q/j));m.push({x:r.x,y:r.y,t:q/j})}for(q=0;l+1>q;q++)r=b.findDotsAtSegment.apply(b,c.concat(q/l)),n.push({x:r.x,y:r.y,t:q/l});for(q=0;j>q;q++)for(var s=0;l>s;s++){var t=m[q],u=m[q+1],v=n[s],w=n[s+1],x=P(u.x-t.x)<.001?"y":"x",y=P(w.x-v.x)<.001?"y":"x",z=k(t.x,t.y,u.x,u.y,v.x,v.y,w.x,w.y);if(z){if(o[z.x.toFixed(4)]==z.y.toFixed(4))continue;o[z.x.toFixed(4)]=z.y.toFixed(4);var A=t.t+P((z[x]-t[x])/(u[x]-t[x]))*(u.t-t.t),B=v.t+P((z[y]-v[y])/(w[y]-v[y]))*(w.t-v.t);A>=0&&1.001>=A&&B>=0&&1.001>=B&&(d?p++:p.push({x:z.x,y:z.y,t1:O(A,1),t2:O(B,1)}))}}return p}function m(a,c,d){a=b._path2curve(a),c=b._path2curve(c);for(var e,f,g,h,i,j,k,m,n,o,p=d?0:[],q=0,r=a.length;r>q;q++){var s=a[q];if("M"==s[0])e=i=s[1],f=j=s[2];else{"C"==s[0]?(n=[e,f].concat(s.slice(1)),e=n[6],f=n[7]):(n=[e,f,e,f,i,j,i,j],e=i,f=j);for(var t=0,u=c.length;u>t;t++){var v=c[t];if("M"==v[0])g=k=v[1],h=m=v[2];else{"C"==v[0]?(o=[g,h].concat(v.slice(1)),g=o[6],h=o[7]):(o=[g,h,g,h,k,m,k,m],g=k,h=m);var w=l(n,o,d);if(d)p+=w;else{for(var x=0,y=w.length;y>x;x++)w[x].segment1=q,w[x].segment2=t,w[x].bez1=n,w[x].bez2=o;p=p.concat(w)}}}}}return p}function n(a,b,c,d,e,f){null!=a?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function o(){return this.x+G+this.y+G+this.width+" × "+this.height}function p(a,b,c,d,e,f){function g(a){return((l*a+k)*a+j)*a}function h(a,b){var c=i(a,b);return((o*c+n)*c+m)*c}function i(a,b){var c,d,e,f,h,i;for(e=a,i=0;8>i;i++){if(f=g(e)-a,P(f)e)return c;if(e>d)return d;for(;d>c;){if(f=g(e),P(f-a)f?c=e:d=e,e=(d-c)/2+c}return e}var j=3*b,k=3*(d-b)-j,l=1-j-k,m=3*c,n=3*(e-c)-m,o=1-m-n;return h(a,1/(200*f))}function q(a,b){var c=[],d={};if(this.ms=b,this.times=1,a){for(var e in a)a[y](e)&&(d[$(e)]=a[e],c.push($(e)));c.sort(ka)}this.anim=d,this.top=c[c.length-1],this.percents=c}function r(c,d,e,f,g,h){e=$(e);var i,j,k,l,m,o,q=c.ms,r={},s={},t={};if(f)for(w=0,x=fb.length;x>w;w++){var u=fb[w];if(u.el.id==d.id&&u.anim==c){u.percent!=e?(fb.splice(w,1),k=1):j=u,d.attr(u.totalOrigin);break}}else f=+s;for(var w=0,x=c.percents.length;x>w;w++){if(c.percents[w]==e||c.percents[w]>f*c.top){e=c.percents[w],m=c.percents[w-1]||0,q=q/c.top*(e-m),l=c.percents[w+1],i=c.anim[e];break}f&&d.attr(c.anim[c.percents[w]])}if(i){if(j)j.initstatus=f,j.start=new Date-j.ms*f;else{for(var z in i)if(i[y](z)&&(ca[y](z)||d.paper.customAttributes[y](z)))switch(r[z]=d.attr(z),null==r[z]&&(r[z]=ba[z]),s[z]=i[z],ca[z]){case S:t[z]=(s[z]-r[z])/q;break;case"colour":r[z]=b.getRGB(r[z]);var A=b.getRGB(s[z]);t[z]={r:(A.r-r[z].r)/q,g:(A.g-r[z].g)/q,b:(A.b-r[z].b)/q};break;case"path":var B=Ia(r[z],s[z]),C=B[1];for(r[z]=B[0],t[z]=[],w=0,x=r[z].length;x>w;w++){t[z][w]=[0];for(var E=1,F=r[z][w].length;F>E;E++)t[z][w][E]=(C[w][E]-r[z][w][E])/q}break;case"transform":var G=d._,J=Na(G[z],s[z]);if(J)for(r[z]=J.from,s[z]=J.to,t[z]=[],t[z].real=!0,w=0,x=r[z].length;x>w;w++)for(t[z][w]=[r[z][w][0]],E=1,F=r[z][w].length;F>E;E++)t[z][w][E]=(s[z][w][E]-r[z][w][E])/q;else{var K=d.matrix||new n,L={_:{transform:G.transform},getBBox:function(){return d.getBBox(1)}};r[z]=[K.a,K.b,K.c,K.d,K.e,K.f],La(L,s[z]),s[z]=L._.transform,t[z]=[(L.matrix.a-K.a)/q,(L.matrix.b-K.b)/q,(L.matrix.c-K.c)/q,(L.matrix.d-K.d)/q,(L.matrix.e-K.e)/q,(L.matrix.f-K.f)/q]}break;case"csv":var M=H(i[z])[I](v),N=H(r[z])[I](v);if("clip-rect"==z)for(r[z]=N,t[z]=[],w=N.length;w--;)t[z][w]=(M[w]-r[z][w])/q;s[z]=M;break;default:for(M=[][D](i[z]),N=[][D](r[z]),t[z]=[],w=d.paper.customAttributes[z].length;w--;)t[z][w]=((M[w]||0)-(N[w]||0))/q}var O=i.easing,P=b.easing_formulas[O];if(!P)if(P=H(O).match(Y),P&&5==P.length){var Q=P;P=function(a){return p(a,+Q[1],+Q[2],+Q[3],+Q[4],q)}}else P=la;if(o=i.start||c.start||+new Date,u={anim:c,percent:e,timestamp:o,start:o+(c.del||0),status:0,initstatus:f||0,stop:!1,ms:q,easing:P,from:r,diff:t,to:s,el:d,callback:i.callback,prev:m,next:l,repeat:h||c.times,origin:d.attr(),totalOrigin:g},fb.push(u),f&&!j&&!k&&(u.stop=!0,u.start=new Date-q*f,1==fb.length))return hb();k&&(u.start=new Date-u.ms*f),1==fb.length&&gb(hb)}a("raphael.anim.start."+d.id,d,c)}}function s(a){for(var b=0;be;e++)for(i=a[e],f=1,h=i.length;h>f;f+=2)c=b.x(i[f],i[f+1]),d=b.y(i[f],i[f+1]),i[f]=c,i[f+1]=d;return a};if(b._g=z,b.type=z.win.SVGAngle||z.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML","VML"==b.type){var qa,ra=z.doc.createElement("div");if(ra.innerHTML='',qa=ra.firstChild,qa.style.behavior="url(#default#VML)",!qa||"object"!=typeof qa.adj)return b.type=F;ra=null}b.svg=!(b.vml="VML"==b.type),b._Paper=B,b.fn=u=B.prototype=b.prototype,b._id=0,b._oid=0,b.is=function(a,b){return b=L.call(b),"finite"==b?!X[y](+a):"array"==b?a instanceof Array:"null"==b&&null===a||b==typeof a&&null!==a||"object"==b&&a===Object(a)||"array"==b&&Array.isArray&&Array.isArray(a)||V.call(a).slice(8,-1).toLowerCase()==b},b.angle=function(a,c,d,e,f,g){if(null==f){var h=a-d,i=c-e;return h||i?(180+180*M.atan2(-i,-h)/R+360)%360:0}return b.angle(a,c,f,g)-b.angle(d,e,f,g)},b.rad=function(a){return a%360*R/180},b.deg=function(a){return Math.round(180*a/R%360*1e3)/1e3},b.snapTo=function(a,c,d){if(d=b.is(d,"finite")?d:10,b.is(a,U)){for(var e=a.length;e--;)if(P(a[e]-c)<=d)return a[e]}else{a=+a;var f=c%a;if(d>f)return c-f;if(f>a-d)return c-f+a}return c};b.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=16*M.random()|0,c="x"==a?b:3&b|8;return c.toString(16)});b.setWindow=function(c){a("raphael.setWindow",b,z.win,c),z.win=c,z.doc=z.win.document,b._engine.initWin&&b._engine.initWin(z.win)};var sa=function(a){if(b.vml){var c,d=/^\s+|\s+$/g;try{var f=new ActiveXObject("htmlfile");f.write(""),f.close(),c=f.body}catch(g){c=createPopup().document.body}var h=c.createTextRange();sa=e(function(a){try{c.style.color=H(a).replace(d,F);var b=h.queryCommandValue("ForeColor");return b=(255&b)<<16|65280&b|(16711680&b)>>>16,"#"+("000000"+b.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=z.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",z.doc.body.appendChild(i),sa=e(function(a){return i.style.color=a,z.doc.defaultView.getComputedStyle(i,F).getPropertyValue("color")})}return sa(a)},ta=function(){return"hsb("+[this.h,this.s,this.b]+")"},ua=function(){return"hsl("+[this.h,this.s,this.l]+")"},va=function(){return this.hex},wa=function(a,c,d){if(null==c&&b.is(a,"object")&&"r"in a&&"g"in a&&"b"in a&&(d=a.b,c=a.g,a=a.r),null==c&&b.is(a,T)){var e=b.getRGB(a);a=e.r,c=e.g,d=e.b}return(a>1||c>1||d>1)&&(a/=255,c/=255,d/=255),[a,c,d]},xa=function(a,c,d,e){a*=255,c*=255,d*=255;var f={r:a,g:c,b:d,hex:b.rgb(a,c,d),toString:va};return b.is(e,"finite")&&(f.opacity=e),f};b.color=function(a){var c;return b.is(a,"object")&&"h"in a&&"s"in a&&"b"in a?(c=b.hsb2rgb(a),a.r=c.r,a.g=c.g,a.b=c.b,a.hex=c.hex):b.is(a,"object")&&"h"in a&&"s"in a&&"l"in a?(c=b.hsl2rgb(a),a.r=c.r,a.g=c.g,a.b=c.b,a.hex=c.hex):(b.is(a,"string")&&(a=b.getRGB(a)),b.is(a,"object")&&"r"in a&&"g"in a&&"b"in a?(c=b.rgb2hsl(a),a.h=c.h,a.s=c.s,a.l=c.l,c=b.rgb2hsb(a),a.v=c.b):(a={hex:"none"},a.r=a.g=a.b=a.h=a.s=a.v=a.l=-1)),a.toString=va,a},b.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,d=a.o,a=a.h),a*=360;var e,f,g,h,i;return a=a%360/60,i=c*b,h=i*(1-P(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],xa(e,f,g,d)},b.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h),(a>1||b>1||c>1)&&(a/=360,b/=100,c/=100),a*=360;var e,f,g,h,i;return a=a%360/60,i=2*b*(.5>c?c:1-c),h=i*(1-P(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],xa(e,f,g,d)},b.rgb2hsb=function(a,b,c){c=wa(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;return f=N(a,b,c),g=f-O(a,b,c),d=0==g?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=0==g?0:g/f,{h:d,s:e,b:f,toString:ta}},b.rgb2hsl=function(a,b,c){c=wa(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;return g=N(a,b,c),h=O(a,b,c),i=g-h,d=0==i?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=0==i?0:.5>f?i/(2*f):i/(2-2*f),{h:d,s:e,l:f,toString:ua}},b._path2string=function(){return this.join(",").replace(fa,"$1")};b._preload=function(a,b){var c=z.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top:-9999em",c.onload=function(){b.call(this),this.onload=null,z.doc.body.removeChild(this)},c.onerror=function(){z.doc.body.removeChild(this)},z.doc.body.appendChild(c),c.src=a};b.getRGB=e(function(a){if(!a||(a=H(a)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:f};if("none"==a)return{r:-1,g:-1,b:-1,hex:"none",toString:f};!(ea[y](a.toLowerCase().substring(0,2))||"#"==a.charAt())&&(a=sa(a));var c,d,e,g,h,i,j=a.match(W);return j?(j[2]&&(e=_(j[2].substring(5),16),d=_(j[2].substring(3,5),16),c=_(j[2].substring(1,3),16)),j[3]&&(e=_((h=j[3].charAt(3))+h,16),d=_((h=j[3].charAt(2))+h,16),c=_((h=j[3].charAt(1))+h,16)),j[4]&&(i=j[4][I](da),c=$(i[0]),"%"==i[0].slice(-1)&&(c*=2.55),d=$(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=$(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),"rgba"==j[1].toLowerCase().slice(0,4)&&(g=$(i[3])),i[3]&&"%"==i[3].slice(-1)&&(g/=100)),j[5]?(i=j[5][I](da),c=$(i[0]),"%"==i[0].slice(-1)&&(c*=2.55),d=$(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=$(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(c/=360),"hsba"==j[1].toLowerCase().slice(0,4)&&(g=$(i[3])),i[3]&&"%"==i[3].slice(-1)&&(g/=100),b.hsb2rgb(c,d,e,g)):j[6]?(i=j[6][I](da),c=$(i[0]),"%"==i[0].slice(-1)&&(c*=2.55),d=$(i[1]),"%"==i[1].slice(-1)&&(d*=2.55),e=$(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(c/=360),"hsla"==j[1].toLowerCase().slice(0,4)&&(g=$(i[3])),i[3]&&"%"==i[3].slice(-1)&&(g/=100),b.hsl2rgb(c,d,e,g)):(j={r:c,g:d,b:e,toString:f},j.hex="#"+(16777216|e|d<<8|c<<16).toString(16).slice(1),b.is(g,"finite")&&(j.opacity=g),j)):{r:-1,g:-1,b:-1,hex:"none",error:1,toString:f}},b),b.hsb=e(function(a,c,d){return b.hsb2rgb(a,c,d).hex}),b.hsl=e(function(a,c,d){return b.hsl2rgb(a,c,d).hex}),b.rgb=e(function(a,b,c){function d(a){return a+.5|0}return"#"+(16777216|d(c)|d(b)<<8|d(a)<<16).toString(16).slice(1)}),b.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);return b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b})),c.hex},b.getColor.reset=function(){delete this.start},b.parsePathString=function(a){if(!a)return null;var c=ya(a);if(c.arr)return Aa(c.arr);var d={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},e=[];return b.is(a,U)&&b.is(a[0],U)&&(e=Aa(a)),e.length||H(a).replace(ga,function(a,b,c){var f=[],g=b.toLowerCase();if(c.replace(ia,function(a,b){b&&f.push(+b)}),"m"==g&&f.length>2&&(e.push([b][D](f.splice(0,2))),g="l",b="m"==b?"l":"L"),"r"==g)e.push([b][D](f));else for(;f.length>=d[g]&&(e.push([b][D](f.splice(0,d[g]))),d[g]););}),e.toString=b._path2string,c.arr=Aa(e),e},b.parseTransformString=e(function(a){if(!a)return null;var c=[];return b.is(a,U)&&b.is(a[0],U)&&(c=Aa(a)),c.length||H(a).replace(ha,function(a,b,d){{var e=[];L.call(b)}d.replace(ia,function(a,b){b&&e.push(+b)}),c.push([b][D](e))}),c.toString=b._path2string,c});var ya=function(a){var b=ya.ps=ya.ps||{};return b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[y](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])}),b[a]};b.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=Q(j,3),l=Q(j,2),m=i*i,n=m*i,o=k*a+3*l*i*c+3*j*i*i*e+n*g,p=k*b+3*l*i*d+3*j*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,w=j*e+i*g,x=j*f+i*h,y=90-180*M.atan2(q-s,r-t)/R;return(q>s||t>r)&&(y+=180),{x:o,y:p,m:{x:q,y:r},n:{x:s,y:t},start:{x:u,y:v},end:{x:w,y:x},alpha:y}},b.bezierBBox=function(a,c,d,e,f,g,h,i){b.is(a,"array")||(a=[a,c,d,e,f,g,h,i]);var j=Ha.apply(null,a);return{x:j.min.x,y:j.min.y,x2:j.max.x,y2:j.max.y,width:j.max.x-j.min.x,height:j.max.y-j.min.y}},b.isPointInsideBBox=function(a,b,c){return b>=a.x&&b<=a.x2&&c>=a.y&&c<=a.y2},b.isBBoxIntersect=function(a,c){var d=b.isPointInsideBBox;return d(c,a.x,a.y)||d(c,a.x2,a.y)||d(c,a.x,a.y2)||d(c,a.x2,a.y2)||d(a,c.x,c.y)||d(a,c.x2,c.y)||d(a,c.x,c.y2)||d(a,c.x2,c.y2)||(a.xc.x||c.xa.x)&&(a.yc.y||c.ya.y)},b.pathIntersection=function(a,b){return m(a,b)},b.pathIntersectionNumber=function(a,b){return m(a,b,1)},b.isPointInsidePath=function(a,c,d){var e=b.pathBBox(a);return b.isPointInsideBBox(e,c,d)&&m(a,[["M",c,d],["H",e.x2+10]],1)%2==1},b._removedFactory=function(b){return function(){a("raphael.log",null,"Raphaël: you are calling to method “"+b+"” of removed object",b)}};var za=b.pathBBox=function(a){var b=ya(a);if(b.bbox)return c(b.bbox);if(!a)return{x:0,y:0,width:0,height:0,x2:0,y2:0};a=Ia(a);for(var d,e=0,f=0,g=[],h=[],i=0,j=a.length;j>i;i++)if(d=a[i],"M"==d[0])e=d[1],f=d[2],g.push(e),h.push(f);else{var k=Ha(e,f,d[1],d[2],d[3],d[4],d[5],d[6]);g=g[D](k.min.x,k.max.x),h=h[D](k.min.y,k.max.y),e=d[5],f=d[6]}var l=O[C](0,g),m=O[C](0,h),n=N[C](0,g),o=N[C](0,h),p=n-l,q=o-m,r={x:l,y:m,x2:n,y2:o,width:p,height:q,cx:l+p/2,cy:m+q/2};return b.bbox=c(r),r},Aa=function(a){var d=c(a);return d.toString=b._path2string,d},Ba=b._pathToRelative=function(a){var c=ya(a);if(c.rel)return Aa(c.rel);b.is(a,U)&&b.is(a&&a[0],U)||(a=b.parsePathString(a));var d=[],e=0,f=0,g=0,h=0,i=0;"M"==a[0][0]&&(e=a[0][1],f=a[0][2],g=e,h=f,i++,d.push(["M",e,f]));for(var j=i,k=a.length;k>j;j++){var l=d[j]=[],m=a[j];if(m[0]!=L.call(m[0]))switch(l[0]=L.call(m[0]),l[0]){case"a":l[1]=m[1],l[2]=m[2],l[3]=m[3],l[4]=m[4],l[5]=m[5],l[6]=+(m[6]-e).toFixed(3),l[7]=+(m[7]-f).toFixed(3);break;case"v":l[1]=+(m[1]-f).toFixed(3);break;case"m":g=m[1],h=m[2];default:for(var n=1,o=m.length;o>n;n++)l[n]=+(m[n]-(n%2?e:f)).toFixed(3)}else{l=d[j]=[],"m"==m[0]&&(g=m[1]+e,h=m[2]+f);for(var p=0,q=m.length;q>p;p++)d[j][p]=m[p]}var r=d[j].length;switch(d[j][0]){case"z":e=g,f=h;break;case"h":e+=+d[j][r-1];break;case"v":f+=+d[j][r-1];break;default:e+=+d[j][r-2],f+=+d[j][r-1]}}return d.toString=b._path2string,c.rel=Aa(d),d},Ca=b._pathToAbsolute=function(a){var c=ya(a);if(c.abs)return Aa(c.abs);if(b.is(a,U)&&b.is(a&&a[0],U)||(a=b.parsePathString(a)),!a||!a.length)return[["M",0,0]];var d=[],e=0,f=0,h=0,i=0,j=0;"M"==a[0][0]&&(e=+a[0][1],f=+a[0][2],h=e,i=f,j++,d[0]=["M",e,f]);for(var k,l,m=3==a.length&&"M"==a[0][0]&&"R"==a[1][0].toUpperCase()&&"Z"==a[2][0].toUpperCase(),n=j,o=a.length;o>n;n++){if(d.push(k=[]),l=a[n],l[0]!=aa.call(l[0]))switch(k[0]=aa.call(l[0]),k[0]){case"A":k[1]=l[1],k[2]=l[2],k[3]=l[3],k[4]=l[4],k[5]=l[5],k[6]=+(l[6]+e),k[7]=+(l[7]+f);break;case"V":k[1]=+l[1]+f;break;case"H":k[1]=+l[1]+e;break;case"R":for(var p=[e,f][D](l.slice(1)),q=2,r=p.length;r>q;q++)p[q]=+p[q]+e,p[++q]=+p[q]+f;d.pop(),d=d[D](g(p,m));break;case"M":h=+l[1]+e,i=+l[2]+f;default:for(q=1,r=l.length;r>q;q++)k[q]=+l[q]+(q%2?e:f)}else if("R"==l[0])p=[e,f][D](l.slice(1)),d.pop(),d=d[D](g(p,m)),k=["R"][D](l.slice(-2));else for(var s=0,t=l.length;t>s;s++)k[s]=l[s];switch(k[0]){case"Z":e=h,f=i;break;case"H":e=k[1];break;case"V":f=k[1];break;case"M":h=k[k.length-2],i=k[k.length-1];default:e=k[k.length-2],f=k[k.length-1]}}return d.toString=b._path2string,c.abs=Aa(d),d},Da=function(a,b,c,d){return[a,b,c,d,c,d]},Ea=function(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]},Fa=function(a,b,c,d,f,g,h,i,j,k){var l,m=120*R/180,n=R/180*(+f||0),o=[],p=e(function(a,b,c){var d=a*M.cos(c)-b*M.sin(c),e=a*M.sin(c)+b*M.cos(c);return{x:d,y:e}});if(k)y=k[0],z=k[1],w=k[2],x=k[3];else{l=p(a,b,-n),a=l.x,b=l.y,l=p(i,j,-n),i=l.x,j=l.y;var q=(M.cos(R/180*f),M.sin(R/180*f),(a-i)/2),r=(b-j)/2,s=q*q/(c*c)+r*r/(d*d);s>1&&(s=M.sqrt(s),c=s*c,d=s*d);var t=c*c,u=d*d,v=(g==h?-1:1)*M.sqrt(P((t*u-t*r*r-u*q*q)/(t*r*r+u*q*q))),w=v*c*r/d+(a+i)/2,x=v*-d*q/c+(b+j)/2,y=M.asin(((b-x)/d).toFixed(9)),z=M.asin(((j-x)/d).toFixed(9));y=w>a?R-y:y,z=w>i?R-z:z,0>y&&(y=2*R+y),0>z&&(z=2*R+z),h&&y>z&&(y-=2*R),!h&&z>y&&(z-=2*R)}var A=z-y;if(P(A)>m){var B=z,C=i,E=j;z=y+m*(h&&z>y?1:-1),i=w+c*M.cos(z),j=x+d*M.sin(z),o=Fa(i,j,c,d,f,0,h,C,E,[z,B,w,x])}A=z-y;var F=M.cos(y),G=M.sin(y),H=M.cos(z),J=M.sin(z),K=M.tan(A/4),L=4/3*c*K,N=4/3*d*K,O=[a,b],Q=[a+L*G,b-N*F],S=[i+L*J,j-N*H],T=[i,j];if(Q[0]=2*O[0]-Q[0],Q[1]=2*O[1]-Q[1],k)return[Q,S,T][D](o);o=[Q,S,T][D](o).join()[I](",");for(var U=[],V=0,W=o.length;W>V;V++)U[V]=V%2?p(o[V-1],o[V],n).y:p(o[V],o[V+1],n).x;return U},Ga=function(a,b,c,d,e,f,g,h,i){var j=1-i;return{x:Q(j,3)*a+3*Q(j,2)*i*c+3*j*i*i*e+Q(i,3)*g,y:Q(j,3)*b+3*Q(j,2)*i*d+3*j*i*i*f+Q(i,3)*h}},Ha=e(function(a,b,c,d,e,f,g,h){var i,j=e-2*c+a-(g-2*e+c),k=2*(c-a)-2*(e-c),l=a-c,m=(-k+M.sqrt(k*k-4*j*l))/2/j,n=(-k-M.sqrt(k*k-4*j*l))/2/j,o=[b,h],p=[a,g];return P(m)>"1e12"&&(m=.5),P(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ga(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ga(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),j=f-2*d+b-(h-2*f+d),k=2*(d-b)-2*(f-d),l=b-d,m=(-k+M.sqrt(k*k-4*j*l))/2/j,n=(-k-M.sqrt(k*k-4*j*l))/2/j,P(m)>"1e12"&&(m=.5),P(n)>"1e12"&&(n=.5),m>0&&1>m&&(i=Ga(a,b,c,d,e,f,g,h,m),p.push(i.x),o.push(i.y)),n>0&&1>n&&(i=Ga(a,b,c,d,e,f,g,h,n),p.push(i.x),o.push(i.y)),{min:{x:O[C](0,p),y:O[C](0,o)},max:{x:N[C](0,p),y:N[C](0,o)}}}),Ia=b._path2curve=e(function(a,b){var c=!b&&ya(a);if(!b&&c.curve)return Aa(c.curve);for(var d=Ca(a),e=b&&Ca(b),f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},h=(function(a,b,c){var d,e,f={T:1,Q:1};if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];switch(!(a[0]in f)&&(b.qx=b.qy=null),a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][D](Fa[C](0,[b.x,b.y][D](a.slice(1))));break;case"S":"C"==c||"S"==c?(d=2*b.x-b.bx,e=2*b.y-b.by):(d=b.x,e=b.y),a=["C",d,e][D](a.slice(1));break;case"T":"Q"==c||"T"==c?(b.qx=2*b.x-b.qx,b.qy=2*b.y-b.qy):(b.qx=b.x,b.qy=b.y),a=["C"][D](Ea(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][D](Ea(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][D](Da(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][D](Da(b.x,b.y,a[1],b.y));break;case"V":a=["C"][D](Da(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][D](Da(b.x,b.y,b.X,b.Y))}return a}),i=function(a,b){if(a[b].length>7){a[b].shift();for(var c=a[b];c.length;)k[b]="A",e&&(l[b]="A"),a.splice(b++,0,["C"][D](c.splice(0,6)));a.splice(b,1),p=N(d.length,e&&e.length||0)}},j=function(a,b,c,f,g){a&&b&&"M"==a[g][0]&&"M"!=b[g][0]&&(b.splice(g,0,["M",f.x,f.y]),c.bx=0,c.by=0,c.x=a[g][1],c.y=a[g][2],p=N(d.length,e&&e.length||0))},k=[],l=[],m="",n="",o=0,p=N(d.length,e&&e.length||0);p>o;o++){d[o]&&(m=d[o][0]),"C"!=m&&(k[o]=m,o&&(n=k[o-1])),d[o]=h(d[o],f,n),"A"!=k[o]&&"C"==m&&(k[o]="C"),i(d,o),e&&(e[o]&&(m=e[o][0]),"C"!=m&&(l[o]=m,o&&(n=l[o-1])),e[o]=h(e[o],g,n),"A"!=l[o]&&"C"==m&&(l[o]="C"),i(e,o)),j(d,e,f,g,o),j(e,d,g,f,o);var q=d[o],r=e&&e[o],s=q.length,t=e&&r.length;f.x=q[s-2],f.y=q[s-1],f.bx=$(q[s-4])||f.x,f.by=$(q[s-3])||f.y,g.bx=e&&($(r[t-4])||g.x),g.by=e&&($(r[t-3])||g.y),g.x=e&&r[t-2],g.y=e&&r[t-1]}return e||(c.curve=Aa(d)),e?[d,e]:d},null,Aa),Ja=(b._parseDots=e(function(a){for(var c=[],d=0,e=a.length;e>d;d++){var f={},g=a[d].match(/^([^:]*):?([\d\.]*)/);if(f.color=b.getRGB(g[1]),f.color.error)return null;f.opacity=f.color.opacity,f.color=f.color.hex,g[2]&&(f.offset=g[2]+"%"),c.push(f)}for(d=1,e=c.length-1;e>d;d++)if(!c[d].offset){for(var h=$(c[d-1].offset||0),i=0,j=d+1;e>j;j++)if(c[j].offset){i=c[j].offset;break}i||(i=100,j=e),i=$(i);for(var k=(i-h)/(j-d+1);j>d;d++)h+=k,c[d].offset=h+"%"}return c}),b._tear=function(a,b){a==b.top&&(b.top=a.prev),a==b.bottom&&(b.bottom=a.next),a.next&&(a.next.prev=a.prev),a.prev&&(a.prev.next=a.next)}),Ka=(b._tofront=function(a,b){b.top!==a&&(Ja(a,b),a.next=null,a.prev=b.top,b.top.next=a,b.top=a)},b._toback=function(a,b){b.bottom!==a&&(Ja(a,b),a.next=b.bottom,a.prev=null,b.bottom.prev=a,b.bottom=a)},b._insertafter=function(a,b,c){Ja(a,c),b==c.top&&(c.top=a),b.next&&(b.next.prev=a),a.next=b.next,a.prev=b,b.next=a},b._insertbefore=function(a,b,c){Ja(a,c),b==c.bottom&&(c.bottom=a),b.prev&&(b.prev.next=a),a.prev=b.prev,b.prev=a,a.next=b},b.toMatrix=function(a,b){var c=za(a),d={_:{transform:F},getBBox:function(){return c}};return La(d,b),d.matrix}),La=(b.transformPath=function(a,b){return pa(a,Ka(a,b))},b._extractTransform=function(a,c){if(null==c)return a._.transform;c=H(c).replace(/\.{3}|\u2026/g,a._.transform||F);var d=b.parseTransformString(c),e=0,f=0,g=0,h=1,i=1,j=a._,k=new n;if(j.transform=d||[],d)for(var l=0,m=d.length;m>l;l++){var o,p,q,r,s,t=d[l],u=t.length,v=H(t[0]).toLowerCase(),w=t[0]!=v,x=w?k.invert():0;"t"==v&&3==u?w?(o=x.x(0,0),p=x.y(0,0),q=x.x(t[1],t[2]),r=x.y(t[1],t[2]),k.translate(q-o,r-p)):k.translate(t[1],t[2]):"r"==v?2==u?(s=s||a.getBBox(1),k.rotate(t[1],s.x+s.width/2,s.y+s.height/2),e+=t[1]):4==u&&(w?(q=x.x(t[2],t[3]),r=x.y(t[2],t[3]),k.rotate(t[1],q,r)):k.rotate(t[1],t[2],t[3]),e+=t[1]):"s"==v?2==u||3==u?(s=s||a.getBBox(1),k.scale(t[1],t[u-1],s.x+s.width/2,s.y+s.height/2),h*=t[1],i*=t[u-1]):5==u&&(w?(q=x.x(t[3],t[4]),r=x.y(t[3],t[4]),k.scale(t[1],t[2],q,r)):k.scale(t[1],t[2],t[3],t[4]),h*=t[1],i*=t[2]):"m"==v&&7==u&&k.add(t[1],t[2],t[3],t[4],t[5],t[6]),j.dirtyT=1,a.matrix=k}a.matrix=k,j.sx=h,j.sy=i,j.deg=e,j.dx=f=k.e,j.dy=g=k.f,1==h&&1==i&&!e&&j.bbox?(j.bbox.x+=+f,j.bbox.y+=+g):j.dirtyT=1}),Ma=function(a){var b=a[0];switch(b.toLowerCase()){case"t":return[b,0,0];case"m":return[b,1,0,0,1,0,0];case"r":return 4==a.length?[b,0,a[2],a[3]]:[b,0];case"s":return 5==a.length?[b,1,1,a[3],a[4]]:3==a.length?[b,1,1]:[b,1]}},Na=b._equaliseTransform=function(a,c){ +c=H(c).replace(/\.{3}|\u2026/g,a),a=b.parseTransformString(a)||[],c=b.parseTransformString(c)||[];for(var d,e,f,g,h=N(a.length,c.length),i=[],j=[],k=0;h>k;k++){if(f=a[k]||Ma(c[k]),g=c[k]||Ma(f),f[0]!=g[0]||"r"==f[0].toLowerCase()&&(f[2]!=g[2]||f[3]!=g[3])||"s"==f[0].toLowerCase()&&(f[3]!=g[3]||f[4]!=g[4]))return;for(i[k]=[],j[k]=[],d=0,e=N(f.length,g.length);e>d;d++)d in f&&(i[k][d]=f[d]),d in g&&(j[k][d]=g[d])}return{from:i,to:j}};b._getContainer=function(a,c,d,e){var f;return f=null!=e||b.is(a,"object")?a:z.doc.getElementById(a),null!=f?f.tagName?null==c?{container:f,width:f.style.pixelWidth||f.offsetWidth,height:f.style.pixelHeight||f.offsetHeight}:{container:f,width:c,height:d}:{container:1,x:a,y:c,width:d,height:e}:void 0},b.pathToRelative=Ba,b._engine={},b.path2curve=Ia,b.matrix=function(a,b,c,d,e,f){return new n(a,b,c,d,e,f)},function(a){function c(a){return a[0]*a[0]+a[1]*a[1]}function d(a){var b=M.sqrt(c(a));a[0]&&(a[0]/=b),a[1]&&(a[1]/=b)}a.add=function(a,b,c,d,e,f){var g,h,i,j,k=[[],[],[]],l=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],m=[[a,c,e],[b,d,f],[0,0,1]];for(a&&a instanceof n&&(m=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1]]),g=0;3>g;g++)for(h=0;3>h;h++){for(j=0,i=0;3>i;i++)j+=l[g][i]*m[i][h];k[g][h]=j}this.a=k[0][0],this.b=k[1][0],this.c=k[0][1],this.d=k[1][1],this.e=k[0][2],this.f=k[1][2]},a.invert=function(){var a=this,b=a.a*a.d-a.b*a.c;return new n(a.d/b,-a.b/b,-a.c/b,a.a/b,(a.c*a.f-a.d*a.e)/b,(a.b*a.e-a.a*a.f)/b)},a.clone=function(){return new n(this.a,this.b,this.c,this.d,this.e,this.f)},a.translate=function(a,b){this.add(1,0,0,1,a,b)},a.scale=function(a,b,c,d){null==b&&(b=a),(c||d)&&this.add(1,0,0,1,c,d),this.add(a,0,0,b,0,0),(c||d)&&this.add(1,0,0,1,-c,-d)},a.rotate=function(a,c,d){a=b.rad(a),c=c||0,d=d||0;var e=+M.cos(a).toFixed(9),f=+M.sin(a).toFixed(9);this.add(e,f,-f,e,c,d),this.add(1,0,0,1,-c,-d)},a.x=function(a,b){return a*this.a+b*this.c+this.e},a.y=function(a,b){return a*this.b+b*this.d+this.f},a.get=function(a){return+this[H.fromCharCode(97+a)].toFixed(4)},a.toString=function(){return b.svg?"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},a.toFilter=function(){return"progid:DXImageTransform.Microsoft.Matrix(M11="+this.get(0)+", M12="+this.get(2)+", M21="+this.get(1)+", M22="+this.get(3)+", Dx="+this.get(4)+", Dy="+this.get(5)+", sizingmethod='auto expand')"},a.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},a.split=function(){var a={};a.dx=this.e,a.dy=this.f;var e=[[this.a,this.c],[this.b,this.d]];a.scalex=M.sqrt(c(e[0])),d(e[0]),a.shear=e[0][0]*e[1][0]+e[0][1]*e[1][1],e[1]=[e[1][0]-e[0][0]*a.shear,e[1][1]-e[0][1]*a.shear],a.scaley=M.sqrt(c(e[1])),d(e[1]),a.shear/=a.scaley;var f=-e[0][1],g=e[1][1];return 0>g?(a.rotate=b.deg(M.acos(g)),0>f&&(a.rotate=360-a.rotate)):a.rotate=b.deg(M.asin(f)),a.isSimple=!(+a.shear.toFixed(9)||a.scalex.toFixed(9)!=a.scaley.toFixed(9)&&a.rotate),a.isSuperSimple=!+a.shear.toFixed(9)&&a.scalex.toFixed(9)==a.scaley.toFixed(9)&&!a.rotate,a.noRotation=!+a.shear.toFixed(9)&&!a.rotate,a},a.toTransformString=function(a){var b=a||this[I]();return b.isSimple?(b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4),(b.dx||b.dy?"t"+[b.dx,b.dy]:F)+(1!=b.scalex||1!=b.scaley?"s"+[b.scalex,b.scaley,0,0]:F)+(b.rotate?"r"+[b.rotate,0,0]:F)):"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(n.prototype);for(var Oa=function(){this.returnValue=!1},Pa=function(){return this.originalEvent.preventDefault()},Qa=function(){this.cancelBubble=!0},Ra=function(){return this.originalEvent.stopPropagation()},Sa=function(a){var b=z.doc.documentElement.scrollTop||z.doc.body.scrollTop,c=z.doc.documentElement.scrollLeft||z.doc.body.scrollLeft;return{x:a.clientX+c,y:a.clientY+b}},Ta=function(){return z.doc.addEventListener?function(a,b,c,d){var e=function(a){var b=Sa(a);return c.call(d,a,b.x,b.y)};if(a.addEventListener(b,e,!1),E&&K[b]){var f=function(b){for(var e=Sa(b),f=b,g=0,h=b.targetTouches&&b.targetTouches.length;h>g;g++)if(b.targetTouches[g].target==a){b=b.targetTouches[g],b.originalEvent=f,b.preventDefault=Pa,b.stopPropagation=Ra;break}return c.call(d,b,e.x,e.y)};a.addEventListener(K[b],f,!1)}return function(){return a.removeEventListener(b,e,!1),E&&K[b]&&a.removeEventListener(K[b],f,!1),!0}}:z.doc.attachEvent?function(a,b,c,d){var e=function(a){a=a||z.win.event;var b=z.doc.documentElement.scrollTop||z.doc.body.scrollTop,e=z.doc.documentElement.scrollLeft||z.doc.body.scrollLeft,f=a.clientX+e,g=a.clientY+b;return a.preventDefault=a.preventDefault||Oa,a.stopPropagation=a.stopPropagation||Qa,c.call(d,a,f,g)};a.attachEvent("on"+b,e);var f=function(){return a.detachEvent("on"+b,e),!0};return f}:void 0}(),Ua=[],Va=function(b){for(var c,d=b.clientX,e=b.clientY,f=z.doc.documentElement.scrollTop||z.doc.body.scrollTop,g=z.doc.documentElement.scrollLeft||z.doc.body.scrollLeft,h=Ua.length;h--;){if(c=Ua[h],E&&b.touches){for(var i,j=b.touches.length;j--;)if(i=b.touches[j],i.identifier==c.el._drag.id){d=i.clientX,e=i.clientY,(b.originalEvent?b.originalEvent:b).preventDefault();break}}else b.preventDefault();var k,l=c.el.node,m=l.nextSibling,n=l.parentNode,o=l.style.display;z.win.opera&&n.removeChild(l),l.style.display="none",k=c.el.paper.getElementByPoint(d,e),l.style.display=o,z.win.opera&&(m?n.insertBefore(l,m):n.appendChild(l)),k&&a("raphael.drag.over."+c.el.id,c.el,k),d+=g,e+=f,a("raphael.drag.move."+c.el.id,c.move_scope||c.el,d-c.el._drag.x,e-c.el._drag.y,d,e,b)}},Wa=function(c){b.unmousemove(Va).unmouseup(Wa);for(var d,e=Ua.length;e--;)d=Ua[e],d.el._drag={},a("raphael.drag.end."+d.el.id,d.end_scope||d.start_scope||d.move_scope||d.el,c);Ua=[]},Xa=b.el={},Ya=J.length;Ya--;)!function(a){b[a]=Xa[a]=function(c,d){return b.is(c,"function")&&(this.events=this.events||[],this.events.push({name:a,f:c,unbind:Ta(this.shape||this.node||z.doc,a,c,d||this)})),this},b["un"+a]=Xa["un"+a]=function(c){for(var d=this.events||[],e=d.length;e--;)d[e].name!=a||!b.is(c,"undefined")&&d[e].f!=c||(d[e].unbind(),d.splice(e,1),!d.length&&delete this.events);return this}}(J[Ya]);Xa.data=function(c,d){var e=ja[this.id]=ja[this.id]||{};if(0==arguments.length)return e;if(1==arguments.length){if(b.is(c,"object")){for(var f in c)c[y](f)&&this.data(f,c[f]);return this}return a("raphael.data.get."+this.id,this,e[c],c),e[c]}return e[c]=d,a("raphael.data.set."+this.id,this,d,c),this},Xa.removeData=function(a){return null==a?ja[this.id]={}:ja[this.id]&&delete ja[this.id][a],this},Xa.getData=function(){return c(ja[this.id]||{})},Xa.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)},Xa.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};var Za=[];Xa.drag=function(c,d,e,f,g,h){function i(i){(i.originalEvent||i).preventDefault();var j=i.clientX,k=i.clientY,l=z.doc.documentElement.scrollTop||z.doc.body.scrollTop,m=z.doc.documentElement.scrollLeft||z.doc.body.scrollLeft;if(this._drag.id=i.identifier,E&&i.touches)for(var n,o=i.touches.length;o--;)if(n=i.touches[o],this._drag.id=n.identifier,n.identifier==this._drag.id){j=n.clientX,k=n.clientY;break}this._drag.x=j+m,this._drag.y=k+l,!Ua.length&&b.mousemove(Va).mouseup(Wa),Ua.push({el:this,move_scope:f,start_scope:g,end_scope:h}),d&&a.on("raphael.drag.start."+this.id,d),c&&a.on("raphael.drag.move."+this.id,c),e&&a.on("raphael.drag.end."+this.id,e),a("raphael.drag.start."+this.id,g||f||this,i.clientX+m,i.clientY+l,i)}return this._drag={},Za.push({el:this,start:i}),this.mousedown(i),this},Xa.onDragOver=function(b){b?a.on("raphael.drag.over."+this.id,b):a.unbind("raphael.drag.over."+this.id)},Xa.undrag=function(){for(var c=Za.length;c--;)Za[c].el==this&&(this.unmousedown(Za[c].start),Za.splice(c,1),a.unbind("raphael.drag.*."+this.id));!Za.length&&b.unmousemove(Va).unmouseup(Wa),Ua=[]},u.circle=function(a,c,d){var e=b._engine.circle(this,a||0,c||0,d||0);return this.__set__&&this.__set__.push(e),e},u.rect=function(a,c,d,e,f){var g=b._engine.rect(this,a||0,c||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},u.ellipse=function(a,c,d,e){var f=b._engine.ellipse(this,a||0,c||0,d||0,e||0);return this.__set__&&this.__set__.push(f),f},u.path=function(a){a&&!b.is(a,T)&&!b.is(a[0],U)&&(a+=F);var c=b._engine.path(b.format[C](b,arguments),this);return this.__set__&&this.__set__.push(c),c},u.image=function(a,c,d,e,f){var g=b._engine.image(this,a||"about:blank",c||0,d||0,e||0,f||0);return this.__set__&&this.__set__.push(g),g},u.text=function(a,c,d){var e=b._engine.text(this,a||0,c||0,H(d));return this.__set__&&this.__set__.push(e),e},u.set=function(a){!b.is(a,"array")&&(a=Array.prototype.splice.call(arguments,0,arguments.length));var c=new jb(a);return this.__set__&&this.__set__.push(c),c.paper=this,c.type="set",c},u.setStart=function(a){this.__set__=a||this.set()},u.setFinish=function(a){var b=this.__set__;return delete this.__set__,b},u.getSize=function(){var a=this.canvas.parentNode;return{width:a.offsetWidth,height:a.offsetHeight}},u.setSize=function(a,c){return b._engine.setSize.call(this,a,c)},u.setViewBox=function(a,c,d,e,f){return b._engine.setViewBox.call(this,a,c,d,e,f)},u.top=u.bottom=null,u.raphael=b;var $a=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument,d=c.body,e=c.documentElement,f=e.clientTop||d.clientTop||0,g=e.clientLeft||d.clientLeft||0,h=b.top+(z.win.pageYOffset||e.scrollTop||d.scrollTop)-f,i=b.left+(z.win.pageXOffset||e.scrollLeft||d.scrollLeft)-g;return{y:h,x:i}};u.getElementByPoint=function(a,b){var c=this,d=c.canvas,e=z.doc.elementFromPoint(a,b);if(z.win.opera&&"svg"==e.tagName){var f=$a(d),g=d.createSVGRect();g.x=a-f.x,g.y=b-f.y,g.width=g.height=1;var h=d.getIntersectionList(g,null);h.length&&(e=h[h.length-1])}if(!e)return null;for(;e.parentNode&&e!=d.parentNode&&!e.raphael;)e=e.parentNode;return e==c.canvas.parentNode&&(e=d),e=e&&e.raphael?c.getById(e.raphaelid):null},u.getElementsByBBox=function(a){var c=this.set();return this.forEach(function(d){b.isBBoxIntersect(d.getBBox(),a)&&c.push(d)}),c},u.getById=function(a){for(var b=this.bottom;b;){if(b.id==a)return b;b=b.next}return null},u.forEach=function(a,b){for(var c=this.bottom;c;){if(a.call(b,c)===!1)return this;c=c.next}return this},u.getElementsByPoint=function(a,b){var c=this.set();return this.forEach(function(d){d.isPointInside(a,b)&&c.push(d)}),c},Xa.isPointInside=function(a,c){var d=this.realPath=oa[this.type](this);return this.attr("transform")&&this.attr("transform").length&&(d=b.transformPath(d,this.attr("transform"))),b.isPointInsidePath(d,a,c)},Xa.getBBox=function(a){if(this.removed)return{};var b=this._;return a?((b.dirty||!b.bboxwt)&&(this.realPath=oa[this.type](this),b.bboxwt=za(this.realPath),b.bboxwt.toString=o,b.dirty=0),b.bboxwt):((b.dirty||b.dirtyT||!b.bbox)&&((b.dirty||!this.realPath)&&(b.bboxwt=0,this.realPath=oa[this.type](this)),b.bbox=za(pa(this.realPath,this.matrix)),b.bbox.toString=o,b.dirty=b.dirtyT=0),b.bbox)},Xa.clone=function(){if(this.removed)return null;var a=this.paper[this.type]().attr(this.attr());return this.__set__&&this.__set__.push(a),a},Xa.glow=function(a){if("text"==this.type)return null;a=a||{};var b={width:(a.width||10)+(+this.attr("stroke-width")||1),fill:a.fill||!1,opacity:null==a.opacity?.5:a.opacity,offsetx:a.offsetx||0,offsety:a.offsety||0,color:a.color||"#000"},c=b.width/2,d=this.paper,e=d.set(),f=this.realPath||oa[this.type](this);f=this.matrix?pa(f,this.matrix):f;for(var g=1;c+1>g;g++)e.push(d.path(f).attr({stroke:b.color,fill:b.fill?b.color:"none","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":+(b.width/c*g).toFixed(3),opacity:+(b.opacity/c).toFixed(3)}));return e.insertBefore(this).translate(b.offsetx,b.offsety)};var _a=function(a,c,d,e,f,g,h,k,l){return null==l?i(a,c,d,e,f,g,h,k):b.findDotsAtSegment(a,c,d,e,f,g,h,k,j(a,c,d,e,f,g,h,k,l))},ab=function(a,c){return function(d,e,f){d=Ia(d);for(var g,h,i,j,k,l="",m={},n=0,o=0,p=d.length;p>o;o++){if(i=d[o],"M"==i[0])g=+i[1],h=+i[2];else{if(j=_a(g,h,i[1],i[2],i[3],i[4],i[5],i[6]),n+j>e){if(c&&!m.start){if(k=_a(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),l+=["C"+k.start.x,k.start.y,k.m.x,k.m.y,k.x,k.y],f)return l;m.start=l,l=["M"+k.x,k.y+"C"+k.n.x,k.n.y,k.end.x,k.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!a&&!c)return k=_a(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),{x:k.x,y:k.y,alpha:k.alpha}}n+=j,g=+i[5],h=+i[6]}l+=i.shift()+i}return m.end=l,k=a?n:c?m:b.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),k.alpha&&(k={x:k.x,y:k.y,alpha:k.alpha}),k}},bb=ab(1),cb=ab(),db=ab(0,1);b.getTotalLength=bb,b.getPointAtLength=cb,b.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return db(a,b).end;var d=db(a,c,1);return b?db(d,b).end:d},Xa.getTotalLength=function(){var a=this.getPath();if(a)return this.node.getTotalLength?this.node.getTotalLength():bb(a)},Xa.getPointAtLength=function(a){var b=this.getPath();if(b)return cb(b,a)},Xa.getPath=function(){var a,c=b._getPath[this.type];if("text"!=this.type&&"set"!=this.type)return c&&(a=c(this)),a},Xa.getSubpath=function(a,c){var d=this.getPath();if(d)return b.getSubpath(d,a,c)};var eb=b.easing_formulas={linear:function(a){return a},"<":function(a){return Q(a,1.7)},">":function(a){return Q(a,.48)},"<>":function(a){var b=.48-a/1.04,c=M.sqrt(.1734+b*b),d=c-b,e=Q(P(d),1/3)*(0>d?-1:1),f=-c-b,g=Q(P(f),1/3)*(0>f?-1:1),h=e+g+.5;return 3*(1-h)*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a-=1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){return a==!!a?a:Q(2,-10*a)*M.sin(2*(a-.075)*R/.3)+1},bounce:function(a){var b,c=7.5625,d=2.75;return 1/d>a?b=c*a*a:2/d>a?(a-=1.5/d,b=c*a*a+.75):2.5/d>a?(a-=2.25/d,b=c*a*a+.9375):(a-=2.625/d,b=c*a*a+.984375),b}};eb.easeIn=eb["ease-in"]=eb["<"],eb.easeOut=eb["ease-out"]=eb[">"],eb.easeInOut=eb["ease-in-out"]=eb["<>"],eb["back-in"]=eb.backIn,eb["back-out"]=eb.backOut;var fb=[],gb=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,16)},hb=function(){for(var c=+new Date,d=0;dh))if(i>h){var q=j(h/i);for(var s in k)if(k[y](s)){switch(ca[s]){case S:f=+k[s]+q*i*l[s];break;case"colour":f="rgb("+[ib(Z(k[s].r+q*i*l[s].r)),ib(Z(k[s].g+q*i*l[s].g)),ib(Z(k[s].b+q*i*l[s].b))].join(",")+")";break;case"path":f=[];for(var t=0,u=k[s].length;u>t;t++){f[t]=[k[s][t][0]];for(var v=1,w=k[s][t].length;w>v;v++)f[t][v]=+k[s][t][v]+q*i*l[s][t][v];f[t]=f[t].join(G)}f=f.join(G);break;case"transform":if(l[s].real)for(f=[],t=0,u=k[s].length;u>t;t++)for(f[t]=[k[s][t][0]],v=1,w=k[s][t].length;w>v;v++)f[t][v]=k[s][t][v]+q*i*l[s][t][v];else{var x=function(a){return+k[s][a]+q*i*l[s][a]};f=[["m",x(0),x(1),x(2),x(3),x(4),x(5)]]}break;case"csv":if("clip-rect"==s)for(f=[],t=4;t--;)f[t]=+k[s][t]+q*i*l[s][t];break;default:var z=[][D](k[s]);for(f=[],t=n.paper.customAttributes[s].length;t--;)f[t]=+z[t]+q*i*l[s][t]}o[s]=f}n.attr(o),function(b,c,d){setTimeout(function(){a("raphael.anim.frame."+b,c,d)})}(n.id,n,e.anim)}else{if(function(c,d,e){setTimeout(function(){a("raphael.anim.frame."+d.id,d,e),a("raphael.anim.finish."+d.id,d,e),b.is(c,"function")&&c.call(d)})}(e.callback,n,e.anim),n.attr(m),fb.splice(d--,1),e.repeat>1&&!e.next){for(g in m)m[y](g)&&(p[g]=e.totalOrigin[g]);e.el.attr(p),r(e.anim,e.el,e.anim.percents[0],null,e.totalOrigin,e.repeat-1)}e.next&&!e.stop&&r(e.anim,e.el,e.next,null,e.totalOrigin,e.repeat)}}}fb.length&&gb(hb)},ib=function(a){return a>255?255:0>a?0:a};Xa.animateWith=function(a,c,d,e,f,g){var h=this;if(h.removed)return g&&g.call(h),h;var i=d instanceof q?d:b.animation(d,e,f,g);r(i,h,i.percents[0],null,h.attr());for(var j=0,k=fb.length;k>j;j++)if(fb[j].anim==c&&fb[j].el==a){fb[k-1].start=fb[j].start;break}return h},Xa.onAnimation=function(b){return b?a.on("raphael.anim.frame."+this.id,b):a.unbind("raphael.anim.frame."+this.id),this},q.prototype.delay=function(a){var b=new q(this.anim,this.ms);return b.times=this.times,b.del=+a||0,b},q.prototype.repeat=function(a){var b=new q(this.anim,this.ms);return b.del=this.del,b.times=M.floor(N(a,0))||1,b},b.animation=function(a,c,d,e){if(a instanceof q)return a;(b.is(d,"function")||!d)&&(e=e||d||null,d=null),a=Object(a),c=+c||0;var f,g,h={};for(g in a)a[y](g)&&$(g)!=g&&$(g)+"%"!=g&&(f=!0,h[g]=a[g]);if(f)return d&&(h.easing=d),e&&(h.callback=e),new q({100:h},c);if(e){var i=0;for(var j in a){var k=_(j);a[y](j)&&k>i&&(i=k)}i+="%",!a[i].callback&&(a[i].callback=e)}return new q(a,c)},Xa.animate=function(a,c,d,e){var f=this;if(f.removed)return e&&e.call(f),f;var g=a instanceof q?a:b.animation(a,c,d,e);return r(g,f,g.percents[0],null,f.attr()),f},Xa.setTime=function(a,b){return a&&null!=b&&this.status(a,O(b,a.ms)/a.ms),this},Xa.status=function(a,b){var c,d,e=[],f=0;if(null!=b)return r(a,this,-1,O(b,1)),this;for(c=fb.length;c>f;f++)if(d=fb[f],d.el.id==this.id&&(!a||d.anim==a)){if(a)return d.status;e.push({anim:d.anim,status:d.status})}return a?0:e},Xa.pause=function(b){for(var c=0;cb;b++)!a[b]||a[b].constructor!=Xa.constructor&&a[b].constructor!=jb||(this[this.items.length]=this.items[this.items.length]=a[b],this.length++)},kb=jb.prototype;kb.push=function(){for(var a,b,c=0,d=arguments.length;d>c;c++)a=arguments[c],!a||a.constructor!=Xa.constructor&&a.constructor!=jb||(b=this.items.length,this[b]=this.items[b]=a,this.length++);return this},kb.pop=function(){return this.length&&delete this[this.length--],this.items.pop()},kb.forEach=function(a,b){for(var c=0,d=this.items.length;d>c;c++)if(a.call(b,this.items[c],c)===!1)return this;return this};for(var lb in Xa)Xa[y](lb)&&(kb[lb]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a][C](c,b)})}}(lb));return kb.attr=function(a,c){if(a&&b.is(a,U)&&b.is(a[0],"object"))for(var d=0,e=a.length;e>d;d++)this.items[d].attr(a[d]);else for(var f=0,g=this.items.length;g>f;f++)this.items[f].attr(a,c);return this},kb.clear=function(){for(;this.length;)this.pop()},kb.splice=function(a,b,c){a=0>a?N(this.length+a,0):a,b=N(0,O(this.length-a,b));var d,e=[],f=[],g=[];for(d=2;dd;d++)f.push(this[a+d]);for(;dd?g[d]:e[d-h];for(d=this.items.length=this.length-=b-h;this[d];)delete this[d++];return new jb(f)},kb.exclude=function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]==a)return this.splice(b,1),!0},kb.animate=function(a,c,d,e){(b.is(d,"function")||!d)&&(e=d||null);var f,g,h=this.items.length,i=h,j=this;if(!h)return this;e&&(g=function(){!--h&&e.call(j)}),d=b.is(d,T)?d:g;var k=b.animation(a,c,d,g);for(f=this.items[--i].animate(k);i--;)this.items[i]&&!this.items[i].removed&&this.items[i].animateWith(f,k,k),this.items[i]&&!this.items[i].removed||h--;return this},kb.insertAfter=function(a){for(var b=this.items.length;b--;)this.items[b].insertAfter(a);return this},kb.getBBox=function(){for(var a=[],b=[],c=[],d=[],e=this.items.length;e--;)if(!this.items[e].removed){var f=this.items[e].getBBox();a.push(f.x),b.push(f.y),c.push(f.x+f.width),d.push(f.y+f.height)}return a=O[C](0,a),b=O[C](0,b),c=N[C](0,c),d=N[C](0,d),{x:a,y:b,x2:c,y2:d,width:c-a,height:d-b}},kb.clone=function(a){a=this.paper.set();for(var b=0,c=this.items.length;c>b;b++)a.push(this.items[b].clone());return a},kb.toString=function(){return"Raphaël‘s set"},kb.glow=function(a){var b=this.paper.set();return this.forEach(function(c,d){var e=c.glow(a);null!=e&&e.forEach(function(a,c){b.push(a)})}),b},kb.isPointInside=function(a,b){var c=!1;return this.forEach(function(d){return d.isPointInside(a,b)?(c=!0,!1):void 0}),c},b.registerFont=function(a){if(!a.face)return a;this.fonts=this.fonts||{};var b={w:a.w,face:{},glyphs:{}},c=a.face["font-family"];for(var d in a.face)a.face[y](d)&&(b.face[d]=a.face[d]);if(this.fonts[c]?this.fonts[c].push(b):this.fonts[c]=[b],!a.svg){b.face["units-per-em"]=_(a.face["units-per-em"],10);for(var e in a.glyphs)if(a.glyphs[y](e)){var f=a.glyphs[e];if(b.glyphs[e]={w:f.w,k:{},d:f.d&&"M"+f.d.replace(/[mlcxtrv]/g,function(a){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[a]||"M"})+"z"},f.k)for(var g in f.k)f[y](g)&&(b.glyphs[e].k[g]=f.k[g])}}return a},u.getFont=function(a,c,d,e){if(e=e||"normal",d=d||"normal",c=+c||{normal:400,bold:700,lighter:300,bolder:800}[c]||400,b.fonts){var f=b.fonts[a];if(!f){var g=new RegExp("(^|\\s)"+a.replace(/[^\w\d\s+!~.:_-]/g,F)+"(\\s|$)","i");for(var h in b.fonts)if(b.fonts[y](h)&&g.test(h)){f=b.fonts[h];break}}var i;if(f)for(var j=0,k=f.length;k>j&&(i=f[j],i.face["font-weight"]!=c||i.face["font-style"]!=d&&i.face["font-style"]||i.face["font-stretch"]!=e);j++);return i}},u.print=function(a,c,d,e,f,g,h,i){g=g||"middle",h=N(O(h||0,1),-1),i=N(O(i||1,3),1);var j,k=H(d)[I](F),l=0,m=0,n=F;if(b.is(e,"string")&&(e=this.getFont(e)),e){j=(f||16)/e.face["units-per-em"];for(var o=e.face.bbox[I](v),p=+o[0],q=o[3]-o[1],r=0,s=+o[1]+("baseline"==g?q+ +e.face.descent:q/2),t=0,u=k.length;u>t;t++){if("\n"==k[t])l=0,x=0,m=0,r+=q*i;else{var w=m&&e.glyphs[k[t-1]]||{},x=e.glyphs[k[t]];l+=m?(w.w||e.w)+(w.k&&w.k[k[t]]||0)+e.w*h:0,m=1}x&&x.d&&(n+=b.transformPath(x.d,["t",l*j,r*j,"s",j,j,p,s,"t",(a-p)/j,(c-s)/j]))}}return this.path(n).attr({fill:"#000",stroke:"none"})},u.add=function(a){if(b.is(a,"array"))for(var c,d=this.set(),e=0,f=a.length;f>e;e++)c=a[e]||{},w[y](c.type)&&d.push(this[c.type]().attr(c));return d},b.format=function(a,c){var d=b.is(c,U)?[0][D](c):arguments;return a&&b.is(a,T)&&d.length-1&&(a=a.replace(x,function(a,b){return null==d[++b]?F:d[b]})),a||F},b.fullfill=function(){var a=/\{([^\}]+)\}/g,b=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,c=function(a,c,d){var e=d;return c.replace(b,function(a,b,c,d,f){b=b||d,e&&(b in e&&(e=e[b]),"function"==typeof e&&f&&(e=e()))}),e=(null==e||e==d?a:e)+""};return function(b,d){return String(b).replace(a,function(a,b){return c(a,b,d)})}}(),b.ninja=function(){return A.was?z.win.Raphael=A.is:delete Raphael,b},b.st=kb,a.on("raphael.DOMload",function(){t=!0}),function(a,c,d){function e(){/in/.test(a.readyState)?setTimeout(e,9):b.eve("raphael.DOMload")}null==a.readyState&&a.addEventListener&&(a.addEventListener(c,d=function(){a.removeEventListener(c,d,!1),a.readyState="complete"},!1),a.readyState="loading"),e()}(document,"DOMContentLoaded"),b}),function(a,b){"function"==typeof define&&define.amd?define("raphael.svg",["raphael.core"],function(a){return b(a)}):b("object"==typeof exports?require("./raphael.core"):a.Raphael)}(this,function(a){if(!a||a.svg){var b="hasOwnProperty",c=String,d=parseFloat,e=parseInt,f=Math,g=f.max,h=f.abs,i=f.pow,j=/[, ]+/,k=a.eve,l="",m=" ",n="http://www.w3.org/1999/xlink",o={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},p={};a.toString=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};var q=function(d,e){if(e){"string"==typeof d&&(d=q(d));for(var f in e)e[b](f)&&("xlink:"==f.substring(0,6)?d.setAttributeNS(n,f.substring(6),c(e[f])):d.setAttribute(f,c(e[f])))}else d=a._g.doc.createElementNS("http://www.w3.org/2000/svg",d),d.style&&(d.style.webkitTapHighlightColor="rgba(0,0,0,0)");return d},r=function(b,e){var j="linear",k=b.id+e,m=.5,n=.5,o=b.node,p=b.paper,r=o.style,s=a._g.doc.getElementById(k);if(!s){if(e=c(e).replace(a._radial_gradient,function(a,b,c){if(j="radial",b&&c){m=d(b),n=d(c);var e=2*(n>.5)-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&.5!=n&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/),"linear"==j){var t=e.shift();if(t=-d(t),isNaN(t))return null;var u=[0,0,f.cos(a.rad(t)),f.sin(a.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=a._parseDots(e);if(!w)return null;if(k=k.replace(/[\(\)\s,\xb0#]/g,"_"),b.gradient&&k!=b.gradient.id&&(p.defs.removeChild(b.gradient),delete b.gradient),!b.gradient){s=q(j+"Gradient",{id:k}),b.gradient=s,q(s,"radial"==j?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:b.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;y>x;x++)s.appendChild(q("stop",{offset:w[x].offset?w[x].offset:x?"100%":"0%","stop-color":w[x].color||"#fff","stop-opacity":isFinite(w[x].opacity)?w[x].opacity:1}))}}return q(o,{fill:"url('"+document.location.origin+document.location.pathname+"#"+k+"')",opacity:1,"fill-opacity":1}),r.fill=l,r.opacity=1,r.fillOpacity=1,1},s=function(a){var b=a.getBBox(1);q(a.pattern,{patternTransform:a.matrix.invert()+" translate("+b.x+","+b.y+")"})},t=function(d,e,f){if("path"==d.type){for(var g,h,i,j,k,m=c(e).toLowerCase().split("-"),n=d.paper,r=f?"end":"start",s=d.node,t=d.attrs,u=t["stroke-width"],v=m.length,w="classic",x=3,y=3,z=5;v--;)switch(m[v]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":w=m[v];break;case"wide":y=5;break;case"narrow":y=2;break;case"long":x=5;break;case"short":x=2}if("open"==w?(x+=2,y+=2,z+=2,i=1,j=f?4:1,k={fill:"none",stroke:t.stroke}):(j=i=x/2,k={fill:t.stroke,stroke:"none"}),d._.arrows?f?(d._.arrows.endPath&&p[d._.arrows.endPath]--,d._.arrows.endMarker&&p[d._.arrows.endMarker]--):(d._.arrows.startPath&&p[d._.arrows.startPath]--,d._.arrows.startMarker&&p[d._.arrows.startMarker]--):d._.arrows={},"none"!=w){var A="raphael-marker-"+w,B="raphael-marker-"+r+w+x+y+"-obj"+d.id;a._g.doc.getElementById(A)?p[A]++:(n.defs.appendChild(q(q("path"),{"stroke-linecap":"round",d:o[w],id:A})),p[A]=1);var C,D=a._g.doc.getElementById(B);D?(p[B]++,C=D.getElementsByTagName("use")[0]):(D=q(q("marker"),{id:B,markerHeight:y,markerWidth:x,orient:"auto",refX:j,refY:y/2}),C=q(q("use"),{"xlink:href":"#"+A,transform:(f?"rotate(180 "+x/2+" "+y/2+") ":l)+"scale("+x/z+","+y/z+")","stroke-width":(1/((x/z+y/z)/2)).toFixed(4)}),D.appendChild(C),n.defs.appendChild(D),p[B]=1),q(C,k);var E=i*("diamond"!=w&&"oval"!=w);f?(g=d._.arrows.startdx*u||0,h=a.getTotalLength(t.path)-E*u):(g=E*u,h=a.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),k={},k["marker-"+r]="url(#"+B+")",(h||g)&&(k.d=a.getSubpath(t.path,g,h)),q(s,k),d._.arrows[r+"Path"]=A,d._.arrows[r+"Marker"]=B,d._.arrows[r+"dx"]=E,d._.arrows[r+"Type"]=w,d._.arrows[r+"String"]=e}else f?(g=d._.arrows.startdx*u||0,h=a.getTotalLength(t.path)-g):(g=0,h=a.getTotalLength(t.path)-(d._.arrows.enddx*u||0)),d._.arrows[r+"Path"]&&q(s,{d:a.getSubpath(t.path,g,h)}),delete d._.arrows[r+"Path"],delete d._.arrows[r+"Marker"],delete d._.arrows[r+"dx"],delete d._.arrows[r+"Type"],delete d._.arrows[r+"String"];for(k in p)if(p[b](k)&&!p[k]){var F=a._g.doc.getElementById(k);F&&F.parentNode.removeChild(F)}}},u={"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},v=function(a,b,d){if(b=u[c(b).toLowerCase()]){for(var e=a.attrs["stroke-width"]||"1",f={round:e,square:e,butt:0}[a.attrs["stroke-linecap"]||d["stroke-linecap"]]||0,g=[],h=b.length;h--;)g[h]=b[h]*e+(h%2?1:-1)*f;q(a.node,{"stroke-dasharray":g.join(",")})}else q(a.node,{"stroke-dasharray":"none"})},w=function(d,f){var i=d.node,k=d.attrs,m=i.style.visibility;i.style.visibility="hidden";for(var o in f)if(f[b](o)){if(!a._availableAttrs[b](o))continue;var p=f[o];switch(k[o]=p,o){case"blur":d.blur(p);break;case"title":var u=i.getElementsByTagName("title");if(u.length&&(u=u[0]))u.firstChild.nodeValue=p;else{u=q("title");var w=a._g.doc.createTextNode(p);u.appendChild(w),i.appendChild(u)}break;case"href":case"target":var x=i.parentNode;if("a"!=x.tagName.toLowerCase()){var z=q("a");x.insertBefore(z,i),z.appendChild(i),x=z}"target"==o?x.setAttributeNS(n,"show","blank"==p?"new":p):x.setAttributeNS(n,o,p);break;case"cursor":i.style.cursor=p;break;case"transform":d.transform(p);break;case"arrow-start":t(d,p);break;case"arrow-end":t(d,p,1);break;case"clip-rect":var A=c(p).split(j);if(4==A.length){d.clip&&d.clip.parentNode.parentNode.removeChild(d.clip.parentNode);var B=q("clipPath"),C=q("rect");B.id=a.createUUID(),q(C,{x:A[0],y:A[1],width:A[2],height:A[3]}),B.appendChild(C),d.paper.defs.appendChild(B),q(i,{"clip-path":"url(#"+B.id+")"}),d.clip=C}if(!p){var D=i.getAttribute("clip-path");if(D){var E=a._g.doc.getElementById(D.replace(/(^url\(#|\)$)/g,l));E&&E.parentNode.removeChild(E),q(i,{"clip-path":l}),delete d.clip}}break;case"path":"path"==d.type&&(q(i,{d:p?k.path=a._pathToAbsolute(p):"M0,0"}),d._.dirty=1,d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1)));break;case"width":if(i.setAttribute(o,p),d._.dirty=1,!k.fx)break;o="x",p=k.x;case"x":k.fx&&(p=-k.x-(k.width||0));case"rx":if("rx"==o&&"rect"==d.type)break;case"cx":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"height":if(i.setAttribute(o,p),d._.dirty=1,!k.fy)break;o="y",p=k.y;case"y":k.fy&&(p=-k.y-(k.height||0));case"ry":if("ry"==o&&"rect"==d.type)break;case"cy":i.setAttribute(o,p),d.pattern&&s(d),d._.dirty=1;break;case"r":"rect"==d.type?q(i,{rx:p,ry:p}):i.setAttribute(o,p),d._.dirty=1;break;case"src":"image"==d.type&&i.setAttributeNS(n,"href",p);break;case"stroke-width":(1!=d._.sx||1!=d._.sy)&&(p/=g(h(d._.sx),h(d._.sy))||1),i.setAttribute(o,p),k["stroke-dasharray"]&&v(d,k["stroke-dasharray"],f),d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"stroke-dasharray":v(d,p,f);break;case"fill":var F=c(p).match(a._ISURL);if(F){B=q("pattern");var G=q("image");B.id=a.createUUID(),q(B,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1}),q(G,{x:0,y:0,"xlink:href":F[1]}),B.appendChild(G),function(b){a._preload(F[1],function(){var a=this.offsetWidth,c=this.offsetHeight;q(b,{width:a,height:c}),q(G,{width:a,height:c})})}(B),d.paper.defs.appendChild(B),q(i,{fill:"url(#"+B.id+")"}),d.pattern=B,d.pattern&&s(d);break}var H=a.getRGB(p);if(H.error){if(("circle"==d.type||"ellipse"==d.type||"r"!=c(p).charAt())&&r(d,p)){if("opacity"in k||"fill-opacity"in k){var I=a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l));if(I){var J=I.getElementsByTagName("stop");q(J[J.length-1],{"stop-opacity":("opacity"in k?k.opacity:1)*("fill-opacity"in k?k["fill-opacity"]:1)})}}k.gradient=p,k.fill="none";break}}else delete f.gradient,delete k.gradient,!a.is(k.opacity,"undefined")&&a.is(f.opacity,"undefined")&&q(i,{opacity:k.opacity}),!a.is(k["fill-opacity"],"undefined")&&a.is(f["fill-opacity"],"undefined")&&q(i,{"fill-opacity":k["fill-opacity"]});H[b]("opacity")&&q(i,{"fill-opacity":H.opacity>1?H.opacity/100:H.opacity});case"stroke":H=a.getRGB(p),i.setAttribute(o,H.hex),"stroke"==o&&H[b]("opacity")&&q(i,{"stroke-opacity":H.opacity>1?H.opacity/100:H.opacity}),"stroke"==o&&d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"gradient":("circle"==d.type||"ellipse"==d.type||"r"!=c(p).charAt())&&r(d,p); + +break;case"opacity":k.gradient&&!k[b]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){I=a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),I&&(J=I.getElementsByTagName("stop"),q(J[J.length-1],{"stop-opacity":p}));break}default:"font-size"==o&&(p=e(p,10)+"px");var K=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[K]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if("text"==d.type&&(f[b]("text")||f[b]("font")||f[b]("font-size")||f[b]("x")||f[b]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(a._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10;if(f[b]("text")){for(g.text=f.text;h.firstChild;)h.removeChild(h.firstChild);for(var j,k=c(f.text).split("\n"),m=[],n=0,o=k.length;o>n;n++)j=q("tspan"),n&&q(j,{dy:i*x,x:g.x}),j.appendChild(a._g.doc.createTextNode(k[n])),h.appendChild(j),m[n]=j}else for(m=h.getElementsByTagName("tspan"),n=0,o=m.length;o>n;n++)n?q(m[n],{dy:i*x,x:g.x}):q(m[0],{dy:0});q(h,{x:g.x,y:g.y}),d._.dirty=1;var p=d._getBBox(),r=g.y-(p.y+p.height/2);r&&a.is(r,"finite")&&q(m[0],{dy:r})}},z=function(a){return a.parentNode&&"a"===a.parentNode.tagName.toLowerCase()?a.parentNode:a},A=function(b,c){this[0]=this.node=b,b.raphael=!0,this.id=a._oid++,b.raphaelid=this.id,this.matrix=a.matrix(),this.realPath=null,this.paper=c,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!c.bottom&&(c.bottom=this),this.prev=c.top,c.top&&(c.top.next=this),c.top=this,this.next=null},B=a.el;A.prototype=B,B.constructor=A,a._engine.path=function(a,b){var c=q("path");b.canvas&&b.canvas.appendChild(c);var d=new A(c,b);return d.type="path",w(d,{fill:"none",stroke:"#000",path:a}),d},B.rotate=function(a,b,e){if(this.removed)return this;if(a=c(a).split(j),a.length-1&&(b=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(b=e),null==b||null==e){var f=this.getBBox(1);b=f.x+f.width/2,e=f.y+f.height/2}return this.transform(this._.transform.concat([["r",a,b,e]])),this},B.scale=function(a,b,e,f){if(this.removed)return this;if(a=c(a).split(j),a.length-1&&(b=d(a[1]),e=d(a[2]),f=d(a[3])),a=d(a[0]),null==b&&(b=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,b,e,f]])),this},B.translate=function(a,b){return this.removed?this:(a=c(a).split(j),a.length-1&&(b=d(a[1])),a=d(a[0])||0,b=+b||0,this.transform(this._.transform.concat([["t",a,b]])),this)},B.transform=function(c){var d=this._;if(null==c)return d.transform;if(a._extractTransform(this,c),this.clip&&q(this.clip,{transform:this.matrix.invert()}),this.pattern&&s(this),this.node&&q(this.node,{transform:this.matrix}),1!=d.sx||1!=d.sy){var e=this.attrs[b]("stroke-width")?this.attrs["stroke-width"]:1;this.attr({"stroke-width":e})}return this},B.hide=function(){return this.removed||(this.node.style.display="none"),this},B.show=function(){return this.removed||(this.node.style.display=""),this},B.remove=function(){var b=z(this.node);if(!this.removed&&b.parentNode){var c=this.paper;c.__set__&&c.__set__.exclude(this),k.unbind("raphael.*.*."+this.id),this.gradient&&c.defs.removeChild(this.gradient),a._tear(this,c),b.parentNode.removeChild(b),this.removeData();for(var d in this)this[d]="function"==typeof this[d]?a._removedFactory(d):null;this.removed=!0}},B._getBBox=function(){if("none"==this.node.style.display){this.show();var a=!0}var b,c=!1;this.paper.canvas.parentElement?b=this.paper.canvas.parentElement.style:this.paper.canvas.parentNode&&(b=this.paper.canvas.parentNode.style),b&&"none"==b.display&&(c=!0,b.display="");var d={};try{d=this.node.getBBox()}catch(e){d={x:this.node.clientLeft,y:this.node.clientTop,width:this.node.clientWidth,height:this.node.clientHeight}}finally{d=d||{},c&&(b.display="none")}return a&&this.hide(),d},B.attr=function(c,d){if(this.removed)return this;if(null==c){var e={};for(var f in this.attrs)this.attrs[b](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&a.is(c,"string")){if("fill"==c&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;if("transform"==c)return this._.transform;for(var g=c.split(j),h={},i=0,l=g.length;l>i;i++)c=g[i],c in this.attrs?h[c]=this.attrs[c]:a.is(this.paper.customAttributes[c],"function")?h[c]=this.paper.customAttributes[c].def:h[c]=a._availableAttrs[c];return l-1?h:h[g[0]]}if(null==d&&a.is(c,"array")){for(h={},i=0,l=c.length;l>i;i++)h[c[i]]=this.attr(c[i]);return h}if(null!=d){var m={};m[c]=d}else null!=c&&a.is(c,"object")&&(m=c);for(var n in m)k("raphael.attr."+n+"."+this.id,this,m[n]);for(n in this.paper.customAttributes)if(this.paper.customAttributes[b](n)&&m[b](n)&&a.is(this.paper.customAttributes[n],"function")){var o=this.paper.customAttributes[n].apply(this,[].concat(m[n]));this.attrs[n]=m[n];for(var p in o)o[b](p)&&(m[p]=o[p])}return w(this,m),this},B.toFront=function(){if(this.removed)return this;var b=z(this.node);b.parentNode.appendChild(b);var c=this.paper;return c.top!=this&&a._tofront(this,c),this},B.toBack=function(){if(this.removed)return this;var b=z(this.node),c=b.parentNode;c.insertBefore(b,c.firstChild),a._toback(this,this.paper);this.paper;return this},B.insertAfter=function(b){if(this.removed||!b)return this;var c=z(this.node),d=z(b.node||b[b.length-1].node);return d.nextSibling?d.parentNode.insertBefore(c,d.nextSibling):d.parentNode.appendChild(c),a._insertafter(this,b,this.paper),this},B.insertBefore=function(b){if(this.removed||!b)return this;var c=z(this.node),d=z(b.node||b[0].node);return d.parentNode.insertBefore(c,d),a._insertbefore(this,b,this.paper),this},B.blur=function(b){var c=this;if(0!==+b){var d=q("filter"),e=q("feGaussianBlur");c.attrs.blur=b,d.id=a.createUUID(),q(e,{stdDeviation:+b||1.5}),d.appendChild(e),c.paper.defs.appendChild(d),c._blur=d,q(c.node,{filter:"url(#"+d.id+")"})}else c._blur&&(c._blur.parentNode.removeChild(c._blur),delete c._blur,delete c.attrs.blur),c.node.removeAttribute("filter");return c},a._engine.circle=function(a,b,c,d){var e=q("circle");a.canvas&&a.canvas.appendChild(e);var f=new A(e,a);return f.attrs={cx:b,cy:c,r:d,fill:"none",stroke:"#000"},f.type="circle",q(e,f.attrs),f},a._engine.rect=function(a,b,c,d,e,f){var g=q("rect");a.canvas&&a.canvas.appendChild(g);var h=new A(g,a);return h.attrs={x:b,y:c,width:d,height:e,rx:f||0,ry:f||0,fill:"none",stroke:"#000"},h.type="rect",q(g,h.attrs),h},a._engine.ellipse=function(a,b,c,d,e){var f=q("ellipse");a.canvas&&a.canvas.appendChild(f);var g=new A(f,a);return g.attrs={cx:b,cy:c,rx:d,ry:e,fill:"none",stroke:"#000"},g.type="ellipse",q(f,g.attrs),g},a._engine.image=function(a,b,c,d,e,f){var g=q("image");q(g,{x:c,y:d,width:e,height:f,preserveAspectRatio:"none"}),g.setAttributeNS(n,"href",b),a.canvas&&a.canvas.appendChild(g);var h=new A(g,a);return h.attrs={x:c,y:d,width:e,height:f,src:b},h.type="image",h},a._engine.text=function(b,c,d,e){var f=q("text");b.canvas&&b.canvas.appendChild(f);var g=new A(f,b);return g.attrs={x:c,y:d,"text-anchor":"middle",text:e,"font-family":a._availableAttrs["font-family"],"font-size":a._availableAttrs["font-size"],stroke:"none",fill:"#000"},g.type="text",w(g,g.attrs),g},a._engine.setSize=function(a,b){return this.width=a||this.width,this.height=b||this.height,this.canvas.setAttribute("width",this.width),this.canvas.setAttribute("height",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox),this},a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b&&b.container,d=b.x,e=b.y,f=b.width,g=b.height;if(!c)throw new Error("SVG container not found.");var h,i=q("svg"),j="overflow:hidden;";return d=d||0,e=e||0,f=f||512,g=g||342,q(i,{height:g,version:1.1,width:f,xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}),1==c?(i.style.cssText=j+"position:absolute;left:"+d+"px;top:"+e+"px",a._g.doc.body.appendChild(i),h=1):(i.style.cssText=j+"position:relative",c.firstChild?c.insertBefore(i,c.firstChild):c.appendChild(i)),c=new a._Paper,c.width=f,c.height=g,c.canvas=i,c.clear(),c._left=c._top=0,h&&(c.renderfix=function(){}),c.renderfix(),c},a._engine.setViewBox=function(a,b,c,d,e){k("raphael.setViewBox",this,this._viewBox,[a,b,c,d,e]);var f,h,i=this.getSize(),j=g(c/i.width,d/i.height),l=this.top,n=e?"xMidYMid meet":"xMinYMin";for(null==a?(this._vbSize&&(j=1),delete this._vbSize,f="0 0 "+this.width+m+this.height):(this._vbSize=j,f=a+m+b+m+c+m+d),q(this.canvas,{viewBox:f,preserveAspectRatio:n});j&&l;)h="stroke-width"in l.attrs?l.attrs["stroke-width"]:1,l.attr({"stroke-width":h}),l._.dirty=1,l._.dirtyT=1,l=l.prev;return this._viewBox=[a,b,c,d,!!e],this},a.prototype.renderfix=function(){var a,b=this.canvas,c=b.style;try{a=b.getScreenCTM()||b.createSVGMatrix()}catch(d){a=b.createSVGMatrix()}var e=-a.e%1,f=-a.f%1;(e||f)&&(e&&(this._left=(this._left+e)%1,c.left=this._left+"px"),f&&(this._top=(this._top+f)%1,c.top=this._top+"px"))},a.prototype.clear=function(){a.eve("raphael.clear",this);for(var b=this.canvas;b.firstChild;)b.removeChild(b.firstChild);this.bottom=this.top=null,(this.desc=q("desc")).appendChild(a._g.doc.createTextNode("Created with Raphaël "+a.version)),b.appendChild(this.desc),b.appendChild(this.defs=q("defs"))},a.prototype.remove=function(){k("raphael.remove",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]="function"==typeof this[b]?a._removedFactory(b):null};var C=a.st;for(var D in B)B[b](D)&&!C[b](D)&&(C[D]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(D))}}),function(a,b){"function"==typeof define&&define.amd?define("raphael.vml",["raphael.core"],function(a){return b(a)}):b("object"==typeof exports?require("./raphael.core"):a.Raphael)}(this,function(a){if(!a||a.vml){var b="hasOwnProperty",c=String,d=parseFloat,e=Math,f=e.round,g=e.max,h=e.min,i=e.abs,j="fill",k=/[, ]+/,l=a.eve,m=" progid:DXImageTransform.Microsoft",n=" ",o="",p={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},q=/([clmz]),?([^clmz]*)/gi,r=/ progid:\S+Blur\([^\)]+\)/g,s=/-?[^,\s-]+/g,t="position:absolute;left:0;top:0;width:1px;height:1px;behavior:url(#default#VML)",u=21600,v={path:1,rect:1,image:1},w={circle:1,ellipse:1},x=function(b){var d=/[ahqstv]/gi,e=a._pathToAbsolute;if(c(b).match(d)&&(e=a._path2curve),d=/[clmz]/g,e==a._pathToAbsolute&&!c(b).match(d)){var g=c(b).replace(q,function(a,b,c){var d=[],e="m"==b.toLowerCase(),g=p[b];return c.replace(s,function(a){e&&2==d.length&&(g+=d+p["m"==b?"l":"L"],d=[]),d.push(f(a*u))}),g+d});return g}var h,i,j=e(b);g=[];for(var k=0,l=j.length;l>k;k++){h=j[k],i=j[k][0].toLowerCase(),"z"==i&&(i="x");for(var m=1,r=h.length;r>m;m++)i+=f(h[m]*u)+(m!=r-1?",":o);g.push(i)}return g.join(n)},y=function(b,c,d){var e=a.matrix();return e.rotate(-b,.5,.5),{dx:e.x(c,d),dy:e.y(c,d)}},z=function(a,b,c,d,e,f){var g=a._,h=a.matrix,k=g.fillpos,l=a.node,m=l.style,o=1,p="",q=u/b,r=u/c;if(m.visibility="hidden",b&&c){if(l.coordsize=i(q)+n+i(r),m.rotation=f*(0>b*c?-1:1),f){var s=y(f,d,e);d=s.dx,e=s.dy}if(0>b&&(p+="x"),0>c&&(p+=" y")&&(o=-1),m.flip=p,l.coordorigin=d*-q+n+e*-r,k||g.fillsize){var t=l.getElementsByTagName(j);t=t&&t[0],l.removeChild(t),k&&(s=y(f,h.x(k[0],k[1]),h.y(k[0],k[1])),t.position=s.dx*o+n+s.dy*o),g.fillsize&&(t.size=g.fillsize[0]*i(b)+n+g.fillsize[1]*i(c)),l.appendChild(t)}m.visibility="visible"}};a.toString=function(){return"Your browser doesn’t support SVG. Falling down to VML.\nYou are running Raphaël "+this.version};var A=function(a,b,d){for(var e=c(b).toLowerCase().split("-"),f=d?"end":"start",g=e.length,h="classic",i="medium",j="medium";g--;)switch(e[g]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":h=e[g];break;case"wide":case"narrow":j=e[g];break;case"long":case"short":i=e[g]}var k=a.node.getElementsByTagName("stroke")[0];k[f+"arrow"]=h,k[f+"arrowlength"]=i,k[f+"arrowwidth"]=j},B=function(e,i){e.attrs=e.attrs||{};var l=e.node,m=e.attrs,p=l.style,q=v[e.type]&&(i.x!=m.x||i.y!=m.y||i.width!=m.width||i.height!=m.height||i.cx!=m.cx||i.cy!=m.cy||i.rx!=m.rx||i.ry!=m.ry||i.r!=m.r),r=w[e.type]&&(m.cx!=i.cx||m.cy!=i.cy||m.r!=i.r||m.rx!=i.rx||m.ry!=i.ry),s=e;for(var t in i)i[b](t)&&(m[t]=i[t]);if(q&&(m.path=a._getPath[e.type](e),e._.dirty=1),i.href&&(l.href=i.href),i.title&&(l.title=i.title),i.target&&(l.target=i.target),i.cursor&&(p.cursor=i.cursor),"blur"in i&&e.blur(i.blur),(i.path&&"path"==e.type||q)&&(l.path=x(~c(m.path).toLowerCase().indexOf("r")?a._pathToAbsolute(m.path):m.path),e._.dirty=1,"image"==e.type&&(e._.fillpos=[m.x,m.y],e._.fillsize=[m.width,m.height],z(e,1,1,0,0,0))),"transform"in i&&e.transform(i.transform),r){var y=+m.cx,B=+m.cy,D=+m.rx||+m.r||0,E=+m.ry||+m.r||0;l.path=a.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x",f((y-D)*u),f((B-E)*u),f((y+D)*u),f((B+E)*u),f(y*u)),e._.dirty=1}if("clip-rect"in i){var G=c(i["clip-rect"]).split(k);if(4==G.length){G[2]=+G[2]+ +G[0],G[3]=+G[3]+ +G[1];var H=l.clipRect||a._g.doc.createElement("div"),I=H.style;I.clip=a.format("rect({1}px {2}px {3}px {0}px)",G),l.clipRect||(I.position="absolute",I.top=0,I.left=0,I.width=e.paper.width+"px",I.height=e.paper.height+"px",l.parentNode.insertBefore(H,l),H.appendChild(l),l.clipRect=H)}i["clip-rect"]||l.clipRect&&(l.clipRect.style.clip="auto")}if(e.textpath){var J=e.textpath.style;i.font&&(J.font=i.font),i["font-family"]&&(J.fontFamily='"'+i["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,o)+'"'),i["font-size"]&&(J.fontSize=i["font-size"]),i["font-weight"]&&(J.fontWeight=i["font-weight"]),i["font-style"]&&(J.fontStyle=i["font-style"])}if("arrow-start"in i&&A(s,i["arrow-start"]),"arrow-end"in i&&A(s,i["arrow-end"],1),null!=i.opacity||null!=i["stroke-width"]||null!=i.fill||null!=i.src||null!=i.stroke||null!=i["stroke-width"]||null!=i["stroke-opacity"]||null!=i["fill-opacity"]||null!=i["stroke-dasharray"]||null!=i["stroke-miterlimit"]||null!=i["stroke-linejoin"]||null!=i["stroke-linecap"]){var K=l.getElementsByTagName(j),L=!1;if(K=K&&K[0],!K&&(L=K=F(j)),"image"==e.type&&i.src&&(K.src=i.src),i.fill&&(K.on=!0),(null==K.on||"none"==i.fill||null===i.fill)&&(K.on=!1),K.on&&i.fill){var M=c(i.fill).match(a._ISURL);if(M){K.parentNode==l&&l.removeChild(K),K.rotate=!0,K.src=M[1],K.type="tile";var N=e.getBBox(1);K.position=N.x+n+N.y,e._.fillpos=[N.x,N.y],a._preload(M[1],function(){e._.fillsize=[this.offsetWidth,this.offsetHeight]})}else K.color=a.getRGB(i.fill).hex,K.src=o,K.type="solid",a.getRGB(i.fill).error&&(s.type in{circle:1,ellipse:1}||"r"!=c(i.fill).charAt())&&C(s,i.fill,K)&&(m.fill="none",m.gradient=i.fill,K.rotate=!1)}if("fill-opacity"in i||"opacity"in i){var O=((+m["fill-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+a.getRGB(i.fill).o+1||2)-1);O=h(g(O,0),1),K.opacity=O,K.src&&(K.color="none")}l.appendChild(K);var P=l.getElementsByTagName("stroke")&&l.getElementsByTagName("stroke")[0],Q=!1;!P&&(Q=P=F("stroke")),(i.stroke&&"none"!=i.stroke||i["stroke-width"]||null!=i["stroke-opacity"]||i["stroke-dasharray"]||i["stroke-miterlimit"]||i["stroke-linejoin"]||i["stroke-linecap"])&&(P.on=!0),("none"==i.stroke||null===i.stroke||null==P.on||0==i.stroke||0==i["stroke-width"])&&(P.on=!1);var R=a.getRGB(i.stroke);P.on&&i.stroke&&(P.color=R.hex),O=((+m["stroke-opacity"]+1||2)-1)*((+m.opacity+1||2)-1)*((+R.o+1||2)-1);var S=.75*(d(i["stroke-width"])||1);if(O=h(g(O,0),1),null==i["stroke-width"]&&(S=m["stroke-width"]),i["stroke-width"]&&(P.weight=S),S&&1>S&&(O*=S)&&(P.weight=1),P.opacity=O,i["stroke-linejoin"]&&(P.joinstyle=i["stroke-linejoin"]||"miter"),P.miterlimit=i["stroke-miterlimit"]||8,i["stroke-linecap"]&&(P.endcap="butt"==i["stroke-linecap"]?"flat":"square"==i["stroke-linecap"]?"square":"round"),"stroke-dasharray"in i){var T={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};P.dashstyle=T[b](i["stroke-dasharray"])?T[i["stroke-dasharray"]]:o}Q&&l.appendChild(P)}if("text"==s.type){s.paper.canvas.style.display=o;var U=s.paper.span,V=100,W=m.font&&m.font.match(/\d+(?:\.\d*)?(?=px)/);p=U.style,m.font&&(p.font=m.font),m["font-family"]&&(p.fontFamily=m["font-family"]),m["font-weight"]&&(p.fontWeight=m["font-weight"]),m["font-style"]&&(p.fontStyle=m["font-style"]),W=d(m["font-size"]||W&&W[0])||10,p.fontSize=W*V+"px",s.textpath.string&&(U.innerHTML=c(s.textpath.string).replace(/"));var X=U.getBoundingClientRect();s.W=m.w=(X.right-X.left)/V,s.H=m.h=(X.bottom-X.top)/V,s.X=m.x,s.Y=m.y+s.H/2,("x"in i||"y"in i)&&(s.path.v=a.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));for(var Y=["x","y","text","font","font-family","font-weight","font-style","font-size"],Z=0,$=Y.length;$>Z;Z++)if(Y[Z]in i){s._.dirty=1;break}switch(m["text-anchor"]){case"start":s.textpath.style["v-text-align"]="left",s.bbx=s.W/2;break;case"end":s.textpath.style["v-text-align"]="right",s.bbx=-s.W/2;break;default:s.textpath.style["v-text-align"]="center",s.bbx=0}s.textpath.style["v-text-kern"]=!0}},C=function(b,f,g){b.attrs=b.attrs||{};var h=(b.attrs,Math.pow),i="linear",j=".5 .5";if(b.attrs.gradient=f,f=c(f).replace(a._radial_gradient,function(a,b,c){return i="radial",b&&c&&(b=d(b),c=d(c),h(b-.5,2)+h(c-.5,2)>.25&&(c=e.sqrt(.25-h(b-.5,2))*(2*(c>.5)-1)+.5),j=b+n+c),o}),f=f.split(/\s*\-\s*/),"linear"==i){var k=f.shift();if(k=-d(k),isNaN(k))return null}var l=a._parseDots(f);if(!l)return null;if(b=b.shape||b.node,l.length){b.removeChild(g),g.on=!0,g.method="none",g.color=l[0].color,g.color2=l[l.length-1].color;for(var m=[],p=0,q=l.length;q>p;p++)l[p].offset&&m.push(l[p].offset+n+l[p].color);g.colors=m.length?m.join():"0% "+g.color,"radial"==i?(g.type="gradientTitle",g.focus="100%",g.focussize="0 0",g.focusposition=j,g.angle=0):(g.type="gradient",g.angle=(270-k)%360),b.appendChild(g)}return 1},D=function(b,c){this[0]=this.node=b,b.raphael=!0,this.id=a._oid++,b.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=c,this.matrix=a.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!c.bottom&&(c.bottom=this),this.prev=c.top,c.top&&(c.top.next=this),c.top=this,this.next=null},E=a.el;D.prototype=E,E.constructor=D,E.transform=function(b){if(null==b)return this._.transform;var d,e=this.paper._viewBoxShift,f=e?"s"+[e.scale,e.scale]+"-1-1t"+[e.dx,e.dy]:o;e&&(d=b=c(b).replace(/\.{3}|\u2026/g,this._.transform||o)),a._extractTransform(this,f+b);var g,h=this.matrix.clone(),i=this.skew,j=this.node,k=~c(this.attrs.fill).indexOf("-"),l=!c(this.attrs.fill).indexOf("url(");if(h.translate(1,1),l||k||"image"==this.type)if(i.matrix="1 0 0 1",i.offset="0 0",g=h.split(),k&&g.noRotation||!g.isSimple){j.style.filter=h.toFilter();var m=this.getBBox(),p=this.getBBox(1),q=m.x-p.x,r=m.y-p.y;j.coordorigin=q*-u+n+r*-u,z(this,1,1,q,r,0)}else j.style.filter=o,z(this,g.scalex,g.scaley,g.dx,g.dy,g.rotate);else j.style.filter=o,i.matrix=c(h),i.offset=h.offset();return null!==d&&(this._.transform=d,a._extractTransform(this,d)),this},E.rotate=function(a,b,e){if(this.removed)return this;if(null!=a){if(a=c(a).split(k),a.length-1&&(b=d(a[1]),e=d(a[2])),a=d(a[0]),null==e&&(b=e),null==b||null==e){var f=this.getBBox(1);b=f.x+f.width/2,e=f.y+f.height/2}return this._.dirtyT=1,this.transform(this._.transform.concat([["r",a,b,e]])),this}},E.translate=function(a,b){return this.removed?this:(a=c(a).split(k),a.length-1&&(b=d(a[1])),a=d(a[0])||0,b=+b||0,this._.bbox&&(this._.bbox.x+=a,this._.bbox.y+=b),this.transform(this._.transform.concat([["t",a,b]])),this)},E.scale=function(a,b,e,f){if(this.removed)return this;if(a=c(a).split(k),a.length-1&&(b=d(a[1]),e=d(a[2]),f=d(a[3]),isNaN(e)&&(e=null),isNaN(f)&&(f=null)),a=d(a[0]),null==b&&(b=a),null==f&&(e=f),null==e||null==f)var g=this.getBBox(1);return e=null==e?g.x+g.width/2:e,f=null==f?g.y+g.height/2:f,this.transform(this._.transform.concat([["s",a,b,e,f]])),this._.dirtyT=1,this},E.hide=function(){return!this.removed&&(this.node.style.display="none"),this},E.show=function(){return!this.removed&&(this.node.style.display=o),this},E.auxGetBBox=a.el.getBBox,E.getBBox=function(){var a=this.auxGetBBox();if(this.paper&&this.paper._viewBoxShift){var b={},c=1/this.paper._viewBoxShift.scale;return b.x=a.x-this.paper._viewBoxShift.dx,b.x*=c,b.y=a.y-this.paper._viewBoxShift.dy,b.y*=c,b.width=a.width*c,b.height=a.height*c,b.x2=b.x+b.width,b.y2=b.y+b.height,b}return a},E._getBBox=function(){return this.removed?{}:{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},E.remove=function(){if(!this.removed&&this.node.parentNode){this.paper.__set__&&this.paper.__set__.exclude(this),a.eve.unbind("raphael.*.*."+this.id),a._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape);for(var b in this)this[b]="function"==typeof this[b]?a._removedFactory(b):null;this.removed=!0}},E.attr=function(c,d){if(this.removed)return this;if(null==c){var e={};for(var f in this.attrs)this.attrs[b](f)&&(e[f]=this.attrs[f]);return e.gradient&&"none"==e.fill&&(e.fill=e.gradient)&&delete e.gradient,e.transform=this._.transform,e}if(null==d&&a.is(c,"string")){if(c==j&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;for(var g=c.split(k),h={},i=0,m=g.length;m>i;i++)c=g[i],c in this.attrs?h[c]=this.attrs[c]:a.is(this.paper.customAttributes[c],"function")?h[c]=this.paper.customAttributes[c].def:h[c]=a._availableAttrs[c];return m-1?h:h[g[0]]}if(this.attrs&&null==d&&a.is(c,"array")){for(h={},i=0,m=c.length;m>i;i++)h[c[i]]=this.attr(c[i]);return h}var n;null!=d&&(n={},n[c]=d),null==d&&a.is(c,"object")&&(n=c);for(var o in n)l("raphael.attr."+o+"."+this.id,this,n[o]);if(n){for(o in this.paper.customAttributes)if(this.paper.customAttributes[b](o)&&n[b](o)&&a.is(this.paper.customAttributes[o],"function")){var p=this.paper.customAttributes[o].apply(this,[].concat(n[o]));this.attrs[o]=n[o];for(var q in p)p[b](q)&&(n[q]=p[q])}n.text&&"text"==this.type&&(this.textpath.string=n.text),B(this,n)}return this},E.toFront=function(){return!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&a._tofront(this,this.paper),this},E.toBack=function(){return this.removed?this:(this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),a._toback(this,this.paper)),this)},E.insertAfter=function(b){return this.removed?this:(b.constructor==a.st.constructor&&(b=b[b.length-1]),b.node.nextSibling?b.node.parentNode.insertBefore(this.node,b.node.nextSibling):b.node.parentNode.appendChild(this.node),a._insertafter(this,b,this.paper),this)},E.insertBefore=function(b){return this.removed?this:(b.constructor==a.st.constructor&&(b=b[0]),b.node.parentNode.insertBefore(this.node,b.node),a._insertbefore(this,b,this.paper),this)},E.blur=function(b){var c=this.node.runtimeStyle,d=c.filter;return d=d.replace(r,o),0!==+b?(this.attrs.blur=b,c.filter=d+n+m+".Blur(pixelradius="+(+b||1.5)+")",c.margin=a.format("-{0}px 0 0 -{0}px",f(+b||1.5))):(c.filter=d,c.margin=0,delete this.attrs.blur),this},a._engine.path=function(a,b){var c=F("shape");c.style.cssText=t,c.coordsize=u+n+u,c.coordorigin=b.coordorigin;var d=new D(c,b),e={fill:"none",stroke:"#000"};a&&(e.path=a),d.type="path",d.path=[],d.Path=o,B(d,e),b.canvas.appendChild(c);var f=F("skew");return f.on=!0,c.appendChild(f),d.skew=f,d.transform(o),d},a._engine.rect=function(b,c,d,e,f,g){var h=a._rectPath(c,d,e,f,g),i=b.path(h),j=i.attrs;return i.X=j.x=c,i.Y=j.y=d,i.W=j.width=e,i.H=j.height=f,j.r=g,j.path=h,i.type="rect",i},a._engine.ellipse=function(a,b,c,d,e){{var f=a.path();f.attrs}return f.X=b-d,f.Y=c-e,f.W=2*d,f.H=2*e,f.type="ellipse",B(f,{cx:b,cy:c,rx:d,ry:e}),f},a._engine.circle=function(a,b,c,d){{var e=a.path();e.attrs}return e.X=b-d,e.Y=c-d,e.W=e.H=2*d,e.type="circle",B(e,{cx:b,cy:c,r:d}),e},a._engine.image=function(b,c,d,e,f,g){var h=a._rectPath(d,e,f,g),i=b.path(h).attr({stroke:"none"}),k=i.attrs,l=i.node,m=l.getElementsByTagName(j)[0];return k.src=c,i.X=k.x=d,i.Y=k.y=e,i.W=k.width=f,i.H=k.height=g,k.path=h,i.type="image",m.parentNode==l&&l.removeChild(m),m.rotate=!0,m.src=c,m.type="tile",i._.fillpos=[d,e],i._.fillsize=[f,g],l.appendChild(m),z(i,1,1,0,0,0),i},a._engine.text=function(b,d,e,g){var h=F("shape"),i=F("path"),j=F("textpath");d=d||0,e=e||0,g=g||"",i.v=a.format("m{0},{1}l{2},{1}",f(d*u),f(e*u),f(d*u)+1),i.textpathok=!0,j.string=c(g),j.on=!0,h.style.cssText=t,h.coordsize=u+n+u,h.coordorigin="0 0";var k=new D(h,b),l={fill:"#000",stroke:"none",font:a._availableAttrs.font,text:g};k.shape=h,k.path=i,k.textpath=j,k.type="text",k.attrs.text=c(g),k.attrs.x=d,k.attrs.y=e,k.attrs.w=1,k.attrs.h=1,B(k,l),h.appendChild(j),h.appendChild(i),b.canvas.appendChild(h);var m=F("skew");return m.on=!0,h.appendChild(m),k.skew=m,k.transform(o),k},a._engine.setSize=function(b,c){var d=this.canvas.style;return this.width=b,this.height=c,b==+b&&(b+="px"),c==+c&&(c+="px"),d.width=b,d.height=c,d.clip="rect(0 "+b+" "+c+" 0)",this._viewBox&&a._engine.setViewBox.apply(this,this._viewBox),this},a._engine.setViewBox=function(b,c,d,e,f){a.eve("raphael.setViewBox",this,this._viewBox,[b,c,d,e,f]);var g,h,i=this.getSize(),j=i.width,k=i.height;return f&&(g=k/e,h=j/d,j>d*g&&(b-=(j-d*g)/2/g),k>e*h&&(c-=(k-e*h)/2/h)),this._viewBox=[b,c,d,e,!!f],this._viewBoxShift={dx:-b,dy:-c,scale:i},this.forEach(function(a){a.transform("...")}),this};var F;a._engine.initWin=function(a){var b=a.document;b.styleSheets.length<31?b.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)"):b.styleSheets[0].addRule(".rvml","behavior:url(#default#VML)");try{!b.namespaces.rvml&&b.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),F=function(a){return b.createElement("')}}catch(c){F=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},a._engine.initWin(a._g.win),a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b.container,d=b.height,e=b.width,f=b.x,g=b.y;if(!c)throw new Error("VML container not found.");var h=new a._Paper,i=h.canvas=a._g.doc.createElement("div"),j=i.style;return f=f||0,g=g||0,e=e||512,d=d||342,h.width=e,h.height=d,e==+e&&(e+="px"),d==+d&&(d+="px"),h.coordsize=1e3*u+n+1e3*u,h.coordorigin="0 0",h.span=a._g.doc.createElement("span"),h.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",i.appendChild(h.span),j.cssText=a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",e,d),1==c?(a._g.doc.body.appendChild(i),j.left=f+"px",j.top=g+"px",j.position="absolute"):c.firstChild?c.insertBefore(i,c.firstChild):c.appendChild(i),h.renderfix=function(){},h},a.prototype.clear=function(){a.eve("raphael.clear",this),this.canvas.innerHTML=o,this.span=a._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},a.prototype.remove=function(){a.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]="function"==typeof this[b]?a._removedFactory(b):null;return!0};var G=a.st;for(var H in E)E[b](H)&&!G[b](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}}); \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/mode-css.js b/examples/SmartSwitch/data_src/js_css_src/mode-css.js new file mode 100644 index 0000000..b41ecdc --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/mode-css.js @@ -0,0 +1 @@ +define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"@.*?{",push:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"\\}",next:"pop"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}],ruleset:[{token:"paren.rparen",regex:"\\}",next:"pop"},{token:"comment",regex:"\\/\\*",push:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/css_completions",["require","exports","module"],function(e,t,n){"use strict";var r={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,"double":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{"default":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},"float":{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,"static":1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e){if(typeof e[t]!="string")continue;var n=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(e==="ruleset"){var s=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(s)?(/([\w\-]+):[^:]*$/.test(s),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+": $0",meta:"property",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\w\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]=="object"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:"property value",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(!f.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./css_highlight_rules").CssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./css_completions").CssCompletions,f=e("./behaviour/css").CssBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(c.prototype),t.Mode=c}) \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/mode-html.js b/examples/SmartSwitch/data_src/js_css_src/mode-html.js new file mode 100644 index 0000000..faee447 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/mode-html.js @@ -0,0 +1 @@ +define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var r=e.charAt(1)=="/"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:"meta.tag.punctuation."+(r==1?"":"end-")+"tag-open.xml",value:e.slice(0,r)},{type:"meta.tag.tag-name.xml",value:e.substr(r)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),f("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)n.unshift("start",t);else if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(l.prototype),t.Mode=l}),define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=t.supportType="align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|overflow-x|overflow-y|padding|padding-bottom|padding-left|padding-right|padding-top|page-break-after|page-break-before|page-break-inside|perspective|perspective-origin|position|quotes|resize|right|tab-size|table-layout|text-align|text-align-last|text-decoration|text-decoration-color|text-decoration-line|text-decoration-style|text-indent|text-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",u=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.supportConstant="absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero",f=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",l=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",c=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",h=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",p=t.pseudoClasses="(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b",d=function(){var e=this.createKeywordMapper({"support.function":u,"support.constant":a,"support.type":o,"support.constant.color":f,"support.constant.fonts":l},"text",!0);this.$rules={start:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"@.*?{",push:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"\\}",next:"pop"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}],ruleset:[{token:"paren.rparen",regex:"\\}",next:"pop"},{token:"comment",regex:"\\/\\*",push:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+c+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:c},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:h},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:p},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),define("ace/mode/css_completions",["require","exports","module"],function(e,t,n){"use strict";var r={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,"double":2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{"default":1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},"float":{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,"static":1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e){if(typeof e[t]!="string")continue;var n=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});r.hasOwnProperty(n)||(r[n]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,n,r){this.completionsDefined||this.defineCompletions();var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(e==="ruleset"){var s=t.getLine(n.row).substr(0,n.column);return/:[^;]+$/.test(s)?(/([\w\-]+):[^:]*$/.test(s),this.getPropertyValueCompletions(e,t,n,r)):this.getPropertyCompletions(e,t,n,r)}return[]},this.getPropertyCompletions=function(e,t,n,i){var s=Object.keys(r);return s.map(function(e){return{caption:e,snippet:e+": $0",meta:"property",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,n,i){var s=t.getLine(n.row).substr(0,n.column),o=(/([\w\-]+):[^:]*$/.exec(s)||{})[1];if(!o)return[];var u=[];return o in r&&typeof r[o]=="object"&&(u=Object.keys(r[o])),u.map(function(e){return{caption:e,snippet:e,meta:"property value",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("./cstyle").CstyleBehaviour,o=e("../../token_iterator").TokenIterator,u=function(){this.inherit(s),this.add("colon","insertion",function(e,t,n,r,i){if(i===":"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\s+/)&&(a=u.stepBackward());if(a&&a.type==="support.type"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===":")return{text:"",selection:[1,1]};if(!f.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===":"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\s+/)&&(f=a.stepBackward());if(f&&f.type==="support.type"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===";")return i.end.column++,i}}}),this.add("semicolon","insertion",function(e,t,n,r,i){if(i===";"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===";")return{text:"",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./css_highlight_rules").CssHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./css_completions").CssCompletions,f=e("./behaviour/css").CssBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.$completer=new a,this.foldingRules=new l};r.inherits(c,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type=="comment")return r;var s=t.match(/^.*\{\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(c.prototype),t.Mode=c}),define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(e){var t="[_:a-zA-Z\u00c0-\uffff][-_:.a-zA-Z0-9\u00c0-\uffff]*";this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.xml-decl.xml","keyword.xml-decl.xml"],regex:"(<\\?)(xml)(?=[\\s])",next:"xml_decl",caseInsensitive:!0},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)("+t+")",next:"processing_instruction"},{token:"comment.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"",next:"start"}],processing_instruction:[{token:"punctuation.instruction.xml",regex:"\\?>",next:"start"},{defaultToken:"instruction.xml"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.xml",regex:"-->",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:"(?:"+t+":)?"+t+""},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(<)("+n+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[n+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(|$))",next:n+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./css_highlight_rules").CssHighlightRules,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,u=e("./xml_highlight_rules").XmlHighlightRules,a=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),f=function(){u.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:.]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var n=a[t];return["meta.tag.punctuation."+(e=="<"?"":"end-")+"tag-open.xml","meta.tag"+(n?"."+n:"")+".tag-name.xml"]},regex:"(",next:"start"}]}),this.embedTagRules(s,"css-","style"),this.embedTagRules((new o({jsx:!1})).getRules(),"js-","script"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";function u(e,t){return e.type.lastIndexOf(t+".xml")>-1}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),a=function(){this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==""&&a!=="'"&&a!='"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,"attribute-value")||u(p,"string")))return{text:"",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,"tag-whitespace")||u(p,"whitespace"))p=h.stepBackward();var d=!c||c.match(/\s/);if(u(p,"attribute-equals")&&(d||c==">")||u(p,"decl-attribute-equals")&&(d||c=="?"))return{text:o+o,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,"tag-name")||u(f,"tag-whitespace")||u(f,"attribute-name")||u(f,"attribute-equals")||u(f,"attribute-value")))return;if(u(f,"reference.attribute-value"))return;if(u(f,"attribute-value")){var l=f.value.charAt(0);if(l=='"'||l=="'"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,"tag-name")){f=a.stepBackward();if(f.value=="<"){f=a.stepForward();break}}var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),"end-tag-open"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf("tag-close")!==-1){if(f.value=="/>")return;while(f&&f.type.indexOf("tag-name")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf("end-tag")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value==="-1}var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t=="markbeginend"?"end":"":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?"":this._findEndTagInLine(e,n,r.tagName,r.end.column)?"":"start":""},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i";break}}return r}if(l(s,"tag-close"))return r.selfClosing=s.value=="/>",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,"tag-open"))return n.closing=l(t,"end-tag-open"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,"tag-name")?n.tagName=t.value:l(t,"tag-close")&&(n.selfClosing=t.value=="/>",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"tag-name"))i=n.stepBackward();if(i)return i.value}function c(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,"attribute-name"))i=n.stepBackward();if(i)return i.value}var r=e("../token_iterator").TokenIterator,i=["accesskey","class","contenteditable","contextmenu","dir","draggable","dropzone","hidden","id","inert","itemid","itemprop","itemref","itemscope","itemtype","lang","spellcheck","style","tabindex","title","translate"],s=["onabort","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextmenu","oncuechange","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onload","onloadeddata","onloadedmetadata","onloadstart","onmousedown","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onpause","onplay","onplaying","onprogress","onratechange","onreset","onscroll","onseeked","onseeking","onselect","onshow","onstalled","onsubmit","onsuspend","ontimeupdate","onvolumechange","onwaiting"],o=i.concat(s),u={html:{manifest:1},head:{},title:{},base:{href:1,target:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{"text/css":1,"image/png":1,"image/jpeg":1,"image/gif":1},sizes:1},meta:{"http-equiv":{"content-type":1},name:{description:1,keywords:1},content:{"text/html; charset=UTF-8":1},charset:1},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},script:{charset:1,type:{"text/javascript":1},src:1,defer:1,async:1},noscript:{href:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},section:{},nav:{},article:{pubdate:1},aside:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},header:{},footer:{},address:{},main:{},p:{},hr:{},pre:{},blockquote:{cite:1},ol:{start:1,reversed:1},ul:{},li:{value:1},dl:{},dt:{},dd:{},figure:{},figcaption:{},div:{},a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},em:{},strong:{},small:{},s:{},cite:{},q:{cite:1},dfn:{},abbr:{},data:{},time:{datetime:1},code:{},"var":{},samp:{},kbd:{},sub:{},sup:{},i:{},b:{},u:{},mark:{},ruby:{},rt:{},rp:{},bdi:{},bdo:{},span:{},br:{},wbr:{},ins:{cite:1,datetime:1},del:{cite:1,datetime:1},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},iframe:{name:1,src:1,height:1,width:1,sandbox:{"allow-same-origin":1,"allow-top-navigation":1,"allow-forms":1,"allow-scripts":1},seamless:{seamless:1}},embed:{src:1,height:1,width:1,type:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},param:{name:1,value:1},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},source:{src:1,type:1,media:1},track:{kind:1,src:1,srclang:1,label:1,"default":1},canvas:{width:1,height:1},map:{name:1},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},svg:{},math:{},table:{summary:1},caption:{},colgroup:{span:1},col:{span:1},tbody:{},thead:{},tfoot:{},tr:{},td:{headers:1,rowspan:1,colspan:1},th:{headers:1,rowspan:1,colspan:1,scope:1},form:{"accept-charset":1,action:1,autocomplete:1,enctype:{"multipart/form-data":1,"application/x-www-form-urlencoded":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},fieldset:{disabled:1,form:1,name:1},legend:{},label:{form:1,"for":1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,"datetime-local":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{"application/x-www-form-urlencoded":1,"multipart/form-data":1,"text/plain":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},datalist:{},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},output:{"for":1,form:1,name:1},progress:{value:1,max:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},details:{open:1},summary:{},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},menu:{type:1,label:1},dialog:{open:1}},a=Object.keys(u),h=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);if(!i)return[];if(f(i,"tag-name")||f(i,"tag-open")||f(i,"end-tag-open"))return this.getTagCompletions(e,t,n,r);if(f(i,"tag-whitespace")||f(i,"attribute-name"))return this.getAttributeCompletions(e,t,n,r);if(f(i,"attribute-value"))return this.getAttributeValueCompletions(e,t,n,r);var s=t.getLine(n.row).substr(0,n.column);return/&[a-z]*$/i.test(s)?this.getHTMLEntityCompletions(e,t,n,r):[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:"tag",score:Number.MAX_VALUE}})},this.getAttributeCompletions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(Object.keys(u[i]))),s.map(function(e){return{caption:e,snippet:e+'="$0"',meta:"attribute",score:Number.MAX_VALUE}})},this.getAttributeValueCompletions=function(e,t,n,r){var i=l(t,n),s=c(t,n);if(!i)return[];var o=[];return i in u&&s in u[i]&&typeof u[i][s]=="object"&&(o=Object.keys(u[i][s])),o.map(function(e){return{caption:e,snippet:e,meta:"attribute value",score:Number.MAX_VALUE}})},this.getHTMLEntityCompletions=function(e,t,n,r){var i=["Aacute;","aacute;","Acirc;","acirc;","acute;","AElig;","aelig;","Agrave;","agrave;","alefsym;","Alpha;","alpha;","amp;","and;","ang;","Aring;","aring;","asymp;","Atilde;","atilde;","Auml;","auml;","bdquo;","Beta;","beta;","brvbar;","bull;","cap;","Ccedil;","ccedil;","cedil;","cent;","Chi;","chi;","circ;","clubs;","cong;","copy;","crarr;","cup;","curren;","Dagger;","dagger;","dArr;","darr;","deg;","Delta;","delta;","diams;","divide;","Eacute;","eacute;","Ecirc;","ecirc;","Egrave;","egrave;","empty;","emsp;","ensp;","Epsilon;","epsilon;","equiv;","Eta;","eta;","ETH;","eth;","Euml;","euml;","euro;","exist;","fnof;","forall;","frac12;","frac14;","frac34;","frasl;","Gamma;","gamma;","ge;","gt;","hArr;","harr;","hearts;","hellip;","Iacute;","iacute;","Icirc;","icirc;","iexcl;","Igrave;","igrave;","image;","infin;","int;","Iota;","iota;","iquest;","isin;","Iuml;","iuml;","Kappa;","kappa;","Lambda;","lambda;","lang;","laquo;","lArr;","larr;","lceil;","ldquo;","le;","lfloor;","lowast;","loz;","lrm;","lsaquo;","lsquo;","lt;","macr;","mdash;","micro;","middot;","minus;","Mu;","mu;","nabla;","nbsp;","ndash;","ne;","ni;","not;","notin;","nsub;","Ntilde;","ntilde;","Nu;","nu;","Oacute;","oacute;","Ocirc;","ocirc;","OElig;","oelig;","Ograve;","ograve;","oline;","Omega;","omega;","Omicron;","omicron;","oplus;","or;","ordf;","ordm;","Oslash;","oslash;","Otilde;","otilde;","otimes;","Ouml;","ouml;","para;","part;","permil;","perp;","Phi;","phi;","Pi;","pi;","piv;","plusmn;","pound;","Prime;","prime;","prod;","prop;","Psi;","psi;","quot;","radic;","rang;","raquo;","rArr;","rarr;","rceil;","rdquo;","real;","reg;","rfloor;","Rho;","rho;","rlm;","rsaquo;","rsquo;","sbquo;","Scaron;","scaron;","sdot;","sect;","shy;","Sigma;","sigma;","sigmaf;","sim;","spades;","sub;","sube;","sum;","sup;","sup1;","sup2;","sup3;","supe;","szlig;","Tau;","tau;","there4;","Theta;","theta;","thetasym;","thinsp;","THORN;","thorn;","tilde;","times;","trade;","Uacute;","uacute;","uArr;","uarr;","Ucirc;","ucirc;","Ugrave;","ugrave;","uml;","upsih;","Upsilon;","upsilon;","Uuml;","uuml;","weierp;","Xi;","xi;","Yacute;","yacute;","yen;","Yuml;","yuml;","Zeta;","zeta;","zwj;","zwnj;"];return i.map(function(e){return{caption:e,snippet:e,meta:"html entity",score:Number.MAX_VALUE}})}}).call(h.prototype),t.HtmlCompletions=h}),define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text").Mode,o=e("./javascript").Mode,u=e("./css").Mode,a=e("./html_highlight_rules").HtmlHighlightRules,f=e("./behaviour/xml").XmlBehaviour,l=e("./folding/html").FoldMode,c=e("./html_completions").HtmlCompletions,h=e("../worker/worker_client").WorkerClient,p=["area","base","br","col","embed","hr","img","input","keygen","link","meta","menuitem","param","source","track","wbr"],d=["li","dt","dd","p","rt","rp","optgroup","option","colgroup","td","th"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({"js-":o,"css-":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:""},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h(["ace"],"ace/mode/html_worker","Worker");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call("setOptions",[{context:this.fragmentContext}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/html"}.call(v.prototype),t.Mode=v}) \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/mode-javascript.js b/examples/SmartSwitch/data_src/js_css_src/mode-javascript.js new file mode 100644 index 0000000..6bad9f6 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/mode-javascript.js @@ -0,0 +1 @@ +ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var r=e.charAt(1)=="/"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:"meta.tag.punctuation."+(r==1?"":"end-")+"tag-open.xml",value:e.slice(0,r)},{type:"meta.tag.tag-name.xml",value:e.substr(r)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),f("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)n.unshift("start",t);else if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||e.jsx!=0)&&a.call(this);this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../worker/worker_client").WorkerClient,a=e("./behaviour/cstyle").CstyleBehaviour,f=e("./folding/cstyle").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(l.prototype),t.Mode=l}) \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/.babelrc b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/.babelrc new file mode 100644 index 0000000..377ca70 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["es2015"] +} \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/.eslintrc.js b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/.eslintrc.js new file mode 100644 index 0000000..5bebe58 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/.eslintrc.js @@ -0,0 +1,31 @@ +module.exports = { + "env": { + "browser": true, + "commonjs": true, + "es6": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "sourceType": "module" + }, + "rules": { + "indent": [ + "error", + "tab" + ], + "linebreak-style": [ + "error", + "windows" + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "always" + ], + "no-console": 0, + "no-undef": 0 + } +}; \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/.gitignore b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/.gitignore new file mode 100644 index 0000000..f949f35 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/.gitignore @@ -0,0 +1,30 @@ +# IDE files +.idea/ +.DS_Store + +# Build directories +build/ + +# Dependency directories +node_modules/ +jspm_packages/ + +# Lock files +yarn.lock +package-lock.json + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Yarn Integrity file +.yarn-integrity diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/.travis.yml b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/.travis.yml new file mode 100644 index 0000000..0fe294a --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "7" diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/LICENSE.md b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/LICENSE.md new file mode 100644 index 0000000..5506c2d --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/LICENSE.md @@ -0,0 +1,7 @@ +# Notifications license + +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. \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/__tests__/helpers.test.js b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/__tests__/helpers.test.js new file mode 100644 index 0000000..b97ad75 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/__tests__/helpers.test.js @@ -0,0 +1,104 @@ +const { partial, append, isString, createElement, createParagraph } = require('../src/helpers'); + +const addNumbers = (x, y) => x + y; + +const sum = (...numbers) => numbers.reduce((total, current) => total + current, 0); + +describe('Helpers', () => { + beforeEach(() => { + document.body.innerHTML = ''; + }); + + describe('Partial', () => { + it('should return a partially applied function', () => { + expect(typeof partial(addNumbers, 10)).toEqual('function'); + }); + + it('should execute function when partially applied function is called', () => { + expect(partial(addNumbers, 20)(10)).toEqual(30); + }); + + it('should gather argument', () => { + expect(partial(sum, 5, 10)(15, 20, 25)).toEqual(75); + }); + }); + + describe('Append', () => { + const container = document.createElement('div'); + document.body.appendChild(container); + + const elementToAppend = document.createElement('h1'); + elementToAppend.classList.add('heading'); + elementToAppend.innerText = 'working'; + + append(container, elementToAppend); + + const element = document.querySelector('.heading'); + expect(element); + + expect(element.innerText).toEqual('working'); + }); + + describe('Is string', () => { + expect(isString(1)).toEqual(false); + expect(isString(null)).toEqual(false); + expect(isString(undefined)).toEqual(false); + expect(isString({})).toEqual(false); + + expect(isString('')).toEqual(true); + expect(isString('a')).toEqual(true); + expect(isString('1')).toEqual(true); + expect(isString('some string')).toEqual(true); + }); + + describe('Create element', () => { + it('should create an element', () => { + expect(createElement('p')).toEqual(document.createElement('p')); + expect(createElement('h1')).toEqual(document.createElement('h1')); + expect(createElement('ul')).toEqual(document.createElement('ul')); + expect(createElement('li')).toEqual(document.createElement('li')); + expect(createElement('div')).toEqual(document.createElement('div')); + expect(createElement('span')).toEqual(document.createElement('span')); + }); + + it('should add class names', () => { + expect(createElement('div', 'someclass1', 'someclass2').classList.contains('someclass2')); + expect(createElement('p', 'para', 'test').classList.contains('para')); + + const mockUl = document.createElement('ul'); + mockUl.classList.add('nav'); + mockUl.classList.add('foo'); + + expect(createElement('ul', 'nav', 'foo').classList).toEqual(mockUl.classList); + }); + }); + + describe('Create paragraph', () => { + it('should create a paragraph', () => { + const p = document.createElement('p'); + p.innerText = 'Some text'; + expect(createParagraph()('Some text')).toEqual(p); + }); + + it('should add class names', () => { + const p = document.createElement('p'); + p.classList.add('body-text'); + p.classList.add('para'); + + expect(createParagraph('body-text', 'para')('')).toEqual(p); + }); + + it('should set inner text', () => { + const p = document.createElement('p'); + p.innerText = 'Hello world!'; + p.classList.add('text'); + + expect(createParagraph('text')('Hello world!')).toEqual(p); + }); + + it('should append to DOM', () => { + append(document.body, createParagraph('text')('hello')); + expect(document.querySelector('.text').innerText).toEqual('hello'); + }); + }); +}); diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/__tests__/index.tests.js b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/__tests__/index.tests.js new file mode 100644 index 0000000..9a69d16 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/__tests__/index.tests.js @@ -0,0 +1,144 @@ +require('../src/index'); + +describe('Notifications', () => { + beforeEach(() => { + document.body.innerHTML = ''; + }); + + it('should display a console warning if no title or message is passed', () => { + jest.spyOn(global.console, 'warn'); + window.createNotification()(); + expect(console.warn).toBeCalled(); + }); + + it('should render a default notification', () => { + const notification = window.createNotification(); + + const title = 'I am a title'; + + // Should initially not contain any notifications + expect(document.querySelectorAll('.ncf').length).toEqual(0); + + // Create a notification instance with a title + notification({ title }); + + // Should be one notification with the title passed in + expect(document.querySelectorAll('.ncf').length).toEqual(1); + expect(document.querySelector('.ncf-title').innerText).toEqual(title); + + // Create a second instance so there should now be two instances + notification({ title }); + expect(document.querySelectorAll('.ncf').length).toEqual(2); + }); + + it('should close on click if the option is enabled', () => { + const notification = window.createNotification({ + closeOnClick: true + }); + + // Create a notification with a generic body + notification({ message: 'some text' }); + + // Should be one notification instance + expect(document.querySelectorAll('.ncf').length).toEqual(1); + + // Click the notification + document.querySelector('.ncf').click(); + + expect(document.querySelectorAll('.ncf').length).toEqual(0); + }); + + it('should not close on click if the option is disabled', () => { + const notification = window.createNotification({ + closeOnClick: false + }); + + // Create a notification with a generic body + notification({ message: 'some text' }); + + // Should be one notification instance + expect(document.querySelectorAll('.ncf').length).toEqual(1); + + // Click the notification + document.querySelector('.ncf').click(); + + expect(document.querySelectorAll('.ncf').length).toEqual(1); + }); + + it('should set position class if valid', () => { + const validPositions = [ + 'nfc-top-left', + 'nfc-top-right', + 'nfc-bottom-left', + 'nfc-bottom-right' + ]; + + validPositions.forEach(position => { + const notification = window.createNotification({ + positionClass: position + }); + + notification({ title: 'title here' }); + + const className = `.${position}`; + + expect(document.querySelectorAll(className).length).toEqual(1); + + const container = document.querySelector(className); + expect(container.querySelectorAll('.ncf').length).toEqual(1); + }); + }); + + it('should revert to default to default position and warn if class is invalid', () => { + const notification = window.createNotification({ + positionClass: 'invalid-name' + }); + + jest.spyOn(global.console, 'warn'); + + notification({ message: 'test' }); + + expect(console.warn).toBeCalled(); + + expect(document.querySelectorAll('.nfc-top-right').length).toEqual(1); + }); + + it('should allow a custom onclick callback', () => { + let a = 'not clicked'; + + const notification = window.createNotification({ + onclick: () => { + a = 'clicked'; + } + }); + + notification({ message: 'click test' }); + + expect(a).toEqual('not clicked'); + + // Click the notification + document.querySelector('.ncf').click(); + + expect(a).toEqual('clicked'); + }); + + it('should show for correct duration', () => { + const notification = window.createNotification({ + showDuration: 500 + }); + + notification({ message: 'test' }); + + expect(document.querySelectorAll('.ncf').length).toEqual(1); + + // Should exist after 400ms + setTimeout(() => { + expect(document.querySelectorAll('.ncf').length).toEqual(1); + }, 400); + + // Should delete after 500ms + setTimeout(() => { + expect(document.querySelectorAll('.ncf').length).toEqual(0); + }); + }, 501); +}); diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/demo/demo.js b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/demo/demo.js new file mode 100644 index 0000000..d2f0fad --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/demo/demo.js @@ -0,0 +1,34 @@ +'use strict'; + +// Written using ES5 JS for browser support +window.addEventListener('DOMContentLoaded', function () { + var form = document.querySelector('form'); + + form.addEventListener('submit', function (e) { + e.preventDefault(); + + // Form elements + var title = form.querySelector('#title').value; + var message = form.querySelector('#message').value; + var position = form.querySelector('#position').value; + var duration = form.querySelector('#duration').value; + var theme = form.querySelector('#theme').value; + var closeOnClick = form.querySelector('#close').checked; + var displayClose = form.querySelector('#closeButton').checked; + + if(!message) { + message = 'You did not enter a message...'; + } + + window.createNotification({ + closeOnClick: closeOnClick, + displayCloseButton: displayClose, + positionClass: position, + showDuration: duration, + theme: theme + })({ + title: title, + message: message + }); + }); +}); \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/demo/index.html b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/demo/index.html new file mode 100644 index 0000000..d5dd6a6 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/demo/index.html @@ -0,0 +1,101 @@ + + + + +Notifications + + + + + + + + + +

Notifications

+
+ +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/demo/index_my.html b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/demo/index_my.html new file mode 100644 index 0000000..412e25d --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/demo/index_my.html @@ -0,0 +1,37 @@ + + + + +Notifications + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/dist/notifications.css b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/dist/notifications.css new file mode 100644 index 0000000..90d9e61 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/dist/notifications.css @@ -0,0 +1 @@ +.ncf-container{font-size:14px;box-sizing:border-box;position:fixed;z-index:999999}.ncf-container.nfc-top-left{top:12px;left:12px}.ncf-container.nfc-top-right{top:12px;right:12px}.ncf-container.nfc-bottom-right{bottom:12px;right:12px}.ncf-container.nfc-bottom-left{bottom:12px;left:12px}@media (max-width:767px){.ncf-container{left:0;right:0}}.ncf-container .ncf{background:#fff;transition:.3s ease;position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:30px;width:300px;border-radius:3px 3px 3px 3px;box-shadow:0 0 12px #999;color:#000;opacity:.9;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=90);filter:alpha(opacity=90);background-position:15px!important;background-repeat:no-repeat!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ncf-container .ncf:hover{box-shadow:0 0 12px #000;opacity:1;cursor:pointer}.ncf-container .ncf .ncf-title{font-weight:700;font-size:16px;text-align:left;margin-top:0;margin-bottom:6px;word-wrap:break-word}.ncf-container .ncf .nfc-message{margin:0;text-align:left;word-wrap:break-word}.ncf-container .success{background:#51a351;color:#fff;padding:15px 15px 15px 50px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==")}.ncf-container .info{background:#2f96b4;color:#fff;padding:15px 15px 15px 50px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=")}.ncf-container .warning{background:#f87400;color:#fff;padding:15px 15px 15px 50px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=")}.ncf-container .error{background:#bd362f;color:#fff;padding:15px 15px 15px 50px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=")!important}.ncf-container button{position:relative;right:-.3em;top:-.3em;float:right;font-weight:700;color:#fff;text-shadow:0 1px 0 #fff;opacity:.8;line-height:1;font-size:16px;padding:0;cursor:pointer;background:transparent;border:0}.ncf-container button:hover{opacity:1} \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/dist/notifications.css.gz b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/dist/notifications.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..b1e1ecb19e475a9932e331065120ac6a1bdbbc3c GIT binary patch literal 2487 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 literal 0 HcmV?d00001 diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/dist/notifications.js b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/dist/notifications.js new file mode 100644 index 0000000..34b339e --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/dist/notifications.js @@ -0,0 +1 @@ +!function(t){function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var e={};n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:i})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=0)}([function(t,n,e){e(1),t.exports=e(4)},function(t,n,e){"use strict";var i=Object.assign||function(t){for(var n=1;n-1}(t.positionClass)||(console.warn("An invalid notification position class has been specified."),t.positionClass=c.positionClass),t.onclick&&"function"!=typeof t.onclick&&(console.warn("Notification on click must be a function."),t.onclick=c.onclick),"number"!=typeof t.showDuration&&(t.showDuration=c.showDuration),(0,o.isString)(t.theme)&&0!==t.theme.length||(console.warn("Notification theme must be a string with length"),t.theme=c.theme),t}function e(t){return t=n(t),function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=n.title,i=n.message,c=r(t.positionClass);if(!e&&!i)return console.warn("Notification must contain a title or a message!");var a=(0,o.createElement)("div","ncf",t.theme);if(!0===t.closeOnClick&&a.addEventListener("click",function(){return c.removeChild(a)}),t.onclick&&a.addEventListener("click",function(n){return t.onclick(n)}),t.displayCloseButton){var s=(0,o.createElement)("button");s.innerText="X",!1===t.closeOnClick&&s.addEventListener("click",function(){return c.removeChild(a)}),(0,o.append)(a,s)}if((0,o.isString)(e)&&e.length&&(0,o.append)(a,(0,o.createParagraph)("ncf-title")(e)),(0,o.isString)(i)&&i.length&&(0,o.append)(a,(0,o.createParagraph)("nfc-message")(i)),(0,o.append)(c,a),t.showDuration&&t.showDuration>0){var l=setTimeout(function(){c.removeChild(a),0===c.querySelectorAll(".ncf").length&&document.body.removeChild(c)},t.showDuration);(t.closeOnClick||t.displayCloseButton)&&a.addEventListener("click",function(){return clearTimeout(l)})}}}function r(t){var n=document.querySelector("."+t);return n||(n=(0,o.createElement)("div","ncf-container",t),(0,o.append)(document.body,n)),n}var c={closeOnClick:!0,displayCloseButton:!1,positionClass:"nfc-top-right",onclick:!1,showDuration:3500,theme:"success"};t.createNotification?console.warn("Window already contains a create notification function. Have you included the script twice?"):t.createNotification=e}(window)},function(t,n,e){"use strict";!function(){function t(t){this.el=t;for(var n=t.className.replace(/^\s+|\s+$/g,"").split(/\s+/),i=0;i1?n-1:0),i=1;i1?n-1:0),i=1;i1?n-1:0),i=1;i1?n-1:0),c=1;c5Vq>IZAtX}(HR(-Gc&Xx)Hls%K5Z~S|s@SNGwK)+~bS?g_&PXwIp zt8#w0weECLL290oec!{|2cNC;*muHa(;@xN#c|p5)}9aB^K*w?Sm-4VOZ_D&(*kdw zDmwjpW1_{$BR4n2uildY{ zo$c%=?pEF?3%Qo_W!ssj?L15#!S5E%)cq-TCn|i6(_c59*udt3?$+-6``aIF^gYd! zS89D@qoIL}*6A~$uV?npl^3vM^;2=&A@irOETiwGi@-2~? zm#j=rniX24vmQC=M7qZFn?7=MU!Z*~_H_i~7pX2^^NE`pRut?E>ucGOb+KWB>%#5N zN~8jhJiC%_lr(jQw9)-V=DpgFc+OmVD^&b3>Gke+x3fQ+WgabAGSTx*|C%p`aXKqL zt8lxlsoKu8_fVA3rPVq=C3|D#xfj0N_^8YJ+Rg?4|IC`vyX(oDhe2%8?iJ=|zm{D; zXCLwW&As;$>rH0gJ9cZyhqo`;uHM_TWtE0h2KQV3U9%VJPh2i?GvWr%qxDASQ|_3( z=+ig4oSCxbvh>=N19!VzPn~vsG3NzyLuVJW#vRs7ABp)H;#oG|rPl<`44W^;eJRT4 zT+8?EcU_v-3y1i(1$lc(S-#o=D%#`I^C|0h`PYk0Lkw6k>WL(Y#$e4PwGv71Y13eQqk?Q=d| zJOA_Ir~AaEuFm-S_6`gdBjF`MAglnhMsw1XmJlYr67EY{M>6^9R z&FFCN%gX45Tx-0yzIY+@X8p_;3;!@(+^MVF+i^-HDE|6lr>DOjD18sr-r;(qim#!e ztB!a1zjYs9N_RN^e^BFa*H7Fq<&bLa`^S$8jO`~@JIF0c7rk)${XG$J{~y&4KTQ)} zqFWVXT_qW=XT0vH(M5Bg+v=HbCNIc*7GQ6_aQ{cwY1hKr1s1W%nJ=-J>tS(u@{|nW z(u4Wzx|LB}_s$hp-rFAWaFgYfqkIczH25-ZxA>E>)iY*)pp2pXuC#5R9i(+*9B%P# zRMwT2{~9Nlc=YBjfxxzR`J!v;-|W*{d+rFo)~`IS)~(HddlH^3joZC_`DD$_YaW&Q zO60oC_xs4d`-W=S#(&k}DNSyl#TZ-D%q||*_;^+RMpWpYxo7rpzHyN6c8Ib zt9$#teVM-VvXSs*_Omte#}}Sc%*tDrr|5p&d;T%)`NvBC?YlNTEWg^&=i#iF9W!)|Am?)#Mf+_&|?gTrf=ES~iZLQx+uTSle@AP}MZ%)U%gAGiNtv}k&dSZI>-7z_N@87p~<)2OKDR2Js zZpXbPX{`^B-mm$0@IBkxRW{v F7yw8IWkdh~ literal 0 HcmV?d00001 diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/package.json b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/package.json new file mode 100644 index 0000000..c9de18d --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/package.json @@ -0,0 +1,58 @@ +{ + "name": "styled-notifications", + "version": "1.0.1", + "description": "A simple JavaScript notifications library", + "main": "dist/notifications.js", + "scripts": { + "start": "webpack --watch", + "build": "webpack -p", + "test": "jest", + "prepare": "yarn run test && yarn run build" + }, + "pre-commit": [ + "prepare" + ], + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/JamieLivingstone/Notifications.git" + }, + "keywords": [ + "notification", + "popup", + "alert", + "toast" + ], + "author": "Jamie Livingstone", + "contributors": [ + { + "name": "Jamie Livingstone (https://github.com/JamieLivingstone)" + }, + { + "name": "cavebeavis (https://github.com/cavebeavis)" + } + ], + "license": "ISC", + "bugs": { + "url": "https://github.com/JamieLivingstone/Notifications/issues" + }, + "homepage": "https://github.com/JamieLivingstone/Notifications#readme", + "devDependencies": { + "babel-core": "^6.26.0", + "babel-jest": "^21.0.2", + "babel-loader": "^7.1.2", + "babel-preset-es2015": "^6.24.1", + "babel-preset-es2015-ie": "^6.7.0", + "css-loader": "^0.28.7", + "eslint": "^4.6.1", + "extract-text-webpack-plugin": "^3.0.0", + "jest": "^21.0.2", + "node-sass": "^4.5.3", + "pre-commit": "^1.2.2", + "sass-loader": "^6.0.6", + "style-loader": "^0.18.2", + "webpack": "^3.5.6" + } +} diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/readme.md b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/readme.md new file mode 100644 index 0000000..2bb4235 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/readme.md @@ -0,0 +1,82 @@ +[![Build Status](https://travis-ci.org/JamieLivingstone/Notifications.svg?branch=master)](https://travis-ci.org/JamieLivingstone/Notifications) + +# Notifications +**Notifications** is a Javascript library for notifications heavily inspired by toastr but does not require any dependencies such as jQuery. + +Works on browsers: IE9+, Safari, Chrome, FireFox, opera, edge + +## npm Installation +Do either +``` +npm i styled-notifications +``` +or add the following to your `package.json`: +``` +"dependencies": { + "styled-notifications": "^1.0.1" +}, +``` + +## Installation +Download files from the dist folder and then: +1. Link to notifications.css `` + +2. Link to notifications.js `` + +## Usage +### Custom options +- closeOnClick - Close the notification dialog when a click is invoked. +- displayCloseButton - Display a close button in the top right hand corner of the notification. +- positionClass - Set the position of the notification dialog. Accepted positions: ('nfc-top-right', 'nfc-bottom-right', 'nfc-bottom-left', 'nfc-top-left'). +- onClick - Call a callback function when a click is invoked on a notification. +- showDuration - Milliseconds the notification should be visible (0 for a notification that will remain open until clicked) +- theme - Set the position of the notification dialog. Accepted positions: ('success', 'info', 'warning', 'error', 'A custom clasName'). +``` +const defaultOptions = { + closeOnClick: true, + displayCloseButton: false, + positionClass: 'nfc-top-right', + onclick: false, + showDuration: 3500, + theme: 'success' +}; +``` + +## Example + +### Success notification +``` +// Create a success notification instance +const successNotification = window.createNotification({ + theme: 'success', + showDuration: 5000 +}); + +// Invoke success notification +successNotification({ + message: 'Simple success notification' +}); + +// Use the same instance but pass a title +successNotification({ + title: 'Working', + message: 'Simple success notification' +}); +``` + +### Information notification +``` +// Only running it once? Invoke immediately like this +window.createNotification({ + theme: 'success', + showDuration: 5000 +})({ + message: 'I have some information for you...' +}); +``` + +### Todo +~~1. Add to NPM~~ +2. Improve documentation +3. Further device testing +4. Add contributor instructions \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/helpers.js b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/helpers.js new file mode 100644 index 0000000..5a7de2b --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/helpers.js @@ -0,0 +1,24 @@ +export const partial = (fn, ...presetArgs) => (...laterArgs) => fn(...presetArgs, ...laterArgs); + +export const append = (el, ...children) => children.forEach(child => el.appendChild(child)); + +export const isString = input => typeof input === 'string'; + +export const createElement = (elementType, ...classNames) => { + const element = document.createElement(elementType); + + if(classNames.length) { + classNames.forEach(currentClass => element.classList.add(currentClass)); + } + + return element; +}; + +const setInnerText = (element, text) => { + element.innerText = text; + return element; +}; + +const createTextElement = (elementType, ...classNames) => partial(setInnerText, createElement(elementType, ...classNames)); + +export const createParagraph = (...classNames) => createTextElement('p', ...classNames); \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/index.js b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/index.js new file mode 100644 index 0000000..51512ba --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/index.js @@ -0,0 +1,148 @@ +'use strict'; + +// Polyfills +import './polyfills/classList'; + +import { + append, + createElement, + createParagraph, + isString +} from './helpers'; + +(function Notifications(window) { + // Default notification options + const defaultOptions = { + closeOnClick: true, + displayCloseButton: false, + positionClass: 'nfc-top-right', + onclick: false, + showDuration: 3500, + theme: 'success' + }; + + function configureOptions(options) { + // Create a copy of options and merge with defaults + options = Object.assign({}, defaultOptions, options); + + // Validate position class + function validatePositionClass(className) { + const validPositions = [ + 'nfc-top-left', + 'nfc-top-right', + 'nfc-bottom-left', + 'nfc-bottom-right' + ]; + + return validPositions.indexOf(className) > -1; + } + + // Verify position, if invalid reset to default + if (!validatePositionClass(options.positionClass)) { + console.warn('An invalid notification position class has been specified.'); + options.positionClass = defaultOptions.positionClass; + } + + // Verify onClick is a function + if (options.onclick && typeof options.onclick !== 'function') { + console.warn('Notification on click must be a function.'); + options.onclick = defaultOptions.onclick; + } + + // Verify show duration + if(typeof options.showDuration !== 'number') { + options.showDuration = defaultOptions.showDuration; + } + + // Verify theme + if(!isString(options.theme) || options.theme.length === 0) { + console.warn('Notification theme must be a string with length'); + options.theme = defaultOptions.theme; + } + + return options; + } + + // Create a new notification instance + function createNotification(options) { + // Validate options and set defaults + options = configureOptions(options); + + // Return a notification function + return function notification({ title, message } = {}) { + const container = createNotificationContainer(options.positionClass); + + if(!title && !message) { + return console.warn('Notification must contain a title or a message!'); + } + + // Create the notification wrapper + const notificationEl = createElement('div', 'ncf', options.theme); + + // Close on click + if(options.closeOnClick === true) { + notificationEl.addEventListener('click', () => container.removeChild(notificationEl)); + } + + // Custom click callback + if(options.onclick) { + notificationEl.addEventListener('click', (e) => options.onclick(e)); + } + + // Display close button + if(options.displayCloseButton) { + const closeButton = createElement('button'); + closeButton.innerText = 'X'; + + // Use the wrappers close on click to avoid useless event listeners + if(options.closeOnClick === false){ + closeButton.addEventListener('click', () =>container.removeChild(notificationEl)); + } + + append(notificationEl, closeButton); + } + + // Append title and message + isString(title) && title.length && append(notificationEl, createParagraph('ncf-title')(title)); + isString(message) && message.length && append(notificationEl, createParagraph('nfc-message')(message)); + + // Append to container + append(container, notificationEl); + + // Remove element after duration + if(options.showDuration && options.showDuration > 0) { + const timeout = setTimeout(() => { + container.removeChild(notificationEl); + + // Remove container if empty + if(container.querySelectorAll('.ncf').length === 0) { + document.body.removeChild(container); + } + }, options.showDuration); + + // If close on click is enabled and the user clicks, cancel timeout + if(options.closeOnClick || options.displayCloseButton) { + notificationEl.addEventListener('click', () => clearTimeout(timeout)); + } + } + }; + } + + function createNotificationContainer(position) { + let container = document.querySelector(`.${position}`); + + if(!container) { + container = createElement('div', 'ncf-container', position); + append(document.body, container); + } + + return container; + } + + // Add Notifications to window to make globally accessible + if (window.createNotification) { + console.warn('Window already contains a create notification function. Have you included the script twice?'); + } else { + window.createNotification = createNotification; + } +})(window); diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/polyfills/classList.js b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/polyfills/classList.js new file mode 100644 index 0000000..e040d70 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/polyfills/classList.js @@ -0,0 +1,68 @@ +(function () { + if (typeof window.Element === 'undefined' || 'classList' in document.documentElement) return; + + var prototype = Array.prototype, + push = prototype.push, + splice = prototype.splice, + join = prototype.join; + + function DOMTokenList(el) { + this.el = el; + // The className needs to be trimmed and split on whitespace + // to retrieve a list of classes. + var classes = el.className.replace(/^\s+|\s+$/g,'').split(/\s+/); + for (var i = 0; i < classes.length; i++) { + push.call(this, classes[i]); + } + } + + DOMTokenList.prototype = { + add: function(token) { + if(this.contains(token)) return; + push.call(this, token); + this.el.className = this.toString(); + }, + contains: function(token) { + return this.el.className.indexOf(token) != -1; + }, + item: function(index) { + return this[index] || null; + }, + remove: function(token) { + if (!this.contains(token)) return; + for (var i = 0; i < this.length; i++) { + if (this[i] == token) break; + } + splice.call(this, i, 1); + this.el.className = this.toString(); + }, + toString: function() { + return join.call(this, ' '); + }, + toggle: function(token) { + if (!this.contains(token)) { + this.add(token); + } else { + this.remove(token); + } + + return this.contains(token); + } + }; + + window.DOMTokenList = DOMTokenList; + + function defineElementGetter (obj, prop, getter) { + if (Object.defineProperty) { + Object.defineProperty(obj, prop,{ + get : getter + }); + } else { + obj.__defineGetter__(prop, getter); + } + } + + defineElementGetter(Element.prototype, 'classList', function () { + return new DOMTokenList(this); + }); +})(); \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/style.scss b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/style.scss new file mode 100644 index 0000000..733bfd5 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/src/style.scss @@ -0,0 +1,134 @@ +// Base colors +$success: #51A351; +$info: #2F96B4; +$warning: #f87400; +$error: #BD362F; +$grey: #999999; + +.ncf-container { + font-size: 14px; + box-sizing: border-box; + position: fixed; + z-index: 999999; + + &.nfc-top-left { + top: 12px; + left: 12px; + } + + &.nfc-top-right { + top: 12px; + right: 12px; + } + + &.nfc-bottom-right { + bottom: 12px; + right: 12px; + } + + &.nfc-bottom-left { + bottom: 12px; + left: 12px; + } + + @media (max-width: 767px) { + left: 0; + right: 0; + } + + .ncf { + background: #ffffff; + transition: .3s ease; + position: relative; + pointer-events: auto; + overflow: hidden; + margin: 0 0 6px; + padding: 30px; + width: 300px; + border-radius: 3px 3px 3px 3px; + box-shadow: 0 0 12px $grey; + color: #000000; + opacity: 0.9; + -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=90); + filter: alpha(opacity=90); + background-position: 15px center !important; + background-repeat: no-repeat !important; + + // Prevent annoying text selection + -webkit-user-select: none; /* Chrome all / Safari all */ + -moz-user-select: none; /* Firefox all */ + -ms-user-select: none; /* IE 10+ */ + user-select: none; /* Likely future */ + + &:hover { + box-shadow: 0 0 12px #000000; + opacity: 1; + cursor: pointer; + } + + .ncf-title { + font-weight: bold; + font-size: 16px; + text-align: left; + margin-top: 0; + margin-bottom: 6px; + word-wrap: break-word; + } + + .nfc-message { + margin: 0; + text-align: left; + word-wrap: break-word; + } + } + + // Themes + .success { + background: $success; + color: #ffffff; + padding: 15px 15px 15px 50px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg=="); + } + + .info { + background: $info; + color: #ffffff; + padding: 15px 15px 15px 50px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII="); + } + + .warning { + background: $warning; + color: #ffffff; + padding: 15px 15px 15px 50px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII="); + } + + .error { + background: $error; + color: #ffffff; + padding: 15px 15px 15px 50px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important; + } + + button { + position: relative; + right: -0.3em; + top: -0.3em; + float: right; + font-weight: bold; + color: #FFFFFF; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.8; + line-height: 1; + font-size: 16px; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + + &:hover { + opacity: 1; + } + } +} diff --git a/examples/SmartSwitch/data_src/js_css_src/styled-notifications/webpack.config.js b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/webpack.config.js new file mode 100644 index 0000000..36a4ca3 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/styled-notifications/webpack.config.js @@ -0,0 +1,41 @@ +const webpack = require('webpack'); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); + +const extractSass = new ExtractTextPlugin({ + filename: 'notifications.css', + disable: process.env.NODE_ENV === 'development' +}); + +module.exports = { + entry: ['./src/index.js', './src/style.scss'], + output: { + path: __dirname + '/dist', + filename: 'notifications.js' + }, + module: { + rules: [ + { + test: /\.js$/, + loader: 'babel-loader', + query: { + presets: ['babel-preset-es2015', 'es2015-ie'] + } + }, + { + test: /\.scss$/, + use: extractSass.extract({ + use: [{ + loader: 'css-loader' + }, { + loader: 'sass-loader' + }], + // use style-loader in development + fallback: 'style-loader' + }) + } + ], + }, + plugins: [ + extractSass + ] +}; \ No newline at end of file diff --git a/examples/SmartSwitch/data_src/js_css_src/worker-html.js b/examples/SmartSwitch/data_src/js_css_src/worker-html.js new file mode 100644 index 0000000..58a39b1 --- /dev/null +++ b/examples/SmartSwitch/data_src/js_css_src/worker-html.js @@ -0,0 +1 @@ +"no use strict";(function(e){function t(e,t){var n=e,r="";while(n){var i=t[n];if(typeof i=="string")return i+r;if(i)return i.location.replace(/\/*$/,"/")+(r||i.main||i.name);if(i===!1)return"";var s=n.lastIndexOf("/");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!="undefined"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:"error",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf("!")!==-1){var r=n.split("!");return e.normalizeModule(t,r[0])+"!"+e.normalizeModule(t,r[1])}if(n.charAt(0)=="."){var i=t.split("/").slice(0,-1).join("/");n=(i?i+"/":"")+n;while(n.indexOf(".")!==-1&&s!=n){var s=n;n=n.replace(/^\.\//,"").replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error("worker.js require() accepts only (parentId, id) as arguments");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log("unable to load "+i);var o=t(i,e.require.tlns);return o.slice(-3)!=".js"&&(o+=".js"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!="string"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!="function"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=["require","exports","module"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case"require":return i;case"exports":return e.exports;case"module":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require("ace/lib/event_emitter").EventEmitter,r=e.require("ace/lib/oop"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:"call",id:t,data:e})},this.emit=function(e,t){postMessage({type:"event",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error("Unknown command:"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require("ace/lib/es5-shim"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}})(this),define("ace/lib/oop",["require","exports","module"],function(e,t,n){"use strict";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define("ace/lib/lang",["require","exports","module"],function(e,t,n){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){var n="";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?tthis.end.column?1:0:ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var r={row:t+1,column:0};else if(this.start.row=0&&t.row=0&&t.column<=e[t.row].length}function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.action must be 'insert' or 'remove'"),t.lines instanceof Array||r(t,"delta.lines must be an Array"),(!t.start||!t.end)&&r(t,"delta.start/end must be an present");var n=t.start;i(e,t.start)||r(t,"delta.start must be contained in document");var s=t.end;t.action=="remove"&&!i(e,s)&&r(t,"delta.end must contained in document for 'remove' actions");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,"delta.range must match delta lines")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||"";switch(t.action){case"insert":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case"remove":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){"use strict";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;othis.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal("change",{old:i,value:r})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./apply_delta").applyDelta,s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,u=e("./anchor").Anchor,a=function(e){this.$lines=[""],e.length===0?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},"aaa".split(/a/).length===0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal("changeNewLineMode")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:"insert",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e0,r=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action=="insert";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal("change",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(""),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action=="insert"?"remove":"insert",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i=0;n--){var r=this.elements[n];if(r.localName===e)return!0;if(t(r))return!1}},l.prototype.push=function(e){this.elements.push(e)},l.prototype.pushHtmlElement=function(e){this.rootNode=e.node,this.push(e)},l.prototype.pushHeadElement=function(e){this.headElement=e.node,this.push(e)},l.prototype.pushBodyElement=function(e){this.bodyElement=e.node,this.push(e)},l.prototype.pop=function(){return this.elements.pop()},l.prototype.remove=function(e){this.elements.splice(this.elements.indexOf(e),1)},l.prototype.popUntilPopped=function(e){var t;do t=this.pop();while(t.localName!=e)},l.prototype.popUntilTableScopeMarker=function(){while(!s(this.top))this.pop()},l.prototype.popUntilTableBodyScopeMarker=function(){while(!o(this.top))this.pop()},l.prototype.popUntilTableRowScopeMarker=function(){while(!u(this.top))this.pop()},l.prototype.item=function(e){return this.elements[e]},l.prototype.contains=function(e){return this.elements.indexOf(e)!==-1},l.prototype.inScope=function(e){return this._inScope(e,r)},l.prototype.inListItemScope=function(e){return this._inScope(e,i)},l.prototype.inTableScope=function(e){return this._inScope(e,s)},l.prototype.inButtonScope=function(e){return this._inScope(e,a)},l.prototype.inSelectScope=function(e){return this._inScope(e,f)},l.prototype.hasNumberedHeaderElementInScope=function(){for(var e=this.elements.length-1;e>=0;e--){var t=this.elements[e];if(t.isNumberedHeader())return!0;if(r(t))return!1}},l.prototype.furthestBlockForFormattingElement=function(e){var t=null;for(var n=this.elements.length-1;n>=0;n--){var r=this.elements[n];if(r.node===e)break;r.isSpecial()&&(t=r)}return t},l.prototype.findIndex=function(e){for(var t=this.elements.length-1;t>=0;t--)if(this.elements[t].localName==e)return t;return-1},l.prototype.remove_openElements_until=function(e){var t=!1,n;while(!t)n=this.elements.pop(),t=e(n);return n},Object.defineProperty(l.prototype,"top",{get:function(){return this.elements[this.elements.length-1]}}),Object.defineProperty(l.prototype,"length",{get:function(){return this.elements.length}}),n.ElementStack=l},{}],2:[function(e,t,n){function o(e){return e>="0"&&e<="9"||e>="a"&&e<="z"||e>="A"&&e<="Z"}function u(e){return e>="0"&&e<="9"||e>="a"&&e<="f"||e>="A"&&e<="F"}function a(e){return e>="0"&&e<="9"}var r=e("html5-entities"),i=e("./InputStream").InputStream,s={};Object.keys(r).forEach(function(e){for(var t=0;t65535&&d<=1114111){d-=65536;var m=((1047552&d)>>10)+55296,g=(1023&d)+56320;f=String.fromCharCode(m,g)}else f=String.fromCharCode(d);return c!==";"&&(t._parseError("numeric-entity-without-semicolon"),e.unget(c)),f}return e.unget(l),t._parseError("expected-numeric-entity"),!1}if(c>="a"&&c<="z"||c>="A"&&c<="Z"){var y="";while(s[l]){r[l]&&(y=l);if(c==";")break;c=e.char();if(c===i.EOF)break;l+=c}return y?(f=r[y],c===";"||!n||!o(c)&&c!=="="?(l.length>y.length&&e.unget(l.substring(y.length)),c!==";"&&t._parseError("named-entity-without-semicolon"),f):(e.unget(l),!1)):(t._parseError("expected-named-entity"),e.unget(l),!1)}},f.replaceEntityNumbers=function(e){switch(e){case 0:return 65533;case 19:return 16;case 128:return 8364;case 129:return 129;case 130:return 8218;case 131:return 402;case 132:return 8222;case 133:return 8230;case 134:return 8224;case 135:return 8225;case 136:return 710;case 137:return 8240;case 138:return 352;case 139:return 8249;case 140:return 338;case 141:return 141;case 142:return 381;case 143:return 143;case 144:return 144;case 145:return 8216;case 146:return 8217;case 147:return 8220;case 148:return 8221;case 149:return 8226;case 150:return 8211;case 151:return 8212;case 152:return 732;case 153:return 8482;case 154:return 353;case 155:return 8250;case 156:return 339;case 157:return 157;case 158:return 382;case 159:return 376;default:if(e>=55296&&e<=57343||e>1114111)return 65533;if(e>=1&&e<=8||e>=14&&e<=31||e>=127&&e<=159||e>=64976&&e<=65007||e==11||e==65534||e==131070||e==3145726||e==196607||e==262142||e==262143||e==327678||e==327679||e==393214||e==393215||e==458750||e==458751||e==524286||e==524287||e==589822||e==589823||e==655358||e==655359||e==720894||e==720895||e==786430||e==786431||e==851966||e==851967||e==917502||e==917503||e==983038||e==983039||e==1048574||e==1048575||e==1114110||e==1114111)return e}},n.EntityParser=f},{"./InputStream":3,"html5-entities":12}],3:[function(e,t,n){function r(){this.data="",this.start=0,this.committed=0,this.eof=!1,this.lastLocation={line:0,column:0}}r.EOF=-1,r.DRAIN=-2,r.prototype={slice:function(){if(this.start>=this.data.length){if(!this.eof)throw r.DRAIN;return r.EOF}return this.data.slice(this.start,this.data.length)},"char":function(){if(!this.eof&&this.start>=this.data.length-1)throw r.DRAIN;if(this.start>=this.data.length)return r.EOF;var e=this.data[this.start++];return e==="\r"&&(e="\n"),e},advance:function(e){this.start+=e;if(this.start>=this.data.length){if(!this.eof)throw r.DRAIN;return r.EOF}this.committed>this.data.length/2&&(this.lastLocation=this.location(),this.data=this.data.slice(this.committed),this.start=this.start-this.committed,this.committed=0)},matchWhile:function(e){if(this.eof&&this.start>=this.data.length)return"";var t=new RegExp("^"+e+"+"),n=t.exec(this.slice());if(n){if(!this.eof&&n[0].length==this.data.length-this.start)throw r.DRAIN;return this.advance(n[0].length),n[0]}return""},matchUntil:function(e){var t,n;n=this.slice();if(n===r.EOF)return"";if(t=(new RegExp(e+(this.eof?"|$":""))).exec(n)){var i=this.data.slice(this.start,this.start+t.index);return this.advance(t.index),i.replace(/\r/g,"\n").replace(/\n{2,}/g,"\n")}throw r.DRAIN},append:function(e){this.data+=e},shift:function(e){if(!this.eof&&this.start+e>=this.data.length)throw r.DRAIN;if(this.eof&&this.start>=this.data.length)return r.EOF;var t=this.data.slice(this.start,this.start+e).toString();return this.advance(Math.min(e,this.data.length-this.start)),t},peek:function(e){if(!this.eof&&this.start+e>=this.data.length)throw r.DRAIN;return this.eof&&this.start>=this.data.length?r.EOF:this.data.slice(this.start,Math.min(this.start+e,this.data.length)).toString()},length:function(){return this.data.length-this.start-1},unget:function(e){if(e===r.EOF)return;this.start-=e.length},undo:function(){this.start=this.committed},commit:function(){this.committed=this.start},location:function(){var e=this.lastLocation.line,t=this.lastLocation.column,n=this.data.slice(0,this.committed),r=n.match(/\n/g),i=r?e+r.length:e,s=r?n.length-n.lastIndexOf("\n")-1:t+n.length;return{line:i,column:s}}},n.InputStream=r},{}],4:[function(e,t,n){function i(e,t,n,r){this.localName=t,this.namespaceURI=e,this.attributes=n,this.node=r}function s(e,t){for(var n=0;n-1},i.prototype.isFosterParenting=function(){return this.namespaceURI==="http://www.w3.org/1999/xhtml"?this.localName==="table"||this.localName==="tbody"||this.localName==="tfoot"||this.localName==="thead"||this.localName==="tr":!1},i.prototype.isNumberedHeader=function(){return this.namespaceURI==="http://www.w3.org/1999/xhtml"?this.localName==="h1"||this.localName==="h2"||this.localName==="h3"||this.localName==="h4"||this.localName==="h5"||this.localName==="h6":!1},i.prototype.isForeign=function(){return this.namespaceURI!="http://www.w3.org/1999/xhtml"},i.prototype.isHtmlIntegrationPoint=function(){if(this.namespaceURI==="http://www.w3.org/1998/Math/MathML"){if(this.localName!=="annotation-xml")return!1;var e=s(this,"encoding");return e?(e=e.toLowerCase(),e==="text/html"||e==="application/xhtml+xml"):!1}return this.namespaceURI==="http://www.w3.org/2000/svg"?this.localName==="foreignObject"||this.localName==="desc"||this.localName==="title":!1},i.prototype.isMathMLTextIntegrationPoint=function(){return this.namespaceURI==="http://www.w3.org/1998/Math/MathML"?this.localName==="mi"||this.localName==="mo"||this.localName==="mn"||this.localName==="ms"||this.localName==="mtext":!1},n.StackItem=i},{}],5:[function(e,t,n){function s(e){return e===" "||e==="\n"||e===" "||e==="\r"||e==="\f"}function o(e){return e>="A"&&e<="Z"||e>="a"&&e<="z"}function u(e){this._tokenHandler=e,this._state=u.DATA,this._inputStream=new r,this._currentToken=null,this._temporaryBuffer="",this._additionalAllowedCharacter=""}var r=e("./InputStream").InputStream,i=e("./EntityParser").EntityParser;u.prototype._parseError=function(e,t){this._tokenHandler.parseError(e,t)},u.prototype._emitToken=function(e){if(e.type==="StartTag")for(var t=1;t"&&r?(t._currentToken={type:"EndTag",name:this._temporaryBuffer,data:[],selfClosing:!1},t._emitCurrentToken(),t.setState(n)):o(i)?(this._temporaryBuffer+=i,e.commit()):(t._emitToken({type:"Characters",data:""&&r?(t._currentToken={type:"EndTag",name:this._temporaryBuffer,data:[],selfClosing:!1},t._emitCurrentToken(),t.setState(n)):o(i)?(this._temporaryBuffer+=i,e.commit()):(t._emitToken({type:"Characters",data:""&&n?(t._currentToken={type:"EndTag",name:"script",data:[],selfClosing:!1},t._emitCurrentToken()):o(r)?(this._temporaryBuffer+=r,e.commit()):(t._emitToken({type:"Characters",data:""?(t._emitToken({type:"Characters",data:">"}),t.setState(p)):i==="\0"?(t._parseError("invalid-codepoint"),t._emitToken({type:"Characters",data:"\ufffd"}),t.setState(N)):(t._emitToken({type:"Characters",data:i}),t.setState(N)),!0}function L(e){var n=e.char();return n==="/"?(this._temporaryBuffer="",t.setState(A)):o(n)?(t._emitToken({type:"Characters",data:"<"+n}),this._temporaryBuffer=n,t.setState(M)):(t._emitToken({type:"Characters",data:"<"}),e.unget(n),t.setState(N)),!0}function A(e){var n=e.char();return o(n)?(this._temporaryBuffer=n,t.setState(O)):(t._emitToken({type:"Characters",data:""&&r?(t._currentToken={type:"EndTag",name:"script",data:[],selfClosing:!1},t.setState(n),t._emitCurrentToken()):o(i)?(this._temporaryBuffer+=i,e.commit()):(t._emitToken({type:"Characters",data:""?(t._emitToken({type:"Characters",data:n}),this._temporaryBuffer.toLowerCase()==="script"?t.setState(_):t.setState(N)):o(n)?(t._emitToken({type:"Characters",data:n}),this._temporaryBuffer+=n,e.commit()):(e.unget(n),t.setState(N)),!0}function _(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-script"),e.unget(i),t.setState(n)):i==="-"?(t._emitToken({type:"Characters",data:"-"}),t.setState(D)):i==="<"?(t._emitToken({type:"Characters",data:"<"}),t.setState(H)):i==="\0"?(t._parseError("invalid-codepoint"),t._emitToken({type:"Characters",data:"\ufffd"}),e.commit()):(t._emitToken({type:"Characters",data:i}),e.commit()),!0}function D(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-script"),e.unget(i),t.setState(n)):i==="-"?(t._emitToken({type:"Characters",data:"-"}),t.setState(P)):i==="<"?(t._emitToken({type:"Characters",data:"<"}),t.setState(H)):i==="\0"?(t._parseError("invalid-codepoint"),t._emitToken({type:"Characters",data:"\ufffd"}),t.setState(_)):(t._emitToken({type:"Characters",data:i}),t.setState(_)),!0}function P(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-script"),e.unget(i),t.setState(n)):i==="-"?(t._emitToken({type:"Characters",data:"-"}),e.commit()):i==="<"?(t._emitToken({type:"Characters",data:"<"}),t.setState(H)):i===">"?(t._emitToken({type:"Characters",data:">"}),t.setState(p)):i==="\0"?(t._parseError("invalid-codepoint"),t._emitToken({type:"Characters",data:"\ufffd"}),t.setState(_)):(t._emitToken({type:"Characters",data:i}),t.setState(_)),!0}function H(e){var n=e.char();return n==="/"?(t._emitToken({type:"Characters",data:"/"}),this._temporaryBuffer="",t.setState(B)):(e.unget(n),t.setState(_)),!0}function B(e){var n=e.char();return s(n)||n==="/"||n===">"?(t._emitToken({type:"Characters",data:n}),this._temporaryBuffer.toLowerCase()==="script"?t.setState(N):t.setState(_)):o(n)?(t._emitToken({type:"Characters",data:n}),this._temporaryBuffer+=n,e.commit()):(e.unget(n),t.setState(_)),!0}function j(e){var i=e.char();return i===r.EOF?(t._parseError("bare-less-than-sign-at-eof"),t._emitToken({type:"Characters",data:"<"}),e.unget(i),t.setState(n)):o(i)?(t._currentToken={type:"StartTag",name:i.toLowerCase(),data:[]},t.setState(I)):i==="!"?t.setState(G):i==="/"?t.setState(F):i===">"?(t._parseError("expected-tag-name-but-got-right-bracket"),t._emitToken({type:"Characters",data:"<>"}),t.setState(n)):i==="?"?(t._parseError("expected-tag-name-but-got-question-mark"),e.unget(i),t.setState(Q)):(t._parseError("expected-tag-name"),t._emitToken({type:"Characters",data:"<"}),e.unget(i),t.setState(n)),!0}function F(e){var i=e.char();return i===r.EOF?(t._parseError("expected-closing-tag-but-got-eof"),t._emitToken({type:"Characters",data:""?(t._parseError("expected-closing-tag-but-got-right-bracket"),t.setState(n)):(t._parseError("expected-closing-tag-but-got-char",{data:i}),e.unget(i),t.setState(Q)),!0}function I(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-tag-name"),e.unget(i),t.setState(n)):s(i)?t.setState(q):o(i)?t._currentToken.name+=i.toLowerCase():i===">"?t._emitCurrentToken():i==="/"?t.setState(K):i==="\0"?(t._parseError("invalid-codepoint"),t._currentToken.name+="\ufffd"):t._currentToken.name+=i,e.commit(),!0}function q(e){var i=e.char();if(i===r.EOF)t._parseError("expected-attribute-name-but-got-eof"),e.unget(i),t.setState(n);else{if(s(i))return!0;o(i)?(t._currentToken.data.push({nodeName:i.toLowerCase(),nodeValue:""}),t.setState(R)):i===">"?t._emitCurrentToken():i==="/"?t.setState(K):i==="'"||i==='"'||i==="="||i==="<"?(t._parseError("invalid-character-in-attribute-name"),t._currentToken.data.push({nodeName:i,nodeValue:""}),t.setState(R)):i==="\0"?(t._parseError("invalid-codepoint"),t._currentToken.data.push({nodeName:"\ufffd",nodeValue:""})):(t._currentToken.data.push({nodeName:i,nodeValue:""}),t.setState(R))}return!0}function R(e){var i=e.char(),u=!0,a=!1;i===r.EOF?(t._parseError("eof-in-attribute-name"),e.unget(i),t.setState(n),a=!0):i==="="?t.setState(z):o(i)?(t._currentAttribute().nodeName+=i.toLowerCase(),u=!1):i===">"?a=!0:s(i)?t.setState(U):i==="/"?t.setState(K):i==="'"||i==='"'?(t._parseError("invalid-character-in-attribute-name"),t._currentAttribute().nodeName+=i,u=!1):i==="\0"?(t._parseError("invalid-codepoint"),t._currentAttribute().nodeName+="\ufffd"):(t._currentAttribute().nodeName+=i,u=!1);if(u){var f=t._currentToken.data,l=f[f.length-1];for(var c=f.length-2;c>=0;c--)if(l.nodeName===f[c].nodeName){t._parseError("duplicate-attribute",{name:l.nodeName}),l.nodeName=null;break}a&&t._emitCurrentToken()}else e.commit();return!0}function U(e){var i=e.char();if(i===r.EOF)t._parseError("expected-end-of-tag-but-got-eof"),e.unget(i),t.setState(n);else{if(s(i))return!0;i==="="?t.setState(z):i===">"?t._emitCurrentToken():o(i)?(t._currentToken.data.push({nodeName:i,nodeValue:""}),t.setState(R)):i==="/"?t.setState(K):i==="'"||i==='"'||i==="<"?(t._parseError("invalid-character-after-attribute-name"),t._currentToken.data.push({nodeName:i,nodeValue:""}),t.setState(R)):i==="\0"?(t._parseError("invalid-codepoint"),t._currentToken.data.push({nodeName:"\ufffd",nodeValue:""})):(t._currentToken.data.push({nodeName:i,nodeValue:""}),t.setState(R))}return!0}function z(e){var i=e.char();if(i===r.EOF)t._parseError("expected-attribute-value-but-got-eof"),e.unget(i),t.setState(n);else{if(s(i))return!0;i==='"'?t.setState(W):i==="&"?(t.setState(V),e.unget(i)):i==="'"?t.setState(X):i===">"?(t._parseError("expected-attribute-value-but-got-right-bracket"),t._emitCurrentToken()):i==="="||i==="<"||i==="`"?(t._parseError("unexpected-character-in-unquoted-attribute-value"),t._currentAttribute().nodeValue+=i,t.setState(V)):i==="\0"?(t._parseError("invalid-codepoint"),t._currentAttribute().nodeValue+="\ufffd"):(t._currentAttribute().nodeValue+=i,t.setState(V))}return!0}function W(e){var i=e.char();if(i===r.EOF)t._parseError("eof-in-attribute-value-double-quote"),e.unget(i),t.setState(n);else if(i==='"')t.setState(J);else if(i==="&")this._additionalAllowedCharacter='"',t.setState($);else if(i==="\0")t._parseError("invalid-codepoint"),t._currentAttribute().nodeValue+="\ufffd";else{var s=e.matchUntil('[\0"&]');i+=s,t._currentAttribute().nodeValue+=i}return!0}function X(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-attribute-value-single-quote"),e.unget(i),t.setState(n)):i==="'"?t.setState(J):i==="&"?(this._additionalAllowedCharacter="'",t.setState($)):i==="\0"?(t._parseError("invalid-codepoint"),t._currentAttribute().nodeValue+="\ufffd"):t._currentAttribute().nodeValue+=i+e.matchUntil("\0|['&]"),!0}function V(e){var i=e.char();if(i===r.EOF)t._parseError("eof-after-attribute-value"),e.unget(i),t.setState(n);else if(s(i))t.setState(q);else if(i==="&")this._additionalAllowedCharacter=">",t.setState($);else if(i===">")t._emitCurrentToken();else if(i==='"'||i==="'"||i==="="||i==="`"||i==="<")t._parseError("unexpected-character-in-unquoted-attribute-value"),t._currentAttribute().nodeValue+=i,e.commit();else if(i==="\0")t._parseError("invalid-codepoint"),t._currentAttribute().nodeValue+="\ufffd";else{var o=e.matchUntil("\0|[ \n \f \r&<>\"'=`]");o===r.EOF&&(t._parseError("eof-in-attribute-value-no-quotes"),t._emitCurrentToken()),e.commit(),t._currentAttribute().nodeValue+=i+o}return!0}function $(e){var n=i.consumeEntity(e,t,this._additionalAllowedCharacter);return this._currentAttribute().nodeValue+=n||"&",this._additionalAllowedCharacter==='"'?t.setState(W):this._additionalAllowedCharacter==="'"?t.setState(X):this._additionalAllowedCharacter===">"&&t.setState(V),!0}function J(e){var i=e.char();return i===r.EOF?(t._parseError("eof-after-attribute-value"),e.unget(i),t.setState(n)):s(i)?t.setState(q):i===">"?(t.setState(n),t._emitCurrentToken()):i==="/"?t.setState(K):(t._parseError("unexpected-character-after-attribute-value"),e.unget(i),t.setState(q)),!0}function K(e){var i=e.char();return i===r.EOF?(t._parseError("unexpected-eof-after-solidus-in-tag"),e.unget(i),t.setState(n)):i===">"?(t._currentToken.selfClosing=!0,t.setState(n),t._emitCurrentToken()):(t._parseError("unexpected-character-after-solidus-in-tag"),e.unget(i),t.setState(q)),!0}function Q(e){var r=e.matchUntil(">");return r=r.replace(/\u0000/g,"\ufffd"),e.char(),t._emitToken({type:"Comment",data:r}),t.setState(n),!0}function G(e){var n=e.shift(2);if(n==="--")t._currentToken={type:"Comment",data:""},t.setState(Z);else{var i=e.shift(5);if(i===r.EOF||n===r.EOF)return t._parseError("expected-dashes-or-doctype"),t.setState(Q),e.unget(n),!0;n+=i,n.toUpperCase()==="DOCTYPE"?(t._currentToken={type:"Doctype",name:"",publicId:null,systemId:null,forceQuirks:!1},t.setState(st)):t._tokenHandler.isCdataSectionAllowed()&&n==="[CDATA["?t.setState(Y):(t._parseError("expected-dashes-or-doctype"),e.unget(n),t.setState(Q))}return!0}function Y(e){var r=e.matchUntil("]]>");return e.shift(3),r&&t._emitToken({type:"Characters",data:r}),t.setState(n),!0}function Z(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-comment"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i==="-"?t.setState(et):i===">"?(t._parseError("incorrect-comment"),t._emitToken(t._currentToken),t.setState(n)):i==="\0"?(t._parseError("invalid-codepoint"),t._currentToken.data+="\ufffd"):(t._currentToken.data+=i,t.setState(tt)),!0}function et(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-comment"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i==="-"?t.setState(rt):i===">"?(t._parseError("incorrect-comment"),t._emitToken(t._currentToken),t.setState(n)):i==="\0"?(t._parseError("invalid-codepoint"),t._currentToken.data+="\ufffd"):(t._currentToken.data+="-"+i,t.setState(tt)),!0}function tt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-comment"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i==="-"?t.setState(nt):i==="\0"?(t._parseError("invalid-codepoint"),t._currentToken.data+="\ufffd"):(t._currentToken.data+=i,e.commit()),!0}function nt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-comment-end-dash"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i==="-"?t.setState(rt):i==="\0"?(t._parseError("invalid-codepoint"),t._currentToken.data+="-\ufffd",t.setState(tt)):(t._currentToken.data+="-"+i+e.matchUntil("\0|-"),e.char()),!0}function rt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-comment-double-dash"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===">"?(t._emitToken(t._currentToken),t.setState(n)):i==="!"?(t._parseError("unexpected-bang-after-double-dash-in-comment"),t.setState(it)):i==="-"?(t._parseError("unexpected-dash-after-double-dash-in-comment"),t._currentToken.data+=i):i==="\0"?(t._parseError("invalid-codepoint"),t._currentToken.data+="--\ufffd",t.setState(tt)):(t._parseError("unexpected-char-in-comment"),t._currentToken.data+="--"+i,t.setState(tt)),!0}function it(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-comment-end-bang-state"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===">"?(t._emitToken(t._currentToken),t.setState(n)):i==="-"?(t._currentToken.data+="--!",t.setState(nt)):(t._currentToken.data+="--!"+i,t.setState(tt)),!0}function st(e){var i=e.char();return i===r.EOF?(t._parseError("expected-doctype-name-but-got-eof"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)?t.setState(ot):(t._parseError("need-space-after-doctype"),e.unget(i),t.setState(ot)),!0}function ot(e){var i=e.char();return i===r.EOF?(t._parseError("expected-doctype-name-but-got-eof"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)||(i===">"?(t._parseError("expected-doctype-name-but-got-right-bracket"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):(o(i)&&(i=i.toLowerCase()),t._currentToken.name=i,t.setState(ut))),!0}function ut(e){var i=e.char();return i===r.EOF?(t._currentToken.forceQuirks=!0,e.unget(i),t._parseError("eof-in-doctype-name"),t.setState(n),t._emitCurrentToken()):s(i)?t.setState(at):i===">"?(t.setState(n),t._emitCurrentToken()):(o(i)&&(i=i.toLowerCase()),t._currentToken.name+=i,e.commit()),!0}function at(e){var i=e.char();if(i===r.EOF)t._currentToken.forceQuirks=!0,e.unget(i),t._parseError("eof-in-doctype"),t.setState(n),t._emitCurrentToken();else if(!s(i))if(i===">")t.setState(n),t._emitCurrentToken();else{if(["p","P"].indexOf(i)>-1){var o=[["u","U"],["b","B"],["l","L"],["i","I"],["c","C"]],u=o.every(function(t){return i=e.char(),t.indexOf(i)>-1});if(u)return t.setState(ft),!0}else if(["s","S"].indexOf(i)>-1){var o=[["y","Y"],["s","S"],["t","T"],["e","E"],["m","M"]],u=o.every(function(t){return i=e.char(),t.indexOf(i)>-1});if(u)return t.setState(vt),!0}e.unget(i),t._currentToken.forceQuirks=!0,i===r.EOF?(t._parseError("eof-in-doctype"),e.unget(i),t.setState(n),t._emitCurrentToken()):(t._parseError("expected-space-or-right-bracket-in-doctype",{data:i}),t.setState(wt))}return!0}function ft(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-doctype"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)?t.setState(lt):i==="'"||i==='"'?(t._parseError("unexpected-char-in-doctype"),e.unget(i),t.setState(lt)):(e.unget(i),t.setState(lt)),!0}function lt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-doctype"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)||(i==='"'?(t._currentToken.publicId="",t.setState(ct)):i==="'"?(t._currentToken.publicId="",t.setState(ht)):i===">"?(t._parseError("unexpected-end-of-doctype"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):(t._parseError("unexpected-char-in-doctype"),t._currentToken.forceQuirks=!0,t.setState(wt))),!0}function ct(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-doctype"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):i==='"'?t.setState(pt):i===">"?(t._parseError("unexpected-end-of-doctype"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):t._currentToken.publicId+=i,!0}function ht(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-doctype"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):i==="'"?t.setState(pt):i===">"?(t._parseError("unexpected-end-of-doctype"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):t._currentToken.publicId+=i,!0}function pt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-doctype"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)?t.setState(dt):i===">"?(t.setState(n),t._emitCurrentToken()):i==='"'?(t._parseError("unexpected-char-in-doctype"),t._currentToken.systemId="",t.setState(gt)):i==="'"?(t._parseError("unexpected-char-in-doctype"),t._currentToken.systemId="",t.setState(yt)):(t._parseError("unexpected-char-in-doctype"),t._currentToken.forceQuirks=!0,t.setState(wt)),!0}function dt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-doctype"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)||(i===">"?(t._emitCurrentToken(),t.setState(n)):i==='"'?(t._currentToken.systemId="",t.setState(gt)):i==="'"?(t._currentToken.systemId="",t.setState(yt)):(t._parseError("unexpected-char-in-doctype"),t._currentToken.forceQuirks=!0,t.setState(wt))),!0}function vt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-doctype"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)?t.setState(mt):i==="'"||i==='"'?(t._parseError("unexpected-char-in-doctype"),e.unget(i),t.setState(mt)):(e.unget(i),t.setState(mt)),!0}function mt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-doctype"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)||(i==='"'?(t._currentToken.systemId="",t.setState(gt)):i==="'"?(t._currentToken.systemId="",t.setState(yt)):i===">"?(t._parseError("unexpected-end-of-doctype"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),t.setState(n)):(t._parseError("unexpected-char-in-doctype"),t._currentToken.forceQuirks=!0,t.setState(wt))),!0}function gt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-doctype"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):i==='"'?t.setState(bt):i===">"?(t._parseError("unexpected-end-of-doctype"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),t.setState(n)):t._currentToken.systemId+=i,!0}function yt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-doctype"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):i==="'"?t.setState(bt):i===">"?(t._parseError("unexpected-end-of-doctype"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),t.setState(n)):t._currentToken.systemId+=i,!0}function bt(e){var i=e.char();return i===r.EOF?(t._parseError("eof-in-doctype"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)||(i===">"?(t._emitCurrentToken(),t.setState(n)):(t._parseError("unexpected-char-in-doctype"),t.setState(wt))),!0}function wt(e){var i=e.char();return i===r.EOF?(e.unget(i),t._emitCurrentToken(),t.setState(n)):i===">"&&(t._emitCurrentToken(),t.setState(n)),!0}u.DATA=n,u.RCDATA=f,u.RAWTEXT=c,u.SCRIPT_DATA=p,u.PLAINTEXT=h,this._state=u.DATA,this._inputStream.append(e),this._tokenHandler.startTokenization(this),this._inputStream.eof=!0;var t=this;while(this._state.call(this,this._inputStream));},Object.defineProperty(u.prototype,"lineNumber",{get:function(){return this._inputStream.location().line}}),Object.defineProperty(u.prototype,"columnNumber",{get:function(){return this._inputStream.location().column}}),n.Tokenizer=u},{"./EntityParser":2,"./InputStream":3}],6:[function(e,t,n){function c(e){return e===" "||e==="\n"||e===" "||e==="\r"||e==="\f"}function h(e){return c(e)||e==="\ufffd"}function p(e){for(var t=0;t2?e.parseError("expected-closing-tag-but-got-eof"):e.openElements.length==2&&e.openElements.item(1).localName!="body"?e.parseError("expected-closing-tag-but-got-eof"):e.context&&e.openElements.length>1},processComment:function(t){e.insertComment(t,e.currentStackItem().node)},processDoctype:function(t,n,r,i){e.parseError("unexpected-doctype")},processStartTag:function(e,t,n){if(this[this.start_tag_handlers[e]])this[this.start_tag_handlers[e]](e,t,n);else{if(!this[this.start_tag_handlers["-default"]])throw new Error("No handler found for "+e);this[this.start_tag_handlers["-default"]](e,t,n)}},processEndTag:function(e){if(this[this.end_tag_handlers[e]])this[this.end_tag_handlers[e]](e);else{if(!this[this.end_tag_handlers["-default"]])throw new Error("No handler found for "+e);this[this.end_tag_handlers["-default"]](e)}},startTagHtml:function(e,n){t.inBody.startTagHtml(e,n)}},t.initial=Object.create(t.base),t.initial.processEOF=function(){e.parseError("expected-doctype-but-got-eof"),this.anythingElse(),e.insertionMode.processEOF()},t.initial.processComment=function(t){e.insertComment(t,e.document)},t.initial.processDoctype=function(t,n,r,i){function s(e){return n.toLowerCase().indexOf(e)===0}e.insertDoctype(t||"",n||"",r||""),i||t!="html"||n!=null&&(["+//silmaril//dtd html pro v0r11 19970101//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//as//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html strict//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//ietf//dtd html//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//spyglass//dtd html 2.0 extended//","-//sq//dtd html 2.0 hotmetal + extensions//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//","html"].some(s)||["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"].indexOf(n.toLowerCase())>-1||r==null&&["-//w3c//dtd html 4.01 transitional//","-//w3c//dtd html 4.01 frameset//"].some(s))||r!=null&&r.toLowerCase()=="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"?(e.compatMode="quirks",e.parseError("quirky-doctype")):n!=null&&(["-//w3c//dtd xhtml 1.0 transitional//","-//w3c//dtd xhtml 1.0 frameset//"].some(s)||r!=null&&["-//w3c//dtd html 4.01 transitional//","-//w3c//dtd html 4.01 frameset//"].indexOf(n.toLowerCase())>-1)?(e.compatMode="limited quirks",e.parseError("almost-standards-doctype")):n=="-//W3C//DTD HTML 4.0//EN"&&(r==null||r=="http://www.w3.org/TR/REC-html40/strict.dtd")||n=="-//W3C//DTD HTML 4.01//EN"&&(r==null||r=="http://www.w3.org/TR/html4/strict.dtd")||n=="-//W3C//DTD XHTML 1.0 Strict//EN"&&r=="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"||n=="-//W3C//DTD XHTML 1.1//EN"&&r=="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"||(r!=null&&r!="about:legacy-compat"||n!=null)&&e.parseError("unknown-doctype"),e.setInsertionMode("beforeHTML")},t.initial.processCharacters=function(t){t.skipLeadingWhitespace();if(!t.length)return;e.parseError("expected-doctype-but-got-chars"),this.anythingElse(),e.insertionMode.processCharacters(t)},t.initial.processStartTag=function(t,n,r){e.parseError("expected-doctype-but-got-start-tag",{name:t}),this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.initial.processEndTag=function(t){e.parseError("expected-doctype-but-got-end-tag",{name:t}),this.anythingElse(),e.insertionMode.processEndTag(t)},t.initial.anythingElse=function(){e.compatMode="quirks",e.setInsertionMode("beforeHTML")},t.beforeHTML=Object.create(t.base),t.beforeHTML.start_tag_handlers={html:"startTagHtml","-default":"startTagOther"},t.beforeHTML.processEOF=function(){this.anythingElse(),e.insertionMode.processEOF()},t.beforeHTML.processComment=function(t){e.insertComment(t,e.document)},t.beforeHTML.processCharacters=function(t){t.skipLeadingWhitespace();if(!t.length)return;this.anythingElse(),e.insertionMode.processCharacters(t)},t.beforeHTML.startTagHtml=function(t,n,r){e.insertHtmlElement(n),e.setInsertionMode("beforeHead")},t.beforeHTML.startTagOther=function(t,n,r){this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.beforeHTML.processEndTag=function(t){this.anythingElse(),e.insertionMode.processEndTag(t)},t.beforeHTML.anythingElse=function(){e.insertHtmlElement(),e.setInsertionMode("beforeHead")},t.afterAfterBody=Object.create(t.base),t.afterAfterBody.start_tag_handlers={html:"startTagHtml","-default":"startTagOther"},t.afterAfterBody.processComment=function(t){e.insertComment(t,e.document)},t.afterAfterBody.processDoctype=function(e){t.inBody.processDoctype(e)},t.afterAfterBody.startTagHtml=function(e,n){t.inBody.startTagHtml(e,n)},t.afterAfterBody.startTagOther=function(t,n,r){e.parseError("unexpected-start-tag",{name:t}),e.setInsertionMode("inBody"),e.insertionMode.processStartTag(t,n,r)},t.afterAfterBody.endTagOther=function(t){e.parseError("unexpected-end-tag",{name:t}),e.setInsertionMode("inBody"),e.insertionMode.processEndTag(t)},t.afterAfterBody.processCharacters=function(n){if(!p(n.characters))return e.parseError("unexpected-char-after-body"),e.setInsertionMode("inBody"),e.insertionMode.processCharacters(n);t.inBody.processCharacters(n)},t.afterBody=Object.create(t.base),t.afterBody.end_tag_handlers={html:"endTagHtml","-default":"endTagOther"},t.afterBody.processComment=function(t){e.insertComment(t,e.openElements.rootNode)},t.afterBody.processCharacters=function(n){if(!p(n.characters))return e.parseError("unexpected-char-after-body"),e.setInsertionMode("inBody"),e.insertionMode.processCharacters(n);t.inBody.processCharacters(n)},t.afterBody.processStartTag=function(t,n,r){e.parseError("unexpected-start-tag-after-body",{name:t}),e.setInsertionMode("inBody"),e.insertionMode.processStartTag(t,n,r)},t.afterBody.endTagHtml=function(t){e.context?e.parseError("end-html-in-innerhtml"):e.setInsertionMode("afterAfterBody")},t.afterBody.endTagOther=function(t){e.parseError("unexpected-end-tag-after-body",{name:t}),e.setInsertionMode("inBody"),e.insertionMode.processEndTag(t)},t.afterFrameset=Object.create(t.base),t.afterFrameset.start_tag_handlers={html:"startTagHtml",noframes:"startTagNoframes","-default":"startTagOther"},t.afterFrameset.end_tag_handlers={html:"endTagHtml","-default":"endTagOther"},t.afterFrameset.processCharacters=function(t){var n=t.takeRemaining(),r="";for(var i=0;i1)e.openElements.pop();e.insertElement(t,n),e.setInsertionMode("inFrameset")}},t.inBody.startTagCloseP=function(t,n){e.openElements.inButtonScope("p")&&this.endTagP("p"),e.insertElement(t,n)},t.inBody.startTagPreListing=function(t,n){e.openElements.inButtonScope("p")&&this.endTagP("p"),e.insertElement(t,n),e.framesetOk=!1,e.shouldSkipLeadingNewline=!0},t.inBody.startTagForm=function(t,n){e.form?e.parseError("unexpected-start-tag",{name:t}):(e.openElements.inButtonScope("p")&&this.endTagP("p"),e.insertElement(t,n),e.form=e.currentStackItem())},t.inBody.startTagRpRt=function(t,n){e.openElements.inScope("ruby")&&(e.generateImpliedEndTags(),e.currentStackItem().localName!="ruby"&&e.parseError("unexpected-start-tag",{name:t})),e.insertElement(t,n)},t.inBody.startTagListItem=function(t,n){var r={li:["li"],dd:["dd","dt"],dt:["dd","dt"]},i=r[t],s=e.openElements;for(var o=s.length-1;o>=0;o--){var u=s.item(o);if(i.indexOf(u.localName)!=-1){e.insertionMode.processEndTag(u.localName);break}if(u.isSpecial()&&u.localName!=="p"&&u.localName!=="address"&&u.localName!=="div")break}e.openElements.inButtonScope("p")&&this.endTagP("p"),e.insertElement(t,n),e.framesetOk=!1},t.inBody.startTagPlaintext=function(t,n){e.openElements.inButtonScope("p")&&this.endTagP("p"),e.insertElement(t,n),e.tokenizer.setState(u.PLAINTEXT)},t.inBody.startTagHeading=function(t,n){e.openElements.inButtonScope("p")&&this.endTagP("p"),e.currentStackItem().isNumberedHeader()&&(e.parseError("unexpected-start-tag",{name:t}),e.popElement()),e.insertElement(t,n)},t.inBody.startTagA=function(t,n){var r=e.elementInActiveFormattingElements("a");r&&(e.parseError("unexpected-start-tag-implies-end-tag",{startName:"a",endName:"a"}),e.adoptionAgencyEndTag("a"),e.openElements.contains(r)&&e.openElements.remove(r),e.removeElementFromActiveFormattingElements(r)),e.reconstructActiveFormattingElements(),e.insertFormattingElement(t,n)},t.inBody.startTagFormatting=function(t,n){e.reconstructActiveFormattingElements(),e.insertFormattingElement(t,n)},t.inBody.startTagNobr=function(t,n){e.reconstructActiveFormattingElements(),e.openElements.inScope("nobr")&&(e.parseError("unexpected-start-tag-implies-end-tag",{startName:"nobr",endName:"nobr"}),this.processEndTag("nobr"),e.reconstructActiveFormattingElements()),e.insertFormattingElement(t,n)},t.inBody.startTagButton=function(t,n){e.openElements.inScope("button")?(e.parseError("unexpected-start-tag-implies-end-tag",{startName:"button",endName:"button"}),this.processEndTag("button"),e.insertionMode.processStartTag(t,n)):(e.framesetOk=!1,e.reconstructActiveFormattingElements(),e.insertElement(t,n))},t.inBody.startTagAppletMarqueeObject=function(t,n){e.reconstructActiveFormattingElements(),e.insertElement(t,n),e.activeFormattingElements.push(l),e.framesetOk=!1},t.inBody.endTagAppletMarqueeObject=function(t){e.openElements.inScope(t)?(e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError("end-tag-too-early",{name:t}),e.openElements.popUntilPopped(t),e.clearActiveFormattingElements()):e.parseError("unexpected-end-tag",{name:t})},t.inBody.startTagXmp=function(t,n){e.openElements.inButtonScope("p")&&this.processEndTag("p"),e.reconstructActiveFormattingElements(),e.processGenericRawTextStartTag(t,n),e.framesetOk=!1},t.inBody.startTagTable=function(t,n){e.compatMode!=="quirks"&&e.openElements.inButtonScope("p")&&this.processEndTag("p"),e.insertElement(t,n),e.setInsertionMode("inTable"),e.framesetOk=!1},t.inBody.startTagVoidFormatting=function(t,n){e.reconstructActiveFormattingElements(),e.insertSelfClosingElement(t,n),e.framesetOk=!1},t.inBody.startTagParamSourceTrack=function(t,n){e.insertSelfClosingElement(t,n)},t.inBody.startTagHr=function(t,n){e.openElements.inButtonScope("p")&&this.endTagP("p"),e.insertSelfClosingElement(t,n),e.framesetOk=!1},t.inBody.startTagImage=function(t,n){e.parseError("unexpected-start-tag-treated-as",{originalName:"image",newName:"img"}),this.processStartTag("img",n)},t.inBody.startTagInput=function(t,n){var r=e.framesetOk;this.startTagVoidFormatting(t,n);for(var i in n)if(n[i].nodeName=="type"){n[i].nodeValue.toLowerCase()=="hidden"&&(e.framesetOk=r);break}},t.inBody.startTagIsindex=function(t,n){e.parseError("deprecated-tag",{name:"isindex"}),e.selfClosingFlagAcknowledged=!0;if(e.form)return;var r=[],i=[],s="This is a searchable index. Enter search keywords: ";for(var o in n)switch(n[o].nodeName){case"action":r.push({nodeName:"action",nodeValue:n[o].nodeValue});break;case"prompt":s=n[o].nodeValue;break;case"name":break;default:i.push({nodeName:n[o].nodeName,nodeValue:n[o].nodeValue})}i.push({nodeName:"name",nodeValue:"isindex"}),this.processStartTag("form",r),this.processStartTag("hr"),this.processStartTag("label"),this.processCharacters(new m(s)),this.processStartTag("input",i),this.processEndTag("label"),this.processStartTag("hr"),this.processEndTag("form")},t.inBody.startTagTextarea=function(t,n){e.insertElement(t,n),e.tokenizer.setState(u.RCDATA),e.originalInsertionMode=e.insertionModeName,e.shouldSkipLeadingNewline=!0,e.framesetOk=!1,e.setInsertionMode("text")},t.inBody.startTagIFrame=function(t,n){e.framesetOk=!1,this.startTagRawText(t,n)},t.inBody.startTagRawText=function(t,n){e.processGenericRawTextStartTag(t,n)},t.inBody.startTagSelect=function(t,n){e.reconstructActiveFormattingElements(),e.insertElement(t,n),e.framesetOk=!1;var r=e.insertionModeName;r=="inTable"||r=="inCaption"||r=="inColumnGroup"||r=="inTableBody"||r=="inRow"||r=="inCell"?e.setInsertionMode("inSelectInTable"):e.setInsertionMode("inSelect")},t.inBody.startTagMisplaced=function(t,n){e.parseError("unexpected-start-tag-ignored",{name:t})},t.inBody.endTagMisplaced=function(t){e.parseError("unexpected-end-tag",{name:t})},t.inBody.endTagBr=function(t){e.parseError("unexpected-end-tag-treated-as",{originalName:"br",newName:"br element"}),e.reconstructActiveFormattingElements(),e.insertElement(t,[]),e.popElement()},t.inBody.startTagOptionOptgroup=function(t,n){e.currentStackItem().localName=="option"&&e.popElement(),e.reconstructActiveFormattingElements(),e.insertElement(t,n)},t.inBody.startTagOther=function(t,n){e.reconstructActiveFormattingElements(),e.insertElement(t,n)},t.inBody.endTagOther=function(t){var n;for(var r=e.openElements.length-1;r>0;r--){n=e.openElements.item(r);if(n.localName==t){e.generateImpliedEndTags(t),e.currentStackItem().localName!=t&&e.parseError("unexpected-end-tag",{name:t}),e.openElements.remove_openElements_until(function(e){return e===n});break}if(n.isSpecial()){e.parseError("unexpected-end-tag",{name:t});break}}},t.inBody.startTagMath=function(t,n,r){e.reconstructActiveFormattingElements(),n=e.adjustMathMLAttributes(n),n=e.adjustForeignAttributes(n),e.insertForeignElement(t,n,"http://www.w3.org/1998/Math/MathML",r)},t.inBody.startTagSVG=function(t,n,r){e.reconstructActiveFormattingElements(),n=e.adjustSVGAttributes(n),n=e.adjustForeignAttributes(n),e.insertForeignElement(t,n,"http://www.w3.org/2000/svg",r)},t.inBody.endTagP=function(t){e.openElements.inButtonScope("p")?(e.generateImpliedEndTags("p"),e.currentStackItem().localName!="p"&&e.parseError("unexpected-implied-end-tag",{name:"p"}),e.openElements.popUntilPopped(t)):(e.parseError("unexpected-end-tag",{name:"p"}),this.startTagCloseP("p",[]),this.endTagP("p"))},t.inBody.endTagBody=function(t){if(!e.openElements.inScope("body")){e.parseError("unexpected-end-tag",{name:t});return}e.currentStackItem().localName!="body"&&e.parseError("expected-one-end-tag-but-got-another",{expectedName:e.currentStackItem().localName,gotName:t}),e.setInsertionMode("afterBody")},t.inBody.endTagHtml=function(t){if(!e.openElements.inScope("body")){e.parseError("unexpected-end-tag",{name:t});return}e.currentStackItem().localName!="body"&&e.parseError("expected-one-end-tag-but-got-another",{expectedName:e.currentStackItem().localName,gotName:t}),e.setInsertionMode("afterBody"),e.insertionMode.processEndTag(t)},t.inBody.endTagBlock=function(t){e.openElements.inScope(t)?(e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError("end-tag-too-early",{name:t}),e.openElements.popUntilPopped(t)):e.parseError("unexpected-end-tag",{name:t})},t.inBody.endTagForm=function(t){var n=e.form;e.form=null,!n||!e.openElements.inScope(t)?e.parseError("unexpected-end-tag",{name:t}):(e.generateImpliedEndTags(),e.currentStackItem()!=n&&e.parseError("end-tag-too-early-ignored",{name:"form"}),e.openElements.remove(n))},t.inBody.endTagListItem=function(t){e.openElements.inListItemScope(t)?(e.generateImpliedEndTags(t),e.currentStackItem().localName!=t&&e.parseError("end-tag-too-early",{name:t}),e.openElements.popUntilPopped(t)):e.parseError("unexpected-end-tag",{name:t})},t.inBody.endTagHeading=function(t){if(!e.openElements.hasNumberedHeaderElementInScope()){e.parseError("unexpected-end-tag",{name:t});return}e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError("end-tag-too-early",{name:t}),e.openElements.remove_openElements_until(function(e){return e.isNumberedHeader()})},t.inBody.endTagFormatting=function(t,n){e.adoptionAgencyEndTag(t)||this.endTagOther(t,n)},t.inCaption=Object.create(t.base),t.inCaption.start_tag_handlers={html:"startTagHtml",caption:"startTagTableElement",col:"startTagTableElement",colgroup:"startTagTableElement",tbody:"startTagTableElement",td:"startTagTableElement",tfoot:"startTagTableElement",thead:"startTagTableElement",tr:"startTagTableElement","-default":"startTagOther"},t.inCaption.end_tag_handlers={caption:"endTagCaption",table:"endTagTable",body:"endTagIgnore",col:"endTagIgnore",colgroup:"endTagIgnore",html:"endTagIgnore",tbody:"endTagIgnore",td:"endTagIgnore",tfood:"endTagIgnore",thead:"endTagIgnore",tr:"endTagIgnore","-default":"endTagOther"},t.inCaption.processCharacters=function(e){t.inBody.processCharacters(e)},t.inCaption.startTagTableElement=function(t,n){e.parseError("unexpected-end-tag",{name:t});var r=!e.openElements.inTableScope("caption");e.insertionMode.processEndTag("caption"),r||e.insertionMode.processStartTag(t,n)},t.inCaption.startTagOther=function(e,n,r){t.inBody.processStartTag(e,n,r)},t.inCaption.endTagCaption=function(t){e.openElements.inTableScope("caption")?(e.generateImpliedEndTags(),e.currentStackItem().localName!="caption"&&e.parseError("expected-one-end-tag-but-got-another",{gotName:"caption",expectedName:e.currentStackItem().localName}),e.openElements.popUntilPopped("caption"),e.clearActiveFormattingElements(),e.setInsertionMode("inTable")):(r.ok(e.context),e.parseError("unexpected-end-tag",{name:t}))},t.inCaption.endTagTable=function(t){e.parseError("unexpected-end-table-in-caption");var n=!e.openElements.inTableScope("caption");e.insertionMode.processEndTag("caption"),n||e.insertionMode.processEndTag(t)},t.inCaption.endTagIgnore=function(t){e.parseError("unexpected-end-tag",{name:t})},t.inCaption.endTagOther=function(e){t.inBody.processEndTag(e)},t.inCell=Object.create(t.base),t.inCell.start_tag_handlers={html:"startTagHtml",caption:"startTagTableOther",col:"startTagTableOther",colgroup:"startTagTableOther",tbody:"startTagTableOther",td:"startTagTableOther",tfoot:"startTagTableOther",th:"startTagTableOther",thead:"startTagTableOther",tr:"startTagTableOther","-default":"startTagOther"},t.inCell.end_tag_handlers={td:"endTagTableCell",th:"endTagTableCell",body:"endTagIgnore",caption:"endTagIgnore",col:"endTagIgnore",colgroup:"endTagIgnore",html:"endTagIgnore",table:"endTagImply",tbody:"endTagImply",tfoot:"endTagImply",thead:"endTagImply",tr:"endTagImply","-default":"endTagOther"},t.inCell.processCharacters=function(e){t.inBody.processCharacters(e)},t.inCell.startTagTableOther=function(t,n,r){e.openElements.inTableScope("td")||e.openElements.inTableScope("th")?(this.closeCell(),e.insertionMode.processStartTag(t,n,r)):e.parseError("unexpected-start-tag",{name:t})},t.inCell.startTagOther=function(e,n,r){t.inBody.processStartTag(e,n,r)},t.inCell.endTagTableCell=function(t){e.openElements.inTableScope(t)?(e.generateImpliedEndTags(t),e.currentStackItem().localName!=t.toLowerCase()?(e.parseError("unexpected-cell-end-tag",{name:t}),e.openElements.popUntilPopped(t)):e.popElement(),e.clearActiveFormattingElements(),e.setInsertionMode("inRow")):e.parseError("unexpected-end-tag",{name:t})},t.inCell.endTagIgnore=function(t){e.parseError("unexpected-end-tag",{name:t})},t.inCell.endTagImply=function(t){e.openElements.inTableScope(t)?(this.closeCell(),e.insertionMode.processEndTag(t)):e.parseError("unexpected-end-tag",{name:t})},t.inCell.endTagOther=function(e){t.inBody.processEndTag(e)},t.inCell.closeCell=function(){e.openElements.inTableScope("td")?this.endTagTableCell("td"):e.openElements.inTableScope("th")&&this.endTagTableCell("th")},t.inColumnGroup=Object.create(t.base),t.inColumnGroup.start_tag_handlers={html:"startTagHtml",col:"startTagCol","-default":"startTagOther"},t.inColumnGroup.end_tag_handlers={colgroup:"endTagColgroup",col:"endTagCol","-default":"endTagOther"},t.inColumnGroup.ignoreEndTagColgroup=function(){return e.currentStackItem().localName=="html"},t.inColumnGroup.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;var r=this.ignoreEndTagColgroup();this.endTagColgroup("colgroup"),r||e.insertionMode.processCharacters(t)},t.inColumnGroup.startTagCol=function(t,n){e.insertSelfClosingElement(t,n)},t.inColumnGroup.startTagOther=function(t,n,r){var i=this.ignoreEndTagColgroup();this.endTagColgroup("colgroup"),i||e.insertionMode.processStartTag(t,n,r)},t.inColumnGroup.endTagColgroup=function(t){this.ignoreEndTagColgroup()?(r.ok(e.context),e.parseError("unexpected-end-tag",{name:t})):(e.popElement(),e.setInsertionMode("inTable"))},t.inColumnGroup.endTagCol=function(t){e.parseError("no-end-tag",{name:"col"})},t.inColumnGroup.endTagOther=function(t){var n=this.ignoreEndTagColgroup();this.endTagColgroup("colgroup"),n||e.insertionMode.processEndTag(t)},t.inForeignContent=Object.create(t.base),t.inForeignContent.processStartTag=function(t,n,r){if(["b","big","blockquote","body","br","center","code","dd","div","dl","dt","em","embed","h1","h2","h3","h4","h5","h6","head","hr","i","img","li","listing","menu","meta","nobr","ol","p","pre","ruby","s","small","span","strong","strike","sub","sup","table","tt","u","ul","var"].indexOf(t)!=-1||t=="font"&&n.some(function(e){return["color","face","size"].indexOf(e.nodeName)>=0})){e.parseError("unexpected-html-element-in-foreign-content",{name:t});while(e.currentStackItem().isForeign()&&!e.currentStackItem().isHtmlIntegrationPoint()&&!e.currentStackItem().isMathMLTextIntegrationPoint())e.openElements.pop();e.insertionMode.processStartTag(t,n,r);return}e.currentStackItem().namespaceURI=="http://www.w3.org/1998/Math/MathML"&&(n=e.adjustMathMLAttributes(n)),e.currentStackItem().namespaceURI=="http://www.w3.org/2000/svg"&&(t=e.adjustSVGTagNameCase(t),n=e.adjustSVGAttributes(n)),n=e.adjustForeignAttributes(n),e.insertForeignElement(t,n,e.currentStackItem().namespaceURI,r)},t.inForeignContent.processEndTag=function(t){var n=e.currentStackItem(),r=e.openElements.length-1;n.localName.toLowerCase()!=t&&e.parseError("unexpected-end-tag",{name:t});for(;;){if(r===0)break;if(n.localName.toLowerCase()==t){while(e.openElements.pop()!=n);break}r-=1,n=e.openElements.item(r);if(n.isForeign())continue;e.insertionMode.processEndTag(t);break}},t.inForeignContent.processCharacters=function(t){var n=t.takeRemaining();n=n.replace(/\u0000/g,function(t,n){return e.parseError("invalid-codepoint"),"\ufffd"}),e.framesetOk&&!d(n)&&(e.framesetOk=!1),e.insertText(n)},t.inHeadNoscript=Object.create(t.base),t.inHeadNoscript.start_tag_handlers={html:"startTagHtml",basefont:"startTagBasefontBgsoundLinkMetaNoframesStyle",bgsound:"startTagBasefontBgsoundLinkMetaNoframesStyle",link:"startTagBasefontBgsoundLinkMetaNoframesStyle",meta:"startTagBasefontBgsoundLinkMetaNoframesStyle",noframes:"startTagBasefontBgsoundLinkMetaNoframesStyle",style:"startTagBasefontBgsoundLinkMetaNoframesStyle",head:"startTagHeadNoscript",noscript:"startTagHeadNoscript","-default":"startTagOther"},t.inHeadNoscript.end_tag_handlers={noscript:"endTagNoscript",br:"endTagBr","-default":"endTagOther"},t.inHeadNoscript.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;e.parseError("unexpected-char-in-frameset"),this.anythingElse(),e.insertionMode.processCharacters(t)},t.inHeadNoscript.processComment=function(e){t.inHead.processComment(e)},t.inHeadNoscript.startTagBasefontBgsoundLinkMetaNoframesStyle=function(e,n){t.inHead.processStartTag(e,n)},t.inHeadNoscript.startTagHeadNoscript=function(t,n){e.parseError("unexpected-start-tag-in-frameset",{name:t})},t.inHeadNoscript.startTagOther=function(t,n){e.parseError("unexpected-start-tag-in-frameset",{name:t}),this.anythingElse(),e.insertionMode.processStartTag(t,n)},t.inHeadNoscript.endTagBr=function(t,n){e.parseError("unexpected-end-tag-in-frameset",{name:t}),this.anythingElse(),e.insertionMode.processEndTag(t,n)},t.inHeadNoscript.endTagNoscript=function(t,n){e.popElement(),e.setInsertionMode("inHead")},t.inHeadNoscript.endTagOther=function(t,n){e.parseError("unexpected-end-tag-in-frameset",{name:t})},t.inHeadNoscript.anythingElse=function(){e.popElement(),e.setInsertionMode("inHead")},t.inFrameset=Object.create(t.base),t.inFrameset.start_tag_handlers={html:"startTagHtml",frameset:"startTagFrameset",frame:"startTagFrame",noframes:"startTagNoframes","-default":"startTagOther"},t.inFrameset.end_tag_handlers={frameset:"endTagFrameset",noframes:"endTagNoframes","-default":"endTagOther"},t.inFrameset.processCharacters=function(t){e.parseError("unexpected-char-in-frameset")},t.inFrameset.startTagFrameset=function(t,n){e.insertElement(t,n)},t.inFrameset.startTagFrame=function(t,n){e.insertSelfClosingElement(t,n)},t.inFrameset.startTagNoframes=function(e,n){t.inBody.processStartTag(e,n)},t.inFrameset.startTagOther=function(t,n){e.parseError("unexpected-start-tag-in-frameset",{name:t})},t.inFrameset.endTagFrameset=function(t,n){e.currentStackItem().localName=="html"?e.parseError("unexpected-frameset-in-frameset-innerhtml"):e.popElement(),!e.context&&e.currentStackItem().localName!="frameset"&&e.setInsertionMode("afterFrameset")},t.inFrameset.endTagNoframes=function(e){t.inBody.processEndTag(e)},t.inFrameset.endTagOther=function(t){e.parseError("unexpected-end-tag-in-frameset",{name:t})},t.inTable=Object.create(t.base),t.inTable.start_tag_handlers={html:"startTagHtml",caption:"startTagCaption",colgroup:"startTagColgroup",col:"startTagCol",table:"startTagTable",tbody:"startTagRowGroup",tfoot:"startTagRowGroup",thead:"startTagRowGroup",td:"startTagImplyTbody",th:"startTagImplyTbody",tr:"startTagImplyTbody",style:"startTagStyleScript",script:"startTagStyleScript",input:"startTagInput",form:"startTagForm","-default":"startTagOther"},t.inTable.end_tag_handlers={table:"endTagTable",body:"endTagIgnore",caption:"endTagIgnore",col:"endTagIgnore",colgroup:"endTagIgnore",html:"endTagIgnore",tbody:"endTagIgnore",td:"endTagIgnore",tfoot:"endTagIgnore",th:"endTagIgnore",thead:"endTagIgnore",tr:"endTagIgnore","-default":"endTagOther"},t.inTable.processCharacters=function(n){if(e.currentStackItem().isFosterParenting()){var r=e.insertionModeName;e.setInsertionMode("inTableText"),e.originalInsertionMode=r,e.insertionMode.processCharacters(n)}else e.redirectAttachToFosterParent=!0,t.inBody.processCharacters(n),e.redirectAttachToFosterParent=!1},t.inTable.startTagCaption=function(t,n){e.openElements.popUntilTableScopeMarker(),e.activeFormattingElements.push(l),e.insertElement(t,n),e.setInsertionMode("inCaption")},t.inTable.startTagColgroup=function(t,n){e.openElements.popUntilTableScopeMarker(),e.insertElement(t,n),e.setInsertionMode("inColumnGroup")},t.inTable.startTagCol=function(t,n){this.startTagColgroup("colgroup",[]),e.insertionMode.processStartTag(t,n)},t.inTable.startTagRowGroup=function(t,n){e.openElements.popUntilTableScopeMarker(),e.insertElement(t,n),e.setInsertionMode("inTableBody")},t.inTable.startTagImplyTbody=function(t,n){this.startTagRowGroup("tbody",[]),e.insertionMode.processStartTag(t,n)},t.inTable.startTagTable=function(t,n){e.parseError("unexpected-start-tag-implies-end-tag",{startName:"table",endName:"table"}),e.insertionMode.processEndTag("table"),e.context||e.insertionMode.processStartTag(t,n)},t.inTable.startTagStyleScript=function(e,n){t.inHead.processStartTag(e,n)},t.inTable.startTagInput=function(t,n){for(var r in n)if(n[r].nodeName.toLowerCase()=="type"){if(n[r].nodeValue.toLowerCase()=="hidden"){e.parseError("unexpected-hidden-input-in-table"),e.insertElement(t,n),e.openElements.pop();return}break}this.startTagOther(t,n)},t.inTable.startTagForm=function(t,n){e.parseError("unexpected-form-in-table"),e.form||(e.insertElement(t,n),e.form=e.currentStackItem(),e.openElements.pop())},t.inTable.startTagOther=function(n,r,i){e.parseError("unexpected-start-tag-implies-table-voodoo",{name:n}),e.redirectAttachToFosterParent=!0,t.inBody.processStartTag(n,r,i),e.redirectAttachToFosterParent=!1},t.inTable.endTagTable=function(t){e.openElements.inTableScope(t)?(e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError("end-tag-too-early-named",{gotName:"table",expectedName:e.currentStackItem().localName}),e.openElements.popUntilPopped("table"),e.resetInsertionMode()):(r.ok(e.context),e.parseError("unexpected-end-tag",{name:t}))},t.inTable.endTagIgnore=function(t){e.parseError("unexpected-end-tag",{name:t})},t.inTable.endTagOther=function(n){e.parseError("unexpected-end-tag-implies-table-voodoo",{name:n}),e.redirectAttachToFosterParent=!0,t.inBody.processEndTag(n),e.redirectAttachToFosterParent=!1},t.inTableText=Object.create(t.base),t.inTableText.flushCharacters=function(){var t=e.pendingTableCharacters.join("");p(t)?e.insertText(t):(e.redirectAttachToFosterParent=!0,e.reconstructActiveFormattingElements(),e.insertText(t),e.framesetOk=!1,e.redirectAttachToFosterParent=!1),e.pendingTableCharacters=[]},t.inTableText.processComment=function(t){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processComment(t)},t.inTableText.processEOF=function(t){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processEOF()},t.inTableText.processCharacters=function(t){var n=t.takeRemaining();n=n.replace(/\u0000/g,function(t,n){return e.parseError("invalid-codepoint"),""});if(!n)return;e.pendingTableCharacters.push(n)},t.inTableText.processStartTag=function(t,n,r){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processStartTag(t,n,r)},t.inTableText.processEndTag=function(t,n){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processEndTag(t,n)},t.inTableBody=Object.create(t.base),t.inTableBody.start_tag_handlers={html:"startTagHtml",tr:"startTagTr",td:"startTagTableCell",th:"startTagTableCell",caption:"startTagTableOther",col:"startTagTableOther",colgroup:"startTagTableOther",tbody:"startTagTableOther",tfoot:"startTagTableOther",thead:"startTagTableOther","-default":"startTagOther"},t.inTableBody.end_tag_handlers={table:"endTagTable",tbody:"endTagTableRowGroup",tfoot:"endTagTableRowGroup",thead:"endTagTableRowGroup",body:"endTagIgnore",caption:"endTagIgnore",col:"endTagIgnore",colgroup:"endTagIgnore",html:"endTagIgnore",td:"endTagIgnore",th:"endTagIgnore",tr:"endTagIgnore","-default":"endTagOther"},t.inTableBody.processCharacters=function(e){t.inTable.processCharacters(e)},t.inTableBody.startTagTr=function(t,n){e.openElements.popUntilTableBodyScopeMarker(),e.insertElement(t,n),e.setInsertionMode("inRow")},t.inTableBody.startTagTableCell=function(t,n){e.parseError("unexpected-cell-in-table-body",{name:t}),this.startTagTr("tr",[]),e.insertionMode.processStartTag(t,n)},t.inTableBody.startTagTableOther=function(t,n){e.openElements.inTableScope("tbody")||e.openElements.inTableScope("thead")||e.openElements.inTableScope("tfoot")?(e.openElements.popUntilTableBodyScopeMarker(),this.endTagTableRowGroup(e.currentStackItem().localName),e.insertionMode.processStartTag(t,n)):e.parseError("unexpected-start-tag",{name:t})},t.inTableBody.startTagOther=function(e,n){t.inTable.processStartTag(e,n)},t.inTableBody.endTagTableRowGroup=function(t){e.openElements.inTableScope(t)?(e.openElements.popUntilTableBodyScopeMarker(),e.popElement(),e.setInsertionMode("inTable")):e.parseError("unexpected-end-tag-in-table-body",{name:t})},t.inTableBody.endTagTable=function(t){e.openElements.inTableScope("tbody")||e.openElements.inTableScope("thead")||e.openElements.inTableScope("tfoot")?(e.openElements.popUntilTableBodyScopeMarker(),this.endTagTableRowGroup(e.currentStackItem().localName),e.insertionMode.processEndTag(t)):e.parseError("unexpected-end-tag",{name:t})},t.inTableBody.endTagIgnore=function(t){e.parseError("unexpected-end-tag-in-table-body",{name:t})},t.inTableBody.endTagOther=function(e){t.inTable.processEndTag(e)},t.inSelect=Object.create(t.base),t.inSelect.start_tag_handlers={html:"startTagHtml",option:"startTagOption",optgroup:"startTagOptgroup",select:"startTagSelect",input:"startTagInput",keygen:"startTagInput",textarea:"startTagInput",script:"startTagScript","-default":"startTagOther"},t.inSelect.end_tag_handlers={option:"endTagOption",optgroup:"endTagOptgroup",select:"endTagSelect",caption:"endTagTableElements",table:"endTagTableElements",tbody:"endTagTableElements",tfoot:"endTagTableElements",thead:"endTagTableElements",tr:"endTagTableElements",td:"endTagTableElements",th:"endTagTableElements","-default":"endTagOther"},t.inSelect.processCharacters=function(t){var n=t.takeRemaining();n=n.replace(/\u0000/g,function(t,n){return e.parseError("invalid-codepoint"),""});if(!n)return;e.insertText(n)},t.inSelect.startTagOption=function(t,n){e.currentStackItem().localName=="option"&&e.popElement(),e.insertElement(t,n)},t.inSelect.startTagOptgroup=function(t,n){e.currentStackItem().localName=="option"&&e.popElement(),e.currentStackItem().localName=="optgroup"&&e.popElement(),e.insertElement(t,n)},t.inSelect.endTagOption=function(t){if(e.currentStackItem().localName!=="option"){e.parseError("unexpected-end-tag-in-select",{name:t});return}e.popElement()},t.inSelect.endTagOptgroup=function(t){e.currentStackItem().localName=="option"&&e.openElements.item(e.openElements.length-2).localName=="optgroup"&&e.popElement(),e.currentStackItem().localName=="optgroup"?e.popElement():e.parseError("unexpected-end-tag-in-select",{name:"optgroup"})},t.inSelect.startTagSelect=function(t){e.parseError("unexpected-select-in-select"),this.endTagSelect("select")},t.inSelect.endTagSelect=function(t){e.openElements.inTableScope("select")?(e.openElements.popUntilPopped("select"),e.resetInsertionMode()):e.parseError("unexpected-end-tag",{name:t})},t.inSelect.startTagInput=function(t,n){e.parseError("unexpected-input-in-select"),e.openElements.inSelectScope("select")&&(this.endTagSelect("select"),e.insertionMode.processStartTag(t,n))},t.inSelect.startTagScript=function(e,n){t.inHead.processStartTag(e,n)},t.inSelect.endTagTableElements=function(t){e.parseError("unexpected-end-tag-in-select",{name:t}),e.openElements.inTableScope(t)&&(this.endTagSelect("select"),e.insertionMode.processEndTag(t))},t.inSelect.startTagOther=function(t,n){e.parseError("unexpected-start-tag-in-select",{name:t})},t.inSelect.endTagOther=function(t){e.parseError("unexpected-end-tag-in-select",{name:t})},t.inSelectInTable=Object.create(t.base),t.inSelectInTable.start_tag_handlers={caption:"startTagTable",table:"startTagTable",tbody:"startTagTable",tfoot:"startTagTable",thead:"startTagTable",tr:"startTagTable",td:"startTagTable",th:"startTagTable","-default":"startTagOther"},t.inSelectInTable.end_tag_handlers={caption:"endTagTable",table:"endTagTable",tbody:"endTagTable",tfoot:"endTagTable",thead:"endTagTable",tr:"endTagTable",td:"endTagTable",th:"endTagTable","-default":"endTagOther"},t.inSelectInTable.processCharacters=function(e){t.inSelect.processCharacters(e)},t.inSelectInTable.startTagTable=function(t,n){e.parseError("unexpected-table-element-start-tag-in-select-in-table",{name:t}),this.endTagOther("select"),e.insertionMode.processStartTag(t,n)},t.inSelectInTable.startTagOther=function(e,n,r){t.inSelect.processStartTag(e,n,r)},t.inSelectInTable.endTagTable=function(t){e.parseError("unexpected-table-element-end-tag-in-select-in-table",{name:t}),e.openElements.inTableScope(t)&&(this.endTagOther("select"),e.insertionMode.processEndTag(t))},t.inSelectInTable.endTagOther=function(e){t.inSelect.processEndTag(e)},t.inRow=Object.create(t.base),t.inRow.start_tag_handlers={html:"startTagHtml",td:"startTagTableCell",th:"startTagTableCell",caption:"startTagTableOther",col:"startTagTableOther",colgroup:"startTagTableOther",tbody:"startTagTableOther",tfoot:"startTagTableOther",thead:"startTagTableOther",tr:"startTagTableOther","-default":"startTagOther"},t.inRow.end_tag_handlers={tr:"endTagTr",table:"endTagTable",tbody:"endTagTableRowGroup",tfoot:"endTagTableRowGroup",thead:"endTagTableRowGroup",body:"endTagIgnore",caption:"endTagIgnore",col:"endTagIgnore",colgroup:"endTagIgnore",html:"endTagIgnore",td:"endTagIgnore",th:"endTagIgnore","-default":"endTagOther"},t.inRow.processCharacters=function(e){t.inTable.processCharacters(e)},t.inRow.startTagTableCell=function(t,n){e.openElements.popUntilTableRowScopeMarker(),e.insertElement(t,n),e.setInsertionMode("inCell"),e.activeFormattingElements.push(l)},t.inRow.startTagTableOther=function(t,n){var r=this.ignoreEndTagTr();this.endTagTr("tr"),r||e.insertionMode.processStartTag(t,n)},t.inRow.startTagOther=function(e,n,r){t.inTable.processStartTag(e,n,r)},t.inRow.endTagTr=function(t){this.ignoreEndTagTr()?(r.ok(e.context),e.parseError("unexpected-end-tag",{name:t})):(e.openElements.popUntilTableRowScopeMarker(),e.popElement(),e.setInsertionMode("inTableBody"))},t.inRow.endTagTable=function(t){var n=this.ignoreEndTagTr();this.endTagTr("tr"),n||e.insertionMode.processEndTag(t)},t.inRow.endTagTableRowGroup=function(t){e.openElements.inTableScope(t)?(this.endTagTr("tr"),e.insertionMode.processEndTag(t)):e.parseError("unexpected-end-tag",{name:t})},t.inRow.endTagIgnore=function(t){e.parseError("unexpected-end-tag-in-table-row",{name:t})},t.inRow.endTagOther=function(e){t.inTable.processEndTag(e)},t.inRow.ignoreEndTagTr=function(){return!e.openElements.inTableScope("tr")},t.afterAfterFrameset=Object.create(t.base),t.afterAfterFrameset.start_tag_handlers={html:"startTagHtml",noframes:"startTagNoFrames","-default":"startTagOther"},t.afterAfterFrameset.processEOF=function(){},t.afterAfterFrameset.processComment=function(t){e.insertComment(t,e.document)},t.afterAfterFrameset.processCharacters=function(t){var n=t.takeRemaining(),r="";for(var i=0;i0&&this.currentStackItem().isForeign()},g.prototype.isSelfClosingFlagAcknowledged=function(){return this.selfClosingFlagAcknowledged},g.prototype.createElement=function(e,t,n){throw new Error("Not implemented")},g.prototype.attachNode=function(e,t){throw new Error("Not implemented")},g.prototype.attachNodeToFosterParent=function(e,t,n){throw new Error("Not implemented")},g.prototype.detachFromParent=function(e){throw new Error("Not implemented")},g.prototype.addAttributesToElement=function(e,t){throw new Error("Not implemented")},g.prototype.insertHtmlElement=function(e){var t=this.createElement("http://www.w3.org/1999/xhtml","html",e);return this.attachNode(t,this.document),this.openElements.pushHtmlElement(new f("http://www.w3.org/1999/xhtml","html",e,t)),t},g.prototype.insertHeadElement=function(e){var t=this.createElement("http://www.w3.org/1999/xhtml","head",e);return this.head=new f("http://www.w3.org/1999/xhtml","head",e,t),this.attachNode(t,this.openElements.top.node),this.openElements.pushHeadElement(this.head),t},g.prototype.insertBodyElement=function(e){var t=this.createElement("http://www.w3.org/1999/xhtml","body",e);return this.attachNode(t,this.openElements.top.node),this.openElements.pushBodyElement(new f("http://www.w3.org/1999/xhtml","body",e,t)),t},g.prototype.insertIntoFosterParent=function(e){var t=this.openElements.findIndex("table"),n=this.openElements.item(t).node;if(t===0)return this.attachNode(e,n);this.attachNodeToFosterParent(e,n,this.openElements.item(t-1).node)},g.prototype.insertElement=function(e,t,n,r){n||(n="http://www.w3.org/1999/xhtml");var i=this.createElement(n,e,t);this.shouldFosterParent()?this.insertIntoFosterParent(i):this.attachNode(i,this.openElements.top.node),r||this.openElements.push(new f(n,e,t,i))},g.prototype.insertFormattingElement=function(e,t){this.insertElement(e,t,"http://www.w3.org/1999/xhtml"),this.appendElementToActiveFormattingElements(this.currentStackItem())},g.prototype.insertSelfClosingElement=function(e,t){this.selfClosingFlagAcknowledged=!0,this.insertElement(e,t,"http://www.w3.org/1999/xhtml",!0)},g.prototype.insertForeignElement=function(e,t,n,r){r&&(this.selfClosingFlagAcknowledged=!0),this.insertElement(e,t,n,r)},g.prototype.insertComment=function(e,t){throw new Error("Not implemented")},g.prototype.insertDoctype=function(e,t,n){throw new Error("Not implemented")},g.prototype.insertText=function(e){throw new Error("Not implemented")},g.prototype.currentStackItem=function(){return this.openElements.top},g.prototype.popElement=function(){return this.openElements.pop()},g.prototype.shouldFosterParent=function(){return this.redirectAttachToFosterParent&&this.currentStackItem().isFosterParenting()},g.prototype.generateImpliedEndTags=function(e){var t=this.openElements.top.localName;["dd","dt","li","option","optgroup","p","rp","rt"].indexOf(t)!=-1&&t!=e&&(this.popElement(),this.generateImpliedEndTags(e))},g.prototype.reconstructActiveFormattingElements=function(){if(this.activeFormattingElements.length===0)return;var e=this.activeFormattingElements.length-1,t=this.activeFormattingElements[e];if(t==l||this.openElements.contains(t))return;while(t!=l&&!this.openElements.contains(t)){e-=1,t=this.activeFormattingElements[e];if(!t)break}for(;;){e+=1,t=this.activeFormattingElements[e],this.insertElement(t.localName,t.attributes);var n=this.currentStackItem();this.activeFormattingElements[e]=n;if(n==this.activeFormattingElements[this.activeFormattingElements.length-1])break}},g.prototype.ensureNoahsArkCondition=function(e){var t=3;if(this.activeFormattingElements.length=0;i--){var s=this.activeFormattingElements[i];if(s===l)break;if(e.localName!==s.localName||e.namespaceURI!==s.namespaceURI)continue;if(s.attributes.length!=r)continue;n.push(s)}if(n.length=0&&this.activeFormattingElements.splice(t,1)},g.prototype.elementInActiveFormattingElements=function(e){var t=this.activeFormattingElements;for(var n=t.length-1;n>=0;n--){if(t[n]==l)break;if(t[n].localName==e)return t[n]}return!1},g.prototype.clearActiveFormattingElements=function(){while(this.activeFormattingElements.length!==0&&this.activeFormattingElements.pop()!=l);},g.prototype.reparentChildren=function(e,t){throw new Error("Not implemented")},g.prototype.setFragmentContext=function(e){this.context=e},g.prototype.parseError=function(e,t){if(!this.errorHandler)return;var n=y(i[e],t);this.errorHandler.error(n,this.tokenizer._inputStream.location(),e)},g.prototype.resetInsertionMode=function(){var e=!1,t=null;for(var n=this.openElements.length-1;n>=0;n--){t=this.openElements.item(n),n===0&&(r.ok(this.context),e=!0,t=new f("http://www.w3.org/1999/xhtml",this.context,[],null));if(t.namespaceURI==="http://www.w3.org/1999/xhtml"){if(t.localName==="select")return this.setInsertionMode("inSelect");if(t.localName==="td"||t.localName==="th")return this.setInsertionMode("inCell");if(t.localName==="tr")return this.setInsertionMode("inRow");if(t.localName==="tbody"||t.localName==="thead"||t.localName==="tfoot")return this.setInsertionMode("inTableBody");if(t.localName==="caption")return this.setInsertionMode("inCaption");if(t.localName==="colgroup")return this.setInsertionMode("inColumnGroup");if(t.localName==="table")return this.setInsertionMode("inTable");if(t.localName==="head"&&!e)return this.setInsertionMode("inHead");if(t.localName==="body")return this.setInsertionMode("inBody");if(t.localName==="frameset")return this.setInsertionMode("inFrameset");if(t.localName==="html")return this.openElements.headElement?this.setInsertionMode("afterHead"):this.setInsertionMode("beforeHead")}if(e)return this.setInsertionMode("inBody")}},g.prototype.processGenericRCDATAStartTag=function(e,t){this.insertElement(e,t),this.tokenizer.setState(u.RCDATA),this.originalInsertionMode=this.insertionModeName,this.setInsertionMode("text")},g.prototype.processGenericRawTextStartTag=function(e,t){this.insertElement(e,t),this.tokenizer.setState(u.RAWTEXT),this.originalInsertionMode=this.insertionModeName,this.setInsertionMode("text")},g.prototype.adjustMathMLAttributes=function(e){return e.forEach(function(e){e.namespaceURI="http://www.w3.org/1998/Math/MathML",s.MATHMLAttributeMap[e.nodeName]&&(e.nodeName=s.MATHMLAttributeMap[e.nodeName])}),e},g.prototype.adjustSVGTagNameCase=function(e){return s.SVGTagMap[e]||e},g.prototype.adjustSVGAttributes=function(e){return e.forEach(function(e){e.namespaceURI="http://www.w3.org/2000/svg",s.SVGAttributeMap[e.nodeName]&&(e.nodeName=s.SVGAttributeMap[e.nodeName])}),e},g.prototype.adjustForeignAttributes=function(e){for(var t=0;t' instead.","expected-tag-name-but-got-question-mark":"Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)","expected-tag-name":"Expected tag name. Got something else instead.","expected-closing-tag-but-got-right-bracket":"Expected closing tag. Got '>' instead. Ignoring ''.","expected-closing-tag-but-got-eof":"Expected closing tag. Unexpected end of file.","expected-closing-tag-but-got-char":"Expected closing tag. Unexpected character '{data}' found.","eof-in-tag-name":"Unexpected end of file in the tag name.","expected-attribute-name-but-got-eof":"Unexpected end of file. Expected attribute name instead.","eof-in-attribute-name":"Unexpected end of file in attribute name.","invalid-character-in-attribute-name":"Invalid character in attribute name.","duplicate-attribute":"Dropped duplicate attribute '{name}' on tag.","expected-end-of-tag-but-got-eof":"Unexpected end of file. Expected = or end of tag.","expected-attribute-value-but-got-eof":"Unexpected end of file. Expected attribute value.","expected-attribute-value-but-got-right-bracket":"Expected attribute value. Got '>' instead.","unexpected-character-in-unquoted-attribute-value":"Unexpected character in unquoted attribute","invalid-character-after-attribute-name":"Unexpected character after attribute name.","unexpected-character-after-attribute-value":"Unexpected character after attribute value.","eof-in-attribute-value-double-quote":'Unexpected end of file in attribute value (").',"eof-in-attribute-value-single-quote":"Unexpected end of file in attribute value (').","eof-in-attribute-value-no-quotes":"Unexpected end of file in attribute value.","eof-after-attribute-value":"Unexpected end of file after attribute value.","unexpected-eof-after-solidus-in-tag":"Unexpected end of file in tag. Expected >.","unexpected-character-after-solidus-in-tag":"Unexpected character after / in tag. Expected >.","expected-dashes-or-doctype":"Expected '--' or 'DOCTYPE'. Not found.","unexpected-bang-after-double-dash-in-comment":"Unexpected ! after -- in comment.","incorrect-comment":"Incorrect comment.","eof-in-comment":"Unexpected end of file in comment.","eof-in-comment-end-dash":"Unexpected end of file in comment (-).","unexpected-dash-after-double-dash-in-comment":"Unexpected '-' after '--' found in comment.","eof-in-comment-double-dash":"Unexpected end of file in comment (--).","eof-in-comment-end-bang-state":"Unexpected end of file in comment.","unexpected-char-in-comment":"Unexpected character in comment found.","need-space-after-doctype":"No space after literal string 'DOCTYPE'.","expected-doctype-name-but-got-right-bracket":"Unexpected > character. Expected DOCTYPE name.","expected-doctype-name-but-got-eof":"Unexpected end of file. Expected DOCTYPE name.","eof-in-doctype-name":"Unexpected end of file in DOCTYPE name.","eof-in-doctype":"Unexpected end of file in DOCTYPE.","expected-space-or-right-bracket-in-doctype":"Expected space or '>'. Got '{data}'.","unexpected-end-of-doctype":"Unexpected end of DOCTYPE.","unexpected-char-in-doctype":"Unexpected character in DOCTYPE.","eof-in-bogus-doctype":"Unexpected end of file in bogus doctype.","eof-in-innerhtml":"Unexpected EOF in inner html mode.","unexpected-doctype":"Unexpected DOCTYPE. Ignored.","non-html-root":"html needs to be the first start tag.","expected-doctype-but-got-eof":"Unexpected End of file. Expected DOCTYPE.","unknown-doctype":"Erroneous DOCTYPE. Expected .","quirky-doctype":"Quirky doctype. Expected .","almost-standards-doctype":"Almost standards mode doctype. Expected .","obsolete-doctype":"Obsolete doctype. Expected .","expected-doctype-but-got-chars":"Non-space characters found without seeing a doctype first. Expected e.g. .","expected-doctype-but-got-start-tag":"Start tag seen without seeing a doctype first. Expected e.g. .","expected-doctype-but-got-end-tag":"End tag seen without seeing a doctype first. Expected e.g. .","end-tag-after-implied-root":"Unexpected end tag ({name}) after the (implied) root element.","expected-named-closing-tag-but-got-eof":"Unexpected end of file. Expected end tag ({name}).","two-heads-are-not-better-than-one":"Unexpected start tag head in existing head. Ignored.","unexpected-end-tag":"Unexpected end tag ({name}). Ignored.","unexpected-implied-end-tag":"End tag {name} implied, but there were open elements.","unexpected-start-tag-out-of-my-head":"Unexpected start tag ({name}) that can be in head. Moved.","unexpected-start-tag":"Unexpected start tag ({name}).","missing-end-tag":"Missing end tag ({name}).","missing-end-tags":"Missing end tags ({name}).","unexpected-start-tag-implies-end-tag":"Unexpected start tag ({startName}) implies end tag ({endName}).","unexpected-start-tag-treated-as":"Unexpected start tag ({originalName}). Treated as {newName}.","deprecated-tag":"Unexpected start tag {name}. Don't use it!","unexpected-start-tag-ignored":"Unexpected start tag {name}. Ignored.","expected-one-end-tag-but-got-another":"Unexpected end tag ({gotName}). Missing end tag ({expectedName}).","end-tag-too-early":"End tag ({name}) seen too early. Expected other end tag.","end-tag-too-early-named":"Unexpected end tag ({gotName}). Expected end tag ({expectedName}.","end-tag-too-early-ignored":"End tag ({name}) seen too early. Ignored.","adoption-agency-1.1":"End tag ({name}) violates step 1, paragraph 1 of the adoption agency algorithm.","adoption-agency-1.2":"End tag ({name}) violates step 1, paragraph 2 of the adoption agency algorithm.","adoption-agency-1.3":"End tag ({name}) violates step 1, paragraph 3 of the adoption agency algorithm.","adoption-agency-4.4":"End tag ({name}) violates step 4, paragraph 4 of the adoption agency algorithm.","unexpected-end-tag-treated-as":"Unexpected end tag ({originalName}). Treated as {newName}.","no-end-tag":"This element ({name}) has no end tag.","unexpected-implied-end-tag-in-table":"Unexpected implied end tag ({name}) in the table phase.","unexpected-implied-end-tag-in-table-body":"Unexpected implied end tag ({name}) in the table body phase.","unexpected-char-implies-table-voodoo":"Unexpected non-space characters in table context caused voodoo mode.","unexpected-hidden-input-in-table":"Unexpected input with type hidden in table context.","unexpected-form-in-table":"Unexpected form in table context.","unexpected-start-tag-implies-table-voodoo":"Unexpected start tag ({name}) in table context caused voodoo mode.","unexpected-end-tag-implies-table-voodoo":"Unexpected end tag ({name}) in table context caused voodoo mode.","unexpected-cell-in-table-body":"Unexpected table cell start tag ({name}) in the table body phase.","unexpected-cell-end-tag":"Got table cell end tag ({name}) while required end tags are missing.","unexpected-end-tag-in-table-body":"Unexpected end tag ({name}) in the table body phase. Ignored.","unexpected-implied-end-tag-in-table-row":"Unexpected implied end tag ({name}) in the table row phase.","unexpected-end-tag-in-table-row":"Unexpected end tag ({name}) in the table row phase. Ignored.","unexpected-select-in-select":"Unexpected select start tag in the select phase treated as select end tag.","unexpected-input-in-select":"Unexpected input start tag in the select phase.","unexpected-start-tag-in-select":"Unexpected start tag token ({name}) in the select phase. Ignored.","unexpected-end-tag-in-select":"Unexpected end tag ({name}) in the select phase. Ignored.","unexpected-table-element-start-tag-in-select-in-table":"Unexpected table element start tag ({name}) in the select in table phase.","unexpected-table-element-end-tag-in-select-in-table":"Unexpected table element end tag ({name}) in the select in table phase.","unexpected-char-after-body":"Unexpected non-space characters in the after body phase.","unexpected-start-tag-after-body":"Unexpected start tag token ({name}) in the after body phase.","unexpected-end-tag-after-body":"Unexpected end tag token ({name}) in the after body phase.","unexpected-char-in-frameset":"Unepxected characters in the frameset phase. Characters ignored.","unexpected-start-tag-in-frameset":"Unexpected start tag token ({name}) in the frameset phase. Ignored.","unexpected-frameset-in-frameset-innerhtml":"Unexpected end tag token (frameset in the frameset phase (innerHTML).","unexpected-end-tag-in-frameset":"Unexpected end tag token ({name}) in the frameset phase. Ignored.","unexpected-char-after-frameset":"Unexpected non-space characters in the after frameset phase. Ignored.","unexpected-start-tag-after-frameset":"Unexpected start tag ({name}) in the after frameset phase. Ignored.","unexpected-end-tag-after-frameset":"Unexpected end tag ({name}) in the after frameset phase. Ignored.","expected-eof-but-got-char":"Unexpected non-space characters. Expected end of file.","expected-eof-but-got-start-tag":"Unexpected start tag ({name}). Expected end of file.","expected-eof-but-got-end-tag":"Unexpected end tag ({name}). Expected end of file.","unexpected-end-table-in-caption":"Unexpected end table tag in caption. Generates implied end caption.","end-html-in-innerhtml":"Unexpected html end tag in inner html mode.","eof-in-table":"Unexpected end of file. Expected table content.","eof-in-script":"Unexpected end of file. Expected script content.","non-void-element-with-trailing-solidus":"Trailing solidus not allowed on element {name}.","unexpected-html-element-in-foreign-content":'HTML start tag "{name}" in a foreign namespace context.',"unexpected-start-tag-in-table":"Unexpected {name}. Expected table content."}},{}],9:[function(e,t,n){function o(){this.contentHandler=null,this._errorHandler=null,this._treeBuilder=new r,this._tokenizer=new i(this._treeBuilder),this._scriptingEnabled=!1}var r=e("./SAXTreeBuilder").SAXTreeBuilder,i=e("../Tokenizer").Tokenizer,s=e("./TreeParser").TreeParser;o.prototype.parse=function(e){this._tokenizer.tokenize(e);var t=this._treeBuilder.document;t&&(new s(this.contentHandler)).parse(t)},o.prototype.parseFragment=function(e,t){this._treeBuilder.setFragmentContext(t),this._tokenizer.tokenize(e);var n=this._treeBuilder.getFragment();n&&(new s(this.contentHandler)).parse(n)},Object.defineProperty(o.prototype,"scriptingEnabled",{get:function(){return this._scriptingEnabled},set:function(e){this._scriptingEnabled=e,this._treeBuilder.scriptingEnabled=e}}),Object.defineProperty(o.prototype,"errorHandler",{get:function(){return this._errorHandler},set:function(e){this._errorHandler=e,this._treeBuilder.errorHandler=e}}),n.SAXParser=o},{"../Tokenizer":5,"./SAXTreeBuilder":10,"./TreeParser":11}],10:[function(e,t,n){function s(){i.call(this)}function o(e,t){for(var n=0;n",gt:">","GT;":">",GT:">","Gt;":"\u226b","gtdot;":"\u22d7","gtlPar;":"\u2995","gtquest;":"\u2a7c","gtrapprox;":"\u2a86","gtrarr;":"\u2978","gtrdot;":"\u22d7","gtreqless;":"\u22db","gtreqqless;":"\u2a8c","gtrless;":"\u2277","gtrsim;":"\u2273","gvertneqq;":"\u2269\ufe00","gvnE;":"\u2269\ufe00","Hacek;":"\u02c7","hairsp;":"\u200a","half;":"\u00bd","hamilt;":"\u210b","HARDcy;":"\u042a","hardcy;":"\u044a","harrcir;":"\u2948","harr;":"\u2194","hArr;":"\u21d4","harrw;":"\u21ad","Hat;":"^","hbar;":"\u210f","Hcirc;":"\u0124","hcirc;":"\u0125","hearts;":"\u2665","heartsuit;":"\u2665","hellip;":"\u2026","hercon;":"\u22b9","hfr;":"\ud835\udd25","Hfr;":"\u210c","HilbertSpace;":"\u210b","hksearow;":"\u2925","hkswarow;":"\u2926","hoarr;":"\u21ff","homtht;":"\u223b","hookleftarrow;":"\u21a9","hookrightarrow;":"\u21aa","hopf;":"\ud835\udd59","Hopf;":"\u210d","horbar;":"\u2015","HorizontalLine;":"\u2500","hscr;":"\ud835\udcbd","Hscr;":"\u210b","hslash;":"\u210f","Hstrok;":"\u0126","hstrok;":"\u0127","HumpDownHump;":"\u224e","HumpEqual;":"\u224f","hybull;":"\u2043","hyphen;":"\u2010","Iacute;":"\u00cd",Iacute:"\u00cd","iacute;":"\u00ed",iacute:"\u00ed","ic;":"\u2063","Icirc;":"\u00ce",Icirc:"\u00ce","icirc;":"\u00ee",icirc:"\u00ee","Icy;":"\u0418","icy;":"\u0438","Idot;":"\u0130","IEcy;":"\u0415","iecy;":"\u0435","iexcl;":"\u00a1",iexcl:"\u00a1","iff;":"\u21d4","ifr;":"\ud835\udd26","Ifr;":"\u2111","Igrave;":"\u00cc",Igrave:"\u00cc","igrave;":"\u00ec",igrave:"\u00ec","ii;":"\u2148","iiiint;":"\u2a0c","iiint;":"\u222d","iinfin;":"\u29dc","iiota;":"\u2129","IJlig;":"\u0132","ijlig;":"\u0133","Imacr;":"\u012a","imacr;":"\u012b","image;":"\u2111","ImaginaryI;":"\u2148","imagline;":"\u2110","imagpart;":"\u2111","imath;":"\u0131","Im;":"\u2111","imof;":"\u22b7","imped;":"\u01b5","Implies;":"\u21d2","incare;":"\u2105","in;":"\u2208","infin;":"\u221e","infintie;":"\u29dd","inodot;":"\u0131","intcal;":"\u22ba","int;":"\u222b","Int;":"\u222c","integers;":"\u2124","Integral;":"\u222b","intercal;":"\u22ba","Intersection;":"\u22c2","intlarhk;":"\u2a17","intprod;":"\u2a3c","InvisibleComma;":"\u2063","InvisibleTimes;":"\u2062","IOcy;":"\u0401","iocy;":"\u0451","Iogon;":"\u012e","iogon;":"\u012f","Iopf;":"\ud835\udd40","iopf;":"\ud835\udd5a","Iota;":"\u0399","iota;":"\u03b9","iprod;":"\u2a3c","iquest;":"\u00bf",iquest:"\u00bf","iscr;":"\ud835\udcbe","Iscr;":"\u2110","isin;":"\u2208","isindot;":"\u22f5","isinE;":"\u22f9","isins;":"\u22f4","isinsv;":"\u22f3","isinv;":"\u2208","it;":"\u2062","Itilde;":"\u0128","itilde;":"\u0129","Iukcy;":"\u0406","iukcy;":"\u0456","Iuml;":"\u00cf",Iuml:"\u00cf","iuml;":"\u00ef",iuml:"\u00ef","Jcirc;":"\u0134","jcirc;":"\u0135","Jcy;":"\u0419","jcy;":"\u0439","Jfr;":"\ud835\udd0d","jfr;":"\ud835\udd27","jmath;":"\u0237","Jopf;":"\ud835\udd41","jopf;":"\ud835\udd5b","Jscr;":"\ud835\udca5","jscr;":"\ud835\udcbf","Jsercy;":"\u0408","jsercy;":"\u0458","Jukcy;":"\u0404","jukcy;":"\u0454","Kappa;":"\u039a","kappa;":"\u03ba","kappav;":"\u03f0","Kcedil;":"\u0136","kcedil;":"\u0137","Kcy;":"\u041a","kcy;":"\u043a","Kfr;":"\ud835\udd0e","kfr;":"\ud835\udd28","kgreen;":"\u0138","KHcy;":"\u0425","khcy;":"\u0445","KJcy;":"\u040c","kjcy;":"\u045c","Kopf;":"\ud835\udd42","kopf;":"\ud835\udd5c","Kscr;":"\ud835\udca6","kscr;":"\ud835\udcc0","lAarr;":"\u21da","Lacute;":"\u0139","lacute;":"\u013a","laemptyv;":"\u29b4","lagran;":"\u2112","Lambda;":"\u039b","lambda;":"\u03bb","lang;":"\u27e8","Lang;":"\u27ea","langd;":"\u2991","langle;":"\u27e8","lap;":"\u2a85","Laplacetrf;":"\u2112","laquo;":"\u00ab",laquo:"\u00ab","larrb;":"\u21e4","larrbfs;":"\u291f","larr;":"\u2190","Larr;":"\u219e","lArr;":"\u21d0","larrfs;":"\u291d","larrhk;":"\u21a9","larrlp;":"\u21ab","larrpl;":"\u2939","larrsim;":"\u2973","larrtl;":"\u21a2","latail;":"\u2919","lAtail;":"\u291b","lat;":"\u2aab","late;":"\u2aad","lates;":"\u2aad\ufe00","lbarr;":"\u290c","lBarr;":"\u290e","lbbrk;":"\u2772","lbrace;":"{","lbrack;":"[","lbrke;":"\u298b","lbrksld;":"\u298f","lbrkslu;":"\u298d","Lcaron;":"\u013d","lcaron;":"\u013e","Lcedil;":"\u013b","lcedil;":"\u013c","lceil;":"\u2308","lcub;":"{","Lcy;":"\u041b","lcy;":"\u043b","ldca;":"\u2936","ldquo;":"\u201c","ldquor;":"\u201e","ldrdhar;":"\u2967","ldrushar;":"\u294b","ldsh;":"\u21b2","le;":"\u2264","lE;":"\u2266","LeftAngleBracket;":"\u27e8","LeftArrowBar;":"\u21e4","leftarrow;":"\u2190","LeftArrow;":"\u2190","Leftarrow;":"\u21d0","LeftArrowRightArrow;":"\u21c6","leftarrowtail;":"\u21a2","LeftCeiling;":"\u2308","LeftDoubleBracket;":"\u27e6","LeftDownTeeVector;":"\u2961","LeftDownVectorBar;":"\u2959","LeftDownVector;":"\u21c3","LeftFloor;":"\u230a","leftharpoondown;":"\u21bd","leftharpoonup;":"\u21bc","leftleftarrows;":"\u21c7","leftrightarrow;":"\u2194","LeftRightArrow;":"\u2194","Leftrightarrow;":"\u21d4","leftrightarrows;":"\u21c6","leftrightharpoons;":"\u21cb","leftrightsquigarrow;":"\u21ad","LeftRightVector;":"\u294e","LeftTeeArrow;":"\u21a4","LeftTee;":"\u22a3","LeftTeeVector;":"\u295a","leftthreetimes;":"\u22cb","LeftTriangleBar;":"\u29cf","LeftTriangle;":"\u22b2","LeftTriangleEqual;":"\u22b4","LeftUpDownVector;":"\u2951","LeftUpTeeVector;":"\u2960","LeftUpVectorBar;":"\u2958","LeftUpVector;":"\u21bf","LeftVectorBar;":"\u2952","LeftVector;":"\u21bc","lEg;":"\u2a8b","leg;":"\u22da","leq;":"\u2264","leqq;":"\u2266","leqslant;":"\u2a7d","lescc;":"\u2aa8","les;":"\u2a7d","lesdot;":"\u2a7f","lesdoto;":"\u2a81","lesdotor;":"\u2a83","lesg;":"\u22da\ufe00","lesges;":"\u2a93","lessapprox;":"\u2a85","lessdot;":"\u22d6","lesseqgtr;":"\u22da","lesseqqgtr;":"\u2a8b","LessEqualGreater;":"\u22da","LessFullEqual;":"\u2266","LessGreater;":"\u2276","lessgtr;":"\u2276","LessLess;":"\u2aa1","lesssim;":"\u2272","LessSlantEqual;":"\u2a7d","LessTilde;":"\u2272","lfisht;":"\u297c","lfloor;":"\u230a","Lfr;":"\ud835\udd0f","lfr;":"\ud835\udd29","lg;":"\u2276","lgE;":"\u2a91","lHar;":"\u2962","lhard;":"\u21bd","lharu;":"\u21bc","lharul;":"\u296a","lhblk;":"\u2584","LJcy;":"\u0409","ljcy;":"\u0459","llarr;":"\u21c7","ll;":"\u226a","Ll;":"\u22d8","llcorner;":"\u231e","Lleftarrow;":"\u21da","llhard;":"\u296b","lltri;":"\u25fa","Lmidot;":"\u013f","lmidot;":"\u0140","lmoustache;":"\u23b0","lmoust;":"\u23b0","lnap;":"\u2a89","lnapprox;":"\u2a89","lne;":"\u2a87","lnE;":"\u2268","lneq;":"\u2a87","lneqq;":"\u2268","lnsim;":"\u22e6","loang;":"\u27ec","loarr;":"\u21fd","lobrk;":"\u27e6","longleftarrow;":"\u27f5","LongLeftArrow;":"\u27f5","Longleftarrow;":"\u27f8","longleftrightarrow;":"\u27f7","LongLeftRightArrow;":"\u27f7","Longleftrightarrow;":"\u27fa","longmapsto;":"\u27fc","longrightarrow;":"\u27f6","LongRightArrow;":"\u27f6","Longrightarrow;":"\u27f9","looparrowleft;":"\u21ab","looparrowright;":"\u21ac","lopar;":"\u2985","Lopf;":"\ud835\udd43","lopf;":"\ud835\udd5d","loplus;":"\u2a2d","lotimes;":"\u2a34","lowast;":"\u2217","lowbar;":"_","LowerLeftArrow;":"\u2199","LowerRightArrow;":"\u2198","loz;":"\u25ca","lozenge;":"\u25ca","lozf;":"\u29eb","lpar;":"(","lparlt;":"\u2993","lrarr;":"\u21c6","lrcorner;":"\u231f","lrhar;":"\u21cb","lrhard;":"\u296d","lrm;":"\u200e","lrtri;":"\u22bf","lsaquo;":"\u2039","lscr;":"\ud835\udcc1","Lscr;":"\u2112","lsh;":"\u21b0","Lsh;":"\u21b0","lsim;":"\u2272","lsime;":"\u2a8d","lsimg;":"\u2a8f","lsqb;":"[","lsquo;":"\u2018","lsquor;":"\u201a","Lstrok;":"\u0141","lstrok;":"\u0142","ltcc;":"\u2aa6","ltcir;":"\u2a79","lt;":"<",lt:"<","LT;":"<",LT:"<","Lt;":"\u226a","ltdot;":"\u22d6","lthree;":"\u22cb","ltimes;":"\u22c9","ltlarr;":"\u2976","ltquest;":"\u2a7b","ltri;":"\u25c3","ltrie;":"\u22b4","ltrif;":"\u25c2","ltrPar;":"\u2996","lurdshar;":"\u294a","luruhar;":"\u2966","lvertneqq;":"\u2268\ufe00","lvnE;":"\u2268\ufe00","macr;":"\u00af",macr:"\u00af","male;":"\u2642","malt;":"\u2720","maltese;":"\u2720","Map;":"\u2905","map;":"\u21a6","mapsto;":"\u21a6","mapstodown;":"\u21a7","mapstoleft;":"\u21a4","mapstoup;":"\u21a5","marker;":"\u25ae","mcomma;":"\u2a29","Mcy;":"\u041c","mcy;":"\u043c","mdash;":"\u2014","mDDot;":"\u223a","measuredangle;":"\u2221","MediumSpace;":"\u205f","Mellintrf;":"\u2133","Mfr;":"\ud835\udd10","mfr;":"\ud835\udd2a","mho;":"\u2127","micro;":"\u00b5",micro:"\u00b5","midast;":"*","midcir;":"\u2af0","mid;":"\u2223","middot;":"\u00b7",middot:"\u00b7","minusb;":"\u229f","minus;":"\u2212","minusd;":"\u2238","minusdu;":"\u2a2a","MinusPlus;":"\u2213","mlcp;":"\u2adb","mldr;":"\u2026","mnplus;":"\u2213","models;":"\u22a7","Mopf;":"\ud835\udd44","mopf;":"\ud835\udd5e","mp;":"\u2213","mscr;":"\ud835\udcc2","Mscr;":"\u2133","mstpos;":"\u223e","Mu;":"\u039c","mu;":"\u03bc","multimap;":"\u22b8","mumap;":"\u22b8","nabla;":"\u2207","Nacute;":"\u0143","nacute;":"\u0144","nang;":"\u2220\u20d2","nap;":"\u2249","napE;":"\u2a70\u0338","napid;":"\u224b\u0338","napos;":"\u0149","napprox;":"\u2249","natural;":"\u266e","naturals;":"\u2115","natur;":"\u266e","nbsp;":"\u00a0",nbsp:"\u00a0","nbump;":"\u224e\u0338","nbumpe;":"\u224f\u0338","ncap;":"\u2a43","Ncaron;":"\u0147","ncaron;":"\u0148","Ncedil;":"\u0145","ncedil;":"\u0146","ncong;":"\u2247","ncongdot;":"\u2a6d\u0338","ncup;":"\u2a42","Ncy;":"\u041d","ncy;":"\u043d","ndash;":"\u2013","nearhk;":"\u2924","nearr;":"\u2197","neArr;":"\u21d7","nearrow;":"\u2197","ne;":"\u2260","nedot;":"\u2250\u0338","NegativeMediumSpace;":"\u200b","NegativeThickSpace;":"\u200b","NegativeThinSpace;":"\u200b","NegativeVeryThinSpace;":"\u200b","nequiv;":"\u2262","nesear;":"\u2928","nesim;":"\u2242\u0338","NestedGreaterGreater;":"\u226b","NestedLessLess;":"\u226a","NewLine;":"\n","nexist;":"\u2204","nexists;":"\u2204","Nfr;":"\ud835\udd11","nfr;":"\ud835\udd2b","ngE;":"\u2267\u0338","nge;":"\u2271","ngeq;":"\u2271","ngeqq;":"\u2267\u0338","ngeqslant;":"\u2a7e\u0338","nges;":"\u2a7e\u0338","nGg;":"\u22d9\u0338","ngsim;":"\u2275","nGt;":"\u226b\u20d2","ngt;":"\u226f","ngtr;":"\u226f","nGtv;":"\u226b\u0338","nharr;":"\u21ae","nhArr;":"\u21ce","nhpar;":"\u2af2","ni;":"\u220b","nis;":"\u22fc","nisd;":"\u22fa","niv;":"\u220b","NJcy;":"\u040a","njcy;":"\u045a","nlarr;":"\u219a","nlArr;":"\u21cd","nldr;":"\u2025","nlE;":"\u2266\u0338","nle;":"\u2270","nleftarrow;":"\u219a","nLeftarrow;":"\u21cd","nleftrightarrow;":"\u21ae","nLeftrightarrow;":"\u21ce","nleq;":"\u2270","nleqq;":"\u2266\u0338","nleqslant;":"\u2a7d\u0338","nles;":"\u2a7d\u0338","nless;":"\u226e","nLl;":"\u22d8\u0338","nlsim;":"\u2274","nLt;":"\u226a\u20d2","nlt;":"\u226e","nltri;":"\u22ea","nltrie;":"\u22ec","nLtv;":"\u226a\u0338","nmid;":"\u2224","NoBreak;":"\u2060","NonBreakingSpace;":"\u00a0","nopf;":"\ud835\udd5f","Nopf;":"\u2115","Not;":"\u2aec","not;":"\u00ac",not:"\u00ac","NotCongruent;":"\u2262","NotCupCap;":"\u226d","NotDoubleVerticalBar;":"\u2226","NotElement;":"\u2209","NotEqual;":"\u2260","NotEqualTilde;":"\u2242\u0338","NotExists;":"\u2204","NotGreater;":"\u226f","NotGreaterEqual;":"\u2271","NotGreaterFullEqual;":"\u2267\u0338","NotGreaterGreater;":"\u226b\u0338","NotGreaterLess;":"\u2279","NotGreaterSlantEqual;":"\u2a7e\u0338","NotGreaterTilde;":"\u2275","NotHumpDownHump;":"\u224e\u0338","NotHumpEqual;":"\u224f\u0338","notin;":"\u2209","notindot;":"\u22f5\u0338","notinE;":"\u22f9\u0338","notinva;":"\u2209","notinvb;":"\u22f7","notinvc;":"\u22f6","NotLeftTriangleBar;":"\u29cf\u0338","NotLeftTriangle;":"\u22ea","NotLeftTriangleEqual;":"\u22ec","NotLess;":"\u226e","NotLessEqual;":"\u2270","NotLessGreater;":"\u2278","NotLessLess;":"\u226a\u0338","NotLessSlantEqual;":"\u2a7d\u0338","NotLessTilde;":"\u2274","NotNestedGreaterGreater;":"\u2aa2\u0338","NotNestedLessLess;":"\u2aa1\u0338","notni;":"\u220c","notniva;":"\u220c","notnivb;":"\u22fe","notnivc;":"\u22fd","NotPrecedes;":"\u2280","NotPrecedesEqual;":"\u2aaf\u0338","NotPrecedesSlantEqual;":"\u22e0","NotReverseElement;":"\u220c","NotRightTriangleBar;":"\u29d0\u0338","NotRightTriangle;":"\u22eb","NotRightTriangleEqual;":"\u22ed","NotSquareSubset;":"\u228f\u0338","NotSquareSubsetEqual;":"\u22e2","NotSquareSuperset;":"\u2290\u0338","NotSquareSupersetEqual;":"\u22e3","NotSubset;":"\u2282\u20d2","NotSubsetEqual;":"\u2288","NotSucceeds;":"\u2281","NotSucceedsEqual;":"\u2ab0\u0338","NotSucceedsSlantEqual;":"\u22e1","NotSucceedsTilde;":"\u227f\u0338","NotSuperset;":"\u2283\u20d2","NotSupersetEqual;":"\u2289","NotTilde;":"\u2241","NotTildeEqual;":"\u2244","NotTildeFullEqual;":"\u2247","NotTildeTilde;":"\u2249","NotVerticalBar;":"\u2224","nparallel;":"\u2226","npar;":"\u2226","nparsl;":"\u2afd\u20e5","npart;":"\u2202\u0338","npolint;":"\u2a14","npr;":"\u2280","nprcue;":"\u22e0","nprec;":"\u2280","npreceq;":"\u2aaf\u0338","npre;":"\u2aaf\u0338","nrarrc;":"\u2933\u0338","nrarr;":"\u219b","nrArr;":"\u21cf","nrarrw;":"\u219d\u0338","nrightarrow;":"\u219b","nRightarrow;":"\u21cf","nrtri;":"\u22eb","nrtrie;":"\u22ed","nsc;":"\u2281","nsccue;":"\u22e1","nsce;":"\u2ab0\u0338","Nscr;":"\ud835\udca9","nscr;":"\ud835\udcc3","nshortmid;":"\u2224","nshortparallel;":"\u2226","nsim;":"\u2241","nsime;":"\u2244","nsimeq;":"\u2244","nsmid;":"\u2224","nspar;":"\u2226","nsqsube;":"\u22e2","nsqsupe;":"\u22e3","nsub;":"\u2284","nsubE;":"\u2ac5\u0338","nsube;":"\u2288","nsubset;":"\u2282\u20d2","nsubseteq;":"\u2288","nsubseteqq;":"\u2ac5\u0338","nsucc;":"\u2281","nsucceq;":"\u2ab0\u0338","nsup;":"\u2285","nsupE;":"\u2ac6\u0338","nsupe;":"\u2289","nsupset;":"\u2283\u20d2","nsupseteq;":"\u2289","nsupseteqq;":"\u2ac6\u0338","ntgl;":"\u2279","Ntilde;":"\u00d1",Ntilde:"\u00d1","ntilde;":"\u00f1",ntilde:"\u00f1","ntlg;":"\u2278","ntriangleleft;":"\u22ea","ntrianglelefteq;":"\u22ec","ntriangleright;":"\u22eb","ntrianglerighteq;":"\u22ed","Nu;":"\u039d","nu;":"\u03bd","num;":"#","numero;":"\u2116","numsp;":"\u2007","nvap;":"\u224d\u20d2","nvdash;":"\u22ac","nvDash;":"\u22ad","nVdash;":"\u22ae","nVDash;":"\u22af","nvge;":"\u2265\u20d2","nvgt;":">\u20d2","nvHarr;":"\u2904","nvinfin;":"\u29de","nvlArr;":"\u2902","nvle;":"\u2264\u20d2","nvlt;":"<\u20d2","nvltrie;":"\u22b4\u20d2","nvrArr;":"\u2903","nvrtrie;":"\u22b5\u20d2","nvsim;":"\u223c\u20d2","nwarhk;":"\u2923","nwarr;":"\u2196","nwArr;":"\u21d6","nwarrow;":"\u2196","nwnear;":"\u2927","Oacute;":"\u00d3",Oacute:"\u00d3","oacute;":"\u00f3",oacute:"\u00f3","oast;":"\u229b","Ocirc;":"\u00d4",Ocirc:"\u00d4","ocirc;":"\u00f4",ocirc:"\u00f4","ocir;":"\u229a","Ocy;":"\u041e","ocy;":"\u043e","odash;":"\u229d","Odblac;":"\u0150","odblac;":"\u0151","odiv;":"\u2a38","odot;":"\u2299","odsold;":"\u29bc","OElig;":"\u0152","oelig;":"\u0153","ofcir;":"\u29bf","Ofr;":"\ud835\udd12","ofr;":"\ud835\udd2c","ogon;":"\u02db","Ograve;":"\u00d2",Ograve:"\u00d2","ograve;":"\u00f2",ograve:"\u00f2","ogt;":"\u29c1","ohbar;":"\u29b5","ohm;":"\u03a9","oint;":"\u222e","olarr;":"\u21ba","olcir;":"\u29be","olcross;":"\u29bb","oline;":"\u203e","olt;":"\u29c0","Omacr;":"\u014c","omacr;":"\u014d","Omega;":"\u03a9","omega;":"\u03c9","Omicron;":"\u039f","omicron;":"\u03bf","omid;":"\u29b6","ominus;":"\u2296","Oopf;":"\ud835\udd46","oopf;":"\ud835\udd60","opar;":"\u29b7","OpenCurlyDoubleQuote;":"\u201c","OpenCurlyQuote;":"\u2018","operp;":"\u29b9","oplus;":"\u2295","orarr;":"\u21bb","Or;":"\u2a54","or;":"\u2228","ord;":"\u2a5d","order;":"\u2134","orderof;":"\u2134","ordf;":"\u00aa",ordf:"\u00aa","ordm;":"\u00ba",ordm:"\u00ba","origof;":"\u22b6","oror;":"\u2a56","orslope;":"\u2a57","orv;":"\u2a5b","oS;":"\u24c8","Oscr;":"\ud835\udcaa","oscr;":"\u2134","Oslash;":"\u00d8",Oslash:"\u00d8","oslash;":"\u00f8",oslash:"\u00f8","osol;":"\u2298","Otilde;":"\u00d5",Otilde:"\u00d5","otilde;":"\u00f5",otilde:"\u00f5","otimesas;":"\u2a36","Otimes;":"\u2a37","otimes;":"\u2297","Ouml;":"\u00d6",Ouml:"\u00d6","ouml;":"\u00f6",ouml:"\u00f6","ovbar;":"\u233d","OverBar;":"\u203e","OverBrace;":"\u23de","OverBracket;":"\u23b4","OverParenthesis;":"\u23dc","para;":"\u00b6",para:"\u00b6","parallel;":"\u2225","par;":"\u2225","parsim;":"\u2af3","parsl;":"\u2afd","part;":"\u2202","PartialD;":"\u2202","Pcy;":"\u041f","pcy;":"\u043f","percnt;":"%","period;":".","permil;":"\u2030","perp;":"\u22a5","pertenk;":"\u2031","Pfr;":"\ud835\udd13","pfr;":"\ud835\udd2d","Phi;":"\u03a6","phi;":"\u03c6","phiv;":"\u03d5","phmmat;":"\u2133","phone;":"\u260e","Pi;":"\u03a0","pi;":"\u03c0","pitchfork;":"\u22d4","piv;":"\u03d6","planck;":"\u210f","planckh;":"\u210e","plankv;":"\u210f","plusacir;":"\u2a23","plusb;":"\u229e","pluscir;":"\u2a22","plus;":"+","plusdo;":"\u2214","plusdu;":"\u2a25","pluse;":"\u2a72","PlusMinus;":"\u00b1","plusmn;":"\u00b1",plusmn:"\u00b1","plussim;":"\u2a26","plustwo;":"\u2a27","pm;":"\u00b1","Poincareplane;":"\u210c","pointint;":"\u2a15","popf;":"\ud835\udd61","Popf;":"\u2119","pound;":"\u00a3",pound:"\u00a3","prap;":"\u2ab7","Pr;":"\u2abb","pr;":"\u227a","prcue;":"\u227c","precapprox;":"\u2ab7","prec;":"\u227a","preccurlyeq;":"\u227c","Precedes;":"\u227a","PrecedesEqual;":"\u2aaf","PrecedesSlantEqual;":"\u227c","PrecedesTilde;":"\u227e","preceq;":"\u2aaf","precnapprox;":"\u2ab9","precneqq;":"\u2ab5","precnsim;":"\u22e8","pre;":"\u2aaf","prE;":"\u2ab3","precsim;":"\u227e","prime;":"\u2032","Prime;":"\u2033","primes;":"\u2119","prnap;":"\u2ab9","prnE;":"\u2ab5","prnsim;":"\u22e8","prod;":"\u220f","Product;":"\u220f","profalar;":"\u232e","profline;":"\u2312","profsurf;":"\u2313","prop;":"\u221d","Proportional;":"\u221d","Proportion;":"\u2237","propto;":"\u221d","prsim;":"\u227e","prurel;":"\u22b0","Pscr;":"\ud835\udcab","pscr;":"\ud835\udcc5","Psi;":"\u03a8","psi;":"\u03c8","puncsp;":"\u2008","Qfr;":"\ud835\udd14","qfr;":"\ud835\udd2e","qint;":"\u2a0c","qopf;":"\ud835\udd62","Qopf;":"\u211a","qprime;":"\u2057","Qscr;":"\ud835\udcac","qscr;":"\ud835\udcc6","quaternions;":"\u210d","quatint;":"\u2a16","quest;":"?","questeq;":"\u225f","quot;":'"',quot:'"',"QUOT;":'"',QUOT:'"',"rAarr;":"\u21db","race;":"\u223d\u0331","Racute;":"\u0154","racute;":"\u0155","radic;":"\u221a","raemptyv;":"\u29b3","rang;":"\u27e9","Rang;":"\u27eb","rangd;":"\u2992","range;":"\u29a5","rangle;":"\u27e9","raquo;":"\u00bb",raquo:"\u00bb","rarrap;":"\u2975","rarrb;":"\u21e5","rarrbfs;":"\u2920","rarrc;":"\u2933","rarr;":"\u2192","Rarr;":"\u21a0","rArr;":"\u21d2","rarrfs;":"\u291e","rarrhk;":"\u21aa","rarrlp;":"\u21ac","rarrpl;":"\u2945","rarrsim;":"\u2974","Rarrtl;":"\u2916","rarrtl;":"\u21a3","rarrw;":"\u219d","ratail;":"\u291a","rAtail;":"\u291c","ratio;":"\u2236","rationals;":"\u211a","rbarr;":"\u290d","rBarr;":"\u290f","RBarr;":"\u2910","rbbrk;":"\u2773","rbrace;":"}","rbrack;":"]","rbrke;":"\u298c","rbrksld;":"\u298e","rbrkslu;":"\u2990","Rcaron;":"\u0158","rcaron;":"\u0159","Rcedil;":"\u0156","rcedil;":"\u0157","rceil;":"\u2309","rcub;":"}","Rcy;":"\u0420","rcy;":"\u0440","rdca;":"\u2937","rdldhar;":"\u2969","rdquo;":"\u201d","rdquor;":"\u201d","rdsh;":"\u21b3","real;":"\u211c","realine;":"\u211b","realpart;":"\u211c","reals;":"\u211d","Re;":"\u211c","rect;":"\u25ad","reg;":"\u00ae",reg:"\u00ae","REG;":"\u00ae",REG:"\u00ae","ReverseElement;":"\u220b","ReverseEquilibrium;":"\u21cb","ReverseUpEquilibrium;":"\u296f","rfisht;":"\u297d","rfloor;":"\u230b","rfr;":"\ud835\udd2f","Rfr;":"\u211c","rHar;":"\u2964","rhard;":"\u21c1","rharu;":"\u21c0","rharul;":"\u296c","Rho;":"\u03a1","rho;":"\u03c1","rhov;":"\u03f1","RightAngleBracket;":"\u27e9","RightArrowBar;":"\u21e5","rightarrow;":"\u2192","RightArrow;":"\u2192","Rightarrow;":"\u21d2","RightArrowLeftArrow;":"\u21c4","rightarrowtail;":"\u21a3","RightCeiling;":"\u2309","RightDoubleBracket;":"\u27e7","RightDownTeeVector;":"\u295d","RightDownVectorBar;":"\u2955","RightDownVector;":"\u21c2","RightFloor;":"\u230b","rightharpoondown;":"\u21c1","rightharpoonup;":"\u21c0","rightleftarrows;":"\u21c4","rightleftharpoons;":"\u21cc","rightrightarrows;":"\u21c9","rightsquigarrow;":"\u219d","RightTeeArrow;":"\u21a6","RightTee;":"\u22a2","RightTeeVector;":"\u295b","rightthreetimes;":"\u22cc","RightTriangleBar;":"\u29d0","RightTriangle;":"\u22b3","RightTriangleEqual;":"\u22b5","RightUpDownVector;":"\u294f","RightUpTeeVector;":"\u295c","RightUpVectorBar;":"\u2954","RightUpVector;":"\u21be","RightVectorBar;":"\u2953","RightVector;":"\u21c0","ring;":"\u02da","risingdotseq;":"\u2253","rlarr;":"\u21c4","rlhar;":"\u21cc","rlm;":"\u200f","rmoustache;":"\u23b1","rmoust;":"\u23b1","rnmid;":"\u2aee","roang;":"\u27ed","roarr;":"\u21fe","robrk;":"\u27e7","ropar;":"\u2986","ropf;":"\ud835\udd63","Ropf;":"\u211d","roplus;":"\u2a2e","rotimes;":"\u2a35","RoundImplies;":"\u2970","rpar;":")","rpargt;":"\u2994","rppolint;":"\u2a12","rrarr;":"\u21c9","Rrightarrow;":"\u21db","rsaquo;":"\u203a","rscr;":"\ud835\udcc7","Rscr;":"\u211b","rsh;":"\u21b1","Rsh;":"\u21b1","rsqb;":"]","rsquo;":"\u2019","rsquor;":"\u2019","rthree;":"\u22cc","rtimes;":"\u22ca","rtri;":"\u25b9","rtrie;":"\u22b5","rtrif;":"\u25b8","rtriltri;":"\u29ce","RuleDelayed;":"\u29f4","ruluhar;":"\u2968","rx;":"\u211e","Sacute;":"\u015a","sacute;":"\u015b","sbquo;":"\u201a","scap;":"\u2ab8","Scaron;":"\u0160","scaron;":"\u0161","Sc;":"\u2abc","sc;":"\u227b","sccue;":"\u227d","sce;":"\u2ab0","scE;":"\u2ab4","Scedil;":"\u015e","scedil;":"\u015f","Scirc;":"\u015c","scirc;":"\u015d","scnap;":"\u2aba","scnE;":"\u2ab6","scnsim;":"\u22e9","scpolint;":"\u2a13","scsim;":"\u227f","Scy;":"\u0421","scy;":"\u0441","sdotb;":"\u22a1","sdot;":"\u22c5","sdote;":"\u2a66","searhk;":"\u2925","searr;":"\u2198","seArr;":"\u21d8","searrow;":"\u2198","sect;":"\u00a7",sect:"\u00a7","semi;":";","seswar;":"\u2929","setminus;":"\u2216","setmn;":"\u2216","sext;":"\u2736","Sfr;":"\ud835\udd16","sfr;":"\ud835\udd30","sfrown;":"\u2322","sharp;":"\u266f","SHCHcy;":"\u0429","shchcy;":"\u0449","SHcy;":"\u0428","shcy;":"\u0448","ShortDownArrow;":"\u2193","ShortLeftArrow;":"\u2190","shortmid;":"\u2223","shortparallel;":"\u2225","ShortRightArrow;":"\u2192","ShortUpArrow;":"\u2191","shy;":"\u00ad",shy:"\u00ad","Sigma;":"\u03a3","sigma;":"\u03c3","sigmaf;":"\u03c2","sigmav;":"\u03c2","sim;":"\u223c","simdot;":"\u2a6a","sime;":"\u2243","simeq;":"\u2243","simg;":"\u2a9e","simgE;":"\u2aa0","siml;":"\u2a9d","simlE;":"\u2a9f","simne;":"\u2246","simplus;":"\u2a24","simrarr;":"\u2972","slarr;":"\u2190","SmallCircle;":"\u2218","smallsetminus;":"\u2216","smashp;":"\u2a33","smeparsl;":"\u29e4","smid;":"\u2223","smile;":"\u2323","smt;":"\u2aaa","smte;":"\u2aac","smtes;":"\u2aac\ufe00","SOFTcy;":"\u042c","softcy;":"\u044c","solbar;":"\u233f","solb;":"\u29c4","sol;":"/","Sopf;":"\ud835\udd4a","sopf;":"\ud835\udd64","spades;":"\u2660","spadesuit;":"\u2660","spar;":"\u2225","sqcap;":"\u2293","sqcaps;":"\u2293\ufe00","sqcup;":"\u2294","sqcups;":"\u2294\ufe00","Sqrt;":"\u221a","sqsub;":"\u228f","sqsube;":"\u2291","sqsubset;":"\u228f","sqsubseteq;":"\u2291","sqsup;":"\u2290","sqsupe;":"\u2292","sqsupset;":"\u2290","sqsupseteq;":"\u2292","square;":"\u25a1","Square;":"\u25a1","SquareIntersection;":"\u2293","SquareSubset;":"\u228f","SquareSubsetEqual;":"\u2291","SquareSuperset;":"\u2290","SquareSupersetEqual;":"\u2292","SquareUnion;":"\u2294","squarf;":"\u25aa","squ;":"\u25a1","squf;":"\u25aa","srarr;":"\u2192","Sscr;":"\ud835\udcae","sscr;":"\ud835\udcc8","ssetmn;":"\u2216","ssmile;":"\u2323","sstarf;":"\u22c6","Star;":"\u22c6","star;":"\u2606","starf;":"\u2605","straightepsilon;":"\u03f5","straightphi;":"\u03d5","strns;":"\u00af","sub;":"\u2282","Sub;":"\u22d0","subdot;":"\u2abd","subE;":"\u2ac5","sube;":"\u2286","subedot;":"\u2ac3","submult;":"\u2ac1","subnE;":"\u2acb","subne;":"\u228a","subplus;":"\u2abf","subrarr;":"\u2979","subset;":"\u2282","Subset;":"\u22d0","subseteq;":"\u2286","subseteqq;":"\u2ac5","SubsetEqual;":"\u2286","subsetneq;":"\u228a","subsetneqq;":"\u2acb","subsim;":"\u2ac7","subsub;":"\u2ad5","subsup;":"\u2ad3","succapprox;":"\u2ab8","succ;":"\u227b","succcurlyeq;":"\u227d","Succeeds;":"\u227b","SucceedsEqual;":"\u2ab0","SucceedsSlantEqual;":"\u227d","SucceedsTilde;":"\u227f","succeq;":"\u2ab0","succnapprox;":"\u2aba","succneqq;":"\u2ab6","succnsim;":"\u22e9","succsim;":"\u227f","SuchThat;":"\u220b","sum;":"\u2211","Sum;":"\u2211","sung;":"\u266a","sup1;":"\u00b9",sup1:"\u00b9","sup2;":"\u00b2",sup2:"\u00b2","sup3;":"\u00b3",sup3:"\u00b3","sup;":"\u2283","Sup;":"\u22d1","supdot;":"\u2abe","supdsub;":"\u2ad8","supE;":"\u2ac6","supe;":"\u2287","supedot;":"\u2ac4","Superset;":"\u2283","SupersetEqual;":"\u2287","suphsol;":"\u27c9","suphsub;":"\u2ad7","suplarr;":"\u297b","supmult;":"\u2ac2","supnE;":"\u2acc","supne;":"\u228b","supplus;":"\u2ac0","supset;":"\u2283","Supset;":"\u22d1","supseteq;":"\u2287","supseteqq;":"\u2ac6","supsetneq;":"\u228b","supsetneqq;":"\u2acc","supsim;":"\u2ac8","supsub;":"\u2ad4","supsup;":"\u2ad6","swarhk;":"\u2926","swarr;":"\u2199","swArr;":"\u21d9","swarrow;":"\u2199","swnwar;":"\u292a","szlig;":"\u00df",szlig:"\u00df","Tab;":" ","target;":"\u2316","Tau;":"\u03a4","tau;":"\u03c4","tbrk;":"\u23b4","Tcaron;":"\u0164","tcaron;":"\u0165","Tcedil;":"\u0162","tcedil;":"\u0163","Tcy;":"\u0422","tcy;":"\u0442","tdot;":"\u20db","telrec;":"\u2315","Tfr;":"\ud835\udd17","tfr;":"\ud835\udd31","there4;":"\u2234","therefore;":"\u2234","Therefore;":"\u2234","Theta;":"\u0398","theta;":"\u03b8","thetasym;":"\u03d1","thetav;":"\u03d1","thickapprox;":"\u2248","thicksim;":"\u223c","ThickSpace;":"\u205f\u200a","ThinSpace;":"\u2009","thinsp;":"\u2009","thkap;":"\u2248","thksim;":"\u223c","THORN;":"\u00de",THORN:"\u00de","thorn;":"\u00fe",thorn:"\u00fe","tilde;":"\u02dc","Tilde;":"\u223c","TildeEqual;":"\u2243","TildeFullEqual;":"\u2245","TildeTilde;":"\u2248","timesbar;":"\u2a31","timesb;":"\u22a0","times;":"\u00d7",times:"\u00d7","timesd;":"\u2a30","tint;":"\u222d","toea;":"\u2928","topbot;":"\u2336","topcir;":"\u2af1","top;":"\u22a4","Topf;":"\ud835\udd4b","topf;":"\ud835\udd65","topfork;":"\u2ada","tosa;":"\u2929","tprime;":"\u2034","trade;":"\u2122","TRADE;":"\u2122","triangle;":"\u25b5","triangledown;":"\u25bf","triangleleft;":"\u25c3","trianglelefteq;":"\u22b4","triangleq;":"\u225c","triangleright;":"\u25b9","trianglerighteq;":"\u22b5","tridot;":"\u25ec","trie;":"\u225c","triminus;":"\u2a3a","TripleDot;":"\u20db","triplus;":"\u2a39","trisb;":"\u29cd","tritime;":"\u2a3b","trpezium;":"\u23e2","Tscr;":"\ud835\udcaf","tscr;":"\ud835\udcc9","TScy;":"\u0426","tscy;":"\u0446","TSHcy;":"\u040b","tshcy;":"\u045b","Tstrok;":"\u0166","tstrok;":"\u0167","twixt;":"\u226c","twoheadleftarrow;":"\u219e","twoheadrightarrow;":"\u21a0","Uacute;":"\u00da",Uacute:"\u00da","uacute;":"\u00fa",uacute:"\u00fa","uarr;":"\u2191","Uarr;":"\u219f","uArr;":"\u21d1","Uarrocir;":"\u2949","Ubrcy;":"\u040e","ubrcy;":"\u045e","Ubreve;":"\u016c","ubreve;":"\u016d","Ucirc;":"\u00db",Ucirc:"\u00db","ucirc;":"\u00fb",ucirc:"\u00fb","Ucy;":"\u0423","ucy;":"\u0443","udarr;":"\u21c5","Udblac;":"\u0170","udblac;":"\u0171","udhar;":"\u296e","ufisht;":"\u297e","Ufr;":"\ud835\udd18","ufr;":"\ud835\udd32","Ugrave;":"\u00d9",Ugrave:"\u00d9","ugrave;":"\u00f9",ugrave:"\u00f9","uHar;":"\u2963","uharl;":"\u21bf","uharr;":"\u21be","uhblk;":"\u2580","ulcorn;":"\u231c","ulcorner;":"\u231c","ulcrop;":"\u230f","ultri;":"\u25f8","Umacr;":"\u016a","umacr;":"\u016b","uml;":"\u00a8",uml:"\u00a8","UnderBar;":"_","UnderBrace;":"\u23df","UnderBracket;":"\u23b5","UnderParenthesis;":"\u23dd","Union;":"\u22c3","UnionPlus;":"\u228e","Uogon;":"\u0172","uogon;":"\u0173","Uopf;":"\ud835\udd4c","uopf;":"\ud835\udd66","UpArrowBar;":"\u2912","uparrow;":"\u2191","UpArrow;":"\u2191","Uparrow;":"\u21d1","UpArrowDownArrow;":"\u21c5","updownarrow;":"\u2195","UpDownArrow;":"\u2195","Updownarrow;":"\u21d5","UpEquilibrium;":"\u296e","upharpoonleft;":"\u21bf","upharpoonright;":"\u21be","uplus;":"\u228e","UpperLeftArrow;":"\u2196","UpperRightArrow;":"\u2197","upsi;":"\u03c5","Upsi;":"\u03d2","upsih;":"\u03d2","Upsilon;":"\u03a5","upsilon;":"\u03c5","UpTeeArrow;":"\u21a5","UpTee;":"\u22a5","upuparrows;":"\u21c8","urcorn;":"\u231d","urcorner;":"\u231d","urcrop;":"\u230e","Uring;":"\u016e","uring;":"\u016f","urtri;":"\u25f9","Uscr;":"\ud835\udcb0","uscr;":"\ud835\udcca","utdot;":"\u22f0","Utilde;":"\u0168","utilde;":"\u0169","utri;":"\u25b5","utrif;":"\u25b4","uuarr;":"\u21c8","Uuml;":"\u00dc",Uuml:"\u00dc","uuml;":"\u00fc",uuml:"\u00fc","uwangle;":"\u29a7","vangrt;":"\u299c","varepsilon;":"\u03f5","varkappa;":"\u03f0","varnothing;":"\u2205","varphi;":"\u03d5","varpi;":"\u03d6","varpropto;":"\u221d","varr;":"\u2195","vArr;":"\u21d5","varrho;":"\u03f1","varsigma;":"\u03c2","varsubsetneq;":"\u228a\ufe00","varsubsetneqq;":"\u2acb\ufe00","varsupsetneq;":"\u228b\ufe00","varsupsetneqq;":"\u2acc\ufe00","vartheta;":"\u03d1","vartriangleleft;":"\u22b2","vartriangleright;":"\u22b3","vBar;":"\u2ae8","Vbar;":"\u2aeb","vBarv;":"\u2ae9","Vcy;":"\u0412","vcy;":"\u0432","vdash;":"\u22a2","vDash;":"\u22a8","Vdash;":"\u22a9","VDash;":"\u22ab","Vdashl;":"\u2ae6","veebar;":"\u22bb","vee;":"\u2228","Vee;":"\u22c1","veeeq;":"\u225a","vellip;":"\u22ee","verbar;":"|","Verbar;":"\u2016","vert;":"|","Vert;":"\u2016","VerticalBar;":"\u2223","VerticalLine;":"|","VerticalSeparator;":"\u2758","VerticalTilde;":"\u2240","VeryThinSpace;":"\u200a","Vfr;":"\ud835\udd19","vfr;":"\ud835\udd33","vltri;":"\u22b2","vnsub;":"\u2282\u20d2","vnsup;":"\u2283\u20d2","Vopf;":"\ud835\udd4d","vopf;":"\ud835\udd67","vprop;":"\u221d","vrtri;":"\u22b3","Vscr;":"\ud835\udcb1","vscr;":"\ud835\udccb","vsubnE;":"\u2acb\ufe00","vsubne;":"\u228a\ufe00","vsupnE;":"\u2acc\ufe00","vsupne;":"\u228b\ufe00","Vvdash;":"\u22aa","vzigzag;":"\u299a","Wcirc;":"\u0174","wcirc;":"\u0175","wedbar;":"\u2a5f","wedge;":"\u2227","Wedge;":"\u22c0","wedgeq;":"\u2259","weierp;":"\u2118","Wfr;":"\ud835\udd1a","wfr;":"\ud835\udd34","Wopf;":"\ud835\udd4e","wopf;":"\ud835\udd68","wp;":"\u2118","wr;":"\u2240","wreath;":"\u2240","Wscr;":"\ud835\udcb2","wscr;":"\ud835\udccc","xcap;":"\u22c2","xcirc;":"\u25ef","xcup;":"\u22c3","xdtri;":"\u25bd","Xfr;":"\ud835\udd1b","xfr;":"\ud835\udd35","xharr;":"\u27f7","xhArr;":"\u27fa","Xi;":"\u039e","xi;":"\u03be","xlarr;":"\u27f5","xlArr;":"\u27f8","xmap;":"\u27fc","xnis;":"\u22fb","xodot;":"\u2a00","Xopf;":"\ud835\udd4f","xopf;":"\ud835\udd69","xoplus;":"\u2a01","xotime;":"\u2a02","xrarr;":"\u27f6","xrArr;":"\u27f9","Xscr;":"\ud835\udcb3","xscr;":"\ud835\udccd","xsqcup;":"\u2a06","xuplus;":"\u2a04","xutri;":"\u25b3","xvee;":"\u22c1","xwedge;":"\u22c0","Yacute;":"\u00dd",Yacute:"\u00dd","yacute;":"\u00fd",yacute:"\u00fd","YAcy;":"\u042f","yacy;":"\u044f","Ycirc;":"\u0176","ycirc;":"\u0177","Ycy;":"\u042b","ycy;":"\u044b","yen;":"\u00a5",yen:"\u00a5","Yfr;":"\ud835\udd1c","yfr;":"\ud835\udd36","YIcy;":"\u0407","yicy;":"\u0457","Yopf;":"\ud835\udd50","yopf;":"\ud835\udd6a","Yscr;":"\ud835\udcb4","yscr;":"\ud835\udcce","YUcy;":"\u042e","yucy;":"\u044e","yuml;":"\u00ff",yuml:"\u00ff","Yuml;":"\u0178","Zacute;":"\u0179","zacute;":"\u017a","Zcaron;":"\u017d","zcaron;":"\u017e","Zcy;":"\u0417","zcy;":"\u0437","Zdot;":"\u017b","zdot;":"\u017c","zeetrf;":"\u2128","ZeroWidthSpace;":"\u200b","Zeta;":"\u0396","zeta;":"\u03b6","zfr;":"\ud835\udd37","Zfr;":"\u2128","ZHcy;":"\u0416","zhcy;":"\u0436","zigrarr;":"\u21dd","zopf;":"\ud835\udd6b","Zopf;":"\u2124","Zscr;":"\ud835\udcb5","zscr;":"\ud835\udccf","zwj;":"\u200d","zwnj;":"\u200c"}},{}],13:[function(e,t,n){function u(e,t){return r.isUndefined(t)?""+t:r.isNumber(t)&&(isNaN(t)||!isFinite(t))?t.toString():r.isFunction(t)||r.isRegExp(t)?t.toString():t}function a(e,t){return r.isString(e)?e.length=0;u--)if(n[u]!=s[u])return!1;for(u=n.length-1;u>=0;u--){o=n[u];if(!h(e[o],t[o]))return!1}return!0}function v(e,t){return!e||!t?!1:Object.prototype.toString.call(t)=="[object RegExp]"?t.test(e):e instanceof t?!0:t.call({},e)===!0?!0:!1}function m(e,t,n,i){var s;r.isString(n)&&(i=n,n=null);try{t()}catch(o){s=o}i=(n&&n.name?" ("+n.name+").":".")+(i?" "+i:"."),e&&!s&&l(s,n,"Missing expected exception"+i),!e&&v(s,n)&&l(s,n,"Got unwanted exception"+i);if(e&&s&&n&&!v(s,n)||!e&&s)throw s}var r=e("util/"),i=Array.prototype.slice,s=Object.prototype.hasOwnProperty,o=t.exports=c;o.AssertionError=function(t){this.name="AssertionError",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=f(this),this.generatedMessage=!0);var n=t.stackStartFunction||l;if(Error.captureStackTrace)Error.captureStackTrace(this,n);else{var r=new Error;if(r.stack){var i=r.stack,s=n.name,o=i.indexOf("\n"+s);if(o>=0){var u=i.indexOf("\n",o+1);i=i.substring(u+1)}this.stack=i}}},r.inherits(o.AssertionError,Error),o.fail=l,o.ok=c,o.equal=function(t,n,r){t!=n&&l(t,n,r,"==",o.equal)},o.notEqual=function(t,n,r){t==n&&l(t,n,r,"!=",o.notEqual)},o.deepEqual=function(t,n,r){h(t,n)||l(t,n,r,"deepEqual",o.deepEqual)},o.notDeepEqual=function(t,n,r){h(t,n)&&l(t,n,r,"notDeepEqual",o.notDeepEqual)},o.strictEqual=function(t,n,r){t!==n&&l(t,n,r,"===",o.strictEqual)},o.notStrictEqual=function(t,n,r){t===n&&l(t,n,r,"!==",o.notStrictEqual)},o.throws=function(e,t,n){m.apply(this,[!0].concat(i.call(arguments)))},o.doesNotThrow=function(e,t){m.apply(this,[!1].concat(i.call(arguments)))},o.ifError=function(e){if(e)throw e};var g=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}},{"util/":15}],14:[function(e,t,n){t.exports=function(t){return t&&typeof t=="object"&&typeof t.copy=="function"&&typeof t.fill=="function"&&typeof t.readUInt8=="function"}},{}],15:[function(e,t,n){(function(t,r){function u(e,t){var r={seen:[],stylize:f};return arguments.length>=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),y(t)?r.showHidden=t:t&&n._extend(r,t),T(r.showHidden)&&(r.showHidden=!1),T(r.depth)&&(r.depth=2),T(r.colors)&&(r.colors=!1),T(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=a),c(r,e,r.depth)}function a(e,t){var n=u.styles[t];return n?"["+u.colors[n][0]+"m"+e+"["+u.colors[n][1]+"m":e}function f(e,t){return e}function l(e){var t={};return e.forEach(function(e,n){t[e]=!0}),t}function c(e,t,r){if(e.customInspect&&t&&A(t.inspect)&&t.inspect!==n.inspect&&(!t.constructor||t.constructor.prototype!==t)){var i=t.inspect(r,e);return S(i)||(i=c(e,i,r)),i}var s=h(e,t);if(s)return s;var o=Object.keys(t),u=l(o);e.showHidden&&(o=Object.getOwnPropertyNames(t));if(L(t)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return p(t);if(o.length===0){if(A(t)){var a=t.name?": "+t.name:"";return e.stylize("[Function"+a+"]","special")}if(N(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(k(t))return e.stylize(Date.prototype.toString.call(t),"date");if(L(t))return p(t)}var f="",y=!1,b=["{","}"];g(t)&&(y=!0,b=["[","]"]);if(A(t)){var w=t.name?": "+t.name:"";f=" [Function"+w+"]"}N(t)&&(f=" "+RegExp.prototype.toString.call(t)),k(t)&&(f=" "+Date.prototype.toUTCString.call(t)),L(t)&&(f=" "+p(t));if(o.length!==0||!!y&&t.length!=0){if(r<0)return N(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special");e.seen.push(t);var E;return y?E=d(e,t,r,u,o):E=o.map(function(n){return v(e,t,r,u,n,y)}),e.seen.pop(),m(E,f,b)}return b[0]+f+b[1]}function h(e,t){if(T(t))return e.stylize("undefined","undefined");if(S(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}if(E(t))return e.stylize(""+t,"number");if(y(t))return e.stylize(""+t,"boolean");if(b(t))return e.stylize("null","null")}function p(e){return"["+Error.prototype.toString.call(e)+"]"}function d(e,t,n,r,i){var s=[];for(var o=0,u=t.length;o-1&&(s?u=u.split("\n").map(function(e){return" "+e}).join("\n").substr(2):u="\n"+u.split("\n").map(function(e){return" "+e}).join("\n"))):u=e.stylize("[Circular]","special"));if(T(o)){if(s&&i.match(/^\d+$/))return u;o=JSON.stringify(""+i),o.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.substr(1,o.length-2),o=e.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=e.stylize(o,"string"))}return o+": "+u}function m(e,t,n){var r=0,i=e.reduce(function(e,t){return r++,t.indexOf("\n")>=0&&r++,e+t.replace(/\u001b\[\d\d?m/g,"").length+1},0);return i>60?n[0]+(t===""?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1]:n[0]+t+" "+e.join(", ")+" "+n[1]}function g(e){return Array.isArray(e)}function y(e){return typeof e=="boolean"}function b(e){return e===null}function w(e){return e==null}function E(e){return typeof e=="number"}function S(e){return typeof e=="string"}function x(e){return typeof e=="symbol"}function T(e){return e===void 0}function N(e){return C(e)&&M(e)==="[object RegExp]"}function C(e){return typeof e=="object"&&e!==null}function k(e){return C(e)&&M(e)==="[object Date]"}function L(e){return C(e)&&(M(e)==="[object Error]"||e instanceof Error)}function A(e){return typeof e=="function"}function O(e){return e===null||typeof e=="boolean"||typeof e=="number"||typeof e=="string"||typeof e=="symbol"||typeof e=="undefined"}function M(e){return Object.prototype.toString.call(e)}function _(e){return e<10?"0"+e.toString(10):e.toString(10)}function P(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(":");return[e.getDate(),D[e.getMonth()],t].join(" ")}function H(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var i=/%[sdj%]/g;n.format=function(e){if(!S(e)){var t=[];for(var n=0;n=s)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(t){return"[Circular]"};default:return e}});for(var a=r[n];n0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),console.trace())}return this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}if(!i(t))throw TypeError("listener must be a function");var n=!1;return r.listener=t,this.on(e,r),this},r.prototype.removeListener=function(e,t){var n,r,s,u;if(!i(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;n=this._events[e],s=n.length,r=-1;if(n===t||i(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(o(n)){for(u=s;u-->0;)if(n[u]===t||n[u].listener&&n[u].listener===t){r=u;break}if(r<0)return this;n.length===1?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return arguments.length===0?this._events={}:this._events[e]&&delete this._events[e],this;if(arguments.length===0){for(t in this._events){if(t==="removeListener")continue;this.removeAllListeners(t)}return this.removeAllListeners("removeListener"),this._events={},this}n=this._events[e];if(i(n))this.removeListener(e,n);else while(n.length)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){var t;return!this._events||!this._events[e]?t=[]:i(this._events[e])?t=[this._events[e]]:t=this._events[e].slice(),t},r.listenerCount=function(e,t){var n;return!e._events||!e._events[t]?n=0:i(e._events[t])?n=1:n=e._events[t].length,n}},{}],17:[function(e,t,n){typeof Object.create=="function"?t.exports=function(t,n){t.super_=n,t.prototype=Object.create(n.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,n){t.super_=n;var r=function(){};r.prototype=n.prototype,t.prototype=new r,t.prototype.constructor=t}},{}],18:[function(e,t,n){function i(){}var r=t.exports={};r.nextTick=function(){var e=typeof window!="undefined"&&window.setImmediate,t=typeof window!="undefined"&&window.postMessage&&window.addEventListener;if(e)return function(e){return window.setImmediate(e)};if(t){var n=[];return window.addEventListener("message",function(e){var t=e.source;if((t===window||t===null)&&e.data==="process-tick"){e.stopPropagation();if(n.length>0){var r=n.shift();r()}}},!0),function(t){n.push(t),window.postMessage("process-tick","*")}}return function(t){setTimeout(t,0)}}(),r.title="browser",r.browser=!0,r.env={},r.argv=[],r.on=i,r.once=i,r.off=i,r.emit=i,r.binding=function(e){throw new Error("process.binding is not supported")},r.cwd=function(){return"/"},r.chdir=function(e){throw new Error("process.chdir is not supported")}},{}],19:[function(e,t,n){t.exports=e(14)},{}],20:[function(e,t,n){t.exports=e(15)},{"./support/isBuffer":19,"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":18,inherits:17}]},{},[9])(9)}),define("ace/mode/html_worker",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/worker/mirror","ace/mode/html/saxparser"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/lang"),s=e("../worker/mirror").Mirror,o=e("./html/saxparser").SAXParser,u={"expected-doctype-but-got-start-tag":"info","expected-doctype-but-got-chars":"info","non-html-root":"info"},a=t.Worker=function(e){s.call(this,e),this.setTimeout(400),this.context=null};r.inherits(a,s),function(){this.setOptions=function(e){this.context=e.context},this.onUpdate=function(){var e=this.doc.getValue();if(!e)return;var t=new o,n=[],r=function(){};t.contentHandler={startDocument:r,endDocument:r,startElement:r,endElement:r,characters:r},t.errorHandler={error:function(e,t,r){n.push({row:t.line,column:t.column,text:e,type:u[r]||"error"})}},this.context?t.parseFragment(e,this.context):t.parse(e),this.sender.emit("error",n)}}.call(a.prototype)}),define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t==="undefined"||t==="boolean"||t==="number"||t==="string"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n=="function"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r=="function"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError("Function.prototype.bind called on incompatible "+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,"__defineGetter__"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,"XXX"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h>>0;if(a(t)!="[object Function]")throw new TypeError;while(++s>>0,s=Array(i),o=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var u=0;u>>0,s=[],o,u=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var f=0;f>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduce of empty array with no initial value");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}while(!0);for(;s>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduceRight of empty array with no initial value");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)=="[object String]"?this.split(""):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document=="undefined"||w(document.createElement("div"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T="Property description must be an object: ",N="Object.defineProperty called on non-object: ",C="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(N+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,"value"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,"get")&&l(t,n,r.get),f(r,"set")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(f(t,n))n+="?";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n_addClient(this); _server->_handleEvent(this, WS_EVT_CONNECT, request, NULL, 0); delete request; + memset(&_pinfo,0,sizeof(_pinfo)); // } AsyncWebSocketClient::~AsyncWebSocketClient(){ diff --git a/src/SPIFFSEditor.cpp b/src/SPIFFSEditor.cpp index a84fa87..169d70f 100644 --- a/src/SPIFFSEditor.cpp +++ b/src/SPIFFSEditor.cpp @@ -2,268 +2,269 @@ #include //File: edit.htm.gz, Size: 4151 -#define edit_htm_gz_len 4151 +#define edit_htm_gz_len 4169 const uint8_t edit_htm_gz[] PROGMEM = { - 0x1F, 0x8B, 0x08, 0x08, 0xB8, 0x94, 0xB1, 0x59, 0x00, 0x03, 0x65, 0x64, 0x69, 0x74, 0x2E, 0x68, - 0x74, 0x6D, 0x00, 0xB5, 0x3A, 0x0B, 0x7B, 0xDA, 0xB8, 0xB2, 0x7F, 0xC5, 0x71, 0xCF, 0x66, 0xED, - 0x83, 0x31, 0x90, 0xA4, 0xD9, 0xD6, 0xC4, 0xC9, 0x42, 0x92, 0x36, 0x6D, 0xF3, 0x6A, 0x80, 0xB6, - 0x69, 0x4F, 0xEE, 0x7E, 0xC2, 0x16, 0xA0, 0xC6, 0x96, 0x5D, 0x5B, 0x0E, 0x49, 0x59, 0xFE, 0xFB, - 0x9D, 0x91, 0x6C, 0xB0, 0x09, 0x69, 0x77, 0xCF, 0xBD, 0xBB, 0xDD, 0x2D, 0x92, 0x46, 0x33, 0x9A, - 0x19, 0xCD, 0x53, 0xDE, 0xBD, 0x8D, 0xA3, 0x8B, 0xC3, 0xFE, 0xF5, 0xE5, 0xB1, 0x36, 0x11, 0x61, - 0xB0, 0xBF, 0x87, 0x7F, 0x6B, 0x01, 0xE1, 0x63, 0x97, 0xF2, 0xFD, 0x3D, 0xC1, 0x44, 0x40, 0xF7, - 0x8F, 0x7B, 0x97, 0xDA, 0xB1, 0xCF, 0x44, 0x94, 0xEC, 0x35, 0xD4, 0xCA, 0x5E, 0x2A, 0x1E, 0x02, - 0xAA, 0x85, 0xD4, 0x67, 0xC4, 0x4D, 0xBD, 0x84, 0xC2, 0x66, 0xDB, 0x0B, 0x67, 0xDF, 0xEB, 0x8C, - 0xFB, 0xF4, 0xDE, 0xD9, 0x6E, 0x36, 0xDB, 0x71, 0x94, 0x32, 0xC1, 0x22, 0xEE, 0x90, 0x61, 0x1A, - 0x05, 0x99, 0xA0, 0xED, 0x80, 0x8E, 0x84, 0xF3, 0x3C, 0xBE, 0x6F, 0x0F, 0xA3, 0xC4, 0xA7, 0x89, - 0xD3, 0x8A, 0xEF, 0x35, 0x00, 0x31, 0x5F, 0x7B, 0xB6, 0xB3, 0xB3, 0xD3, 0x1E, 0x12, 0xEF, 0x76, - 0x9C, 0x44, 0x19, 0xF7, 0xEB, 0x5E, 0x14, 0x44, 0x89, 0xF3, 0x6C, 0xF4, 0x1C, 0xFF, 0xB4, 0x7D, - 0x96, 0xC6, 0x01, 0x79, 0x70, 0x78, 0xC4, 0x29, 0xE0, 0xDE, 0xD7, 0xD3, 0x09, 0xF1, 0xA3, 0xA9, - 0xD3, 0xD4, 0x9A, 0x5A, 0xAB, 0x09, 0x44, 0x92, 0xF1, 0x90, 0x18, 0x4D, 0x0B, 0xFF, 0xD8, 0x3B, - 0x66, 0x7B, 0x14, 0x71, 0x51, 0x4F, 0xD9, 0x77, 0xEA, 0xB4, 0xB6, 0xE0, 0x34, 0x39, 0x1D, 0x91, - 0x90, 0x05, 0x0F, 0x4E, 0x4A, 0x78, 0x5A, 0x4F, 0x69, 0xC2, 0x46, 0x6A, 0x79, 0x4A, 0xD9, 0x78, - 0x22, 0x9C, 0xDF, 0x9A, 0xCD, 0x39, 0xF0, 0xAF, 0x65, 0xC1, 0x2C, 0x60, 0x29, 0x20, 0xA3, 0x78, - 0xEA, 0x3C, 0x11, 0xC5, 0x4E, 0x53, 0xB1, 0xDE, 0x6C, 0x87, 0x24, 0x19, 0x33, 0x0E, 0x83, 0x98, - 0xF8, 0x3E, 0xE3, 0x63, 0x47, 0xA1, 0x05, 0x6C, 0xB6, 0x90, 0x36, 0xA1, 0x01, 0x11, 0xEC, 0x8E, - 0xB6, 0x43, 0xC6, 0xEB, 0x53, 0xE6, 0x8B, 0x89, 0xB3, 0x0B, 0x3C, 0xB6, 0xBD, 0x2C, 0x49, 0x41, - 0xA6, 0x38, 0x62, 0x5C, 0xD0, 0x44, 0xA2, 0xA5, 0x31, 0xE1, 0xB3, 0x5C, 0x54, 0x54, 0x40, 0x21, - 0x27, 0xE3, 0x01, 0xE3, 0xB4, 0x3E, 0x0C, 0x22, 0xEF, 0x76, 0x71, 0xD2, 0x6E, 0x7C, 0x9F, 0x9F, - 0xE5, 0x4C, 0xA2, 0x3B, 0x9A, 0xCC, 0x96, 0xEA, 0x92, 0xD8, 0x15, 0x60, 0x85, 0x34, 0xA5, 0x74, - 0x6E, 0x8B, 0xBB, 0x0C, 0xA0, 0x96, 0xFC, 0x05, 0x29, 0x17, 0xFC, 0x2F, 0x45, 0x5A, 0x11, 0x5C, - 0xA1, 0x30, 0x1E, 0x67, 0x62, 0xF6, 0xF8, 0x2A, 0xA3, 0x98, 0x78, 0x4C, 0x3C, 0xA0, 0xFC, 0xB0, - 0x6D, 0x86, 0xBA, 0x04, 0xAC, 0x24, 0x24, 0x81, 0x86, 0x3A, 0xD7, 0x3E, 0xD0, 0xC4, 0x27, 0x9C, - 0x58, 0x9D, 0x84, 0x91, 0xC0, 0xEA, 0x2D, 0xB5, 0x5E, 0x0F, 0xA3, 0xEF, 0xF5, 0x0C, 0xC6, 0x30, - 0x0F, 0xA8, 0x27, 0x94, 0x92, 0xE1, 0x1E, 0x86, 0xB7, 0x4C, 0x3C, 0x06, 0x3C, 0x5A, 0x28, 0xA9, - 0x4B, 0x2A, 0x69, 0xA2, 0x2E, 0xB0, 0x25, 0xD5, 0x83, 0x1C, 0x4B, 0xC9, 0x95, 0x50, 0xF5, 0x61, - 0x24, 0x44, 0x14, 0x4A, 0x93, 0x5B, 0x08, 0xAC, 0x49, 0xAB, 0x79, 0xF1, 0xE8, 0x46, 0xD6, 0x6B, - 0xBF, 0x44, 0xBE, 0x0D, 0x7A, 0x15, 0xCC, 0x23, 0x41, 0x9D, 0x04, 0x6C, 0xCC, 0x9D, 0x90, 0xF9, - 0x7E, 0x40, 0x4B, 0x56, 0xEB, 0x64, 0x49, 0x60, 0xF8, 0x44, 0x10, 0x87, 0x85, 0x64, 0x4C, 0x1B, - 0x31, 0x1F, 0x03, 0x34, 0xA5, 0xBB, 0x3B, 0x16, 0xFB, 0xD0, 0xBD, 0xB8, 0x9A, 0x36, 0xDF, 0xBD, - 0x1E, 0x47, 0x1D, 0xF8, 0xE7, 0xBC, 0x37, 0x98, 0x1C, 0x0F, 0xC6, 0x30, 0xEA, 0xE2, 0xB4, 0xF3, - 0xFE, 0xB0, 0xF3, 0x1E, 0x7E, 0x0E, 0x5B, 0xB5, 0xAF, 0xA3, 0x6F, 0xB8, 0xD0, 0x7D, 0xED, 0x77, - 0xFB, 0x83, 0xE3, 0x4E, 0xE7, 0x5D, 0xE3, 0xCD, 0xF9, 0xF4, 0xE3, 0xBB, 0x5D, 0x04, 0x77, 0x83, - 0xE6, 0xD5, 0x87, 0x49, 0x73, 0xB0, 0xF5, 0x32, 0xF4, 0x4F, 0xFC, 0x89, 0x17, 0x0E, 0x3A, 0xEF, - 0x3F, 0x5E, 0xDD, 0x5D, 0x87, 0x83, 0x71, 0xEF, 0x63, 0x6B, 0xF2, 0x79, 0xEB, 0x43, 0xEF, 0xF3, - 0xC7, 0x57, 0xB7, 0xF4, 0xD3, 0xC9, 0xDB, 0xCF, 0xFD, 0x29, 0x20, 0x1C, 0x45, 0xBD, 0xC1, 0x55, - 0xF7, 0x43, 0x77, 0xFC, 0xB9, 0xEB, 0x1D, 0xDF, 0x0F, 0x83, 0xF3, 0xEE, 0xEB, 0xCE, 0xB0, 0xB3, - 0xE5, 0x51, 0x3A, 0xEE, 0x5F, 0x75, 0xB3, 0x37, 0xEF, 0x2E, 0xC6, 0x8C, 0x4D, 0x7A, 0x9F, 0xCF, - 0xFB, 0xDE, 0xE1, 0xF3, 0xD3, 0xC1, 0x49, 0x87, 0x4D, 0xCE, 0xDF, 0x5E, 0x35, 0x6F, 0x5F, 0xBF, - 0x3B, 0x3C, 0xF2, 0xAE, 0xDF, 0x5E, 0xEF, 0x1E, 0x6D, 0x37, 0x7E, 0xFB, 0xED, 0xCC, 0xBF, 0x60, - 0xBC, 0x7F, 0xF7, 0xBD, 0x33, 0x3E, 0x9C, 0xBE, 0x78, 0x48, 0xFB, 0x93, 0x37, 0x77, 0xBC, 0xF1, - 0x21, 0xFA, 0xFA, 0xE6, 0xE1, 0x0C, 0xFE, 0xBB, 0xBC, 0xAC, 0x0D, 0x7B, 0xAD, 0x74, 0xF0, 0xFE, - 0xCD, 0x87, 0xAD, 0xF4, 0xE5, 0xF3, 0xB8, 0x7B, 0x74, 0x74, 0x17, 0x0E, 0x2F, 0x1B, 0xA1, 0x7F, - 0x3B, 0x12, 0x2F, 0xB6, 0x45, 0x7C, 0x3D, 0xCE, 0x3E, 0x7F, 0x7B, 0xFE, 0x76, 0xD2, 0xB8, 0xA0, - 0xE4, 0x7A, 0x52, 0x7B, 0xF8, 0xFE, 0xF0, 0x62, 0xD2, 0x3F, 0xB9, 0x3B, 0x0F, 0xC8, 0xFD, 0xF9, - 0xB9, 0xF7, 0x3D, 0xAC, 0x05, 0xE4, 0xE5, 0x45, 0x3F, 0x20, 0x49, 0x6B, 0xE0, 0x77, 0x1A, 0xB5, - 0xC3, 0xAD, 0xCE, 0x8E, 0x48, 0xAE, 0x0E, 0xF9, 0xD1, 0xF6, 0xD7, 0xDE, 0x8B, 0x6E, 0xB7, 0x15, - 0x0D, 0xBF, 0x6D, 0xBD, 0xBE, 0xDD, 0x7D, 0x3D, 0xD8, 0x7D, 0x3F, 0x7C, 0xDF, 0xE9, 0xED, 0x74, - 0x07, 0xE4, 0xBA, 0xF7, 0xBE, 0x33, 0xDA, 0x19, 0x4E, 0x26, 0xEF, 0xDE, 0xF5, 0x5F, 0xF9, 0x9D, - 0xEF, 0x49, 0xE7, 0x62, 0xDA, 0xB9, 0x3F, 0x1E, 0x74, 0x4E, 0x6A, 0xEF, 0x8E, 0xCF, 0x9A, 0xAD, - 0xDE, 0xF5, 0xF6, 0xF8, 0x6C, 0x77, 0xDA, 0x4D, 0x8F, 0x3B, 0xEF, 0xBB, 0xCD, 0xF1, 0xDB, 0x5A, - 0x48, 0x3E, 0x47, 0x87, 0xDB, 0xE3, 0x37, 0xBB, 0xEC, 0xF2, 0x9A, 0x74, 0xDE, 0x74, 0xDF, 0xA6, - 0xEC, 0x2A, 0x3C, 0x19, 0x34, 0x3B, 0x9D, 0xD3, 0x0B, 0xFA, 0xEA, 0x70, 0x9B, 0xBC, 0xDB, 0xF2, - 0x3E, 0x82, 0xFE, 0x07, 0x9F, 0xE8, 0x6F, 0xB5, 0xCE, 0xF4, 0xA2, 0x19, 0x78, 0x2F, 0x69, 0xFF, - 0xE4, 0xBA, 0x2F, 0x6F, 0xE7, 0x38, 0x78, 0xD5, 0xBF, 0xED, 0x65, 0xEF, 0xC3, 0xC3, 0x43, 0x53, - 0xE3, 0x51, 0x3D, 0xA1, 0x31, 0x25, 0xA2, 0x1C, 0xAE, 0x16, 0xFE, 0x01, 0xB6, 0xB5, 0xB4, 0xC2, - 0xDC, 0x4F, 0x05, 0xBD, 0x17, 0x75, 0x9F, 0x7A, 0x51, 0x42, 0xE4, 0x1E, 0x40, 0xA0, 0x09, 0x9A, - 0xD8, 0xFC, 0x77, 0x19, 0x3F, 0x35, 0x15, 0x3F, 0x35, 0xC2, 0x7D, 0xCD, 0x28, 0x1C, 0x01, 0x83, - 0x87, 0x4F, 0xEF, 0x98, 0x47, 0xEB, 0x31, 0xBB, 0xA7, 0x41, 0x5D, 0x22, 0x3B, 0x4D, 0x73, 0x26, - 0xFD, 0xAD, 0xD8, 0x46, 0x38, 0x98, 0x9A, 0xA4, 0x5A, 0x2C, 0xF8, 0x5F, 0x89, 0x47, 0x21, 0xB0, - 0x81, 0xCB, 0x84, 0xF8, 0xAB, 0x7C, 0x27, 0x4A, 0xEA, 0xC3, 0x6C, 0x3C, 0x62, 0xF7, 0xE0, 0xD0, - 0x23, 0xC6, 0x99, 0xA0, 0x5A, 0x2B, 0x9D, 0xFF, 0x5E, 0x90, 0xB9, 0xA5, 0x0F, 0xA3, 0x84, 0x84, - 0x34, 0xD5, 0xFE, 0x22, 0x99, 0xD9, 0x28, 0x89, 0xC2, 0x65, 0x10, 0x99, 0x8B, 0xA8, 0x34, 0x99, - 0xCF, 0x9F, 0x65, 0x71, 0x10, 0x11, 0x10, 0x73, 0x4D, 0xE4, 0x50, 0xF1, 0x34, 0x91, 0x6E, 0xB5, - 0x88, 0xAB, 0xB9, 0x9B, 0x6D, 0xA1, 0x5B, 0x96, 0xDD, 0x7A, 0x6B, 0x67, 0xE9, 0xBA, 0x75, 0xB9, - 0x17, 0xE3, 0xFD, 0x9A, 0x4C, 0x81, 0xF1, 0xA0, 0x14, 0xEE, 0x9E, 0x09, 0x50, 0xE9, 0x13, 0x87, - 0xCB, 0x43, 0xF2, 0xC8, 0xB0, 0x60, 0x40, 0x05, 0xEA, 0x96, 0x8C, 0xD4, 0x85, 0x24, 0xB0, 0x6F, - 0xFE, 0x8C, 0xCA, 0xBC, 0x67, 0x3D, 0x8B, 0x13, 0xB8, 0x0D, 0x3A, 0xFD, 0x11, 0xCD, 0x42, 0xA6, - 0x2A, 0x6D, 0x45, 0x53, 0x65, 0xBC, 0x5C, 0x84, 0x65, 0xDA, 0x93, 0xBC, 0x16, 0xA4, 0x1F, 0x4B, - 0x05, 0xE0, 0x05, 0x37, 0xCF, 0x91, 0x9B, 0x1F, 0x6A, 0x75, 0x7B, 0xF7, 0x97, 0x9C, 0x87, 0x9D, - 0xE6, 0x2F, 0x73, 0x3B, 0xDF, 0x5B, 0xA4, 0xE4, 0x56, 0x13, 0xFE, 0x29, 0x32, 0xEF, 0x8B, 0x25, - 0x0B, 0xC3, 0xE7, 0xF8, 0xA7, 0x60, 0x10, 0xE9, 0x94, 0x80, 0xDB, 0x3B, 0x2F, 0x5F, 0xF8, 0xC3, - 0x02, 0x98, 0x0B, 0xF6, 0x24, 0x3C, 0x21, 0x3E, 0xCB, 0x52, 0xE7, 0x79, 0xF3, 0x97, 0x5C, 0x9F, - 0x5B, 0x3B, 0x28, 0xFB, 0xE2, 0x2E, 0x71, 0xB2, 0xB4, 0xD8, 0x34, 0x66, 0x5C, 0xDB, 0x4A, 0x35, - 0xBC, 0x6F, 0x92, 0x2C, 0x0C, 0xB3, 0x92, 0xED, 0xE7, 0xBF, 0x2F, 0x4D, 0x13, 0xF7, 0xCF, 0x9A, - 0xBF, 0xCC, 0x44, 0x02, 0xD9, 0x64, 0x04, 0xB9, 0xC6, 0x49, 0x22, 0x41, 0x04, 0x35, 0x9A, 0xE6, - 0x1C, 0x84, 0x5B, 0x03, 0xD8, 0xDE, 0x6D, 0xFA, 0x74, 0x6C, 0xCE, 0xE7, 0x7B, 0x0D, 0x99, 0xD7, - 0xA0, 0x6C, 0xF1, 0x12, 0x16, 0x8B, 0xFD, 0x51, 0xC6, 0x3D, 0xE4, 0x41, 0x1B, 0x53, 0x83, 0x9A, - 0xB3, 0x84, 0x8A, 0x2C, 0xE1, 0x9A, 0x1F, 0x79, 0x19, 0x1A, 0xBB, 0x3D, 0xA6, 0xE2, 0x58, 0xD9, - 0x7D, 0xF7, 0xE1, 0x8D, 0x0F, 0x3B, 0xE6, 0x0B, 0x04, 0x6F, 0x2D, 0x02, 0x38, 0x30, 0x9C, 0x97, - 0xE3, 0x54, 0xF6, 0x43, 0x82, 0x01, 0x22, 0xEF, 0xE8, 0x83, 0x41, 0x2D, 0xB1, 0x40, 0xA4, 0x36, - 0xAE, 0x1B, 0xC5, 0x2E, 0x80, 0x71, 0x73, 0x76, 0x07, 0x4A, 0x20, 0x2E, 0xFD, 0x22, 0x6E, 0x2C, - 0xE6, 0x72, 0xF8, 0x69, 0xE7, 0xBB, 0xC9, 0x1E, 0x3B, 0xA8, 0xB7, 0x1C, 0xB2, 0xCF, 0x0E, 0x5A, - 0xE0, 0x5E, 0x65, 0x6E, 0xE4, 0xB9, 0xAF, 0x58, 0x40, 0x07, 0xB9, 0xC3, 0xE1, 0x31, 0x48, 0x6C, - 0xB1, 0x85, 0x28, 0xE2, 0x5B, 0xCD, 0xE6, 0x86, 0x4B, 0x0F, 0x48, 0x00, 0x39, 0xCC, 0xD0, 0x8F, - 0xAF, 0xAE, 0x2E, 0xAE, 0xBE, 0xE8, 0x35, 0x5A, 0xD3, 0x6F, 0x1C, 0x4D, 0xAF, 0x71, 0xD3, 0x11, - 0x76, 0x42, 0x47, 0x09, 0x4D, 0x27, 0x97, 0x44, 0x4C, 0x8C, 0xD4, 0xBE, 0x23, 0x41, 0x56, 0x16, - 0x84, 0xA1, 0xDC, 0xC8, 0xA2, 0x70, 0x39, 0x9D, 0x6A, 0xAF, 0x40, 0xCD, 0x47, 0x90, 0xEA, 0xDA, - 0xC2, 0x26, 0x71, 0x4C, 0xB9, 0x6F, 0xE8, 0x31, 0x20, 0xEA, 0x16, 0x35, 0xAD, 0x84, 0x7E, 0xCB, - 0x68, 0x2A, 0x52, 0x1B, 0x2C, 0xD7, 0xD0, 0x2F, 0x07, 0x7D, 0xDD, 0xD2, 0x1B, 0xE8, 0x47, 0x3A, - 0xF0, 0x46, 0xCC, 0x39, 0x52, 0x89, 0x5C, 0xD0, 0xA4, 0x3E, 0xCC, 0xC0, 0xA0, 0xB8, 0x6E, 0xB6, - 0x23, 0x9B, 0x71, 0x4E, 0x93, 0x93, 0xFE, 0xD9, 0xA9, 0xAB, 0x5F, 0x29, 0x46, 0xB4, 0x53, 0x28, - 0x48, 0x74, 0x4B, 0x5E, 0x51, 0x7E, 0xC8, 0xE1, 0x84, 0x05, 0xBE, 0x11, 0x99, 0x6D, 0x24, 0xE1, - 0x49, 0x12, 0xB2, 0x40, 0x01, 0x0A, 0x9E, 0x2D, 0x1E, 0x62, 0xEA, 0xEA, 0x23, 0x50, 0x86, 0x6E, - 0x79, 0x76, 0x98, 0x05, 0x82, 0xC5, 0x01, 0x75, 0x37, 0x5A, 0x30, 0xE3, 0x60, 0x41, 0xAE, 0x8E, - 0xB9, 0x19, 0x61, 0xCC, 0x77, 0x75, 0x15, 0xA1, 0xF2, 0xB8, 0xB6, 0xEE, 0x14, 0x4F, 0x9D, 0x92, - 0x56, 0x4E, 0x49, 0xCB, 0xB8, 0x4A, 0xE0, 0x34, 0x3F, 0x18, 0xC3, 0x3C, 0xCE, 0xD4, 0x51, 0x05, - 0xCC, 0xA7, 0x23, 0x02, 0x9C, 0x7C, 0x40, 0x6D, 0xBA, 0x7A, 0x63, 0xDD, 0x41, 0xA9, 0x3A, 0xC8, - 0xAF, 0x6A, 0xC4, 0x2F, 0x6B, 0x44, 0xDD, 0xEE, 0x3A, 0x64, 0x5F, 0x21, 0x07, 0x55, 0xE4, 0xA0, - 0x8C, 0x7C, 0x28, 0x8D, 0x64, 0x1D, 0x72, 0xA0, 0x90, 0x93, 0x8A, 0x88, 0x89, 0x14, 0x51, 0x85, - 0xBD, 0x3A, 0x6A, 0x13, 0x05, 0xD2, 0xAD, 0xA4, 0x22, 0x66, 0x62, 0x83, 0x97, 0x92, 0x61, 0x40, - 0x7D, 0x77, 0xA3, 0x09, 0x33, 0x2C, 0xB6, 0xDD, 0xAD, 0xE6, 0x9A, 0x33, 0x12, 0x75, 0x46, 0x56, - 0x65, 0x30, 0x2B, 0x33, 0xA8, 0xF5, 0xC8, 0x1D, 0xD5, 0xD6, 0x31, 0x98, 0x99, 0x56, 0x60, 0x47, - 0xDC, 0x0B, 0x98, 0x77, 0xEB, 0x2E, 0xBD, 0xC5, 0x9C, 0xB1, 0x85, 0x85, 0x5A, 0x5C, 0x06, 0xBA, - 0x01, 0x94, 0x5E, 0x8B, 0xA5, 0x7C, 0x80, 0xFA, 0x9E, 0x5B, 0xD9, 0x5A, 0x02, 0xDC, 0xA6, 0xF7, - 0xD4, 0x3B, 0x8C, 0xC2, 0x90, 0xA0, 0xED, 0xA6, 0xC0, 0x41, 0x3E, 0xD1, 0xCD, 0xB9, 0x15, 0xAD, - 0xC5, 0x79, 0xC2, 0x45, 0x2C, 0x7F, 0x3D, 0x8B, 0x23, 0x03, 0x5C, 0xCE, 0xF5, 0x6C, 0xD4, 0x61, - 0x6A, 0x83, 0x1E, 0xC7, 0x62, 0xF2, 0x13, 0x17, 0x2A, 0x0C, 0x54, 0xA2, 0x7C, 0x69, 0xDE, 0x58, - 0x0B, 0x91, 0x56, 0x7C, 0xEA, 0xA2, 0xB7, 0xE2, 0x54, 0xA8, 0xBC, 0x8A, 0x5D, 0x9A, 0x4B, 0x1D, - 0x94, 0x61, 0xB9, 0xBD, 0x2F, 0xA0, 0xFA, 0x7C, 0x0E, 0xE7, 0x01, 0xFF, 0x13, 0x68, 0xF9, 0xE8, - 0x5F, 0x17, 0x60, 0xC9, 0xA3, 0x34, 0x78, 0x8B, 0xBB, 0x0D, 0xE3, 0xC0, 0xF9, 0x8F, 0x6D, 0x7C, - 0xF9, 0x1F, 0xFB, 0xA6, 0x66, 0x9A, 0x07, 0xFF, 0x6A, 0x48, 0x0D, 0x1B, 0xC2, 0xFC, 0xD2, 0xBA, - 0xB1, 0x08, 0x80, 0xED, 0x7F, 0x9B, 0xFF, 0xB1, 0x25, 0xB8, 0x02, 0x6B, 0xDF, 0x45, 0x90, 0x49, - 0xF0, 0x24, 0x34, 0xB0, 0x68, 0xA4, 0x91, 0xCD, 0x4D, 0x43, 0xB8, 0xA4, 0x72, 0x8D, 0x35, 0x51, - 0xD3, 0x6D, 0x88, 0x53, 0x50, 0x5B, 0xAC, 0x04, 0xBF, 0x3E, 0x24, 0x7A, 0x15, 0x5B, 0x17, 0x00, - 0xC9, 0x3D, 0xCA, 0x0C, 0x3D, 0x22, 0x97, 0x52, 0xCB, 0x0C, 0x02, 0x42, 0xA7, 0x89, 0xE7, 0x2A, - 0xAD, 0x1D, 0x14, 0x30, 0x17, 0xA2, 0xE0, 0xBC, 0x1C, 0x2D, 0x15, 0xEA, 0xAA, 0xFD, 0x17, 0x0A, - 0xA3, 0xD6, 0x12, 0x8A, 0x04, 0x31, 0xAD, 0xD8, 0x79, 0xC6, 0x72, 0x75, 0x4C, 0x59, 0xBA, 0x35, - 0x59, 0x5D, 0x96, 0xAD, 0x04, 0xAE, 0x2F, 0x8D, 0xFE, 0xD7, 0x3D, 0x16, 0x8E, 0xB5, 0x12, 0x3F, - 0xF8, 0x97, 0xFB, 0x2B, 0x46, 0xE4, 0xCD, 0x3F, 0xBC, 0x21, 0x70, 0x05, 0xA6, 0x41, 0x6D, 0x1E, - 0x4D, 0x0D, 0xB3, 0xF6, 0xAB, 0xAE, 0x49, 0x8A, 0xAE, 0x1E, 0x92, 0xFB, 0xBC, 0xA7, 0xC4, 0x8C, - 0xD7, 0xD6, 0x70, 0x5E, 0xB4, 0x28, 0xF9, 0x82, 0xEC, 0xE6, 0x48, 0x26, 0xA2, 0xB6, 0x56, 0x64, - 0x52, 0xD5, 0xCA, 0xE8, 0x5A, 0x63, 0xFF, 0xD7, 0x4A, 0x40, 0xB7, 0x98, 0xBA, 0x4E, 0x15, 0x8C, - 0xB3, 0x00, 0x1C, 0x93, 0x3E, 0x1D, 0x69, 0x03, 0x26, 0x03, 0x75, 0x35, 0x46, 0x5A, 0x81, 0xC1, - 0xCC, 0x03, 0xC3, 0x2B, 0xFB, 0xF3, 0x1E, 0x16, 0xBF, 0xFB, 0x97, 0xAA, 0xAA, 0x81, 0xD4, 0x8B, - 0x33, 0x5D, 0x59, 0x59, 0xD5, 0x4B, 0xE0, 0xD2, 0x08, 0xA0, 0x5B, 0x8B, 0x3C, 0x3A, 0x8C, 0xFC, - 0x87, 0x52, 0xF6, 0x4D, 0xBB, 0x0F, 0x87, 0x01, 0x49, 0xD3, 0x73, 0xB8, 0x01, 0x43, 0xF7, 0x42, - 0x50, 0xB8, 0xB2, 0xC2, 0xFD, 0xE6, 0xE6, 0x66, 0x15, 0x29, 0xA1, 0x21, 0x14, 0xDB, 0x8A, 0x2B, - 0xF0, 0x49, 0xD3, 0xF1, 0x81, 0x30, 0x18, 0xD2, 0x1A, 0xC6, 0xF0, 0x25, 0xE3, 0x47, 0x5C, 0x71, - 0xF4, 0xF4, 0x22, 0xA6, 0xFC, 0x33, 0xDC, 0x95, 0x32, 0xCB, 0x1A, 0xAD, 0xA6, 0x68, 0xFA, 0x8F, - 0xD8, 0x3E, 0xCA, 0x0D, 0x76, 0xC1, 0x7A, 0xBA, 0x56, 0xA1, 0xFC, 0x9F, 0x61, 0xB9, 0x94, 0x28, - 0xD6, 0x70, 0x9C, 0x40, 0x80, 0x5A, 0xC3, 0x31, 0xC4, 0x1A, 0x41, 0x17, 0xFC, 0x26, 0x6B, 0xF9, - 0xCD, 0xFE, 0x19, 0x7E, 0x97, 0x76, 0x1E, 0x15, 0x25, 0x91, 0xAA, 0xAF, 0x50, 0x02, 0x9F, 0xDD, - 0xE9, 0xA6, 0x15, 0xB9, 0x55, 0x0A, 0x50, 0x1B, 0x46, 0x41, 0xD0, 0x8F, 0xE2, 0x83, 0x27, 0xD6, - 0x9D, 0xC5, 0x7A, 0x31, 0xC8, 0xD9, 0x5C, 0x6E, 0xB1, 0xBC, 0xB5, 0x44, 0x4F, 0xA1, 0xEC, 0x5F, - 0x4B, 0x15, 0x01, 0x3F, 0x23, 0x8B, 0x7B, 0xAC, 0xD4, 0xA5, 0x36, 0x28, 0x0F, 0x56, 0x3F, 0xD5, - 0x3C, 0xCB, 0x5F, 0xCC, 0xAE, 0x6B, 0x51, 0x9B, 0xC0, 0x38, 0x57, 0x92, 0x8B, 0x4A, 0xB2, 0xC8, - 0x13, 0x01, 0xA8, 0x58, 0xC7, 0x2E, 0xC4, 0x4D, 0x6B, 0x7A, 0x7C, 0xBF, 0x5C, 0x83, 0xC2, 0xDF, - 0xF5, 0xD5, 0x12, 0x33, 0x08, 0xC4, 0xD3, 0x95, 0x4B, 0x29, 0x5F, 0x37, 0x29, 0x8A, 0x0E, 0x62, - 0x47, 0xA3, 0x51, 0x4A, 0xC5, 0x47, 0x0C, 0x49, 0x56, 0xB2, 0x98, 0x9F, 0xC8, 0x90, 0x04, 0x8C, - 0x45, 0x3C, 0x8C, 0xB2, 0x94, 0x46, 0x99, 0xA8, 0xA4, 0x16, 0x63, 0x21, 0xCC, 0x5E, 0xFA, 0xE7, - 0x9F, 0x8B, 0xC9, 0x7E, 0x5A, 0x0B, 0x96, 0xD3, 0xEB, 0x3D, 0xBF, 0x34, 0xD9, 0xF7, 0x6B, 0x89, - 0xB9, 0x7A, 0xE9, 0xFF, 0x67, 0x4B, 0x21, 0x65, 0x4B, 0xF1, 0xB0, 0x54, 0x2E, 0x62, 0x62, 0x29, - 0xE6, 0xC9, 0x82, 0x91, 0x97, 0x7C, 0x16, 0x0D, 0x1A, 0x2B, 0x25, 0x55, 0x9E, 0x97, 0x7D, 0x95, - 0x43, 0x40, 0x59, 0x71, 0xE5, 0x35, 0x11, 0x06, 0x34, 0xE0, 0x63, 0x64, 0xF2, 0x41, 0xEB, 0xA7, - 0xD1, 0x94, 0x26, 0x87, 0x24, 0xA5, 0x06, 0x24, 0xCD, 0x65, 0xDC, 0x41, 0xA8, 0xE9, 0x04, 0xEB, - 0x76, 0x6D, 0x6E, 0x12, 0x05, 0xCE, 0x33, 0x77, 0xC4, 0xB1, 0x26, 0x03, 0xF9, 0xB2, 0xCA, 0x09, - 0xD4, 0xC6, 0xBE, 0x12, 0xA4, 0x3E, 0x52, 0x25, 0xA8, 0x61, 0x5A, 0xD0, 0x76, 0xC0, 0x35, 0x5F, - 0x26, 0x51, 0x4C, 0xC6, 0xB2, 0x07, 0x83, 0x35, 0x74, 0x0F, 0xA4, 0x66, 0x6D, 0x34, 0x91, 0x60, - 0xA9, 0x73, 0x29, 0xFC, 0x66, 0xD9, 0xC2, 0x70, 0x4B, 0x57, 0xC9, 0xB0, 0xBD, 0xF4, 0xA5, 0x35, - 0x59, 0x83, 0xE0, 0x0B, 0x6C, 0x62, 0xE0, 0x1E, 0x68, 0x64, 0xF2, 0x7B, 0x00, 0x77, 0x6B, 0xB6, - 0xA3, 0x3D, 0xD6, 0x8E, 0x6A, 0x35, 0x53, 0x55, 0xE9, 0xAE, 0x0B, 0x6D, 0x4E, 0x74, 0x23, 0x0B, - 0x4B, 0x10, 0xAA, 0x9A, 0x59, 0x0C, 0x38, 0x1B, 0x81, 0xAA, 0xBA, 0xC0, 0x11, 0xD6, 0x98, 0x66, - 0xA9, 0x23, 0xF1, 0x97, 0x1D, 0xC9, 0x13, 0xB5, 0x07, 0x95, 0xF5, 0x05, 0xD4, 0x31, 0xAB, 0x25, - 0x86, 0x30, 0xD3, 0x29, 0x13, 0xDE, 0x04, 0x03, 0x90, 0x07, 0x5A, 0xD5, 0x05, 0x14, 0xB5, 0x8E, - 0x1C, 0x4D, 0x44, 0xB8, 0x1C, 0x05, 0xF9, 0xF0, 0x6B, 0x9A, 0x0F, 0xBC, 0xB4, 0x18, 0xDD, 0x97, - 0x80, 0x50, 0xD2, 0xE6, 0xE0, 0x88, 0x8F, 0xF2, 0x21, 0xF4, 0xB2, 0x05, 0x9D, 0x02, 0x58, 0xFC, - 0xC6, 0x71, 0x3E, 0x8A, 0x27, 0xC5, 0x68, 0x42, 0xEF, 0x17, 0x78, 0x51, 0x01, 0xF5, 0xA9, 0xEE, - 0x28, 0x1B, 0xDB, 0x68, 0xCE, 0xF3, 0x41, 0x6B, 0x29, 0x7F, 0xF0, 0xFF, 0x28, 0x7F, 0xCC, 0xC7, - 0x85, 0x34, 0x71, 0x31, 0x1A, 0xB3, 0x42, 0x96, 0x61, 0x18, 0xFF, 0x90, 0x93, 0xA4, 0xD4, 0x13, - 0x97, 0x7A, 0x5A, 0xF1, 0xB3, 0xB6, 0x53, 0x98, 0x8E, 0x31, 0xAA, 0xF8, 0xE3, 0xC8, 0xF6, 0xF0, - 0xF7, 0x3C, 0xF2, 0x65, 0x6D, 0x69, 0x5A, 0xA1, 0x31, 0x82, 0x3A, 0x57, 0x37, 0xCB, 0x7E, 0x9A, - 0xFD, 0xB7, 0xAD, 0xE8, 0xD1, 0xF1, 0xE9, 0x71, 0xFF, 0xB8, 0x5C, 0x38, 0x23, 0xE7, 0x25, 0x93, - 0x8A, 0x2B, 0x5D, 0xFA, 0xB2, 0x22, 0x80, 0x02, 0x1B, 0x45, 0x01, 0x7B, 0xDD, 0xDC, 0x54, 0x7E, - 0xF1, 0xB6, 0x77, 0x71, 0x6E, 0xC7, 0x24, 0x01, 0x8F, 0x24, 0x15, 0xE6, 0xC2, 0x82, 0x44, 0xF9, - 0xE0, 0xD7, 0xC7, 0xA5, 0x72, 0x5D, 0x7E, 0x61, 0x70, 0xC4, 0xDC, 0x52, 0xA7, 0xA9, 0x7E, 0x78, - 0xE2, 0x62, 0x5D, 0x99, 0xBF, 0x04, 0x41, 0x72, 0x1A, 0x2D, 0x13, 0x55, 0x11, 0x67, 0x46, 0xE5, - 0x30, 0x2F, 0xEE, 0xB2, 0x75, 0x0D, 0xD3, 0xC8, 0xB4, 0xC4, 0x84, 0xA5, 0xE5, 0x46, 0xA5, 0x12, - 0x14, 0xFE, 0xA2, 0xB6, 0xE7, 0x8B, 0x91, 0x24, 0xB7, 0x5A, 0x73, 0xAB, 0x6F, 0x41, 0x2A, 0x3E, - 0x58, 0x04, 0x23, 0x66, 0x39, 0xDB, 0x16, 0x77, 0xA3, 0x43, 0xEE, 0x61, 0x5C, 0x7F, 0xBA, 0x35, - 0x78, 0xD2, 0x3C, 0x79, 0x61, 0x9E, 0xFC, 0xB1, 0x7B, 0x2E, 0x1C, 0x45, 0xF9, 0xDA, 0xE2, 0x98, - 0xF6, 0x10, 0x58, 0xBB, 0x6D, 0x2F, 0x7D, 0x18, 0x20, 0xD2, 0x83, 0xCB, 0x00, 0xF4, 0x63, 0x58, - 0xFF, 0x4A, 0xEE, 0x88, 0x7A, 0x09, 0xAA, 0xA2, 0xAD, 0x73, 0x54, 0xD8, 0xEE, 0xFD, 0x81, 0xA3, - 0xF2, 0xCE, 0x65, 0x18, 0x48, 0x97, 0xC3, 0x92, 0x37, 0x8B, 0x75, 0xC1, 0x61, 0x19, 0x31, 0x64, - 0x6C, 0x00, 0xE3, 0xCD, 0x5D, 0x49, 0x13, 0xD5, 0x1C, 0xB4, 0xF0, 0x1B, 0x08, 0x8A, 0x4F, 0x39, - 0xCE, 0x9A, 0x38, 0xAD, 0x62, 0x72, 0xC5, 0x23, 0xC8, 0x4A, 0x67, 0x89, 0xC0, 0x6E, 0x10, 0x0D, - 0x0D, 0x7C, 0x64, 0x9A, 0xA1, 0xB6, 0x1D, 0x3E, 0x37, 0xD7, 0xBC, 0xD9, 0x54, 0xFA, 0x4B, 0x62, - 0x79, 0xD5, 0xB0, 0x8B, 0x1C, 0x56, 0xCC, 0x75, 0x7D, 0x1F, 0xF4, 0xA3, 0x4E, 0x29, 0xAF, 0x48, - 0xA4, 0x53, 0xD1, 0x83, 0xC4, 0x86, 0xA2, 0x41, 0xBE, 0x91, 0x40, 0x44, 0x72, 0x4A, 0x33, 0x5D, - 0xC7, 0xCA, 0xD2, 0x0B, 0x28, 0x49, 0x7A, 0xB2, 0x73, 0x95, 0x49, 0x6B, 0x25, 0x06, 0xFE, 0xC8, - 0xD7, 0xF0, 0xC7, 0xA1, 0xD0, 0xA3, 0x83, 0x9B, 0x49, 0x2B, 0x83, 0xA4, 0x23, 0x64, 0x83, 0xA9, - 0x37, 0xE4, 0xBB, 0xA8, 0x2D, 0x2F, 0xCB, 0xB4, 0x16, 0x50, 0x70, 0x71, 0x83, 0xBB, 0x11, 0x30, - 0x52, 0x5A, 0xC4, 0x9E, 0x94, 0xA8, 0xC7, 0x8F, 0x10, 0x1F, 0x53, 0x4A, 0x20, 0x06, 0x20, 0xA6, - 0x40, 0xD0, 0xA7, 0x42, 0x8A, 0x54, 0xE6, 0x92, 0x53, 0x2A, 0x20, 0xCA, 0x48, 0xCD, 0xE2, 0xC1, - 0x85, 0x78, 0xD4, 0x46, 0xD6, 0x80, 0xFD, 0xDC, 0xBD, 0x73, 0x33, 0xDE, 0x90, 0x68, 0x09, 0x56, - 0x36, 0x3D, 0x9A, 0xA6, 0x52, 0x5C, 0x54, 0xC7, 0x19, 0xF8, 0xA8, 0xA1, 0x03, 0x5A, 0x23, 0x84, - 0x11, 0x1E, 0x84, 0x8A, 0x01, 0x40, 0x7F, 0x42, 0xC3, 0x1C, 0x22, 0x70, 0x08, 0x20, 0x82, 0xA0, - 0x7F, 0x49, 0x0D, 0xF7, 0x64, 0x05, 0xC9, 0xF8, 0xD8, 0x6D, 0x35, 0xF0, 0x9D, 0x66, 0x95, 0xEC, - 0x20, 0xA5, 0xBD, 0x68, 0x24, 0xFA, 0x64, 0x98, 0x1A, 0x50, 0x00, 0xAC, 0xD9, 0x01, 0xA0, 0x1E, - 0x24, 0x5E, 0x63, 0x2B, 0x3F, 0xEF, 0x04, 0x2A, 0xBB, 0x00, 0xAB, 0xBB, 0x8E, 0x87, 0x5F, 0x39, - 0x4F, 0x19, 0xA7, 0x39, 0x26, 0x00, 0x7B, 0x93, 0x68, 0x7A, 0x99, 0x30, 0x2E, 0xCE, 0x64, 0x1B, - 0x6A, 0x6C, 0xB4, 0xE4, 0xF5, 0xA9, 0x87, 0x15, 0x79, 0x3F, 0xC5, 0x8B, 0xCB, 0x0C, 0xF3, 0xBA, - 0x53, 0x79, 0x77, 0xB1, 0x86, 0x70, 0x21, 0x50, 0x66, 0x38, 0xB3, 0x29, 0x74, 0xB0, 0xFA, 0xA1, - 0x48, 0x82, 0x7A, 0x4F, 0xB7, 0x42, 0xE2, 0xC1, 0x44, 0xED, 0x81, 0xF9, 0xDC, 0xC2, 0xD8, 0xE1, - 0x94, 0x83, 0x5A, 0x0A, 0xB5, 0x02, 0x45, 0xC6, 0x95, 0xCD, 0x98, 0x35, 0x1D, 0x6A, 0x58, 0x88, - 0x61, 0xE0, 0xAF, 0xFE, 0x05, 0x0F, 0x1E, 0x1C, 0xC8, 0x55, 0x3F, 0xE1, 0x23, 0xE3, 0x7E, 0xF4, - 0x23, 0x3E, 0x3E, 0xAF, 0xF0, 0xF1, 0x79, 0x1D, 0x1F, 0xB4, 0xAA, 0x3C, 0x98, 0x0C, 0x80, 0xEC, - 0x19, 0xE1, 0x64, 0x4C, 0x13, 0x58, 0xC0, 0x43, 0x50, 0x25, 0x7F, 0x8B, 0xB3, 0x84, 0xFE, 0x98, - 0xB3, 0xDE, 0x84, 0x8D, 0xC4, 0x23, 0xFE, 0x8A, 0xD5, 0xFF, 0x82, 0x4B, 0x3C, 0x70, 0x3D, 0x97, - 0x79, 0x6D, 0x5A, 0x49, 0x28, 0x3F, 0x7E, 0x2B, 0x91, 0x7E, 0xE4, 0x42, 0x78, 0xA9, 0x38, 0xC8, - 0xDF, 0xB7, 0xF4, 0x00, 0xBC, 0x11, 0xF8, 0x29, 0x35, 0x75, 0xBC, 0x0B, 0xA5, 0xFC, 0x29, 0x30, - 0x64, 0xA8, 0xC0, 0x47, 0xDD, 0xD9, 0xDC, 0x12, 0xAE, 0x01, 0x8A, 0xF1, 0xA3, 0x29, 0xB0, 0xEA, - 0xC9, 0x02, 0xD7, 0x9E, 0x40, 0x26, 0x04, 0x91, 0xE0, 0x48, 0xC8, 0xA7, 0x8D, 0x2F, 0x07, 0x9B, - 0x37, 0x35, 0xC8, 0x43, 0x2E, 0xFC, 0x98, 0x2E, 0x0C, 0x36, 0x6F, 0xFE, 0x6D, 0x36, 0xC6, 0xCC, - 0x5A, 0x76, 0xA4, 0x96, 0x4C, 0xF6, 0xF4, 0x0B, 0xBF, 0x71, 0x09, 0x48, 0x5D, 0x49, 0x78, 0x45, - 0x34, 0x03, 0x6B, 0x43, 0x61, 0xE1, 0x07, 0xFF, 0x47, 0x09, 0xF8, 0x91, 0x9E, 0x07, 0xCE, 0xBD, - 0xE6, 0x3D, 0x5E, 0x2F, 0x3E, 0x85, 0xE9, 0x56, 0xE9, 0xC1, 0x4A, 0xC7, 0xEF, 0x53, 0x3A, 0x76, - 0x59, 0xA2, 0x14, 0x4A, 0x14, 0x59, 0x88, 0x1A, 0x6A, 0x50, 0x0E, 0x51, 0x98, 0x89, 0x17, 0xCD, - 0x81, 0x02, 0x9B, 0x73, 0x34, 0x5B, 0x3A, 0x02, 0x0F, 0xF4, 0xF5, 0x45, 0xEE, 0xFC, 0x74, 0x76, - 0x7A, 0x22, 0x44, 0x7C, 0xA5, 0x62, 0x22, 0xD0, 0xAA, 0x2E, 0x2C, 0x2F, 0xCF, 0x9C, 0x89, 0xE4, - 0xA1, 0x28, 0x75, 0x30, 0x31, 0x28, 0x87, 0xFE, 0x74, 0x31, 0xFC, 0x0A, 0x71, 0xD6, 0xD0, 0xCF, - 0x52, 0x48, 0x58, 0x5B, 0x36, 0xA2, 0xF7, 0xFB, 0x97, 0xF6, 0xAE, 0xDD, 0x84, 0xBA, 0x00, 0xB4, - 0x0A, 0x69, 0x19, 0xEE, 0x7D, 0xFE, 0xB7, 0x90, 0xB7, 0xFF, 0x1E, 0x32, 0x83, 0xA8, 0x95, 0x42, - 0x58, 0x2A, 0xF0, 0xAB, 0xB8, 0x93, 0x24, 0x9A, 0x4A, 0xB4, 0xE3, 0x24, 0xC1, 0x4B, 0xE9, 0x43, - 0x85, 0xA2, 0x0D, 0x61, 0x31, 0xA5, 0x89, 0xE6, 0x47, 0x34, 0xD5, 0x78, 0x24, 0xB4, 0x34, 0x8B, - 0x63, 0x68, 0x5C, 0x56, 0xF4, 0x61, 0xEB, 0xC5, 0xEB, 0xCB, 0xFB, 0x8C, 0x66, 0xD4, 0xCF, 0x97, - 0x69, 0x52, 0xD1, 0x0B, 0x56, 0x50, 0xDF, 0x10, 0xEE, 0x7E, 0xB9, 0xC9, 0xEB, 0xA9, 0x8C, 0x73, - 0x8C, 0xA2, 0x1B, 0x2D, 0x35, 0x07, 0xE9, 0x26, 0x40, 0xD5, 0xE5, 0x59, 0x10, 0xCC, 0xDB, 0x2B, - 0xB4, 0xA0, 0xF1, 0x8A, 0x44, 0x24, 0x9F, 0xCB, 0x67, 0x7F, 0xE4, 0xC9, 0xA9, 0xE2, 0x82, 0x50, - 0xF2, 0x54, 0xA9, 0x36, 0xAD, 0x0D, 0x63, 0x83, 0x6A, 0x8C, 0xA7, 0x82, 0x70, 0x0F, 0xAF, 0x51, - 0xE9, 0xC2, 0x2C, 0x6A, 0x29, 0xDC, 0xDE, 0x46, 0x5F, 0xCB, 0x6D, 0xE9, 0x89, 0x7C, 0x2A, 0x25, - 0xE3, 0xAE, 0xAE, 0x63, 0x55, 0x45, 0xB1, 0x3E, 0x25, 0x61, 0x5A, 0x26, 0x5B, 0x54, 0x06, 0x26, - 0x77, 0x0B, 0x70, 0x9B, 0x06, 0x29, 0x1C, 0xBD, 0x7E, 0x7F, 0xCE, 0x46, 0xD1, 0xCE, 0x11, 0x80, - 0x69, 0xC5, 0x3E, 0x93, 0xD7, 0xE0, 0x24, 0xCC, 0x73, 0x07, 0x32, 0xE9, 0x4A, 0x03, 0x0E, 0xA9, - 0x98, 0x44, 0xFE, 0x81, 0x7E, 0xA0, 0x3B, 0x3A, 0xFC, 0xBB, 0x09, 0x35, 0x47, 0xCD, 0xA5, 0xD0, - 0xA4, 0xFA, 0x74, 0x70, 0xF5, 0x06, 0xC2, 0x53, 0x0C, 0xA5, 0x01, 0x17, 0x50, 0x34, 0xD7, 0x74, - 0x7C, 0x7A, 0x7D, 0x0C, 0x29, 0xC8, 0x7F, 0x21, 0x37, 0x66, 0xBB, 0xAA, 0x6C, 0xB8, 0xF3, 0xEA, - 0x75, 0x56, 0x2E, 0x03, 0x7A, 0x61, 0x8C, 0x58, 0x0F, 0x29, 0x7E, 0xFB, 0x7B, 0xF4, 0x9E, 0x8D, - 0x15, 0xD2, 0x6A, 0x5D, 0x6F, 0xCE, 0x76, 0x90, 0x67, 0x89, 0xD5, 0x43, 0x2C, 0x70, 0x97, 0x1F, - 0x29, 0x59, 0x95, 0x35, 0xDC, 0xF6, 0x48, 0x10, 0xE0, 0xC7, 0x5A, 0x03, 0x1B, 0x6A, 0x22, 0xB2, - 0xD4, 0x42, 0x22, 0x29, 0x08, 0x90, 0xD2, 0x3E, 0x84, 0x39, 0xD3, 0x92, 0x65, 0x86, 0xB2, 0xA1, - 0xBC, 0xFF, 0xC5, 0x9A, 0xA3, 0x64, 0x46, 0xE8, 0xCE, 0xF9, 0x6C, 0x73, 0x53, 0xD8, 0x85, 0x99, - 0x18, 0x05, 0x52, 0x8A, 0x01, 0x1C, 0x9A, 0x7D, 0x68, 0x2D, 0x8C, 0xB2, 0x90, 0x58, 0xAB, 0x3D, - 0xD2, 0xB6, 0x51, 0x55, 0x03, 0x54, 0x7C, 0x46, 0x01, 0x03, 0xCE, 0xB2, 0x24, 0x80, 0xA8, 0x8B, - 0x39, 0xBA, 0xB2, 0x2D, 0xC5, 0xBA, 0xD0, 0x84, 0x0E, 0xEC, 0x67, 0xC8, 0x12, 0x95, 0x97, 0xAD, - 0xA2, 0x27, 0x12, 0xC5, 0x77, 0x95, 0x9E, 0xC8, 0x6F, 0xE5, 0x84, 0xAA, 0xC8, 0x77, 0x88, 0x2F, - 0x13, 0x5C, 0xD4, 0xD1, 0x13, 0xA0, 0x24, 0x83, 0x52, 0x34, 0x60, 0x2A, 0x2C, 0x37, 0xEE, 0xEB, - 0xD3, 0xE9, 0xB4, 0x8E, 0xDF, 0x6A, 0xEB, 0x70, 0x82, 0xB2, 0x02, 0x5F, 0x5F, 0xC7, 0x21, 0x47, - 0x15, 0x58, 0xF8, 0x6E, 0xE1, 0xAC, 0xBA, 0xE8, 0x42, 0x7F, 0x2B, 0xDE, 0xD4, 0xAA, 0xD2, 0x59, - 0xE1, 0x73, 0x79, 0xDB, 0x7B, 0x3B, 0x2B, 0x20, 0x32, 0xC4, 0xAF, 0xB2, 0x90, 0x69, 0x20, 0x0D, - 0x3B, 0xE5, 0x46, 0x56, 0x25, 0x85, 0x65, 0x5C, 0xB0, 0xE3, 0x2C, 0x9D, 0x18, 0x33, 0x60, 0xDD, - 0x11, 0x96, 0xD2, 0x95, 0x43, 0x2D, 0x65, 0xB7, 0x0E, 0xB7, 0x0A, 0xFB, 0x70, 0x30, 0x83, 0x94, - 0x79, 0xFB, 0xF3, 0x4F, 0x39, 0x5B, 0xDE, 0xF6, 0x92, 0x62, 0x71, 0xE1, 0xF3, 0xFC, 0xA9, 0x35, - 0xAF, 0x69, 0xA5, 0xD1, 0xAF, 0xC4, 0x97, 0xBD, 0x46, 0xFE, 0x19, 0x3B, 0xFF, 0x9C, 0xAD, 0x81, - 0xB1, 0x43, 0x23, 0x2A, 0xDC, 0x4C, 0x8C, 0xEA, 0x2F, 0x34, 0xE6, 0x63, 0x79, 0x29, 0xBF, 0x2D, - 0xA0, 0x54, 0xA9, 0xD3, 0x68, 0x78, 0x3E, 0xFF, 0x9A, 0x42, 0x19, 0x1D, 0x65, 0xFE, 0x28, 0x20, - 0x09, 0xC5, 0x82, 0xA3, 0x41, 0xBE, 0x92, 0xFB, 0x46, 0xC0, 0x86, 0x69, 0x03, 0x93, 0x6D, 0xCB, - 0xDE, 0xB2, 0x77, 0x71, 0x64, 0x7F, 0x4D, 0xF7, 0x57, 0x4F, 0xD8, 0x5F, 0x34, 0x69, 0x58, 0x0B, - 0xE7, 0xB5, 0xAB, 0x8A, 0x4D, 0x6A, 0x83, 0xFB, 0xC4, 0xA7, 0x70, 0x3D, 0x6F, 0xB3, 0xCC, 0xB6, - 0x1A, 0xE4, 0x5F, 0x60, 0xD4, 0x31, 0xBA, 0x95, 0x2F, 0x92, 0xF4, 0x81, 0x7B, 0x18, 0x5B, 0x17, - 0x54, 0x26, 0x70, 0x49, 0xD5, 0x87, 0x34, 0xB9, 0xD3, 0x9C, 0x2F, 0x39, 0xC3, 0xB7, 0x3C, 0xA8, - 0x03, 0xE4, 0x37, 0x9C, 0x72, 0x39, 0xB0, 0xBF, 0x07, 0x5D, 0x33, 0x2A, 0x41, 0x79, 0xB1, 0x26, - 0x9B, 0xE6, 0x7C, 0x02, 0x82, 0x01, 0x70, 0xB1, 0xA3, 0x48, 0xCD, 0x2B, 0xCB, 0x98, 0x9B, 0x57, - 0x96, 0x54, 0xE2, 0x5F, 0x59, 0xCC, 0xDB, 0x9F, 0xFC, 0xDB, 0x4C, 0xF9, 0x7F, 0x5B, 0x28, 0x36, - 0x32, 0xF9, 0xE1, 0x09, 0xF7, 0x56, 0x3F, 0x45, 0xAD, 0x47, 0x51, 0xBB, 0xF7, 0xFF, 0x17, 0x53, - 0xE8, 0x9D, 0x36, 0x92, 0x29, 0x00, 0x00 +0x1F, 0x8B, 0x08, 0x08, 0x5A, 0x38, 0x57, 0x5E, 0x02, 0x00, 0x65, 0x64, 0x69, 0x74, 0x2E, 0x68, +0x74, 0x6D, 0x00, 0xB5, 0x1A, 0x0B, 0x5B, 0xDB, 0x36, 0xF0, 0xAF, 0x18, 0x6F, 0x63, 0xF6, 0xE2, +0x38, 0x0E, 0x50, 0xD6, 0x39, 0x18, 0x16, 0x1E, 0x1B, 0x5D, 0x5B, 0xA0, 0x24, 0xB4, 0xA3, 0x1D, +0xDB, 0xA7, 0xD8, 0x4A, 0xA2, 0x62, 0x4B, 0x9E, 0x2D, 0x13, 0x68, 0x96, 0xFF, 0xBE, 0x93, 0xE4, +0x67, 0x30, 0xDD, 0xE3, 0xDB, 0x4A, 0x21, 0x92, 0x4E, 0x77, 0xBA, 0x3B, 0xDD, 0xD3, 0xCE, 0xDE, +0xC6, 0xF1, 0xF9, 0xD1, 0xF8, 0xFA, 0xE2, 0x44, 0x9B, 0xF3, 0x28, 0xDC, 0xDF, 0x13, 0x7F, 0xB5, +0x10, 0xD1, 0x99, 0xA7, 0x63, 0xAA, 0xC3, 0x1C, 0xA3, 0x60, 0x7F, 0x2F, 0xC2, 0x1C, 0xC1, 0x06, +0x1E, 0x77, 0xF1, 0xEF, 0x19, 0xB9, 0xF3, 0xF4, 0x23, 0x46, 0x39, 0xA6, 0xBC, 0xCB, 0x1F, 0x62, +0xAC, 0x6B, 0xBE, 0x9A, 0x79, 0x3A, 0xC7, 0xF7, 0xBC, 0x27, 0x48, 0x0C, 0x34, 0x7F, 0x8E, 0x92, +0x14, 0x73, 0x2F, 0xE3, 0xD3, 0xEE, 0x73, 0x20, 0xC4, 0x09, 0x0F, 0xF1, 0xFE, 0xC9, 0xE8, 0x42, +0x3B, 0x09, 0x08, 0x67, 0xC9, 0x5E, 0x4F, 0xAD, 0xEC, 0xA5, 0xFC, 0x21, 0xC4, 0x9A, 0x20, 0x94, +0xE3, 0xFB, 0x69, 0xAA, 0x6B, 0x11, 0x0E, 0x08, 0xF2, 0xF4, 0xD4, 0x4F, 0xB0, 0xE0, 0xC3, 0xF6, +0xA3, 0xE5, 0xA7, 0x2E, 0xA1, 0x01, 0xBE, 0x77, 0xB7, 0x1D, 0x67, 0x10, 0xB3, 0x94, 0x70, 0xC2, +0xA8, 0x8B, 0x26, 0x29, 0x0B, 0x33, 0x8E, 0x07, 0x21, 0x9E, 0x72, 0xF7, 0x59, 0x7C, 0x3F, 0x98, +0xB0, 0x24, 0xC0, 0x89, 0xDB, 0x8F, 0xEF, 0x35, 0x00, 0x91, 0x40, 0xFB, 0x62, 0x67, 0x67, 0x67, +0x30, 0x41, 0xFE, 0xED, 0x2C, 0x61, 0x19, 0x0D, 0xBA, 0x3E, 0x0B, 0x59, 0xE2, 0x7E, 0xF1, 0xC3, +0x33, 0xF1, 0x33, 0x08, 0x48, 0x1A, 0x87, 0xE8, 0xC1, 0xA5, 0x8C, 0x62, 0xC0, 0xBD, 0xEF, 0xA6, +0x73, 0x14, 0xB0, 0x85, 0xEB, 0x68, 0x8E, 0xD6, 0x77, 0x80, 0x48, 0x32, 0x9B, 0x20, 0xC3, 0xB1, +0xC4, 0x8F, 0xBD, 0x63, 0x0E, 0xA6, 0x0C, 0xC4, 0x4E, 0xC9, 0x27, 0xEC, 0xF6, 0xB7, 0xE2, 0x7B, +0x35, 0x9D, 0xA2, 0x88, 0x84, 0x0F, 0x6E, 0x8A, 0x68, 0xDA, 0x4D, 0x71, 0x42, 0xA6, 0x6A, 0x79, +0x81, 0xC9, 0x6C, 0xCE, 0xDD, 0x6F, 0x1D, 0x67, 0x05, 0xFC, 0x6B, 0x59, 0xB8, 0x0C, 0x49, 0xCA, +0xBB, 0x52, 0x60, 0x75, 0x1E, 0x67, 0xB1, 0xEB, 0x48, 0xD6, 0xE1, 0x23, 0x42, 0xC9, 0x8C, 0x50, +0x18, 0xC4, 0x28, 0x08, 0x08, 0x9D, 0xB9, 0x0A, 0x2D, 0x24, 0xCB, 0x52, 0xDA, 0x04, 0x87, 0x88, +0x93, 0x3B, 0x3C, 0x88, 0x08, 0xED, 0x2E, 0x48, 0xC0, 0xE7, 0xEE, 0xAE, 0x03, 0x5C, 0xF8, 0x59, +0x92, 0x82, 0x4C, 0x31, 0x23, 0x94, 0xE3, 0x44, 0xA2, 0xA5, 0x31, 0xA2, 0x4B, 0x25, 0xAA, 0x50, +0x40, 0x29, 0x27, 0xA1, 0x21, 0xA1, 0xB8, 0x3B, 0x09, 0x99, 0x7F, 0x5B, 0x9E, 0xB4, 0x1B, 0xDF, +0xE7, 0x67, 0xB9, 0x73, 0x76, 0x87, 0x93, 0x65, 0xA5, 0x2E, 0x89, 0xDD, 0x00, 0x36, 0x48, 0x9F, +0x9C, 0x9C, 0xAC, 0x6C, 0x7E, 0x97, 0x01, 0xD4, 0x92, 0x9F, 0x20, 0x65, 0x4E, 0xB5, 0x2E, 0xD2, +0x9A, 0xE0, 0x0A, 0x85, 0xD0, 0x38, 0xE3, 0xCB, 0xC7, 0x57, 0xC9, 0x62, 0xE4, 0x13, 0xFE, 0xE0, +0x3A, 0x72, 0xDB, 0x52, 0xE8, 0xD2, 0xDD, 0x71, 0x1C, 0x4D, 0x28, 0x5C, 0x7B, 0x8B, 0x93, 0x00, +0x51, 0x64, 0x0D, 0x13, 0x82, 0x42, 0x6B, 0x54, 0xA9, 0xBC, 0x1B, 0xB1, 0x4F, 0xDD, 0x0C, 0xC6, +0x30, 0x0F, 0xB1, 0xCF, 0x95, 0x86, 0xE1, 0x12, 0x26, 0xB7, 0x84, 0x3F, 0x06, 0x3C, 0x5A, 0xA8, +0xE9, 0x4A, 0x6A, 0x68, 0xAE, 0x6E, 0xAF, 0x0F, 0xBA, 0x91, 0x7C, 0x28, 0xB1, 0x95, 0x44, 0xDD, +0x09, 0xE3, 0x9C, 0x45, 0xD2, 0xDE, 0x4A, 0x69, 0x35, 0x69, 0x32, 0xCF, 0x1F, 0x5D, 0x47, 0xBB, +0xEA, 0x6B, 0xE4, 0x07, 0xA0, 0x54, 0x4E, 0x7C, 0x14, 0x76, 0x51, 0x48, 0x66, 0xD4, 0x8D, 0x48, +0x10, 0x84, 0xB8, 0x66, 0xB2, 0x6E, 0x96, 0x84, 0x46, 0x80, 0x38, 0x72, 0x49, 0x84, 0x66, 0xB8, +0x17, 0xD3, 0x19, 0x40, 0x53, 0xBC, 0xBB, 0x63, 0x91, 0xB7, 0x87, 0xE7, 0x97, 0x0B, 0xE7, 0xE5, +0x8F, 0x33, 0x36, 0x84, 0x7F, 0x67, 0xA3, 0xAB, 0xF9, 0xC9, 0xD5, 0x0C, 0x46, 0x87, 0x62, 0x3A, +0x7C, 0x73, 0x34, 0x7C, 0x03, 0x1F, 0x47, 0xFD, 0xCE, 0xC7, 0xE9, 0xEF, 0x43, 0xB1, 0xFC, 0x63, +0x70, 0x38, 0xBE, 0x3A, 0x19, 0x0E, 0x5F, 0xF6, 0x5E, 0x9C, 0x2D, 0xDE, 0xBD, 0xDC, 0x15, 0xE0, +0xC3, 0xD0, 0xB9, 0x7C, 0x3B, 0x77, 0xAE, 0xB6, 0xBE, 0x8B, 0x82, 0xD3, 0x60, 0xEE, 0x47, 0x57, +0xC3, 0x37, 0xEF, 0x2E, 0xEF, 0xAE, 0xA3, 0xAB, 0xD9, 0xE8, 0x5D, 0x7F, 0xFE, 0x7E, 0xEB, 0xED, +0xE8, 0xFD, 0xBB, 0x1F, 0x6E, 0xF1, 0xCF, 0xA7, 0x3F, 0xBD, 0x1F, 0x2F, 0x00, 0xE1, 0x98, 0x8D, +0xAE, 0x2E, 0x0F, 0xDF, 0x1E, 0xCE, 0xDE, 0x1F, 0xFA, 0x27, 0xF7, 0x93, 0xF0, 0xEC, 0xF0, 0xC7, +0xE1, 0x64, 0xB8, 0xE5, 0x63, 0x3C, 0x1B, 0x5F, 0x1E, 0x66, 0x2F, 0x5E, 0x9E, 0xCF, 0x08, 0x99, +0x8F, 0xDE, 0x9F, 0x8D, 0xFD, 0xA3, 0x67, 0xAF, 0xAE, 0x4E, 0x87, 0x64, 0x7E, 0xF6, 0xD3, 0xA5, +0x73, 0xFB, 0xE3, 0xCB, 0xA3, 0x63, 0xFF, 0xFA, 0xA7, 0xEB, 0xDD, 0xE3, 0xED, 0xDE, 0xB7, 0xDF, +0xBE, 0x0E, 0xCE, 0x09, 0x1D, 0xDF, 0x7D, 0x1A, 0xCE, 0x8E, 0x16, 0xCF, 0x1F, 0xD2, 0xF1, 0xFC, +0xC5, 0x1D, 0xED, 0xBD, 0x65, 0x1F, 0x5F, 0x3C, 0xBC, 0x86, 0xDF, 0x8B, 0x8B, 0xCE, 0x64, 0xD4, +0x4F, 0xAF, 0xDE, 0xBC, 0x78, 0xBB, 0x95, 0x7E, 0xF7, 0x2C, 0x3E, 0x3C, 0x3E, 0xBE, 0x8B, 0x26, +0x17, 0xBD, 0x28, 0xB8, 0x9D, 0xF2, 0xE7, 0xDB, 0x3C, 0xBE, 0x9E, 0x65, 0xEF, 0x7F, 0x7F, 0xF6, +0xD3, 0xBC, 0x77, 0x8E, 0xD1, 0xF5, 0xBC, 0xF3, 0xF0, 0xE9, 0xE1, 0xF9, 0x7C, 0x7C, 0x7A, 0x77, +0x16, 0xA2, 0xFB, 0xB3, 0x33, 0xFF, 0x53, 0xD4, 0x09, 0xD1, 0x77, 0xE7, 0xE3, 0x10, 0x25, 0xFD, +0xAB, 0x60, 0xD8, 0xEB, 0x1C, 0x6D, 0x0D, 0x77, 0x78, 0x72, 0x79, 0x44, 0x8F, 0xB7, 0x3F, 0x8E, +0x9E, 0x1F, 0x1E, 0xF6, 0xD9, 0xE4, 0xF7, 0xAD, 0x1F, 0x6F, 0x77, 0x7F, 0xBC, 0xDA, 0x7D, 0x33, +0x79, 0x33, 0x1C, 0xED, 0x1C, 0x5E, 0xA1, 0xEB, 0xD1, 0x9B, 0xE1, 0x74, 0x67, 0x32, 0x9F, 0xBF, +0x7C, 0x39, 0xFE, 0x21, 0x18, 0x7E, 0x4A, 0x86, 0xE7, 0x8B, 0xE1, 0xFD, 0xC9, 0xD5, 0xF0, 0xB4, +0xF3, 0xF2, 0xE4, 0xB5, 0xD3, 0x1F, 0x5D, 0x6F, 0xCF, 0x5E, 0xEF, 0x2E, 0x0E, 0xD3, 0x93, 0xE1, +0x9B, 0x43, 0x67, 0xF6, 0x53, 0x27, 0x42, 0xEF, 0xD9, 0xD1, 0xF6, 0xEC, 0xC5, 0x2E, 0xB9, 0xB8, +0x46, 0xC3, 0x17, 0x87, 0x3F, 0xA5, 0xE4, 0x32, 0x3A, 0xBD, 0x72, 0x86, 0xC3, 0x57, 0xE7, 0xF8, +0x87, 0xA3, 0x6D, 0xF4, 0x72, 0xCB, 0x7F, 0x07, 0xFA, 0xBF, 0xFA, 0x19, 0x7F, 0xDB, 0x19, 0x2E, +0xCE, 0x9D, 0xD0, 0xFF, 0x0E, 0x8F, 0x4F, 0xAF, 0xC7, 0xF2, 0x76, 0x4E, 0xC2, 0x1F, 0xC6, 0xB7, +0xA3, 0xEC, 0x4D, 0x74, 0x74, 0x64, 0x6A, 0x94, 0x75, 0x13, 0x1C, 0x63, 0xC4, 0xEB, 0xB1, 0xAA, +0x74, 0x0E, 0xB0, 0xAD, 0xCA, 0x0A, 0x73, 0x27, 0x15, 0xD1, 0xB2, 0x1B, 0x60, 0x9F, 0x25, 0x48, +0xEE, 0x01, 0x04, 0x9C, 0x08, 0x13, 0x5B, 0x7D, 0x2F, 0xC3, 0xA7, 0xA6, 0xA2, 0xA7, 0x86, 0x68, +0xA0, 0x19, 0x85, 0x23, 0x44, 0x84, 0x02, 0xCE, 0x1D, 0xF1, 0x71, 0x37, 0x26, 0xF7, 0x38, 0xEC, +0x4A, 0x64, 0xD7, 0x31, 0x97, 0xD2, 0xD9, 0x8A, 0x6D, 0x88, 0x92, 0x48, 0x51, 0x2D, 0x16, 0x82, +0x8F, 0xC8, 0x17, 0x21, 0x1F, 0x5C, 0x26, 0x82, 0xCF, 0xDC, 0x77, 0x58, 0xD2, 0x9D, 0x64, 0xB3, +0x29, 0xB9, 0x07, 0x6F, 0x9E, 0x12, 0x4A, 0x38, 0xD6, 0xFA, 0xE9, 0xEA, 0xFB, 0x82, 0xCC, 0x2D, +0x7E, 0x98, 0x26, 0x28, 0xC2, 0xA9, 0xF6, 0x37, 0xC9, 0x2C, 0xA7, 0x09, 0x8B, 0x96, 0x55, 0x04, +0xE4, 0xAC, 0x36, 0x59, 0xAD, 0xBE, 0xC8, 0xE2, 0x90, 0x21, 0x10, 0xB3, 0x25, 0x6C, 0xA8, 0x60, +0x9A, 0x08, 0xB7, 0x2A, 0x83, 0x6A, 0xE1, 0x66, 0x5B, 0xE0, 0x96, 0x0D, 0xB7, 0xDE, 0xDA, 0xA9, +0x5C, 0xB7, 0x2B, 0xF7, 0x8A, 0x60, 0x5F, 0x57, 0x7D, 0x2D, 0x1E, 0xD4, 0x62, 0xDD, 0x17, 0x1C, +0x54, 0xDA, 0x7E, 0xB8, 0x3A, 0x44, 0x45, 0x86, 0x8A, 0x01, 0x15, 0xA5, 0xFB, 0xBB, 0x4E, 0x2D, +0x54, 0xC0, 0xBE, 0xD5, 0x17, 0x58, 0xA6, 0x41, 0xEB, 0x8B, 0x38, 0x81, 0xDB, 0xC0, 0x8B, 0xCF, +0xD0, 0x2C, 0x65, 0x6A, 0xD2, 0x06, 0x9A, 0x65, 0xBA, 0x53, 0x22, 0x54, 0x39, 0x4F, 0xF2, 0x5A, +0x92, 0x7E, 0x2C, 0x15, 0x80, 0x4B, 0x6E, 0x9E, 0x09, 0x6E, 0x3E, 0xAB, 0xD5, 0xED, 0xDD, 0xAF, +0x72, 0x1E, 0x76, 0x9C, 0xAF, 0x56, 0xB6, 0xDA, 0x5B, 0xE6, 0xE3, 0xBE, 0x03, 0xFF, 0x8A, 0xB4, +0xFB, 0xBC, 0x62, 0x61, 0xF2, 0x4C, 0xFC, 0x14, 0x0C, 0x02, 0x9D, 0x3A, 0x70, 0x7B, 0xE7, 0xBB, +0xE7, 0xC1, 0xA4, 0x00, 0x2A, 0xC1, 0x9E, 0x86, 0x27, 0x28, 0x20, 0x59, 0xEA, 0x3E, 0x73, 0xBE, +0x52, 0xFA, 0x84, 0xEB, 0x03, 0xD9, 0x8B, 0xCB, 0x55, 0x93, 0xCA, 0x62, 0xD3, 0x98, 0x50, 0x6D, +0x2B, 0xD5, 0xC4, 0x7D, 0xA3, 0xA4, 0x34, 0xCC, 0x7A, 0xAA, 0x07, 0x17, 0xA9, 0x4C, 0x53, 0xEC, +0x5F, 0x3A, 0x5F, 0x2D, 0x79, 0x82, 0x68, 0x3A, 0x65, 0x49, 0xE4, 0x26, 0x8C, 0x23, 0x8E, 0x0D, +0xC7, 0x5C, 0xF5, 0x9D, 0x36, 0xC0, 0xF6, 0xAE, 0x13, 0xE0, 0x99, 0xB9, 0x5A, 0xED, 0xF5, 0x20, +0xA9, 0xC9, 0x2A, 0xC6, 0x4F, 0x48, 0xCC, 0xF7, 0xA7, 0x19, 0xF5, 0x05, 0x0F, 0xDA, 0x0C, 0x1B, +0xD8, 0x5C, 0x26, 0x98, 0x67, 0x09, 0xD5, 0x02, 0xE6, 0x67, 0xC2, 0xD8, 0xED, 0x19, 0xE6, 0x27, +0xCA, 0xEE, 0x0F, 0x1F, 0x5E, 0x04, 0xB0, 0x63, 0x55, 0x22, 0xF8, 0xAD, 0x08, 0xE0, 0xC0, 0x70, +0x5E, 0x8E, 0xD3, 0xD8, 0x0F, 0x09, 0x06, 0x88, 0xBC, 0xC4, 0x0F, 0x06, 0xB6, 0x78, 0x89, 0x88, +0x6D, 0xB1, 0x6E, 0x14, 0xBB, 0x00, 0x46, 0xCD, 0xE5, 0x1D, 0x28, 0x01, 0x79, 0xF8, 0x03, 0xBF, +0xB1, 0x88, 0x47, 0xE1, 0x63, 0x90, 0xEF, 0x26, 0xFB, 0xE8, 0xA0, 0xDB, 0x77, 0xD1, 0x3E, 0x39, +0xE8, 0x83, 0x7B, 0xD5, 0xA8, 0xAB, 0x73, 0x7F, 0x20, 0x21, 0xBE, 0xCA, 0x1D, 0x4E, 0x1C, 0x23, +0x88, 0x95, 0x5B, 0x90, 0x22, 0xBE, 0xE5, 0x38, 0x1B, 0x1E, 0x3E, 0x40, 0x21, 0x86, 0x73, 0xF5, +0x93, 0xCB, 0xCB, 0xF3, 0xCB, 0x0F, 0x7A, 0x07, 0x77, 0xF4, 0x1B, 0x57, 0xD3, 0x3B, 0xD4, 0x74, +0xB9, 0x9D, 0xE0, 0x69, 0x82, 0xD3, 0xF9, 0x05, 0xE2, 0x73, 0x23, 0xB0, 0xEF, 0x50, 0x98, 0xD5, +0x05, 0x21, 0x06, 0x56, 0x2C, 0x72, 0x8F, 0xE2, 0x85, 0xF6, 0x03, 0xA8, 0xF9, 0x18, 0x71, 0x34, +0xE0, 0x36, 0x8A, 0x63, 0x4C, 0x03, 0x43, 0x8F, 0x01, 0x51, 0xB7, 0xB0, 0x69, 0x25, 0x50, 0x7D, +0xE2, 0x94, 0xA7, 0x36, 0x0A, 0x60, 0xF9, 0xE2, 0x6A, 0xAC, 0x5B, 0x7A, 0x4F, 0xF8, 0x91, 0x0E, +0xBC, 0x21, 0x73, 0x25, 0xA8, 0x30, 0x0F, 0x34, 0xA9, 0x4F, 0x32, 0xCE, 0x19, 0xD5, 0xCD, 0x01, +0xB3, 0x09, 0xA5, 0x38, 0x39, 0x1D, 0xBF, 0x7E, 0xE5, 0xE9, 0x97, 0x8A, 0x11, 0xED, 0x15, 0x49, +0x01, 0x45, 0x5E, 0x51, 0x7E, 0xC8, 0xD1, 0x9C, 0x84, 0x81, 0xC1, 0xCC, 0x81, 0x20, 0xE1, 0x4B, +0x12, 0xB2, 0x3A, 0x01, 0x0A, 0xBE, 0xAD, 0x6A, 0xD3, 0x29, 0x28, 0x43, 0xB7, 0x7C, 0x3B, 0xCA, +0x42, 0x4E, 0xE2, 0x10, 0x7B, 0x1B, 0x7D, 0x98, 0x51, 0x14, 0x01, 0x4C, 0xE4, 0x66, 0x01, 0x23, +0x81, 0xA7, 0xAB, 0x08, 0xA5, 0xE2, 0x5A, 0xEB, 0x29, 0xBE, 0x3A, 0x25, 0x68, 0x9C, 0x12, 0xD4, +0x71, 0x95, 0xC0, 0x81, 0x5D, 0x15, 0xC5, 0x30, 0xCB, 0x8F, 0x2A, 0x60, 0x01, 0x9E, 0x22, 0xE0, +0xE4, 0x2D, 0x68, 0x13, 0x56, 0x7B, 0x6D, 0x07, 0x05, 0xEA, 0xA0, 0xB4, 0xA9, 0x91, 0xB4, 0xAE, +0x11, 0x75, 0xBB, 0x6D, 0xC8, 0xA9, 0x42, 0x4E, 0x9A, 0xC8, 0x49, 0x1D, 0xF9, 0x48, 0x1A, 0x49, +0x1B, 0x72, 0xA2, 0x90, 0xC3, 0x86, 0x88, 0xA1, 0x14, 0x51, 0x85, 0xBD, 0xAE, 0xD0, 0x26, 0x08, +0x04, 0xD8, 0x61, 0x5D, 0x4C, 0x98, 0x81, 0x97, 0xA2, 0x49, 0x88, 0x03, 0x6F, 0xC3, 0x81, 0x99, +0xA8, 0xB4, 0xBD, 0x2D, 0xA7, 0xE5, 0x8C, 0x50, 0x9D, 0x91, 0x35, 0x19, 0xCC, 0xEA, 0x0C, 0x6A, +0x23, 0x74, 0x87, 0xB5, 0x36, 0x06, 0x33, 0x30, 0x26, 0x9B, 0x51, 0x3F, 0x24, 0xFE, 0xAD, 0x57, +0x79, 0x8B, 0xB9, 0x24, 0xA5, 0x85, 0x5A, 0x54, 0x06, 0xBA, 0xAB, 0x24, 0xAC, 0x96, 0x60, 0x50, +0xE8, 0x7B, 0x65, 0x65, 0xAD, 0x04, 0xA8, 0x8D, 0xEF, 0xB1, 0x7F, 0xC4, 0xA2, 0x08, 0x09, 0xDB, +0x4D, 0x81, 0x83, 0x7C, 0xA2, 0x9B, 0x2B, 0x8B, 0xB5, 0xE2, 0x3C, 0xE1, 0x22, 0x56, 0xDA, 0xCE, +0xE2, 0xD4, 0x00, 0x97, 0xF3, 0x7C, 0x5B, 0xE8, 0x30, 0xB5, 0x41, 0x8F, 0x33, 0x3E, 0xFF, 0xBC, +0x0B, 0x15, 0x06, 0xAA, 0x50, 0x3E, 0x38, 0x37, 0xB9, 0x24, 0x8F, 0x7D, 0xEA, 0x7C, 0xD4, 0x74, +0x2A, 0xA5, 0x64, 0xEA, 0x81, 0x0A, 0x1B, 0xD6, 0x69, 0x0E, 0x68, 0xA5, 0x0B, 0xB9, 0x87, 0x88, +0x3D, 0x4D, 0xEB, 0x87, 0x5D, 0xA4, 0xD8, 0xA5, 0xAF, 0x56, 0x96, 0x2F, 0xE4, 0x99, 0x23, 0x3A, +0xC3, 0x7F, 0x5F, 0xA0, 0x8A, 0x67, 0xE9, 0x00, 0x16, 0xF5, 0x7A, 0xC6, 0x81, 0xFB, 0x8B, 0x6D, +0x7C, 0xF8, 0xD5, 0xBE, 0xE9, 0x98, 0xE6, 0xC1, 0x97, 0x3D, 0xA9, 0x71, 0x83, 0x9B, 0x1F, 0xFA, +0x37, 0x16, 0x02, 0xB0, 0xFD, 0x8D, 0xF9, 0x8B, 0x2D, 0xC1, 0x0D, 0xD8, 0xE0, 0x8E, 0x41, 0x66, +0x11, 0x27, 0x09, 0x83, 0x63, 0x53, 0x0D, 0x6D, 0x6E, 0x1A, 0xDC, 0x43, 0x8D, 0x6B, 0xED, 0xF0, +0x8E, 0x6E, 0x43, 0xDC, 0x5A, 0xAD, 0xD6, 0x83, 0xE1, 0x38, 0xC1, 0x58, 0xC5, 0xDA, 0x12, 0x20, +0xB9, 0x17, 0x52, 0x43, 0xC3, 0x48, 0xA5, 0xDC, 0x32, 0xA3, 0xE8, 0xA6, 0x9D, 0x26, 0xBE, 0xA7, +0xB4, 0x78, 0x50, 0xC0, 0x3C, 0x88, 0x8A, 0x15, 0x4D, 0x54, 0x45, 0x3D, 0x20, 0xF0, 0xC8, 0x2B, +0xCC, 0x01, 0xCF, 0x79, 0xC2, 0x56, 0x05, 0x07, 0xC2, 0x32, 0xDD, 0xD8, 0x79, 0x26, 0xF3, 0x74, +0x91, 0xCA, 0x74, 0x6B, 0xBE, 0xBE, 0x2C, 0x5B, 0x0C, 0x58, 0xAF, 0x39, 0xC3, 0xD7, 0x7B, 0x24, +0x9A, 0x69, 0x35, 0xBE, 0xC4, 0x1F, 0xEF, 0x6B, 0x11, 0xA9, 0x37, 0x7F, 0xF3, 0x27, 0xC0, 0x1D, +0x98, 0x0C, 0xB6, 0x29, 0x5B, 0x18, 0x66, 0xE7, 0x6B, 0x5D, 0x93, 0x14, 0x3D, 0x3D, 0x42, 0xF7, +0x79, 0xA3, 0x29, 0x32, 0xE1, 0x40, 0x13, 0x73, 0x95, 0x76, 0x8B, 0x05, 0xD5, 0xE2, 0xA1, 0x8C, +0xB3, 0x81, 0x56, 0x64, 0x58, 0xD5, 0xE2, 0xE8, 0x5A, 0x6F, 0xFF, 0xEB, 0x46, 0xA0, 0xB7, 0x88, +0xB9, 0xAC, 0x82, 0x74, 0x16, 0x82, 0x9C, 0xF8, 0xE9, 0x08, 0x1C, 0x12, 0x80, 0xB3, 0xB5, 0xD8, +0x69, 0x25, 0x06, 0x31, 0x0F, 0x0C, 0xBF, 0xEE, 0xE7, 0x7B, 0xA2, 0x28, 0xDE, 0xBF, 0x50, 0xD5, +0xCE, 0x5E, 0x4F, 0xCE, 0xC0, 0xDA, 0x1F, 0x7B, 0x0F, 0x5C, 0x1E, 0x02, 0x74, 0xAB, 0xCC, 0xAF, +0x13, 0x16, 0x3C, 0xD4, 0xB2, 0x72, 0x7A, 0xF8, 0x70, 0x14, 0xA2, 0x34, 0x3D, 0x43, 0x11, 0x9C, +0xEF, 0x47, 0xBA, 0x99, 0x5B, 0xE3, 0xBE, 0xB3, 0xB9, 0xD9, 0x44, 0x4A, 0x70, 0x04, 0x45, 0xB8, +0xE2, 0x0A, 0x7C, 0xD5, 0x74, 0x53, 0x20, 0xBC, 0xB9, 0xD9, 0xC6, 0x98, 0x78, 0xE0, 0xF1, 0x39, +0xAE, 0x28, 0x44, 0x80, 0x22, 0xD6, 0xFC, 0x4F, 0xDC, 0xA9, 0x8C, 0xF3, 0x94, 0x56, 0x03, 0x38, +0xF3, 0x31, 0xDB, 0xC7, 0xB9, 0xE1, 0x96, 0xAC, 0x07, 0xAD, 0x0A, 0xA5, 0xFF, 0x0F, 0xCB, 0x2A, +0x81, 0x3C, 0xC5, 0x71, 0x68, 0x5A, 0x61, 0x0B, 0xC7, 0x38, 0xC4, 0x1C, 0x97, 0xFC, 0x86, 0xAD, +0xFC, 0x66, 0xFF, 0x0F, 0xBF, 0x95, 0x9D, 0x33, 0x11, 0x25, 0xCA, 0xBA, 0x4B, 0x4A, 0x10, 0x90, +0x3B, 0xDD, 0xB4, 0x98, 0xD7, 0xA4, 0x00, 0x35, 0x23, 0x0B, 0xC3, 0x31, 0x8B, 0x0F, 0x9E, 0x58, +0x77, 0xCB, 0xF5, 0x7C, 0x50, 0xB0, 0x59, 0x6D, 0xB1, 0xFC, 0x56, 0xA2, 0xAF, 0xF0, 0x94, 0x1F, +0x3C, 0x05, 0x78, 0x9A, 0x6C, 0xB5, 0xC7, 0x0A, 0x3C, 0x6C, 0x83, 0xF2, 0x60, 0xF5, 0xE7, 0x8E, +0x6F, 0xA5, 0xE5, 0xEC, 0xBA, 0xC3, 0x06, 0x08, 0xC6, 0xB9, 0x92, 0x3C, 0xA1, 0x24, 0x0B, 0xB5, +0x06, 0xA0, 0x6A, 0x5D, 0x74, 0x27, 0x5E, 0xD0, 0xD1, 0xE3, 0xFB, 0x6A, 0x8D, 0xB3, 0xD8, 0x4B, +0xD5, 0x12, 0x31, 0x90, 0xC5, 0xD7, 0x2E, 0xA5, 0x71, 0xDD, 0xA8, 0x28, 0x46, 0x90, 0xCD, 0xA6, +0xD3, 0x14, 0xF3, 0x77, 0x22, 0x24, 0x59, 0x61, 0x39, 0x3F, 0x95, 0x21, 0x69, 0x00, 0x53, 0x1A, +0xB1, 0x2C, 0xC5, 0x2C, 0xE3, 0x8D, 0x14, 0x63, 0x94, 0xC2, 0xEC, 0x05, 0x7F, 0xFC, 0x51, 0x4E, +0xF6, 0x83, 0x4E, 0x52, 0x4D, 0xAF, 0xF7, 0xD2, 0xDA, 0x64, 0x3F, 0xED, 0x84, 0xE0, 0xD0, 0xFF, +0xB1, 0xA5, 0xA0, 0xBA, 0xA5, 0xF8, 0xA2, 0x84, 0x96, 0x31, 0xB1, 0x19, 0xF3, 0x64, 0x21, 0x49, +0x6B, 0x3E, 0x2B, 0x0C, 0x5A, 0x37, 0x8B, 0xB2, 0xBD, 0xEE, 0xAB, 0xD4, 0xF2, 0xD7, 0x5D, 0xD9, +0x6F, 0xAD, 0x1A, 0x52, 0x43, 0x50, 0x05, 0xAD, 0xBF, 0x62, 0x0B, 0x9C, 0x1C, 0xA1, 0x14, 0x1B, +0x90, 0x3C, 0xCB, 0xB8, 0x23, 0xA1, 0xA6, 0x9B, 0xB4, 0xEC, 0x02, 0x25, 0x20, 0x05, 0xCE, 0x33, +0x38, 0xA3, 0xA2, 0x56, 0x03, 0xF9, 0xB2, 0xC6, 0x09, 0xD8, 0x16, 0xFD, 0x26, 0x48, 0x7D, 0xAC, +0x4A, 0x53, 0xC3, 0xB4, 0x30, 0xDC, 0x35, 0x8B, 0x2F, 0x12, 0x16, 0xA3, 0x99, 0xEC, 0xCD, 0x60, +0x4D, 0xB8, 0x87, 0xA0, 0x66, 0x6D, 0x38, 0x82, 0x60, 0xA5, 0x8D, 0xA0, 0xF0, 0x9B, 0xAA, 0xB5, +0xA1, 0x96, 0x9E, 0xA7, 0x43, 0xE9, 0x4B, 0x4F, 0x65, 0x0D, 0x24, 0x1E, 0xCB, 0x26, 0x86, 0xAA, +0x42, 0x68, 0x7E, 0x0F, 0xE0, 0x6E, 0xCE, 0x80, 0xEC, 0xB3, 0x01, 0xEB, 0x74, 0x4C, 0x55, 0xBD, +0x7B, 0x1E, 0xB4, 0x3F, 0xEC, 0x46, 0x16, 0x9C, 0x20, 0x54, 0x33, 0xB3, 0x18, 0xDC, 0x92, 0x40, +0x71, 0xA0, 0x1C, 0xC9, 0xDA, 0xD3, 0xAC, 0xB7, 0x5C, 0x65, 0xCE, 0x7E, 0xAA, 0x06, 0xC1, 0xB2, +0xCE, 0x80, 0x7A, 0x66, 0xBD, 0xD4, 0xE0, 0x66, 0xBA, 0x20, 0xDC, 0x9F, 0x8B, 0x00, 0xE4, 0x83, +0x56, 0x75, 0x0E, 0xC5, 0xAE, 0x2B, 0x47, 0x73, 0x1E, 0x55, 0xA3, 0x30, 0x1F, 0x7E, 0x4C, 0xF3, +0x81, 0x9F, 0x16, 0xA3, 0xFB, 0x1A, 0x90, 0xD1, 0x02, 0xCC, 0xE8, 0x34, 0x1F, 0x12, 0x4A, 0x0A, +0x3A, 0x05, 0xB0, 0xF8, 0x8C, 0xE3, 0x7C, 0x14, 0xCF, 0x8B, 0xD1, 0x1C, 0xDF, 0x97, 0x78, 0xAC, +0x80, 0x06, 0x58, 0x77, 0x95, 0x8D, 0x6D, 0x38, 0xAB, 0x7C, 0xD0, 0xAF, 0xE4, 0x4F, 0xFE, 0x43, +0xF9, 0x63, 0x3A, 0x2B, 0xA4, 0x89, 0x8B, 0xD1, 0x8C, 0x14, 0xB2, 0x4C, 0xA2, 0xF8, 0xB3, 0x9C, +0x84, 0xB5, 0x5E, 0xB9, 0xD6, 0xEB, 0xF2, 0xBF, 0x6A, 0x47, 0xB9, 0xE9, 0x1A, 0xD3, 0xBA, 0x3F, +0xC2, 0xCC, 0x17, 0x9F, 0x67, 0x2C, 0x90, 0x35, 0xA6, 0x69, 0x45, 0xC6, 0xD4, 0x82, 0x3A, 0xD0, +0xAC, 0xFB, 0x69, 0xF6, 0x6F, 0x5B, 0xD4, 0xE3, 0x93, 0x57, 0x27, 0xE3, 0x93, 0x7A, 0x41, 0x1D, +0x1A, 0x0D, 0x93, 0x8A, 0x15, 0xD7, 0xEB, 0xA2, 0x50, 0x0B, 0x49, 0x51, 0xC0, 0x5E, 0x37, 0x37, +0x95, 0x5F, 0xFC, 0x34, 0x3A, 0x3F, 0xB3, 0x63, 0x94, 0x80, 0x47, 0xA2, 0x06, 0x73, 0x91, 0x22, +0xD1, 0x3C, 0xF8, 0xC7, 0x93, 0x5A, 0x19, 0x2F, 0x5F, 0x3B, 0xB8, 0x7C, 0x65, 0xA9, 0xD3, 0x54, +0x9F, 0x3C, 0x97, 0x75, 0x67, 0xFE, 0x84, 0x08, 0x92, 0xD3, 0xB4, 0x4A, 0x54, 0x83, 0x82, 0x9D, +0x7A, 0x98, 0xE7, 0x77, 0x59, 0x5B, 0x23, 0x35, 0x35, 0x2D, 0x3E, 0x27, 0x69, 0xBD, 0x81, 0x69, +0x04, 0x85, 0xBF, 0xA9, 0xED, 0x55, 0x31, 0x52, 0xE4, 0xD6, 0x6B, 0x6F, 0xF5, 0xCA, 0x48, 0xC5, +0x07, 0x0B, 0x89, 0x88, 0x59, 0x65, 0xDB, 0xEA, 0x6E, 0x74, 0xC8, 0x3D, 0x84, 0xEA, 0x16, 0xFD, +0xC7, 0xE6, 0x49, 0x0B, 0xF3, 0xA4, 0x75, 0xF7, 0x2C, 0x29, 0x0E, 0x26, 0xC0, 0xC5, 0xED, 0xA0, +0x74, 0x9C, 0x76, 0x88, 0xF2, 0xC5, 0x76, 0x24, 0x1E, 0x09, 0x88, 0xF4, 0xF0, 0x06, 0xE0, 0x63, +0x2A, 0xD7, 0x3F, 0xA2, 0x3B, 0xA4, 0x9E, 0x20, 0x35, 0xD1, 0x24, 0xD0, 0xFF, 0x0D, 0x1C, 0xB8, +0x79, 0xD2, 0x53, 0xEB, 0x30, 0x6F, 0x87, 0x54, 0x61, 0x24, 0x85, 0xE1, 0xE3, 0x68, 0xC0, 0x1B, +0xC1, 0xA5, 0x8A, 0x38, 0xF5, 0xD8, 0x02, 0xC6, 0x9F, 0xBB, 0xA2, 0xC6, 0x6B, 0x17, 0x54, 0xF7, +0xBB, 0xCD, 0xCD, 0x27, 0x1D, 0xAF, 0x19, 0xE7, 0xAB, 0xFA, 0xA8, 0xE9, 0x51, 0x68, 0xAD, 0x63, +0x15, 0xC0, 0xC3, 0x90, 0x4D, 0x0C, 0xF1, 0xF0, 0x6A, 0x29, 0x6E, 0xCB, 0xA5, 0x2B, 0xD3, 0xFA, +0x8B, 0xBE, 0x15, 0x59, 0x7E, 0x3D, 0x6C, 0x2B, 0x0E, 0xEB, 0xE6, 0xDE, 0xDE, 0x47, 0x35, 0x3B, +0xAD, 0xF6, 0x8A, 0x46, 0x3A, 0x25, 0x3E, 0x08, 0xED, 0x14, 0xAB, 0x67, 0x2F, 0x06, 0xC4, 0x94, +0xDA, 0x4C, 0xD7, 0x45, 0x65, 0xEA, 0x87, 0x18, 0x25, 0x23, 0xD1, 0x03, 0xAB, 0xA4, 0xD7, 0x88, +0xA1, 0x9F, 0xF7, 0x55, 0xF1, 0xE1, 0x62, 0xE8, 0xFD, 0xCD, 0x95, 0x2E, 0x1E, 0xE8, 0x4F, 0x09, +0xC5, 0x81, 0x5E, 0x05, 0x52, 0xD9, 0xB3, 0xEA, 0x3D, 0xF9, 0xE8, 0xD5, 0x96, 0xF7, 0x66, 0x5A, +0x6D, 0x1B, 0x29, 0x6C, 0xA4, 0x1E, 0x03, 0xF6, 0xDA, 0xE1, 0x08, 0xE0, 0x08, 0xFA, 0x3B, 0x46, +0xD9, 0x2D, 0x22, 0x4F, 0x10, 0x21, 0xB0, 0x89, 0xE4, 0xAF, 0x65, 0xA1, 0x29, 0xB6, 0x94, 0x65, +0xC9, 0x3C, 0x5A, 0x83, 0x28, 0x7B, 0x37, 0x8B, 0x67, 0x3E, 0xC8, 0xC7, 0xB6, 0x90, 0xC2, 0xC0, +0x45, 0x24, 0xC9, 0x3D, 0x62, 0x43, 0xA2, 0x85, 0xA2, 0x88, 0x1A, 0xE1, 0x34, 0x95, 0x9A, 0x11, +0x9A, 0x7B, 0xCD, 0x02, 0x50, 0x1C, 0xA0, 0xF5, 0x22, 0x18, 0x89, 0x83, 0x40, 0x87, 0x02, 0x30, +0x9E, 0xE3, 0x28, 0x87, 0x70, 0x18, 0x0A, 0x10, 0x12, 0xA0, 0x2F, 0xE5, 0x65, 0x8C, 0x64, 0xB1, +0x4A, 0xE8, 0xCC, 0xEB, 0xF7, 0x1C, 0xEB, 0x31, 0xD9, 0xAB, 0x14, 0x8F, 0xD8, 0x94, 0x8F, 0xD1, +0x24, 0x35, 0xA0, 0xD6, 0x68, 0xD9, 0x01, 0xA0, 0x11, 0xE4, 0x78, 0x63, 0xCB, 0x6C, 0x47, 0x7F, +0xC7, 0x92, 0x5B, 0x9C, 0x18, 0x1B, 0xFD, 0x9C, 0x9F, 0x53, 0x28, 0x32, 0x43, 0xF8, 0xE5, 0x43, +0x5F, 0xBC, 0x85, 0x7D, 0x05, 0xCA, 0xCA, 0x29, 0xA7, 0x80, 0x3C, 0x67, 0x8B, 0x8B, 0x84, 0x50, +0xFE, 0x5A, 0x76, 0xC4, 0x39, 0x96, 0xAF, 0x9E, 0xFD, 0xC8, 0xAB, 0x2E, 0x1E, 0x0A, 0x2D, 0x45, +0x89, 0xE1, 0x36, 0x1E, 0x0D, 0x59, 0x13, 0xB8, 0x50, 0xA8, 0x78, 0xDC, 0xE5, 0x82, 0x50, 0x57, +0x3F, 0xE2, 0x49, 0xD8, 0x1D, 0xE9, 0x56, 0x84, 0x7C, 0x98, 0xA8, 0x3D, 0x30, 0x5F, 0x59, 0x22, +0x8C, 0xB9, 0xF5, 0xF8, 0x1A, 0x18, 0xDC, 0xC2, 0xF6, 0xAC, 0x30, 0x3F, 0xB3, 0xA3, 0xEB, 0x16, +0x81, 0x70, 0x0A, 0xAE, 0x1F, 0x9C, 0xD3, 0xF0, 0xC1, 0x85, 0xB4, 0xF9, 0x79, 0x3E, 0xC4, 0xBD, +0xB3, 0xCF, 0xF1, 0xF1, 0x7E, 0x8D, 0x8F, 0xF7, 0x6D, 0x7C, 0xE0, 0xA6, 0xFE, 0x60, 0x72, 0x05, +0x64, 0x5F, 0x23, 0x8A, 0x66, 0x38, 0x81, 0x05, 0x71, 0x08, 0xA8, 0xE4, 0x9F, 0x71, 0x96, 0xE0, +0xCF, 0x73, 0x36, 0x9A, 0x93, 0x29, 0x5F, 0xE7, 0x4F, 0xAD, 0xFE, 0x3B, 0x2E, 0x13, 0xFC, 0x04, +0x97, 0x45, 0x99, 0xDC, 0xC8, 0x6D, 0x2A, 0x7E, 0xB5, 0x3F, 0xBE, 0x41, 0xE5, 0xE3, 0x1B, 0x0E, +0xBF, 0xCA, 0x11, 0xAD, 0xBA, 0x2B, 0xFD, 0x0B, 0x9F, 0x48, 0x0C, 0x0E, 0x9C, 0x85, 0xB5, 0x4E, +0x93, 0x1E, 0x42, 0x7F, 0xF1, 0x0A, 0x58, 0x33, 0x14, 0x37, 0xD8, 0x5B, 0xAE, 0xE0, 0x40, 0x63, +0x41, 0x40, 0xAC, 0x05, 0x30, 0xED, 0xCB, 0xAA, 0xDB, 0x9E, 0x27, 0x58, 0x24, 0x62, 0x38, 0x12, +0x92, 0x7C, 0xEF, 0xC3, 0xC1, 0xE6, 0x4D, 0x07, 0x92, 0xA3, 0x07, 0x1F, 0xA6, 0x07, 0x83, 0xCD, +0x9B, 0x6F, 0xCC, 0xDE, 0x8C, 0x58, 0xA5, 0x70, 0x32, 0xCD, 0x82, 0xBA, 0x3E, 0xD0, 0x1B, 0x0F, +0x81, 0xFC, 0xF5, 0x2C, 0x5C, 0x86, 0x48, 0xB0, 0x3B, 0x21, 0x30, 0x7C, 0x84, 0x88, 0xCE, 0xE0, +0x43, 0xFA, 0xA8, 0x69, 0x82, 0xB4, 0xB5, 0x27, 0x66, 0x3A, 0x87, 0xBF, 0x3A, 0x04, 0xE0, 0x41, +0xCB, 0x3B, 0x05, 0x3D, 0xCB, 0x47, 0x3A, 0x1C, 0xC8, 0xDB, 0x63, 0x90, 0x3A, 0x05, 0xC2, 0x8D, +0x1A, 0xD4, 0x63, 0x1F, 0x44, 0xAD, 0xAA, 0x81, 0x51, 0xE0, 0xF6, 0xA8, 0xF9, 0xF3, 0xEB, 0x57, +0xA7, 0x9C, 0xC7, 0x97, 0x2A, 0xEE, 0x02, 0xAD, 0xE6, 0x42, 0x75, 0xAB, 0xE6, 0x92, 0x27, 0x0F, +0x45, 0x39, 0x26, 0x92, 0x8F, 0xF2, 0xF4, 0x9F, 0xCF, 0x27, 0x1F, 0xB1, 0x0F, 0x79, 0xED, 0x75, +0x0A, 0x49, 0x71, 0xCB, 0x16, 0xE8, 0xE3, 0xF1, 0x85, 0xBD, 0x6B, 0x3B, 0x50, 0xBB, 0x80, 0x92, +0xFD, 0xB9, 0x30, 0x88, 0xD5, 0x3F, 0x42, 0xDE, 0xFE, 0x67, 0xC8, 0x04, 0xC2, 0x5D, 0x0A, 0xF1, +0xAC, 0xC0, 0x6F, 0xE2, 0xCE, 0x13, 0xB6, 0x90, 0x68, 0x27, 0x49, 0x22, 0xEE, 0x68, 0x0C, 0x55, +0x94, 0x36, 0x81, 0xC5, 0x14, 0x43, 0x13, 0xC9, 0x70, 0xAA, 0x51, 0xC6, 0xB5, 0x34, 0x8B, 0x63, +0x96, 0xF0, 0x35, 0x7D, 0xD8, 0x7A, 0xF1, 0x84, 0xE8, 0x4D, 0x86, 0x33, 0x1C, 0xE4, 0xCB, 0x38, +0xA9, 0xEB, 0x45, 0x56, 0x79, 0xB0, 0x0E, 0x36, 0xFD, 0xE1, 0x26, 0xAF, 0xF9, 0x32, 0x4A, 0x45, +0xF8, 0xDD, 0xE8, 0xAB, 0x39, 0x48, 0x37, 0x07, 0xAA, 0x1E, 0xCD, 0xC2, 0x70, 0x35, 0x58, 0xA3, +0x05, 0xCD, 0x21, 0xE3, 0x4C, 0x3E, 0xEA, 0x5F, 0xFE, 0x96, 0x27, 0xC0, 0x86, 0x6F, 0x96, 0x56, +0xCD, 0xDB, 0x6B, 0x62, 0x73, 0xB9, 0x03, 0x99, 0xD7, 0x16, 0x8E, 0xF9, 0x30, 0xE2, 0x88, 0x0B, +0x93, 0x10, 0xBE, 0xA7, 0x0C, 0xE8, 0xA9, 0x94, 0xCE, 0x6D, 0x1F, 0x85, 0xA1, 0x78, 0x01, 0x0A, +0x06, 0x92, 0x02, 0x5A, 0x96, 0x5A, 0x82, 0x48, 0x1A, 0x33, 0x9A, 0xE2, 0x31, 0x78, 0xA3, 0x69, +0x39, 0x22, 0x9F, 0x29, 0xD9, 0xF2, 0xDE, 0x51, 0xE4, 0xCE, 0x9A, 0x78, 0xA6, 0x55, 0xCE, 0x36, +0x37, 0xA9, 0x5D, 0xB0, 0x6F, 0x14, 0x48, 0xA9, 0x88, 0x38, 0x86, 0x29, 0xCA, 0x72, 0x28, 0x2E, +0x9B, 0xBA, 0x71, 0xAC, 0x0D, 0x63, 0x03, 0x6B, 0x84, 0xC2, 0xE1, 0xD4, 0x17, 0xC6, 0xA8, 0x6E, +0xD4, 0x54, 0x1E, 0x4B, 0x3D, 0xB1, 0x7D, 0x50, 0x0A, 0xF2, 0x64, 0xE5, 0x91, 0x77, 0xC0, 0xBA, +0x2E, 0xEA, 0x57, 0x2C, 0x3A, 0x01, 0x14, 0xA5, 0x35, 0xB2, 0x65, 0x0D, 0x65, 0x22, 0xAF, 0x00, +0x0F, 0x70, 0x98, 0x62, 0xAD, 0xB9, 0x7F, 0x9D, 0x8D, 0xB2, 0x71, 0x06, 0x98, 0x56, 0xEC, 0x33, +0x51, 0x07, 0x4E, 0x02, 0xB5, 0xA0, 0x03, 0x59, 0x9E, 0x78, 0x42, 0xF3, 0x11, 0xE6, 0x73, 0x16, +0x1C, 0xE8, 0x07, 0xBA, 0xAB, 0xC3, 0xFF, 0x4D, 0xDD, 0x82, 0x5D, 0x98, 0xFA, 0x2C, 0xC0, 0x57, +0x97, 0x2F, 0x20, 0xFA, 0x82, 0x4A, 0x31, 0xE5, 0x06, 0x81, 0x24, 0xE4, 0xE9, 0x9D, 0x16, 0x48, +0x41, 0xFE, 0x03, 0xB9, 0x31, 0x07, 0x4D, 0x93, 0xC1, 0x8B, 0x35, 0xA3, 0x6C, 0x98, 0x94, 0xCD, +0xA8, 0xBC, 0x77, 0x71, 0x81, 0x38, 0x7F, 0x83, 0xC0, 0x8D, 0xFA, 0x0E, 0x51, 0x12, 0x3E, 0x62, +0xD5, 0x68, 0xD2, 0x88, 0x31, 0x35, 0x0A, 0x18, 0x18, 0x41, 0x96, 0x84, 0x1D, 0x24, 0x9E, 0x42, +0x34, 0x8F, 0x4A, 0x45, 0xF9, 0x69, 0x9A, 0xEE, 0x5F, 0x22, 0x4B, 0x54, 0x54, 0x57, 0xE9, 0x88, +0x27, 0xD2, 0x44, 0xD6, 0xE8, 0xF1, 0x5C, 0xA4, 0x53, 0x2C, 0x83, 0x5E, 0xF3, 0xCB, 0x73, 0x96, +0x8E, 0xE2, 0x38, 0x24, 0x2A, 0x50, 0xF7, 0xE0, 0x61, 0xFB, 0x62, 0xD1, 0x15, 0xAF, 0x9A, 0xBB, +0x70, 0x82, 0x52, 0x61, 0xA0, 0xB7, 0x70, 0xA8, 0x9A, 0x40, 0x2B, 0x15, 0xAF, 0xD5, 0xD7, 0xBC, +0xB4, 0x32, 0x55, 0x63, 0xCD, 0x4D, 0x9B, 0x74, 0x9A, 0x7C, 0xD6, 0x1C, 0x6B, 0x6F, 0x67, 0x0D, +0x84, 0x26, 0xE2, 0xA5, 0x32, 0xE4, 0x1E, 0x48, 0xD1, 0xE5, 0x69, 0x45, 0x37, 0x56, 0x0F, 0x0D, +0x76, 0x9C, 0xA5, 0x73, 0x63, 0x09, 0xAC, 0xBB, 0xDC, 0x52, 0xBA, 0x72, 0xB1, 0xA5, 0x2E, 0xDD, +0xA5, 0x56, 0xE1, 0x8A, 0xAE, 0xC8, 0x29, 0x75, 0xDE, 0xFE, 0xF8, 0x43, 0xCC, 0x2A, 0xC7, 0x92, +0xB3, 0xA6, 0x6F, 0xAD, 0xD4, 0x13, 0xE1, 0xA2, 0x74, 0x16, 0x16, 0xB3, 0x1E, 0xAE, 0x06, 0x7B, +0x3D, 0xD5, 0x44, 0x15, 0xAF, 0xE3, 0x35, 0x12, 0x78, 0x22, 0x87, 0xEA, 0xF9, 0x7B, 0x0F, 0x18, +0x4E, 0x21, 0x36, 0xD9, 0xD0, 0x75, 0xD5, 0xBF, 0x70, 0x58, 0xEB, 0xBE, 0xCA, 0xAF, 0x2D, 0xEA, +0xF9, 0xF7, 0x16, 0xD7, 0x49, 0xEE, 0x83, 0x37, 0xB5, 0x65, 0x98, 0xA2, 0xE8, 0x55, 0x5E, 0xAD, +0xF6, 0x7A, 0x4F, 0xBC, 0xC6, 0xD7, 0xF3, 0xC3, 0xCC, 0x81, 0x1A, 0xD8, 0x25, 0x77, 0x82, 0x33, +0x2B, 0x5F, 0x44, 0xE9, 0x03, 0xF5, 0x45, 0x6C, 0x2D, 0xA9, 0xCC, 0xE1, 0x86, 0x1A, 0xCD, 0xB7, +0xDA, 0x69, 0xAE, 0x2A, 0x26, 0x7B, 0xEA, 0xFB, 0x9A, 0xE2, 0xB1, 0xA3, 0xC6, 0xF2, 0xD7, 0x4E, +0xF5, 0x2A, 0x01, 0x04, 0x82, 0x16, 0x5F, 0xE8, 0xA5, 0x08, 0x37, 0x9A, 0xEC, 0xF1, 0xCB, 0x29, +0x90, 0x80, 0x0D, 0xD5, 0xAE, 0x2C, 0x6E, 0x07, 0xA8, 0xB4, 0xBE, 0xBE, 0xA8, 0x2A, 0x83, 0xF5, +0xE5, 0xA2, 0xED, 0x2A, 0x5F, 0x2A, 0xD5, 0xBE, 0x88, 0x51, 0xD1, 0x20, 0xF2, 0xDD, 0x99, 0xDC, +0xDF, 0x7C, 0x9D, 0xF6, 0x24, 0x9A, 0xC2, 0x80, 0x81, 0x10, 0x17, 0x3E, 0xE4, 0x37, 0x58, 0xFF, +0x04, 0x63, 0x8F, 0x76, 0xB0, 0xD1, 0x2A, 0x00, 0x00 }; #define SPIFFS_MAXLENGTH_FILEPATH 32 @@ -442,7 +443,7 @@ void SPIFFSEditor::handleRequest(AsyncWebServerRequest *request){ #ifdef ESP32 File dir = _fs.open(path); #else - Dir dir = _fs.openDir(path); + fs::Dir dir = _fs.openDir(path); #endif path = String(); String output = "["; diff --git a/src/WebRequest.cpp b/src/WebRequest.cpp index bbce5ca..822a6a7 100644 --- a/src/WebRequest.cpp +++ b/src/WebRequest.cpp @@ -96,6 +96,10 @@ AsyncWebServerRequest::~AsyncWebServerRequest(){ if(_tempFile){ _tempFile.close(); } + + if(_itemBuffer){ + free(_itemBuffer); + } } void AsyncWebServerRequest::_onData(void *buf, size_t len){ diff --git a/src/edit.htm b/src/edit.htm index 43d4984..49d9c00 100644 --- a/src/edit.htm +++ b/src/edit.htm @@ -1,627 +1 @@ - - - - -ESP Editor - - - - - - -
-
-
-
- - - - +ESP Editor
\ No newline at end of file