{"version":3,"sources":["webpack:///./node_modules/parse-srcset/src/parse-srcset.js","webpack:///./node_modules/picocolors/picocolors.browser.js","webpack:///./node_modules/paho-mqtt/paho-mqtt.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./node_modules/os-browserify/browser.js"],"names":["input","isSpace","c","collectCharacters","regEx","chars","match","exec","substring","pos","length","url","descriptors","currentDescriptor","state","inputLength","regexLeadingSpaces","regexLeadingCommasOrSpaces","regexLeadingNotSpaces","regexTrailingCommas","regexNonNegativeInteger","regexFloatingPoint","candidates","slice","replace","parseDescriptors","tokenize","charAt","push","w","d","h","i","desc","lastChar","value","intVal","floatVal","pError","candidate","parseInt","parseFloat","test","console","log","x","String","create","isColorSupported","reset","bold","dim","italic","underline","inverse","hidden","strikethrough","black","red","green","yellow","blue","magenta","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","blackBright","redBright","greenBright","yellowBright","blueBright","magentaBright","cyanBright","whiteBright","bgBlackBright","bgRedBright","bgGreenBright","bgYellowBright","bgBlueBright","bgMagentaBright","bgCyanBright","bgWhiteBright","module","exports","createColors","factory","PahoMQTT","global","data","localStorage","setItem","key","item","getItem","removeItem","MESSAGE_TYPE","validate","obj","keys","hasOwnProperty","errorStr","validKey","Error","format","ERROR","INVALID_TYPE","scope","f","apply","arguments","OK","code","text","CONNECT_TIMEOUT","SUBSCRIBE_TIMEOUT","UNSUBSCRIBE_TIMEOUT","PING_TIMEOUT","INTERNAL_ERROR","CONNACK_RETURNCODE","SOCKET_ERROR","SOCKET_CLOSE","MALFORMED_UTF","UNSUPPORTED","INVALID_STATE","INVALID_ARGUMENT","UNSUPPORTED_OPERATION","INVALID_STORED_DATA","INVALID_MQTT_MESSAGE_TYPE","MALFORMED_UNICODE","BUFFER_FULL","CONNACK_RC","error","substitutions","field","start","indexOf","part1","part2","MqttProtoIdentifierv3","MqttProtoIdentifierv4","WireMessage","type","options","name","this","decodeMessage","digit","startingPos","first","messageInfo","remLength","multiplier","endPos","wireMessage","sessionPresent","returnCode","qos","len","readUint16","topicName","parseUTF8","messageIdentifier","message","Message","subarray","retained","duplicate","destinationName","payloadMessage","writeUint16","buffer","offset","writeString","utf8Length","stringToUTF8","UTF8Length","output","charCode","charCodeAt","lowCharCode","isNaN","utf16","byte1","byte2","toString","byte3","byte4","fromCharCode","prototype","encode","willMessagePayloadBytes","topicStrLength","destinationNameLength","undefined","mqttVersion","clientId","willMessage","payloadBytes","Uint8Array","byteLength","userName","password","topics","requestedQos","ArrayBuffer","mbi","number","Array","numBytes","encodeMBI","byteStream","set","connectFlags","cleanSession","keepAliveInterval","Pinger","client","_client","_keepAliveInterval","isReset","pingReq","doTimeout","pinger","doPing","_trace","socket","send","timeout","setTimeout","_disconnected","clearTimeout","cancel","Timeout","timeoutSeconds","action","args","ClientImpl","uri","host","port","path","WebSocket","_wsuri","_localKey","_msg_queue","_buffered_msg_queue","_sentMessages","_receivedMessages","_notify_msg_sent","_message_identifier","_sequence","restore","connected","maxMessageIdentifier","connectOptions","hostIndex","onConnected","onConnectionLost","onMessageDelivered","onMessageArrived","traceFunction","_connectTimeout","sendPinger","receivePinger","_reconnectInterval","_reconnecting","_reconnectTimeout","disconnectedPublishing","disconnectedBufferSize","receiveBuffer","_traceBuffer","_MAX_TRACE_ENTRIES","connect","connectOptionsMasked","_traceMask","uris","_doConnect","subscribe","filter","subscribeOptions","constructor","onSuccess","grantedQos","invocationContext","onFailure","errorCode","errorMessage","timeOut","_requires_ack","_schedule_message","unsubscribe","unsubscribeOptions","callback","Object","sequence","unshift","disconnect","getTraceLog","Date","startTrace","stopTrace","wsurl","useSSL","uriParts","split","join","binaryType","onopen","_on_socket_open","onmessage","_on_socket_message","onerror","_on_socket_error","onclose","_on_socket_close","_process_queue","store","prefix","storedMessage","version","pubRecReceived","hex","messageBytes","payloadHex","JSON","stringify","parse","pop","_socket_send","messageCount","event","messages","_deframeMessages","_handleMessage","byteArray","newData","result","errorStack","stack","sentMessage","receivedMessage","sequencedMessages","msgId","msg","sort","a","b","pubRelMessage","reconnected","_connected","_receivePublish","_receiveMessage","pubCompMessage","wireMessageMasked","pubAckMessage","pubRecMessage","reconnect","_reconnect","errorText","readyState","close","mqttVersionExplicit","call","splice","record","severity","max","shift","traceObject","masked","traceObjectMasked","attr","newPayload","payload","isView","DataView","defineProperties","enumerable","get","newDestinationName","newQos","newRetained","newTopic","newDuplicate","Client","ipv6AddSBracket","clientIdLength","newOnConnected","newDisconnectedPublishing","newDisconnectedBufferSize","newOnConnectionLost","newOnMessageDelivered","newOnMessageArrived","trace","hosts","ports","stringPayload","usingURIs","ipv6","topic","publish","isConnected","self","window","normalizeArray","parts","allowAboveRoot","up","last","xs","res","resolve","resolvedPath","resolvedAbsolute","process","cwd","TypeError","p","normalize","isAbsolute","trailingSlash","substr","paths","index","relative","from","to","trim","arr","end","fromParts","toParts","Math","min","samePartsLength","outputParts","concat","sep","delimiter","dirname","hasRoot","matchedSlash","basename","ext","extname","startDot","startPart","preDotState","str","endianness","hostname","location","loadavg","uptime","freemem","Number","MAX_VALUE","totalmem","cpus","release","navigator","appVersion","networkInterfaces","getNetworkInterfaces","arch","platform","tmpdir","tmpDir","EOL","homedir"],"mappings":"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","file":"698c12b.js","sourcesContent":["/**\n * Srcset Parser\n *\n * By Alex Bell | MIT License\n *\n * JS Parser for the string value that appears in markup \n *\n * @returns Array [{url: _, d: _, w: _, h:_}, ...]\n *\n * Based super duper closely on the reference algorithm at:\n * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-srcset-attribute\n *\n * Most comments are copied in directly from the spec\n * (except for comments in parens).\n */\n\n(function (root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([], factory);\n\t} else if (typeof module === 'object' && module.exports) {\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory();\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.parseSrcset = factory();\n\t}\n}(this, function () {\n\n\t// 1. Let input be the value passed to this algorithm.\n\treturn function (input) {\n\n\t\t// UTILITY FUNCTIONS\n\n\t\t// Manual is faster than RegEx\n\t\t// http://bjorn.tipling.com/state-and-regular-expressions-in-javascript\n\t\t// http://jsperf.com/whitespace-character/5\n\t\tfunction isSpace(c) {\n\t\t\treturn (c === \"\\u0020\" || // space\n\t\t\tc === \"\\u0009\" || // horizontal tab\n\t\t\tc === \"\\u000A\" || // new line\n\t\t\tc === \"\\u000C\" || // form feed\n\t\t\tc === \"\\u000D\"); // carriage return\n\t\t}\n\n\t\tfunction collectCharacters(regEx) {\n\t\t\tvar chars,\n\t\t\t\tmatch = regEx.exec(input.substring(pos));\n\t\t\tif (match) {\n\t\t\t\tchars = match[ 0 ];\n\t\t\t\tpos += chars.length;\n\t\t\t\treturn chars;\n\t\t\t}\n\t\t}\n\n\t\tvar inputLength = input.length,\n\n\t\t\t// (Don't use \\s, to avoid matching non-breaking space)\n\t\t\tregexLeadingSpaces = /^[ \\t\\n\\r\\u000c]+/,\n\t\t\tregexLeadingCommasOrSpaces = /^[, \\t\\n\\r\\u000c]+/,\n\t\t\tregexLeadingNotSpaces = /^[^ \\t\\n\\r\\u000c]+/,\n\t\t\tregexTrailingCommas = /[,]+$/,\n\t\t\tregexNonNegativeInteger = /^\\d+$/,\n\n\t\t\t// ( Positive or negative or unsigned integers or decimals, without or without exponents.\n\t\t\t// Must include at least one digit.\n\t\t\t// According to spec tests any decimal point must be followed by a digit.\n\t\t\t// No leading plus sign is allowed.)\n\t\t\t// https://html.spec.whatwg.org/multipage/infrastructure.html#valid-floating-point-number\n\t\t\tregexFloatingPoint = /^-?(?:[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,\n\n\t\t\turl,\n\t\t\tdescriptors,\n\t\t\tcurrentDescriptor,\n\t\t\tstate,\n\t\t\tc,\n\n\t\t\t// 2. Let position be a pointer into input, initially pointing at the start\n\t\t\t// of the string.\n\t\t\tpos = 0,\n\n\t\t\t// 3. Let candidates be an initially empty source set.\n\t\t\tcandidates = [];\n\n\t\t// 4. Splitting loop: Collect a sequence of characters that are space\n\t\t// characters or U+002C COMMA characters. If any U+002C COMMA characters\n\t\t// were collected, that is a parse error.\n\t\twhile (true) {\n\t\t\tcollectCharacters(regexLeadingCommasOrSpaces);\n\n\t\t\t// 5. If position is past the end of input, return candidates and abort these steps.\n\t\t\tif (pos >= inputLength) {\n\t\t\t\treturn candidates; // (we're done, this is the sole return path)\n\t\t\t}\n\n\t\t\t// 6. Collect a sequence of characters that are not space characters,\n\t\t\t// and let that be url.\n\t\t\turl = collectCharacters(regexLeadingNotSpaces);\n\n\t\t\t// 7. Let descriptors be a new empty list.\n\t\t\tdescriptors = [];\n\n\t\t\t// 8. If url ends with a U+002C COMMA character (,), follow these substeps:\n\t\t\t//\t\t(1). Remove all trailing U+002C COMMA characters from url. If this removed\n\t\t\t// more than one character, that is a parse error.\n\t\t\tif (url.slice(-1) === \",\") {\n\t\t\t\turl = url.replace(regexTrailingCommas, \"\");\n\t\t\t\t// (Jump ahead to step 9 to skip tokenization and just push the candidate).\n\t\t\t\tparseDescriptors();\n\n\t\t\t\t//\tOtherwise, follow these substeps:\n\t\t\t} else {\n\t\t\t\ttokenize();\n\t\t\t} // (close else of step 8)\n\n\t\t\t// 16. Return to the step labeled splitting loop.\n\t\t} // (Close of big while loop.)\n\n\t\t/**\n\t\t * Tokenizes descriptor properties prior to parsing\n\t\t * Returns undefined.\n\t\t */\n\t\tfunction tokenize() {\n\n\t\t\t// 8.1. Descriptor tokeniser: Skip whitespace\n\t\t\tcollectCharacters(regexLeadingSpaces);\n\n\t\t\t// 8.2. Let current descriptor be the empty string.\n\t\t\tcurrentDescriptor = \"\";\n\n\t\t\t// 8.3. Let state be in descriptor.\n\t\t\tstate = \"in descriptor\";\n\n\t\t\twhile (true) {\n\n\t\t\t\t// 8.4. Let c be the character at position.\n\t\t\t\tc = input.charAt(pos);\n\n\t\t\t\t// Do the following depending on the value of state.\n\t\t\t\t// For the purpose of this step, \"EOF\" is a special character representing\n\t\t\t\t// that position is past the end of input.\n\n\t\t\t\t// In descriptor\n\t\t\t\tif (state === \"in descriptor\") {\n\t\t\t\t\t// Do the following, depending on the value of c:\n\n\t\t\t\t\t// Space character\n\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t// descriptors and let current descriptor be the empty string.\n\t\t\t\t\t// Set state to after descriptor.\n\t\t\t\t\tif (isSpace(c)) {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t\tcurrentDescriptor = \"\";\n\t\t\t\t\t\t\tstate = \"after descriptor\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// U+002C COMMA (,)\n\t\t\t\t\t\t// Advance position to the next character in input. If current descriptor\n\t\t\t\t\t\t// is not empty, append current descriptor to descriptors. Jump to the step\n\t\t\t\t\t\t// labeled descriptor parser.\n\t\t\t\t\t} else if (c === \",\") {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// U+0028 LEFT PARENTHESIS (()\n\t\t\t\t\t\t// Append c to current descriptor. Set state to in parens.\n\t\t\t\t\t} else if (c === \"\\u0028\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in parens\";\n\n\t\t\t\t\t\t// EOF\n\t\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t\t// descriptors. Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\t\t\t\t\t// (end \"in descriptor\"\n\n\t\t\t\t\t// In parens\n\t\t\t\t} else if (state === \"in parens\") {\n\n\t\t\t\t\t// U+0029 RIGHT PARENTHESIS ())\n\t\t\t\t\t// Append c to current descriptor. Set state to in descriptor.\n\t\t\t\t\tif (c === \")\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in descriptor\";\n\n\t\t\t\t\t\t// EOF\n\t\t\t\t\t\t// Append current descriptor to descriptors. Jump to the step labeled\n\t\t\t\t\t\t// descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\n\t\t\t\t\t// After descriptor\n\t\t\t\t} else if (state === \"after descriptor\") {\n\n\t\t\t\t\t// Do the following, depending on the value of c:\n\t\t\t\t\t// Space character: Stay in this state.\n\t\t\t\t\tif (isSpace(c)) {\n\n\t\t\t\t\t\t// EOF: Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Set state to in descriptor. Set position to the previous character in input.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = \"in descriptor\";\n\t\t\t\t\t\tpos -= 1;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Advance position to the next character in input.\n\t\t\t\tpos += 1;\n\n\t\t\t\t// Repeat this step.\n\t\t\t} // (close while true loop)\n\t\t}\n\n\t\t/**\n\t\t * Adds descriptor properties to a candidate, pushes to the candidates array\n\t\t * @return undefined\n\t\t */\n\t\t// Declared outside of the while loop so that it's only created once.\n\t\tfunction parseDescriptors() {\n\n\t\t\t// 9. Descriptor parser: Let error be no.\n\t\t\tvar pError = false,\n\n\t\t\t\t// 10. Let width be absent.\n\t\t\t\t// 11. Let density be absent.\n\t\t\t\t// 12. Let future-compat-h be absent. (We're implementing it now as h)\n\t\t\t\tw, d, h, i,\n\t\t\t\tcandidate = {},\n\t\t\t\tdesc, lastChar, value, intVal, floatVal;\n\n\t\t\t// 13. For each descriptor in descriptors, run the appropriate set of steps\n\t\t\t// from the following list:\n\t\t\tfor (i = 0 ; i < descriptors.length; i++) {\n\t\t\t\tdesc = descriptors[ i ];\n\n\t\t\t\tlastChar = desc[ desc.length - 1 ];\n\t\t\t\tvalue = desc.substring(0, desc.length - 1);\n\t\t\t\tintVal = parseInt(value, 10);\n\t\t\t\tfloatVal = parseFloat(value);\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0077 LATIN SMALL LETTER W character\n\t\t\t\tif (regexNonNegativeInteger.test(value) && (lastChar === \"w\")) {\n\n\t\t\t\t\t// If width and density are not both absent, then let error be yes.\n\t\t\t\t\tif (w || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes.\n\t\t\t\t\t// Otherwise, let width be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {w = intVal;}\n\n\t\t\t\t\t// If the descriptor consists of a valid floating-point number followed by\n\t\t\t\t\t// a U+0078 LATIN SMALL LETTER X character\n\t\t\t\t} else if (regexFloatingPoint.test(value) && (lastChar === \"x\")) {\n\n\t\t\t\t\t// If width, density and future-compat-h are not all absent, then let error\n\t\t\t\t\t// be yes.\n\t\t\t\t\tif (w || d || h) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing floating-point number values to the descriptor.\n\t\t\t\t\t// If the result is less than zero, let error be yes. Otherwise, let density\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (floatVal < 0) {pError = true;} else {d = floatVal;}\n\n\t\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t\t// a U+0068 LATIN SMALL LETTER H character\n\t\t\t\t} else if (regexNonNegativeInteger.test(value) && (lastChar === \"h\")) {\n\n\t\t\t\t\t// If height and density are not both absent, then let error be yes.\n\t\t\t\t\tif (h || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes. Otherwise, let future-compat-h\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {h = intVal;}\n\n\t\t\t\t\t// Anything else, Let error be yes.\n\t\t\t\t} else {pError = true;}\n\t\t\t} // (close step 13 for loop)\n\n\t\t\t// 15. If error is still no, then append a new image source to candidates whose\n\t\t\t// URL is url, associated with a width width if not absent and a pixel\n\t\t\t// density density if not absent. Otherwise, there is a parse error.\n\t\t\tif (!pError) {\n\t\t\t\tcandidate.url = url;\n\t\t\t\tif (w) { candidate.w = w;}\n\t\t\t\tif (d) { candidate.d = d;}\n\t\t\t\tif (h) { candidate.h = h;}\n\t\t\t\tcandidates.push(candidate);\n\t\t\t} else if (console && console.log) {\n\t\t\t\tconsole.log(\"Invalid srcset descriptor found in '\" +\n\t\t\t\t\tinput + \"' at '\" + desc + \"'.\");\n\t\t\t}\n\t\t} // (close parseDescriptors fn)\n\n\t}\n}));\n","var x=String;\nvar create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x,blackBright:x,redBright:x,greenBright:x,yellowBright:x,blueBright:x,magentaBright:x,cyanBright:x,whiteBright:x,bgBlackBright:x,bgRedBright:x,bgGreenBright:x,bgYellowBright:x,bgBlueBright:x,bgMagentaBright:x,bgCyanBright:x,bgWhiteBright:x}};\nmodule.exports=create();\nmodule.exports.createColors = create;\n","/*******************************************************************************\n * Copyright (c) 2013 IBM Corp.\n *\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * and Eclipse Distribution License v1.0 which accompany this distribution.\n *\n * The Eclipse Public License is available at\n * http://www.eclipse.org/legal/epl-v10.html\n * and the Eclipse Distribution License is available at\n * http://www.eclipse.org/org/documents/edl-v10.php.\n *\n * Contributors:\n * Andrew Banks - initial API and implementation and initial documentation\n *******************************************************************************/\n\n\n// Only expose a single object name in the global namespace.\n// Everything must go through this module. Global Paho module\n// only has a single public function, client, which returns\n// a Paho client object given connection details.\n\n/**\n * Send and receive messages using web browsers.\n *

\n * This programming interface lets a JavaScript client application use the MQTT V3.1 or\n * V3.1.1 protocol to connect to an MQTT-supporting messaging server.\n *\n * The function supported includes:\n *

    \n *
  1. Connecting to and disconnecting from a server. The server is identified by its host name and port number.\n *
  2. Specifying options that relate to the communications link with the server,\n * for example the frequency of keep-alive heartbeats, and whether SSL/TLS is required.\n *
  3. Subscribing to and receiving messages from MQTT Topics.\n *
  4. Publishing messages to MQTT Topics.\n *
\n *

\n * The API consists of two main objects:\n *

\n *
{@link Paho.Client}
\n *
This contains methods that provide the functionality of the API,\n * including provision of callbacks that notify the application when a message\n * arrives from or is delivered to the messaging server,\n * or when the status of its connection to the messaging server changes.
\n *
{@link Paho.Message}
\n *
This encapsulates the payload of the message along with various attributes\n * associated with its delivery, in particular the destination to which it has\n * been (or is about to be) sent.
\n *
\n *

\n * The programming interface validates parameters passed to it, and will throw\n * an Error containing an error message intended for developer use, if it detects\n * an error with any parameter.\n *

\n * Example:\n *\n *

\nvar client = new Paho.MQTT.Client(location.hostname, Number(location.port), \"clientId\");\nclient.onConnectionLost = onConnectionLost;\nclient.onMessageArrived = onMessageArrived;\nclient.connect({onSuccess:onConnect});\n\nfunction onConnect() {\n  // Once a connection has been made, make a subscription and send a message.\n  console.log(\"onConnect\");\n  client.subscribe(\"/World\");\n  var message = new Paho.MQTT.Message(\"Hello\");\n  message.destinationName = \"/World\";\n  client.send(message);\n};\nfunction onConnectionLost(responseObject) {\n  if (responseObject.errorCode !== 0)\n\tconsole.log(\"onConnectionLost:\"+responseObject.errorMessage);\n};\nfunction onMessageArrived(message) {\n  console.log(\"onMessageArrived:\"+message.payloadString);\n  client.disconnect();\n};\n * 
\n * @namespace Paho\n */\n\n/* jshint shadow:true */\n(function ExportLibrary(root, factory) {\n\tif(typeof exports === \"object\" && typeof module === \"object\"){\n\t\tmodule.exports = factory();\n\t} else if (typeof define === \"function\" && define.amd){\n\t\tdefine(factory);\n\t} else if (typeof exports === \"object\"){\n\t\texports = factory();\n\t} else {\n\t\t//if (typeof root.Paho === \"undefined\"){\n\t\t//\troot.Paho = {};\n\t\t//}\n\t\troot.Paho = factory();\n\t}\n})(this, function LibraryFactory(){\n\n\n\tvar PahoMQTT = (function (global) {\n\n\t// Private variables below, these are only visible inside the function closure\n\t// which is used to define the module.\n\tvar version = \"@VERSION@-@BUILDLEVEL@\";\n\n\t/**\n\t * @private\n\t */\n\tvar localStorage = global.localStorage || (function () {\n\t\tvar data = {};\n\n\t\treturn {\n\t\t\tsetItem: function (key, item) { data[key] = item; },\n\t\t\tgetItem: function (key) { return data[key]; },\n\t\t\tremoveItem: function (key) { delete data[key]; },\n\t\t};\n\t})();\n\n\t\t/**\n\t * Unique message type identifiers, with associated\n\t * associated integer values.\n\t * @private\n\t */\n\t\tvar MESSAGE_TYPE = {\n\t\t\tCONNECT: 1,\n\t\t\tCONNACK: 2,\n\t\t\tPUBLISH: 3,\n\t\t\tPUBACK: 4,\n\t\t\tPUBREC: 5,\n\t\t\tPUBREL: 6,\n\t\t\tPUBCOMP: 7,\n\t\t\tSUBSCRIBE: 8,\n\t\t\tSUBACK: 9,\n\t\t\tUNSUBSCRIBE: 10,\n\t\t\tUNSUBACK: 11,\n\t\t\tPINGREQ: 12,\n\t\t\tPINGRESP: 13,\n\t\t\tDISCONNECT: 14\n\t\t};\n\n\t\t// Collection of utility methods used to simplify module code\n\t\t// and promote the DRY pattern.\n\n\t\t/**\n\t * Validate an object's parameter names to ensure they\n\t * match a list of expected variables name for this option\n\t * type. Used to ensure option object passed into the API don't\n\t * contain erroneous parameters.\n\t * @param {Object} obj - User options object\n\t * @param {Object} keys - valid keys and types that may exist in obj.\n\t * @throws {Error} Invalid option parameter found.\n\t * @private\n\t */\n\t\tvar validate = function(obj, keys) {\n\t\t\tfor (var key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tif (keys.hasOwnProperty(key)) {\n\t\t\t\t\t\tif (typeof obj[key] !== keys[key])\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof obj[key], key]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar errorStr = \"Unknown property, \" + key + \". Valid properties are:\";\n\t\t\t\t\t\tfor (var validKey in keys)\n\t\t\t\t\t\t\tif (keys.hasOwnProperty(validKey))\n\t\t\t\t\t\t\t\terrorStr = errorStr+\" \"+validKey;\n\t\t\t\t\t\tthrow new Error(errorStr);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t * Return a new function which runs the user function bound\n\t * to a fixed scope.\n\t * @param {function} User function\n\t * @param {object} Function scope\n\t * @return {function} User function bound to another scope\n\t * @private\n\t */\n\t\tvar scope = function (f, scope) {\n\t\t\treturn function () {\n\t\t\t\treturn f.apply(scope, arguments);\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t * Unique message type identifiers, with associated\n\t * associated integer values.\n\t * @private\n\t */\n\t\tvar ERROR = {\n\t\t\tOK: {code:0, text:\"AMQJSC0000I OK.\"},\n\t\t\tCONNECT_TIMEOUT: {code:1, text:\"AMQJSC0001E Connect timed out.\"},\n\t\t\tSUBSCRIBE_TIMEOUT: {code:2, text:\"AMQJS0002E Subscribe timed out.\"},\n\t\t\tUNSUBSCRIBE_TIMEOUT: {code:3, text:\"AMQJS0003E Unsubscribe timed out.\"},\n\t\t\tPING_TIMEOUT: {code:4, text:\"AMQJS0004E Ping timed out.\"},\n\t\t\tINTERNAL_ERROR: {code:5, text:\"AMQJS0005E Internal error. Error Message: {0}, Stack trace: {1}\"},\n\t\t\tCONNACK_RETURNCODE: {code:6, text:\"AMQJS0006E Bad Connack return code:{0} {1}.\"},\n\t\t\tSOCKET_ERROR: {code:7, text:\"AMQJS0007E Socket error:{0}.\"},\n\t\t\tSOCKET_CLOSE: {code:8, text:\"AMQJS0008I Socket closed.\"},\n\t\t\tMALFORMED_UTF: {code:9, text:\"AMQJS0009E Malformed UTF data:{0} {1} {2}.\"},\n\t\t\tUNSUPPORTED: {code:10, text:\"AMQJS0010E {0} is not supported by this browser.\"},\n\t\t\tINVALID_STATE: {code:11, text:\"AMQJS0011E Invalid state {0}.\"},\n\t\t\tINVALID_TYPE: {code:12, text:\"AMQJS0012E Invalid type {0} for {1}.\"},\n\t\t\tINVALID_ARGUMENT: {code:13, text:\"AMQJS0013E Invalid argument {0} for {1}.\"},\n\t\t\tUNSUPPORTED_OPERATION: {code:14, text:\"AMQJS0014E Unsupported operation.\"},\n\t\t\tINVALID_STORED_DATA: {code:15, text:\"AMQJS0015E Invalid data in local storage key={0} value={1}.\"},\n\t\t\tINVALID_MQTT_MESSAGE_TYPE: {code:16, text:\"AMQJS0016E Invalid MQTT message type {0}.\"},\n\t\t\tMALFORMED_UNICODE: {code:17, text:\"AMQJS0017E Malformed Unicode string:{0} {1}.\"},\n\t\t\tBUFFER_FULL: {code:18, text:\"AMQJS0018E Message buffer is full, maximum buffer size: {0}.\"},\n\t\t};\n\n\t\t/** CONNACK RC Meaning. */\n\t\tvar CONNACK_RC = {\n\t\t\t0:\"Connection Accepted\",\n\t\t\t1:\"Connection Refused: unacceptable protocol version\",\n\t\t\t2:\"Connection Refused: identifier rejected\",\n\t\t\t3:\"Connection Refused: server unavailable\",\n\t\t\t4:\"Connection Refused: bad user name or password\",\n\t\t\t5:\"Connection Refused: not authorized\"\n\t\t};\n\n\t/**\n\t * Format an error message text.\n\t * @private\n\t * @param {error} ERROR value above.\n\t * @param {substitutions} [array] substituted into the text.\n\t * @return the text with the substitutions made.\n\t */\n\t\tvar format = function(error, substitutions) {\n\t\t\tvar text = error.text;\n\t\t\tif (substitutions) {\n\t\t\t\tvar field,start;\n\t\t\t\tfor (var i=0; i 0) {\n\t\t\t\t\t\tvar part1 = text.substring(0,start);\n\t\t\t\t\t\tvar part2 = text.substring(start+field.length);\n\t\t\t\t\t\ttext = part1+substitutions[i]+part2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn text;\n\t\t};\n\n\t\t//MQTT protocol and version 6 M Q I s d p 3\n\t\tvar MqttProtoIdentifierv3 = [0x00,0x06,0x4d,0x51,0x49,0x73,0x64,0x70,0x03];\n\t\t//MQTT proto/version for 311 4 M Q T T 4\n\t\tvar MqttProtoIdentifierv4 = [0x00,0x04,0x4d,0x51,0x54,0x54,0x04];\n\n\t\t/**\n\t * Construct an MQTT wire protocol message.\n\t * @param type MQTT packet type.\n\t * @param options optional wire message attributes.\n\t *\n\t * Optional properties\n\t *\n\t * messageIdentifier: message ID in the range [0..65535]\n\t * payloadMessage:\tApplication Message - PUBLISH only\n\t * connectStrings:\tarray of 0 or more Strings to be put into the CONNECT payload\n\t * topics:\t\t\tarray of strings (SUBSCRIBE, UNSUBSCRIBE)\n\t * requestQoS:\t\tarray of QoS values [0..2]\n\t *\n\t * \"Flag\" properties\n\t * cleanSession:\ttrue if present / false if absent (CONNECT)\n\t * willMessage: \ttrue if present / false if absent (CONNECT)\n\t * isRetained:\t\ttrue if present / false if absent (CONNECT)\n\t * userName:\t\ttrue if present / false if absent (CONNECT)\n\t * password:\t\ttrue if present / false if absent (CONNECT)\n\t * keepAliveInterval:\tinteger [0..65535] (CONNECT)\n\t *\n\t * @private\n\t * @ignore\n\t */\n\t\tvar WireMessage = function (type, options) {\n\t\t\tthis.type = type;\n\t\t\tfor (var name in options) {\n\t\t\t\tif (options.hasOwnProperty(name)) {\n\t\t\t\t\tthis[name] = options[name];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tWireMessage.prototype.encode = function() {\n\t\t// Compute the first byte of the fixed header\n\t\t\tvar first = ((this.type & 0x0f) << 4);\n\n\t\t\t/*\n\t\t * Now calculate the length of the variable header + payload by adding up the lengths\n\t\t * of all the component parts\n\t\t */\n\n\t\t\tvar remLength = 0;\n\t\t\tvar topicStrLength = [];\n\t\t\tvar destinationNameLength = 0;\n\t\t\tvar willMessagePayloadBytes;\n\n\t\t\t// if the message contains a messageIdentifier then we need two bytes for that\n\t\t\tif (this.messageIdentifier !== undefined)\n\t\t\t\tremLength += 2;\n\n\t\t\tswitch(this.type) {\n\t\t\t// If this a Connect then we need to include 12 bytes for its header\n\t\t\tcase MESSAGE_TYPE.CONNECT:\n\t\t\t\tswitch(this.mqttVersion) {\n\t\t\t\tcase 3:\n\t\t\t\t\tremLength += MqttProtoIdentifierv3.length + 3;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tremLength += MqttProtoIdentifierv4.length + 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tremLength += UTF8Length(this.clientId) + 2;\n\t\t\t\tif (this.willMessage !== undefined) {\n\t\t\t\t\tremLength += UTF8Length(this.willMessage.destinationName) + 2;\n\t\t\t\t\t// Will message is always a string, sent as UTF-8 characters with a preceding length.\n\t\t\t\t\twillMessagePayloadBytes = this.willMessage.payloadBytes;\n\t\t\t\t\tif (!(willMessagePayloadBytes instanceof Uint8Array))\n\t\t\t\t\t\twillMessagePayloadBytes = new Uint8Array(payloadBytes);\n\t\t\t\t\tremLength += willMessagePayloadBytes.byteLength +2;\n\t\t\t\t}\n\t\t\t\tif (this.userName !== undefined)\n\t\t\t\t\tremLength += UTF8Length(this.userName) + 2;\n\t\t\t\tif (this.password !== undefined)\n\t\t\t\t\tremLength += UTF8Length(this.password) + 2;\n\t\t\t\tbreak;\n\n\t\t\t// Subscribe, Unsubscribe can both contain topic strings\n\t\t\tcase MESSAGE_TYPE.SUBSCRIBE:\n\t\t\t\tfirst |= 0x02; // Qos = 1;\n\t\t\t\tfor ( var i = 0; i < this.topics.length; i++) {\n\t\t\t\t\ttopicStrLength[i] = UTF8Length(this.topics[i]);\n\t\t\t\t\tremLength += topicStrLength[i] + 2;\n\t\t\t\t}\n\t\t\t\tremLength += this.requestedQos.length; // 1 byte for each topic's Qos\n\t\t\t\t// QoS on Subscribe only\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.UNSUBSCRIBE:\n\t\t\t\tfirst |= 0x02; // Qos = 1;\n\t\t\t\tfor ( var i = 0; i < this.topics.length; i++) {\n\t\t\t\t\ttopicStrLength[i] = UTF8Length(this.topics[i]);\n\t\t\t\t\tremLength += topicStrLength[i] + 2;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBREL:\n\t\t\t\tfirst |= 0x02; // Qos = 1;\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\tif (this.payloadMessage.duplicate) first |= 0x08;\n\t\t\t\tfirst = first |= (this.payloadMessage.qos << 1);\n\t\t\t\tif (this.payloadMessage.retained) first |= 0x01;\n\t\t\t\tdestinationNameLength = UTF8Length(this.payloadMessage.destinationName);\n\t\t\t\tremLength += destinationNameLength + 2;\n\t\t\t\tvar payloadBytes = this.payloadMessage.payloadBytes;\n\t\t\t\tremLength += payloadBytes.byteLength;\n\t\t\t\tif (payloadBytes instanceof ArrayBuffer)\n\t\t\t\t\tpayloadBytes = new Uint8Array(payloadBytes);\n\t\t\t\telse if (!(payloadBytes instanceof Uint8Array))\n\t\t\t\t\tpayloadBytes = new Uint8Array(payloadBytes.buffer);\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.DISCONNECT:\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Now we can allocate a buffer for the message\n\n\t\t\tvar mbi = encodeMBI(remLength); // Convert the length to MQTT MBI format\n\t\t\tvar pos = mbi.length + 1; // Offset of start of variable header\n\t\t\tvar buffer = new ArrayBuffer(remLength + pos);\n\t\t\tvar byteStream = new Uint8Array(buffer); // view it as a sequence of bytes\n\n\t\t\t//Write the fixed header into the buffer\n\t\t\tbyteStream[0] = first;\n\t\t\tbyteStream.set(mbi,1);\n\n\t\t\t// If this is a PUBLISH then the variable header starts with a topic\n\t\t\tif (this.type == MESSAGE_TYPE.PUBLISH)\n\t\t\t\tpos = writeString(this.payloadMessage.destinationName, destinationNameLength, byteStream, pos);\n\t\t\t// If this is a CONNECT then the variable header contains the protocol name/version, flags and keepalive time\n\n\t\t\telse if (this.type == MESSAGE_TYPE.CONNECT) {\n\t\t\t\tswitch (this.mqttVersion) {\n\t\t\t\tcase 3:\n\t\t\t\t\tbyteStream.set(MqttProtoIdentifierv3, pos);\n\t\t\t\t\tpos += MqttProtoIdentifierv3.length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tbyteStream.set(MqttProtoIdentifierv4, pos);\n\t\t\t\t\tpos += MqttProtoIdentifierv4.length;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar connectFlags = 0;\n\t\t\t\tif (this.cleanSession)\n\t\t\t\t\tconnectFlags = 0x02;\n\t\t\t\tif (this.willMessage !== undefined ) {\n\t\t\t\t\tconnectFlags |= 0x04;\n\t\t\t\t\tconnectFlags |= (this.willMessage.qos<<3);\n\t\t\t\t\tif (this.willMessage.retained) {\n\t\t\t\t\t\tconnectFlags |= 0x20;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.userName !== undefined)\n\t\t\t\t\tconnectFlags |= 0x80;\n\t\t\t\tif (this.password !== undefined)\n\t\t\t\t\tconnectFlags |= 0x40;\n\t\t\t\tbyteStream[pos++] = connectFlags;\n\t\t\t\tpos = writeUint16 (this.keepAliveInterval, byteStream, pos);\n\t\t\t}\n\n\t\t\t// Output the messageIdentifier - if there is one\n\t\t\tif (this.messageIdentifier !== undefined)\n\t\t\t\tpos = writeUint16 (this.messageIdentifier, byteStream, pos);\n\n\t\t\tswitch(this.type) {\n\t\t\tcase MESSAGE_TYPE.CONNECT:\n\t\t\t\tpos = writeString(this.clientId, UTF8Length(this.clientId), byteStream, pos);\n\t\t\t\tif (this.willMessage !== undefined) {\n\t\t\t\t\tpos = writeString(this.willMessage.destinationName, UTF8Length(this.willMessage.destinationName), byteStream, pos);\n\t\t\t\t\tpos = writeUint16(willMessagePayloadBytes.byteLength, byteStream, pos);\n\t\t\t\t\tbyteStream.set(willMessagePayloadBytes, pos);\n\t\t\t\t\tpos += willMessagePayloadBytes.byteLength;\n\n\t\t\t\t}\n\t\t\t\tif (this.userName !== undefined)\n\t\t\t\t\tpos = writeString(this.userName, UTF8Length(this.userName), byteStream, pos);\n\t\t\t\tif (this.password !== undefined)\n\t\t\t\t\tpos = writeString(this.password, UTF8Length(this.password), byteStream, pos);\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\t// PUBLISH has a text or binary payload, if text do not add a 2 byte length field, just the UTF characters.\n\t\t\t\tbyteStream.set(payloadBytes, pos);\n\n\t\t\t\tbreak;\n\n\t\t\t\t// \t case MESSAGE_TYPE.PUBREC:\n\t\t\t\t// \t case MESSAGE_TYPE.PUBREL:\n\t\t\t\t// \t case MESSAGE_TYPE.PUBCOMP:\n\t\t\t\t// \t \tbreak;\n\n\t\t\tcase MESSAGE_TYPE.SUBSCRIBE:\n\t\t\t\t// SUBSCRIBE has a list of topic strings and request QoS\n\t\t\t\tfor (var i=0; i> 4;\n\t\t\tvar messageInfo = first &= 0x0f;\n\t\t\tpos += 1;\n\n\n\t\t\t// Decode the remaining length (MBI format)\n\n\t\t\tvar digit;\n\t\t\tvar remLength = 0;\n\t\t\tvar multiplier = 1;\n\t\t\tdo {\n\t\t\t\tif (pos == input.length) {\n\t\t\t\t\treturn [null,startingPos];\n\t\t\t\t}\n\t\t\t\tdigit = input[pos++];\n\t\t\t\tremLength += ((digit & 0x7F) * multiplier);\n\t\t\t\tmultiplier *= 128;\n\t\t\t} while ((digit & 0x80) !== 0);\n\n\t\t\tvar endPos = pos+remLength;\n\t\t\tif (endPos > input.length) {\n\t\t\t\treturn [null,startingPos];\n\t\t\t}\n\n\t\t\tvar wireMessage = new WireMessage(type);\n\t\t\tswitch(type) {\n\t\t\tcase MESSAGE_TYPE.CONNACK:\n\t\t\t\tvar connectAcknowledgeFlags = input[pos++];\n\t\t\t\tif (connectAcknowledgeFlags & 0x01)\n\t\t\t\t\twireMessage.sessionPresent = true;\n\t\t\t\twireMessage.returnCode = input[pos++];\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\tvar qos = (messageInfo >> 1) & 0x03;\n\n\t\t\t\tvar len = readUint16(input, pos);\n\t\t\t\tpos += 2;\n\t\t\t\tvar topicName = parseUTF8(input, pos, len);\n\t\t\t\tpos += len;\n\t\t\t\t// If QoS 1 or 2 there will be a messageIdentifier\n\t\t\t\tif (qos > 0) {\n\t\t\t\t\twireMessage.messageIdentifier = readUint16(input, pos);\n\t\t\t\t\tpos += 2;\n\t\t\t\t}\n\n\t\t\t\tvar message = new Message(input.subarray(pos, endPos));\n\t\t\t\tif ((messageInfo & 0x01) == 0x01)\n\t\t\t\t\tmessage.retained = true;\n\t\t\t\tif ((messageInfo & 0x08) == 0x08)\n\t\t\t\t\tmessage.duplicate = true;\n\t\t\t\tmessage.qos = qos;\n\t\t\t\tmessage.destinationName = topicName;\n\t\t\t\twireMessage.payloadMessage = message;\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBACK:\n\t\t\tcase MESSAGE_TYPE.PUBREC:\n\t\t\tcase MESSAGE_TYPE.PUBREL:\n\t\t\tcase MESSAGE_TYPE.PUBCOMP:\n\t\t\tcase MESSAGE_TYPE.UNSUBACK:\n\t\t\t\twireMessage.messageIdentifier = readUint16(input, pos);\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.SUBACK:\n\t\t\t\twireMessage.messageIdentifier = readUint16(input, pos);\n\t\t\t\tpos += 2;\n\t\t\t\twireMessage.returnCode = input.subarray(pos, endPos);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn [wireMessage,endPos];\n\t\t}\n\n\t\tfunction writeUint16(input, buffer, offset) {\n\t\t\tbuffer[offset++] = input >> 8; //MSB\n\t\t\tbuffer[offset++] = input % 256; //LSB\n\t\t\treturn offset;\n\t\t}\n\n\t\tfunction writeString(input, utf8Length, buffer, offset) {\n\t\t\toffset = writeUint16(utf8Length, buffer, offset);\n\t\t\tstringToUTF8(input, buffer, offset);\n\t\t\treturn offset + utf8Length;\n\t\t}\n\n\t\tfunction readUint16(buffer, offset) {\n\t\t\treturn 256*buffer[offset] + buffer[offset+1];\n\t\t}\n\n\t\t/**\n\t * Encodes an MQTT Multi-Byte Integer\n\t * @private\n\t */\n\t\tfunction encodeMBI(number) {\n\t\t\tvar output = new Array(1);\n\t\t\tvar numBytes = 0;\n\n\t\t\tdo {\n\t\t\t\tvar digit = number % 128;\n\t\t\t\tnumber = number >> 7;\n\t\t\t\tif (number > 0) {\n\t\t\t\t\tdigit |= 0x80;\n\t\t\t\t}\n\t\t\t\toutput[numBytes++] = digit;\n\t\t\t} while ( (number > 0) && (numBytes<4) );\n\n\t\t\treturn output;\n\t\t}\n\n\t\t/**\n\t * Takes a String and calculates its length in bytes when encoded in UTF8.\n\t * @private\n\t */\n\t\tfunction UTF8Length(input) {\n\t\t\tvar output = 0;\n\t\t\tfor (var i = 0; i 0x7FF)\n\t\t\t\t{\n\t\t\t\t\t// Surrogate pair means its a 4 byte character\n\t\t\t\t\tif (0xD800 <= charCode && charCode <= 0xDBFF)\n\t\t\t\t\t{\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\toutput++;\n\t\t\t\t\t}\n\t\t\t\t\toutput +=3;\n\t\t\t\t}\n\t\t\t\telse if (charCode > 0x7F)\n\t\t\t\t\toutput +=2;\n\t\t\t\telse\n\t\t\t\t\toutput++;\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\n\t\t/**\n\t * Takes a String and writes it into an array as UTF8 encoded bytes.\n\t * @private\n\t */\n\t\tfunction stringToUTF8(input, output, start) {\n\t\t\tvar pos = start;\n\t\t\tfor (var i = 0; i>6 & 0x1F | 0xC0;\n\t\t\t\t\toutput[pos++] = charCode & 0x3F | 0x80;\n\t\t\t\t} else if (charCode <= 0xFFFF) {\n\t\t\t\t\toutput[pos++] = charCode>>12 & 0x0F | 0xE0;\n\t\t\t\t\toutput[pos++] = charCode>>6 & 0x3F | 0x80;\n\t\t\t\t\toutput[pos++] = charCode & 0x3F | 0x80;\n\t\t\t\t} else {\n\t\t\t\t\toutput[pos++] = charCode>>18 & 0x07 | 0xF0;\n\t\t\t\t\toutput[pos++] = charCode>>12 & 0x3F | 0x80;\n\t\t\t\t\toutput[pos++] = charCode>>6 & 0x3F | 0x80;\n\t\t\t\t\toutput[pos++] = charCode & 0x3F | 0x80;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\n\t\tfunction parseUTF8(input, offset, length) {\n\t\t\tvar output = \"\";\n\t\t\tvar utf16;\n\t\t\tvar pos = offset;\n\n\t\t\twhile (pos < offset+length)\n\t\t\t{\n\t\t\t\tvar byte1 = input[pos++];\n\t\t\t\tif (byte1 < 128)\n\t\t\t\t\tutf16 = byte1;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tvar byte2 = input[pos++]-128;\n\t\t\t\t\tif (byte2 < 0)\n\t\t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16),\"\"]));\n\t\t\t\t\tif (byte1 < 0xE0) // 2 byte character\n\t\t\t\t\t\tutf16 = 64*(byte1-0xC0) + byte2;\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar byte3 = input[pos++]-128;\n\t\t\t\t\t\tif (byte3 < 0)\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16)]));\n\t\t\t\t\t\tif (byte1 < 0xF0) // 3 byte character\n\t\t\t\t\t\t\tutf16 = 4096*(byte1-0xE0) + 64*byte2 + byte3;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar byte4 = input[pos++]-128;\n\t\t\t\t\t\t\tif (byte4 < 0)\n\t\t\t\t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16), byte4.toString(16)]));\n\t\t\t\t\t\t\tif (byte1 < 0xF8) // 4 byte character\n\t\t\t\t\t\t\t\tutf16 = 262144*(byte1-0xF0) + 4096*byte2 + 64*byte3 + byte4;\n\t\t\t\t\t\t\telse // longer encodings are not supported\n\t\t\t\t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16), byte4.toString(16)]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (utf16 > 0xFFFF) // 4 byte character - express as a surrogate pair\n\t\t\t\t{\n\t\t\t\t\tutf16 -= 0x10000;\n\t\t\t\t\toutput += String.fromCharCode(0xD800 + (utf16 >> 10)); // lead character\n\t\t\t\t\tutf16 = 0xDC00 + (utf16 & 0x3FF); // trail character\n\t\t\t\t}\n\t\t\t\toutput += String.fromCharCode(utf16);\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\n\t\t/**\n\t * Repeat keepalive requests, monitor responses.\n\t * @ignore\n\t */\n\t\tvar Pinger = function(client, keepAliveInterval) {\n\t\t\tthis._client = client;\n\t\t\tthis._keepAliveInterval = keepAliveInterval*1000;\n\t\t\tthis.isReset = false;\n\n\t\t\tvar pingReq = new WireMessage(MESSAGE_TYPE.PINGREQ).encode();\n\n\t\t\tvar doTimeout = function (pinger) {\n\t\t\t\treturn function () {\n\t\t\t\t\treturn doPing.apply(pinger);\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t/** @ignore */\n\t\t\tvar doPing = function() {\n\t\t\t\tif (!this.isReset) {\n\t\t\t\t\tthis._client._trace(\"Pinger.doPing\", \"Timed out\");\n\t\t\t\t\tthis._client._disconnected( ERROR.PING_TIMEOUT.code , format(ERROR.PING_TIMEOUT));\n\t\t\t\t} else {\n\t\t\t\t\tthis.isReset = false;\n\t\t\t\t\tthis._client._trace(\"Pinger.doPing\", \"send PINGREQ\");\n\t\t\t\t\tthis._client.socket.send(pingReq);\n\t\t\t\t\tthis.timeout = setTimeout(doTimeout(this), this._keepAliveInterval);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.reset = function() {\n\t\t\t\tthis.isReset = true;\n\t\t\t\tclearTimeout(this.timeout);\n\t\t\t\tif (this._keepAliveInterval > 0)\n\t\t\t\t\tthis.timeout = setTimeout(doTimeout(this), this._keepAliveInterval);\n\t\t\t};\n\n\t\t\tthis.cancel = function() {\n\t\t\t\tclearTimeout(this.timeout);\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t * Monitor request completion.\n\t * @ignore\n\t */\n\t\tvar Timeout = function(client, timeoutSeconds, action, args) {\n\t\t\tif (!timeoutSeconds)\n\t\t\t\ttimeoutSeconds = 30;\n\n\t\t\tvar doTimeout = function (action, client, args) {\n\t\t\t\treturn function () {\n\t\t\t\t\treturn action.apply(client, args);\n\t\t\t\t};\n\t\t\t};\n\t\t\tthis.timeout = setTimeout(doTimeout(action, client, args), timeoutSeconds * 1000);\n\n\t\t\tthis.cancel = function() {\n\t\t\t\tclearTimeout(this.timeout);\n\t\t\t};\n\t\t};\n\n\t/**\n\t * Internal implementation of the Websockets MQTT V3.1 client.\n\t *\n\t * @name Paho.ClientImpl @constructor\n\t * @param {String} host the DNS nameof the webSocket host.\n\t * @param {Number} port the port number for that host.\n\t * @param {String} clientId the MQ client identifier.\n\t */\n\t\tvar ClientImpl = function (uri, host, port, path, clientId) {\n\t\t// Check dependencies are satisfied in this browser.\n\t\t\tif (!(\"WebSocket\" in global && global.WebSocket !== null)) {\n\t\t\t\tthrow new Error(format(ERROR.UNSUPPORTED, [\"WebSocket\"]));\n\t\t\t}\n\t\t\tif (!(\"ArrayBuffer\" in global && global.ArrayBuffer !== null)) {\n\t\t\t\tthrow new Error(format(ERROR.UNSUPPORTED, [\"ArrayBuffer\"]));\n\t\t\t}\n\t\t\tthis._trace(\"Paho.Client\", uri, host, port, path, clientId);\n\n\t\t\tthis.host = host;\n\t\t\tthis.port = port;\n\t\t\tthis.path = path;\n\t\t\tthis.uri = uri;\n\t\t\tthis.clientId = clientId;\n\t\t\tthis._wsuri = null;\n\n\t\t\t// Local storagekeys are qualified with the following string.\n\t\t\t// The conditional inclusion of path in the key is for backward\n\t\t\t// compatibility to when the path was not configurable and assumed to\n\t\t\t// be /mqtt\n\t\t\tthis._localKey=host+\":\"+port+(path!=\"/mqtt\"?\":\"+path:\"\")+\":\"+clientId+\":\";\n\n\t\t\t// Create private instance-only message queue\n\t\t\t// Internal queue of messages to be sent, in sending order.\n\t\t\tthis._msg_queue = [];\n\t\t\tthis._buffered_msg_queue = [];\n\n\t\t\t// Messages we have sent and are expecting a response for, indexed by their respective message ids.\n\t\t\tthis._sentMessages = {};\n\n\t\t\t// Messages we have received and acknowleged and are expecting a confirm message for\n\t\t\t// indexed by their respective message ids.\n\t\t\tthis._receivedMessages = {};\n\n\t\t\t// Internal list of callbacks to be executed when messages\n\t\t\t// have been successfully sent over web socket, e.g. disconnect\n\t\t\t// when it doesn't have to wait for ACK, just message is dispatched.\n\t\t\tthis._notify_msg_sent = {};\n\n\t\t\t// Unique identifier for SEND messages, incrementing\n\t\t\t// counter as messages are sent.\n\t\t\tthis._message_identifier = 1;\n\n\t\t\t// Used to determine the transmission sequence of stored sent messages.\n\t\t\tthis._sequence = 0;\n\n\n\t\t\t// Load the local state, if any, from the saved version, only restore state relevant to this client.\n\t\t\tfor (var key in localStorage)\n\t\t\t\tif ( key.indexOf(\"Sent:\"+this._localKey) === 0 || key.indexOf(\"Received:\"+this._localKey) === 0)\n\t\t\t\t\tthis.restore(key);\n\t\t};\n\n\t\t// Messaging Client public instance members.\n\t\tClientImpl.prototype.host = null;\n\t\tClientImpl.prototype.port = null;\n\t\tClientImpl.prototype.path = null;\n\t\tClientImpl.prototype.uri = null;\n\t\tClientImpl.prototype.clientId = null;\n\n\t\t// Messaging Client private instance members.\n\t\tClientImpl.prototype.socket = null;\n\t\t/* true once we have received an acknowledgement to a CONNECT packet. */\n\t\tClientImpl.prototype.connected = false;\n\t\t/* The largest message identifier allowed, may not be larger than 2**16 but\n\t\t * if set smaller reduces the maximum number of outbound messages allowed.\n\t\t */\n\t\tClientImpl.prototype.maxMessageIdentifier = 65536;\n\t\tClientImpl.prototype.connectOptions = null;\n\t\tClientImpl.prototype.hostIndex = null;\n\t\tClientImpl.prototype.onConnected = null;\n\t\tClientImpl.prototype.onConnectionLost = null;\n\t\tClientImpl.prototype.onMessageDelivered = null;\n\t\tClientImpl.prototype.onMessageArrived = null;\n\t\tClientImpl.prototype.traceFunction = null;\n\t\tClientImpl.prototype._msg_queue = null;\n\t\tClientImpl.prototype._buffered_msg_queue = null;\n\t\tClientImpl.prototype._connectTimeout = null;\n\t\t/* The sendPinger monitors how long we allow before we send data to prove to the server that we are alive. */\n\t\tClientImpl.prototype.sendPinger = null;\n\t\t/* The receivePinger monitors how long we allow before we require evidence that the server is alive. */\n\t\tClientImpl.prototype.receivePinger = null;\n\t\tClientImpl.prototype._reconnectInterval = 1; // Reconnect Delay, starts at 1 second\n\t\tClientImpl.prototype._reconnecting = false;\n\t\tClientImpl.prototype._reconnectTimeout = null;\n\t\tClientImpl.prototype.disconnectedPublishing = false;\n\t\tClientImpl.prototype.disconnectedBufferSize = 5000;\n\n\t\tClientImpl.prototype.receiveBuffer = null;\n\n\t\tClientImpl.prototype._traceBuffer = null;\n\t\tClientImpl.prototype._MAX_TRACE_ENTRIES = 100;\n\n\t\tClientImpl.prototype.connect = function (connectOptions) {\n\t\t\tvar connectOptionsMasked = this._traceMask(connectOptions, \"password\");\n\t\t\tthis._trace(\"Client.connect\", connectOptionsMasked, this.socket, this.connected);\n\n\t\t\tif (this.connected)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"already connected\"]));\n\t\t\tif (this.socket)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"already connected\"]));\n\n\t\t\tif (this._reconnecting) {\n\t\t\t// connect() function is called while reconnect is in progress.\n\t\t\t// Terminate the auto reconnect process to use new connect options.\n\t\t\t\tthis._reconnectTimeout.cancel();\n\t\t\t\tthis._reconnectTimeout = null;\n\t\t\t\tthis._reconnecting = false;\n\t\t\t}\n\n\t\t\tthis.connectOptions = connectOptions;\n\t\t\tthis._reconnectInterval = 1;\n\t\t\tthis._reconnecting = false;\n\t\t\tif (connectOptions.uris) {\n\t\t\t\tthis.hostIndex = 0;\n\t\t\t\tthis._doConnect(connectOptions.uris[0]);\n\t\t\t} else {\n\t\t\t\tthis._doConnect(this.uri);\n\t\t\t}\n\n\t\t};\n\n\t\tClientImpl.prototype.subscribe = function (filter, subscribeOptions) {\n\t\t\tthis._trace(\"Client.subscribe\", filter, subscribeOptions);\n\n\t\t\tif (!this.connected)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n\n var wireMessage = new WireMessage(MESSAGE_TYPE.SUBSCRIBE);\n wireMessage.topics = filter.constructor === Array ? filter : [filter];\n if (subscribeOptions.qos === undefined)\n subscribeOptions.qos = 0;\n wireMessage.requestedQos = [];\n for (var i = 0; i < wireMessage.topics.length; i++)\n wireMessage.requestedQos[i] = subscribeOptions.qos;\n\n\t\t\tif (subscribeOptions.onSuccess) {\n\t\t\t\twireMessage.onSuccess = function(grantedQos) {subscribeOptions.onSuccess({invocationContext:subscribeOptions.invocationContext,grantedQos:grantedQos});};\n\t\t\t}\n\n\t\t\tif (subscribeOptions.onFailure) {\n\t\t\t\twireMessage.onFailure = function(errorCode) {subscribeOptions.onFailure({invocationContext:subscribeOptions.invocationContext,errorCode:errorCode, errorMessage:format(errorCode)});};\n\t\t\t}\n\n\t\t\tif (subscribeOptions.timeout) {\n\t\t\t\twireMessage.timeOut = new Timeout(this, subscribeOptions.timeout, subscribeOptions.onFailure,\n\t\t\t\t\t[{invocationContext:subscribeOptions.invocationContext,\n\t\t\t\t\t\terrorCode:ERROR.SUBSCRIBE_TIMEOUT.code,\n\t\t\t\t\t\terrorMessage:format(ERROR.SUBSCRIBE_TIMEOUT)}]);\n\t\t\t}\n\n\t\t\t// All subscriptions return a SUBACK.\n\t\t\tthis._requires_ack(wireMessage);\n\t\t\tthis._schedule_message(wireMessage);\n\t\t};\n\n\t\t/** @ignore */\n\t\tClientImpl.prototype.unsubscribe = function(filter, unsubscribeOptions) {\n\t\t\tthis._trace(\"Client.unsubscribe\", filter, unsubscribeOptions);\n\n\t\t\tif (!this.connected)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n\n var wireMessage = new WireMessage(MESSAGE_TYPE.UNSUBSCRIBE);\n wireMessage.topics = filter.constructor === Array ? filter : [filter];\n\n\t\t\tif (unsubscribeOptions.onSuccess) {\n\t\t\t\twireMessage.callback = function() {unsubscribeOptions.onSuccess({invocationContext:unsubscribeOptions.invocationContext});};\n\t\t\t}\n\t\t\tif (unsubscribeOptions.timeout) {\n\t\t\t\twireMessage.timeOut = new Timeout(this, unsubscribeOptions.timeout, unsubscribeOptions.onFailure,\n\t\t\t\t\t[{invocationContext:unsubscribeOptions.invocationContext,\n\t\t\t\t\t\terrorCode:ERROR.UNSUBSCRIBE_TIMEOUT.code,\n\t\t\t\t\t\terrorMessage:format(ERROR.UNSUBSCRIBE_TIMEOUT)}]);\n\t\t\t}\n\n\t\t\t// All unsubscribes return a SUBACK.\n\t\t\tthis._requires_ack(wireMessage);\n\t\t\tthis._schedule_message(wireMessage);\n\t\t};\n\n\t\tClientImpl.prototype.send = function (message) {\n\t\t\tthis._trace(\"Client.send\", message);\n\n\t\t\tvar wireMessage = new WireMessage(MESSAGE_TYPE.PUBLISH);\n\t\t\twireMessage.payloadMessage = message;\n\n\t\t\tif (this.connected) {\n\t\t\t// Mark qos 1 & 2 message as \"ACK required\"\n\t\t\t// For qos 0 message, invoke onMessageDelivered callback if there is one.\n\t\t\t// Then schedule the message.\n\t\t\t\tif (message.qos > 0) {\n\t\t\t\t\tthis._requires_ack(wireMessage);\n\t\t\t\t} else if (this.onMessageDelivered) {\n\t\t\t\t\tthis._notify_msg_sent[wireMessage] = this.onMessageDelivered(wireMessage.payloadMessage);\n\t\t\t\t}\n\t\t\t\tthis._schedule_message(wireMessage);\n\t\t\t} else {\n\t\t\t// Currently disconnected, will not schedule this message\n\t\t\t// Check if reconnecting is in progress and disconnected publish is enabled.\n\t\t\t\tif (this._reconnecting && this.disconnectedPublishing) {\n\t\t\t\t// Check the limit which include the \"required ACK\" messages\n\t\t\t\t\tvar messageCount = Object.keys(this._sentMessages).length + this._buffered_msg_queue.length;\n\t\t\t\t\tif (messageCount > this.disconnectedBufferSize) {\n\t\t\t\t\t\tthrow new Error(format(ERROR.BUFFER_FULL, [this.disconnectedBufferSize]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (message.qos > 0) {\n\t\t\t\t\t\t// Mark this message as \"ACK required\"\n\t\t\t\t\t\t\tthis._requires_ack(wireMessage);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twireMessage.sequence = ++this._sequence;\n\t\t\t\t\t\t\t// Add messages in fifo order to array, by adding to start\n\t\t\t\t\t\t\tthis._buffered_msg_queue.unshift(wireMessage);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype.disconnect = function () {\n\t\t\tthis._trace(\"Client.disconnect\");\n\n\t\t\tif (this._reconnecting) {\n\t\t\t// disconnect() function is called while reconnect is in progress.\n\t\t\t// Terminate the auto reconnect process.\n\t\t\t\tthis._reconnectTimeout.cancel();\n\t\t\t\tthis._reconnectTimeout = null;\n\t\t\t\tthis._reconnecting = false;\n\t\t\t}\n\n\t\t\tif (!this.socket)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connecting or connected\"]));\n\n\t\t\tvar wireMessage = new WireMessage(MESSAGE_TYPE.DISCONNECT);\n\n\t\t\t// Run the disconnected call back as soon as the message has been sent,\n\t\t\t// in case of a failure later on in the disconnect processing.\n\t\t\t// as a consequence, the _disconected call back may be run several times.\n\t\t\tthis._notify_msg_sent[wireMessage] = scope(this._disconnected, this);\n\n\t\t\tthis._schedule_message(wireMessage);\n\t\t};\n\n\t\tClientImpl.prototype.getTraceLog = function () {\n\t\t\tif ( this._traceBuffer !== null ) {\n\t\t\t\tthis._trace(\"Client.getTraceLog\", new Date());\n\t\t\t\tthis._trace(\"Client.getTraceLog in flight messages\", this._sentMessages.length);\n\t\t\t\tfor (var key in this._sentMessages)\n\t\t\t\t\tthis._trace(\"_sentMessages \",key, this._sentMessages[key]);\n\t\t\t\tfor (var key in this._receivedMessages)\n\t\t\t\t\tthis._trace(\"_receivedMessages \",key, this._receivedMessages[key]);\n\n\t\t\t\treturn this._traceBuffer;\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype.startTrace = function () {\n\t\t\tif ( this._traceBuffer === null ) {\n\t\t\t\tthis._traceBuffer = [];\n\t\t\t}\n\t\t\tthis._trace(\"Client.startTrace\", new Date(), version);\n\t\t};\n\n\t\tClientImpl.prototype.stopTrace = function () {\n\t\t\tdelete this._traceBuffer;\n\t\t};\n\n\t\tClientImpl.prototype._doConnect = function (wsurl) {\n\t\t// When the socket is open, this client will send the CONNECT WireMessage using the saved parameters.\n\t\t\tif (this.connectOptions.useSSL) {\n\t\t\t\tvar uriParts = wsurl.split(\":\");\n\t\t\t\turiParts[0] = \"wss\";\n\t\t\t\twsurl = uriParts.join(\":\");\n\t\t\t}\n\t\t\tthis._wsuri = wsurl;\n\t\t\tthis.connected = false;\n\n\n\n\t\t\tif (this.connectOptions.mqttVersion < 4) {\n\t\t\t\tthis.socket = new WebSocket(wsurl, [\"mqttv3.1\"]);\n\t\t\t} else {\n\t\t\t\tthis.socket = new WebSocket(wsurl, [\"mqtt\"]);\n\t\t\t}\n\t\t\tthis.socket.binaryType = \"arraybuffer\";\n\t\t\tthis.socket.onopen = scope(this._on_socket_open, this);\n\t\t\tthis.socket.onmessage = scope(this._on_socket_message, this);\n\t\t\tthis.socket.onerror = scope(this._on_socket_error, this);\n\t\t\tthis.socket.onclose = scope(this._on_socket_close, this);\n\n\t\t\tthis.sendPinger = new Pinger(this, this.connectOptions.keepAliveInterval);\n\t\t\tthis.receivePinger = new Pinger(this, this.connectOptions.keepAliveInterval);\n\t\t\tif (this._connectTimeout) {\n\t\t\t\tthis._connectTimeout.cancel();\n\t\t\t\tthis._connectTimeout = null;\n\t\t\t}\n\t\t\tthis._connectTimeout = new Timeout(this, this.connectOptions.timeout, this._disconnected, [ERROR.CONNECT_TIMEOUT.code, format(ERROR.CONNECT_TIMEOUT)]);\n\t\t};\n\n\n\t\t// Schedule a new message to be sent over the WebSockets\n\t\t// connection. CONNECT messages cause WebSocket connection\n\t\t// to be started. All other messages are queued internally\n\t\t// until this has happened. When WS connection starts, process\n\t\t// all outstanding messages.\n\t\tClientImpl.prototype._schedule_message = function (message) {\n\t\t\t// Add messages in fifo order to array, by adding to start\n\t\t\tthis._msg_queue.unshift(message);\n\t\t\t// Process outstanding messages in the queue if we have an open socket, and have received CONNACK.\n\t\t\tif (this.connected) {\n\t\t\t\tthis._process_queue();\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype.store = function(prefix, wireMessage) {\n\t\t\tvar storedMessage = {type:wireMessage.type, messageIdentifier:wireMessage.messageIdentifier, version:1};\n\n\t\t\tswitch(wireMessage.type) {\n\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\tif(wireMessage.pubRecReceived)\n\t\t\t\t\tstoredMessage.pubRecReceived = true;\n\n\t\t\t\t// Convert the payload to a hex string.\n\t\t\t\tstoredMessage.payloadMessage = {};\n\t\t\t\tvar hex = \"\";\n\t\t\t\tvar messageBytes = wireMessage.payloadMessage.payloadBytes;\n\t\t\t\tfor (var i=0; i= 2) {\n\t\t\t\t\tvar x = parseInt(hex.substring(0, 2), 16);\n\t\t\t\t\thex = hex.substring(2, hex.length);\n\t\t\t\t\tbyteStream[i++] = x;\n\t\t\t\t}\n\t\t\t\tvar payloadMessage = new Message(byteStream);\n\n\t\t\t\tpayloadMessage.qos = storedMessage.payloadMessage.qos;\n\t\t\t\tpayloadMessage.destinationName = storedMessage.payloadMessage.destinationName;\n\t\t\t\tif (storedMessage.payloadMessage.duplicate)\n\t\t\t\t\tpayloadMessage.duplicate = true;\n\t\t\t\tif (storedMessage.payloadMessage.retained)\n\t\t\t\t\tpayloadMessage.retained = true;\n\t\t\t\twireMessage.payloadMessage = payloadMessage;\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(format(ERROR.INVALID_STORED_DATA, [key, value]));\n\t\t\t}\n\n\t\t\tif (key.indexOf(\"Sent:\"+this._localKey) === 0) {\n\t\t\t\twireMessage.payloadMessage.duplicate = true;\n\t\t\t\tthis._sentMessages[wireMessage.messageIdentifier] = wireMessage;\n\t\t\t} else if (key.indexOf(\"Received:\"+this._localKey) === 0) {\n\t\t\t\tthis._receivedMessages[wireMessage.messageIdentifier] = wireMessage;\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype._process_queue = function () {\n\t\t\tvar message = null;\n\n\t\t\t// Send all queued messages down socket connection\n\t\t\twhile ((message = this._msg_queue.pop())) {\n\t\t\t\tthis._socket_send(message);\n\t\t\t\t// Notify listeners that message was successfully sent\n\t\t\t\tif (this._notify_msg_sent[message]) {\n\t\t\t\t\tthis._notify_msg_sent[message]();\n\t\t\t\t\tdelete this._notify_msg_sent[message];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t * Expect an ACK response for this message. Add message to the set of in progress\n\t * messages and set an unused identifier in this message.\n\t * @ignore\n\t */\n\t\tClientImpl.prototype._requires_ack = function (wireMessage) {\n\t\t\tvar messageCount = Object.keys(this._sentMessages).length;\n\t\t\tif (messageCount > this.maxMessageIdentifier)\n\t\t\t\tthrow Error (\"Too many messages:\"+messageCount);\n\n\t\t\twhile(this._sentMessages[this._message_identifier] !== undefined) {\n\t\t\t\tthis._message_identifier++;\n\t\t\t}\n\t\t\twireMessage.messageIdentifier = this._message_identifier;\n\t\t\tthis._sentMessages[wireMessage.messageIdentifier] = wireMessage;\n\t\t\tif (wireMessage.type === MESSAGE_TYPE.PUBLISH) {\n\t\t\t\tthis.store(\"Sent:\", wireMessage);\n\t\t\t}\n\t\t\tif (this._message_identifier === this.maxMessageIdentifier) {\n\t\t\t\tthis._message_identifier = 1;\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t * Called when the underlying websocket has been opened.\n\t * @ignore\n\t */\n\t\tClientImpl.prototype._on_socket_open = function () {\n\t\t// Create the CONNECT message object.\n\t\t\tvar wireMessage = new WireMessage(MESSAGE_TYPE.CONNECT, this.connectOptions);\n\t\t\twireMessage.clientId = this.clientId;\n\t\t\tthis._socket_send(wireMessage);\n\t\t};\n\n\t\t/**\n\t * Called when the underlying websocket has received a complete packet.\n\t * @ignore\n\t */\n\t\tClientImpl.prototype._on_socket_message = function (event) {\n\t\t\tthis._trace(\"Client._on_socket_message\", event.data);\n\t\t\tvar messages = this._deframeMessages(event.data);\n\t\t\tfor (var i = 0; i < messages.length; i+=1) {\n\t\t\t\tthis._handleMessage(messages[i]);\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype._deframeMessages = function(data) {\n\t\t\tvar byteArray = new Uint8Array(data);\n\t\t\tvar messages = [];\n\t\t\tif (this.receiveBuffer) {\n\t\t\t\tvar newData = new Uint8Array(this.receiveBuffer.length+byteArray.length);\n\t\t\t\tnewData.set(this.receiveBuffer);\n\t\t\t\tnewData.set(byteArray,this.receiveBuffer.length);\n\t\t\t\tbyteArray = newData;\n\t\t\t\tdelete this.receiveBuffer;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tvar offset = 0;\n\t\t\t\twhile(offset < byteArray.length) {\n\t\t\t\t\tvar result = decodeMessage(byteArray,offset);\n\t\t\t\t\tvar wireMessage = result[0];\n\t\t\t\t\toffset = result[1];\n\t\t\t\t\tif (wireMessage !== null) {\n\t\t\t\t\t\tmessages.push(wireMessage);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (offset < byteArray.length) {\n\t\t\t\t\tthis.receiveBuffer = byteArray.subarray(offset);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tvar errorStack = ((error.hasOwnProperty(\"stack\") == \"undefined\") ? error.stack.toString() : \"No Error Stack Available\");\n\t\t\t\tthis._disconnected(ERROR.INTERNAL_ERROR.code , format(ERROR.INTERNAL_ERROR, [error.message,errorStack]));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn messages;\n\t\t};\n\n\t\tClientImpl.prototype._handleMessage = function(wireMessage) {\n\n\t\t\tthis._trace(\"Client._handleMessage\", wireMessage);\n\n\t\t\ttry {\n\t\t\t\tswitch(wireMessage.type) {\n\t\t\t\tcase MESSAGE_TYPE.CONNACK:\n\t\t\t\t\tthis._connectTimeout.cancel();\n\t\t\t\t\tif (this._reconnectTimeout)\n\t\t\t\t\t\tthis._reconnectTimeout.cancel();\n\n\t\t\t\t\t// If we have started using clean session then clear up the local state.\n\t\t\t\t\tif (this.connectOptions.cleanSession) {\n\t\t\t\t\t\tfor (var key in this._sentMessages) {\n\t\t\t\t\t\t\tvar sentMessage = this._sentMessages[key];\n\t\t\t\t\t\t\tlocalStorage.removeItem(\"Sent:\"+this._localKey+sentMessage.messageIdentifier);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._sentMessages = {};\n\n\t\t\t\t\t\tfor (var key in this._receivedMessages) {\n\t\t\t\t\t\t\tvar receivedMessage = this._receivedMessages[key];\n\t\t\t\t\t\t\tlocalStorage.removeItem(\"Received:\"+this._localKey+receivedMessage.messageIdentifier);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._receivedMessages = {};\n\t\t\t\t\t}\n\t\t\t\t\t// Client connected and ready for business.\n\t\t\t\t\tif (wireMessage.returnCode === 0) {\n\n\t\t\t\t\t\tthis.connected = true;\n\t\t\t\t\t\t// Jump to the end of the list of uris and stop looking for a good host.\n\n\t\t\t\t\t\tif (this.connectOptions.uris)\n\t\t\t\t\t\t\tthis.hostIndex = this.connectOptions.uris.length;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._disconnected(ERROR.CONNACK_RETURNCODE.code , format(ERROR.CONNACK_RETURNCODE, [wireMessage.returnCode, CONNACK_RC[wireMessage.returnCode]]));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resend messages.\n\t\t\t\t\tvar sequencedMessages = [];\n\t\t\t\t\tfor (var msgId in this._sentMessages) {\n\t\t\t\t\t\tif (this._sentMessages.hasOwnProperty(msgId))\n\t\t\t\t\t\t\tsequencedMessages.push(this._sentMessages[msgId]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Also schedule qos 0 buffered messages if any\n\t\t\t\t\tif (this._buffered_msg_queue.length > 0) {\n\t\t\t\t\t\tvar msg = null;\n\t\t\t\t\t\twhile ((msg = this._buffered_msg_queue.pop())) {\n\t\t\t\t\t\t\tsequencedMessages.push(msg);\n\t\t\t\t\t\t\tif (this.onMessageDelivered)\n\t\t\t\t\t\t\t\tthis._notify_msg_sent[msg] = this.onMessageDelivered(msg.payloadMessage);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Sort sentMessages into the original sent order.\n\t\t\t\t\tvar sequencedMessages = sequencedMessages.sort(function(a,b) {return a.sequence - b.sequence;} );\n\t\t\t\t\tfor (var i=0, len=sequencedMessages.length; i\n\t * Most applications will create just one Client object and then call its connect() method,\n\t * however applications can create more than one Client object if they wish.\n\t * In this case the combination of host, port and clientId attributes must be different for each Client object.\n\t *

\n\t * The send, subscribe and unsubscribe methods are implemented as asynchronous JavaScript methods\n\t * (even though the underlying protocol exchange might be synchronous in nature).\n\t * This means they signal their completion by calling back to the application,\n\t * via Success or Failure callback functions provided by the application on the method in question.\n\t * Such callbacks are called at most once per method invocation and do not persist beyond the lifetime\n\t * of the script that made the invocation.\n\t *

\n\t * In contrast there are some callback functions, most notably onMessageArrived,\n\t * that are defined on the {@link Paho.Client} object.\n\t * These may get called multiple times, and aren't directly related to specific method invocations made by the client.\n\t *\n\t * @name Paho.Client\n\t *\n\t * @constructor\n\t *\n\t * @param {string} host - the address of the messaging server, as a fully qualified WebSocket URI, as a DNS name or dotted decimal IP address.\n\t * @param {number} port - the port number to connect to - only required if host is not a URI\n\t * @param {string} path - the path on the host to connect to - only used if host is not a URI. Default: '/mqtt'.\n\t * @param {string} clientId - the Messaging client identifier, between 1 and 23 characters in length.\n\t *\n\t * @property {string} host - read only the server's DNS hostname or dotted decimal IP address.\n\t * @property {number} port - read only the server's port.\n\t * @property {string} path - read only the server's path.\n\t * @property {string} clientId - read only used when connecting to the server.\n\t * @property {function} onConnectionLost - called when a connection has been lost.\n\t * after a connect() method has succeeded.\n\t * Establish the call back used when a connection has been lost. The connection may be\n\t * lost because the client initiates a disconnect or because the server or network\n\t * cause the client to be disconnected. The disconnect call back may be called without\n\t * the connectionComplete call back being invoked if, for example the client fails to\n\t * connect.\n\t * A single response object parameter is passed to the onConnectionLost callback containing the following fields:\n\t *

    \n\t *
  1. errorCode\n\t *
  2. errorMessage\n\t *
\n\t * @property {function} onMessageDelivered - called when a message has been delivered.\n\t * All processing that this Client will ever do has been completed. So, for example,\n\t * in the case of a Qos=2 message sent by this client, the PubComp flow has been received from the server\n\t * and the message has been removed from persistent storage before this callback is invoked.\n\t * Parameters passed to the onMessageDelivered callback are:\n\t *
    \n\t *
  1. {@link Paho.Message} that was delivered.\n\t *
\n\t * @property {function} onMessageArrived - called when a message has arrived in this Paho.client.\n\t * Parameters passed to the onMessageArrived callback are:\n\t *
    \n\t *
  1. {@link Paho.Message} that has arrived.\n\t *
\n\t * @property {function} onConnected - called when a connection is successfully made to the server.\n\t * after a connect() method.\n\t * Parameters passed to the onConnected callback are:\n\t *
    \n\t *
  1. reconnect (boolean) - If true, the connection was the result of a reconnect.
  2. \n\t *
  3. URI (string) - The URI used to connect to the server.
  4. \n\t *
\n\t * @property {boolean} disconnectedPublishing - if set, will enable disconnected publishing in\n\t * in the event that the connection to the server is lost.\n\t * @property {number} disconnectedBufferSize - Used to set the maximum number of messages that the disconnected\n\t * buffer will hold before rejecting new messages. Default size: 5000 messages\n\t * @property {function} trace - called whenever trace is called. TODO\n\t */\n\t\tvar Client = function (host, port, path, clientId) {\n\n\t\t\tvar uri;\n\n\t\t\tif (typeof host !== \"string\")\n\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof host, \"host\"]));\n\n\t\t\tif (arguments.length == 2) {\n\t\t\t// host: must be full ws:// uri\n\t\t\t// port: clientId\n\t\t\t\tclientId = port;\n\t\t\t\turi = host;\n\t\t\t\tvar match = uri.match(/^(wss?):\\/\\/((\\[(.+)\\])|([^\\/]+?))(:(\\d+))?(\\/.*)$/);\n\t\t\t\tif (match) {\n\t\t\t\t\thost = match[4]||match[2];\n\t\t\t\t\tport = parseInt(match[7]);\n\t\t\t\t\tpath = match[8];\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT,[host,\"host\"]));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (arguments.length == 3) {\n\t\t\t\t\tclientId = path;\n\t\t\t\t\tpath = \"/mqtt\";\n\t\t\t\t}\n\t\t\t\tif (typeof port !== \"number\" || port < 0)\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof port, \"port\"]));\n\t\t\t\tif (typeof path !== \"string\")\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof path, \"path\"]));\n\n\t\t\t\tvar ipv6AddSBracket = (host.indexOf(\":\") !== -1 && host.slice(0,1) !== \"[\" && host.slice(-1) !== \"]\");\n\t\t\t\turi = \"ws://\"+(ipv6AddSBracket?\"[\"+host+\"]\":host)+\":\"+port+path;\n\t\t\t}\n\n\t\t\tvar clientIdLength = 0;\n\t\t\tfor (var i = 0; i 65535)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [clientId, \"clientId\"]));\n\n\t\t\tvar client = new ClientImpl(uri, host, port, path, clientId);\n\n\t\t\t//Public Properties\n\t\t\tObject.defineProperties(this,{\n\t\t\t\t\"host\":{\n\t\t\t\t\tget: function() { return host; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"port\":{\n\t\t\t\t\tget: function() { return port; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"path\":{\n\t\t\t\t\tget: function() { return path; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"uri\":{\n\t\t\t\t\tget: function() { return uri; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"clientId\":{\n\t\t\t\t\tget: function() { return client.clientId; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"onConnected\":{\n\t\t\t\t\tget: function() { return client.onConnected; },\n\t\t\t\t\tset: function(newOnConnected) {\n\t\t\t\t\t\tif (typeof newOnConnected === \"function\")\n\t\t\t\t\t\t\tclient.onConnected = newOnConnected;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnConnected, \"onConnected\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"disconnectedPublishing\":{\n\t\t\t\t\tget: function() { return client.disconnectedPublishing; },\n\t\t\t\t\tset: function(newDisconnectedPublishing) {\n\t\t\t\t\t\tclient.disconnectedPublishing = newDisconnectedPublishing;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"disconnectedBufferSize\":{\n\t\t\t\t\tget: function() { return client.disconnectedBufferSize; },\n\t\t\t\t\tset: function(newDisconnectedBufferSize) {\n\t\t\t\t\t\tclient.disconnectedBufferSize = newDisconnectedBufferSize;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"onConnectionLost\":{\n\t\t\t\t\tget: function() { return client.onConnectionLost; },\n\t\t\t\t\tset: function(newOnConnectionLost) {\n\t\t\t\t\t\tif (typeof newOnConnectionLost === \"function\")\n\t\t\t\t\t\t\tclient.onConnectionLost = newOnConnectionLost;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnConnectionLost, \"onConnectionLost\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"onMessageDelivered\":{\n\t\t\t\t\tget: function() { return client.onMessageDelivered; },\n\t\t\t\t\tset: function(newOnMessageDelivered) {\n\t\t\t\t\t\tif (typeof newOnMessageDelivered === \"function\")\n\t\t\t\t\t\t\tclient.onMessageDelivered = newOnMessageDelivered;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnMessageDelivered, \"onMessageDelivered\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"onMessageArrived\":{\n\t\t\t\t\tget: function() { return client.onMessageArrived; },\n\t\t\t\t\tset: function(newOnMessageArrived) {\n\t\t\t\t\t\tif (typeof newOnMessageArrived === \"function\")\n\t\t\t\t\t\t\tclient.onMessageArrived = newOnMessageArrived;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnMessageArrived, \"onMessageArrived\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"trace\":{\n\t\t\t\t\tget: function() { return client.traceFunction; },\n\t\t\t\t\tset: function(trace) {\n\t\t\t\t\t\tif(typeof trace === \"function\"){\n\t\t\t\t\t\t\tclient.traceFunction = trace;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof trace, \"onTrace\"]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\n\t\t\t/**\n\t\t * Connect this Messaging client to its server.\n\t\t *\n\t\t * @name Paho.Client#connect\n\t\t * @function\n\t\t * @param {object} connectOptions - Attributes used with the connection.\n\t\t * @param {number} connectOptions.timeout - If the connect has not succeeded within this\n\t\t * number of seconds, it is deemed to have failed.\n\t\t * The default is 30 seconds.\n\t\t * @param {string} connectOptions.userName - Authentication username for this connection.\n\t\t * @param {string} connectOptions.password - Authentication password for this connection.\n\t\t * @param {Paho.Message} connectOptions.willMessage - sent by the server when the client\n\t\t * disconnects abnormally.\n\t\t * @param {number} connectOptions.keepAliveInterval - the server disconnects this client if\n\t\t * there is no activity for this number of seconds.\n\t\t * The default value of 60 seconds is assumed if not set.\n\t\t * @param {boolean} connectOptions.cleanSession - if true(default) the client and server\n\t\t * persistent state is deleted on successful connect.\n\t\t * @param {boolean} connectOptions.useSSL - if present and true, use an SSL Websocket connection.\n\t\t * @param {object} connectOptions.invocationContext - passed to the onSuccess callback or onFailure callback.\n\t\t * @param {function} connectOptions.onSuccess - called when the connect acknowledgement\n\t\t * has been received from the server.\n\t\t * A single response object parameter is passed to the onSuccess callback containing the following fields:\n\t\t *
    \n\t\t *
  1. invocationContext as passed in to the onSuccess method in the connectOptions.\n\t\t *
\n\t * @param {function} connectOptions.onFailure - called when the connect request has failed or timed out.\n\t\t * A single response object parameter is passed to the onFailure callback containing the following fields:\n\t\t *
    \n\t\t *
  1. invocationContext as passed in to the onFailure method in the connectOptions.\n\t\t *
  2. errorCode a number indicating the nature of the error.\n\t\t *
  3. errorMessage text describing the error.\n\t\t *
\n\t * @param {array} connectOptions.hosts - If present this contains either a set of hostnames or fully qualified\n\t\t * WebSocket URIs (ws://iot.eclipse.org:80/ws), that are tried in order in place\n\t\t * of the host and port paramater on the construtor. The hosts are tried one at at time in order until\n\t\t * one of then succeeds.\n\t * @param {array} connectOptions.ports - If present the set of ports matching the hosts. If hosts contains URIs, this property\n\t\t * is not used.\n\t * @param {boolean} connectOptions.reconnect - Sets whether the client will automatically attempt to reconnect\n\t * to the server if the connection is lost.\n\t *
    \n\t *
  • If set to false, the client will not attempt to automatically reconnect to the server in the event that the\n\t * connection is lost.
  • \n\t *
  • If set to true, in the event that the connection is lost, the client will attempt to reconnect to the server.\n\t * It will initially wait 1 second before it attempts to reconnect, for every failed reconnect attempt, the delay\n\t * will double until it is at 2 minutes at which point the delay will stay at 2 minutes.
  • \n\t *
\n\t * @param {number} connectOptions.mqttVersion - The version of MQTT to use to connect to the MQTT Broker.\n\t *
    \n\t *
  • 3 - MQTT V3.1
  • \n\t *
  • 4 - MQTT V3.1.1
  • \n\t *
\n\t * @param {boolean} connectOptions.mqttVersionExplicit - If set to true, will force the connection to use the\n\t * selected MQTT Version or will fail to connect.\n\t * @param {array} connectOptions.uris - If present, should contain a list of fully qualified WebSocket uris\n\t * (e.g. ws://iot.eclipse.org:80/ws), that are tried in order in place of the host and port parameter of the construtor.\n\t * The uris are tried one at a time in order until one of them succeeds. Do not use this in conjunction with hosts as\n\t * the hosts array will be converted to uris and will overwrite this property.\n\t\t * @throws {InvalidState} If the client is not in disconnected state. The client must have received connectionLost\n\t\t * or disconnected before calling connect for a second or subsequent time.\n\t\t */\n\t\t\tthis.connect = function (connectOptions) {\n\t\t\t\tconnectOptions = connectOptions || {} ;\n\t\t\t\tvalidate(connectOptions, {timeout:\"number\",\n\t\t\t\t\tuserName:\"string\",\n\t\t\t\t\tpassword:\"string\",\n\t\t\t\t\twillMessage:\"object\",\n\t\t\t\t\tkeepAliveInterval:\"number\",\n\t\t\t\t\tcleanSession:\"boolean\",\n\t\t\t\t\tuseSSL:\"boolean\",\n\t\t\t\t\tinvocationContext:\"object\",\n\t\t\t\t\tonSuccess:\"function\",\n\t\t\t\t\tonFailure:\"function\",\n\t\t\t\t\thosts:\"object\",\n\t\t\t\t\tports:\"object\",\n\t\t\t\t\treconnect:\"boolean\",\n\t\t\t\t\tmqttVersion:\"number\",\n\t\t\t\t\tmqttVersionExplicit:\"boolean\",\n\t\t\t\t\turis: \"object\"});\n\n\t\t\t\t// If no keep alive interval is set, assume 60 seconds.\n\t\t\t\tif (connectOptions.keepAliveInterval === undefined)\n\t\t\t\t\tconnectOptions.keepAliveInterval = 60;\n\n\t\t\t\tif (connectOptions.mqttVersion > 4 || connectOptions.mqttVersion < 3) {\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.mqttVersion, \"connectOptions.mqttVersion\"]));\n\t\t\t\t}\n\n\t\t\t\tif (connectOptions.mqttVersion === undefined) {\n\t\t\t\t\tconnectOptions.mqttVersionExplicit = false;\n\t\t\t\t\tconnectOptions.mqttVersion = 4;\n\t\t\t\t} else {\n\t\t\t\t\tconnectOptions.mqttVersionExplicit = true;\n\t\t\t\t}\n\n\t\t\t\t//Check that if password is set, so is username\n\t\t\t\tif (connectOptions.password !== undefined && connectOptions.userName === undefined)\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.password, \"connectOptions.password\"]));\n\n\t\t\t\tif (connectOptions.willMessage) {\n\t\t\t\t\tif (!(connectOptions.willMessage instanceof Message))\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [connectOptions.willMessage, \"connectOptions.willMessage\"]));\n\t\t\t\t\t// The will message must have a payload that can be represented as a string.\n\t\t\t\t\t// Cause the willMessage to throw an exception if this is not the case.\n\t\t\t\t\tconnectOptions.willMessage.stringPayload = null;\n\n\t\t\t\t\tif (typeof connectOptions.willMessage.destinationName === \"undefined\")\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.willMessage.destinationName, \"connectOptions.willMessage.destinationName\"]));\n\t\t\t\t}\n\t\t\t\tif (typeof connectOptions.cleanSession === \"undefined\")\n\t\t\t\t\tconnectOptions.cleanSession = true;\n\t\t\t\tif (connectOptions.hosts) {\n\n\t\t\t\t\tif (!(connectOptions.hosts instanceof Array) )\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts, \"connectOptions.hosts\"]));\n\t\t\t\t\tif (connectOptions.hosts.length <1 )\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts, \"connectOptions.hosts\"]));\n\n\t\t\t\t\tvar usingURIs = false;\n\t\t\t\t\tfor (var i = 0; i\n\t\t * @param {object} subscribeOptions - used to control the subscription\n\t\t *\n\t\t * @param {number} subscribeOptions.qos - the maximum qos of any publications sent\n\t\t * as a result of making this subscription.\n\t\t * @param {object} subscribeOptions.invocationContext - passed to the onSuccess callback\n\t\t * or onFailure callback.\n\t\t * @param {function} subscribeOptions.onSuccess - called when the subscribe acknowledgement\n\t\t * has been received from the server.\n\t\t * A single response object parameter is passed to the onSuccess callback containing the following fields:\n\t\t *
    \n\t\t *
  1. invocationContext if set in the subscribeOptions.\n\t\t *
\n\t\t * @param {function} subscribeOptions.onFailure - called when the subscribe request has failed or timed out.\n\t\t * A single response object parameter is passed to the onFailure callback containing the following fields:\n\t\t *
    \n\t\t *
  1. invocationContext - if set in the subscribeOptions.\n\t\t *
  2. errorCode - a number indicating the nature of the error.\n\t\t *
  3. errorMessage - text describing the error.\n\t\t *
\n\t\t * @param {number} subscribeOptions.timeout - which, if present, determines the number of\n\t\t * seconds after which the onFailure calback is called.\n\t\t * The presence of a timeout does not prevent the onSuccess\n\t\t * callback from being called when the subscribe completes.\n\t\t * @throws {InvalidState} if the client is not in connected state.\n\t\t */\n\t\t\tthis.subscribe = function (filter, subscribeOptions) {\n\t\t\t\tif (typeof filter !== \"string\" && filter.constructor !== Array)\n\t\t\t\t\tthrow new Error(\"Invalid argument:\"+filter);\n\t\t\t\tsubscribeOptions = subscribeOptions || {} ;\n\t\t\t\tvalidate(subscribeOptions, {qos:\"number\",\n\t\t\t\t\tinvocationContext:\"object\",\n\t\t\t\t\tonSuccess:\"function\",\n\t\t\t\t\tonFailure:\"function\",\n\t\t\t\t\ttimeout:\"number\"\n\t\t\t\t});\n\t\t\t\tif (subscribeOptions.timeout && !subscribeOptions.onFailure)\n\t\t\t\t\tthrow new Error(\"subscribeOptions.timeout specified with no onFailure callback.\");\n\t\t\t\tif (typeof subscribeOptions.qos !== \"undefined\" && !(subscribeOptions.qos === 0 || subscribeOptions.qos === 1 || subscribeOptions.qos === 2 ))\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [subscribeOptions.qos, \"subscribeOptions.qos\"]));\n\t\t\t\tclient.subscribe(filter, subscribeOptions);\n\t\t\t};\n\n\t\t/**\n\t\t * Unsubscribe for messages, stop receiving messages sent to destinations described by the filter.\n\t\t *\n\t\t * @name Paho.Client#unsubscribe\n\t\t * @function\n\t\t * @param {string} filter - describing the destinations to receive messages from.\n\t\t * @param {object} unsubscribeOptions - used to control the subscription\n\t\t * @param {object} unsubscribeOptions.invocationContext - passed to the onSuccess callback\n\t\t\t\t\t\t\t\t\t\t\t or onFailure callback.\n\t\t * @param {function} unsubscribeOptions.onSuccess - called when the unsubscribe acknowledgement has been received from the server.\n\t\t * A single response object parameter is passed to the\n\t\t * onSuccess callback containing the following fields:\n\t\t *
    \n\t\t *
  1. invocationContext - if set in the unsubscribeOptions.\n\t\t *
\n\t\t * @param {function} unsubscribeOptions.onFailure called when the unsubscribe request has failed or timed out.\n\t\t * A single response object parameter is passed to the onFailure callback containing the following fields:\n\t\t *
    \n\t\t *
  1. invocationContext - if set in the unsubscribeOptions.\n\t\t *
  2. errorCode - a number indicating the nature of the error.\n\t\t *
  3. errorMessage - text describing the error.\n\t\t *
\n\t\t * @param {number} unsubscribeOptions.timeout - which, if present, determines the number of seconds\n\t\t * after which the onFailure callback is called. The presence of\n\t\t * a timeout does not prevent the onSuccess callback from being\n\t\t * called when the unsubscribe completes\n\t\t * @throws {InvalidState} if the client is not in connected state.\n\t\t */\n\t\t\tthis.unsubscribe = function (filter, unsubscribeOptions) {\n\t\t\t\tif (typeof filter !== \"string\" && filter.constructor !== Array)\n\t\t\t\t\tthrow new Error(\"Invalid argument:\"+filter);\n\t\t\t\tunsubscribeOptions = unsubscribeOptions || {} ;\n\t\t\t\tvalidate(unsubscribeOptions, {invocationContext:\"object\",\n\t\t\t\t\tonSuccess:\"function\",\n\t\t\t\t\tonFailure:\"function\",\n\t\t\t\t\ttimeout:\"number\"\n\t\t\t\t});\n\t\t\t\tif (unsubscribeOptions.timeout && !unsubscribeOptions.onFailure)\n\t\t\t\t\tthrow new Error(\"unsubscribeOptions.timeout specified with no onFailure callback.\");\n\t\t\t\tclient.unsubscribe(filter, unsubscribeOptions);\n\t\t\t};\n\n\t\t\t/**\n\t\t * Send a message to the consumers of the destination in the Message.\n\t\t *\n\t\t * @name Paho.Client#send\n\t\t * @function\n\t\t * @param {string|Paho.Message} topic - mandatory The name of the destination to which the message is to be sent.\n\t\t * \t\t\t\t\t - If it is the only parameter, used as Paho.Message object.\n\t\t * @param {String|ArrayBuffer} payload - The message data to be sent.\n\t\t * @param {number} qos The Quality of Service used to deliver the message.\n\t\t * \t\t
\n\t\t * \t\t\t
0 Best effort (default).\n\t\t * \t\t\t
1 At least once.\n\t\t * \t\t\t
2 Exactly once.\n\t\t * \t\t
\n\t\t * @param {Boolean} retained If true, the message is to be retained by the server and delivered\n\t\t * to both current and future subscriptions.\n\t\t * If false the server only delivers the message to current subscribers, this is the default for new Messages.\n\t\t * A received message has the retained boolean set to true if the message was published\n\t\t * with the retained boolean set to true\n\t\t * and the subscrption was made after the message has been published.\n\t\t * @throws {InvalidState} if the client is not connected.\n\t\t */\n\t\t\tthis.send = function (topic,payload,qos,retained) {\n\t\t\t\tvar message ;\n\n\t\t\t\tif(arguments.length === 0){\n\t\t\t\t\tthrow new Error(\"Invalid argument.\"+\"length\");\n\n\t\t\t\t}else if(arguments.length == 1) {\n\n\t\t\t\t\tif (!(topic instanceof Message) && (typeof topic !== \"string\"))\n\t\t\t\t\t\tthrow new Error(\"Invalid argument:\"+ typeof topic);\n\n\t\t\t\t\tmessage = topic;\n\t\t\t\t\tif (typeof message.destinationName === \"undefined\")\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT,[message.destinationName,\"Message.destinationName\"]));\n\t\t\t\t\tclient.send(message);\n\n\t\t\t\t}else {\n\t\t\t\t//parameter checking in Message object\n\t\t\t\t\tmessage = new Message(payload);\n\t\t\t\t\tmessage.destinationName = topic;\n\t\t\t\t\tif(arguments.length >= 3)\n\t\t\t\t\t\tmessage.qos = qos;\n\t\t\t\t\tif(arguments.length >= 4)\n\t\t\t\t\t\tmessage.retained = retained;\n\t\t\t\t\tclient.send(message);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/**\n\t\t * Publish a message to the consumers of the destination in the Message.\n\t\t * Synonym for Paho.Mqtt.Client#send\n\t\t *\n\t\t * @name Paho.Client#publish\n\t\t * @function\n\t\t * @param {string|Paho.Message} topic - mandatory The name of the topic to which the message is to be published.\n\t\t * \t\t\t\t\t - If it is the only parameter, used as Paho.Message object.\n\t\t * @param {String|ArrayBuffer} payload - The message data to be published.\n\t\t * @param {number} qos The Quality of Service used to deliver the message.\n\t\t * \t\t
\n\t\t * \t\t\t
0 Best effort (default).\n\t\t * \t\t\t
1 At least once.\n\t\t * \t\t\t
2 Exactly once.\n\t\t * \t\t
\n\t\t * @param {Boolean} retained If true, the message is to be retained by the server and delivered\n\t\t * to both current and future subscriptions.\n\t\t * If false the server only delivers the message to current subscribers, this is the default for new Messages.\n\t\t * A received message has the retained boolean set to true if the message was published\n\t\t * with the retained boolean set to true\n\t\t * and the subscrption was made after the message has been published.\n\t\t * @throws {InvalidState} if the client is not connected.\n\t\t */\n\t\t\tthis.publish = function(topic,payload,qos,retained) {\n\t\t\t\tvar message ;\n\n\t\t\t\tif(arguments.length === 0){\n\t\t\t\t\tthrow new Error(\"Invalid argument.\"+\"length\");\n\n\t\t\t\t}else if(arguments.length == 1) {\n\n\t\t\t\t\tif (!(topic instanceof Message) && (typeof topic !== \"string\"))\n\t\t\t\t\t\tthrow new Error(\"Invalid argument:\"+ typeof topic);\n\n\t\t\t\t\tmessage = topic;\n\t\t\t\t\tif (typeof message.destinationName === \"undefined\")\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT,[message.destinationName,\"Message.destinationName\"]));\n\t\t\t\t\tclient.send(message);\n\n\t\t\t\t}else {\n\t\t\t\t\t//parameter checking in Message object\n\t\t\t\t\tmessage = new Message(payload);\n\t\t\t\t\tmessage.destinationName = topic;\n\t\t\t\t\tif(arguments.length >= 3)\n\t\t\t\t\t\tmessage.qos = qos;\n\t\t\t\t\tif(arguments.length >= 4)\n\t\t\t\t\t\tmessage.retained = retained;\n\t\t\t\t\tclient.send(message);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/**\n\t\t * Normal disconnect of this Messaging client from its server.\n\t\t *\n\t\t * @name Paho.Client#disconnect\n\t\t * @function\n\t\t * @throws {InvalidState} if the client is already disconnected.\n\t\t */\n\t\t\tthis.disconnect = function () {\n\t\t\t\tclient.disconnect();\n\t\t\t};\n\n\t\t\t/**\n\t\t * Get the contents of the trace log.\n\t\t *\n\t\t * @name Paho.Client#getTraceLog\n\t\t * @function\n\t\t * @return {Object[]} tracebuffer containing the time ordered trace records.\n\t\t */\n\t\t\tthis.getTraceLog = function () {\n\t\t\t\treturn client.getTraceLog();\n\t\t\t};\n\n\t\t\t/**\n\t\t * Start tracing.\n\t\t *\n\t\t * @name Paho.Client#startTrace\n\t\t * @function\n\t\t */\n\t\t\tthis.startTrace = function () {\n\t\t\t\tclient.startTrace();\n\t\t\t};\n\n\t\t\t/**\n\t\t * Stop tracing.\n\t\t *\n\t\t * @name Paho.Client#stopTrace\n\t\t * @function\n\t\t */\n\t\t\tthis.stopTrace = function () {\n\t\t\t\tclient.stopTrace();\n\t\t\t};\n\n\t\t\tthis.isConnected = function() {\n\t\t\t\treturn client.connected;\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t * An application message, sent or received.\n\t *

\n\t * All attributes may be null, which implies the default values.\n\t *\n\t * @name Paho.Message\n\t * @constructor\n\t * @param {String|ArrayBuffer} payload The message data to be sent.\n\t *

\n\t * @property {string} payloadString read only The payload as a string if the payload consists of valid UTF-8 characters.\n\t * @property {ArrayBuffer} payloadBytes read only The payload as an ArrayBuffer.\n\t *

\n\t * @property {string} destinationName mandatory The name of the destination to which the message is to be sent\n\t * (for messages about to be sent) or the name of the destination from which the message has been received.\n\t * (for messages received by the onMessage function).\n\t *

\n\t * @property {number} qos The Quality of Service used to deliver the message.\n\t *

\n\t *
0 Best effort (default).\n\t *
1 At least once.\n\t *
2 Exactly once.\n\t *
\n\t *

\n\t * @property {Boolean} retained If true, the message is to be retained by the server and delivered\n\t * to both current and future subscriptions.\n\t * If false the server only delivers the message to current subscribers, this is the default for new Messages.\n\t * A received message has the retained boolean set to true if the message was published\n\t * with the retained boolean set to true\n\t * and the subscrption was made after the message has been published.\n\t *

\n\t * @property {Boolean} duplicate read only If true, this message might be a duplicate of one which has already been received.\n\t * This is only set on messages received from the server.\n\t *\n\t */\n\t\tvar Message = function (newPayload) {\n\t\t\tvar payload;\n\t\t\tif ( typeof newPayload === \"string\" ||\n\t\tnewPayload instanceof ArrayBuffer ||\n\t\t(ArrayBuffer.isView(newPayload) && !(newPayload instanceof DataView))\n\t\t\t) {\n\t\t\t\tpayload = newPayload;\n\t\t\t} else {\n\t\t\t\tthrow (format(ERROR.INVALID_ARGUMENT, [newPayload, \"newPayload\"]));\n\t\t\t}\n\n\t\t\tvar destinationName;\n\t\t\tvar qos = 0;\n\t\t\tvar retained = false;\n\t\t\tvar duplicate = false;\n\n\t\t\tObject.defineProperties(this,{\n\t\t\t\t\"payloadString\":{\n\t\t\t\t\tenumerable : true,\n\t\t\t\t\tget : function () {\n\t\t\t\t\t\tif (typeof payload === \"string\")\n\t\t\t\t\t\t\treturn payload;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\treturn parseUTF8(payload, 0, payload.length);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"payloadBytes\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\tif (typeof payload === \"string\") {\n\t\t\t\t\t\t\tvar buffer = new ArrayBuffer(UTF8Length(payload));\n\t\t\t\t\t\t\tvar byteStream = new Uint8Array(buffer);\n\t\t\t\t\t\t\tstringToUTF8(payload, byteStream, 0);\n\n\t\t\t\t\t\t\treturn byteStream;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn payload;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"destinationName\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return destinationName; },\n\t\t\t\t\tset: function(newDestinationName) {\n\t\t\t\t\t\tif (typeof newDestinationName === \"string\")\n\t\t\t\t\t\t\tdestinationName = newDestinationName;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [newDestinationName, \"newDestinationName\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"qos\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return qos; },\n\t\t\t\t\tset: function(newQos) {\n\t\t\t\t\t\tif (newQos === 0 || newQos === 1 || newQos === 2 )\n\t\t\t\t\t\t\tqos = newQos;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(\"Invalid argument:\"+newQos);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"retained\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return retained; },\n\t\t\t\t\tset: function(newRetained) {\n\t\t\t\t\t\tif (typeof newRetained === \"boolean\")\n\t\t\t\t\t\t\tretained = newRetained;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [newRetained, \"newRetained\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"topic\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return destinationName; },\n\t\t\t\t\tset: function(newTopic) {destinationName=newTopic;}\n\t\t\t\t},\n\t\t\t\t\"duplicate\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return duplicate; },\n\t\t\t\t\tset: function(newDuplicate) {duplicate=newDuplicate;}\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t// Module contents.\n\t\treturn {\n\t\t\tClient: Client,\n\t\t\tMessage: Message\n\t\t};\n\t// eslint-disable-next-line no-nested-ternary\n\t})(typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {});\n\treturn PahoMQTT;\n});\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n var f = basename(path);\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","exports.endianness = function () { return 'LE' };\n\nexports.hostname = function () {\n if (typeof location !== 'undefined') {\n return location.hostname\n }\n else return '';\n};\n\nexports.loadavg = function () { return [] };\n\nexports.uptime = function () { return 0 };\n\nexports.freemem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.totalmem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.cpus = function () { return [] };\n\nexports.type = function () { return 'Browser' };\n\nexports.release = function () {\n if (typeof navigator !== 'undefined') {\n return navigator.appVersion;\n }\n return '';\n};\n\nexports.networkInterfaces\n= exports.getNetworkInterfaces\n= function () { return {} };\n\nexports.arch = function () { return 'javascript' };\n\nexports.platform = function () { return 'browser' };\n\nexports.tmpdir = exports.tmpDir = function () {\n return '/tmp';\n};\n\nexports.EOL = '\\n';\n\nexports.homedir = function () {\n\treturn '/'\n};\n"],"sourceRoot":""}