{"version":3,"file":"scripts.3dfeea0ffe1da825.js","mappings":"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","names":["DateHelper","Date","prototype","AsUTC","this","toUTCString","substr","ToUTC","offset","getTimezoneOffset","getTime","addDays","days","setDate","getDate","parseInt","getWeek","padZero","d","setHours","getDay","yearStart","getFullYear","weekNo","Math","ceil","pad","val","len","String","length","xsockets","dateFormat","token","timezone","timezoneClip","date","mask","utc","dF","arguments","Object","toString","call","test","isNaN","SyntaxError","masks","default","slice","_","D","m","y","H","M","s","L","o","flags","dd","ddd","Env","i18n","dayNames","dddd","MM","mmm","monthNames","mmmm","yy","yyyy","h","hh","HH","mm","ss","l","round","t","tt","T","TT","Z","match","pop","replace","floor","abs","S","$0","shortDate","mediumDate","longDate","fullDate","shortTime","mediumTime","longTime","isoDate","isoTime","isoDateTime","isoUtcDateTime","format","controller","itransport","_name","_isOpen","_subscriptions","promises","onOpen","connInfo","onClose","onMessage","_transport","name","dispatchEvent","message","events","open","clientInfo","JSON","parse","_controllerId","CI","setPersistentId","PI","close","firePromise","fireSubscription","cb","indexOf","messageType","text","binary","B","metadata","isConnected","socket","send","init","dispose","disposeController","on","topic","callback","toLowerCase","off","invoke","data","promise","invokeBinary","arrayBuffer","bm","createBuffer","subscribe","A","unsubscribe","publish","setProperty","value","getProperty","that","C","utils","isJson","stringify","payload","header","Uint8Array","longToByteArray","appendBuffer","stringToBuffer","extractMessage","byteArrayToLong","byteArray","i","byteLength","payloadLength","buffer","str","result","fromCharCode","apply","Uint16Array","Q","R","I","a","b","c","set","arr","Array","charCodeAt","size","index","_byte","version","authfailed","error","ping","pong","storage","get","clear","remove","guid","random","_controller","then","fn","client","server","controllers","_autoReconnect","_autoReconnectTimeout","_readyState","WebSocket","CLOSED","event","onAuthenticationFailed","onError","_parameters","_persistentId","localStorage","getItem","_server","subprotocol","_controllers","push","autoReconnect","enabled","timeout","setParameters","params","setItem","_this","persistentid","readyState","OPEN","querystring","binaryType","onopen","sendtext","onclose","window","setTimeout","onmessage","bd","onerror","createNewInstanceIfMissing","instance","toLocaleLowerCase","splice","key","encodeURIComponent","objectTypes","function","object","root","freeExports","exports","freeModule","module","nodeType","freeGlobal","global","self","maxSafeInteger","pow","reOpera","objectProto","hasOwnProperty","capitalize","string","charAt","toUpperCase","trim","forOwn","getClassOf","qualify","reduce","array","accumulator","each","platform","ua","context","isCustomContext","nav","navigator","userAgent","isSpecialCasedOS","likeChrome","objectClass","airRuntimeClass","enviroClass","javaClass","java","phantomClass","rhino","environment","alpha","beta","doc","document","opera","operamini","operaClass","arch","description","prerelease","useFeatures","layout","getLayout","guesses","guess","RegExp","pattern","exec","label","getName","product","getProduct","manufacturer","getManufacturer","Apple","iPad","iPhone","iPod","Alcatel","Archos","Amazon","Kindle","Asus","Transformer","Nook","BlackBerry","PlayBook","Google","Nexus","HP","TouchPad","HTC","Huawei","Lenovo","LG","Microsoft","Xbox","Motorola","Xoom","Nintendo","Wii","Nokia","Lumia","Oppo","Samsung","Sony","PlayStation","Xiaomi","Mi","Redmi","os","getOS","cleanupOS","split","getVersion","patterns","unshift","parseFloat","isHostType","property","type","lang","System","require","join","system","process","browser","versions","electron","node","nw","runtime","flash","Capabilities","phantom","major","minor","patch","documentMode","toFixed","appMinorVersion","external","architecture","family","cpuClass","toStringPlatform","define","amd"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["src/scripts/DateHelper.js","src/scripts/XSockets.latest.js","../../node_modules/.pnpm/platform@1.3.6/node_modules/platform/platform.js"],"sourcesContent":["var DateHelper = {};\n\n// Converts date to UTC\nDate.prototype.AsUTC = function () {\n\treturn new Date(this.toUTCString().substr(0, 25));\n};\n\n// Treats value as if it was utc\nDate.prototype.ToUTC = function () {\n\tvar offset = new Date().getTimezoneOffset();\n\n\treturn new Date(this.getTime() - offset * 60 * 1000);\n};\n\nDate.prototype.addDays = function (days) {\n\tthis.setDate(this.getDate() + parseInt(days));\n\treturn this;\n};\n\nDate.prototype.getWeek = function (padZero) {\n\t// Copy date so don't modify original\n\td = new Date(+this);\n\td.setHours(0, 0, 0);\n\t// Set to nearest Thursday: current date + 4 - current day number\n\t// Make Sunday's day number 7\n\td.setDate(d.getDate() + 4 - (d.getDay() || 7));\n\t// Get first day of year\n\tvar yearStart = new Date(d.getFullYear(), 0, 1);\n\t// Calculate full weeks to nearest Thursday\n\tvar weekNo = Math.ceil(((d - yearStart) / 86400000 + 1) / 7);\n\t// Return array of year and week number'\n\n\tpad = function (val, len) {\n\t\tval = String(val);\n\t\tlen = len || 2;\n\t\twhile (val.length < len) val = '0' + val;\n\t\treturn val;\n\t};\n\n\tif (padZero) return pad(weekNo, 2);\n\n\treturn weekNo;\n};\n\n/*\n *\n */\n/*\n * Date Format 1.2.3\n * (c) 2007-2009 Steven Levithan \n * MIT license\n *\n * Includes enhancements by Scott Trenda \n * and Kris Kowal \n *\n * Accepts a date, a mask, or a date and a mask.\n * Returns a formatted version of the given date.\n * The date defaults to the current date/time.\n * The mask defaults to dateFormat.masks.default.\n */\n\nvar dateFormat = (function () {\n\tvar token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\\1?|[LloSZ]|\"[^\"]*\"|'[^']*'/g,\n\t\ttimezone =\n\t\t\t/\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,\n\t\ttimezoneClip = /[^-+\\dA-Z]/g,\n\t\tpad = function (val, len) {\n\t\t\tval = String(val);\n\t\t\tlen = len || 2;\n\t\t\twhile (val.length < len) val = '0' + val;\n\t\t\treturn val;\n\t\t};\n\n\t// Regexes and supporting functions are cached through closure\n\treturn function (date, mask, utc) {\n\t\tvar dF = dateFormat;\n\n\t\t// You can't provide utc if you skip other args (use the \"UTC:\" mask prefix)\n\t\tif (arguments.length === 1 && Object.prototype.toString.call(date) === '[object String]' && !/\\d/.test(date)) {\n\t\t\tmask = date;\n\t\t\tdate = undefined;\n\t\t}\n\n\t\t// Passing date through Date applies Date.parse, if necessary\n\t\tdate = date ? new Date(date) : new Date();\n\t\tif (isNaN(date)) throw SyntaxError('invalid date');\n\n\t\tmask = String(dF.masks[mask] || mask || dF.masks['default']);\n\n\t\t// Allow setting the utc argument via the mask\n\t\tif (mask.slice(0, 4) === 'UTC:') {\n\t\t\tmask = mask.slice(4);\n\t\t\tutc = true;\n\t\t}\n\n\t\tvar _ = utc ? 'getUTC' : 'get',\n\t\t\td = date[_ + 'Date'](),\n\t\t\tD = date[_ + 'Day'](),\n\t\t\tm = date[_ + 'Month'](),\n\t\t\ty = date[_ + 'FullYear'](),\n\t\t\tH = date[_ + 'Hours'](),\n\t\t\tM = date[_ + 'Minutes'](),\n\t\t\ts = date[_ + 'Seconds'](),\n\t\t\tL = date[_ + 'Milliseconds'](),\n\t\t\to = utc ? 0 : date.getTimezoneOffset(),\n\t\t\tflags = {\n\t\t\t\td: d,\n\t\t\t\tdd: pad(d),\n\t\t\t\tddd: µ.Env.i18n.dayNames[D],\n\t\t\t\tdddd: µ.Env.i18n.dayNames[D + 7],\n\t\t\t\tM: m + 1,\n\t\t\t\tMM: pad(m + 1),\n\t\t\t\tmmm: µ.Env.i18n.monthNames[m],\n\t\t\t\tmmmm: µ.Env.i18n.monthNames[m + 12],\n\t\t\t\tyy: String(y).slice(2),\n\t\t\t\tyyyy: y,\n\t\t\t\th: H % 12 || 12,\n\t\t\t\thh: pad(H % 12 || 12),\n\t\t\t\tH: H,\n\t\t\t\tHH: pad(H),\n\t\t\t\tm: M,\n\t\t\t\tmm: pad(M),\n\t\t\t\ts: s,\n\t\t\t\tss: pad(s),\n\t\t\t\tl: pad(L, 3),\n\t\t\t\tL: pad(L > 99 ? Math.round(L / 10) : L),\n\t\t\t\tt: H < 12 ? 'a' : 'p',\n\t\t\t\ttt: H < 12 ? 'am' : 'pm',\n\t\t\t\tT: H < 12 ? 'A' : 'P',\n\t\t\t\tTT: H < 12 ? 'AM' : 'PM',\n\t\t\t\tZ: utc ? 'UTC' : (String(date).match(timezone) || ['']).pop().replace(timezoneClip, ''),\n\t\t\t\to: (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + (Math.abs(o) % 60), 4),\n\t\t\t\tS: ['th', 'st', 'nd', 'rd'][d % 10 > 3 ? 0 : (((d % 100) - (d % 10) != 10) * d) % 10],\n\t\t\t};\n\n\t\treturn mask.replace(token, function ($0) {\n\t\t\treturn $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);\n\t\t});\n\t};\n})();\n\n// Some common format strings\ndateFormat.masks = {\n\tdefault: 'ddd mmm dd yyyy HH:MM:ss',\n\tshortDate: 'm/d/yy',\n\tmediumDate: 'mmm d, yyyy',\n\tlongDate: 'mmmm d, yyyy',\n\tfullDate: 'dddd, mmmm d, yyyy',\n\tshortTime: 'h:MM TT',\n\tmediumTime: 'h:MM:ss TT',\n\tlongTime: 'h:MM:ss TT Z',\n\tisoDate: 'yyyy-mm-dd',\n\tisoTime: 'HH:MM:ss',\n\tisoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\n\tisoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\",\n};\n\n//// Internationalization strings\n//dateFormat.i18n = {\n// dayNames: [\n// \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\",\n// \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"\n// ],\n// monthNames: [\n// \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n// \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n// ]\n//};\n\n// For convenience...\nDate.prototype.format = function (mask, utc) {\n\treturn dateFormat(this, mask, utc);\n};\n","/**\n * Client-side controller(s) for full duplex communication with the server-controller(s)\n */\nvar xsockets;\n(function (xsockets) {\n\tvar controller = (function () {\n\t\t/**\n\t\t * Ctor for client side controller\n\t\t * @param itransport - the communication layer\n\t\t * @param _name - the name of the controller\n\t\t */\n\t\tfunction controller(itransport, _name) {\n\t\t\tthis._isOpen = false;\n\t\t\tthis._subscriptions = {};\n\t\t\tthis.promises = {};\n\t\t\t/**\n\t\t\t * Will be fired when the controller is opened\n\t\t\t */\n\t\t\tthis.onOpen = function (connInfo) {};\n\t\t\t/**\n\t\t\t * Will be fired when the controller is closed\n\t\t\t */\n\t\t\tthis.onClose = function () {};\n\t\t\t/**\n\t\t\t * Will be fired when there is a message dispatched to the\n\t\t\t * controller and there is no promise/subscription for the topic\n\t\t\t */\n\t\t\tthis.onMessage = function () {};\n\t\t\tthis._transport = itransport;\n\t\t\tthis.name = _name;\n\t\t}\n\t\t/**\n\t\t * Dispatches a message to the promise or subscription for the topic.\n\t\t * If no promise/subscription is found the onmessage event on the controller will be fired\n\t\t * @param message - the message object received from the server\n\t\t */\n\t\tcontroller.prototype.dispatchEvent = function (message) {\n\t\t\tswitch (message.T) {\n\t\t\t\tcase xsockets.events.open:\n\t\t\t\t\tthis._isOpen = true;\n\t\t\t\t\tvar clientInfo = JSON.parse(message.D);\n\t\t\t\t\tthis._controllerId = clientInfo.CI;\n\t\t\t\t\tthis._transport.setPersistentId(clientInfo.PI);\n\t\t\t\t\tthis.onOpen(message.D);\n\t\t\t\t\tbreak;\n\t\t\t\tcase xsockets.events.close:\n\t\t\t\t\tthis._isOpen = false;\n\t\t\t\t\tthis.onClose();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif (!this.firePromise(message) && !this.fireSubscription(message)) {\n\t\t\t\t\t\tthis.onMessage(message);\n\t\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * If there is a promise for the topic on the message it wil be fired.\n\t\t * Return true if a promise was fired, otherwise false\n\t\t * @param message - the received message\n\t\t */\n\t\tcontroller.prototype.firePromise = function (message) {\n\t\t\t//Check promises\n\t\t\tvar cb = this.promises[message.T];\n\t\t\tif (!cb && message.T.indexOf('_r')) cb = this.promises[message.T.replace('_r', '')];\n\t\t\tif (cb !== undefined) {\n\t\t\t\tif (message.messageType === xsockets.messageType.text) {\n\t\t\t\t\tcb(JSON.parse(message.D));\n\t\t\t\t} else {\n\t\t\t\t\tcb(message.D);\n\t\t\t\t}\n\t\t\t\tdelete this.promises[message.T];\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\t/**\n\t\t * If there is a subscription for the topic on the message it wil be fired.\n\t\t * Return true if a subscription was fired, otherwise false\n\t\t * @param message - the received message\n\t\t */\n\t\tcontroller.prototype.fireSubscription = function (message) {\n\t\t\t//Check pub/sub and rpc\n\t\t\tvar cb = this._subscriptions[message.T];\n\t\t\tif (cb !== undefined) {\n\t\t\t\tif (message.messageType == xsockets.messageType.text) {\n\t\t\t\t\tcb(JSON.parse(message.D));\n\t\t\t\t} else {\n\t\t\t\t\tcb({ binary: message.B, metadata: message.D });\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\t/**\n\t\t * Open up the controller server-side.\n\t\t *\n\t\t * If the transport/socket is open the controller will communicate to the server to open a instance of the server-side controller\n\t\t */\n\t\tcontroller.prototype.open = function () {\n\t\t\tif (this._transport.isConnected() && !this._isOpen) {\n\t\t\t\tthis._transport.socket.send(new xsockets.message(this.name, xsockets.events.init));\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * Close the controller both server-side and client-side (opitonal)\n\t\t * @param dispose - if true the client-side controller will be disposed\n\t\t */\n\t\tcontroller.prototype.close = function (dispose) {\n\t\t\tif (dispose === void 0) {\n\t\t\t\tdispose = false;\n\t\t\t}\n\t\t\t//if socket open... send close message\n\t\t\tif (this._transport.isConnected() && this._isOpen) {\n\t\t\t\tthis._transport.socket.send(new xsockets.message(this.name, xsockets.events.close));\n\t\t\t}\n\t\t\tthis.onClose();\n\t\t\tif (dispose) {\n\t\t\t\tthis._transport.disposeController(this);\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * Add a callback that will fire for a specific topic\n\t\t * @param topic - the topic to add a callback for\n\t\t * @param callback - the callback function to fire when the topic arrives\n\t\t */\n\t\tcontroller.prototype.on = function (topic, callback) {\n\t\t\ttopic = topic.toLowerCase();\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tthis._subscriptions[topic] = callback;\n\t\t\t}\n\t\t\tif (typeof callback === 'undefined') {\n\t\t\t\tdelete this._subscriptions[topic];\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * Removes a callback for a specific topic\n\t\t * @param topic - the topic to remove the callback for\n\t\t */\n\t\tcontroller.prototype.off = function (topic) {\n\t\t\ttopic = topic.toLowerCase();\n\t\t\tdelete this._subscriptions[topic];\n\t\t};\n\t\t/**\n\t\t * Call a method on the server-side controller\n\t\t * @param topic - the method to call\n\t\t * @param data - the serializable data to pass into the method\n\t\t */\n\t\tcontroller.prototype.invoke = function (topic, data) {\n\t\t\ttopic = topic.toLowerCase();\n\t\t\tif (this._transport.isConnected()) {\n\t\t\t\tif (data === undefined) data = '';\n\t\t\t\tvar m = new xsockets.message(this.name, topic, data);\n\t\t\t\tthis._transport.socket.send(m);\n\t\t\t}\n\t\t\treturn new xsockets.promise(this, topic);\n\t\t};\n\t\t/**\n\t\t * Send binary data to the XSockets controller\n\t\t * @param topic - topic/method to call\n\t\t * @param arrayBuffer - the binary data to send\n\t\t * @param data - metadata such as information about the binary data\n\t\t */\n\t\tcontroller.prototype.invokeBinary = function (topic, arrayBuffer, data) {\n\t\t\tif (data === void 0) {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t\ttopic = topic.toLowerCase();\n\t\t\tvar bm = new xsockets.message(this.name, topic, data, arrayBuffer);\n\t\t\tthis._transport.socket.send(bm.createBuffer());\n\t\t\treturn this;\n\t\t};\n\t\t/**\n\t\t * Creates a subscription on the server for the specific topic\n\t\t * @param topic - the topic to subscribe to\n\t\t * @param callback - the callback to fire when a message with the topic is published\n\t\t */\n\t\tcontroller.prototype.subscribe = function (topic, callback) {\n\t\t\ttopic = topic.toLowerCase();\n\t\t\tthis.on(topic, callback);\n\t\t\tif (this._transport.isConnected() && typeof callback === 'function') {\n\t\t\t\tvar m = new xsockets.message(this.name, xsockets.events.subscribe, {\n\t\t\t\t\tT: topic,\n\t\t\t\t\tA: false, //cb ? true : false\n\t\t\t\t});\n\t\t\t\tthis._transport.socket.send(m);\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * Remove the subscription from the server\n\t\t * @param topic - the topic to cancel the subscription for\n\t\t */\n\t\tcontroller.prototype.unsubscribe = function (topic) {\n\t\t\ttopic = topic.toLowerCase();\n\t\t\tdelete this._subscriptions[topic];\n\t\t\tif (this._transport.isConnected()) {\n\t\t\t\tvar m = new xsockets.message(this.name, xsockets.events.unsubscribe, {\n\t\t\t\t\tT: topic,\n\t\t\t\t\tA: false,\n\t\t\t\t});\n\t\t\t\tthis._transport.socket.send(m);\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * Publish a message for a specific topic.\n\t\t * @param topic - topic for publish message\n\t\t * @param data - data to publish\n\t\t */\n\t\tcontroller.prototype.publish = function (topic, data) {\n\t\t\ttopic = topic.toLowerCase();\n\t\t\tthis.invoke(topic, data);\n\t\t};\n\t\tcontroller.prototype.setProperty = function (name, value) {\n\t\t\tthis.invoke('set_' + name, value);\n\t\t};\n\t\tcontroller.prototype.getProperty = function (name, callback) {\n\t\t\tvar that = this;\n\t\t\tthis.on('get_' + name, function (d) {\n\t\t\t\tthat.off('get_' + name);\n\t\t\t\tcallback(d);\n\t\t\t});\n\t\t\tthis.invoke('get_' + name, undefined);\n\t\t};\n\t\treturn controller;\n\t})();\n\txsockets.controller = controller;\n})(xsockets || (xsockets = {}));\nvar xsockets;\n(function (xsockets) {\n\t(function (messageType) {\n\t\tmessageType[(messageType['text'] = 0)] = 'text';\n\t\tmessageType[(messageType['binary'] = 1)] = 'binary';\n\t})(xsockets.messageType || (xsockets.messageType = {}));\n\tvar messageType = xsockets.messageType;\n})(xsockets || (xsockets = {}));\nvar xsockets;\n(function (xsockets) {\n\tvar message = (function () {\n\t\t/**\n\t\t * Ctor for message\n\t\t * @param controller - the controller name\n\t\t * @param topic - the name of the server-side method\n\t\t * @param data - the object received (or to send)\n\t\t */\n\t\tfunction message(controller, topic, data, binary) {\n\t\t\tif (data === void 0) {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t\tif (binary === void 0) {\n\t\t\t\tbinary = undefined;\n\t\t\t}\n\t\t\tthis.C = controller;\n\t\t\tthis.T = topic;\n\t\t\tthis.B = binary;\n\t\t\tif (!xsockets.utils.isJson(data)) {\n\t\t\t\tthis.D = JSON.stringify(data);\n\t\t\t} else {\n\t\t\t\tthis.D = data;\n\t\t\t}\n\t\t\tif (this.B == undefined) {\n\t\t\t\tthis.messageType = xsockets.messageType.text;\n\t\t\t} else {\n\t\t\t\tthis.messageType = xsockets.messageType.binary;\n\t\t\t}\n\t\t}\n\t\t/**\n\t\t * Use this to create a binary message to send to the server\n\t\t * The object need to have the arraybuffer (B) set for this to work\n\t\t */\n\t\tmessage.prototype.createBuffer = function () {\n\t\t\tvar payload = this.toString();\n\t\t\tvar header = new Uint8Array(this.longToByteArray(payload.length));\n\t\t\treturn this.appendBuffer(this.appendBuffer(header, this.stringToBuffer(payload)), this.B);\n\t\t};\n\t\t/**\n\t\t * Extract a message from binary data received from the server\n\t\t */\n\t\tmessage.prototype.extractMessage = function () {\n\t\t\tvar ab2str = function (buf) {\n\t\t\t\treturn String.fromCharCode.apply(null, new Uint16Array(buf));\n\t\t\t};\n\t\t\tvar byteArrayToLong = function (byteArray) {\n\t\t\t\tvar value = 0;\n\t\t\t\tfor (var i = byteArray.byteLength - 1; i >= 0; i--) {\n\t\t\t\t\tvalue = value * 256 + byteArray[i];\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t};\n\t\t\tvar header = new Uint8Array(this.B, 0, 8);\n\t\t\tvar payloadLength = byteArrayToLong(header);\n\t\t\tvar offset = 8 + byteArrayToLong(header);\n\t\t\tvar buffer = new Uint8Array(this.B, offset, this.B.byteLength - offset);\n\t\t\tvar str = new Uint8Array(this.B, 8, payloadLength);\n\t\t\tvar result = this.parse(ab2str(str), buffer);\n\t\t\tresult.D = typeof result.D === 'object' ? result.D : JSON.parse(result.D);\n\t\t\treturn result;\n\t\t};\n\t\tmessage.prototype.parse = function (text, binary) {\n\t\t\tvar data = JSON.parse(text);\n\t\t\treturn new message(data.C, data.T, data.D || JSON.stringify({}), binary);\n\t\t};\n\t\t/**\n\t\t * Return the string representation of the imessage\n\t\t */\n\t\tmessage.prototype.toString = function () {\n\t\t\treturn JSON.stringify({ C: this.C, D: this.D, T: this.T, Q: this.Q, R: this.R, I: this.I });\n\t\t};\n\t\tmessage.prototype.appendBuffer = function (a, b) {\n\t\t\tvar c = new Uint8Array(a.byteLength + b.byteLength);\n\t\t\tc.set(new Uint8Array(a), 0);\n\t\t\tc.set(new Uint8Array(b), a.byteLength);\n\t\t\treturn c.buffer;\n\t\t};\n\t\tmessage.prototype.stringToBuffer = function (str) {\n\t\t\tvar i,\n\t\t\t\tlen = str.length,\n\t\t\t\tarr = new Array(len);\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tarr[i] = str.charCodeAt(i) & 0xff;\n\t\t\t}\n\t\t\treturn new Uint8Array(arr).buffer;\n\t\t};\n\t\tmessage.prototype.longToByteArray = function (size) {\n\t\t\tvar byteArray = [0, 0, 0, 0, 0, 0, 0, 0];\n\t\t\tfor (var index = 0; index < byteArray.length; index++) {\n\t\t\t\tvar _byte = size & 0xff;\n\t\t\t\tbyteArray[index] = _byte;\n\t\t\t\tsize = (size - _byte) / 256;\n\t\t\t}\n\t\t\treturn byteArray;\n\t\t};\n\t\treturn message;\n\t})();\n\txsockets.message = message;\n})(xsockets || (xsockets = {}));\n/**\n * Static info about the xsockets client, such as events and version.\n */\nvar xsockets;\n(function (xsockets) {\n\txsockets.version = '6.0.0-pre';\n\tvar events = (function () {\n\t\tfunction events() {}\n\t\tevents.authfailed = '0';\n\t\tevents.init = '1';\n\t\tevents.open = '2';\n\t\tevents.close = '3';\n\t\tevents.error = '4';\n\t\tevents.subscribe = '5';\n\t\tevents.unsubscribe = '6';\n\t\tevents.ping = '7';\n\t\tevents.pong = '8';\n\t\treturn events;\n\t})();\n\txsockets.events = events;\n\t/**\n\t * Will probably be removed in v6, not used rigth now.\n\t */\n\tvar storage = (function () {\n\t\tfunction storage() {}\n\t\tstorage.set = 's1';\n\t\tstorage.get = 's2';\n\t\tstorage.clear = 's3';\n\t\tstorage.remove = 's4';\n\t\treturn storage;\n\t})();\n\txsockets.storage = storage;\n\tvar utils = (function () {\n\t\tfunction utils() {}\n\t\tutils.guid = function () {\n\t\t\tvar a, b;\n\t\t\tfor (b = a = ''; a++ < 36; b += (a * 51) & 52 ? (a ^ 15 ? 8 ^ (Math.random() * (a ^ 20 ? 16 : 4)) : 4).toString(16) : '-');\n\t\t\treturn b;\n\t\t};\n\t\tutils.isJson = function (str) {\n\t\t\ttry {\n\t\t\t\tJSON.parse(str);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\treturn utils;\n\t})();\n\txsockets.utils = utils;\n})(xsockets || (xsockets = {}));\nvar xsockets;\n(function (xsockets) {\n\tvar promise = (function () {\n\t\t/**\n\t\t * Ctor for promise, that attaches the promise to a controller and a topic\n\t\t * @param controller - the controller instance that is communicating\n\t\t * @param name - the name of the method that expects to return a result\n\t\t */\n\t\tfunction promise(controller, name) {\n\t\t\tthis._controller = controller;\n\t\t\tthis._name = name;\n\t\t}\n\t\t/**\n\t\t * Adds a callback for a call the the server-side that is expected to return a result\n\t\t * @param fn\n\t\t */\n\t\tpromise.prototype.then = function (fn) {\n\t\t\tthis._controller.promises[this._name] = fn;\n\t\t};\n\t\treturn promise;\n\t})();\n\txsockets.promise = promise;\n})(xsockets || (xsockets = {}));\n/**\n * XSockets.NET - WebSocket-client transport\n */\nvar xsockets;\n(function (xsockets) {\n\tvar client = (function () {\n\t\t/**\n\t\t * Ctor for transport, example new xsocketsClient('ws://somehost.com:80',['foo', 'bar']);\n\t\t * @param server - uri to server, example ws://somehost.com:80\n\t\t * @param controllers - array of controllers use at startup, example ['foo','bar']\n\t\t */\n\t\tfunction client(server, controllers) {\n\t\t\tif (controllers === void 0) {\n\t\t\t\tcontrollers = [];\n\t\t\t}\n\t\t\tthis._autoReconnect = false;\n\t\t\tthis._autoReconnectTimeout = 5000;\n\t\t\tthis._readyState = WebSocket.CLOSED;\n\t\t\tthis.onOpen = function (event) {};\n\t\t\tthis.onAuthenticationFailed = function (event) {};\n\t\t\tthis.onClose = function (event) {};\n\t\t\tthis.onMessage = function (event) {};\n\t\t\tthis.onError = function (event) {};\n\t\t\tthis._parameters = {};\n\t\t\tthis._persistentId = localStorage.getItem(server);\n\t\t\tthis._server = server;\n\t\t\tthis.subprotocol = 'XSocketsNET';\n\t\t\tthis._controllers = new Array();\n\t\t\tfor (var c in controllers) {\n\t\t\t\tthis._controllers.push(new xsockets.controller(this, controllers[c].toLowerCase()));\n\t\t\t}\n\t\t}\n\t\t/**\n\t\t * Enables/disables the autoreconnect feature\n\t\t * @param enabled - sets the current state, default = true\n\t\t * @param timeout - timeout in ms, default = 5000\n\t\t */\n\t\tclient.prototype.autoReconnect = function (enabled, timeout) {\n\t\t\tif (enabled === void 0) {\n\t\t\t\tenabled = true;\n\t\t\t}\n\t\t\tif (timeout === void 0) {\n\t\t\t\ttimeout = 5000;\n\t\t\t}\n\t\t\tthis._autoReconnect = enabled;\n\t\t\tthis._autoReconnectTimeout = timeout;\n\t\t};\n\t\t/**\n\t\t * Set the parameters that you want to pass in with the connection.\n\t\t * Do this before calling open\n\t\t * @param params - parameters to pass in, example: {foo:'bar',baz:123}\n\t\t */\n\t\tclient.prototype.setParameters = function (params) {\n\t\t\tthis._parameters = params;\n\t\t};\n\t\t/**\n\t\t * Call before calling open\n\t\t * @param guid - sets the persistentid for the connection\n\t\t */\n\t\tclient.prototype.setPersistentId = function (guid) {\n\t\t\tthis._persistentId = guid;\n\t\t\tlocalStorage.setItem(this._server, this._persistentId);\n\t\t};\n\t\t/**\n\t\t * Opens the transport (socket) and setup all basic events (open, close, onmessage, onerror)\n\t\t */\n\t\tclient.prototype.open = function () {\n\t\t\tvar _this = this;\n\t\t\tvar that = this;\n\t\t\tif (this._persistentId) this._parameters['persistentid'] = this._persistentId;\n\t\t\tif (this.socket !== undefined && this.socket.readyState == WebSocket.OPEN) return;\n\t\t\tthis.socket = new WebSocket(this._server + this.querystring());\n\t\t\tthis.socket.binaryType = 'arraybuffer';\n\t\t\tthis.socket.onopen = function (event) {\n\t\t\t\t_this._readyState = WebSocket.OPEN;\n\t\t\t\t_this.onOpen(event);\n\t\t\t\t// Open all controllers\n\t\t\t\tfor (var c in _this._controllers) {\n\t\t\t\t\t_this.sendtext(new xsockets.message(_this._controllers[c].name, xsockets.events.init));\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.socket.onclose = function (event) {\n\t\t\t\t_this.socket = undefined;\n\t\t\t\t//Fire close if it was ever opened\n\t\t\t\tif (_this._readyState == WebSocket.OPEN) {\n\t\t\t\t\t_this.onClose(event);\n\t\t\t\t\t//Close all controllers\n\t\t\t\t\tfor (var c in _this._controllers) {\n\t\t\t\t\t\t_this._controllers[c].close();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_this._readyState = WebSocket.CLOSED;\n\t\t\t\tif (_this._autoReconnect) {\n\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\tthat.open();\n\t\t\t\t\t}, _this._autoReconnectTimeout);\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.socket.onmessage = function (event) {\n\t\t\t\tif (typeof event.data === 'string') {\n\t\t\t\t\t// TextMessage\n\t\t\t\t\tvar d = JSON.parse(event.data);\n\t\t\t\t\t// TODO: if owin sends a fake ping respond with fake pong. Microsoft did not implement ping/pong following RFC6455\n\t\t\t\t\tvar m = new xsockets.message(d.C, d.T, d.D, undefined);\n\t\t\t\t\tif (m.T === xsockets.events.open) {\n\t\t\t\t\t\t_this.setPersistentId(JSON.parse(m.D).PI);\n\t\t\t\t\t}\n\t\t\t\t\tif (m.T === xsockets.events.error) {\n\t\t\t\t\t\t_this.onError(d);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (m.T === xsockets.events.authfailed) {\n\t\t\t\t\t\t_this.onAuthenticationFailed(m.D);\n\t\t\t\t\t\t_this.close(false);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar c = _this.controller(m.C, false);\n\t\t\t\t\tif (c == undefined) {\n\t\t\t\t\t\t_this.onMessage(d);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tc.dispatchEvent(m);\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof event.data === 'object') {\n\t\t\t\t\t// BinaryMessage\n\t\t\t\t\tvar bm = new xsockets.message('', '', '', event.data);\n\t\t\t\t\tvar bd = bm.extractMessage();\n\t\t\t\t\tvar c = _this.controller(bd.C, false);\n\t\t\t\t\tif (c == undefined) {\n\t\t\t\t\t\t_this.onMessage(event.data);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tc.dispatchEvent(bd);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.socket.onerror = function (event) {\n\t\t\t\t_this.onError(event);\n\t\t\t};\n\t\t};\n\t\t/**\n\t\t * Close the transport (socket)\n\t\t * @param autoReconnect - if true the transport will try to reconnect, default = false\n\t\t */\n\t\tclient.prototype.close = function (autoReconnect) {\n\t\t\tif (autoReconnect === void 0) {\n\t\t\t\tautoReconnect = false;\n\t\t\t}\n\t\t\tthis._autoReconnect = autoReconnect;\n\t\t\tif (this.socket != undefined) this.socket.close();\n\t\t};\n\t\t/**\n\t\t * Returns the instance of a specific controller\n\t\t * @param name - the name of the controller to fetch\n\t\t * @param createNewInstanceIfMissing - if true a new instance will be created, default = true\n\t\t */\n\t\tclient.prototype.controller = function (name, createNewInstanceIfMissing) {\n\t\t\tif (createNewInstanceIfMissing === void 0) {\n\t\t\t\tcreateNewInstanceIfMissing = true;\n\t\t\t}\n\t\t\tvar instance = undefined;\n\t\t\tfor (var c in this._controllers) {\n\t\t\t\tif (this._controllers[c].name === name.toLowerCase()) {\n\t\t\t\t\tinstance = this._controllers[c];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (instance === undefined && createNewInstanceIfMissing) {\n\t\t\t\tinstance = new xsockets.controller(this, name.toLocaleLowerCase());\n\t\t\t\tthis._controllers.push(instance);\n\t\t\t\tthis.sendtext(new xsockets.message(instance.name, xsockets.events.init));\n\t\t\t}\n\t\t\treturn instance;\n\t\t};\n\t\t/**\n\t\t * Removes a controller from the transport\n\t\t * @param controller - controller instance to dispose\n\t\t */\n\t\tclient.prototype.disposeController = function (controller) {\n\t\t\tvar index = this._controllers.indexOf(controller, 0);\n\t\t\tif (index > -1) {\n\t\t\t\tthis._controllers.splice(index, 1);\n\t\t\t}\n\t\t};\n\t\tclient.prototype.sendtext = function (data) {\n\t\t\tif (this.socket != undefined) {\n\t\t\t\tthis.socket.send(data);\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * Returns true if the socket is open\n\t\t */\n\t\tclient.prototype.isConnected = function () {\n\t\t\treturn this.socket !== undefined && this.socket.readyState === WebSocket.OPEN;\n\t\t};\n\t\tclient.prototype.querystring = function () {\n\t\t\tvar str = '?';\n\t\t\tfor (var key in this._parameters) {\n\t\t\t\tstr += key + '=' + encodeURIComponent(this._parameters[key]) + '&';\n\t\t\t}\n\t\t\tstr = str.slice(0, str.length - 1);\n\t\t\treturn str;\n\t\t};\n\t\treturn client;\n\t})();\n\txsockets.client = client;\n})(xsockets || (xsockets = {}));\n//# sourceMappingURL=xsockets.latest.js.map\n","/*!\n * Platform.js v1.3.6\n * Copyright 2014-2020 Benjamin Tan\n * Copyright 2011-2013 John-David Dalton\n * Available under MIT license\n */\n;(function() {\n 'use strict';\n\n /** Used to determine if values are of the language type `Object`. */\n var objectTypes = {\n 'function': true,\n 'object': true\n };\n\n /** Used as a reference to the global object. */\n var root = (objectTypes[typeof window] && window) || this;\n\n /** Backup possible global object. */\n var oldRoot = root;\n\n /** Detect free variable `exports`. */\n var freeExports = objectTypes[typeof exports] && exports;\n\n /** Detect free variable `module`. */\n var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n\n /** Detect free variable `global` from Node.js or Browserified code and use it as `root`. */\n var freeGlobal = freeExports && freeModule && typeof global == 'object' && global;\n if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) {\n root = freeGlobal;\n }\n\n /**\n * Used as the maximum length of an array-like object.\n * See the [ES6 spec](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength)\n * for more details.\n */\n var maxSafeInteger = Math.pow(2, 53) - 1;\n\n /** Regular expression to detect Opera. */\n var reOpera = /\\bOpera/;\n\n /** Possible global object. */\n var thisBinding = this;\n\n /** Used for native method references. */\n var objectProto = Object.prototype;\n\n /** Used to check for own properties of an object. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to resolve the internal `[[Class]]` of values. */\n var toString = objectProto.toString;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Capitalizes a string value.\n *\n * @private\n * @param {string} string The string to capitalize.\n * @returns {string} The capitalized string.\n */\n function capitalize(string) {\n string = String(string);\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n\n /**\n * A utility function to clean up the OS name.\n *\n * @private\n * @param {string} os The OS name to clean up.\n * @param {string} [pattern] A `RegExp` pattern matching the OS name.\n * @param {string} [label] A label for the OS.\n */\n function cleanupOS(os, pattern, label) {\n // Platform tokens are defined at:\n // http://msdn.microsoft.com/en-us/library/ms537503(VS.85).aspx\n // http://web.archive.org/web/20081122053950/http://msdn.microsoft.com/en-us/library/ms537503(VS.85).aspx\n var data = {\n '10.0': '10',\n '6.4': '10 Technical Preview',\n '6.3': '8.1',\n '6.2': '8',\n '6.1': 'Server 2008 R2 / 7',\n '6.0': 'Server 2008 / Vista',\n '5.2': 'Server 2003 / XP 64-bit',\n '5.1': 'XP',\n '5.01': '2000 SP1',\n '5.0': '2000',\n '4.0': 'NT',\n '4.90': 'ME'\n };\n // Detect Windows version from platform tokens.\n if (pattern && label && /^Win/i.test(os) && !/^Windows Phone /i.test(os) &&\n (data = data[/[\\d.]+$/.exec(os)])) {\n os = 'Windows ' + data;\n }\n // Correct character case and cleanup string.\n os = String(os);\n\n if (pattern && label) {\n os = os.replace(RegExp(pattern, 'i'), label);\n }\n\n os = format(\n os.replace(/ ce$/i, ' CE')\n .replace(/\\bhpw/i, 'web')\n .replace(/\\bMacintosh\\b/, 'Mac OS')\n .replace(/_PowerPC\\b/i, ' OS')\n .replace(/\\b(OS X) [^ \\d]+/i, '$1')\n .replace(/\\bMac (OS X)\\b/, '$1')\n .replace(/\\/(\\d)/, ' $1')\n .replace(/_/g, '.')\n .replace(/(?: BePC|[ .]*fc[ \\d.]+)$/i, '')\n .replace(/\\bx86\\.64\\b/gi, 'x86_64')\n .replace(/\\b(Windows Phone) OS\\b/, '$1')\n .replace(/\\b(Chrome OS \\w+) [\\d.]+\\b/, '$1')\n .split(' on ')[0]\n );\n\n return os;\n }\n\n /**\n * An iteration utility for arrays and objects.\n *\n * @private\n * @param {Array|Object} object The object to iterate over.\n * @param {Function} callback The function called per iteration.\n */\n function each(object, callback) {\n var index = -1,\n length = object ? object.length : 0;\n\n if (typeof length == 'number' && length > -1 && length <= maxSafeInteger) {\n while (++index < length) {\n callback(object[index], index, object);\n }\n } else {\n forOwn(object, callback);\n }\n }\n\n /**\n * Trim and conditionally capitalize string values.\n *\n * @private\n * @param {string} string The string to format.\n * @returns {string} The formatted string.\n */\n function format(string) {\n string = trim(string);\n return /^(?:webOS|i(?:OS|P))/.test(string)\n ? string\n : capitalize(string);\n }\n\n /**\n * Iterates over an object's own properties, executing the `callback` for each.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} callback The function executed per own property.\n */\n function forOwn(object, callback) {\n for (var key in object) {\n if (hasOwnProperty.call(object, key)) {\n callback(object[key], key, object);\n }\n }\n }\n\n /**\n * Gets the internal `[[Class]]` of a value.\n *\n * @private\n * @param {*} value The value.\n * @returns {string} The `[[Class]]`.\n */\n function getClassOf(value) {\n return value == null\n ? capitalize(value)\n : toString.call(value).slice(8, -1);\n }\n\n /**\n * Host objects can return type values that are different from their actual\n * data type. The objects we are concerned with usually return non-primitive\n * types of \"object\", \"function\", or \"unknown\".\n *\n * @private\n * @param {*} object The owner of the property.\n * @param {string} property The property to check.\n * @returns {boolean} Returns `true` if the property value is a non-primitive, else `false`.\n */\n function isHostType(object, property) {\n var type = object != null ? typeof object[property] : 'number';\n return !/^(?:boolean|number|string|undefined)$/.test(type) &&\n (type == 'object' ? !!object[property] : true);\n }\n\n /**\n * Prepares a string for use in a `RegExp` by making hyphens and spaces optional.\n *\n * @private\n * @param {string} string The string to qualify.\n * @returns {string} The qualified string.\n */\n function qualify(string) {\n return String(string).replace(/([ -])(?!$)/g, '$1?');\n }\n\n /**\n * A bare-bones `Array#reduce` like utility function.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function called per iteration.\n * @returns {*} The accumulated result.\n */\n function reduce(array, callback) {\n var accumulator = null;\n each(array, function(value, index) {\n accumulator = callback(accumulator, value, index, array);\n });\n return accumulator;\n }\n\n /**\n * Removes leading and trailing whitespace from a string.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} The trimmed string.\n */\n function trim(string) {\n return String(string).replace(/^ +| +$/g, '');\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Creates a new platform object.\n *\n * @memberOf platform\n * @param {Object|string} [ua=navigator.userAgent] The user agent string or\n * context object.\n * @returns {Object} A platform object.\n */\n function parse(ua) {\n\n /** The environment context object. */\n var context = root;\n\n /** Used to flag when a custom context is provided. */\n var isCustomContext = ua && typeof ua == 'object' && getClassOf(ua) != 'String';\n\n // Juggle arguments.\n if (isCustomContext) {\n context = ua;\n ua = null;\n }\n\n /** Browser navigator object. */\n var nav = context.navigator || {};\n\n /** Browser user agent string. */\n var userAgent = nav.userAgent || '';\n\n ua || (ua = userAgent);\n\n /** Used to flag when `thisBinding` is the [ModuleScope]. */\n var isModuleScope = isCustomContext || thisBinding == oldRoot;\n\n /** Used to detect if browser is like Chrome. */\n var likeChrome = isCustomContext\n ? !!nav.likeChrome\n : /\\bChrome\\b/.test(ua) && !/internal|\\n/i.test(toString.toString());\n\n /** Internal `[[Class]]` value shortcuts. */\n var objectClass = 'Object',\n airRuntimeClass = isCustomContext ? objectClass : 'ScriptBridgingProxyObject',\n enviroClass = isCustomContext ? objectClass : 'Environment',\n javaClass = (isCustomContext && context.java) ? 'JavaPackage' : getClassOf(context.java),\n phantomClass = isCustomContext ? objectClass : 'RuntimeObject';\n\n /** Detect Java environments. */\n var java = /\\bJava/.test(javaClass) && context.java;\n\n /** Detect Rhino. */\n var rhino = java && getClassOf(context.environment) == enviroClass;\n\n /** A character to represent alpha. */\n var alpha = java ? 'a' : '\\u03b1';\n\n /** A character to represent beta. */\n var beta = java ? 'b' : '\\u03b2';\n\n /** Browser document object. */\n var doc = context.document || {};\n\n /**\n * Detect Opera browser (Presto-based).\n * http://www.howtocreate.co.uk/operaStuff/operaObject.html\n * http://dev.opera.com/articles/view/opera-mini-web-content-authoring-guidelines/#operamini\n */\n var opera = context.operamini || context.opera;\n\n /** Opera `[[Class]]`. */\n var operaClass = reOpera.test(operaClass = (isCustomContext && opera) ? opera['[[Class]]'] : getClassOf(opera))\n ? operaClass\n : (opera = null);\n\n /*------------------------------------------------------------------------*/\n\n /** Temporary variable used over the script's lifetime. */\n var data;\n\n /** The CPU architecture. */\n var arch = ua;\n\n /** Platform description array. */\n var description = [];\n\n /** Platform alpha/beta indicator. */\n var prerelease = null;\n\n /** A flag to indicate that environment features should be used to resolve the platform. */\n var useFeatures = ua == userAgent;\n\n /** The browser/environment version. */\n var version = useFeatures && opera && typeof opera.version == 'function' && opera.version();\n\n /** A flag to indicate if the OS ends with \"/ Version\" */\n var isSpecialCasedOS;\n\n /* Detectable layout engines (order is important). */\n var layout = getLayout([\n { 'label': 'EdgeHTML', 'pattern': 'Edge' },\n 'Trident',\n { 'label': 'WebKit', 'pattern': 'AppleWebKit' },\n 'iCab',\n 'Presto',\n 'NetFront',\n 'Tasman',\n 'KHTML',\n 'Gecko'\n ]);\n\n /* Detectable browser names (order is important). */\n var name = getName([\n 'Adobe AIR',\n 'Arora',\n 'Avant Browser',\n 'Breach',\n 'Camino',\n 'Electron',\n 'Epiphany',\n 'Fennec',\n 'Flock',\n 'Galeon',\n 'GreenBrowser',\n 'iCab',\n 'Iceweasel',\n 'K-Meleon',\n 'Konqueror',\n 'Lunascape',\n 'Maxthon',\n { 'label': 'Microsoft Edge', 'pattern': '(?:Edge|Edg|EdgA|EdgiOS)' },\n 'Midori',\n 'Nook Browser',\n 'PaleMoon',\n 'PhantomJS',\n 'Raven',\n 'Rekonq',\n 'RockMelt',\n { 'label': 'Samsung Internet', 'pattern': 'SamsungBrowser' },\n 'SeaMonkey',\n { 'label': 'Silk', 'pattern': '(?:Cloud9|Silk-Accelerated)' },\n 'Sleipnir',\n 'SlimBrowser',\n { 'label': 'SRWare Iron', 'pattern': 'Iron' },\n 'Sunrise',\n 'Swiftfox',\n 'Vivaldi',\n 'Waterfox',\n 'WebPositive',\n { 'label': 'Yandex Browser', 'pattern': 'YaBrowser' },\n { 'label': 'UC Browser', 'pattern': 'UCBrowser' },\n 'Opera Mini',\n { 'label': 'Opera Mini', 'pattern': 'OPiOS' },\n 'Opera',\n { 'label': 'Opera', 'pattern': 'OPR' },\n 'Chromium',\n 'Chrome',\n { 'label': 'Chrome', 'pattern': '(?:HeadlessChrome)' },\n { 'label': 'Chrome Mobile', 'pattern': '(?:CriOS|CrMo)' },\n { 'label': 'Firefox', 'pattern': '(?:Firefox|Minefield)' },\n { 'label': 'Firefox for iOS', 'pattern': 'FxiOS' },\n { 'label': 'IE', 'pattern': 'IEMobile' },\n { 'label': 'IE', 'pattern': 'MSIE' },\n 'Safari'\n ]);\n\n /* Detectable products (order is important). */\n var product = getProduct([\n { 'label': 'BlackBerry', 'pattern': 'BB10' },\n 'BlackBerry',\n { 'label': 'Galaxy S', 'pattern': 'GT-I9000' },\n { 'label': 'Galaxy S2', 'pattern': 'GT-I9100' },\n { 'label': 'Galaxy S3', 'pattern': 'GT-I9300' },\n { 'label': 'Galaxy S4', 'pattern': 'GT-I9500' },\n { 'label': 'Galaxy S5', 'pattern': 'SM-G900' },\n { 'label': 'Galaxy S6', 'pattern': 'SM-G920' },\n { 'label': 'Galaxy S6 Edge', 'pattern': 'SM-G925' },\n { 'label': 'Galaxy S7', 'pattern': 'SM-G930' },\n { 'label': 'Galaxy S7 Edge', 'pattern': 'SM-G935' },\n 'Google TV',\n 'Lumia',\n 'iPad',\n 'iPod',\n 'iPhone',\n 'Kindle',\n { 'label': 'Kindle Fire', 'pattern': '(?:Cloud9|Silk-Accelerated)' },\n 'Nexus',\n 'Nook',\n 'PlayBook',\n 'PlayStation Vita',\n 'PlayStation',\n 'TouchPad',\n 'Transformer',\n { 'label': 'Wii U', 'pattern': 'WiiU' },\n 'Wii',\n 'Xbox One',\n { 'label': 'Xbox 360', 'pattern': 'Xbox' },\n 'Xoom'\n ]);\n\n /* Detectable manufacturers. */\n var manufacturer = getManufacturer({\n 'Apple': { 'iPad': 1, 'iPhone': 1, 'iPod': 1 },\n 'Alcatel': {},\n 'Archos': {},\n 'Amazon': { 'Kindle': 1, 'Kindle Fire': 1 },\n 'Asus': { 'Transformer': 1 },\n 'Barnes & Noble': { 'Nook': 1 },\n 'BlackBerry': { 'PlayBook': 1 },\n 'Google': { 'Google TV': 1, 'Nexus': 1 },\n 'HP': { 'TouchPad': 1 },\n 'HTC': {},\n 'Huawei': {},\n 'Lenovo': {},\n 'LG': {},\n 'Microsoft': { 'Xbox': 1, 'Xbox One': 1 },\n 'Motorola': { 'Xoom': 1 },\n 'Nintendo': { 'Wii U': 1, 'Wii': 1 },\n 'Nokia': { 'Lumia': 1 },\n 'Oppo': {},\n 'Samsung': { 'Galaxy S': 1, 'Galaxy S2': 1, 'Galaxy S3': 1, 'Galaxy S4': 1 },\n 'Sony': { 'PlayStation': 1, 'PlayStation Vita': 1 },\n 'Xiaomi': { 'Mi': 1, 'Redmi': 1 }\n });\n\n /* Detectable operating systems (order is important). */\n var os = getOS([\n 'Windows Phone',\n 'KaiOS',\n 'Android',\n 'CentOS',\n { 'label': 'Chrome OS', 'pattern': 'CrOS' },\n 'Debian',\n { 'label': 'DragonFly BSD', 'pattern': 'DragonFly' },\n 'Fedora',\n 'FreeBSD',\n 'Gentoo',\n 'Haiku',\n 'Kubuntu',\n 'Linux Mint',\n 'OpenBSD',\n 'Red Hat',\n 'SuSE',\n 'Ubuntu',\n 'Xubuntu',\n 'Cygwin',\n 'Symbian OS',\n 'hpwOS',\n 'webOS ',\n 'webOS',\n 'Tablet OS',\n 'Tizen',\n 'Linux',\n 'Mac OS X',\n 'Macintosh',\n 'Mac',\n 'Windows 98;',\n 'Windows '\n ]);\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Picks the layout engine from an array of guesses.\n *\n * @private\n * @param {Array} guesses An array of guesses.\n * @returns {null|string} The detected layout engine.\n */\n function getLayout(guesses) {\n return reduce(guesses, function(result, guess) {\n return result || RegExp('\\\\b' + (\n guess.pattern || qualify(guess)\n ) + '\\\\b', 'i').exec(ua) && (guess.label || guess);\n });\n }\n\n /**\n * Picks the manufacturer from an array of guesses.\n *\n * @private\n * @param {Array} guesses An object of guesses.\n * @returns {null|string} The detected manufacturer.\n */\n function getManufacturer(guesses) {\n return reduce(guesses, function(result, value, key) {\n // Lookup the manufacturer by product or scan the UA for the manufacturer.\n return result || (\n value[product] ||\n value[/^[a-z]+(?: +[a-z]+\\b)*/i.exec(product)] ||\n RegExp('\\\\b' + qualify(key) + '(?:\\\\b|\\\\w*\\\\d)', 'i').exec(ua)\n ) && key;\n });\n }\n\n /**\n * Picks the browser name from an array of guesses.\n *\n * @private\n * @param {Array} guesses An array of guesses.\n * @returns {null|string} The detected browser name.\n */\n function getName(guesses) {\n return reduce(guesses, function(result, guess) {\n return result || RegExp('\\\\b' + (\n guess.pattern || qualify(guess)\n ) + '\\\\b', 'i').exec(ua) && (guess.label || guess);\n });\n }\n\n /**\n * Picks the OS name from an array of guesses.\n *\n * @private\n * @param {Array} guesses An array of guesses.\n * @returns {null|string} The detected OS name.\n */\n function getOS(guesses) {\n return reduce(guesses, function(result, guess) {\n var pattern = guess.pattern || qualify(guess);\n if (!result && (result =\n RegExp('\\\\b' + pattern + '(?:/[\\\\d.]+|[ \\\\w.]*)', 'i').exec(ua)\n )) {\n result = cleanupOS(result, pattern, guess.label || guess);\n }\n return result;\n });\n }\n\n /**\n * Picks the product name from an array of guesses.\n *\n * @private\n * @param {Array} guesses An array of guesses.\n * @returns {null|string} The detected product name.\n */\n function getProduct(guesses) {\n return reduce(guesses, function(result, guess) {\n var pattern = guess.pattern || qualify(guess);\n if (!result && (result =\n RegExp('\\\\b' + pattern + ' *\\\\d+[.\\\\w_]*', 'i').exec(ua) ||\n RegExp('\\\\b' + pattern + ' *\\\\w+-[\\\\w]*', 'i').exec(ua) ||\n RegExp('\\\\b' + pattern + '(?:; *(?:[a-z]+[_-])?[a-z]+\\\\d+|[^ ();-]*)', 'i').exec(ua)\n )) {\n // Split by forward slash and append product version if needed.\n if ((result = String((guess.label && !RegExp(pattern, 'i').test(guess.label)) ? guess.label : result).split('/'))[1] && !/[\\d.]+/.test(result[0])) {\n result[0] += ' ' + result[1];\n }\n // Correct character case and cleanup string.\n guess = guess.label || guess;\n result = format(result[0]\n .replace(RegExp(pattern, 'i'), guess)\n .replace(RegExp('; *(?:' + guess + '[_-])?', 'i'), ' ')\n .replace(RegExp('(' + guess + ')[-_.]?(\\\\w)', 'i'), '$1 $2'));\n }\n return result;\n });\n }\n\n /**\n * Resolves the version using an array of UA patterns.\n *\n * @private\n * @param {Array} patterns An array of UA patterns.\n * @returns {null|string} The detected version.\n */\n function getVersion(patterns) {\n return reduce(patterns, function(result, pattern) {\n return result || (RegExp(pattern +\n '(?:-[\\\\d.]+/|(?: for [\\\\w-]+)?[ /-])([\\\\d.]+[^ ();/_-]*)', 'i').exec(ua) || 0)[1] || null;\n });\n }\n\n /**\n * Returns `platform.description` when the platform object is coerced to a string.\n *\n * @name toString\n * @memberOf platform\n * @returns {string} Returns `platform.description` if available, else an empty string.\n */\n function toStringPlatform() {\n return this.description || '';\n }\n\n /*------------------------------------------------------------------------*/\n\n // Convert layout to an array so we can add extra details.\n layout && (layout = [layout]);\n\n // Detect Android products.\n // Browsers on Android devices typically provide their product IDS after \"Android;\"\n // up to \"Build\" or \") AppleWebKit\".\n // Example:\n // \"Mozilla/5.0 (Linux; Android 8.1.0; Moto G (5) Plus) AppleWebKit/537.36\n // (KHTML, like Gecko) Chrome/70.0.3538.80 Mobile Safari/537.36\"\n if (/\\bAndroid\\b/.test(os) && !product &&\n (data = /\\bAndroid[^;]*;(.*?)(?:Build|\\) AppleWebKit)\\b/i.exec(ua))) {\n product = trim(data[1])\n // Replace any language codes (eg. \"en-US\").\n .replace(/^[a-z]{2}-[a-z]{2};\\s*/i, '')\n || null;\n }\n // Detect product names that contain their manufacturer's name.\n if (manufacturer && !product) {\n product = getProduct([manufacturer]);\n } else if (manufacturer && product) {\n product = product\n .replace(RegExp('^(' + qualify(manufacturer) + ')[-_.\\\\s]', 'i'), manufacturer + ' ')\n .replace(RegExp('^(' + qualify(manufacturer) + ')[-_.]?(\\\\w)', 'i'), manufacturer + ' $2');\n }\n // Clean up Google TV.\n if ((data = /\\bGoogle TV\\b/.exec(product))) {\n product = data[0];\n }\n // Detect simulators.\n if (/\\bSimulator\\b/i.test(ua)) {\n product = (product ? product + ' ' : '') + 'Simulator';\n }\n // Detect Opera Mini 8+ running in Turbo/Uncompressed mode on iOS.\n if (name == 'Opera Mini' && /\\bOPiOS\\b/.test(ua)) {\n description.push('running in Turbo/Uncompressed mode');\n }\n // Detect IE Mobile 11.\n if (name == 'IE' && /\\blike iPhone OS\\b/.test(ua)) {\n data = parse(ua.replace(/like iPhone OS/, ''));\n manufacturer = data.manufacturer;\n product = data.product;\n }\n // Detect iOS.\n else if (/^iP/.test(product)) {\n name || (name = 'Safari');\n os = 'iOS' + ((data = / OS ([\\d_]+)/i.exec(ua))\n ? ' ' + data[1].replace(/_/g, '.')\n : '');\n }\n // Detect Kubuntu.\n else if (name == 'Konqueror' && /^Linux\\b/i.test(os)) {\n os = 'Kubuntu';\n }\n // Detect Android browsers.\n else if ((manufacturer && manufacturer != 'Google' &&\n ((/Chrome/.test(name) && !/\\bMobile Safari\\b/i.test(ua)) || /\\bVita\\b/.test(product))) ||\n (/\\bAndroid\\b/.test(os) && /^Chrome/.test(name) && /\\bVersion\\//i.test(ua))) {\n name = 'Android Browser';\n os = /\\bAndroid\\b/.test(os) ? os : 'Android';\n }\n // Detect Silk desktop/accelerated modes.\n else if (name == 'Silk') {\n if (!/\\bMobi/i.test(ua)) {\n os = 'Android';\n description.unshift('desktop mode');\n }\n if (/Accelerated *= *true/i.test(ua)) {\n description.unshift('accelerated');\n }\n }\n // Detect UC Browser speed mode.\n else if (name == 'UC Browser' && /\\bUCWEB\\b/.test(ua)) {\n description.push('speed mode');\n }\n // Detect PaleMoon identifying as Firefox.\n else if (name == 'PaleMoon' && (data = /\\bFirefox\\/([\\d.]+)\\b/.exec(ua))) {\n description.push('identifying as Firefox ' + data[1]);\n }\n // Detect Firefox OS and products running Firefox.\n else if (name == 'Firefox' && (data = /\\b(Mobile|Tablet|TV)\\b/i.exec(ua))) {\n os || (os = 'Firefox OS');\n product || (product = data[1]);\n }\n // Detect false positives for Firefox/Safari.\n else if (!name || (data = !/\\bMinefield\\b/i.test(ua) && /\\b(?:Firefox|Safari)\\b/.exec(name))) {\n // Escape the `/` for Firefox 1.\n if (name && !product && /[\\/,]|^[^(]+?\\)/.test(ua.slice(ua.indexOf(data + '/') + 8))) {\n // Clear name of false positives.\n name = null;\n }\n // Reassign a generic name.\n if ((data = product || manufacturer || os) &&\n (product || manufacturer || /\\b(?:Android|Symbian OS|Tablet OS|webOS)\\b/.test(os))) {\n name = /[a-z]+(?: Hat)?/i.exec(/\\bAndroid\\b/.test(os) ? os : data) + ' Browser';\n }\n }\n // Add Chrome version to description for Electron.\n else if (name == 'Electron' && (data = (/\\bChrome\\/([\\d.]+)\\b/.exec(ua) || 0)[1])) {\n description.push('Chromium ' + data);\n }\n // Detect non-Opera (Presto-based) versions (order is important).\n if (!version) {\n version = getVersion([\n '(?:Cloud9|CriOS|CrMo|Edge|Edg|EdgA|EdgiOS|FxiOS|HeadlessChrome|IEMobile|Iron|Opera ?Mini|OPiOS|OPR|Raven|SamsungBrowser|Silk(?!/[\\\\d.]+$)|UCBrowser|YaBrowser)',\n 'Version',\n qualify(name),\n '(?:Firefox|Minefield|NetFront)'\n ]);\n }\n // Detect stubborn layout engines.\n if ((data =\n layout == 'iCab' && parseFloat(version) > 3 && 'WebKit' ||\n /\\bOpera\\b/.test(name) && (/\\bOPR\\b/.test(ua) ? 'Blink' : 'Presto') ||\n /\\b(?:Midori|Nook|Safari)\\b/i.test(ua) && !/^(?:Trident|EdgeHTML)$/.test(layout) && 'WebKit' ||\n !layout && /\\bMSIE\\b/i.test(ua) && (os == 'Mac OS' ? 'Tasman' : 'Trident') ||\n layout == 'WebKit' && /\\bPlayStation\\b(?! Vita\\b)/i.test(name) && 'NetFront'\n )) {\n layout = [data];\n }\n // Detect Windows Phone 7 desktop mode.\n if (name == 'IE' && (data = (/; *(?:XBLWP|ZuneWP)(\\d+)/i.exec(ua) || 0)[1])) {\n name += ' Mobile';\n os = 'Windows Phone ' + (/\\+$/.test(data) ? data : data + '.x');\n description.unshift('desktop mode');\n }\n // Detect Windows Phone 8.x desktop mode.\n else if (/\\bWPDesktop\\b/i.test(ua)) {\n name = 'IE Mobile';\n os = 'Windows Phone 8.x';\n description.unshift('desktop mode');\n version || (version = (/\\brv:([\\d.]+)/.exec(ua) || 0)[1]);\n }\n // Detect IE 11 identifying as other browsers.\n else if (name != 'IE' && layout == 'Trident' && (data = /\\brv:([\\d.]+)/.exec(ua))) {\n if (name) {\n description.push('identifying as ' + name + (version ? ' ' + version : ''));\n }\n name = 'IE';\n version = data[1];\n }\n // Leverage environment features.\n if (useFeatures) {\n // Detect server-side environments.\n // Rhino has a global function while others have a global object.\n if (isHostType(context, 'global')) {\n if (java) {\n data = java.lang.System;\n arch = data.getProperty('os.arch');\n os = os || data.getProperty('os.name') + ' ' + data.getProperty('os.version');\n }\n if (rhino) {\n try {\n version = context.require('ringo/engine').version.join('.');\n name = 'RingoJS';\n } catch(e) {\n if ((data = context.system) && data.global.system == context.system) {\n name = 'Narwhal';\n os || (os = data[0].os || null);\n }\n }\n if (!name) {\n name = 'Rhino';\n }\n }\n else if (\n typeof context.process == 'object' && !context.process.browser &&\n (data = context.process)\n ) {\n if (typeof data.versions == 'object') {\n if (typeof data.versions.electron == 'string') {\n description.push('Node ' + data.versions.node);\n name = 'Electron';\n version = data.versions.electron;\n } else if (typeof data.versions.nw == 'string') {\n description.push('Chromium ' + version, 'Node ' + data.versions.node);\n name = 'NW.js';\n version = data.versions.nw;\n }\n }\n if (!name) {\n name = 'Node.js';\n arch = data.arch;\n os = data.platform;\n version = /[\\d.]+/.exec(data.version);\n version = version ? version[0] : null;\n }\n }\n }\n // Detect Adobe AIR.\n else if (getClassOf((data = context.runtime)) == airRuntimeClass) {\n name = 'Adobe AIR';\n os = data.flash.system.Capabilities.os;\n }\n // Detect PhantomJS.\n else if (getClassOf((data = context.phantom)) == phantomClass) {\n name = 'PhantomJS';\n version = (data = data.version || null) && (data.major + '.' + data.minor + '.' + data.patch);\n }\n // Detect IE compatibility modes.\n else if (typeof doc.documentMode == 'number' && (data = /\\bTrident\\/(\\d+)/i.exec(ua))) {\n // We're in compatibility mode when the Trident version + 4 doesn't\n // equal the document mode.\n version = [version, doc.documentMode];\n if ((data = +data[1] + 4) != version[1]) {\n description.push('IE ' + version[1] + ' mode');\n layout && (layout[1] = '');\n version[1] = data;\n }\n version = name == 'IE' ? String(version[1].toFixed(1)) : version[0];\n }\n // Detect IE 11 masking as other browsers.\n else if (typeof doc.documentMode == 'number' && /^(?:Chrome|Firefox)\\b/.test(name)) {\n description.push('masking as ' + name + ' ' + version);\n name = 'IE';\n version = '11.0';\n layout = ['Trident'];\n os = 'Windows';\n }\n os = os && format(os);\n }\n // Detect prerelease phases.\n if (version && (data =\n /(?:[ab]|dp|pre|[ab]\\d+pre)(?:\\d+\\+?)?$/i.exec(version) ||\n /(?:alpha|beta)(?: ?\\d)?/i.exec(ua + ';' + (useFeatures && nav.appMinorVersion)) ||\n /\\bMinefield\\b/i.test(ua) && 'a'\n )) {\n prerelease = /b/i.test(data) ? 'beta' : 'alpha';\n version = version.replace(RegExp(data + '\\\\+?$'), '') +\n (prerelease == 'beta' ? beta : alpha) + (/\\d+\\+?/.exec(data) || '');\n }\n // Detect Firefox Mobile.\n if (name == 'Fennec' || name == 'Firefox' && /\\b(?:Android|Firefox OS|KaiOS)\\b/.test(os)) {\n name = 'Firefox Mobile';\n }\n // Obscure Maxthon's unreliable version.\n else if (name == 'Maxthon' && version) {\n version = version.replace(/\\.[\\d.]+/, '.x');\n }\n // Detect Xbox 360 and Xbox One.\n else if (/\\bXbox\\b/i.test(product)) {\n if (product == 'Xbox 360') {\n os = null;\n }\n if (product == 'Xbox 360' && /\\bIEMobile\\b/.test(ua)) {\n description.unshift('mobile mode');\n }\n }\n // Add mobile postfix.\n else if ((/^(?:Chrome|IE|Opera)$/.test(name) || name && !product && !/Browser|Mobi/.test(name)) &&\n (os == 'Windows CE' || /Mobi/i.test(ua))) {\n name += ' Mobile';\n }\n // Detect IE platform preview.\n else if (name == 'IE' && useFeatures) {\n try {\n if (context.external === null) {\n description.unshift('platform preview');\n }\n } catch(e) {\n description.unshift('embedded');\n }\n }\n // Detect BlackBerry OS version.\n // http://docs.blackberry.com/en/developers/deliverables/18169/HTTP_headers_sent_by_BB_Browser_1234911_11.jsp\n else if ((/\\bBlackBerry\\b/.test(product) || /\\bBB10\\b/.test(ua)) && (data =\n (RegExp(product.replace(/ +/g, ' *') + '/([.\\\\d]+)', 'i').exec(ua) || 0)[1] ||\n version\n )) {\n data = [data, /BB10/.test(ua)];\n os = (data[1] ? (product = null, manufacturer = 'BlackBerry') : 'Device Software') + ' ' + data[0];\n version = null;\n }\n // Detect Opera identifying/masking itself as another browser.\n // http://www.opera.com/support/kb/view/843/\n else if (this != forOwn && product != 'Wii' && (\n (useFeatures && opera) ||\n (/Opera/.test(name) && /\\b(?:MSIE|Firefox)\\b/i.test(ua)) ||\n (name == 'Firefox' && /\\bOS X (?:\\d+\\.){2,}/.test(os)) ||\n (name == 'IE' && (\n (os && !/^Win/.test(os) && version > 5.5) ||\n /\\bWindows XP\\b/.test(os) && version > 8 ||\n version == 8 && !/\\bTrident\\b/.test(ua)\n ))\n ) && !reOpera.test((data = parse.call(forOwn, ua.replace(reOpera, '') + ';'))) && data.name) {\n // When \"identifying\", the UA contains both Opera and the other browser's name.\n data = 'ing as ' + data.name + ((data = data.version) ? ' ' + data : '');\n if (reOpera.test(name)) {\n if (/\\bIE\\b/.test(data) && os == 'Mac OS') {\n os = null;\n }\n data = 'identify' + data;\n }\n // When \"masking\", the UA contains only the other browser's name.\n else {\n data = 'mask' + data;\n if (operaClass) {\n name = format(operaClass.replace(/([a-z])([A-Z])/g, '$1 $2'));\n } else {\n name = 'Opera';\n }\n if (/\\bIE\\b/.test(data)) {\n os = null;\n }\n if (!useFeatures) {\n version = null;\n }\n }\n layout = ['Presto'];\n description.push(data);\n }\n // Detect WebKit Nightly and approximate Chrome/Safari versions.\n if ((data = (/\\bAppleWebKit\\/([\\d.]+\\+?)/i.exec(ua) || 0)[1])) {\n // Correct build number for numeric comparison.\n // (e.g. \"532.5\" becomes \"532.05\")\n data = [parseFloat(data.replace(/\\.(\\d)$/, '.0$1')), data];\n // Nightly builds are postfixed with a \"+\".\n if (name == 'Safari' && data[1].slice(-1) == '+') {\n name = 'WebKit Nightly';\n prerelease = 'alpha';\n version = data[1].slice(0, -1);\n }\n // Clear incorrect browser versions.\n else if (version == data[1] ||\n version == (data[2] = (/\\bSafari\\/([\\d.]+\\+?)/i.exec(ua) || 0)[1])) {\n version = null;\n }\n // Use the full Chrome version when available.\n data[1] = (/\\b(?:Headless)?Chrome\\/([\\d.]+)/i.exec(ua) || 0)[1];\n // Detect Blink layout engine.\n if (data[0] == 537.36 && data[2] == 537.36 && parseFloat(data[1]) >= 28 && layout == 'WebKit') {\n layout = ['Blink'];\n }\n // Detect JavaScriptCore.\n // http://stackoverflow.com/questions/6768474/how-can-i-detect-which-javascript-engine-v8-or-jsc-is-used-at-runtime-in-androi\n if (!useFeatures || (!likeChrome && !data[1])) {\n layout && (layout[1] = 'like Safari');\n data = (data = data[0], data < 400 ? 1 : data < 500 ? 2 : data < 526 ? 3 : data < 533 ? 4 : data < 534 ? '4+' : data < 535 ? 5 : data < 537 ? 6 : data < 538 ? 7 : data < 601 ? 8 : data < 602 ? 9 : data < 604 ? 10 : data < 606 ? 11 : data < 608 ? 12 : '12');\n } else {\n layout && (layout[1] = 'like Chrome');\n data = data[1] || (data = data[0], data < 530 ? 1 : data < 532 ? 2 : data < 532.05 ? 3 : data < 533 ? 4 : data < 534.03 ? 5 : data < 534.07 ? 6 : data < 534.10 ? 7 : data < 534.13 ? 8 : data < 534.16 ? 9 : data < 534.24 ? 10 : data < 534.30 ? 11 : data < 535.01 ? 12 : data < 535.02 ? '13+' : data < 535.07 ? 15 : data < 535.11 ? 16 : data < 535.19 ? 17 : data < 536.05 ? 18 : data < 536.10 ? 19 : data < 537.01 ? 20 : data < 537.11 ? '21+' : data < 537.13 ? 23 : data < 537.18 ? 24 : data < 537.24 ? 25 : data < 537.36 ? 26 : layout != 'Blink' ? '27' : '28');\n }\n // Add the postfix of \".x\" or \"+\" for approximate versions.\n layout && (layout[1] += ' ' + (data += typeof data == 'number' ? '.x' : /[.+]/.test(data) ? '' : '+'));\n // Obscure version for some Safari 1-2 releases.\n if (name == 'Safari' && (!version || parseInt(version) > 45)) {\n version = data;\n } else if (name == 'Chrome' && /\\bHeadlessChrome/i.test(ua)) {\n description.unshift('headless');\n }\n }\n // Detect Opera desktop modes.\n if (name == 'Opera' && (data = /\\bzbov|zvav$/.exec(os))) {\n name += ' ';\n description.unshift('desktop mode');\n if (data == 'zvav') {\n name += 'Mini';\n version = null;\n } else {\n name += 'Mobile';\n }\n os = os.replace(RegExp(' *' + data + '$'), '');\n }\n // Detect Chrome desktop mode.\n else if (name == 'Safari' && /\\bChrome\\b/.exec(layout && layout[1])) {\n description.unshift('desktop mode');\n name = 'Chrome Mobile';\n version = null;\n\n if (/\\bOS X\\b/.test(os)) {\n manufacturer = 'Apple';\n os = 'iOS 4.3+';\n } else {\n os = null;\n }\n }\n // Newer versions of SRWare Iron uses the Chrome tag to indicate its version number.\n else if (/\\bSRWare Iron\\b/.test(name) && !version) {\n version = getVersion('Chrome');\n }\n // Strip incorrect OS versions.\n if (version && version.indexOf((data = /[\\d.]+$/.exec(os))) == 0 &&\n ua.indexOf('/' + data + '-') > -1) {\n os = trim(os.replace(data, ''));\n }\n // Ensure OS does not include the browser name.\n if (os && os.indexOf(name) != -1 && !RegExp(name + ' OS').test(os)) {\n os = os.replace(RegExp(' *' + qualify(name) + ' *'), '');\n }\n // Add layout engine.\n if (layout && !/\\b(?:Avant|Nook)\\b/.test(name) && (\n /Browser|Lunascape|Maxthon/.test(name) ||\n name != 'Safari' && /^iOS/.test(os) && /\\bSafari\\b/.test(layout[1]) ||\n /^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Samsung Internet|Sleipnir|SRWare Iron|Vivaldi|Web)/.test(name) && layout[1])) {\n // Don't add layout details to description if they are falsey.\n (data = layout[layout.length - 1]) && description.push(data);\n }\n // Combine contextual information.\n if (description.length) {\n description = ['(' + description.join('; ') + ')'];\n }\n // Append manufacturer to description.\n if (manufacturer && product && product.indexOf(manufacturer) < 0) {\n description.push('on ' + manufacturer);\n }\n // Append product to description.\n if (product) {\n description.push((/^on /.test(description[description.length - 1]) ? '' : 'on ') + product);\n }\n // Parse the OS into an object.\n if (os) {\n data = / ([\\d.+]+)$/.exec(os);\n isSpecialCasedOS = data && os.charAt(os.length - data[0].length - 1) == '/';\n os = {\n 'architecture': 32,\n 'family': (data && !isSpecialCasedOS) ? os.replace(data[0], '') : os,\n 'version': data ? data[1] : null,\n 'toString': function() {\n var version = this.version;\n return this.family + ((version && !isSpecialCasedOS) ? ' ' + version : '') + (this.architecture == 64 ? ' 64-bit' : '');\n }\n };\n }\n // Add browser/OS architecture.\n if ((data = /\\b(?:AMD|IA|Win|WOW|x86_|x)64\\b/i.exec(arch)) && !/\\bi686\\b/i.test(arch)) {\n if (os) {\n os.architecture = 64;\n os.family = os.family.replace(RegExp(' *' + data), '');\n }\n if (\n name && (/\\bWOW64\\b/i.test(ua) ||\n (useFeatures && /\\w(?:86|32)$/.test(nav.cpuClass || nav.platform) && !/\\bWin64; x64\\b/i.test(ua)))\n ) {\n description.unshift('32-bit');\n }\n }\n // Chrome 39 and above on OS X is always 64-bit.\n else if (\n os && /^OS X/.test(os.family) &&\n name == 'Chrome' && parseFloat(version) >= 39\n ) {\n os.architecture = 64;\n }\n\n ua || (ua = null);\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The platform object.\n *\n * @name platform\n * @type Object\n */\n var platform = {};\n\n /**\n * The platform description.\n *\n * @memberOf platform\n * @type string|null\n */\n platform.description = ua;\n\n /**\n * The name of the browser's layout engine.\n *\n * The list of common layout engines include:\n * \"Blink\", \"EdgeHTML\", \"Gecko\", \"Trident\" and \"WebKit\"\n *\n * @memberOf platform\n * @type string|null\n */\n platform.layout = layout && layout[0];\n\n /**\n * The name of the product's manufacturer.\n *\n * The list of manufacturers include:\n * \"Apple\", \"Archos\", \"Amazon\", \"Asus\", \"Barnes & Noble\", \"BlackBerry\",\n * \"Google\", \"HP\", \"HTC\", \"LG\", \"Microsoft\", \"Motorola\", \"Nintendo\",\n * \"Nokia\", \"Samsung\" and \"Sony\"\n *\n * @memberOf platform\n * @type string|null\n */\n platform.manufacturer = manufacturer;\n\n /**\n * The name of the browser/environment.\n *\n * The list of common browser names include:\n * \"Chrome\", \"Electron\", \"Firefox\", \"Firefox for iOS\", \"IE\",\n * \"Microsoft Edge\", \"PhantomJS\", \"Safari\", \"SeaMonkey\", \"Silk\",\n * \"Opera Mini\" and \"Opera\"\n *\n * Mobile versions of some browsers have \"Mobile\" appended to their name:\n * eg. \"Chrome Mobile\", \"Firefox Mobile\", \"IE Mobile\" and \"Opera Mobile\"\n *\n * @memberOf platform\n * @type string|null\n */\n platform.name = name;\n\n /**\n * The alpha/beta release indicator.\n *\n * @memberOf platform\n * @type string|null\n */\n platform.prerelease = prerelease;\n\n /**\n * The name of the product hosting the browser.\n *\n * The list of common products include:\n *\n * \"BlackBerry\", \"Galaxy S4\", \"Lumia\", \"iPad\", \"iPod\", \"iPhone\", \"Kindle\",\n * \"Kindle Fire\", \"Nexus\", \"Nook\", \"PlayBook\", \"TouchPad\" and \"Transformer\"\n *\n * @memberOf platform\n * @type string|null\n */\n platform.product = product;\n\n /**\n * The browser's user agent string.\n *\n * @memberOf platform\n * @type string|null\n */\n platform.ua = ua;\n\n /**\n * The browser/environment version.\n *\n * @memberOf platform\n * @type string|null\n */\n platform.version = name && version;\n\n /**\n * The name of the operating system.\n *\n * @memberOf platform\n * @type Object\n */\n platform.os = os || {\n\n /**\n * The CPU architecture the OS is built for.\n *\n * @memberOf platform.os\n * @type number|null\n */\n 'architecture': null,\n\n /**\n * The family of the OS.\n *\n * Common values include:\n * \"Windows\", \"Windows Server 2008 R2 / 7\", \"Windows Server 2008 / Vista\",\n * \"Windows XP\", \"OS X\", \"Linux\", \"Ubuntu\", \"Debian\", \"Fedora\", \"Red Hat\",\n * \"SuSE\", \"Android\", \"iOS\" and \"Windows Phone\"\n *\n * @memberOf platform.os\n * @type string|null\n */\n 'family': null,\n\n /**\n * The version of the OS.\n *\n * @memberOf platform.os\n * @type string|null\n */\n 'version': null,\n\n /**\n * Returns the OS string.\n *\n * @memberOf platform.os\n * @returns {string} The OS string.\n */\n 'toString': function() { return 'null'; }\n };\n\n platform.parse = parse;\n platform.toString = toStringPlatform;\n\n if (platform.version) {\n description.unshift(version);\n }\n if (platform.name) {\n description.unshift(name);\n }\n if (os && name && !(os == String(os).split(' ')[0] && (os == name.split(' ')[0] || product))) {\n description.push(product ? '(' + os + ')' : 'on ' + os);\n }\n if (description.length) {\n platform.description = description.join(' ');\n }\n return platform;\n }\n\n /*--------------------------------------------------------------------------*/\n\n // Export platform.\n var platform = parse();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like the following:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose platform on the global object to prevent errors when platform is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n root.platform = platform;\n\n // Define as an anonymous module so platform can be aliased through path mapping.\n define(function() {\n return platform;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds an `exports` object.\n else if (freeExports && freeModule) {\n // Export for CommonJS support.\n forOwn(platform, function(value, key) {\n freeExports[key] = value;\n });\n }\n else {\n // Export to the global object.\n root.platform = platform;\n }\n}.call(this));\n"],"x_google_ignoreList":[2]}