{"version":3,"sources":["webpack:///javascripts/user-common-js/header.js","webpack:///webpack/bootstrap c9469eaa0d1980d9bd95?65e0*************************","webpack:///./~/object-assign/index.js?2927*********************","webpack:///./~/console-browserify/index.js?65db*********************","webpack:///./~/process/browser.js?82e4*********************","webpack:///./~/assert/assert.js?9281*********************","webpack:///./~/assert/~/inherits/inherits_browser.js?33ee*********************","webpack:///./~/assert/~/util/support/isBufferBrowser.js?6a7a*********************","webpack:///./~/assert/~/util/util.js?ad78*********************","webpack:///./~/util/~/inherits/inherits_browser.js?aba5*********************","webpack:///./~/util/support/isBufferBrowser.js?8596*********************","webpack:///./~/util/util.js?1e30*********************","webpack:///./es6/user-common-js/header.js","webpack:///./es6/user-common-js/ui/legacy/inquiry.js","webpack:///./~/intro.js/intro.js","webpack:///./source/javascripts/ace/ace-extra.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","0","5","toObject","val","undefined","TypeError","Object","shouldUseNative","assign","test1","String","getOwnPropertyNames","test2","i","fromCharCode","order2","map","n","join","test3","split","forEach","letter","keys","err","getOwnPropertySymbols","hasOwnProperty","prototype","propIsEnumerable","propertyIsEnumerable","target","source","from","symbols","to","s","arguments","length","key","7","global","now","Date","getTime","log","info","console","apply","warn","error","time","label","times","timeEnd","Error","duration","trace","name","message","util","format","stack","dir","object","inspect","consoleAssert","expression","arr","slice","assert","ok","Array","window","functions","tuple","f","this","23","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","e","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","noop","process","nextTick","args","push","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","87","compare","a","b","x","y","Math","min","isBuffer","Buffer","_isBuffer","pToString","obj","toString","isView","arrbuf","ArrayBuffer","DataView","buffer","getName","func","isFunction","functionsHaveNames","str","match","regex","truncate","something","rawname","getMessage","self","actual","operator","expected","fail","stackStartFunction","AssertionError","value","_deepEqual","strict","memos","isDate","isRegExp","multiline","lastIndex","ignoreCase","Float32Array","Float64Array","Uint8Array","actualIndex","indexOf","objEquiv","isArguments","actualVisitedObjects","isPrimitive","getPrototypeOf","aIsArgs","bIsArgs","pSlice","ka","objectKeys","kb","sort","notDeepStrictEqual","expectedException","test","isPrototypeOf","_tryBlock","block","_throws","shouldThrow","userProvidedMessage","isUnwantedException","isError","isUnexpectedException","objectAssign","hasOwn","options","generatedMessage","captureStackTrace","out","fn_name","idx","next_line","substring","inherits","equal","notEqual","deepEqual","deepStrictEqual","notDeepEqual","strictEqual","notStrictEqual","throws","doesNotThrow","ifError","88","create","ctor","superCtor","super_","constructor","enumerable","writable","configurable","TempCtor","89","arg","copy","fill","readUInt8","90","opts","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","styleType","style","styles","arrayToHash","hash","recurseTimes","ret","isString","primitive","formatPrimitive","visibleKeys","formatError","RegExp","base","braces","isArray","toUTCString","output","formatArray","formatProperty","pop","reduceToSingleString","simple","JSON","stringify","replace","isNumber","isNull","l","desc","getOwnPropertyDescriptor","get","set","line","substr","numLinesEst","reduce","prev","cur","ar","isNullOrUndefined","isSymbol","re","isObject","objectToString","d","o","pad","timestamp","getHours","getMinutes","getSeconds","getDate","months","getMonth","prop","formatRegExp","objects","Number","_","deprecate","fn","msg","deprecated","warned","throwDeprecation","traceDeprecation","noDeprecation","debugEnviron","debugs","debuglog","NODE_DEBUG","toUpperCase","pid","bold","italic","underline","inverse","white","grey","black","blue","cyan","green","magenta","red","yellow","special","number","boolean","null","string","date","regexp","origin","add","91","92","93","872","886","openInquiryWindow","url","open","1062","introJs","IntroJs","_targetElement","_introItems","_options","nextLabel","prevLabel","skipLabel","doneLabel","hidePrev","hideNext","tooltipPosition","tooltipClass","highlightClass","exitOnEsc","exitOnOverlayClick","showStepNumbers","keyboardNavigation","showButtons","showBullets","showProgress","scrollToElement","scrollTo","scrollPadding","overlayOpacity","positionPrecedence","disableInteraction","helperElementPadding","hintPosition","hintButtonLabel","hintAnimation","buttonClass","_introForElement","targetElm","group","allIntroSteps","querySelectorAll","introItems","steps","_forEach","step","currentItem","_cloneObject","element","document","querySelector","floatingElementQuery","createElement","className","body","appendChild","position","bind","elmsLength","currentElement","getAttribute","display","parseInt","intro","nextStep","tempIntroItems","z","_addOverlayLayer","_nextStep","DOMEvent","_onKeyDown","_onResize","refresh","code","which","charCode","keyCode","_previousStep","srcElement","_currentStep","_introCompleteCallback","_exitIntro","click","preventDefault","returnValue","temp","jQuery","_goToStep","_goToStepNumber","_currentStepNumber","_direction","item","continueStep","_introBeforeChangeCallback","_showElement","_refresh","_setHelperLayerPosition","oldHelperNumberLayer","oldArrowLayer","oldtooltipContainer","_placeTooltip","_reAlignHints","targetElement","force","continueExit","_introBeforeExitCallback","overlayLayers","overlayLayer","opacity","parentNode","removeChild","helperLayer","referenceLayer","disableInteractionLayer","floatingElement","_removeShowElement","fixParents","parent","_removeClass","_introExitCallback","tooltipLayer","arrowLayer","helperNumberLayer","hintMode","currentStepObj","tooltipOffset","targetOffset","windowSize","currentTooltipPosition","tooltipCssClass","top","right","bottom","left","marginLeft","marginTop","setAttribute","_determineAutoPosition","tooltipLayerStyleLeft","_getOffset","_getWinSize","_addClass","tooltipLayerStyleRight","_checkLeft","height","tooltipLayerStyleLeftRight","width","_checkRight","desiredTooltipPosition","possiblePositions","tooltipHeight","tooltipWidth","targetElementRect","getBoundingClientRect","calculatedPosition","_removeEntry","desiredAlignment","pos","hyphenIndex","_determineAutoAlignment","offsetLeft","halfTooltipWidth","winWidth","screen","possibleAlignments","calculatedAlignment","stringArray","stringToRemove","splice","elementPosition","widthHeightPadding","_isFixed","cssText","_disableInteraction","_setAnchorAsButton","anchor","tabIndex","_introChangeCallback","nextTooltipButton","prevTooltipButton","skipTooltipButton","scrollParent","oldHelperLayer","oldReferenceLayer","oldtooltipLayer","lastIntroItem","_getScrollParent","_scrollParentToElement","_lastShowElementTimer","innerHTML","_getProgress","focus","_scrollTo","tooltipTextLayer","bulletsLayer","progressLayer","buttonsLayer","ulContainer","anchorClick","goToStep","innerLi","anchorLink","onclick","progressBar","_introSkipCallback","_setShowElement","_introAfterChangeCallback","rect","_elementInViewport","winHeight","clientHeight","scrollBy","elms","elm","parentElm","SVGElement","tagName","toLowerCase","currentElementPosition","_getPropValue","zIndex","parseFloat","transform","forEachFnc","completeFnc","pre","classList","classes","cls","classNameRegex","propName","propValue","currentStyle","defaultView","getComputedStyle","getPropertyValue","nodeName","innerWidth","innerHeight","D","documentElement","clientWidth","el","styleText","_removeHintTooltip","tooltip","_populateHints","hints","hint","_addHints","_alignHintPosition","_hintQuerySelectorAll","selector","hintsWrapper","_hideHint","stepId","_hintCloseCallback","_hideHints","_showHints","_showHint","_removeHints","_removeHint","getHintClick","evt","event","stopPropagation","cancelBubble","_showHintDialog","hintDot","hintPulse","_hintsAddedCallback","offset","iconWidth","iconHeight","hintElement","_hintClickCallback","removedStep","tooltipWrapper","closeButton","docEl","scrollTop","pageYOffset","scrollLeft","pageXOffset","excludeStaticParent","overflowRegex","parentElement","overflow","overflowY","overflowX","offsetTop","currentStep","_mergeOptions","obj1","obj2","attrname","obj3","VERSION","_stamp","events_key","_id","type","listener","context","useCapture","handler","addEventListener","attachEvent","removeEventListener","detachEvent","instance","instances","clone","setOption","option","setOptions","start","addStep","addSteps","index","goToStepNumber","previousStep","exit","onbeforechange","providedCallback","onchange","onafterchange","oncomplete","onhintsadded","onhintclick","onhintclose","onexit","onskip","onbeforeexit","addHints","hideHint","hideHints","showHint","showHints","removeHints","removeHint","showHintDialog","1130","ace","config","storage_method","cookie_expiry","cookie_path","vars","settings","saveState","attrName","attrVal","append","getElementById","hasAttribute","hasClass","attrList","data","parse","newVal","hasCustomVal","$delete","re1","re2","loadState","setAttr","attr","addClass","removeClass","clearState","remove","animationSupport","animation","animationstring","keyframeprefix","domPrefixes","pfx","animationName","animationCSS","animationNode","head","domInsertEvent","documentReady","list","readyState","data_storage","method","prefix","storage","cookie","namespace","path","is_obj","tmp","sizeof","decodeURIComponent","expires","domain","secure","toGMTString","setTime","encodeURIComponent","getItem","setItem","removeItem","size","elem","parts","currentClass","replaceClass","newClass","classToRemove","p1","p2","toggleClass","isHTMlElement","HTMLElement","nodeType"],"mappings":"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","file":"javascripts/user-common-js/header.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/static/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(872);\n\n\n/***/ }),\n\n/***/ 5:\n/***/ (function(module, exports) {\n\n\t/*\n\tobject-assign\n\t(c) Sindre Sorhus\n\t@license MIT\n\t*/\n\t\n\t'use strict';\n\t/* eslint-disable no-unused-vars */\n\tvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\tvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\t\n\tfunction toObject(val) {\n\t\tif (val === null || val === undefined) {\n\t\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t\t}\n\t\n\t\treturn Object(val);\n\t}\n\t\n\tfunction shouldUseNative() {\n\t\ttry {\n\t\t\tif (!Object.assign) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// Detect buggy property enumeration order in older V8 versions.\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\t\ttest1[5] = 'de';\n\t\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test2 = {};\n\t\t\tfor (var i = 0; i < 10; i++) {\n\t\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t\t}\n\t\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\t\treturn test2[n];\n\t\t\t});\n\t\t\tif (order2.join('') !== '0123456789') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test3 = {};\n\t\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\t\ttest3[letter] = letter;\n\t\t\t});\n\t\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\treturn true;\n\t\t} catch (err) {\n\t\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\t\tvar from;\n\t\tvar to = toObject(target);\n\t\tvar symbols;\n\t\n\t\tfor (var s = 1; s < arguments.length; s++) {\n\t\t\tfrom = Object(arguments[s]);\n\t\n\t\t\tfor (var key in from) {\n\t\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\t\tto[key] = from[key];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif (getOwnPropertySymbols) {\n\t\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn to;\n\t};\n\n\n/***/ }),\n\n/***/ 7:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {/*global window, global*/\n\tvar util = __webpack_require__(93)\n\tvar assert = __webpack_require__(87)\n\tfunction now() { return new Date().getTime() }\n\t\n\tvar slice = Array.prototype.slice\n\tvar console\n\tvar times = {}\n\t\n\tif (typeof global !== \"undefined\" && global.console) {\n\t console = global.console\n\t} else if (typeof window !== \"undefined\" && window.console) {\n\t console = window.console\n\t} else {\n\t console = {}\n\t}\n\t\n\tvar functions = [\n\t [log, \"log\"],\n\t [info, \"info\"],\n\t [warn, \"warn\"],\n\t [error, \"error\"],\n\t [time, \"time\"],\n\t [timeEnd, \"timeEnd\"],\n\t [trace, \"trace\"],\n\t [dir, \"dir\"],\n\t [consoleAssert, \"assert\"]\n\t]\n\t\n\tfor (var i = 0; i < functions.length; i++) {\n\t var tuple = functions[i]\n\t var f = tuple[0]\n\t var name = tuple[1]\n\t\n\t if (!console[name]) {\n\t console[name] = f\n\t }\n\t}\n\t\n\tmodule.exports = console\n\t\n\tfunction log() {}\n\t\n\tfunction info() {\n\t console.log.apply(console, arguments)\n\t}\n\t\n\tfunction warn() {\n\t console.log.apply(console, arguments)\n\t}\n\t\n\tfunction error() {\n\t console.warn.apply(console, arguments)\n\t}\n\t\n\tfunction time(label) {\n\t times[label] = now()\n\t}\n\t\n\tfunction timeEnd(label) {\n\t var time = times[label]\n\t if (!time) {\n\t throw new Error(\"No such label: \" + label)\n\t }\n\t\n\t delete times[label]\n\t var duration = now() - time\n\t console.log(label + \": \" + duration + \"ms\")\n\t}\n\t\n\tfunction trace() {\n\t var err = new Error()\n\t err.name = \"Trace\"\n\t err.message = util.format.apply(null, arguments)\n\t console.error(err.stack)\n\t}\n\t\n\tfunction dir(object) {\n\t console.log(util.inspect(object) + \"\\n\")\n\t}\n\t\n\tfunction consoleAssert(expression) {\n\t if (!expression) {\n\t var arr = slice.call(arguments, 1)\n\t assert.ok(false, util.format.apply(null, arr))\n\t }\n\t}\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n\n/***/ 23:\n/***/ (function(module, exports) {\n\n\t// shim for using process in browser\n\tvar process = module.exports = {};\n\t\n\t// cached from whatever global is present so that test runners that stub it\n\t// don't break things. But we need to wrap it in a try catch in case it is\n\t// wrapped in strict mode code which doesn't define any globals. It's inside a\n\t// function because try/catches deoptimize in certain engines.\n\t\n\tvar cachedSetTimeout;\n\tvar cachedClearTimeout;\n\t\n\tfunction defaultSetTimout() {\n\t throw new Error('setTimeout has not been defined');\n\t}\n\tfunction defaultClearTimeout () {\n\t throw new Error('clearTimeout has not been defined');\n\t}\n\t(function () {\n\t try {\n\t if (typeof setTimeout === 'function') {\n\t cachedSetTimeout = setTimeout;\n\t } else {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t } catch (e) {\n\t cachedSetTimeout = defaultSetTimout;\n\t }\n\t try {\n\t if (typeof clearTimeout === 'function') {\n\t cachedClearTimeout = clearTimeout;\n\t } else {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t } catch (e) {\n\t cachedClearTimeout = defaultClearTimeout;\n\t }\n\t} ())\n\tfunction runTimeout(fun) {\n\t if (cachedSetTimeout === setTimeout) {\n\t //normal enviroments in sane situations\n\t return setTimeout(fun, 0);\n\t }\n\t // if setTimeout wasn't available but was latter defined\n\t if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n\t cachedSetTimeout = setTimeout;\n\t return setTimeout(fun, 0);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedSetTimeout(fun, 0);\n\t } catch(e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedSetTimeout.call(null, fun, 0);\n\t } catch(e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n\t return cachedSetTimeout.call(this, fun, 0);\n\t }\n\t }\n\t\n\t\n\t}\n\tfunction runClearTimeout(marker) {\n\t if (cachedClearTimeout === clearTimeout) {\n\t //normal enviroments in sane situations\n\t return clearTimeout(marker);\n\t }\n\t // if clearTimeout wasn't available but was latter defined\n\t if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n\t cachedClearTimeout = clearTimeout;\n\t return clearTimeout(marker);\n\t }\n\t try {\n\t // when when somebody has screwed with setTimeout but no I.E. maddness\n\t return cachedClearTimeout(marker);\n\t } catch (e){\n\t try {\n\t // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n\t return cachedClearTimeout.call(null, marker);\n\t } catch (e){\n\t // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n\t // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n\t return cachedClearTimeout.call(this, marker);\n\t }\n\t }\n\t\n\t\n\t\n\t}\n\tvar queue = [];\n\tvar draining = false;\n\tvar currentQueue;\n\tvar queueIndex = -1;\n\t\n\tfunction cleanUpNextTick() {\n\t if (!draining || !currentQueue) {\n\t return;\n\t }\n\t draining = false;\n\t if (currentQueue.length) {\n\t queue = currentQueue.concat(queue);\n\t } else {\n\t queueIndex = -1;\n\t }\n\t if (queue.length) {\n\t drainQueue();\n\t }\n\t}\n\t\n\tfunction drainQueue() {\n\t if (draining) {\n\t return;\n\t }\n\t var timeout = runTimeout(cleanUpNextTick);\n\t draining = true;\n\t\n\t var len = queue.length;\n\t while(len) {\n\t currentQueue = queue;\n\t queue = [];\n\t while (++queueIndex < len) {\n\t if (currentQueue) {\n\t currentQueue[queueIndex].run();\n\t }\n\t }\n\t queueIndex = -1;\n\t len = queue.length;\n\t }\n\t currentQueue = null;\n\t draining = false;\n\t runClearTimeout(timeout);\n\t}\n\t\n\tprocess.nextTick = function (fun) {\n\t var args = new Array(arguments.length - 1);\n\t if (arguments.length > 1) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t args[i - 1] = arguments[i];\n\t }\n\t }\n\t queue.push(new Item(fun, args));\n\t if (queue.length === 1 && !draining) {\n\t runTimeout(drainQueue);\n\t }\n\t};\n\t\n\t// v8 likes predictible objects\n\tfunction Item(fun, array) {\n\t this.fun = fun;\n\t this.array = array;\n\t}\n\tItem.prototype.run = function () {\n\t this.fun.apply(null, this.array);\n\t};\n\tprocess.title = 'browser';\n\tprocess.browser = true;\n\tprocess.env = {};\n\tprocess.argv = [];\n\tprocess.version = ''; // empty string to avoid regexp issues\n\tprocess.versions = {};\n\t\n\tfunction noop() {}\n\t\n\tprocess.on = noop;\n\tprocess.addListener = noop;\n\tprocess.once = noop;\n\tprocess.off = noop;\n\tprocess.removeListener = noop;\n\tprocess.removeAllListeners = noop;\n\tprocess.emit = noop;\n\tprocess.prependListener = noop;\n\tprocess.prependOnceListener = noop;\n\t\n\tprocess.listeners = function (name) { return [] }\n\t\n\tprocess.binding = function (name) {\n\t throw new Error('process.binding is not supported');\n\t};\n\t\n\tprocess.cwd = function () { return '/' };\n\tprocess.chdir = function (dir) {\n\t throw new Error('process.chdir is not supported');\n\t};\n\tprocess.umask = function() { return 0; };\n\n\n/***/ }),\n\n/***/ 87:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';\n\t\n\tvar objectAssign = __webpack_require__(5);\n\t\n\t// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n\t// original notice:\n\t\n\t/*!\n\t * The buffer module from node.js, for the browser.\n\t *\n\t * @author Feross Aboukhadijeh \n\t * @license MIT\n\t */\n\tfunction compare(a, b) {\n\t if (a === b) {\n\t return 0;\n\t }\n\t\n\t var x = a.length;\n\t var y = b.length;\n\t\n\t for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n\t if (a[i] !== b[i]) {\n\t x = a[i];\n\t y = b[i];\n\t break;\n\t }\n\t }\n\t\n\t if (x < y) {\n\t return -1;\n\t }\n\t if (y < x) {\n\t return 1;\n\t }\n\t return 0;\n\t}\n\tfunction isBuffer(b) {\n\t if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n\t return global.Buffer.isBuffer(b);\n\t }\n\t return !!(b != null && b._isBuffer);\n\t}\n\t\n\t// based on node assert, original notice:\n\t// NB: The URL to the CommonJS spec is kept just for tradition.\n\t// node-assert has evolved a lot since then, both in API and behavior.\n\t\n\t// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n\t//\n\t// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n\t//\n\t// Originally from narwhal.js (http://narwhaljs.org)\n\t// Copyright (c) 2009 Thomas Robinson <280north.com>\n\t//\n\t// Permission is hereby granted, free of charge, to any person obtaining a copy\n\t// of this software and associated documentation files (the 'Software'), to\n\t// deal in the Software without restriction, including without limitation the\n\t// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n\t// sell copies of the Software, and to permit persons to whom the Software is\n\t// furnished to do so, subject to the following conditions:\n\t//\n\t// The above copyright notice and this permission notice shall be included in\n\t// all copies or substantial portions of the Software.\n\t//\n\t// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n\t// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n\t// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\t\n\tvar util = __webpack_require__(90);\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\tvar pSlice = Array.prototype.slice;\n\tvar functionsHaveNames = (function () {\n\t return function foo() {}.name === 'foo';\n\t}());\n\tfunction pToString (obj) {\n\t return Object.prototype.toString.call(obj);\n\t}\n\tfunction isView(arrbuf) {\n\t if (isBuffer(arrbuf)) {\n\t return false;\n\t }\n\t if (typeof global.ArrayBuffer !== 'function') {\n\t return false;\n\t }\n\t if (typeof ArrayBuffer.isView === 'function') {\n\t return ArrayBuffer.isView(arrbuf);\n\t }\n\t if (!arrbuf) {\n\t return false;\n\t }\n\t if (arrbuf instanceof DataView) {\n\t return true;\n\t }\n\t if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n\t return true;\n\t }\n\t return false;\n\t}\n\t// 1. The assert module provides functions that throw\n\t// AssertionError's when particular conditions are not met. The\n\t// assert module must conform to the following interface.\n\t\n\tvar assert = module.exports = ok;\n\t\n\t// 2. The AssertionError is defined in assert.\n\t// new assert.AssertionError({ message: message,\n\t// actual: actual,\n\t// expected: expected })\n\t\n\tvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n\t// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\n\tfunction getName(func) {\n\t if (!util.isFunction(func)) {\n\t return;\n\t }\n\t if (functionsHaveNames) {\n\t return func.name;\n\t }\n\t var str = func.toString();\n\t var match = str.match(regex);\n\t return match && match[1];\n\t}\n\tassert.AssertionError = function AssertionError(options) {\n\t this.name = 'AssertionError';\n\t this.actual = options.actual;\n\t this.expected = options.expected;\n\t this.operator = options.operator;\n\t if (options.message) {\n\t this.message = options.message;\n\t this.generatedMessage = false;\n\t } else {\n\t this.message = getMessage(this);\n\t this.generatedMessage = true;\n\t }\n\t var stackStartFunction = options.stackStartFunction || fail;\n\t if (Error.captureStackTrace) {\n\t Error.captureStackTrace(this, stackStartFunction);\n\t } else {\n\t // non v8 browsers so we can have a stacktrace\n\t var err = new Error();\n\t if (err.stack) {\n\t var out = err.stack;\n\t\n\t // try to strip useless frames\n\t var fn_name = getName(stackStartFunction);\n\t var idx = out.indexOf('\\n' + fn_name);\n\t if (idx >= 0) {\n\t // once we have located the function frame\n\t // we need to strip out everything before it (and its line)\n\t var next_line = out.indexOf('\\n', idx + 1);\n\t out = out.substring(next_line + 1);\n\t }\n\t\n\t this.stack = out;\n\t }\n\t }\n\t};\n\t\n\t// assert.AssertionError instanceof Error\n\tutil.inherits(assert.AssertionError, Error);\n\t\n\tfunction truncate(s, n) {\n\t if (typeof s === 'string') {\n\t return s.length < n ? s : s.slice(0, n);\n\t } else {\n\t return s;\n\t }\n\t}\n\tfunction inspect(something) {\n\t if (functionsHaveNames || !util.isFunction(something)) {\n\t return util.inspect(something);\n\t }\n\t var rawname = getName(something);\n\t var name = rawname ? ': ' + rawname : '';\n\t return '[Function' + name + ']';\n\t}\n\tfunction getMessage(self) {\n\t return truncate(inspect(self.actual), 128) + ' ' +\n\t self.operator + ' ' +\n\t truncate(inspect(self.expected), 128);\n\t}\n\t\n\t// At present only the three keys mentioned above are used and\n\t// understood by the spec. Implementations or sub modules can pass\n\t// other keys to the AssertionError's constructor - they will be\n\t// ignored.\n\t\n\t// 3. All of the following functions must throw an AssertionError\n\t// when a corresponding condition is not met, with a message that\n\t// may be undefined if not provided. All assertion methods provide\n\t// both the actual and expected values to the assertion error for\n\t// display purposes.\n\t\n\tfunction fail(actual, expected, message, operator, stackStartFunction) {\n\t throw new assert.AssertionError({\n\t message: message,\n\t actual: actual,\n\t expected: expected,\n\t operator: operator,\n\t stackStartFunction: stackStartFunction\n\t });\n\t}\n\t\n\t// EXTENSION! allows for well behaved errors defined elsewhere.\n\tassert.fail = fail;\n\t\n\t// 4. Pure assertion tests whether a value is truthy, as determined\n\t// by !!guard.\n\t// assert.ok(guard, message_opt);\n\t// This statement is equivalent to assert.equal(true, !!guard,\n\t// message_opt);. To test strictly for the value true, use\n\t// assert.strictEqual(true, guard, message_opt);.\n\t\n\tfunction ok(value, message) {\n\t if (!value) fail(value, true, message, '==', assert.ok);\n\t}\n\tassert.ok = ok;\n\t\n\t// 5. The equality assertion tests shallow, coercive equality with\n\t// ==.\n\t// assert.equal(actual, expected, message_opt);\n\t\n\tassert.equal = function equal(actual, expected, message) {\n\t if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n\t};\n\t\n\t// 6. The non-equality assertion tests for whether two objects are not equal\n\t// with != assert.notEqual(actual, expected, message_opt);\n\t\n\tassert.notEqual = function notEqual(actual, expected, message) {\n\t if (actual == expected) {\n\t fail(actual, expected, message, '!=', assert.notEqual);\n\t }\n\t};\n\t\n\t// 7. The equivalence assertion tests a deep equality relation.\n\t// assert.deepEqual(actual, expected, message_opt);\n\t\n\tassert.deepEqual = function deepEqual(actual, expected, message) {\n\t if (!_deepEqual(actual, expected, false)) {\n\t fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n\t }\n\t};\n\t\n\tassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n\t if (!_deepEqual(actual, expected, true)) {\n\t fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n\t }\n\t};\n\t\n\tfunction _deepEqual(actual, expected, strict, memos) {\n\t // 7.1. All identical values are equivalent, as determined by ===.\n\t if (actual === expected) {\n\t return true;\n\t } else if (isBuffer(actual) && isBuffer(expected)) {\n\t return compare(actual, expected) === 0;\n\t\n\t // 7.2. If the expected value is a Date object, the actual value is\n\t // equivalent if it is also a Date object that refers to the same time.\n\t } else if (util.isDate(actual) && util.isDate(expected)) {\n\t return actual.getTime() === expected.getTime();\n\t\n\t // 7.3 If the expected value is a RegExp object, the actual value is\n\t // equivalent if it is also a RegExp object with the same source and\n\t // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n\t } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n\t return actual.source === expected.source &&\n\t actual.global === expected.global &&\n\t actual.multiline === expected.multiline &&\n\t actual.lastIndex === expected.lastIndex &&\n\t actual.ignoreCase === expected.ignoreCase;\n\t\n\t // 7.4. Other pairs that do not both pass typeof value == 'object',\n\t // equivalence is determined by ==.\n\t } else if ((actual === null || typeof actual !== 'object') &&\n\t (expected === null || typeof expected !== 'object')) {\n\t return strict ? actual === expected : actual == expected;\n\t\n\t // If both values are instances of typed arrays, wrap their underlying\n\t // ArrayBuffers in a Buffer each to increase performance\n\t // This optimization requires the arrays to have the same type as checked by\n\t // Object.prototype.toString (aka pToString). Never perform binary\n\t // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n\t // bit patterns are not identical.\n\t } else if (isView(actual) && isView(expected) &&\n\t pToString(actual) === pToString(expected) &&\n\t !(actual instanceof Float32Array ||\n\t actual instanceof Float64Array)) {\n\t return compare(new Uint8Array(actual.buffer),\n\t new Uint8Array(expected.buffer)) === 0;\n\t\n\t // 7.5 For all other Object pairs, including Array objects, equivalence is\n\t // determined by having the same number of owned properties (as verified\n\t // with Object.prototype.hasOwnProperty.call), the same set of keys\n\t // (although not necessarily the same order), equivalent values for every\n\t // corresponding key, and an identical 'prototype' property. Note: this\n\t // accounts for both named and indexed properties on Arrays.\n\t } else if (isBuffer(actual) !== isBuffer(expected)) {\n\t return false;\n\t } else {\n\t memos = memos || {actual: [], expected: []};\n\t\n\t var actualIndex = memos.actual.indexOf(actual);\n\t if (actualIndex !== -1) {\n\t if (actualIndex === memos.expected.indexOf(expected)) {\n\t return true;\n\t }\n\t }\n\t\n\t memos.actual.push(actual);\n\t memos.expected.push(expected);\n\t\n\t return objEquiv(actual, expected, strict, memos);\n\t }\n\t}\n\t\n\tfunction isArguments(object) {\n\t return Object.prototype.toString.call(object) == '[object Arguments]';\n\t}\n\t\n\tfunction objEquiv(a, b, strict, actualVisitedObjects) {\n\t if (a === null || a === undefined || b === null || b === undefined)\n\t return false;\n\t // if one is a primitive, the other must be same\n\t if (util.isPrimitive(a) || util.isPrimitive(b))\n\t return a === b;\n\t if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n\t return false;\n\t var aIsArgs = isArguments(a);\n\t var bIsArgs = isArguments(b);\n\t if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n\t return false;\n\t if (aIsArgs) {\n\t a = pSlice.call(a);\n\t b = pSlice.call(b);\n\t return _deepEqual(a, b, strict);\n\t }\n\t var ka = objectKeys(a);\n\t var kb = objectKeys(b);\n\t var key, i;\n\t // having the same number of owned properties (keys incorporates\n\t // hasOwnProperty)\n\t if (ka.length !== kb.length)\n\t return false;\n\t //the same set of keys (although not necessarily the same order),\n\t ka.sort();\n\t kb.sort();\n\t //~~~cheap key test\n\t for (i = ka.length - 1; i >= 0; i--) {\n\t if (ka[i] !== kb[i])\n\t return false;\n\t }\n\t //equivalent values for every corresponding key, and\n\t //~~~possibly expensive deep test\n\t for (i = ka.length - 1; i >= 0; i--) {\n\t key = ka[i];\n\t if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\t// 8. The non-equivalence assertion tests for any deep inequality.\n\t// assert.notDeepEqual(actual, expected, message_opt);\n\t\n\tassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n\t if (_deepEqual(actual, expected, false)) {\n\t fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n\t }\n\t};\n\t\n\tassert.notDeepStrictEqual = notDeepStrictEqual;\n\tfunction notDeepStrictEqual(actual, expected, message) {\n\t if (_deepEqual(actual, expected, true)) {\n\t fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n\t }\n\t}\n\t\n\t\n\t// 9. The strict equality assertion tests strict equality, as determined by ===.\n\t// assert.strictEqual(actual, expected, message_opt);\n\t\n\tassert.strictEqual = function strictEqual(actual, expected, message) {\n\t if (actual !== expected) {\n\t fail(actual, expected, message, '===', assert.strictEqual);\n\t }\n\t};\n\t\n\t// 10. The strict non-equality assertion tests for strict inequality, as\n\t// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\t\n\tassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n\t if (actual === expected) {\n\t fail(actual, expected, message, '!==', assert.notStrictEqual);\n\t }\n\t};\n\t\n\tfunction expectedException(actual, expected) {\n\t if (!actual || !expected) {\n\t return false;\n\t }\n\t\n\t if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n\t return expected.test(actual);\n\t }\n\t\n\t try {\n\t if (actual instanceof expected) {\n\t return true;\n\t }\n\t } catch (e) {\n\t // Ignore. The instanceof check doesn't work for arrow functions.\n\t }\n\t\n\t if (Error.isPrototypeOf(expected)) {\n\t return false;\n\t }\n\t\n\t return expected.call({}, actual) === true;\n\t}\n\t\n\tfunction _tryBlock(block) {\n\t var error;\n\t try {\n\t block();\n\t } catch (e) {\n\t error = e;\n\t }\n\t return error;\n\t}\n\t\n\tfunction _throws(shouldThrow, block, expected, message) {\n\t var actual;\n\t\n\t if (typeof block !== 'function') {\n\t throw new TypeError('\"block\" argument must be a function');\n\t }\n\t\n\t if (typeof expected === 'string') {\n\t message = expected;\n\t expected = null;\n\t }\n\t\n\t actual = _tryBlock(block);\n\t\n\t message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n\t (message ? ' ' + message : '.');\n\t\n\t if (shouldThrow && !actual) {\n\t fail(actual, expected, 'Missing expected exception' + message);\n\t }\n\t\n\t var userProvidedMessage = typeof message === 'string';\n\t var isUnwantedException = !shouldThrow && util.isError(actual);\n\t var isUnexpectedException = !shouldThrow && actual && !expected;\n\t\n\t if ((isUnwantedException &&\n\t userProvidedMessage &&\n\t expectedException(actual, expected)) ||\n\t isUnexpectedException) {\n\t fail(actual, expected, 'Got unwanted exception' + message);\n\t }\n\t\n\t if ((shouldThrow && actual && expected &&\n\t !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n\t throw actual;\n\t }\n\t}\n\t\n\t// 11. Expected to throw an error:\n\t// assert.throws(block, Error_opt, message_opt);\n\t\n\tassert.throws = function(block, /*optional*/error, /*optional*/message) {\n\t _throws(true, block, error, message);\n\t};\n\t\n\t// EXTENSION! This is annoying to write outside this module.\n\tassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n\t _throws(false, block, error, message);\n\t};\n\t\n\tassert.ifError = function(err) { if (err) throw err; };\n\t\n\t// Expose a strict only variant of assert\n\tfunction strict(value, message) {\n\t if (!value) fail(value, true, message, '==', strict);\n\t}\n\tassert.strict = objectAssign(strict, assert, {\n\t equal: assert.strictEqual,\n\t deepEqual: assert.deepStrictEqual,\n\t notEqual: assert.notStrictEqual,\n\t notDeepEqual: assert.notDeepStrictEqual\n\t});\n\tassert.strict.strict = assert.strict;\n\t\n\tvar objectKeys = Object.keys || function (obj) {\n\t var keys = [];\n\t for (var key in obj) {\n\t if (hasOwn.call(obj, key)) keys.push(key);\n\t }\n\t return keys;\n\t};\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n\n/***/ 88:\n/***/ (function(module, exports) {\n\n\tif (typeof Object.create === 'function') {\n\t // implementation from standard node.js 'util' module\n\t module.exports = function inherits(ctor, superCtor) {\n\t ctor.super_ = superCtor\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t };\n\t} else {\n\t // old school shim for old browsers\n\t module.exports = function inherits(ctor, superCtor) {\n\t ctor.super_ = superCtor\n\t var TempCtor = function () {}\n\t TempCtor.prototype = superCtor.prototype\n\t ctor.prototype = new TempCtor()\n\t ctor.prototype.constructor = ctor\n\t }\n\t}\n\n\n/***/ }),\n\n/***/ 89:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function isBuffer(arg) {\n\t return arg && typeof arg === 'object'\n\t && typeof arg.copy === 'function'\n\t && typeof arg.fill === 'function'\n\t && typeof arg.readUInt8 === 'function';\n\t}\n\n/***/ }),\n\n/***/ 90:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global, process, console) {// Copyright Joyent, Inc. and other Node contributors.\n\t//\n\t// Permission is hereby granted, free of charge, to any person obtaining a\n\t// copy of this software and associated documentation files (the\n\t// \"Software\"), to deal in the Software without restriction, including\n\t// without limitation the rights to use, copy, modify, merge, publish,\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\n\t// persons to whom the Software is furnished to do so, subject to the\n\t// following conditions:\n\t//\n\t// The above copyright notice and this permission notice shall be included\n\t// in all copies or substantial portions of the Software.\n\t//\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\t\n\tvar formatRegExp = /%[sdj%]/g;\n\texports.format = function(f) {\n\t if (!isString(f)) {\n\t var objects = [];\n\t for (var i = 0; i < arguments.length; i++) {\n\t objects.push(inspect(arguments[i]));\n\t }\n\t return objects.join(' ');\n\t }\n\t\n\t var i = 1;\n\t var args = arguments;\n\t var len = args.length;\n\t var str = String(f).replace(formatRegExp, function(x) {\n\t if (x === '%%') return '%';\n\t if (i >= len) return x;\n\t switch (x) {\n\t case '%s': return String(args[i++]);\n\t case '%d': return Number(args[i++]);\n\t case '%j':\n\t try {\n\t return JSON.stringify(args[i++]);\n\t } catch (_) {\n\t return '[Circular]';\n\t }\n\t default:\n\t return x;\n\t }\n\t });\n\t for (var x = args[i]; i < len; x = args[++i]) {\n\t if (isNull(x) || !isObject(x)) {\n\t str += ' ' + x;\n\t } else {\n\t str += ' ' + inspect(x);\n\t }\n\t }\n\t return str;\n\t};\n\t\n\t\n\t// Mark that a method should not be used.\n\t// Returns a modified function which warns once by default.\n\t// If --no-deprecation is set, then it is a no-op.\n\texports.deprecate = function(fn, msg) {\n\t // Allow for deprecating things in the process of starting up.\n\t if (isUndefined(global.process)) {\n\t return function() {\n\t return exports.deprecate(fn, msg).apply(this, arguments);\n\t };\n\t }\n\t\n\t if (process.noDeprecation === true) {\n\t return fn;\n\t }\n\t\n\t var warned = false;\n\t function deprecated() {\n\t if (!warned) {\n\t if (process.throwDeprecation) {\n\t throw new Error(msg);\n\t } else if (process.traceDeprecation) {\n\t console.trace(msg);\n\t } else {\n\t console.error(msg);\n\t }\n\t warned = true;\n\t }\n\t return fn.apply(this, arguments);\n\t }\n\t\n\t return deprecated;\n\t};\n\t\n\t\n\tvar debugs = {};\n\tvar debugEnviron;\n\texports.debuglog = function(set) {\n\t if (isUndefined(debugEnviron))\n\t debugEnviron = process.env.NODE_DEBUG || '';\n\t set = set.toUpperCase();\n\t if (!debugs[set]) {\n\t if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n\t var pid = process.pid;\n\t debugs[set] = function() {\n\t var msg = exports.format.apply(exports, arguments);\n\t console.error('%s %d: %s', set, pid, msg);\n\t };\n\t } else {\n\t debugs[set] = function() {};\n\t }\n\t }\n\t return debugs[set];\n\t};\n\t\n\t\n\t/**\n\t * Echos the value of a value. Trys to print the value out\n\t * in the best way possible given the different types.\n\t *\n\t * @param {Object} obj The object to print out.\n\t * @param {Object} opts Optional options object that alters the output.\n\t */\n\t/* legacy: obj, showHidden, depth, colors*/\n\tfunction inspect(obj, opts) {\n\t // default options\n\t var ctx = {\n\t seen: [],\n\t stylize: stylizeNoColor\n\t };\n\t // legacy...\n\t if (arguments.length >= 3) ctx.depth = arguments[2];\n\t if (arguments.length >= 4) ctx.colors = arguments[3];\n\t if (isBoolean(opts)) {\n\t // legacy...\n\t ctx.showHidden = opts;\n\t } else if (opts) {\n\t // got an \"options\" object\n\t exports._extend(ctx, opts);\n\t }\n\t // set default options\n\t if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n\t if (isUndefined(ctx.depth)) ctx.depth = 2;\n\t if (isUndefined(ctx.colors)) ctx.colors = false;\n\t if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n\t if (ctx.colors) ctx.stylize = stylizeWithColor;\n\t return formatValue(ctx, obj, ctx.depth);\n\t}\n\texports.inspect = inspect;\n\t\n\t\n\t// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\n\tinspect.colors = {\n\t 'bold' : [1, 22],\n\t 'italic' : [3, 23],\n\t 'underline' : [4, 24],\n\t 'inverse' : [7, 27],\n\t 'white' : [37, 39],\n\t 'grey' : [90, 39],\n\t 'black' : [30, 39],\n\t 'blue' : [34, 39],\n\t 'cyan' : [36, 39],\n\t 'green' : [32, 39],\n\t 'magenta' : [35, 39],\n\t 'red' : [31, 39],\n\t 'yellow' : [33, 39]\n\t};\n\t\n\t// Don't use 'blue' not visible on cmd.exe\n\tinspect.styles = {\n\t 'special': 'cyan',\n\t 'number': 'yellow',\n\t 'boolean': 'yellow',\n\t 'undefined': 'grey',\n\t 'null': 'bold',\n\t 'string': 'green',\n\t 'date': 'magenta',\n\t // \"name\": intentionally not styling\n\t 'regexp': 'red'\n\t};\n\t\n\t\n\tfunction stylizeWithColor(str, styleType) {\n\t var style = inspect.styles[styleType];\n\t\n\t if (style) {\n\t return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n\t '\\u001b[' + inspect.colors[style][1] + 'm';\n\t } else {\n\t return str;\n\t }\n\t}\n\t\n\t\n\tfunction stylizeNoColor(str, styleType) {\n\t return str;\n\t}\n\t\n\t\n\tfunction arrayToHash(array) {\n\t var hash = {};\n\t\n\t array.forEach(function(val, idx) {\n\t hash[val] = true;\n\t });\n\t\n\t return hash;\n\t}\n\t\n\t\n\tfunction formatValue(ctx, value, recurseTimes) {\n\t // Provide a hook for user-specified inspect functions.\n\t // Check that value is an object with an inspect function on it\n\t if (ctx.customInspect &&\n\t value &&\n\t isFunction(value.inspect) &&\n\t // Filter out the util module, it's inspect function is special\n\t value.inspect !== exports.inspect &&\n\t // Also filter out any prototype objects using the circular check.\n\t !(value.constructor && value.constructor.prototype === value)) {\n\t var ret = value.inspect(recurseTimes, ctx);\n\t if (!isString(ret)) {\n\t ret = formatValue(ctx, ret, recurseTimes);\n\t }\n\t return ret;\n\t }\n\t\n\t // Primitive types cannot have properties\n\t var primitive = formatPrimitive(ctx, value);\n\t if (primitive) {\n\t return primitive;\n\t }\n\t\n\t // Look up the keys of the object.\n\t var keys = Object.keys(value);\n\t var visibleKeys = arrayToHash(keys);\n\t\n\t if (ctx.showHidden) {\n\t keys = Object.getOwnPropertyNames(value);\n\t }\n\t\n\t // IE doesn't make error fields non-enumerable\n\t // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n\t if (isError(value)\n\t && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n\t return formatError(value);\n\t }\n\t\n\t // Some type of object without properties can be shortcutted.\n\t if (keys.length === 0) {\n\t if (isFunction(value)) {\n\t var name = value.name ? ': ' + value.name : '';\n\t return ctx.stylize('[Function' + name + ']', 'special');\n\t }\n\t if (isRegExp(value)) {\n\t return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n\t }\n\t if (isDate(value)) {\n\t return ctx.stylize(Date.prototype.toString.call(value), 'date');\n\t }\n\t if (isError(value)) {\n\t return formatError(value);\n\t }\n\t }\n\t\n\t var base = '', array = false, braces = ['{', '}'];\n\t\n\t // Make Array say that they are Array\n\t if (isArray(value)) {\n\t array = true;\n\t braces = ['[', ']'];\n\t }\n\t\n\t // Make functions say that they are functions\n\t if (isFunction(value)) {\n\t var n = value.name ? ': ' + value.name : '';\n\t base = ' [Function' + n + ']';\n\t }\n\t\n\t // Make RegExps say that they are RegExps\n\t if (isRegExp(value)) {\n\t base = ' ' + RegExp.prototype.toString.call(value);\n\t }\n\t\n\t // Make dates with properties first say the date\n\t if (isDate(value)) {\n\t base = ' ' + Date.prototype.toUTCString.call(value);\n\t }\n\t\n\t // Make error with message first say the error\n\t if (isError(value)) {\n\t base = ' ' + formatError(value);\n\t }\n\t\n\t if (keys.length === 0 && (!array || value.length == 0)) {\n\t return braces[0] + base + braces[1];\n\t }\n\t\n\t if (recurseTimes < 0) {\n\t if (isRegExp(value)) {\n\t return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n\t } else {\n\t return ctx.stylize('[Object]', 'special');\n\t }\n\t }\n\t\n\t ctx.seen.push(value);\n\t\n\t var output;\n\t if (array) {\n\t output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n\t } else {\n\t output = keys.map(function(key) {\n\t return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n\t });\n\t }\n\t\n\t ctx.seen.pop();\n\t\n\t return reduceToSingleString(output, base, braces);\n\t}\n\t\n\t\n\tfunction formatPrimitive(ctx, value) {\n\t if (isUndefined(value))\n\t return ctx.stylize('undefined', 'undefined');\n\t if (isString(value)) {\n\t var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n\t .replace(/'/g, \"\\\\'\")\n\t .replace(/\\\\\"/g, '\"') + '\\'';\n\t return ctx.stylize(simple, 'string');\n\t }\n\t if (isNumber(value))\n\t return ctx.stylize('' + value, 'number');\n\t if (isBoolean(value))\n\t return ctx.stylize('' + value, 'boolean');\n\t // For some reason typeof null is \"object\", so special case here.\n\t if (isNull(value))\n\t return ctx.stylize('null', 'null');\n\t}\n\t\n\t\n\tfunction formatError(value) {\n\t return '[' + Error.prototype.toString.call(value) + ']';\n\t}\n\t\n\t\n\tfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n\t var output = [];\n\t for (var i = 0, l = value.length; i < l; ++i) {\n\t if (hasOwnProperty(value, String(i))) {\n\t output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n\t String(i), true));\n\t } else {\n\t output.push('');\n\t }\n\t }\n\t keys.forEach(function(key) {\n\t if (!key.match(/^\\d+$/)) {\n\t output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n\t key, true));\n\t }\n\t });\n\t return output;\n\t}\n\t\n\t\n\tfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n\t var name, str, desc;\n\t desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n\t if (desc.get) {\n\t if (desc.set) {\n\t str = ctx.stylize('[Getter/Setter]', 'special');\n\t } else {\n\t str = ctx.stylize('[Getter]', 'special');\n\t }\n\t } else {\n\t if (desc.set) {\n\t str = ctx.stylize('[Setter]', 'special');\n\t }\n\t }\n\t if (!hasOwnProperty(visibleKeys, key)) {\n\t name = '[' + key + ']';\n\t }\n\t if (!str) {\n\t if (ctx.seen.indexOf(desc.value) < 0) {\n\t if (isNull(recurseTimes)) {\n\t str = formatValue(ctx, desc.value, null);\n\t } else {\n\t str = formatValue(ctx, desc.value, recurseTimes - 1);\n\t }\n\t if (str.indexOf('\\n') > -1) {\n\t if (array) {\n\t str = str.split('\\n').map(function(line) {\n\t return ' ' + line;\n\t }).join('\\n').substr(2);\n\t } else {\n\t str = '\\n' + str.split('\\n').map(function(line) {\n\t return ' ' + line;\n\t }).join('\\n');\n\t }\n\t }\n\t } else {\n\t str = ctx.stylize('[Circular]', 'special');\n\t }\n\t }\n\t if (isUndefined(name)) {\n\t if (array && key.match(/^\\d+$/)) {\n\t return str;\n\t }\n\t name = JSON.stringify('' + key);\n\t if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n\t name = name.substr(1, name.length - 2);\n\t name = ctx.stylize(name, 'name');\n\t } else {\n\t name = name.replace(/'/g, \"\\\\'\")\n\t .replace(/\\\\\"/g, '\"')\n\t .replace(/(^\"|\"$)/g, \"'\");\n\t name = ctx.stylize(name, 'string');\n\t }\n\t }\n\t\n\t return name + ': ' + str;\n\t}\n\t\n\t\n\tfunction reduceToSingleString(output, base, braces) {\n\t var numLinesEst = 0;\n\t var length = output.reduce(function(prev, cur) {\n\t numLinesEst++;\n\t if (cur.indexOf('\\n') >= 0) numLinesEst++;\n\t return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n\t }, 0);\n\t\n\t if (length > 60) {\n\t return braces[0] +\n\t (base === '' ? '' : base + '\\n ') +\n\t ' ' +\n\t output.join(',\\n ') +\n\t ' ' +\n\t braces[1];\n\t }\n\t\n\t return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n\t}\n\t\n\t\n\t// NOTE: These type checking functions intentionally don't use `instanceof`\n\t// because it is fragile and can be easily faked with `Object.create()`.\n\tfunction isArray(ar) {\n\t return Array.isArray(ar);\n\t}\n\texports.isArray = isArray;\n\t\n\tfunction isBoolean(arg) {\n\t return typeof arg === 'boolean';\n\t}\n\texports.isBoolean = isBoolean;\n\t\n\tfunction isNull(arg) {\n\t return arg === null;\n\t}\n\texports.isNull = isNull;\n\t\n\tfunction isNullOrUndefined(arg) {\n\t return arg == null;\n\t}\n\texports.isNullOrUndefined = isNullOrUndefined;\n\t\n\tfunction isNumber(arg) {\n\t return typeof arg === 'number';\n\t}\n\texports.isNumber = isNumber;\n\t\n\tfunction isString(arg) {\n\t return typeof arg === 'string';\n\t}\n\texports.isString = isString;\n\t\n\tfunction isSymbol(arg) {\n\t return typeof arg === 'symbol';\n\t}\n\texports.isSymbol = isSymbol;\n\t\n\tfunction isUndefined(arg) {\n\t return arg === void 0;\n\t}\n\texports.isUndefined = isUndefined;\n\t\n\tfunction isRegExp(re) {\n\t return isObject(re) && objectToString(re) === '[object RegExp]';\n\t}\n\texports.isRegExp = isRegExp;\n\t\n\tfunction isObject(arg) {\n\t return typeof arg === 'object' && arg !== null;\n\t}\n\texports.isObject = isObject;\n\t\n\tfunction isDate(d) {\n\t return isObject(d) && objectToString(d) === '[object Date]';\n\t}\n\texports.isDate = isDate;\n\t\n\tfunction isError(e) {\n\t return isObject(e) &&\n\t (objectToString(e) === '[object Error]' || e instanceof Error);\n\t}\n\texports.isError = isError;\n\t\n\tfunction isFunction(arg) {\n\t return typeof arg === 'function';\n\t}\n\texports.isFunction = isFunction;\n\t\n\tfunction isPrimitive(arg) {\n\t return arg === null ||\n\t typeof arg === 'boolean' ||\n\t typeof arg === 'number' ||\n\t typeof arg === 'string' ||\n\t typeof arg === 'symbol' || // ES6 symbol\n\t typeof arg === 'undefined';\n\t}\n\texports.isPrimitive = isPrimitive;\n\t\n\texports.isBuffer = __webpack_require__(89);\n\t\n\tfunction objectToString(o) {\n\t return Object.prototype.toString.call(o);\n\t}\n\t\n\t\n\tfunction pad(n) {\n\t return n < 10 ? '0' + n.toString(10) : n.toString(10);\n\t}\n\t\n\t\n\tvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n\t 'Oct', 'Nov', 'Dec'];\n\t\n\t// 26 Feb 16:19:34\n\tfunction timestamp() {\n\t var d = new Date();\n\t var time = [pad(d.getHours()),\n\t pad(d.getMinutes()),\n\t pad(d.getSeconds())].join(':');\n\t return [d.getDate(), months[d.getMonth()], time].join(' ');\n\t}\n\t\n\t\n\t// log is just a thin wrapper to console.log that prepends a timestamp\n\texports.log = function() {\n\t console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n\t};\n\t\n\t\n\t/**\n\t * Inherit the prototype methods from one constructor into another.\n\t *\n\t * The Function.prototype.inherits from lang.js rewritten as a standalone\n\t * function (not on Function.prototype). NOTE: If this file is to be loaded\n\t * during bootstrapping this function needs to be rewritten using some native\n\t * functions as prototype setup using normal JavaScript does not work as\n\t * expected during bootstrapping (see mirror.js in r114903).\n\t *\n\t * @param {function} ctor Constructor function which needs to inherit the\n\t * prototype.\n\t * @param {function} superCtor Constructor function to inherit prototype from.\n\t */\n\texports.inherits = __webpack_require__(88);\n\t\n\texports._extend = function(origin, add) {\n\t // Don't do anything if add isn't an object\n\t if (!add || !isObject(add)) return origin;\n\t\n\t var keys = Object.keys(add);\n\t var i = keys.length;\n\t while (i--) {\n\t origin[keys[i]] = add[keys[i]];\n\t }\n\t return origin;\n\t};\n\t\n\tfunction hasOwnProperty(obj, prop) {\n\t return Object.prototype.hasOwnProperty.call(obj, prop);\n\t}\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(23), __webpack_require__(7)))\n\n/***/ }),\n\n/***/ 91:\n/***/ (function(module, exports) {\n\n\tif (typeof Object.create === 'function') {\n\t // implementation from standard node.js 'util' module\n\t module.exports = function inherits(ctor, superCtor) {\n\t ctor.super_ = superCtor\n\t ctor.prototype = Object.create(superCtor.prototype, {\n\t constructor: {\n\t value: ctor,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t };\n\t} else {\n\t // old school shim for old browsers\n\t module.exports = function inherits(ctor, superCtor) {\n\t ctor.super_ = superCtor\n\t var TempCtor = function () {}\n\t TempCtor.prototype = superCtor.prototype\n\t ctor.prototype = new TempCtor()\n\t ctor.prototype.constructor = ctor\n\t }\n\t}\n\n\n/***/ }),\n\n/***/ 92:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function isBuffer(arg) {\n\t return arg && typeof arg === 'object'\n\t && typeof arg.copy === 'function'\n\t && typeof arg.fill === 'function'\n\t && typeof arg.readUInt8 === 'function';\n\t}\n\n/***/ }),\n\n/***/ 93:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global, process, console) {// Copyright Joyent, Inc. and other Node contributors.\n\t//\n\t// Permission is hereby granted, free of charge, to any person obtaining a\n\t// copy of this software and associated documentation files (the\n\t// \"Software\"), to deal in the Software without restriction, including\n\t// without limitation the rights to use, copy, modify, merge, publish,\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\n\t// persons to whom the Software is furnished to do so, subject to the\n\t// following conditions:\n\t//\n\t// The above copyright notice and this permission notice shall be included\n\t// in all copies or substantial portions of the Software.\n\t//\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\t\n\tvar formatRegExp = /%[sdj%]/g;\n\texports.format = function(f) {\n\t if (!isString(f)) {\n\t var objects = [];\n\t for (var i = 0; i < arguments.length; i++) {\n\t objects.push(inspect(arguments[i]));\n\t }\n\t return objects.join(' ');\n\t }\n\t\n\t var i = 1;\n\t var args = arguments;\n\t var len = args.length;\n\t var str = String(f).replace(formatRegExp, function(x) {\n\t if (x === '%%') return '%';\n\t if (i >= len) return x;\n\t switch (x) {\n\t case '%s': return String(args[i++]);\n\t case '%d': return Number(args[i++]);\n\t case '%j':\n\t try {\n\t return JSON.stringify(args[i++]);\n\t } catch (_) {\n\t return '[Circular]';\n\t }\n\t default:\n\t return x;\n\t }\n\t });\n\t for (var x = args[i]; i < len; x = args[++i]) {\n\t if (isNull(x) || !isObject(x)) {\n\t str += ' ' + x;\n\t } else {\n\t str += ' ' + inspect(x);\n\t }\n\t }\n\t return str;\n\t};\n\t\n\t\n\t// Mark that a method should not be used.\n\t// Returns a modified function which warns once by default.\n\t// If --no-deprecation is set, then it is a no-op.\n\texports.deprecate = function(fn, msg) {\n\t // Allow for deprecating things in the process of starting up.\n\t if (isUndefined(global.process)) {\n\t return function() {\n\t return exports.deprecate(fn, msg).apply(this, arguments);\n\t };\n\t }\n\t\n\t if (process.noDeprecation === true) {\n\t return fn;\n\t }\n\t\n\t var warned = false;\n\t function deprecated() {\n\t if (!warned) {\n\t if (process.throwDeprecation) {\n\t throw new Error(msg);\n\t } else if (process.traceDeprecation) {\n\t console.trace(msg);\n\t } else {\n\t console.error(msg);\n\t }\n\t warned = true;\n\t }\n\t return fn.apply(this, arguments);\n\t }\n\t\n\t return deprecated;\n\t};\n\t\n\t\n\tvar debugs = {};\n\tvar debugEnviron;\n\texports.debuglog = function(set) {\n\t if (isUndefined(debugEnviron))\n\t debugEnviron = process.env.NODE_DEBUG || '';\n\t set = set.toUpperCase();\n\t if (!debugs[set]) {\n\t if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n\t var pid = process.pid;\n\t debugs[set] = function() {\n\t var msg = exports.format.apply(exports, arguments);\n\t console.error('%s %d: %s', set, pid, msg);\n\t };\n\t } else {\n\t debugs[set] = function() {};\n\t }\n\t }\n\t return debugs[set];\n\t};\n\t\n\t\n\t/**\n\t * Echos the value of a value. Trys to print the value out\n\t * in the best way possible given the different types.\n\t *\n\t * @param {Object} obj The object to print out.\n\t * @param {Object} opts Optional options object that alters the output.\n\t */\n\t/* legacy: obj, showHidden, depth, colors*/\n\tfunction inspect(obj, opts) {\n\t // default options\n\t var ctx = {\n\t seen: [],\n\t stylize: stylizeNoColor\n\t };\n\t // legacy...\n\t if (arguments.length >= 3) ctx.depth = arguments[2];\n\t if (arguments.length >= 4) ctx.colors = arguments[3];\n\t if (isBoolean(opts)) {\n\t // legacy...\n\t ctx.showHidden = opts;\n\t } else if (opts) {\n\t // got an \"options\" object\n\t exports._extend(ctx, opts);\n\t }\n\t // set default options\n\t if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n\t if (isUndefined(ctx.depth)) ctx.depth = 2;\n\t if (isUndefined(ctx.colors)) ctx.colors = false;\n\t if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n\t if (ctx.colors) ctx.stylize = stylizeWithColor;\n\t return formatValue(ctx, obj, ctx.depth);\n\t}\n\texports.inspect = inspect;\n\t\n\t\n\t// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\n\tinspect.colors = {\n\t 'bold' : [1, 22],\n\t 'italic' : [3, 23],\n\t 'underline' : [4, 24],\n\t 'inverse' : [7, 27],\n\t 'white' : [37, 39],\n\t 'grey' : [90, 39],\n\t 'black' : [30, 39],\n\t 'blue' : [34, 39],\n\t 'cyan' : [36, 39],\n\t 'green' : [32, 39],\n\t 'magenta' : [35, 39],\n\t 'red' : [31, 39],\n\t 'yellow' : [33, 39]\n\t};\n\t\n\t// Don't use 'blue' not visible on cmd.exe\n\tinspect.styles = {\n\t 'special': 'cyan',\n\t 'number': 'yellow',\n\t 'boolean': 'yellow',\n\t 'undefined': 'grey',\n\t 'null': 'bold',\n\t 'string': 'green',\n\t 'date': 'magenta',\n\t // \"name\": intentionally not styling\n\t 'regexp': 'red'\n\t};\n\t\n\t\n\tfunction stylizeWithColor(str, styleType) {\n\t var style = inspect.styles[styleType];\n\t\n\t if (style) {\n\t return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n\t '\\u001b[' + inspect.colors[style][1] + 'm';\n\t } else {\n\t return str;\n\t }\n\t}\n\t\n\t\n\tfunction stylizeNoColor(str, styleType) {\n\t return str;\n\t}\n\t\n\t\n\tfunction arrayToHash(array) {\n\t var hash = {};\n\t\n\t array.forEach(function(val, idx) {\n\t hash[val] = true;\n\t });\n\t\n\t return hash;\n\t}\n\t\n\t\n\tfunction formatValue(ctx, value, recurseTimes) {\n\t // Provide a hook for user-specified inspect functions.\n\t // Check that value is an object with an inspect function on it\n\t if (ctx.customInspect &&\n\t value &&\n\t isFunction(value.inspect) &&\n\t // Filter out the util module, it's inspect function is special\n\t value.inspect !== exports.inspect &&\n\t // Also filter out any prototype objects using the circular check.\n\t !(value.constructor && value.constructor.prototype === value)) {\n\t var ret = value.inspect(recurseTimes, ctx);\n\t if (!isString(ret)) {\n\t ret = formatValue(ctx, ret, recurseTimes);\n\t }\n\t return ret;\n\t }\n\t\n\t // Primitive types cannot have properties\n\t var primitive = formatPrimitive(ctx, value);\n\t if (primitive) {\n\t return primitive;\n\t }\n\t\n\t // Look up the keys of the object.\n\t var keys = Object.keys(value);\n\t var visibleKeys = arrayToHash(keys);\n\t\n\t if (ctx.showHidden) {\n\t keys = Object.getOwnPropertyNames(value);\n\t }\n\t\n\t // IE doesn't make error fields non-enumerable\n\t // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n\t if (isError(value)\n\t && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n\t return formatError(value);\n\t }\n\t\n\t // Some type of object without properties can be shortcutted.\n\t if (keys.length === 0) {\n\t if (isFunction(value)) {\n\t var name = value.name ? ': ' + value.name : '';\n\t return ctx.stylize('[Function' + name + ']', 'special');\n\t }\n\t if (isRegExp(value)) {\n\t return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n\t }\n\t if (isDate(value)) {\n\t return ctx.stylize(Date.prototype.toString.call(value), 'date');\n\t }\n\t if (isError(value)) {\n\t return formatError(value);\n\t }\n\t }\n\t\n\t var base = '', array = false, braces = ['{', '}'];\n\t\n\t // Make Array say that they are Array\n\t if (isArray(value)) {\n\t array = true;\n\t braces = ['[', ']'];\n\t }\n\t\n\t // Make functions say that they are functions\n\t if (isFunction(value)) {\n\t var n = value.name ? ': ' + value.name : '';\n\t base = ' [Function' + n + ']';\n\t }\n\t\n\t // Make RegExps say that they are RegExps\n\t if (isRegExp(value)) {\n\t base = ' ' + RegExp.prototype.toString.call(value);\n\t }\n\t\n\t // Make dates with properties first say the date\n\t if (isDate(value)) {\n\t base = ' ' + Date.prototype.toUTCString.call(value);\n\t }\n\t\n\t // Make error with message first say the error\n\t if (isError(value)) {\n\t base = ' ' + formatError(value);\n\t }\n\t\n\t if (keys.length === 0 && (!array || value.length == 0)) {\n\t return braces[0] + base + braces[1];\n\t }\n\t\n\t if (recurseTimes < 0) {\n\t if (isRegExp(value)) {\n\t return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n\t } else {\n\t return ctx.stylize('[Object]', 'special');\n\t }\n\t }\n\t\n\t ctx.seen.push(value);\n\t\n\t var output;\n\t if (array) {\n\t output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n\t } else {\n\t output = keys.map(function(key) {\n\t return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n\t });\n\t }\n\t\n\t ctx.seen.pop();\n\t\n\t return reduceToSingleString(output, base, braces);\n\t}\n\t\n\t\n\tfunction formatPrimitive(ctx, value) {\n\t if (isUndefined(value))\n\t return ctx.stylize('undefined', 'undefined');\n\t if (isString(value)) {\n\t var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n\t .replace(/'/g, \"\\\\'\")\n\t .replace(/\\\\\"/g, '\"') + '\\'';\n\t return ctx.stylize(simple, 'string');\n\t }\n\t if (isNumber(value))\n\t return ctx.stylize('' + value, 'number');\n\t if (isBoolean(value))\n\t return ctx.stylize('' + value, 'boolean');\n\t // For some reason typeof null is \"object\", so special case here.\n\t if (isNull(value))\n\t return ctx.stylize('null', 'null');\n\t}\n\t\n\t\n\tfunction formatError(value) {\n\t return '[' + Error.prototype.toString.call(value) + ']';\n\t}\n\t\n\t\n\tfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n\t var output = [];\n\t for (var i = 0, l = value.length; i < l; ++i) {\n\t if (hasOwnProperty(value, String(i))) {\n\t output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n\t String(i), true));\n\t } else {\n\t output.push('');\n\t }\n\t }\n\t keys.forEach(function(key) {\n\t if (!key.match(/^\\d+$/)) {\n\t output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n\t key, true));\n\t }\n\t });\n\t return output;\n\t}\n\t\n\t\n\tfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n\t var name, str, desc;\n\t desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n\t if (desc.get) {\n\t if (desc.set) {\n\t str = ctx.stylize('[Getter/Setter]', 'special');\n\t } else {\n\t str = ctx.stylize('[Getter]', 'special');\n\t }\n\t } else {\n\t if (desc.set) {\n\t str = ctx.stylize('[Setter]', 'special');\n\t }\n\t }\n\t if (!hasOwnProperty(visibleKeys, key)) {\n\t name = '[' + key + ']';\n\t }\n\t if (!str) {\n\t if (ctx.seen.indexOf(desc.value) < 0) {\n\t if (isNull(recurseTimes)) {\n\t str = formatValue(ctx, desc.value, null);\n\t } else {\n\t str = formatValue(ctx, desc.value, recurseTimes - 1);\n\t }\n\t if (str.indexOf('\\n') > -1) {\n\t if (array) {\n\t str = str.split('\\n').map(function(line) {\n\t return ' ' + line;\n\t }).join('\\n').substr(2);\n\t } else {\n\t str = '\\n' + str.split('\\n').map(function(line) {\n\t return ' ' + line;\n\t }).join('\\n');\n\t }\n\t }\n\t } else {\n\t str = ctx.stylize('[Circular]', 'special');\n\t }\n\t }\n\t if (isUndefined(name)) {\n\t if (array && key.match(/^\\d+$/)) {\n\t return str;\n\t }\n\t name = JSON.stringify('' + key);\n\t if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n\t name = name.substr(1, name.length - 2);\n\t name = ctx.stylize(name, 'name');\n\t } else {\n\t name = name.replace(/'/g, \"\\\\'\")\n\t .replace(/\\\\\"/g, '\"')\n\t .replace(/(^\"|\"$)/g, \"'\");\n\t name = ctx.stylize(name, 'string');\n\t }\n\t }\n\t\n\t return name + ': ' + str;\n\t}\n\t\n\t\n\tfunction reduceToSingleString(output, base, braces) {\n\t var numLinesEst = 0;\n\t var length = output.reduce(function(prev, cur) {\n\t numLinesEst++;\n\t if (cur.indexOf('\\n') >= 0) numLinesEst++;\n\t return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n\t }, 0);\n\t\n\t if (length > 60) {\n\t return braces[0] +\n\t (base === '' ? '' : base + '\\n ') +\n\t ' ' +\n\t output.join(',\\n ') +\n\t ' ' +\n\t braces[1];\n\t }\n\t\n\t return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n\t}\n\t\n\t\n\t// NOTE: These type checking functions intentionally don't use `instanceof`\n\t// because it is fragile and can be easily faked with `Object.create()`.\n\tfunction isArray(ar) {\n\t return Array.isArray(ar);\n\t}\n\texports.isArray = isArray;\n\t\n\tfunction isBoolean(arg) {\n\t return typeof arg === 'boolean';\n\t}\n\texports.isBoolean = isBoolean;\n\t\n\tfunction isNull(arg) {\n\t return arg === null;\n\t}\n\texports.isNull = isNull;\n\t\n\tfunction isNullOrUndefined(arg) {\n\t return arg == null;\n\t}\n\texports.isNullOrUndefined = isNullOrUndefined;\n\t\n\tfunction isNumber(arg) {\n\t return typeof arg === 'number';\n\t}\n\texports.isNumber = isNumber;\n\t\n\tfunction isString(arg) {\n\t return typeof arg === 'string';\n\t}\n\texports.isString = isString;\n\t\n\tfunction isSymbol(arg) {\n\t return typeof arg === 'symbol';\n\t}\n\texports.isSymbol = isSymbol;\n\t\n\tfunction isUndefined(arg) {\n\t return arg === void 0;\n\t}\n\texports.isUndefined = isUndefined;\n\t\n\tfunction isRegExp(re) {\n\t return isObject(re) && objectToString(re) === '[object RegExp]';\n\t}\n\texports.isRegExp = isRegExp;\n\t\n\tfunction isObject(arg) {\n\t return typeof arg === 'object' && arg !== null;\n\t}\n\texports.isObject = isObject;\n\t\n\tfunction isDate(d) {\n\t return isObject(d) && objectToString(d) === '[object Date]';\n\t}\n\texports.isDate = isDate;\n\t\n\tfunction isError(e) {\n\t return isObject(e) &&\n\t (objectToString(e) === '[object Error]' || e instanceof Error);\n\t}\n\texports.isError = isError;\n\t\n\tfunction isFunction(arg) {\n\t return typeof arg === 'function';\n\t}\n\texports.isFunction = isFunction;\n\t\n\tfunction isPrimitive(arg) {\n\t return arg === null ||\n\t typeof arg === 'boolean' ||\n\t typeof arg === 'number' ||\n\t typeof arg === 'string' ||\n\t typeof arg === 'symbol' || // ES6 symbol\n\t typeof arg === 'undefined';\n\t}\n\texports.isPrimitive = isPrimitive;\n\t\n\texports.isBuffer = __webpack_require__(92);\n\t\n\tfunction objectToString(o) {\n\t return Object.prototype.toString.call(o);\n\t}\n\t\n\t\n\tfunction pad(n) {\n\t return n < 10 ? '0' + n.toString(10) : n.toString(10);\n\t}\n\t\n\t\n\tvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n\t 'Oct', 'Nov', 'Dec'];\n\t\n\t// 26 Feb 16:19:34\n\tfunction timestamp() {\n\t var d = new Date();\n\t var time = [pad(d.getHours()),\n\t pad(d.getMinutes()),\n\t pad(d.getSeconds())].join(':');\n\t return [d.getDate(), months[d.getMonth()], time].join(' ');\n\t}\n\t\n\t\n\t// log is just a thin wrapper to console.log that prepends a timestamp\n\texports.log = function() {\n\t console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n\t};\n\t\n\t\n\t/**\n\t * Inherit the prototype methods from one constructor into another.\n\t *\n\t * The Function.prototype.inherits from lang.js rewritten as a standalone\n\t * function (not on Function.prototype). NOTE: If this file is to be loaded\n\t * during bootstrapping this function needs to be rewritten using some native\n\t * functions as prototype setup using normal JavaScript does not work as\n\t * expected during bootstrapping (see mirror.js in r114903).\n\t *\n\t * @param {function} ctor Constructor function which needs to inherit the\n\t * prototype.\n\t * @param {function} superCtor Constructor function to inherit prototype from.\n\t */\n\texports.inherits = __webpack_require__(91);\n\t\n\texports._extend = function(origin, add) {\n\t // Don't do anything if add isn't an object\n\t if (!add || !isObject(add)) return origin;\n\t\n\t var keys = Object.keys(add);\n\t var i = keys.length;\n\t while (i--) {\n\t origin[keys[i]] = add[keys[i]];\n\t }\n\t return origin;\n\t};\n\t\n\tfunction hasOwnProperty(obj, prop) {\n\t return Object.prototype.hasOwnProperty.call(obj, prop);\n\t}\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(23), __webpack_require__(7)))\n\n/***/ }),\n\n/***/ 872:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t__webpack_require__(1062);\n\t\n\t__webpack_require__(1130);\n\t\n\t__webpack_require__(886);\n\n/***/ }),\n\n/***/ 886:\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tfunction openInquiryWindow(url) {\n\t window.open(url, 'inquiry', 'width=980, height=800, menubar=no, toolbar=no, scrollbars=yes');\n\t}\n\twindow.openInquiryWindow = openInquiryWindow;\n\n/***/ }),\n\n/***/ 1062:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(console) {/**\n\t * Intro.js v2.9.3\n\t * https://github.com/usablica/intro.js\n\t *\n\t * Copyright (C) 2017 Afshin Mehrabani (@afshinmeh)\n\t */\n\t\n\t(function(f) {\n\t if (true) {\n\t module.exports = f();\n\t // deprecated function\n\t // @since 2.8.0\n\t module.exports.introJs = function () {\n\t console.warn('Deprecated: please use require(\"intro.js\") directly, instead of the introJs method of the function');\n\t // introJs()\n\t return f().apply(this, arguments);\n\t };\n\t } else if (typeof define === \"function\" && define.amd) {\n\t define([], f);\n\t } else {\n\t var g;\n\t if (typeof window !== \"undefined\") {\n\t g = window;\n\t } else if (typeof global !== \"undefined\") {\n\t g = global;\n\t } else if (typeof self !== \"undefined\") {\n\t g = self;\n\t } else {\n\t g = this;\n\t }\n\t g.introJs = f();\n\t }\n\t})(function () {\n\t //Default config/variables\n\t var VERSION = '2.9.3';\n\t\n\t /**\n\t * IntroJs main class\n\t *\n\t * @class IntroJs\n\t */\n\t function IntroJs(obj) {\n\t this._targetElement = obj;\n\t this._introItems = [];\n\t\n\t this._options = {\n\t /* Next button label in tooltip box */\n\t nextLabel: 'Next →',\n\t /* Previous button label in tooltip box */\n\t prevLabel: '← Back',\n\t /* Skip button label in tooltip box */\n\t skipLabel: 'Skip',\n\t /* Done button label in tooltip box */\n\t doneLabel: 'Done',\n\t /* Hide previous button in the first step? Otherwise, it will be disabled button. */\n\t hidePrev: false,\n\t /* Hide next button in the last step? Otherwise, it will be disabled button. */\n\t hideNext: false,\n\t /* Default tooltip box position */\n\t tooltipPosition: 'bottom',\n\t /* Next CSS class for tooltip boxes */\n\t tooltipClass: '',\n\t /* CSS class that is added to the helperLayer */\n\t highlightClass: '',\n\t /* Close introduction when pressing Escape button? */\n\t exitOnEsc: true,\n\t /* Close introduction when clicking on overlay layer? */\n\t exitOnOverlayClick: true,\n\t /* Show step numbers in introduction? */\n\t showStepNumbers: true,\n\t /* Let user use keyboard to navigate the tour? */\n\t keyboardNavigation: true,\n\t /* Show tour control buttons? */\n\t showButtons: true,\n\t /* Show tour bullets? */\n\t showBullets: true,\n\t /* Show tour progress? */\n\t showProgress: false,\n\t /* Scroll to highlighted element? */\n\t scrollToElement: true,\n\t /*\n\t * Should we scroll the tooltip or target element?\n\t *\n\t * Options are: 'element' or 'tooltip'\n\t */\n\t scrollTo: 'element',\n\t /* Padding to add after scrolling when element is not in the viewport (in pixels) */\n\t scrollPadding: 30,\n\t /* Set the overlay opacity */\n\t overlayOpacity: 0.8,\n\t /* Precedence of positions, when auto is enabled */\n\t positionPrecedence: [\"bottom\", \"top\", \"right\", \"left\"],\n\t /* Disable an interaction with element? */\n\t disableInteraction: false,\n\t /* Set how much padding to be used around helper element */\n\t helperElementPadding: 10,\n\t /* Default hint position */\n\t hintPosition: 'top-middle',\n\t /* Hint button label */\n\t hintButtonLabel: 'Got it',\n\t /* Adding animation to hints? */\n\t hintAnimation: true,\n\t /* additional classes to put on the buttons */\n\t buttonClass: \"introjs-button\"\n\t };\n\t }\n\t\n\t /**\n\t * Initiate a new introduction/guide from an element in the page\n\t *\n\t * @api private\n\t * @method _introForElement\n\t * @param {Object} targetElm\n\t * @param {String} group\n\t * @returns {Boolean} Success or not?\n\t */\n\t function _introForElement(targetElm, group) {\n\t var allIntroSteps = targetElm.querySelectorAll(\"*[data-intro]\"),\n\t introItems = [];\n\t\n\t if (this._options.steps) {\n\t //use steps passed programmatically\n\t _forEach(this._options.steps, function (step) {\n\t var currentItem = _cloneObject(step);\n\t\n\t //set the step\n\t currentItem.step = introItems.length + 1;\n\t\n\t //use querySelector function only when developer used CSS selector\n\t if (typeof (currentItem.element) === 'string') {\n\t //grab the element with given selector from the page\n\t currentItem.element = document.querySelector(currentItem.element);\n\t }\n\t\n\t //intro without element\n\t if (typeof (currentItem.element) === 'undefined' || currentItem.element === null) {\n\t var floatingElementQuery = document.querySelector(\".introjsFloatingElement\");\n\t\n\t if (floatingElementQuery === null) {\n\t floatingElementQuery = document.createElement('div');\n\t floatingElementQuery.className = 'introjsFloatingElement';\n\t\n\t document.body.appendChild(floatingElementQuery);\n\t }\n\t\n\t currentItem.element = floatingElementQuery;\n\t currentItem.position = 'floating';\n\t }\n\t\n\t currentItem.scrollTo = currentItem.scrollTo || this._options.scrollTo;\n\t\n\t if (typeof (currentItem.disableInteraction) === 'undefined') {\n\t currentItem.disableInteraction = this._options.disableInteraction;\n\t }\n\t\n\t if (currentItem.element !== null) {\n\t introItems.push(currentItem);\n\t } \n\t }.bind(this));\n\t\n\t } else {\n\t //use steps from data-* annotations\n\t var elmsLength = allIntroSteps.length;\n\t var disableInteraction;\n\t \n\t //if there's no element to intro\n\t if (elmsLength < 1) {\n\t return false;\n\t }\n\t\n\t _forEach(allIntroSteps, function (currentElement) {\n\t \n\t // PR #80\n\t // start intro for groups of elements\n\t if (group && (currentElement.getAttribute(\"data-intro-group\") !== group)) {\n\t return;\n\t }\n\t\n\t // skip hidden elements\n\t if (currentElement.style.display === 'none') {\n\t return;\n\t }\n\t\n\t var step = parseInt(currentElement.getAttribute('data-step'), 10);\n\t\n\t if (typeof (currentElement.getAttribute('data-disable-interaction')) !== 'undefined') {\n\t disableInteraction = !!currentElement.getAttribute('data-disable-interaction');\n\t } else {\n\t disableInteraction = this._options.disableInteraction;\n\t }\n\t\n\t if (step > 0) {\n\t introItems[step - 1] = {\n\t element: currentElement,\n\t intro: currentElement.getAttribute('data-intro'),\n\t step: parseInt(currentElement.getAttribute('data-step'), 10),\n\t tooltipClass: currentElement.getAttribute('data-tooltipclass'),\n\t highlightClass: currentElement.getAttribute('data-highlightclass'),\n\t position: currentElement.getAttribute('data-position') || this._options.tooltipPosition,\n\t scrollTo: currentElement.getAttribute('data-scrollto') || this._options.scrollTo,\n\t disableInteraction: disableInteraction\n\t };\n\t }\n\t }.bind(this));\n\t\n\t //next add intro items without data-step\n\t //todo: we need a cleanup here, two loops are redundant\n\t var nextStep = 0;\n\t\n\t _forEach(allIntroSteps, function (currentElement) {\n\t \n\t // PR #80\n\t // start intro for groups of elements\n\t if (group && (currentElement.getAttribute(\"data-intro-group\") !== group)) {\n\t return;\n\t }\n\t \n\t if (currentElement.getAttribute('data-step') === null) {\n\t\n\t while (true) {\n\t if (typeof introItems[nextStep] === 'undefined') {\n\t break;\n\t } else {\n\t nextStep++;\n\t }\n\t } \n\t\n\t if (typeof (currentElement.getAttribute('data-disable-interaction')) !== 'undefined') {\n\t disableInteraction = !!currentElement.getAttribute('data-disable-interaction');\n\t } else {\n\t disableInteraction = this._options.disableInteraction;\n\t }\n\t\n\t introItems[nextStep] = {\n\t element: currentElement,\n\t intro: currentElement.getAttribute('data-intro'),\n\t step: nextStep + 1,\n\t tooltipClass: currentElement.getAttribute('data-tooltipclass'),\n\t highlightClass: currentElement.getAttribute('data-highlightclass'),\n\t position: currentElement.getAttribute('data-position') || this._options.tooltipPosition,\n\t scrollTo: currentElement.getAttribute('data-scrollto') || this._options.scrollTo,\n\t disableInteraction: disableInteraction\n\t };\n\t }\n\t }.bind(this));\n\t }\n\t\n\t //removing undefined/null elements\n\t var tempIntroItems = [];\n\t for (var z = 0; z < introItems.length; z++) {\n\t if (introItems[z]) {\n\t // copy non-falsy values to the end of the array\n\t tempIntroItems.push(introItems[z]); \n\t } \n\t }\n\t\n\t introItems = tempIntroItems;\n\t\n\t //Ok, sort all items with given steps\n\t introItems.sort(function (a, b) {\n\t return a.step - b.step;\n\t });\n\t\n\t //set it to the introJs object\n\t this._introItems = introItems;\n\t\n\t //add overlay layer to the page\n\t if(_addOverlayLayer.call(this, targetElm)) {\n\t //then, start the show\n\t _nextStep.call(this);\n\t\n\t if (this._options.keyboardNavigation) {\n\t DOMEvent.on(window, 'keydown', _onKeyDown, this, true);\n\t }\n\t //for window resize\n\t DOMEvent.on(window, 'resize', _onResize, this, true);\n\t }\n\t return false;\n\t }\n\t\n\t function _onResize () {\n\t this.refresh.call(this);\n\t }\n\t\n\t /**\n\t * on keyCode:\n\t * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode\n\t * This feature has been removed from the Web standards.\n\t * Though some browsers may still support it, it is in\n\t * the process of being dropped.\n\t * Instead, you should use KeyboardEvent.code,\n\t * if it's implemented.\n\t *\n\t * jQuery's approach is to test for\n\t * (1) e.which, then\n\t * (2) e.charCode, then\n\t * (3) e.keyCode\n\t * https://github.com/jquery/jquery/blob/a6b0705294d336ae2f63f7276de0da1195495363/src/event.js#L638\n\t *\n\t * @param type var\n\t * @return type\n\t */\n\t function _onKeyDown (e) {\n\t var code = (e.code === null) ? e.which : e.code;\n\t\n\t // if code/e.which is null\n\t if (code === null) {\n\t code = (e.charCode === null) ? e.keyCode : e.charCode;\n\t }\n\t \n\t if ((code === 'Escape' || code === 27) && this._options.exitOnEsc === true) {\n\t //escape key pressed, exit the intro\n\t //check if exit callback is defined\n\t _exitIntro.call(this, this._targetElement);\n\t } else if (code === 'ArrowLeft' || code === 37) {\n\t //left arrow\n\t _previousStep.call(this);\n\t } else if (code === 'ArrowRight' || code === 39) {\n\t //right arrow\n\t _nextStep.call(this);\n\t } else if (code === 'Enter' || code === 13) {\n\t //srcElement === ie\n\t var target = e.target || e.srcElement;\n\t if (target && target.className.match('introjs-prevbutton')) {\n\t //user hit enter while focusing on previous button\n\t _previousStep.call(this);\n\t } else if (target && target.className.match('introjs-skipbutton')) {\n\t //user hit enter while focusing on skip button\n\t if (this._introItems.length - 1 === this._currentStep && typeof (this._introCompleteCallback) === 'function') {\n\t this._introCompleteCallback.call(this);\n\t }\n\t\n\t _exitIntro.call(this, this._targetElement);\n\t } else if (target && target.getAttribute('data-stepnumber')) {\n\t // user hit enter while focusing on step bullet\n\t target.click();\n\t } else {\n\t //default behavior for responding to enter\n\t _nextStep.call(this);\n\t }\n\t\n\t //prevent default behaviour on hitting Enter, to prevent steps being skipped in some browsers\n\t if(e.preventDefault) {\n\t e.preventDefault();\n\t } else {\n\t e.returnValue = false;\n\t }\n\t }\n\t }\n\t\n\t /*\n\t * makes a copy of the object\n\t * @api private\n\t * @method _cloneObject\n\t */\n\t function _cloneObject(object) {\n\t if (object === null || typeof (object) !== 'object' || typeof (object.nodeType) !== 'undefined') {\n\t return object;\n\t }\n\t var temp = {};\n\t for (var key in object) {\n\t if (typeof(window.jQuery) !== 'undefined' && object[key] instanceof window.jQuery) {\n\t temp[key] = object[key];\n\t } else {\n\t temp[key] = _cloneObject(object[key]);\n\t }\n\t }\n\t return temp;\n\t }\n\t /**\n\t * Go to specific step of introduction\n\t *\n\t * @api private\n\t * @method _goToStep\n\t */\n\t function _goToStep(step) {\n\t //because steps starts with zero\n\t this._currentStep = step - 2;\n\t if (typeof (this._introItems) !== 'undefined') {\n\t _nextStep.call(this);\n\t }\n\t }\n\t\n\t /**\n\t * Go to the specific step of introduction with the explicit [data-step] number\n\t *\n\t * @api private\n\t * @method _goToStepNumber\n\t */\n\t function _goToStepNumber(step) {\n\t this._currentStepNumber = step;\n\t if (typeof (this._introItems) !== 'undefined') {\n\t _nextStep.call(this);\n\t }\n\t }\n\t\n\t /**\n\t * Go to next step on intro\n\t *\n\t * @api private\n\t * @method _nextStep\n\t */\n\t function _nextStep() {\n\t this._direction = 'forward';\n\t\n\t if (typeof (this._currentStepNumber) !== 'undefined') {\n\t _forEach(this._introItems, function (item, i) {\n\t if( item.step === this._currentStepNumber ) {\n\t this._currentStep = i - 1;\n\t this._currentStepNumber = undefined;\n\t }\n\t }.bind(this));\n\t }\n\t\n\t if (typeof (this._currentStep) === 'undefined') {\n\t this._currentStep = 0;\n\t } else {\n\t ++this._currentStep;\n\t }\n\t\n\t var nextStep = this._introItems[this._currentStep];\n\t var continueStep = true;\n\t\n\t if (typeof (this._introBeforeChangeCallback) !== 'undefined') {\n\t continueStep = this._introBeforeChangeCallback.call(this, nextStep.element);\n\t }\n\t\n\t // if `onbeforechange` returned `false`, stop displaying the element\n\t if (continueStep === false) {\n\t --this._currentStep;\n\t return false;\n\t }\n\t\n\t if ((this._introItems.length) <= this._currentStep) {\n\t //end of the intro\n\t //check if any callback is defined\n\t if (typeof (this._introCompleteCallback) === 'function') {\n\t this._introCompleteCallback.call(this);\n\t }\n\t _exitIntro.call(this, this._targetElement);\n\t return;\n\t }\n\t\n\t _showElement.call(this, nextStep);\n\t }\n\t\n\t /**\n\t * Go to previous step on intro\n\t *\n\t * @api private\n\t * @method _previousStep\n\t */\n\t function _previousStep() {\n\t this._direction = 'backward';\n\t\n\t if (this._currentStep === 0) {\n\t return false;\n\t }\n\t\n\t --this._currentStep;\n\t\n\t var nextStep = this._introItems[this._currentStep];\n\t var continueStep = true;\n\t\n\t if (typeof (this._introBeforeChangeCallback) !== 'undefined') {\n\t continueStep = this._introBeforeChangeCallback.call(this, nextStep.element);\n\t }\n\t\n\t // if `onbeforechange` returned `false`, stop displaying the element\n\t if (continueStep === false) {\n\t ++this._currentStep;\n\t return false;\n\t }\n\t\n\t _showElement.call(this, nextStep);\n\t }\n\t\n\t /**\n\t * Update placement of the intro objects on the screen\n\t * @api private\n\t */\n\t function _refresh() {\n\t // re-align intros\n\t _setHelperLayerPosition.call(this, document.querySelector('.introjs-helperLayer'));\n\t _setHelperLayerPosition.call(this, document.querySelector('.introjs-tooltipReferenceLayer'));\n\t _setHelperLayerPosition.call(this, document.querySelector('.introjs-disableInteraction'));\n\t\n\t // re-align tooltip\n\t if(this._currentStep !== undefined && this._currentStep !== null) {\n\t var oldHelperNumberLayer = document.querySelector('.introjs-helperNumberLayer'),\n\t oldArrowLayer = document.querySelector('.introjs-arrow'),\n\t oldtooltipContainer = document.querySelector('.introjs-tooltip');\n\t _placeTooltip.call(this, this._introItems[this._currentStep].element, oldtooltipContainer, oldArrowLayer, oldHelperNumberLayer);\n\t }\n\t\n\t //re-align hints\n\t _reAlignHints.call(this);\n\t return this;\n\t }\n\t\n\t /**\n\t * Exit from intro\n\t *\n\t * @api private\n\t * @method _exitIntro\n\t * @param {Object} targetElement\n\t * @param {Boolean} force - Setting to `true` will skip the result of beforeExit callback\n\t */\n\t function _exitIntro(targetElement, force) {\n\t var continueExit = true;\n\t\n\t // calling onbeforeexit callback\n\t //\n\t // If this callback return `false`, it would halt the process\n\t if (this._introBeforeExitCallback !== undefined) {\n\t continueExit = this._introBeforeExitCallback.call(this);\n\t }\n\t\n\t // skip this check if `force` parameter is `true`\n\t // otherwise, if `onbeforeexit` returned `false`, don't exit the intro\n\t if (!force && continueExit === false) return;\n\t\n\t //remove overlay layers from the page\n\t var overlayLayers = targetElement.querySelectorAll('.introjs-overlay');\n\t\n\t if (overlayLayers && overlayLayers.length) {\n\t _forEach(overlayLayers, function (overlayLayer) {\n\t overlayLayer.style.opacity = 0;\n\t window.setTimeout(function () {\n\t if (this.parentNode) {\n\t this.parentNode.removeChild(this);\n\t }\n\t }.bind(overlayLayer), 500);\n\t }.bind(this));\n\t }\n\t\n\t //remove all helper layers\n\t var helperLayer = targetElement.querySelector('.introjs-helperLayer');\n\t if (helperLayer) {\n\t helperLayer.parentNode.removeChild(helperLayer);\n\t }\n\t\n\t var referenceLayer = targetElement.querySelector('.introjs-tooltipReferenceLayer');\n\t if (referenceLayer) {\n\t referenceLayer.parentNode.removeChild(referenceLayer);\n\t }\n\t\n\t //remove disableInteractionLayer\n\t var disableInteractionLayer = targetElement.querySelector('.introjs-disableInteraction');\n\t if (disableInteractionLayer) {\n\t disableInteractionLayer.parentNode.removeChild(disableInteractionLayer);\n\t }\n\t\n\t //remove intro floating element\n\t var floatingElement = document.querySelector('.introjsFloatingElement');\n\t if (floatingElement) {\n\t floatingElement.parentNode.removeChild(floatingElement);\n\t }\n\t\n\t _removeShowElement();\n\t\n\t //remove `introjs-fixParent` class from the elements\n\t var fixParents = document.querySelectorAll('.introjs-fixParent');\n\t _forEach(fixParents, function (parent) {\n\t _removeClass(parent, /introjs-fixParent/g);\n\t });\n\t\n\t //clean listeners\n\t DOMEvent.off(window, 'keydown', _onKeyDown, this, true);\n\t DOMEvent.off(window, 'resize', _onResize, this, true);\n\t\n\t //check if any callback is defined\n\t if (this._introExitCallback !== undefined) {\n\t this._introExitCallback.call(this);\n\t }\n\t\n\t //set the step to zero\n\t this._currentStep = undefined;\n\t }\n\t\n\t /**\n\t * Render tooltip box in the page\n\t *\n\t * @api private\n\t * @method _placeTooltip\n\t * @param {HTMLElement} targetElement\n\t * @param {HTMLElement} tooltipLayer\n\t * @param {HTMLElement} arrowLayer\n\t * @param {HTMLElement} helperNumberLayer\n\t * @param {Boolean} hintMode\n\t */\n\t function _placeTooltip(targetElement, tooltipLayer, arrowLayer, helperNumberLayer, hintMode) {\n\t var tooltipCssClass = '',\n\t currentStepObj,\n\t tooltipOffset,\n\t targetOffset,\n\t windowSize,\n\t currentTooltipPosition;\n\t\n\t hintMode = hintMode || false;\n\t\n\t //reset the old style\n\t tooltipLayer.style.top = null;\n\t tooltipLayer.style.right = null;\n\t tooltipLayer.style.bottom = null;\n\t tooltipLayer.style.left = null;\n\t tooltipLayer.style.marginLeft = null;\n\t tooltipLayer.style.marginTop = null;\n\t\n\t arrowLayer.style.display = 'inherit';\n\t\n\t if (typeof(helperNumberLayer) !== 'undefined' && helperNumberLayer !== null) {\n\t helperNumberLayer.style.top = null;\n\t helperNumberLayer.style.left = null;\n\t }\n\t\n\t //prevent error when `this._currentStep` is undefined\n\t if (!this._introItems[this._currentStep]) return;\n\t\n\t //if we have a custom css class for each step\n\t currentStepObj = this._introItems[this._currentStep];\n\t if (typeof (currentStepObj.tooltipClass) === 'string') {\n\t tooltipCssClass = currentStepObj.tooltipClass;\n\t } else {\n\t tooltipCssClass = this._options.tooltipClass;\n\t }\n\t\n\t tooltipLayer.className = ('introjs-tooltip ' + tooltipCssClass).replace(/^\\s+|\\s+$/g, '');\n\t tooltipLayer.setAttribute('role', 'dialog');\n\t\n\t currentTooltipPosition = this._introItems[this._currentStep].position;\n\t\n\t // Floating is always valid, no point in calculating\n\t if (currentTooltipPosition !== \"floating\") { \n\t currentTooltipPosition = _determineAutoPosition.call(this, targetElement, tooltipLayer, currentTooltipPosition);\n\t }\n\t\n\t var tooltipLayerStyleLeft;\n\t targetOffset = _getOffset(targetElement);\n\t tooltipOffset = _getOffset(tooltipLayer);\n\t windowSize = _getWinSize();\n\t\n\t _addClass(tooltipLayer, 'introjs-' + currentTooltipPosition);\n\t\n\t switch (currentTooltipPosition) {\n\t case 'top-right-aligned':\n\t arrowLayer.className = 'introjs-arrow bottom-right';\n\t\n\t var tooltipLayerStyleRight = 0;\n\t _checkLeft(targetOffset, tooltipLayerStyleRight, tooltipOffset, tooltipLayer);\n\t tooltipLayer.style.bottom = (targetOffset.height + 20) + 'px';\n\t break;\n\t\n\t case 'top-middle-aligned':\n\t arrowLayer.className = 'introjs-arrow bottom-middle';\n\t\n\t var tooltipLayerStyleLeftRight = targetOffset.width / 2 - tooltipOffset.width / 2;\n\t\n\t // a fix for middle aligned hints\n\t if (hintMode) {\n\t tooltipLayerStyleLeftRight += 5;\n\t }\n\t\n\t if (_checkLeft(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, tooltipLayer)) {\n\t tooltipLayer.style.right = null;\n\t _checkRight(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, windowSize, tooltipLayer);\n\t }\n\t tooltipLayer.style.bottom = (targetOffset.height + 20) + 'px';\n\t break;\n\t\n\t case 'top-left-aligned':\n\t // top-left-aligned is the same as the default top\n\t case 'top':\n\t arrowLayer.className = 'introjs-arrow bottom';\n\t\n\t tooltipLayerStyleLeft = (hintMode) ? 0 : 15;\n\t\n\t _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer);\n\t tooltipLayer.style.bottom = (targetOffset.height + 20) + 'px';\n\t break;\n\t case 'right':\n\t tooltipLayer.style.left = (targetOffset.width + 20) + 'px';\n\t if (targetOffset.top + tooltipOffset.height > windowSize.height) {\n\t // In this case, right would have fallen below the bottom of the screen.\n\t // Modify so that the bottom of the tooltip connects with the target\n\t arrowLayer.className = \"introjs-arrow left-bottom\";\n\t tooltipLayer.style.top = \"-\" + (tooltipOffset.height - targetOffset.height - 20) + \"px\";\n\t } else {\n\t arrowLayer.className = 'introjs-arrow left';\n\t }\n\t break;\n\t case 'left':\n\t if (!hintMode && this._options.showStepNumbers === true) {\n\t tooltipLayer.style.top = '15px';\n\t }\n\t\n\t if (targetOffset.top + tooltipOffset.height > windowSize.height) {\n\t // In this case, left would have fallen below the bottom of the screen.\n\t // Modify so that the bottom of the tooltip connects with the target\n\t tooltipLayer.style.top = \"-\" + (tooltipOffset.height - targetOffset.height - 20) + \"px\";\n\t arrowLayer.className = 'introjs-arrow right-bottom';\n\t } else {\n\t arrowLayer.className = 'introjs-arrow right';\n\t }\n\t tooltipLayer.style.right = (targetOffset.width + 20) + 'px';\n\t\n\t break;\n\t case 'floating':\n\t arrowLayer.style.display = 'none';\n\t\n\t //we have to adjust the top and left of layer manually for intro items without element\n\t tooltipLayer.style.left = '50%';\n\t tooltipLayer.style.top = '50%';\n\t tooltipLayer.style.marginLeft = '-' + (tooltipOffset.width / 2) + 'px';\n\t tooltipLayer.style.marginTop = '-' + (tooltipOffset.height / 2) + 'px';\n\t\n\t if (typeof(helperNumberLayer) !== 'undefined' && helperNumberLayer !== null) {\n\t helperNumberLayer.style.left = '-' + ((tooltipOffset.width / 2) + 18) + 'px';\n\t helperNumberLayer.style.top = '-' + ((tooltipOffset.height / 2) + 18) + 'px';\n\t }\n\t\n\t break;\n\t case 'bottom-right-aligned':\n\t arrowLayer.className = 'introjs-arrow top-right';\n\t\n\t tooltipLayerStyleRight = 0;\n\t _checkLeft(targetOffset, tooltipLayerStyleRight, tooltipOffset, tooltipLayer);\n\t tooltipLayer.style.top = (targetOffset.height + 20) + 'px';\n\t break;\n\t\n\t case 'bottom-middle-aligned':\n\t arrowLayer.className = 'introjs-arrow top-middle';\n\t\n\t tooltipLayerStyleLeftRight = targetOffset.width / 2 - tooltipOffset.width / 2;\n\t\n\t // a fix for middle aligned hints\n\t if (hintMode) {\n\t tooltipLayerStyleLeftRight += 5;\n\t }\n\t\n\t if (_checkLeft(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, tooltipLayer)) {\n\t tooltipLayer.style.right = null;\n\t _checkRight(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, windowSize, tooltipLayer);\n\t }\n\t tooltipLayer.style.top = (targetOffset.height + 20) + 'px';\n\t break;\n\t\n\t // case 'bottom-left-aligned':\n\t // Bottom-left-aligned is the same as the default bottom\n\t // case 'bottom':\n\t // Bottom going to follow the default behavior\n\t default:\n\t arrowLayer.className = 'introjs-arrow top';\n\t\n\t tooltipLayerStyleLeft = 0;\n\t _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer);\n\t tooltipLayer.style.top = (targetOffset.height + 20) + 'px';\n\t }\n\t }\n\t\n\t /**\n\t * Set tooltip left so it doesn't go off the right side of the window\n\t *\n\t * @return boolean true, if tooltipLayerStyleLeft is ok. false, otherwise.\n\t */\n\t function _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer) {\n\t if (targetOffset.left + tooltipLayerStyleLeft + tooltipOffset.width > windowSize.width) {\n\t // off the right side of the window\n\t tooltipLayer.style.left = (windowSize.width - tooltipOffset.width - targetOffset.left) + 'px';\n\t return false;\n\t }\n\t tooltipLayer.style.left = tooltipLayerStyleLeft + 'px';\n\t return true;\n\t }\n\t\n\t /**\n\t * Set tooltip right so it doesn't go off the left side of the window\n\t *\n\t * @return boolean true, if tooltipLayerStyleRight is ok. false, otherwise.\n\t */\n\t function _checkLeft(targetOffset, tooltipLayerStyleRight, tooltipOffset, tooltipLayer) {\n\t if (targetOffset.left + targetOffset.width - tooltipLayerStyleRight - tooltipOffset.width < 0) {\n\t // off the left side of the window\n\t tooltipLayer.style.left = (-targetOffset.left) + 'px';\n\t return false;\n\t }\n\t tooltipLayer.style.right = tooltipLayerStyleRight + 'px';\n\t return true;\n\t }\n\t\n\t /**\n\t * Determines the position of the tooltip based on the position precedence and availability\n\t * of screen space.\n\t *\n\t * @param {Object} targetElement\n\t * @param {Object} tooltipLayer\n\t * @param {String} desiredTooltipPosition\n\t * @return {String} calculatedPosition\n\t */\n\t function _determineAutoPosition(targetElement, tooltipLayer, desiredTooltipPosition) {\n\t\n\t // Take a clone of position precedence. These will be the available\n\t var possiblePositions = this._options.positionPrecedence.slice();\n\t\n\t var windowSize = _getWinSize();\n\t var tooltipHeight = _getOffset(tooltipLayer).height + 10;\n\t var tooltipWidth = _getOffset(tooltipLayer).width + 20;\n\t var targetElementRect = targetElement.getBoundingClientRect();\n\t\n\t // If we check all the possible areas, and there are no valid places for the tooltip, the element\n\t // must take up most of the screen real estate. Show the tooltip floating in the middle of the screen.\n\t var calculatedPosition = \"floating\";\n\t\n\t /*\n\t * auto determine position \n\t */\n\t\n\t // Check for space below\n\t if (targetElementRect.bottom + tooltipHeight + tooltipHeight > windowSize.height) {\n\t _removeEntry(possiblePositions, \"bottom\");\n\t }\n\t\n\t // Check for space above\n\t if (targetElementRect.top - tooltipHeight < 0) {\n\t _removeEntry(possiblePositions, \"top\");\n\t }\n\t\n\t // Check for space to the right\n\t if (targetElementRect.right + tooltipWidth > windowSize.width) {\n\t _removeEntry(possiblePositions, \"right\");\n\t }\n\t\n\t // Check for space to the left\n\t if (targetElementRect.left - tooltipWidth < 0) {\n\t _removeEntry(possiblePositions, \"left\");\n\t }\n\t\n\t // @var {String} ex: 'right-aligned'\n\t var desiredAlignment = (function (pos) {\n\t var hyphenIndex = pos.indexOf('-');\n\t if (hyphenIndex !== -1) {\n\t // has alignment\n\t return pos.substr(hyphenIndex);\n\t }\n\t return '';\n\t })(desiredTooltipPosition || '');\n\t\n\t // strip alignment from position\n\t if (desiredTooltipPosition) {\n\t // ex: \"bottom-right-aligned\"\n\t // should return 'bottom'\n\t desiredTooltipPosition = desiredTooltipPosition.split('-')[0];\n\t }\n\t\n\t if (possiblePositions.length) {\n\t if (desiredTooltipPosition !== \"auto\" &&\n\t possiblePositions.indexOf(desiredTooltipPosition) > -1) {\n\t // If the requested position is in the list, choose that\n\t calculatedPosition = desiredTooltipPosition;\n\t } else {\n\t // Pick the first valid position, in order\n\t calculatedPosition = possiblePositions[0];\n\t }\n\t }\n\t\n\t // only top and bottom positions have optional alignments\n\t if (['top', 'bottom'].indexOf(calculatedPosition) !== -1) {\n\t calculatedPosition += _determineAutoAlignment(targetElementRect.left, tooltipWidth, windowSize, desiredAlignment);\n\t }\n\t\n\t return calculatedPosition;\n\t }\n\t\n\t /**\n\t * auto-determine alignment\n\t * @param {Integer} offsetLeft\n\t * @param {Integer} tooltipWidth\n\t * @param {Object} windowSize\n\t * @param {String} desiredAlignment\n\t * @return {String} calculatedAlignment\n\t */\n\t function _determineAutoAlignment (offsetLeft, tooltipWidth, windowSize, desiredAlignment) {\n\t var halfTooltipWidth = tooltipWidth / 2,\n\t winWidth = Math.min(windowSize.width, window.screen.width),\n\t possibleAlignments = ['-left-aligned', '-middle-aligned', '-right-aligned'],\n\t calculatedAlignment = '';\n\t \n\t // valid left must be at least a tooltipWidth\n\t // away from right side\n\t if (winWidth - offsetLeft < tooltipWidth) {\n\t _removeEntry(possibleAlignments, '-left-aligned');\n\t }\n\t\n\t // valid middle must be at least half \n\t // width away from both sides\n\t if (offsetLeft < halfTooltipWidth || \n\t winWidth - offsetLeft < halfTooltipWidth) {\n\t _removeEntry(possibleAlignments, '-middle-aligned');\n\t }\n\t\n\t // valid right must be at least a tooltipWidth\n\t // width away from left side\n\t if (offsetLeft < tooltipWidth) {\n\t _removeEntry(possibleAlignments, '-right-aligned');\n\t }\n\t\n\t if (possibleAlignments.length) {\n\t if (possibleAlignments.indexOf(desiredAlignment) !== -1) {\n\t // the desired alignment is valid\n\t calculatedAlignment = desiredAlignment;\n\t } else {\n\t // pick the first valid position, in order\n\t calculatedAlignment = possibleAlignments[0];\n\t }\n\t } else {\n\t // if screen width is too small \n\t // for ANY alignment, middle is \n\t // probably the best for visibility\n\t calculatedAlignment = '-middle-aligned';\n\t }\n\t\n\t return calculatedAlignment;\n\t }\n\t\n\t /**\n\t * Remove an entry from a string array if it's there, does nothing if it isn't there.\n\t *\n\t * @param {Array} stringArray\n\t * @param {String} stringToRemove\n\t */\n\t function _removeEntry(stringArray, stringToRemove) {\n\t if (stringArray.indexOf(stringToRemove) > -1) {\n\t stringArray.splice(stringArray.indexOf(stringToRemove), 1);\n\t }\n\t }\n\t\n\t /**\n\t * Update the position of the helper layer on the screen\n\t *\n\t * @api private\n\t * @method _setHelperLayerPosition\n\t * @param {Object} helperLayer\n\t */\n\t function _setHelperLayerPosition(helperLayer) {\n\t if (helperLayer) {\n\t //prevent error when `this._currentStep` in undefined\n\t if (!this._introItems[this._currentStep]) return;\n\t\n\t var currentElement = this._introItems[this._currentStep],\n\t elementPosition = _getOffset(currentElement.element),\n\t widthHeightPadding = this._options.helperElementPadding;\n\t\n\t // If the target element is fixed, the tooltip should be fixed as well.\n\t // Otherwise, remove a fixed class that may be left over from the previous\n\t // step.\n\t if (_isFixed(currentElement.element)) {\n\t _addClass(helperLayer, 'introjs-fixedTooltip');\n\t } else {\n\t _removeClass(helperLayer, 'introjs-fixedTooltip');\n\t }\n\t\n\t if (currentElement.position === 'floating') {\n\t widthHeightPadding = 0;\n\t }\n\t\n\t //set new position to helper layer\n\t helperLayer.style.cssText = 'width: ' + (elementPosition.width + widthHeightPadding) + 'px; ' +\n\t 'height:' + (elementPosition.height + widthHeightPadding) + 'px; ' +\n\t 'top:' + (elementPosition.top - widthHeightPadding / 2) + 'px;' +\n\t 'left: ' + (elementPosition.left - widthHeightPadding / 2) + 'px;';\n\t\n\t }\n\t }\n\t\n\t /**\n\t * Add disableinteraction layer and adjust the size and position of the layer\n\t *\n\t * @api private\n\t * @method _disableInteraction\n\t */\n\t function _disableInteraction() {\n\t var disableInteractionLayer = document.querySelector('.introjs-disableInteraction');\n\t\n\t if (disableInteractionLayer === null) {\n\t disableInteractionLayer = document.createElement('div');\n\t disableInteractionLayer.className = 'introjs-disableInteraction';\n\t this._targetElement.appendChild(disableInteractionLayer);\n\t }\n\t\n\t _setHelperLayerPosition.call(this, disableInteractionLayer);\n\t }\n\t\n\t /**\n\t * Setting anchors to behave like buttons\n\t *\n\t * @api private\n\t * @method _setAnchorAsButton\n\t */\n\t function _setAnchorAsButton(anchor){\n\t anchor.setAttribute('role', 'button');\n\t anchor.tabIndex = 0;\n\t }\n\t\n\t /**\n\t * Show an element on the page\n\t *\n\t * @api private\n\t * @method _showElement\n\t * @param {Object} targetElement\n\t */\n\t function _showElement(targetElement) {\n\t if (typeof (this._introChangeCallback) !== 'undefined') {\n\t this._introChangeCallback.call(this, targetElement.element);\n\t }\n\t\n\t var self = this,\n\t oldHelperLayer = document.querySelector('.introjs-helperLayer'),\n\t oldReferenceLayer = document.querySelector('.introjs-tooltipReferenceLayer'),\n\t highlightClass = 'introjs-helperLayer',\n\t nextTooltipButton,\n\t prevTooltipButton,\n\t skipTooltipButton,\n\t scrollParent;\n\t\n\t //check for a current step highlight class\n\t if (typeof (targetElement.highlightClass) === 'string') {\n\t highlightClass += (' ' + targetElement.highlightClass);\n\t }\n\t //check for options highlight class\n\t if (typeof (this._options.highlightClass) === 'string') {\n\t highlightClass += (' ' + this._options.highlightClass);\n\t }\n\t\n\t if (oldHelperLayer !== null) {\n\t var oldHelperNumberLayer = oldReferenceLayer.querySelector('.introjs-helperNumberLayer'),\n\t oldtooltipLayer = oldReferenceLayer.querySelector('.introjs-tooltiptext'),\n\t oldArrowLayer = oldReferenceLayer.querySelector('.introjs-arrow'),\n\t oldtooltipContainer = oldReferenceLayer.querySelector('.introjs-tooltip');\n\t \n\t skipTooltipButton = oldReferenceLayer.querySelector('.introjs-skipbutton');\n\t prevTooltipButton = oldReferenceLayer.querySelector('.introjs-prevbutton');\n\t nextTooltipButton = oldReferenceLayer.querySelector('.introjs-nextbutton');\n\t\n\t //update or reset the helper highlight class\n\t oldHelperLayer.className = highlightClass;\n\t //hide the tooltip\n\t oldtooltipContainer.style.opacity = 0;\n\t oldtooltipContainer.style.display = \"none\";\n\t\n\t if (oldHelperNumberLayer !== null) {\n\t var lastIntroItem = this._introItems[(targetElement.step - 2 >= 0 ? targetElement.step - 2 : 0)];\n\t\n\t if (lastIntroItem !== null && (this._direction === 'forward' && lastIntroItem.position === 'floating') || (this._direction === 'backward' && targetElement.position === 'floating')) {\n\t oldHelperNumberLayer.style.opacity = 0;\n\t }\n\t }\n\t\n\t // scroll to element\n\t scrollParent = _getScrollParent( targetElement.element );\n\t\n\t if (scrollParent !== document.body) {\n\t // target is within a scrollable element\n\t _scrollParentToElement(scrollParent, targetElement.element);\n\t }\n\t\n\t // set new position to helper layer\n\t _setHelperLayerPosition.call(self, oldHelperLayer);\n\t _setHelperLayerPosition.call(self, oldReferenceLayer);\n\t\n\t //remove `introjs-fixParent` class from the elements\n\t var fixParents = document.querySelectorAll('.introjs-fixParent');\n\t _forEach(fixParents, function (parent) {\n\t _removeClass(parent, /introjs-fixParent/g);\n\t });\n\t \n\t //remove old classes if the element still exist\n\t _removeShowElement();\n\t\n\t //we should wait until the CSS3 transition is competed (it's 0.3 sec) to prevent incorrect `height` and `width` calculation\n\t if (self._lastShowElementTimer) {\n\t window.clearTimeout(self._lastShowElementTimer);\n\t }\n\t\n\t self._lastShowElementTimer = window.setTimeout(function() {\n\t //set current step to the label\n\t if (oldHelperNumberLayer !== null) {\n\t oldHelperNumberLayer.innerHTML = targetElement.step;\n\t }\n\t //set current tooltip text\n\t oldtooltipLayer.innerHTML = targetElement.intro;\n\t //set the tooltip position\n\t oldtooltipContainer.style.display = \"block\";\n\t _placeTooltip.call(self, targetElement.element, oldtooltipContainer, oldArrowLayer, oldHelperNumberLayer);\n\t\n\t //change active bullet\n\t if (self._options.showBullets) {\n\t oldReferenceLayer.querySelector('.introjs-bullets li > a.active').className = '';\n\t oldReferenceLayer.querySelector('.introjs-bullets li > a[data-stepnumber=\"' + targetElement.step + '\"]').className = 'active';\n\t }\n\t oldReferenceLayer.querySelector('.introjs-progress .introjs-progressbar').style.cssText = 'width:' + _getProgress.call(self) + '%;';\n\t oldReferenceLayer.querySelector('.introjs-progress .introjs-progressbar').setAttribute('aria-valuenow', _getProgress.call(self));\n\t\n\t //show the tooltip\n\t oldtooltipContainer.style.opacity = 1;\n\t if (oldHelperNumberLayer) oldHelperNumberLayer.style.opacity = 1;\n\t\n\t //reset button focus\n\t if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null && /introjs-donebutton/gi.test(skipTooltipButton.className)) {\n\t // skip button is now \"done\" button\n\t skipTooltipButton.focus();\n\t } else if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n\t //still in the tour, focus on next\n\t nextTooltipButton.focus();\n\t }\n\t\n\t // change the scroll of the window, if needed\n\t _scrollTo.call(self, targetElement.scrollTo, targetElement, oldtooltipLayer);\n\t }, 350);\n\t\n\t // end of old element if-else condition\n\t } else {\n\t var helperLayer = document.createElement('div'),\n\t referenceLayer = document.createElement('div'),\n\t arrowLayer = document.createElement('div'),\n\t tooltipLayer = document.createElement('div'),\n\t tooltipTextLayer = document.createElement('div'),\n\t bulletsLayer = document.createElement('div'),\n\t progressLayer = document.createElement('div'),\n\t buttonsLayer = document.createElement('div');\n\t\n\t helperLayer.className = highlightClass;\n\t referenceLayer.className = 'introjs-tooltipReferenceLayer';\n\t\n\t // scroll to element\n\t scrollParent = _getScrollParent( targetElement.element );\n\t\n\t if (scrollParent !== document.body) {\n\t // target is within a scrollable element\n\t _scrollParentToElement(scrollParent, targetElement.element);\n\t }\n\t\n\t //set new position to helper layer\n\t _setHelperLayerPosition.call(self, helperLayer);\n\t _setHelperLayerPosition.call(self, referenceLayer);\n\t\n\t //add helper layer to target element\n\t this._targetElement.appendChild(helperLayer);\n\t this._targetElement.appendChild(referenceLayer);\n\t\n\t arrowLayer.className = 'introjs-arrow';\n\t\n\t tooltipTextLayer.className = 'introjs-tooltiptext';\n\t tooltipTextLayer.innerHTML = targetElement.intro;\n\t\n\t bulletsLayer.className = 'introjs-bullets';\n\t\n\t if (this._options.showBullets === false) {\n\t bulletsLayer.style.display = 'none';\n\t }\n\t\n\t var ulContainer = document.createElement('ul');\n\t ulContainer.setAttribute('role', 'tablist');\n\t\n\t var anchorClick = function () {\n\t self.goToStep(this.getAttribute('data-stepnumber'));\n\t };\n\t\n\t _forEach(this._introItems, function (item, i) {\n\t var innerLi = document.createElement('li');\n\t var anchorLink = document.createElement('a');\n\t \n\t innerLi.setAttribute('role', 'presentation');\n\t anchorLink.setAttribute('role', 'tab');\n\t\n\t anchorLink.onclick = anchorClick;\n\t\n\t if (i === (targetElement.step-1)) {\n\t anchorLink.className = 'active';\n\t } \n\t\n\t _setAnchorAsButton(anchorLink);\n\t anchorLink.innerHTML = \" \";\n\t anchorLink.setAttribute('data-stepnumber', item.step);\n\t\n\t innerLi.appendChild(anchorLink);\n\t ulContainer.appendChild(innerLi);\n\t });\n\t\n\t bulletsLayer.appendChild(ulContainer);\n\t\n\t progressLayer.className = 'introjs-progress';\n\t\n\t if (this._options.showProgress === false) {\n\t progressLayer.style.display = 'none';\n\t }\n\t var progressBar = document.createElement('div');\n\t progressBar.className = 'introjs-progressbar';\n\t progressBar.setAttribute('role', 'progress');\n\t progressBar.setAttribute('aria-valuemin', 0);\n\t progressBar.setAttribute('aria-valuemax', 100);\n\t progressBar.setAttribute('aria-valuenow', _getProgress.call(this));\n\t progressBar.style.cssText = 'width:' + _getProgress.call(this) + '%;';\n\t\n\t progressLayer.appendChild(progressBar);\n\t\n\t buttonsLayer.className = 'introjs-tooltipbuttons';\n\t if (this._options.showButtons === false) {\n\t buttonsLayer.style.display = 'none';\n\t }\n\t\n\t tooltipLayer.className = 'introjs-tooltip';\n\t tooltipLayer.appendChild(tooltipTextLayer);\n\t tooltipLayer.appendChild(bulletsLayer);\n\t tooltipLayer.appendChild(progressLayer);\n\t\n\t //add helper layer number\n\t var helperNumberLayer = document.createElement('span');\n\t if (this._options.showStepNumbers === true) {\n\t helperNumberLayer.className = 'introjs-helperNumberLayer';\n\t helperNumberLayer.innerHTML = targetElement.step;\n\t referenceLayer.appendChild(helperNumberLayer);\n\t }\n\t\n\t tooltipLayer.appendChild(arrowLayer);\n\t referenceLayer.appendChild(tooltipLayer);\n\t\n\t //next button\n\t nextTooltipButton = document.createElement('a');\n\t\n\t nextTooltipButton.onclick = function() {\n\t if (self._introItems.length - 1 !== self._currentStep) {\n\t _nextStep.call(self);\n\t }\n\t };\n\t\n\t _setAnchorAsButton(nextTooltipButton);\n\t nextTooltipButton.innerHTML = this._options.nextLabel;\n\t\n\t //previous button\n\t prevTooltipButton = document.createElement('a');\n\t\n\t prevTooltipButton.onclick = function() {\n\t if (self._currentStep !== 0) {\n\t _previousStep.call(self);\n\t }\n\t };\n\t\n\t _setAnchorAsButton(prevTooltipButton);\n\t prevTooltipButton.innerHTML = this._options.prevLabel;\n\t\n\t //skip button\n\t skipTooltipButton = document.createElement('a');\n\t skipTooltipButton.className = this._options.buttonClass + ' introjs-skipbutton ';\n\t _setAnchorAsButton(skipTooltipButton);\n\t skipTooltipButton.innerHTML = this._options.skipLabel;\n\t\n\t skipTooltipButton.onclick = function() {\n\t if (self._introItems.length - 1 === self._currentStep && typeof (self._introCompleteCallback) === 'function') {\n\t self._introCompleteCallback.call(self);\n\t }\n\t\n\t if (self._introItems.length - 1 !== self._currentStep && typeof (self._introExitCallback) === 'function') {\n\t self._introExitCallback.call(self);\n\t }\n\t\n\t if (typeof(self._introSkipCallback) === 'function') {\n\t self._introSkipCallback.call(self);\n\t }\n\t\n\t _exitIntro.call(self, self._targetElement);\n\t };\n\t\n\t buttonsLayer.appendChild(skipTooltipButton);\n\t\n\t //in order to prevent displaying next/previous button always\n\t if (this._introItems.length > 1) {\n\t buttonsLayer.appendChild(prevTooltipButton);\n\t buttonsLayer.appendChild(nextTooltipButton);\n\t }\n\t\n\t tooltipLayer.appendChild(buttonsLayer);\n\t\n\t //set proper position\n\t _placeTooltip.call(self, targetElement.element, tooltipLayer, arrowLayer, helperNumberLayer);\n\t\n\t // change the scroll of the window, if needed\n\t _scrollTo.call(this, targetElement.scrollTo, targetElement, tooltipLayer);\n\t\n\t //end of new element if-else condition\n\t }\n\t\n\t // removing previous disable interaction layer\n\t var disableInteractionLayer = self._targetElement.querySelector('.introjs-disableInteraction');\n\t if (disableInteractionLayer) {\n\t disableInteractionLayer.parentNode.removeChild(disableInteractionLayer);\n\t }\n\t\n\t //disable interaction\n\t if (targetElement.disableInteraction) {\n\t _disableInteraction.call(self);\n\t }\n\t\n\t // when it's the first step of tour\n\t if (this._currentStep === 0 && this._introItems.length > 1) {\n\t if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n\t skipTooltipButton.className = this._options.buttonClass + ' introjs-skipbutton';\n\t }\n\t if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n\t nextTooltipButton.className = this._options.buttonClass + ' introjs-nextbutton';\n\t }\n\t\n\t if (this._options.hidePrev === true) {\n\t if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n\t prevTooltipButton.className = this._options.buttonClass + ' introjs-prevbutton introjs-hidden';\n\t }\n\t if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n\t _addClass(nextTooltipButton, 'introjs-fullbutton');\n\t }\n\t } else {\n\t if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n\t prevTooltipButton.className = this._options.buttonClass + ' introjs-prevbutton introjs-disabled';\n\t }\n\t }\n\t\n\t if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n\t skipTooltipButton.innerHTML = this._options.skipLabel;\n\t }\n\t } else if (this._introItems.length - 1 === this._currentStep || this._introItems.length === 1) {\n\t // last step of tour\n\t if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n\t skipTooltipButton.innerHTML = this._options.doneLabel;\n\t // adding donebutton class in addition to skipbutton\n\t _addClass(skipTooltipButton, 'introjs-donebutton');\n\t }\n\t if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n\t prevTooltipButton.className = this._options.buttonClass + ' introjs-prevbutton';\n\t }\n\t\n\t if (this._options.hideNext === true) {\n\t if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n\t nextTooltipButton.className = this._options.buttonClass + ' introjs-nextbutton introjs-hidden';\n\t }\n\t if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n\t _addClass(prevTooltipButton, 'introjs-fullbutton');\n\t }\n\t } else {\n\t if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n\t nextTooltipButton.className = this._options.buttonClass + ' introjs-nextbutton introjs-disabled';\n\t }\n\t }\n\t } else {\n\t // steps between start and end\n\t if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n\t skipTooltipButton.className = this._options.buttonClass + ' introjs-skipbutton';\n\t }\n\t if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n\t prevTooltipButton.className = this._options.buttonClass + ' introjs-prevbutton';\n\t }\n\t if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n\t nextTooltipButton.className = this._options.buttonClass + ' introjs-nextbutton';\n\t }\n\t if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n\t skipTooltipButton.innerHTML = this._options.skipLabel;\n\t }\n\t }\n\t\n\t prevTooltipButton.setAttribute('role', 'button');\n\t nextTooltipButton.setAttribute('role', 'button');\n\t skipTooltipButton.setAttribute('role', 'button');\n\t\n\t //Set focus on \"next\" button, so that hitting Enter always moves you onto the next step\n\t if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n\t nextTooltipButton.focus();\n\t }\n\t\n\t _setShowElement(targetElement);\n\t\n\t if (typeof (this._introAfterChangeCallback) !== 'undefined') {\n\t this._introAfterChangeCallback.call(this, targetElement.element);\n\t }\n\t }\n\t\n\t /**\n\t * To change the scroll of `window` after highlighting an element\n\t *\n\t * @api private\n\t * @method _scrollTo\n\t * @param {String} scrollTo\n\t * @param {Object} targetElement\n\t * @param {Object} tooltipLayer\n\t */\n\t function _scrollTo(scrollTo, targetElement, tooltipLayer) {\n\t if (scrollTo === 'off') return; \n\t var rect;\n\t\n\t if (!this._options.scrollToElement) return;\n\t\n\t if (scrollTo === 'tooltip') {\n\t rect = tooltipLayer.getBoundingClientRect();\n\t } else {\n\t rect = targetElement.element.getBoundingClientRect();\n\t }\n\t\n\t if (!_elementInViewport(targetElement.element)) {\n\t var winHeight = _getWinSize().height;\n\t var top = rect.bottom - (rect.bottom - rect.top);\n\t\n\t // TODO (afshinm): do we need scroll padding now?\n\t // I have changed the scroll option and now it scrolls the window to\n\t // the center of the target element or tooltip.\n\t\n\t if (top < 0 || targetElement.element.clientHeight > winHeight) {\n\t window.scrollBy(0, rect.top - ((winHeight / 2) - (rect.height / 2)) - this._options.scrollPadding); // 30px padding from edge to look nice\n\t\n\t //Scroll down\n\t } else {\n\t window.scrollBy(0, rect.top - ((winHeight / 2) - (rect.height / 2)) + this._options.scrollPadding); // 30px padding from edge to look nice\n\t }\n\t }\n\t }\n\t\n\t /**\n\t * To remove all show element(s)\n\t *\n\t * @api private\n\t * @method _removeShowElement\n\t */\n\t function _removeShowElement() {\n\t var elms = document.querySelectorAll('.introjs-showElement');\n\t\n\t _forEach(elms, function (elm) {\n\t _removeClass(elm, /introjs-[a-zA-Z]+/g);\n\t });\n\t }\n\t\n\t /**\n\t * To set the show element\n\t * This function set a relative (in most cases) position and changes the z-index\n\t *\n\t * @api private\n\t * @method _setShowElement\n\t * @param {Object} targetElement\n\t */\n\t function _setShowElement(targetElement) {\n\t var parentElm;\n\t // we need to add this show element class to the parent of SVG elements\n\t // because the SVG elements can't have independent z-index\n\t if (targetElement.element instanceof SVGElement) {\n\t parentElm = targetElement.element.parentNode;\n\t\n\t while (targetElement.element.parentNode !== null) {\n\t if (!parentElm.tagName || parentElm.tagName.toLowerCase() === 'body') break;\n\t\n\t if (parentElm.tagName.toLowerCase() === 'svg') {\n\t _addClass(parentElm, 'introjs-showElement introjs-relativePosition');\n\t }\n\t\n\t parentElm = parentElm.parentNode;\n\t }\n\t }\n\t\n\t _addClass(targetElement.element, 'introjs-showElement');\n\t\n\t var currentElementPosition = _getPropValue(targetElement.element, 'position');\n\t if (currentElementPosition !== 'absolute' &&\n\t currentElementPosition !== 'relative' &&\n\t currentElementPosition !== 'fixed') {\n\t //change to new intro item\n\t _addClass(targetElement.element, 'introjs-relativePosition');\n\t }\n\t\n\t parentElm = targetElement.element.parentNode;\n\t while (parentElm !== null) {\n\t if (!parentElm.tagName || parentElm.tagName.toLowerCase() === 'body') break;\n\t\n\t //fix The Stacking Context problem.\n\t //More detail: https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Understanding_z_index/The_stacking_context\n\t var zIndex = _getPropValue(parentElm, 'z-index');\n\t var opacity = parseFloat(_getPropValue(parentElm, 'opacity'));\n\t var transform = _getPropValue(parentElm, 'transform') || _getPropValue(parentElm, '-webkit-transform') || _getPropValue(parentElm, '-moz-transform') || _getPropValue(parentElm, '-ms-transform') || _getPropValue(parentElm, '-o-transform');\n\t if (/[0-9]+/.test(zIndex) || opacity < 1 || (transform !== 'none' && transform !== undefined)) {\n\t _addClass(parentElm, 'introjs-fixParent');\n\t }\n\t\n\t parentElm = parentElm.parentNode;\n\t }\n\t }\n\t\n\t /**\n\t * Iterates arrays\n\t *\n\t * @param {Array} arr\n\t * @param {Function} forEachFnc\n\t * @param {Function} completeFnc\n\t * @return {Null}\n\t */\n\t function _forEach(arr, forEachFnc, completeFnc) {\n\t // in case arr is an empty query selector node list\n\t if (arr) {\n\t for (var i = 0, len = arr.length; i < len; i++) {\n\t forEachFnc(arr[i], i);\n\t }\n\t }\n\t\n\t if (typeof(completeFnc) === 'function') {\n\t completeFnc();\n\t }\n\t }\n\t\n\t /**\n\t * Mark any object with an incrementing number\n\t * used for keeping track of objects\n\t *\n\t * @param Object obj Any object or DOM Element\n\t * @param String key\n\t * @return Object\n\t */\n\t var _stamp = (function () {\n\t var keys = {};\n\t return function stamp (obj, key) {\n\t \n\t // get group key\n\t key = key || 'introjs-stamp';\n\t\n\t // each group increments from 0\n\t keys[key] = keys[key] || 0;\n\t\n\t // stamp only once per object\n\t if (obj[key] === undefined) {\n\t // increment key for each new object\n\t obj[key] = keys[key]++;\n\t }\n\t\n\t return obj[key];\n\t };\n\t })();\n\t\n\t /**\n\t * DOMEvent Handles all DOM events\n\t *\n\t * methods:\n\t *\n\t * on - add event handler\n\t * off - remove event\n\t */\n\t var DOMEvent = (function () {\n\t function DOMEvent () {\n\t var events_key = 'introjs_event';\n\t \n\t /**\n\t * Gets a unique ID for an event listener\n\t *\n\t * @param Object obj\n\t * @param String type event type\n\t * @param Function listener\n\t * @param Object context\n\t * @return String\n\t */\n\t this._id = function (obj, type, listener, context) {\n\t return type + _stamp(listener) + (context ? '_' + _stamp(context) : '');\n\t };\n\t\n\t /**\n\t * Adds event listener\n\t *\n\t * @param Object obj\n\t * @param String type event type\n\t * @param Function listener\n\t * @param Object context\n\t * @param Boolean useCapture\n\t * @return null\n\t */\n\t this.on = function (obj, type, listener, context, useCapture) {\n\t var id = this._id.apply(this, arguments),\n\t handler = function (e) {\n\t return listener.call(context || obj, e || window.event);\n\t };\n\t\n\t if ('addEventListener' in obj) {\n\t obj.addEventListener(type, handler, useCapture);\n\t } else if ('attachEvent' in obj) {\n\t obj.attachEvent('on' + type, handler);\n\t }\n\t\n\t obj[events_key] = obj[events_key] || {};\n\t obj[events_key][id] = handler;\n\t };\n\t\n\t /**\n\t * Removes event listener\n\t *\n\t * @param Object obj\n\t * @param String type event type\n\t * @param Function listener\n\t * @param Object context\n\t * @param Boolean useCapture\n\t * @return null\n\t */\n\t this.off = function (obj, type, listener, context, useCapture) {\n\t var id = this._id.apply(this, arguments),\n\t handler = obj[events_key] && obj[events_key][id];\n\t\n\t if (!handler) {\n\t return;\n\t }\n\t\n\t if ('removeEventListener' in obj) {\n\t obj.removeEventListener(type, handler, useCapture);\n\t } else if ('detachEvent' in obj) {\n\t obj.detachEvent('on' + type, handler);\n\t }\n\t\n\t obj[events_key][id] = null;\n\t };\n\t }\n\t\n\t return new DOMEvent();\n\t })();\n\t\n\t /**\n\t * Append a class to an element\n\t *\n\t * @api private\n\t * @method _addClass\n\t * @param {Object} element\n\t * @param {String} className\n\t * @returns null\n\t */\n\t function _addClass(element, className) {\n\t if (element instanceof SVGElement) {\n\t // svg\n\t var pre = element.getAttribute('class') || '';\n\t\n\t element.setAttribute('class', pre + ' ' + className);\n\t } else {\n\t if (element.classList !== undefined) {\n\t // check for modern classList property\n\t var classes = className.split(' ');\n\t _forEach(classes, function (cls) {\n\t element.classList.add( cls );\n\t });\n\t } else if (!element.className.match( className )) {\n\t // check if element doesn't already have className\n\t element.className += ' ' + className;\n\t }\n\t }\n\t }\n\t\n\t /**\n\t * Remove a class from an element\n\t *\n\t * @api private\n\t * @method _removeClass\n\t * @param {Object} element\n\t * @param {RegExp|String} classNameRegex can be regex or string\n\t * @returns null\n\t */\n\t function _removeClass(element, classNameRegex) {\n\t if (element instanceof SVGElement) {\n\t var pre = element.getAttribute('class') || '';\n\t\n\t element.setAttribute('class', pre.replace(classNameRegex, '').replace(/^\\s+|\\s+$/g, ''));\n\t } else {\n\t element.className = element.className.replace(classNameRegex, '').replace(/^\\s+|\\s+$/g, '');\n\t }\n\t }\n\t\n\t /**\n\t * Get an element CSS property on the page\n\t * Thanks to JavaScript Kit: http://www.javascriptkit.com/dhtmltutors/dhtmlcascade4.shtml\n\t *\n\t * @api private\n\t * @method _getPropValue\n\t * @param {Object} element\n\t * @param {String} propName\n\t * @returns Element's property value\n\t */\n\t function _getPropValue (element, propName) {\n\t var propValue = '';\n\t if (element.currentStyle) { //IE\n\t propValue = element.currentStyle[propName];\n\t } else if (document.defaultView && document.defaultView.getComputedStyle) { //Others\n\t propValue = document.defaultView.getComputedStyle(element, null).getPropertyValue(propName);\n\t }\n\t\n\t //Prevent exception in IE\n\t if (propValue && propValue.toLowerCase) {\n\t return propValue.toLowerCase();\n\t } else {\n\t return propValue;\n\t }\n\t }\n\t\n\t /**\n\t * Checks to see if target element (or parents) position is fixed or not\n\t *\n\t * @api private\n\t * @method _isFixed\n\t * @param {Object} element\n\t * @returns Boolean\n\t */\n\t function _isFixed (element) {\n\t var p = element.parentNode;\n\t\n\t if (!p || p.nodeName === 'HTML') {\n\t return false;\n\t }\n\t\n\t if (_getPropValue(element, 'position') === 'fixed') {\n\t return true;\n\t }\n\t\n\t return _isFixed(p);\n\t }\n\t\n\t /**\n\t * Provides a cross-browser way to get the screen dimensions\n\t * via: http://stackoverflow.com/questions/5864467/internet-explorer-innerheight\n\t *\n\t * @api private\n\t * @method _getWinSize\n\t * @returns {Object} width and height attributes\n\t */\n\t function _getWinSize() {\n\t if (window.innerWidth !== undefined) {\n\t return { width: window.innerWidth, height: window.innerHeight };\n\t } else {\n\t var D = document.documentElement;\n\t return { width: D.clientWidth, height: D.clientHeight };\n\t }\n\t }\n\t\n\t /**\n\t * Check to see if the element is in the viewport or not\n\t * http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport\n\t *\n\t * @api private\n\t * @method _elementInViewport\n\t * @param {Object} el\n\t */\n\t function _elementInViewport(el) {\n\t var rect = el.getBoundingClientRect();\n\t\n\t return (\n\t rect.top >= 0 &&\n\t rect.left >= 0 &&\n\t (rect.bottom+80) <= window.innerHeight && // add 80 to get the text right\n\t rect.right <= window.innerWidth\n\t );\n\t }\n\t\n\t /**\n\t * Add overlay layer to the page\n\t *\n\t * @api private\n\t * @method _addOverlayLayer\n\t * @param {Object} targetElm\n\t */\n\t function _addOverlayLayer(targetElm) {\n\t var overlayLayer = document.createElement('div'),\n\t styleText = '',\n\t self = this;\n\t\n\t //set css class name\n\t overlayLayer.className = 'introjs-overlay';\n\t\n\t //check if the target element is body, we should calculate the size of overlay layer in a better way\n\t if (!targetElm.tagName || targetElm.tagName.toLowerCase() === 'body') {\n\t styleText += 'top: 0;bottom: 0; left: 0;right: 0;position: fixed;';\n\t overlayLayer.style.cssText = styleText;\n\t } else {\n\t //set overlay layer position\n\t var elementPosition = _getOffset(targetElm);\n\t if (elementPosition) {\n\t styleText += 'width: ' + elementPosition.width + 'px; height:' + elementPosition.height + 'px; top:' + elementPosition.top + 'px;left: ' + elementPosition.left + 'px;';\n\t overlayLayer.style.cssText = styleText;\n\t }\n\t }\n\t\n\t targetElm.appendChild(overlayLayer);\n\t\n\t overlayLayer.onclick = function() {\n\t if (self._options.exitOnOverlayClick === true) {\n\t _exitIntro.call(self, targetElm);\n\t }\n\t };\n\t\n\t window.setTimeout(function() {\n\t styleText += 'opacity: ' + self._options.overlayOpacity.toString() + ';';\n\t overlayLayer.style.cssText = styleText;\n\t }, 10);\n\t\n\t return true;\n\t }\n\t\n\t /**\n\t * Removes open hint (tooltip hint)\n\t *\n\t * @api private\n\t * @method _removeHintTooltip\n\t */\n\t function _removeHintTooltip() {\n\t var tooltip = document.querySelector('.introjs-hintReference');\n\t\n\t if (tooltip) {\n\t var step = tooltip.getAttribute('data-step');\n\t tooltip.parentNode.removeChild(tooltip);\n\t return step;\n\t }\n\t }\n\t\n\t /**\n\t * Start parsing hint items\n\t *\n\t * @api private\n\t * @param {Object} targetElm\n\t * @method _startHint\n\t */\n\t function _populateHints(targetElm) {\n\t\n\t this._introItems = [];\n\t\n\t if (this._options.hints) {\n\t _forEach(this._options.hints, function (hint) {\n\t var currentItem = _cloneObject(hint);\n\t\n\t if (typeof(currentItem.element) === 'string') {\n\t //grab the element with given selector from the page\n\t currentItem.element = document.querySelector(currentItem.element);\n\t }\n\t\n\t currentItem.hintPosition = currentItem.hintPosition || this._options.hintPosition;\n\t currentItem.hintAnimation = currentItem.hintAnimation || this._options.hintAnimation;\n\t\n\t if (currentItem.element !== null) {\n\t this._introItems.push(currentItem);\n\t }\n\t }.bind(this));\n\t } else {\n\t var hints = targetElm.querySelectorAll('*[data-hint]');\n\t\n\t if (!hints || !hints.length) {\n\t return false;\n\t }\n\t\n\t //first add intro items with data-step\n\t _forEach(hints, function (currentElement) {\n\t // hint animation\n\t var hintAnimation = currentElement.getAttribute('data-hintanimation');\n\t\n\t if (hintAnimation) {\n\t hintAnimation = (hintAnimation === 'true');\n\t } else {\n\t hintAnimation = this._options.hintAnimation;\n\t }\n\t\n\t this._introItems.push({\n\t element: currentElement,\n\t hint: currentElement.getAttribute('data-hint'),\n\t hintPosition: currentElement.getAttribute('data-hintposition') || this._options.hintPosition,\n\t hintAnimation: hintAnimation,\n\t tooltipClass: currentElement.getAttribute('data-tooltipclass'),\n\t position: currentElement.getAttribute('data-position') || this._options.tooltipPosition\n\t });\n\t }.bind(this));\n\t }\n\t\n\t _addHints.call(this);\n\t\n\t /* \n\t todo:\n\t these events should be removed at some point \n\t */\n\t DOMEvent.on(document, 'click', _removeHintTooltip, this, false);\n\t DOMEvent.on(window, 'resize', _reAlignHints, this, true);\n\t }\n\t\n\t /**\n\t * Re-aligns all hint elements\n\t *\n\t * @api private\n\t * @method _reAlignHints\n\t */\n\t function _reAlignHints() {\n\t _forEach(this._introItems, function (item) {\n\t if (typeof(item.targetElement) === 'undefined') {\n\t return;\n\t }\n\t\n\t _alignHintPosition.call(this, item.hintPosition, item.element, item.targetElement);\n\t }.bind(this));\n\t }\n\t\n\t /**\n\t * Get a queryselector within the hint wrapper\n\t *\n\t * @param {String} selector\n\t * @return {NodeList|Array}\n\t */\n\t function _hintQuerySelectorAll(selector) {\n\t var hintsWrapper = document.querySelector('.introjs-hints');\n\t return (hintsWrapper) ? hintsWrapper.querySelectorAll(selector) : [];\n\t }\n\t\n\t /**\n\t * Hide a hint\n\t *\n\t * @api private\n\t * @method _hideHint\n\t */\n\t function _hideHint(stepId) {\n\t var hint = _hintQuerySelectorAll('.introjs-hint[data-step=\"' + stepId + '\"]')[0];\n\t \n\t _removeHintTooltip.call(this);\n\t\n\t if (hint) {\n\t _addClass(hint, 'introjs-hidehint');\n\t }\n\t\n\t // call the callback function (if any)\n\t if (typeof (this._hintCloseCallback) !== 'undefined') {\n\t this._hintCloseCallback.call(this, stepId);\n\t }\n\t }\n\t\n\t /**\n\t * Hide all hints\n\t *\n\t * @api private\n\t * @method _hideHints\n\t */\n\t function _hideHints() {\n\t var hints = _hintQuerySelectorAll('.introjs-hint');\n\t\n\t _forEach(hints, function (hint) {\n\t _hideHint.call(this, hint.getAttribute('data-step'));\n\t }.bind(this));\n\t }\n\t\n\t /**\n\t * Show all hints\n\t *\n\t * @api private\n\t * @method _showHints\n\t */\n\t function _showHints() {\n\t var hints = _hintQuerySelectorAll('.introjs-hint');\n\t\n\t if (hints && hints.length) {\n\t _forEach(hints, function (hint) {\n\t _showHint.call(this, hint.getAttribute('data-step'));\n\t }.bind(this));\n\t } else {\n\t _populateHints.call(this, this._targetElement);\n\t }\n\t }\n\t\n\t /**\n\t * Show a hint\n\t *\n\t * @api private\n\t * @method _showHint\n\t */\n\t function _showHint(stepId) {\n\t var hint = _hintQuerySelectorAll('.introjs-hint[data-step=\"' + stepId + '\"]')[0];\n\t\n\t if (hint) {\n\t _removeClass(hint, /introjs-hidehint/g);\n\t }\n\t }\n\t\n\t /**\n\t * Removes all hint elements on the page\n\t * Useful when you want to destroy the elements and add them again (e.g. a modal or popup)\n\t *\n\t * @api private\n\t * @method _removeHints\n\t */\n\t function _removeHints() {\n\t var hints = _hintQuerySelectorAll('.introjs-hint');\n\t\n\t _forEach(hints, function (hint) {\n\t _removeHint.call(this, hint.getAttribute('data-step'));\n\t }.bind(this));\n\t }\n\t\n\t /**\n\t * Remove one single hint element from the page\n\t * Useful when you want to destroy the element and add them again (e.g. a modal or popup)\n\t * Use removeHints if you want to remove all elements.\n\t *\n\t * @api private\n\t * @method _removeHint\n\t */\n\t function _removeHint(stepId) {\n\t var hint = _hintQuerySelectorAll('.introjs-hint[data-step=\"' + stepId + '\"]')[0];\n\t\n\t if (hint) {\n\t hint.parentNode.removeChild(hint);\n\t }\n\t }\n\t\n\t /**\n\t * Add all available hints to the page\n\t *\n\t * @api private\n\t * @method _addHints\n\t */\n\t function _addHints() {\n\t var self = this;\n\t\n\t var hintsWrapper = document.querySelector('.introjs-hints');\n\t\n\t if (hintsWrapper === null) {\n\t hintsWrapper = document.createElement('div');\n\t hintsWrapper.className = 'introjs-hints';\n\t }\n\t\n\t /**\n\t * Returns an event handler unique to the hint iteration\n\t * \n\t * @param {Integer} i\n\t * @return {Function}\n\t */\n\t var getHintClick = function (i) {\n\t return function(e) {\n\t var evt = e ? e : window.event;\n\t \n\t if (evt.stopPropagation) {\n\t evt.stopPropagation();\n\t }\n\t\n\t if (evt.cancelBubble !== null) {\n\t evt.cancelBubble = true;\n\t }\n\t\n\t _showHintDialog.call(self, i);\n\t };\n\t };\n\t\n\t _forEach(this._introItems, function(item, i) {\n\t // avoid append a hint twice\n\t if (document.querySelector('.introjs-hint[data-step=\"' + i + '\"]')) {\n\t return;\n\t }\n\t\n\t var hint = document.createElement('a');\n\t _setAnchorAsButton(hint);\n\t\n\t hint.onclick = getHintClick(i);\n\t\n\t hint.className = 'introjs-hint';\n\t\n\t if (!item.hintAnimation) {\n\t _addClass(hint, 'introjs-hint-no-anim');\n\t }\n\t\n\t // hint's position should be fixed if the target element's position is fixed\n\t if (_isFixed(item.element)) {\n\t _addClass(hint, 'introjs-fixedhint');\n\t }\n\t\n\t var hintDot = document.createElement('div');\n\t hintDot.className = 'introjs-hint-dot';\n\t var hintPulse = document.createElement('div');\n\t hintPulse.className = 'introjs-hint-pulse';\n\t\n\t hint.appendChild(hintDot);\n\t hint.appendChild(hintPulse);\n\t hint.setAttribute('data-step', i);\n\t\n\t // we swap the hint element with target element\n\t // because _setHelperLayerPosition uses `element` property\n\t item.targetElement = item.element;\n\t item.element = hint;\n\t\n\t // align the hint position\n\t _alignHintPosition.call(this, item.hintPosition, hint, item.targetElement);\n\t\n\t hintsWrapper.appendChild(hint);\n\t }.bind(this));\n\t\n\t // adding the hints wrapper\n\t document.body.appendChild(hintsWrapper);\n\t\n\t // call the callback function (if any)\n\t if (typeof (this._hintsAddedCallback) !== 'undefined') {\n\t this._hintsAddedCallback.call(this);\n\t }\n\t }\n\t\n\t /**\n\t * Aligns hint position\n\t *\n\t * @api private\n\t * @method _alignHintPosition\n\t * @param {String} position\n\t * @param {Object} hint\n\t * @param {Object} element\n\t */\n\t function _alignHintPosition(position, hint, element) {\n\t // get/calculate offset of target element\n\t var offset = _getOffset.call(this, element);\n\t var iconWidth = 20;\n\t var iconHeight = 20;\n\t\n\t // align the hint element\n\t switch (position) {\n\t default:\n\t case 'top-left':\n\t hint.style.left = offset.left + 'px';\n\t hint.style.top = offset.top + 'px';\n\t break;\n\t case 'top-right':\n\t hint.style.left = (offset.left + offset.width - iconWidth) + 'px';\n\t hint.style.top = offset.top + 'px';\n\t break;\n\t case 'bottom-left':\n\t hint.style.left = offset.left + 'px';\n\t hint.style.top = (offset.top + offset.height - iconHeight) + 'px';\n\t break;\n\t case 'bottom-right':\n\t hint.style.left = (offset.left + offset.width - iconWidth) + 'px';\n\t hint.style.top = (offset.top + offset.height - iconHeight) + 'px';\n\t break;\n\t case 'middle-left':\n\t hint.style.left = offset.left + 'px';\n\t hint.style.top = (offset.top + (offset.height - iconHeight) / 2) + 'px';\n\t break;\n\t case 'middle-right':\n\t hint.style.left = (offset.left + offset.width - iconWidth) + 'px';\n\t hint.style.top = (offset.top + (offset.height - iconHeight) / 2) + 'px';\n\t break;\n\t case 'middle-middle':\n\t hint.style.left = (offset.left + (offset.width - iconWidth) / 2) + 'px';\n\t hint.style.top = (offset.top + (offset.height - iconHeight) / 2) + 'px';\n\t break;\n\t case 'bottom-middle':\n\t hint.style.left = (offset.left + (offset.width - iconWidth) / 2) + 'px';\n\t hint.style.top = (offset.top + offset.height - iconHeight) + 'px';\n\t break;\n\t case 'top-middle':\n\t hint.style.left = (offset.left + (offset.width - iconWidth) / 2) + 'px';\n\t hint.style.top = offset.top + 'px';\n\t break;\n\t }\n\t }\n\t\n\t /**\n\t * Triggers when user clicks on the hint element\n\t *\n\t * @api private\n\t * @method _showHintDialog\n\t * @param {Number} stepId\n\t */\n\t function _showHintDialog(stepId) {\n\t var hintElement = document.querySelector('.introjs-hint[data-step=\"' + stepId + '\"]');\n\t var item = this._introItems[stepId];\n\t\n\t // call the callback function (if any)\n\t if (typeof (this._hintClickCallback) !== 'undefined') {\n\t this._hintClickCallback.call(this, hintElement, item, stepId);\n\t }\n\t\n\t // remove all open tooltips\n\t var removedStep = _removeHintTooltip.call(this);\n\t\n\t // to toggle the tooltip\n\t if (parseInt(removedStep, 10) === stepId) {\n\t return;\n\t }\n\t\n\t var tooltipLayer = document.createElement('div');\n\t var tooltipTextLayer = document.createElement('div');\n\t var arrowLayer = document.createElement('div');\n\t var referenceLayer = document.createElement('div');\n\t\n\t tooltipLayer.className = 'introjs-tooltip';\n\t\n\t tooltipLayer.onclick = function (e) {\n\t //IE9 & Other Browsers\n\t if (e.stopPropagation) {\n\t e.stopPropagation();\n\t }\n\t //IE8 and Lower\n\t else {\n\t e.cancelBubble = true;\n\t }\n\t };\n\t\n\t tooltipTextLayer.className = 'introjs-tooltiptext';\n\t\n\t var tooltipWrapper = document.createElement('p');\n\t tooltipWrapper.innerHTML = item.hint;\n\t\n\t var closeButton = document.createElement('a');\n\t closeButton.className = this._options.buttonClass;\n\t closeButton.setAttribute('role', 'button');\n\t closeButton.innerHTML = this._options.hintButtonLabel;\n\t closeButton.onclick = _hideHint.bind(this, stepId);\n\t\n\t tooltipTextLayer.appendChild(tooltipWrapper);\n\t tooltipTextLayer.appendChild(closeButton);\n\t\n\t arrowLayer.className = 'introjs-arrow';\n\t tooltipLayer.appendChild(arrowLayer);\n\t\n\t tooltipLayer.appendChild(tooltipTextLayer);\n\t\n\t // set current step for _placeTooltip function\n\t this._currentStep = hintElement.getAttribute('data-step');\n\t\n\t // align reference layer position\n\t referenceLayer.className = 'introjs-tooltipReferenceLayer introjs-hintReference';\n\t referenceLayer.setAttribute('data-step', hintElement.getAttribute('data-step'));\n\t _setHelperLayerPosition.call(this, referenceLayer);\n\t\n\t referenceLayer.appendChild(tooltipLayer);\n\t document.body.appendChild(referenceLayer);\n\t\n\t //set proper position\n\t _placeTooltip.call(this, hintElement, tooltipLayer, arrowLayer, null, true);\n\t }\n\t\n\t /**\n\t * Get an element position on the page\n\t * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966\n\t *\n\t * @api private\n\t * @method _getOffset\n\t * @param {Object} element\n\t * @returns Element's position info\n\t */\n\t function _getOffset(element) {\n\t var body = document.body;\n\t var docEl = document.documentElement;\n\t var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\n\t var scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\n\t var x = element.getBoundingClientRect();\n\t return {\n\t top: x.top + scrollTop,\n\t width: x.width,\n\t height: x.height,\n\t left: x.left + scrollLeft\n\t };\n\t }\n\t\n\t /**\n\t * Find the nearest scrollable parent\n\t * copied from https://stackoverflow.com/questions/35939886/find-first-scrollable-parent\n\t *\n\t * @param Element element\n\t * @return Element\n\t */\n\t function _getScrollParent(element) {\n\t var style = window.getComputedStyle(element);\n\t var excludeStaticParent = (style.position === \"absolute\");\n\t var overflowRegex = /(auto|scroll)/;\n\t\n\t if (style.position === \"fixed\") return document.body;\n\t \n\t for (var parent = element; (parent = parent.parentElement);) {\n\t style = window.getComputedStyle(parent);\n\t if (excludeStaticParent && style.position === \"static\") {\n\t continue;\n\t }\n\t if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) return parent;\n\t }\n\t\n\t return document.body;\n\t }\n\t\n\t /**\n\t * scroll a scrollable element to a child element\n\t *\n\t * @param Element parent\n\t * @param Element element\n\t * @return Null\n\t */\n\t function _scrollParentToElement (parent, element) {\n\t parent.scrollTop = element.offsetTop - parent.offsetTop;\n\t }\n\t\n\t /**\n\t * Gets the current progress percentage\n\t *\n\t * @api private\n\t * @method _getProgress\n\t * @returns current progress percentage\n\t */\n\t function _getProgress() {\n\t // Steps are 0 indexed\n\t var currentStep = parseInt((this._currentStep + 1), 10);\n\t return ((currentStep / this._introItems.length) * 100);\n\t }\n\t\n\t /**\n\t * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1\n\t * via: http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically\n\t *\n\t * @param obj1\n\t * @param obj2\n\t * @returns obj3 a new object based on obj1 and obj2\n\t */\n\t function _mergeOptions(obj1,obj2) {\n\t var obj3 = {},\n\t attrname;\n\t for (attrname in obj1) { obj3[attrname] = obj1[attrname]; }\n\t for (attrname in obj2) { obj3[attrname] = obj2[attrname]; }\n\t return obj3;\n\t }\n\t\n\t var introJs = function (targetElm) {\n\t var instance;\n\t\n\t if (typeof (targetElm) === 'object') {\n\t //Ok, create a new instance\n\t instance = new IntroJs(targetElm);\n\t\n\t } else if (typeof (targetElm) === 'string') {\n\t //select the target element with query selector\n\t var targetElement = document.querySelector(targetElm);\n\t\n\t if (targetElement) {\n\t instance = new IntroJs(targetElement);\n\t } else {\n\t throw new Error('There is no element with given selector.');\n\t }\n\t } else {\n\t instance = new IntroJs(document.body);\n\t }\n\t // add instance to list of _instances\n\t // passing group to _stamp to increment\n\t // from 0 onward somewhat reliably\n\t introJs.instances[ _stamp(instance, 'introjs-instance') ] = instance;\n\t\n\t return instance;\n\t };\n\t\n\t /**\n\t * Current IntroJs version\n\t *\n\t * @property version\n\t * @type String\n\t */\n\t introJs.version = VERSION;\n\t\n\t /**\n\t * key-val object helper for introJs instances\n\t *\n\t * @property instances\n\t * @type Object\n\t */\n\t introJs.instances = {};\n\t\n\t //Prototype\n\t introJs.fn = IntroJs.prototype = {\n\t clone: function () {\n\t return new IntroJs(this);\n\t },\n\t setOption: function(option, value) {\n\t this._options[option] = value;\n\t return this;\n\t },\n\t setOptions: function(options) {\n\t this._options = _mergeOptions(this._options, options);\n\t return this;\n\t },\n\t start: function (group) {\n\t _introForElement.call(this, this._targetElement, group);\n\t return this;\n\t },\n\t goToStep: function(step) {\n\t _goToStep.call(this, step);\n\t return this;\n\t },\n\t addStep: function(options) {\n\t if (!this._options.steps) {\n\t this._options.steps = [];\n\t }\n\t\n\t this._options.steps.push(options);\n\t\n\t return this;\n\t },\n\t addSteps: function(steps) {\n\t if (!steps.length) return;\n\t\n\t for(var index = 0; index < steps.length; index++) {\n\t this.addStep(steps[index]);\n\t }\n\t\n\t return this;\n\t },\n\t goToStepNumber: function(step) {\n\t _goToStepNumber.call(this, step);\n\t\n\t return this;\n\t },\n\t nextStep: function() {\n\t _nextStep.call(this);\n\t return this;\n\t },\n\t previousStep: function() {\n\t _previousStep.call(this);\n\t return this;\n\t },\n\t exit: function(force) {\n\t _exitIntro.call(this, this._targetElement, force);\n\t return this;\n\t },\n\t refresh: function() {\n\t _refresh.call(this);\n\t return this;\n\t },\n\t onbeforechange: function(providedCallback) {\n\t if (typeof (providedCallback) === 'function') {\n\t this._introBeforeChangeCallback = providedCallback;\n\t } else {\n\t throw new Error('Provided callback for onbeforechange was not a function');\n\t }\n\t return this;\n\t },\n\t onchange: function(providedCallback) {\n\t if (typeof (providedCallback) === 'function') {\n\t this._introChangeCallback = providedCallback;\n\t } else {\n\t throw new Error('Provided callback for onchange was not a function.');\n\t }\n\t return this;\n\t },\n\t onafterchange: function(providedCallback) {\n\t if (typeof (providedCallback) === 'function') {\n\t this._introAfterChangeCallback = providedCallback;\n\t } else {\n\t throw new Error('Provided callback for onafterchange was not a function');\n\t }\n\t return this;\n\t },\n\t oncomplete: function(providedCallback) {\n\t if (typeof (providedCallback) === 'function') {\n\t this._introCompleteCallback = providedCallback;\n\t } else {\n\t throw new Error('Provided callback for oncomplete was not a function.');\n\t }\n\t return this;\n\t },\n\t onhintsadded: function(providedCallback) {\n\t if (typeof (providedCallback) === 'function') {\n\t this._hintsAddedCallback = providedCallback;\n\t } else {\n\t throw new Error('Provided callback for onhintsadded was not a function.');\n\t }\n\t return this;\n\t },\n\t onhintclick: function(providedCallback) {\n\t if (typeof (providedCallback) === 'function') {\n\t this._hintClickCallback = providedCallback;\n\t } else {\n\t throw new Error('Provided callback for onhintclick was not a function.');\n\t }\n\t return this;\n\t },\n\t onhintclose: function(providedCallback) {\n\t if (typeof (providedCallback) === 'function') {\n\t this._hintCloseCallback = providedCallback;\n\t } else {\n\t throw new Error('Provided callback for onhintclose was not a function.');\n\t }\n\t return this;\n\t },\n\t onexit: function(providedCallback) {\n\t if (typeof (providedCallback) === 'function') {\n\t this._introExitCallback = providedCallback;\n\t } else {\n\t throw new Error('Provided callback for onexit was not a function.');\n\t }\n\t return this;\n\t },\n\t onskip: function(providedCallback) {\n\t if (typeof (providedCallback) === 'function') {\n\t this._introSkipCallback = providedCallback;\n\t } else {\n\t throw new Error('Provided callback for onskip was not a function.');\n\t }\n\t return this;\n\t },\n\t onbeforeexit: function(providedCallback) {\n\t if (typeof (providedCallback) === 'function') {\n\t this._introBeforeExitCallback = providedCallback;\n\t } else {\n\t throw new Error('Provided callback for onbeforeexit was not a function.');\n\t }\n\t return this;\n\t },\n\t addHints: function() {\n\t _populateHints.call(this, this._targetElement);\n\t return this;\n\t },\n\t hideHint: function (stepId) {\n\t _hideHint.call(this, stepId);\n\t return this;\n\t },\n\t hideHints: function () {\n\t _hideHints.call(this);\n\t return this;\n\t },\n\t showHint: function (stepId) {\n\t _showHint.call(this, stepId);\n\t return this;\n\t },\n\t showHints: function () {\n\t _showHints.call(this);\n\t return this;\n\t },\n\t removeHints: function () {\n\t _removeHints.call(this);\n\t return this;\n\t },\n\t removeHint: function (stepId) {\n\t _removeHint.call(this, stepId);\n\t return this;\n\t },\n\t showHintDialog: function (stepId) {\n\t _showHintDialog.call(this, stepId);\n\t return this;\n\t }\n\t };\n\t\n\t return introJs;\n\t});\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)))\n\n/***/ }),\n\n/***/ 1130:\n/***/ (function(module, exports) {\n\n\t(function(){\n\tif( !('ace' in window) ) window['ace'] = {}\n\t\n\tace.config = {\n\t storage_method: 0, //0 means use localStorage if available otherwise cookies, 1 means localStorage, 2 means cookies\n\t cookie_expiry : 604800, //(cookie only) 1 week duration for saved settings\n\t cookie_path: ''//(cookie only)\n\t}\n\tif( !('vars' in window['ace']) ) window['ace'].vars = {}\n\tace.vars['very_old_ie']\t= !('querySelector' in document.documentElement);\n\t\n\tace.settings = {\n\t\tsaveState : function(element, attrName, attrVal, append) {\n\t\t\tif( !element || (typeof element == 'string' && !(element = document.getElementById(element))) || !element.hasAttribute('id') ) return false;\n\t\t\tif( !ace.hasClass(element, 'ace-save-state') ) return false;\n\t\t\t\n\t\t\tvar attrName = attrName || 'class';\n\t\t\tvar id = element.getAttribute('id');\n\t\t\t\n\t\t\tvar attrList = ace.data.get('state', 'id-'+id) || {};\n\t\t\tif(typeof attrList == 'string') {\n\t\t\t\ttry {\n\t\t\t\t\tattrList = JSON.parse(attrList);\n\t\t\t\t}\n\t\t\t\tcatch(e) {\n\t\t\t\t\tattrList = {}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tvar newVal, hasCustomVal = typeof attrVal !== 'undefined', $delete = false;\n\t\t\t\n\t\t\tvar re1 = /class/i\n\t\t\tvar re2 = /checked|disabled|readonly|value/i\n\t\n\t\t\tif(re2.test(attrName)) newVal = hasCustomVal ? attrVal : element[attrName];\n\t\t\telse {\n\t\t\t\tif(element.hasAttribute(attrName)) {\n\t\t\t\t\tnewVal = hasCustomVal ? attrVal : element.getAttribute(attrName);\n\t\t\t\t}\n\t\t\t\telse if(!hasCustomVal) $delete = true;\n\t\t\t\t//delete this, because element has no such attribute and we haven't given a custom value! (no attrVal)\n\t\t\t}\n\t\t\t\n\t\t\n\t\t\tif($delete) {\n\t\t\t\tdelete attrList[attrName];\n\t\t\t}\n\t\t\telse {\n\t\t\t\t//save class names as an object which indicated which classes should be included or excluded (true/false)\n\t\t\t\tif( re1.test(attrName) ) {//class\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif( !attrList.hasOwnProperty(attrName) ) attrList[attrName] = {}\n\t\t\t\t\tif(append === true) {\n\t\t\t\t\t\t//append to previous value\t\t\t\t\t\n\t\t\t\t\t\tattrList[attrName][newVal] = 1;\n\t\t\t\t\t}\n\t\t\t\t\telse if(append === false) {\n\t\t\t\t\t\t//remove from previous value\n\t\t\t\t\t\tattrList[attrName][newVal] = -1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tattrList[attrName]['className'] = newVal;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\telse {\n\t\t\t\t\tattrList[attrName] = newVal;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tace.data.set('state', 'id-'+id , JSON.stringify(attrList));\n\t\t},\n\t\t\n\t\tloadState : function(element, attrName) {\n\t\t\tif( !element || (typeof element == 'string' && !(element = document.getElementById(element))) || !element.hasAttribute('id') ) return false;\n\t\t\t\n\t\t\tvar id = element.getAttribute('id');\n\t\t\tvar attrList = ace.data.get('state', 'id-'+id) || {};\n\t\t\tif(typeof attrList == 'string') {\n\t\t\t\ttry {\n\t\t\t\t\tattrList = JSON.parse(attrList);\n\t\t\t\t}\n\t\t\t\tcatch(e) {\n\t\t\t\t\tattrList = {}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar setAttr = function(element, attr, val) {\n\t\t\t\tvar re1 = /class/i\n\t\t\t\tvar re2 = /checked|disabled|readonly|value/i\n\t\t\t\t\n\t\t\t\tif(re1.test(attr)) {\n\t\t\t\t\tif(typeof val === 'object') {\n\t\t\t\t\t\tif('className' in val) element.setAttribute('class', val['className']);\n\t\t\t\t\t\tfor(var key in val) if(val.hasOwnProperty(key)) {\n\t\t\t\t\t\t\tvar append = val[key];\n\t\t\t\t\t\t\tif(append == 1) ace.addClass(element, key);\n\t\t\t\t\t\t\telse if(append == -1) ace.removeClass(element, key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//else if(typeof ace.addClass(element, val);\n\t\t\t\t}\n\t\t\t\telse if(re2.test(attr)) element[attr] = val;\n\t\t\t\telse element.setAttribute(attr, val);\n\t\t\t}\n\t\t\t\n\t\t\tif(attrName !== undefined) {\n\t\t\t\tif(attrList.hasOwnProperty(attrName) && attrList[attrName] !== null) setAttr(element, attrName, attrList[attrName]);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor(var name in attrList) {\n\t\t\t\t\tif(attrList.hasOwnProperty(name) && attrList[name] !== null) setAttr(element, name, attrList[name]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\tclearState : function(element) {\n\t\t\tvar id = null;\n\t\t\tif(typeof element === 'string') {\n\t\t\t\tid = element;\n\t\t\t}\n\t\t\telse if('hasAttribute' in element && element.hasAttribute('id')) {\n\t\t\t\tid = element.getAttribute('id');\n\t\t\t}\n\t\t\tif(id) ace.data.remove('state', 'id-'+id);\n\t\t}\n\t};\n\t\n\t\n\t\n\t\n\t(function() {\n\t\t//detect if it is supported\n\t\t//https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Animations/Detecting_CSS_animation_support\n\t\tvar animationSupport = function() {\n\t\t\tvar animation = false,\n\t\t\tanimationstring = 'animation',\n\t\t\tkeyframeprefix = '',\n\t\t\tdomPrefixes = 'Webkit Moz O ms Khtml'.split(' '),\n\t\t\tpfx = '',\n\t\t\telm = document.createElement('div');\n\t\n\t\t\tif( elm.style.animationName !== undefined ) { animation = true; } \n\t\n\t\t\tif( animation === false ) {\n\t\t\t for( var i = 0; i < domPrefixes.length; i++ ) {\n\t\t\t\tif( elm.style[ domPrefixes[i] + 'AnimationName' ] !== undefined ) {\n\t\t\t\t pfx = domPrefixes[ i ];\n\t\t\t\t animationstring = pfx + 'Animation';\n\t\t\t\t keyframeprefix = '-' + pfx.toLowerCase() + '-';\n\t\t\t\t animation = true;\n\t\t\t\t break;\n\t\t\t\t}\n\t\t\t }\n\t\t\t}\n\t\t\t\n\t\t\treturn animation;\n\t\t}\n\t\t\n\t\tace.vars['animation'] = animationSupport();\n\t\tif( ace.vars['animation'] ) {\n\t\t\t//based on http://www.backalleycoder.com/2012/04/25/i-want-a-damnodeinserted/\n\t\n\t\t\tvar animationCSS = \"@keyframes nodeInserted{from{outline-color:#fff}to{outline-color:#000}}@-moz-keyframes nodeInserted{from{outline-color:#fff}to{outline-color:#000}}@-webkit-keyframes nodeInserted{from{outline-color:#fff}to{outline-color:#000}}@-ms-keyframes nodeInserted{from{outline-color:#fff}to{outline-color:#000}}@-o-keyframes nodeInserted{from{outline-color:#fff}to{outline-color:#000}}.ace-save-state{animation-duration:10ms;-o-animation-duration:10ms;-ms-animation-duration:10ms;-moz-animation-duration:10ms;-webkit-animation-duration:10ms;animation-delay:0s;-o-animation-delay:0s;-ms-animation-delay:0s;-moz-animation-delay:0s;-webkit-animation-delay:0s;animation-name:nodeInserted;-o-animation-name:nodeInserted;-ms-animation-name:nodeInserted;-moz-animation-name:nodeInserted;-webkit-animation-name:nodeInserted}\";\n\t\t\tvar animationNode = document.createElement('style');\n\t\t\tanimationNode.innerHTML = animationCSS;\n\t\t\tdocument.head.appendChild(animationNode);\n\t\t\n\t\t\tvar domInsertEvent = function(event) {\n\t\t\t\tvar element = event.target;\n\t\t\t\tif( !element || !ace.hasClass(element, 'ace-save-state') ) return;\n\t\t\t\t\n\t\t\t\tace.settings.loadState(element);\n\t\t\t}\n\t\n\t\t\tdocument.addEventListener('animationstart', domInsertEvent, false);\n\t\t\tdocument.addEventListener('MSAnimationStart', domInsertEvent, false);\n\t\t\tdocument.addEventListener('webkitAnimationStart', domInsertEvent, false);\n\t\t}\n\t\telse {\n\t\t\t//if animation events are not supported, wait for document ready event\n\t\t\tvar documentReady = function() {\n\t\t\t\tvar list = document.querySelectorAll('.ace-save-state');\n\t\t\t\tfor(var i = 0 ; i < list.length ; i++) ace.settings.loadState(list[i]);\n\t\t\t}\n\t\t\t\n\t\t\tif(document.readyState == 'complete') documentReady();\n\t\t\telse if(document.addEventListener) document.addEventListener('DOMContentLoaded', documentReady, false);\n\t\t\telse if(document.attachEvent) document.attachEvent('onreadystatechange', function(){\n\t\t\t\tif (document.readyState == 'complete') documentReady();\n\t\t\t});\n\t\t}\n\t})();\n\t\n\t\n\t\n\t\n\t\n\t\n\t//save/retrieve data using localStorage or cookie\n\t//method == 1, use localStorage\n\t//method == 2, use cookies\n\t//method not specified, use localStorage if available, otherwise cookies\n\tace.data_storage = function(method, undefined) {\n\t\tvar prefix = 'ace_';\n\t\n\t\tvar storage = null;\n\t\tvar type = 0;\n\t\t\n\t\tif((method == 1 || method === undefined || method == 0) && 'localStorage' in window && window['localStorage'] !== null) {\n\t\t\tstorage = ace.storage;\n\t\t\ttype = 1;\n\t\t}\n\t\telse if(storage == null && (method == 2 || method === undefined) && 'cookie' in document && document['cookie'] !== null) {\n\t\t\tstorage = ace.cookie;\n\t\t\ttype = 2;\n\t\t}\n\t\t\n\t\n\t\tthis.set = function(namespace, key, value, path, is_obj, undefined) {\n\t\t\tif(!storage) return;\n\t\t\t\n\t\t\tif(value === undefined) {//no namespace here?\n\t\t\t\tvalue = key;\n\t\t\t\tkey = namespace;\n\t\n\t\t\t\tif(value == null) storage.remove(prefix+key)\n\t\t\t\telse {\n\t\t\t\t\tif(type == 1)\n\t\t\t\t\t\tstorage.set(prefix+key, value)\n\t\t\t\t\telse if(type == 2)\n\t\t\t\t\t\tstorage.set(prefix+key, value, ace.config.cookie_expiry, path || ace.config.cookie_path)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(type == 1) {//localStorage\n\t\t\t\t\tif(value == null) storage.remove(prefix+namespace+'_'+key)\n\t\t\t\t\telse {\n\t\t\t\t\t\tif(is_obj && typeof value == 'object') {\n\t\t\t\t\t\t\tvalue = JSON.stringify(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstorage.set(prefix+namespace+'_'+key, value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(type == 2) {//cookie\n\t\t\t\t\tvar val = storage.get(prefix+namespace);\n\t\t\t\t\tvar tmp = val ? JSON.parse(val) : {};\n\t\n\t\t\t\t\tif(value == null) {\n\t\t\t\t\t\tdelete tmp[key];//remove\n\t\t\t\t\t\tif(ace.sizeof(tmp) == 0) {//no other elements in this cookie, so delete it\n\t\t\t\t\t\t\tstorage.remove(prefix+namespace);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\telse {\n\t\t\t\t\t\ttmp[key] = value;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tstorage.set(prefix+namespace , JSON.stringify(tmp), ace.config.cookie_expiry, path || ace.config.cookie_path)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\tthis.get = function(namespace, key, is_obj, undefined) {\n\t\t\tif(!storage) return null;\n\t\t\t\n\t\t\tif(key === undefined) {//no namespace here?\n\t\t\t\tkey = namespace;\n\t\t\t\treturn storage.get(prefix+key);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(type == 1) {//localStorage\n\t\t\t\t\tvar value = storage.get(prefix+namespace+'_'+key);\n\t\t\t\t\tif(is_obj && value) {\n\t\t\t\t\t\ttry { value = JSON.parse(value) } catch(e) {}\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t\telse if(type == 2) {//cookie\n\t\t\t\t\tvar val = storage.get(prefix+namespace);\n\t\t\t\t\tvar tmp = val ? JSON.parse(val) : {};\n\t\t\t\t\treturn key in tmp ? tmp[key] : null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t\n\t\tthis.remove = function(namespace, key, undefined) {\n\t\t\tif(!storage) return;\n\t\t\t\n\t\t\tif(key === undefined) {\n\t\t\t\tkey = namespace\n\t\t\t\tthis.set(key, null);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.set(namespace, key, null);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t\n\t\n\t\n\t//cookie storage\n\tace.cookie = {\n\t\t// The following settingFunction are from Cookie.js class in TinyMCE, Moxiecode, used under LGPL.\n\t\n\t\t/**\n\t\t * Get a cookie.\n\t\t */\n\t\tget : function(name) {\n\t\t\tvar cookie = document.cookie, e, p = name + \"=\", b;\n\t\n\t\t\tif ( !cookie )\n\t\t\t\treturn;\n\t\n\t\t\tb = cookie.indexOf(\"; \" + p);\n\t\n\t\t\tif ( b == -1 ) {\n\t\t\t\tb = cookie.indexOf(p);\n\t\n\t\t\t\tif ( b != 0 )\n\t\t\t\t\treturn null;\n\t\n\t\t\t} else {\n\t\t\t\tb += 2;\n\t\t\t}\n\t\n\t\t\te = cookie.indexOf(\";\", b);\n\t\n\t\t\tif ( e == -1 )\n\t\t\t\te = cookie.length;\n\t\n\t\t\treturn decodeURIComponent( cookie.substring(b + p.length, e) );\n\t\t},\n\t\n\t\t/**\n\t\t * Set a cookie.\n\t\t *\n\t\t * The 'expires' arg can be either a JS Date() object set to the expiration date (back-compat)\n\t\t * or the number of seconds until expiration\n\t\t */\n\t\tset : function(name, value, expires, path, domain, secure) {\n\t\t\tvar d = new Date();\n\t\n\t\t\tif ( typeof(expires) == 'object' && expires.toGMTString ) {\n\t\t\t\texpires = expires.toGMTString();\n\t\t\t} else if ( parseInt(expires, 10) ) {\n\t\t\t\td.setTime( d.getTime() + ( parseInt(expires, 10) * 1000 ) ); // time must be in miliseconds\n\t\t\t\texpires = d.toGMTString();\n\t\t\t} else {\n\t\t\t\texpires = '';\n\t\t\t}\n\t\n\t\t\tdocument.cookie = name + \"=\" + encodeURIComponent(value) +\n\t\t\t\t((expires) ? \"; expires=\" + expires : \"\") +\n\t\t\t\t((path) ? \"; path=\" + path : \"\") +\n\t\t\t\t((domain) ? \"; domain=\" + domain : \"\") +\n\t\t\t\t((secure) ? \"; secure\" : \"\");\n\t\t},\n\t\n\t\t/**\n\t\t * Remove a cookie.\n\t\t *\n\t\t * This is done by setting it to an empty value and setting the expiration time in the past.\n\t\t */\n\t\tremove : function(name, path) {\n\t\t\tthis.set(name, '', -1000, path);\n\t\t}\n\t};\n\t\n\t\n\t//local storage\n\tace.storage = {\n\t\tget: function(key) {\n\t\t\treturn window['localStorage'].getItem(key);\n\t\t},\n\t\tset: function(key, value) {\n\t\t\twindow['localStorage'].setItem(key , value);\n\t\t},\n\t\tremove: function(key) {\n\t\t\twindow['localStorage'].removeItem(key);\n\t\t}\n\t};\n\t\n\t\n\t\n\t\n\t\n\t\n\t//count the number of properties in an object\n\t//useful for getting the number of elements in an associative array\n\tace.sizeof = function(obj) {\n\t\tvar size = 0;\n\t\tfor(var key in obj) if(obj.hasOwnProperty(key)) size++;\n\t\treturn size;\n\t}\n\t\n\t//because jQuery may not be loaded at this stage, we use our own toggleClass\n\tace.hasClass = function(elem, className) {\treturn (\" \" + elem.className + \" \").indexOf(\" \" + className + \" \") > -1; }\n\t\n\tace.addClass = function(elem, className) {\n\t var parts = className.split(/\\s+/);\n\t for(var p = 0; p < parts.length; p++) {\n\t\tif ( parts[p].length > 0 && !ace.hasClass(elem, parts[p]) ) {\n\t\t\tvar currentClass = elem.className;\n\t\t\telem.className = currentClass + (currentClass.length ? \" \" : \"\") + parts[p];\n\t\t}\n\t }\n\t}\n\t\n\tace.removeClass = function(elem, className) {\n\t var parts = className.split(/\\s+/);\n\t for(var p = 0; p < parts.length; p++) {\n\t\tif( parts[p].length > 0 ) ace.replaceClass(elem, parts[p]);\n\t }\n\t ace.replaceClass(elem, className);\n\t}\n\t\n\tace.replaceClass = function(elem, className, newClass) {\n\t var classToRemove = new RegExp((\"(^|\\\\s)\" + className + \"(\\\\s|$)\"), \"i\");\n\t elem.className = elem.className.replace(classToRemove, function (match, p1, p2) {\n\t\treturn newClass ? (p1 + newClass + p2) : \" \";\n\t }).replace(/^\\s+|\\s+$/g, \"\");\n\t}\n\t\n\t\n\tace.toggleClass = function(elem, className) {\n\t\tif(ace.hasClass(elem, className))\n\t\t\tace.removeClass(elem, className);\n\t\telse ace.addClass(elem, className);\n\t}\n\t\n\tace.isHTMlElement = function(elem) {\n\t return window.HTMLElement ? elem instanceof HTMLElement : ('nodeType' in elem ? elem.nodeType == 1 : false);\n\t}\n\t\n\t\n\t //data_storage instance used inside ace.settings etc\n\t ace.data = new ace.data_storage(ace.config.storage_method);\n\t\n\t})();\n\t\n\n\n/***/ })\n\n/******/ });\n\n\n// WEBPACK FOOTER //\n// javascripts/user-common-js/header.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/static/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c9469eaa0d1980d9bd95","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/object-assign/index.js\n// module id = 5\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 18 20 21 22 23 24 25 26 27 28 29 30 31","/*global window, global*/\nvar util = require(\"util\")\nvar assert = require(\"assert\")\nfunction now() { return new Date().getTime() }\n\nvar slice = Array.prototype.slice\nvar console\nvar times = {}\n\nif (typeof global !== \"undefined\" && global.console) {\n console = global.console\n} else if (typeof window !== \"undefined\" && window.console) {\n console = window.console\n} else {\n console = {}\n}\n\nvar functions = [\n [log, \"log\"],\n [info, \"info\"],\n [warn, \"warn\"],\n [error, \"error\"],\n [time, \"time\"],\n [timeEnd, \"timeEnd\"],\n [trace, \"trace\"],\n [dir, \"dir\"],\n [consoleAssert, \"assert\"]\n]\n\nfor (var i = 0; i < functions.length; i++) {\n var tuple = functions[i]\n var f = tuple[0]\n var name = tuple[1]\n\n if (!console[name]) {\n console[name] = f\n }\n}\n\nmodule.exports = console\n\nfunction log() {}\n\nfunction info() {\n console.log.apply(console, arguments)\n}\n\nfunction warn() {\n console.log.apply(console, arguments)\n}\n\nfunction error() {\n console.warn.apply(console, arguments)\n}\n\nfunction time(label) {\n times[label] = now()\n}\n\nfunction timeEnd(label) {\n var time = times[label]\n if (!time) {\n throw new Error(\"No such label: \" + label)\n }\n\n delete times[label]\n var duration = now() - time\n console.log(label + \": \" + duration + \"ms\")\n}\n\nfunction trace() {\n var err = new Error()\n err.name = \"Trace\"\n err.message = util.format.apply(null, arguments)\n console.error(err.stack)\n}\n\nfunction dir(object) {\n console.log(util.inspect(object) + \"\\n\")\n}\n\nfunction consoleAssert(expression) {\n if (!expression) {\n var arr = slice.call(arguments, 1)\n assert.ok(false, util.format.apply(null, arr))\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/console-browserify/index.js\n// module id = 7\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 18 20 21 22 23 24 25 26 27 28 29 30 31","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 23\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 18 20 21 22 23 24 25 26 27 28 29 30 31","'use strict';\n\nvar objectAssign = require('object-assign');\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n// NB: The URL to the CommonJS spec is kept just for tradition.\n// node-assert has evolved a lot since then, both in API and behavior.\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\n// Expose a strict only variant of assert\nfunction strict(value, message) {\n if (!value) fail(value, true, message, '==', strict);\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/assert/assert.js\n// module id = 87\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 18 20 21 22 23 24 25 26 27 28 29 30 31","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/assert/~/inherits/inherits_browser.js\n// module id = 88\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 18 20 21 22 23 24 25 26 27 28 29 30 31","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/assert/~/util/support/isBufferBrowser.js\n// module id = 89\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 18 20 21 22 23 24 25 26 27 28 29 30 31","// 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\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/assert/~/util/util.js\n// module id = 90\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 18 20 21 22 23 24 25 26 27 28 29 30 31","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/util/~/inherits/inherits_browser.js\n// module id = 91\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 18 20 21 22 23 24 25 26 27 28 29 30 31","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/util/support/isBufferBrowser.js\n// module id = 92\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 18 20 21 22 23 24 25 26 27 28 29 30 31","// 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\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/util/util.js\n// module id = 93\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17 18 20 21 22 23 24 25 26 27 28 29 30 31","/**\n * Created by takeo on 2016/10/06.\n */\nimport 'intro.js';\nimport '../../source/javascripts/ace/ace-extra';\nimport './ui/legacy/inquiry';\n\n\n\n// WEBPACK FOOTER //\n// ./es6/user-common-js/header.js","function openInquiryWindow(url) {\n window.open(url, 'inquiry', 'width=980, height=800, menubar=no, toolbar=no, scrollbars=yes');\n}\nwindow.openInquiryWindow = openInquiryWindow;\n\n\n\n// WEBPACK FOOTER //\n// ./es6/user-common-js/ui/legacy/inquiry.js","/**\n * Intro.js v2.9.3\n * https://github.com/usablica/intro.js\n *\n * Copyright (C) 2017 Afshin Mehrabani (@afshinmeh)\n */\n\n(function(f) {\n if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n module.exports = f();\n // deprecated function\n // @since 2.8.0\n module.exports.introJs = function () {\n console.warn('Deprecated: please use require(\"intro.js\") directly, instead of the introJs method of the function');\n // introJs()\n return f().apply(this, arguments);\n };\n } else if (typeof define === \"function\" && define.amd) {\n define([], f);\n } else {\n var g;\n if (typeof window !== \"undefined\") {\n g = window;\n } else if (typeof global !== \"undefined\") {\n g = global;\n } else if (typeof self !== \"undefined\") {\n g = self;\n } else {\n g = this;\n }\n g.introJs = f();\n }\n})(function () {\n //Default config/variables\n var VERSION = '2.9.3';\n\n /**\n * IntroJs main class\n *\n * @class IntroJs\n */\n function IntroJs(obj) {\n this._targetElement = obj;\n this._introItems = [];\n\n this._options = {\n /* Next button label in tooltip box */\n nextLabel: 'Next →',\n /* Previous button label in tooltip box */\n prevLabel: '← Back',\n /* Skip button label in tooltip box */\n skipLabel: 'Skip',\n /* Done button label in tooltip box */\n doneLabel: 'Done',\n /* Hide previous button in the first step? Otherwise, it will be disabled button. */\n hidePrev: false,\n /* Hide next button in the last step? Otherwise, it will be disabled button. */\n hideNext: false,\n /* Default tooltip box position */\n tooltipPosition: 'bottom',\n /* Next CSS class for tooltip boxes */\n tooltipClass: '',\n /* CSS class that is added to the helperLayer */\n highlightClass: '',\n /* Close introduction when pressing Escape button? */\n exitOnEsc: true,\n /* Close introduction when clicking on overlay layer? */\n exitOnOverlayClick: true,\n /* Show step numbers in introduction? */\n showStepNumbers: true,\n /* Let user use keyboard to navigate the tour? */\n keyboardNavigation: true,\n /* Show tour control buttons? */\n showButtons: true,\n /* Show tour bullets? */\n showBullets: true,\n /* Show tour progress? */\n showProgress: false,\n /* Scroll to highlighted element? */\n scrollToElement: true,\n /*\n * Should we scroll the tooltip or target element?\n *\n * Options are: 'element' or 'tooltip'\n */\n scrollTo: 'element',\n /* Padding to add after scrolling when element is not in the viewport (in pixels) */\n scrollPadding: 30,\n /* Set the overlay opacity */\n overlayOpacity: 0.8,\n /* Precedence of positions, when auto is enabled */\n positionPrecedence: [\"bottom\", \"top\", \"right\", \"left\"],\n /* Disable an interaction with element? */\n disableInteraction: false,\n /* Set how much padding to be used around helper element */\n helperElementPadding: 10,\n /* Default hint position */\n hintPosition: 'top-middle',\n /* Hint button label */\n hintButtonLabel: 'Got it',\n /* Adding animation to hints? */\n hintAnimation: true,\n /* additional classes to put on the buttons */\n buttonClass: \"introjs-button\"\n };\n }\n\n /**\n * Initiate a new introduction/guide from an element in the page\n *\n * @api private\n * @method _introForElement\n * @param {Object} targetElm\n * @param {String} group\n * @returns {Boolean} Success or not?\n */\n function _introForElement(targetElm, group) {\n var allIntroSteps = targetElm.querySelectorAll(\"*[data-intro]\"),\n introItems = [];\n\n if (this._options.steps) {\n //use steps passed programmatically\n _forEach(this._options.steps, function (step) {\n var currentItem = _cloneObject(step);\n\n //set the step\n currentItem.step = introItems.length + 1;\n\n //use querySelector function only when developer used CSS selector\n if (typeof (currentItem.element) === 'string') {\n //grab the element with given selector from the page\n currentItem.element = document.querySelector(currentItem.element);\n }\n\n //intro without element\n if (typeof (currentItem.element) === 'undefined' || currentItem.element === null) {\n var floatingElementQuery = document.querySelector(\".introjsFloatingElement\");\n\n if (floatingElementQuery === null) {\n floatingElementQuery = document.createElement('div');\n floatingElementQuery.className = 'introjsFloatingElement';\n\n document.body.appendChild(floatingElementQuery);\n }\n\n currentItem.element = floatingElementQuery;\n currentItem.position = 'floating';\n }\n\n currentItem.scrollTo = currentItem.scrollTo || this._options.scrollTo;\n\n if (typeof (currentItem.disableInteraction) === 'undefined') {\n currentItem.disableInteraction = this._options.disableInteraction;\n }\n\n if (currentItem.element !== null) {\n introItems.push(currentItem);\n } \n }.bind(this));\n\n } else {\n //use steps from data-* annotations\n var elmsLength = allIntroSteps.length;\n var disableInteraction;\n \n //if there's no element to intro\n if (elmsLength < 1) {\n return false;\n }\n\n _forEach(allIntroSteps, function (currentElement) {\n \n // PR #80\n // start intro for groups of elements\n if (group && (currentElement.getAttribute(\"data-intro-group\") !== group)) {\n return;\n }\n\n // skip hidden elements\n if (currentElement.style.display === 'none') {\n return;\n }\n\n var step = parseInt(currentElement.getAttribute('data-step'), 10);\n\n if (typeof (currentElement.getAttribute('data-disable-interaction')) !== 'undefined') {\n disableInteraction = !!currentElement.getAttribute('data-disable-interaction');\n } else {\n disableInteraction = this._options.disableInteraction;\n }\n\n if (step > 0) {\n introItems[step - 1] = {\n element: currentElement,\n intro: currentElement.getAttribute('data-intro'),\n step: parseInt(currentElement.getAttribute('data-step'), 10),\n tooltipClass: currentElement.getAttribute('data-tooltipclass'),\n highlightClass: currentElement.getAttribute('data-highlightclass'),\n position: currentElement.getAttribute('data-position') || this._options.tooltipPosition,\n scrollTo: currentElement.getAttribute('data-scrollto') || this._options.scrollTo,\n disableInteraction: disableInteraction\n };\n }\n }.bind(this));\n\n //next add intro items without data-step\n //todo: we need a cleanup here, two loops are redundant\n var nextStep = 0;\n\n _forEach(allIntroSteps, function (currentElement) {\n \n // PR #80\n // start intro for groups of elements\n if (group && (currentElement.getAttribute(\"data-intro-group\") !== group)) {\n return;\n }\n \n if (currentElement.getAttribute('data-step') === null) {\n\n while (true) {\n if (typeof introItems[nextStep] === 'undefined') {\n break;\n } else {\n nextStep++;\n }\n } \n\n if (typeof (currentElement.getAttribute('data-disable-interaction')) !== 'undefined') {\n disableInteraction = !!currentElement.getAttribute('data-disable-interaction');\n } else {\n disableInteraction = this._options.disableInteraction;\n }\n\n introItems[nextStep] = {\n element: currentElement,\n intro: currentElement.getAttribute('data-intro'),\n step: nextStep + 1,\n tooltipClass: currentElement.getAttribute('data-tooltipclass'),\n highlightClass: currentElement.getAttribute('data-highlightclass'),\n position: currentElement.getAttribute('data-position') || this._options.tooltipPosition,\n scrollTo: currentElement.getAttribute('data-scrollto') || this._options.scrollTo,\n disableInteraction: disableInteraction\n };\n }\n }.bind(this));\n }\n\n //removing undefined/null elements\n var tempIntroItems = [];\n for (var z = 0; z < introItems.length; z++) {\n if (introItems[z]) {\n // copy non-falsy values to the end of the array\n tempIntroItems.push(introItems[z]); \n } \n }\n\n introItems = tempIntroItems;\n\n //Ok, sort all items with given steps\n introItems.sort(function (a, b) {\n return a.step - b.step;\n });\n\n //set it to the introJs object\n this._introItems = introItems;\n\n //add overlay layer to the page\n if(_addOverlayLayer.call(this, targetElm)) {\n //then, start the show\n _nextStep.call(this);\n\n if (this._options.keyboardNavigation) {\n DOMEvent.on(window, 'keydown', _onKeyDown, this, true);\n }\n //for window resize\n DOMEvent.on(window, 'resize', _onResize, this, true);\n }\n return false;\n }\n\n function _onResize () {\n this.refresh.call(this);\n }\n\n /**\n * on keyCode:\n * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode\n * This feature has been removed from the Web standards.\n * Though some browsers may still support it, it is in\n * the process of being dropped.\n * Instead, you should use KeyboardEvent.code,\n * if it's implemented.\n *\n * jQuery's approach is to test for\n * (1) e.which, then\n * (2) e.charCode, then\n * (3) e.keyCode\n * https://github.com/jquery/jquery/blob/a6b0705294d336ae2f63f7276de0da1195495363/src/event.js#L638\n *\n * @param type var\n * @return type\n */\n function _onKeyDown (e) {\n var code = (e.code === null) ? e.which : e.code;\n\n // if code/e.which is null\n if (code === null) {\n code = (e.charCode === null) ? e.keyCode : e.charCode;\n }\n \n if ((code === 'Escape' || code === 27) && this._options.exitOnEsc === true) {\n //escape key pressed, exit the intro\n //check if exit callback is defined\n _exitIntro.call(this, this._targetElement);\n } else if (code === 'ArrowLeft' || code === 37) {\n //left arrow\n _previousStep.call(this);\n } else if (code === 'ArrowRight' || code === 39) {\n //right arrow\n _nextStep.call(this);\n } else if (code === 'Enter' || code === 13) {\n //srcElement === ie\n var target = e.target || e.srcElement;\n if (target && target.className.match('introjs-prevbutton')) {\n //user hit enter while focusing on previous button\n _previousStep.call(this);\n } else if (target && target.className.match('introjs-skipbutton')) {\n //user hit enter while focusing on skip button\n if (this._introItems.length - 1 === this._currentStep && typeof (this._introCompleteCallback) === 'function') {\n this._introCompleteCallback.call(this);\n }\n\n _exitIntro.call(this, this._targetElement);\n } else if (target && target.getAttribute('data-stepnumber')) {\n // user hit enter while focusing on step bullet\n target.click();\n } else {\n //default behavior for responding to enter\n _nextStep.call(this);\n }\n\n //prevent default behaviour on hitting Enter, to prevent steps being skipped in some browsers\n if(e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n }\n }\n }\n\n /*\n * makes a copy of the object\n * @api private\n * @method _cloneObject\n */\n function _cloneObject(object) {\n if (object === null || typeof (object) !== 'object' || typeof (object.nodeType) !== 'undefined') {\n return object;\n }\n var temp = {};\n for (var key in object) {\n if (typeof(window.jQuery) !== 'undefined' && object[key] instanceof window.jQuery) {\n temp[key] = object[key];\n } else {\n temp[key] = _cloneObject(object[key]);\n }\n }\n return temp;\n }\n /**\n * Go to specific step of introduction\n *\n * @api private\n * @method _goToStep\n */\n function _goToStep(step) {\n //because steps starts with zero\n this._currentStep = step - 2;\n if (typeof (this._introItems) !== 'undefined') {\n _nextStep.call(this);\n }\n }\n\n /**\n * Go to the specific step of introduction with the explicit [data-step] number\n *\n * @api private\n * @method _goToStepNumber\n */\n function _goToStepNumber(step) {\n this._currentStepNumber = step;\n if (typeof (this._introItems) !== 'undefined') {\n _nextStep.call(this);\n }\n }\n\n /**\n * Go to next step on intro\n *\n * @api private\n * @method _nextStep\n */\n function _nextStep() {\n this._direction = 'forward';\n\n if (typeof (this._currentStepNumber) !== 'undefined') {\n _forEach(this._introItems, function (item, i) {\n if( item.step === this._currentStepNumber ) {\n this._currentStep = i - 1;\n this._currentStepNumber = undefined;\n }\n }.bind(this));\n }\n\n if (typeof (this._currentStep) === 'undefined') {\n this._currentStep = 0;\n } else {\n ++this._currentStep;\n }\n\n var nextStep = this._introItems[this._currentStep];\n var continueStep = true;\n\n if (typeof (this._introBeforeChangeCallback) !== 'undefined') {\n continueStep = this._introBeforeChangeCallback.call(this, nextStep.element);\n }\n\n // if `onbeforechange` returned `false`, stop displaying the element\n if (continueStep === false) {\n --this._currentStep;\n return false;\n }\n\n if ((this._introItems.length) <= this._currentStep) {\n //end of the intro\n //check if any callback is defined\n if (typeof (this._introCompleteCallback) === 'function') {\n this._introCompleteCallback.call(this);\n }\n _exitIntro.call(this, this._targetElement);\n return;\n }\n\n _showElement.call(this, nextStep);\n }\n\n /**\n * Go to previous step on intro\n *\n * @api private\n * @method _previousStep\n */\n function _previousStep() {\n this._direction = 'backward';\n\n if (this._currentStep === 0) {\n return false;\n }\n\n --this._currentStep;\n\n var nextStep = this._introItems[this._currentStep];\n var continueStep = true;\n\n if (typeof (this._introBeforeChangeCallback) !== 'undefined') {\n continueStep = this._introBeforeChangeCallback.call(this, nextStep.element);\n }\n\n // if `onbeforechange` returned `false`, stop displaying the element\n if (continueStep === false) {\n ++this._currentStep;\n return false;\n }\n\n _showElement.call(this, nextStep);\n }\n\n /**\n * Update placement of the intro objects on the screen\n * @api private\n */\n function _refresh() {\n // re-align intros\n _setHelperLayerPosition.call(this, document.querySelector('.introjs-helperLayer'));\n _setHelperLayerPosition.call(this, document.querySelector('.introjs-tooltipReferenceLayer'));\n _setHelperLayerPosition.call(this, document.querySelector('.introjs-disableInteraction'));\n\n // re-align tooltip\n if(this._currentStep !== undefined && this._currentStep !== null) {\n var oldHelperNumberLayer = document.querySelector('.introjs-helperNumberLayer'),\n oldArrowLayer = document.querySelector('.introjs-arrow'),\n oldtooltipContainer = document.querySelector('.introjs-tooltip');\n _placeTooltip.call(this, this._introItems[this._currentStep].element, oldtooltipContainer, oldArrowLayer, oldHelperNumberLayer);\n }\n\n //re-align hints\n _reAlignHints.call(this);\n return this;\n }\n\n /**\n * Exit from intro\n *\n * @api private\n * @method _exitIntro\n * @param {Object} targetElement\n * @param {Boolean} force - Setting to `true` will skip the result of beforeExit callback\n */\n function _exitIntro(targetElement, force) {\n var continueExit = true;\n\n // calling onbeforeexit callback\n //\n // If this callback return `false`, it would halt the process\n if (this._introBeforeExitCallback !== undefined) {\n continueExit = this._introBeforeExitCallback.call(this);\n }\n\n // skip this check if `force` parameter is `true`\n // otherwise, if `onbeforeexit` returned `false`, don't exit the intro\n if (!force && continueExit === false) return;\n\n //remove overlay layers from the page\n var overlayLayers = targetElement.querySelectorAll('.introjs-overlay');\n\n if (overlayLayers && overlayLayers.length) {\n _forEach(overlayLayers, function (overlayLayer) {\n overlayLayer.style.opacity = 0;\n window.setTimeout(function () {\n if (this.parentNode) {\n this.parentNode.removeChild(this);\n }\n }.bind(overlayLayer), 500);\n }.bind(this));\n }\n\n //remove all helper layers\n var helperLayer = targetElement.querySelector('.introjs-helperLayer');\n if (helperLayer) {\n helperLayer.parentNode.removeChild(helperLayer);\n }\n\n var referenceLayer = targetElement.querySelector('.introjs-tooltipReferenceLayer');\n if (referenceLayer) {\n referenceLayer.parentNode.removeChild(referenceLayer);\n }\n\n //remove disableInteractionLayer\n var disableInteractionLayer = targetElement.querySelector('.introjs-disableInteraction');\n if (disableInteractionLayer) {\n disableInteractionLayer.parentNode.removeChild(disableInteractionLayer);\n }\n\n //remove intro floating element\n var floatingElement = document.querySelector('.introjsFloatingElement');\n if (floatingElement) {\n floatingElement.parentNode.removeChild(floatingElement);\n }\n\n _removeShowElement();\n\n //remove `introjs-fixParent` class from the elements\n var fixParents = document.querySelectorAll('.introjs-fixParent');\n _forEach(fixParents, function (parent) {\n _removeClass(parent, /introjs-fixParent/g);\n });\n\n //clean listeners\n DOMEvent.off(window, 'keydown', _onKeyDown, this, true);\n DOMEvent.off(window, 'resize', _onResize, this, true);\n\n //check if any callback is defined\n if (this._introExitCallback !== undefined) {\n this._introExitCallback.call(this);\n }\n\n //set the step to zero\n this._currentStep = undefined;\n }\n\n /**\n * Render tooltip box in the page\n *\n * @api private\n * @method _placeTooltip\n * @param {HTMLElement} targetElement\n * @param {HTMLElement} tooltipLayer\n * @param {HTMLElement} arrowLayer\n * @param {HTMLElement} helperNumberLayer\n * @param {Boolean} hintMode\n */\n function _placeTooltip(targetElement, tooltipLayer, arrowLayer, helperNumberLayer, hintMode) {\n var tooltipCssClass = '',\n currentStepObj,\n tooltipOffset,\n targetOffset,\n windowSize,\n currentTooltipPosition;\n\n hintMode = hintMode || false;\n\n //reset the old style\n tooltipLayer.style.top = null;\n tooltipLayer.style.right = null;\n tooltipLayer.style.bottom = null;\n tooltipLayer.style.left = null;\n tooltipLayer.style.marginLeft = null;\n tooltipLayer.style.marginTop = null;\n\n arrowLayer.style.display = 'inherit';\n\n if (typeof(helperNumberLayer) !== 'undefined' && helperNumberLayer !== null) {\n helperNumberLayer.style.top = null;\n helperNumberLayer.style.left = null;\n }\n\n //prevent error when `this._currentStep` is undefined\n if (!this._introItems[this._currentStep]) return;\n\n //if we have a custom css class for each step\n currentStepObj = this._introItems[this._currentStep];\n if (typeof (currentStepObj.tooltipClass) === 'string') {\n tooltipCssClass = currentStepObj.tooltipClass;\n } else {\n tooltipCssClass = this._options.tooltipClass;\n }\n\n tooltipLayer.className = ('introjs-tooltip ' + tooltipCssClass).replace(/^\\s+|\\s+$/g, '');\n tooltipLayer.setAttribute('role', 'dialog');\n\n currentTooltipPosition = this._introItems[this._currentStep].position;\n\n // Floating is always valid, no point in calculating\n if (currentTooltipPosition !== \"floating\") { \n currentTooltipPosition = _determineAutoPosition.call(this, targetElement, tooltipLayer, currentTooltipPosition);\n }\n\n var tooltipLayerStyleLeft;\n targetOffset = _getOffset(targetElement);\n tooltipOffset = _getOffset(tooltipLayer);\n windowSize = _getWinSize();\n\n _addClass(tooltipLayer, 'introjs-' + currentTooltipPosition);\n\n switch (currentTooltipPosition) {\n case 'top-right-aligned':\n arrowLayer.className = 'introjs-arrow bottom-right';\n\n var tooltipLayerStyleRight = 0;\n _checkLeft(targetOffset, tooltipLayerStyleRight, tooltipOffset, tooltipLayer);\n tooltipLayer.style.bottom = (targetOffset.height + 20) + 'px';\n break;\n\n case 'top-middle-aligned':\n arrowLayer.className = 'introjs-arrow bottom-middle';\n\n var tooltipLayerStyleLeftRight = targetOffset.width / 2 - tooltipOffset.width / 2;\n\n // a fix for middle aligned hints\n if (hintMode) {\n tooltipLayerStyleLeftRight += 5;\n }\n\n if (_checkLeft(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, tooltipLayer)) {\n tooltipLayer.style.right = null;\n _checkRight(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, windowSize, tooltipLayer);\n }\n tooltipLayer.style.bottom = (targetOffset.height + 20) + 'px';\n break;\n\n case 'top-left-aligned':\n // top-left-aligned is the same as the default top\n case 'top':\n arrowLayer.className = 'introjs-arrow bottom';\n\n tooltipLayerStyleLeft = (hintMode) ? 0 : 15;\n\n _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer);\n tooltipLayer.style.bottom = (targetOffset.height + 20) + 'px';\n break;\n case 'right':\n tooltipLayer.style.left = (targetOffset.width + 20) + 'px';\n if (targetOffset.top + tooltipOffset.height > windowSize.height) {\n // In this case, right would have fallen below the bottom of the screen.\n // Modify so that the bottom of the tooltip connects with the target\n arrowLayer.className = \"introjs-arrow left-bottom\";\n tooltipLayer.style.top = \"-\" + (tooltipOffset.height - targetOffset.height - 20) + \"px\";\n } else {\n arrowLayer.className = 'introjs-arrow left';\n }\n break;\n case 'left':\n if (!hintMode && this._options.showStepNumbers === true) {\n tooltipLayer.style.top = '15px';\n }\n\n if (targetOffset.top + tooltipOffset.height > windowSize.height) {\n // In this case, left would have fallen below the bottom of the screen.\n // Modify so that the bottom of the tooltip connects with the target\n tooltipLayer.style.top = \"-\" + (tooltipOffset.height - targetOffset.height - 20) + \"px\";\n arrowLayer.className = 'introjs-arrow right-bottom';\n } else {\n arrowLayer.className = 'introjs-arrow right';\n }\n tooltipLayer.style.right = (targetOffset.width + 20) + 'px';\n\n break;\n case 'floating':\n arrowLayer.style.display = 'none';\n\n //we have to adjust the top and left of layer manually for intro items without element\n tooltipLayer.style.left = '50%';\n tooltipLayer.style.top = '50%';\n tooltipLayer.style.marginLeft = '-' + (tooltipOffset.width / 2) + 'px';\n tooltipLayer.style.marginTop = '-' + (tooltipOffset.height / 2) + 'px';\n\n if (typeof(helperNumberLayer) !== 'undefined' && helperNumberLayer !== null) {\n helperNumberLayer.style.left = '-' + ((tooltipOffset.width / 2) + 18) + 'px';\n helperNumberLayer.style.top = '-' + ((tooltipOffset.height / 2) + 18) + 'px';\n }\n\n break;\n case 'bottom-right-aligned':\n arrowLayer.className = 'introjs-arrow top-right';\n\n tooltipLayerStyleRight = 0;\n _checkLeft(targetOffset, tooltipLayerStyleRight, tooltipOffset, tooltipLayer);\n tooltipLayer.style.top = (targetOffset.height + 20) + 'px';\n break;\n\n case 'bottom-middle-aligned':\n arrowLayer.className = 'introjs-arrow top-middle';\n\n tooltipLayerStyleLeftRight = targetOffset.width / 2 - tooltipOffset.width / 2;\n\n // a fix for middle aligned hints\n if (hintMode) {\n tooltipLayerStyleLeftRight += 5;\n }\n\n if (_checkLeft(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, tooltipLayer)) {\n tooltipLayer.style.right = null;\n _checkRight(targetOffset, tooltipLayerStyleLeftRight, tooltipOffset, windowSize, tooltipLayer);\n }\n tooltipLayer.style.top = (targetOffset.height + 20) + 'px';\n break;\n\n // case 'bottom-left-aligned':\n // Bottom-left-aligned is the same as the default bottom\n // case 'bottom':\n // Bottom going to follow the default behavior\n default:\n arrowLayer.className = 'introjs-arrow top';\n\n tooltipLayerStyleLeft = 0;\n _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer);\n tooltipLayer.style.top = (targetOffset.height + 20) + 'px';\n }\n }\n\n /**\n * Set tooltip left so it doesn't go off the right side of the window\n *\n * @return boolean true, if tooltipLayerStyleLeft is ok. false, otherwise.\n */\n function _checkRight(targetOffset, tooltipLayerStyleLeft, tooltipOffset, windowSize, tooltipLayer) {\n if (targetOffset.left + tooltipLayerStyleLeft + tooltipOffset.width > windowSize.width) {\n // off the right side of the window\n tooltipLayer.style.left = (windowSize.width - tooltipOffset.width - targetOffset.left) + 'px';\n return false;\n }\n tooltipLayer.style.left = tooltipLayerStyleLeft + 'px';\n return true;\n }\n\n /**\n * Set tooltip right so it doesn't go off the left side of the window\n *\n * @return boolean true, if tooltipLayerStyleRight is ok. false, otherwise.\n */\n function _checkLeft(targetOffset, tooltipLayerStyleRight, tooltipOffset, tooltipLayer) {\n if (targetOffset.left + targetOffset.width - tooltipLayerStyleRight - tooltipOffset.width < 0) {\n // off the left side of the window\n tooltipLayer.style.left = (-targetOffset.left) + 'px';\n return false;\n }\n tooltipLayer.style.right = tooltipLayerStyleRight + 'px';\n return true;\n }\n\n /**\n * Determines the position of the tooltip based on the position precedence and availability\n * of screen space.\n *\n * @param {Object} targetElement\n * @param {Object} tooltipLayer\n * @param {String} desiredTooltipPosition\n * @return {String} calculatedPosition\n */\n function _determineAutoPosition(targetElement, tooltipLayer, desiredTooltipPosition) {\n\n // Take a clone of position precedence. These will be the available\n var possiblePositions = this._options.positionPrecedence.slice();\n\n var windowSize = _getWinSize();\n var tooltipHeight = _getOffset(tooltipLayer).height + 10;\n var tooltipWidth = _getOffset(tooltipLayer).width + 20;\n var targetElementRect = targetElement.getBoundingClientRect();\n\n // If we check all the possible areas, and there are no valid places for the tooltip, the element\n // must take up most of the screen real estate. Show the tooltip floating in the middle of the screen.\n var calculatedPosition = \"floating\";\n\n /*\n * auto determine position \n */\n\n // Check for space below\n if (targetElementRect.bottom + tooltipHeight + tooltipHeight > windowSize.height) {\n _removeEntry(possiblePositions, \"bottom\");\n }\n\n // Check for space above\n if (targetElementRect.top - tooltipHeight < 0) {\n _removeEntry(possiblePositions, \"top\");\n }\n\n // Check for space to the right\n if (targetElementRect.right + tooltipWidth > windowSize.width) {\n _removeEntry(possiblePositions, \"right\");\n }\n\n // Check for space to the left\n if (targetElementRect.left - tooltipWidth < 0) {\n _removeEntry(possiblePositions, \"left\");\n }\n\n // @var {String} ex: 'right-aligned'\n var desiredAlignment = (function (pos) {\n var hyphenIndex = pos.indexOf('-');\n if (hyphenIndex !== -1) {\n // has alignment\n return pos.substr(hyphenIndex);\n }\n return '';\n })(desiredTooltipPosition || '');\n\n // strip alignment from position\n if (desiredTooltipPosition) {\n // ex: \"bottom-right-aligned\"\n // should return 'bottom'\n desiredTooltipPosition = desiredTooltipPosition.split('-')[0];\n }\n\n if (possiblePositions.length) {\n if (desiredTooltipPosition !== \"auto\" &&\n possiblePositions.indexOf(desiredTooltipPosition) > -1) {\n // If the requested position is in the list, choose that\n calculatedPosition = desiredTooltipPosition;\n } else {\n // Pick the first valid position, in order\n calculatedPosition = possiblePositions[0];\n }\n }\n\n // only top and bottom positions have optional alignments\n if (['top', 'bottom'].indexOf(calculatedPosition) !== -1) {\n calculatedPosition += _determineAutoAlignment(targetElementRect.left, tooltipWidth, windowSize, desiredAlignment);\n }\n\n return calculatedPosition;\n }\n\n /**\n * auto-determine alignment\n * @param {Integer} offsetLeft\n * @param {Integer} tooltipWidth\n * @param {Object} windowSize\n * @param {String} desiredAlignment\n * @return {String} calculatedAlignment\n */\n function _determineAutoAlignment (offsetLeft, tooltipWidth, windowSize, desiredAlignment) {\n var halfTooltipWidth = tooltipWidth / 2,\n winWidth = Math.min(windowSize.width, window.screen.width),\n possibleAlignments = ['-left-aligned', '-middle-aligned', '-right-aligned'],\n calculatedAlignment = '';\n \n // valid left must be at least a tooltipWidth\n // away from right side\n if (winWidth - offsetLeft < tooltipWidth) {\n _removeEntry(possibleAlignments, '-left-aligned');\n }\n\n // valid middle must be at least half \n // width away from both sides\n if (offsetLeft < halfTooltipWidth || \n winWidth - offsetLeft < halfTooltipWidth) {\n _removeEntry(possibleAlignments, '-middle-aligned');\n }\n\n // valid right must be at least a tooltipWidth\n // width away from left side\n if (offsetLeft < tooltipWidth) {\n _removeEntry(possibleAlignments, '-right-aligned');\n }\n\n if (possibleAlignments.length) {\n if (possibleAlignments.indexOf(desiredAlignment) !== -1) {\n // the desired alignment is valid\n calculatedAlignment = desiredAlignment;\n } else {\n // pick the first valid position, in order\n calculatedAlignment = possibleAlignments[0];\n }\n } else {\n // if screen width is too small \n // for ANY alignment, middle is \n // probably the best for visibility\n calculatedAlignment = '-middle-aligned';\n }\n\n return calculatedAlignment;\n }\n\n /**\n * Remove an entry from a string array if it's there, does nothing if it isn't there.\n *\n * @param {Array} stringArray\n * @param {String} stringToRemove\n */\n function _removeEntry(stringArray, stringToRemove) {\n if (stringArray.indexOf(stringToRemove) > -1) {\n stringArray.splice(stringArray.indexOf(stringToRemove), 1);\n }\n }\n\n /**\n * Update the position of the helper layer on the screen\n *\n * @api private\n * @method _setHelperLayerPosition\n * @param {Object} helperLayer\n */\n function _setHelperLayerPosition(helperLayer) {\n if (helperLayer) {\n //prevent error when `this._currentStep` in undefined\n if (!this._introItems[this._currentStep]) return;\n\n var currentElement = this._introItems[this._currentStep],\n elementPosition = _getOffset(currentElement.element),\n widthHeightPadding = this._options.helperElementPadding;\n\n // If the target element is fixed, the tooltip should be fixed as well.\n // Otherwise, remove a fixed class that may be left over from the previous\n // step.\n if (_isFixed(currentElement.element)) {\n _addClass(helperLayer, 'introjs-fixedTooltip');\n } else {\n _removeClass(helperLayer, 'introjs-fixedTooltip');\n }\n\n if (currentElement.position === 'floating') {\n widthHeightPadding = 0;\n }\n\n //set new position to helper layer\n helperLayer.style.cssText = 'width: ' + (elementPosition.width + widthHeightPadding) + 'px; ' +\n 'height:' + (elementPosition.height + widthHeightPadding) + 'px; ' +\n 'top:' + (elementPosition.top - widthHeightPadding / 2) + 'px;' +\n 'left: ' + (elementPosition.left - widthHeightPadding / 2) + 'px;';\n\n }\n }\n\n /**\n * Add disableinteraction layer and adjust the size and position of the layer\n *\n * @api private\n * @method _disableInteraction\n */\n function _disableInteraction() {\n var disableInteractionLayer = document.querySelector('.introjs-disableInteraction');\n\n if (disableInteractionLayer === null) {\n disableInteractionLayer = document.createElement('div');\n disableInteractionLayer.className = 'introjs-disableInteraction';\n this._targetElement.appendChild(disableInteractionLayer);\n }\n\n _setHelperLayerPosition.call(this, disableInteractionLayer);\n }\n\n /**\n * Setting anchors to behave like buttons\n *\n * @api private\n * @method _setAnchorAsButton\n */\n function _setAnchorAsButton(anchor){\n anchor.setAttribute('role', 'button');\n anchor.tabIndex = 0;\n }\n\n /**\n * Show an element on the page\n *\n * @api private\n * @method _showElement\n * @param {Object} targetElement\n */\n function _showElement(targetElement) {\n if (typeof (this._introChangeCallback) !== 'undefined') {\n this._introChangeCallback.call(this, targetElement.element);\n }\n\n var self = this,\n oldHelperLayer = document.querySelector('.introjs-helperLayer'),\n oldReferenceLayer = document.querySelector('.introjs-tooltipReferenceLayer'),\n highlightClass = 'introjs-helperLayer',\n nextTooltipButton,\n prevTooltipButton,\n skipTooltipButton,\n scrollParent;\n\n //check for a current step highlight class\n if (typeof (targetElement.highlightClass) === 'string') {\n highlightClass += (' ' + targetElement.highlightClass);\n }\n //check for options highlight class\n if (typeof (this._options.highlightClass) === 'string') {\n highlightClass += (' ' + this._options.highlightClass);\n }\n\n if (oldHelperLayer !== null) {\n var oldHelperNumberLayer = oldReferenceLayer.querySelector('.introjs-helperNumberLayer'),\n oldtooltipLayer = oldReferenceLayer.querySelector('.introjs-tooltiptext'),\n oldArrowLayer = oldReferenceLayer.querySelector('.introjs-arrow'),\n oldtooltipContainer = oldReferenceLayer.querySelector('.introjs-tooltip');\n \n skipTooltipButton = oldReferenceLayer.querySelector('.introjs-skipbutton');\n prevTooltipButton = oldReferenceLayer.querySelector('.introjs-prevbutton');\n nextTooltipButton = oldReferenceLayer.querySelector('.introjs-nextbutton');\n\n //update or reset the helper highlight class\n oldHelperLayer.className = highlightClass;\n //hide the tooltip\n oldtooltipContainer.style.opacity = 0;\n oldtooltipContainer.style.display = \"none\";\n\n if (oldHelperNumberLayer !== null) {\n var lastIntroItem = this._introItems[(targetElement.step - 2 >= 0 ? targetElement.step - 2 : 0)];\n\n if (lastIntroItem !== null && (this._direction === 'forward' && lastIntroItem.position === 'floating') || (this._direction === 'backward' && targetElement.position === 'floating')) {\n oldHelperNumberLayer.style.opacity = 0;\n }\n }\n\n // scroll to element\n scrollParent = _getScrollParent( targetElement.element );\n\n if (scrollParent !== document.body) {\n // target is within a scrollable element\n _scrollParentToElement(scrollParent, targetElement.element);\n }\n\n // set new position to helper layer\n _setHelperLayerPosition.call(self, oldHelperLayer);\n _setHelperLayerPosition.call(self, oldReferenceLayer);\n\n //remove `introjs-fixParent` class from the elements\n var fixParents = document.querySelectorAll('.introjs-fixParent');\n _forEach(fixParents, function (parent) {\n _removeClass(parent, /introjs-fixParent/g);\n });\n \n //remove old classes if the element still exist\n _removeShowElement();\n\n //we should wait until the CSS3 transition is competed (it's 0.3 sec) to prevent incorrect `height` and `width` calculation\n if (self._lastShowElementTimer) {\n window.clearTimeout(self._lastShowElementTimer);\n }\n\n self._lastShowElementTimer = window.setTimeout(function() {\n //set current step to the label\n if (oldHelperNumberLayer !== null) {\n oldHelperNumberLayer.innerHTML = targetElement.step;\n }\n //set current tooltip text\n oldtooltipLayer.innerHTML = targetElement.intro;\n //set the tooltip position\n oldtooltipContainer.style.display = \"block\";\n _placeTooltip.call(self, targetElement.element, oldtooltipContainer, oldArrowLayer, oldHelperNumberLayer);\n\n //change active bullet\n if (self._options.showBullets) {\n oldReferenceLayer.querySelector('.introjs-bullets li > a.active').className = '';\n oldReferenceLayer.querySelector('.introjs-bullets li > a[data-stepnumber=\"' + targetElement.step + '\"]').className = 'active';\n }\n oldReferenceLayer.querySelector('.introjs-progress .introjs-progressbar').style.cssText = 'width:' + _getProgress.call(self) + '%;';\n oldReferenceLayer.querySelector('.introjs-progress .introjs-progressbar').setAttribute('aria-valuenow', _getProgress.call(self));\n\n //show the tooltip\n oldtooltipContainer.style.opacity = 1;\n if (oldHelperNumberLayer) oldHelperNumberLayer.style.opacity = 1;\n\n //reset button focus\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null && /introjs-donebutton/gi.test(skipTooltipButton.className)) {\n // skip button is now \"done\" button\n skipTooltipButton.focus();\n } else if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n //still in the tour, focus on next\n nextTooltipButton.focus();\n }\n\n // change the scroll of the window, if needed\n _scrollTo.call(self, targetElement.scrollTo, targetElement, oldtooltipLayer);\n }, 350);\n\n // end of old element if-else condition\n } else {\n var helperLayer = document.createElement('div'),\n referenceLayer = document.createElement('div'),\n arrowLayer = document.createElement('div'),\n tooltipLayer = document.createElement('div'),\n tooltipTextLayer = document.createElement('div'),\n bulletsLayer = document.createElement('div'),\n progressLayer = document.createElement('div'),\n buttonsLayer = document.createElement('div');\n\n helperLayer.className = highlightClass;\n referenceLayer.className = 'introjs-tooltipReferenceLayer';\n\n // scroll to element\n scrollParent = _getScrollParent( targetElement.element );\n\n if (scrollParent !== document.body) {\n // target is within a scrollable element\n _scrollParentToElement(scrollParent, targetElement.element);\n }\n\n //set new position to helper layer\n _setHelperLayerPosition.call(self, helperLayer);\n _setHelperLayerPosition.call(self, referenceLayer);\n\n //add helper layer to target element\n this._targetElement.appendChild(helperLayer);\n this._targetElement.appendChild(referenceLayer);\n\n arrowLayer.className = 'introjs-arrow';\n\n tooltipTextLayer.className = 'introjs-tooltiptext';\n tooltipTextLayer.innerHTML = targetElement.intro;\n\n bulletsLayer.className = 'introjs-bullets';\n\n if (this._options.showBullets === false) {\n bulletsLayer.style.display = 'none';\n }\n\n var ulContainer = document.createElement('ul');\n ulContainer.setAttribute('role', 'tablist');\n\n var anchorClick = function () {\n self.goToStep(this.getAttribute('data-stepnumber'));\n };\n\n _forEach(this._introItems, function (item, i) {\n var innerLi = document.createElement('li');\n var anchorLink = document.createElement('a');\n \n innerLi.setAttribute('role', 'presentation');\n anchorLink.setAttribute('role', 'tab');\n\n anchorLink.onclick = anchorClick;\n\n if (i === (targetElement.step-1)) {\n anchorLink.className = 'active';\n } \n\n _setAnchorAsButton(anchorLink);\n anchorLink.innerHTML = \" \";\n anchorLink.setAttribute('data-stepnumber', item.step);\n\n innerLi.appendChild(anchorLink);\n ulContainer.appendChild(innerLi);\n });\n\n bulletsLayer.appendChild(ulContainer);\n\n progressLayer.className = 'introjs-progress';\n\n if (this._options.showProgress === false) {\n progressLayer.style.display = 'none';\n }\n var progressBar = document.createElement('div');\n progressBar.className = 'introjs-progressbar';\n progressBar.setAttribute('role', 'progress');\n progressBar.setAttribute('aria-valuemin', 0);\n progressBar.setAttribute('aria-valuemax', 100);\n progressBar.setAttribute('aria-valuenow', _getProgress.call(this));\n progressBar.style.cssText = 'width:' + _getProgress.call(this) + '%;';\n\n progressLayer.appendChild(progressBar);\n\n buttonsLayer.className = 'introjs-tooltipbuttons';\n if (this._options.showButtons === false) {\n buttonsLayer.style.display = 'none';\n }\n\n tooltipLayer.className = 'introjs-tooltip';\n tooltipLayer.appendChild(tooltipTextLayer);\n tooltipLayer.appendChild(bulletsLayer);\n tooltipLayer.appendChild(progressLayer);\n\n //add helper layer number\n var helperNumberLayer = document.createElement('span');\n if (this._options.showStepNumbers === true) {\n helperNumberLayer.className = 'introjs-helperNumberLayer';\n helperNumberLayer.innerHTML = targetElement.step;\n referenceLayer.appendChild(helperNumberLayer);\n }\n\n tooltipLayer.appendChild(arrowLayer);\n referenceLayer.appendChild(tooltipLayer);\n\n //next button\n nextTooltipButton = document.createElement('a');\n\n nextTooltipButton.onclick = function() {\n if (self._introItems.length - 1 !== self._currentStep) {\n _nextStep.call(self);\n }\n };\n\n _setAnchorAsButton(nextTooltipButton);\n nextTooltipButton.innerHTML = this._options.nextLabel;\n\n //previous button\n prevTooltipButton = document.createElement('a');\n\n prevTooltipButton.onclick = function() {\n if (self._currentStep !== 0) {\n _previousStep.call(self);\n }\n };\n\n _setAnchorAsButton(prevTooltipButton);\n prevTooltipButton.innerHTML = this._options.prevLabel;\n\n //skip button\n skipTooltipButton = document.createElement('a');\n skipTooltipButton.className = this._options.buttonClass + ' introjs-skipbutton ';\n _setAnchorAsButton(skipTooltipButton);\n skipTooltipButton.innerHTML = this._options.skipLabel;\n\n skipTooltipButton.onclick = function() {\n if (self._introItems.length - 1 === self._currentStep && typeof (self._introCompleteCallback) === 'function') {\n self._introCompleteCallback.call(self);\n }\n\n if (self._introItems.length - 1 !== self._currentStep && typeof (self._introExitCallback) === 'function') {\n self._introExitCallback.call(self);\n }\n\n if (typeof(self._introSkipCallback) === 'function') {\n self._introSkipCallback.call(self);\n }\n\n _exitIntro.call(self, self._targetElement);\n };\n\n buttonsLayer.appendChild(skipTooltipButton);\n\n //in order to prevent displaying next/previous button always\n if (this._introItems.length > 1) {\n buttonsLayer.appendChild(prevTooltipButton);\n buttonsLayer.appendChild(nextTooltipButton);\n }\n\n tooltipLayer.appendChild(buttonsLayer);\n\n //set proper position\n _placeTooltip.call(self, targetElement.element, tooltipLayer, arrowLayer, helperNumberLayer);\n\n // change the scroll of the window, if needed\n _scrollTo.call(this, targetElement.scrollTo, targetElement, tooltipLayer);\n\n //end of new element if-else condition\n }\n\n // removing previous disable interaction layer\n var disableInteractionLayer = self._targetElement.querySelector('.introjs-disableInteraction');\n if (disableInteractionLayer) {\n disableInteractionLayer.parentNode.removeChild(disableInteractionLayer);\n }\n\n //disable interaction\n if (targetElement.disableInteraction) {\n _disableInteraction.call(self);\n }\n\n // when it's the first step of tour\n if (this._currentStep === 0 && this._introItems.length > 1) {\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n skipTooltipButton.className = this._options.buttonClass + ' introjs-skipbutton';\n }\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n nextTooltipButton.className = this._options.buttonClass + ' introjs-nextbutton';\n }\n\n if (this._options.hidePrev === true) {\n if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n prevTooltipButton.className = this._options.buttonClass + ' introjs-prevbutton introjs-hidden';\n }\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n _addClass(nextTooltipButton, 'introjs-fullbutton');\n }\n } else {\n if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n prevTooltipButton.className = this._options.buttonClass + ' introjs-prevbutton introjs-disabled';\n }\n }\n\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n skipTooltipButton.innerHTML = this._options.skipLabel;\n }\n } else if (this._introItems.length - 1 === this._currentStep || this._introItems.length === 1) {\n // last step of tour\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n skipTooltipButton.innerHTML = this._options.doneLabel;\n // adding donebutton class in addition to skipbutton\n _addClass(skipTooltipButton, 'introjs-donebutton');\n }\n if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n prevTooltipButton.className = this._options.buttonClass + ' introjs-prevbutton';\n }\n\n if (this._options.hideNext === true) {\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n nextTooltipButton.className = this._options.buttonClass + ' introjs-nextbutton introjs-hidden';\n }\n if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n _addClass(prevTooltipButton, 'introjs-fullbutton');\n }\n } else {\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n nextTooltipButton.className = this._options.buttonClass + ' introjs-nextbutton introjs-disabled';\n }\n }\n } else {\n // steps between start and end\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n skipTooltipButton.className = this._options.buttonClass + ' introjs-skipbutton';\n }\n if (typeof prevTooltipButton !== \"undefined\" && prevTooltipButton !== null) {\n prevTooltipButton.className = this._options.buttonClass + ' introjs-prevbutton';\n }\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n nextTooltipButton.className = this._options.buttonClass + ' introjs-nextbutton';\n }\n if (typeof skipTooltipButton !== \"undefined\" && skipTooltipButton !== null) {\n skipTooltipButton.innerHTML = this._options.skipLabel;\n }\n }\n\n prevTooltipButton.setAttribute('role', 'button');\n nextTooltipButton.setAttribute('role', 'button');\n skipTooltipButton.setAttribute('role', 'button');\n\n //Set focus on \"next\" button, so that hitting Enter always moves you onto the next step\n if (typeof nextTooltipButton !== \"undefined\" && nextTooltipButton !== null) {\n nextTooltipButton.focus();\n }\n\n _setShowElement(targetElement);\n\n if (typeof (this._introAfterChangeCallback) !== 'undefined') {\n this._introAfterChangeCallback.call(this, targetElement.element);\n }\n }\n\n /**\n * To change the scroll of `window` after highlighting an element\n *\n * @api private\n * @method _scrollTo\n * @param {String} scrollTo\n * @param {Object} targetElement\n * @param {Object} tooltipLayer\n */\n function _scrollTo(scrollTo, targetElement, tooltipLayer) {\n if (scrollTo === 'off') return; \n var rect;\n\n if (!this._options.scrollToElement) return;\n\n if (scrollTo === 'tooltip') {\n rect = tooltipLayer.getBoundingClientRect();\n } else {\n rect = targetElement.element.getBoundingClientRect();\n }\n\n if (!_elementInViewport(targetElement.element)) {\n var winHeight = _getWinSize().height;\n var top = rect.bottom - (rect.bottom - rect.top);\n\n // TODO (afshinm): do we need scroll padding now?\n // I have changed the scroll option and now it scrolls the window to\n // the center of the target element or tooltip.\n\n if (top < 0 || targetElement.element.clientHeight > winHeight) {\n window.scrollBy(0, rect.top - ((winHeight / 2) - (rect.height / 2)) - this._options.scrollPadding); // 30px padding from edge to look nice\n\n //Scroll down\n } else {\n window.scrollBy(0, rect.top - ((winHeight / 2) - (rect.height / 2)) + this._options.scrollPadding); // 30px padding from edge to look nice\n }\n }\n }\n\n /**\n * To remove all show element(s)\n *\n * @api private\n * @method _removeShowElement\n */\n function _removeShowElement() {\n var elms = document.querySelectorAll('.introjs-showElement');\n\n _forEach(elms, function (elm) {\n _removeClass(elm, /introjs-[a-zA-Z]+/g);\n });\n }\n\n /**\n * To set the show element\n * This function set a relative (in most cases) position and changes the z-index\n *\n * @api private\n * @method _setShowElement\n * @param {Object} targetElement\n */\n function _setShowElement(targetElement) {\n var parentElm;\n // we need to add this show element class to the parent of SVG elements\n // because the SVG elements can't have independent z-index\n if (targetElement.element instanceof SVGElement) {\n parentElm = targetElement.element.parentNode;\n\n while (targetElement.element.parentNode !== null) {\n if (!parentElm.tagName || parentElm.tagName.toLowerCase() === 'body') break;\n\n if (parentElm.tagName.toLowerCase() === 'svg') {\n _addClass(parentElm, 'introjs-showElement introjs-relativePosition');\n }\n\n parentElm = parentElm.parentNode;\n }\n }\n\n _addClass(targetElement.element, 'introjs-showElement');\n\n var currentElementPosition = _getPropValue(targetElement.element, 'position');\n if (currentElementPosition !== 'absolute' &&\n currentElementPosition !== 'relative' &&\n currentElementPosition !== 'fixed') {\n //change to new intro item\n _addClass(targetElement.element, 'introjs-relativePosition');\n }\n\n parentElm = targetElement.element.parentNode;\n while (parentElm !== null) {\n if (!parentElm.tagName || parentElm.tagName.toLowerCase() === 'body') break;\n\n //fix The Stacking Context problem.\n //More detail: https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Understanding_z_index/The_stacking_context\n var zIndex = _getPropValue(parentElm, 'z-index');\n var opacity = parseFloat(_getPropValue(parentElm, 'opacity'));\n var transform = _getPropValue(parentElm, 'transform') || _getPropValue(parentElm, '-webkit-transform') || _getPropValue(parentElm, '-moz-transform') || _getPropValue(parentElm, '-ms-transform') || _getPropValue(parentElm, '-o-transform');\n if (/[0-9]+/.test(zIndex) || opacity < 1 || (transform !== 'none' && transform !== undefined)) {\n _addClass(parentElm, 'introjs-fixParent');\n }\n\n parentElm = parentElm.parentNode;\n }\n }\n\n /**\n * Iterates arrays\n *\n * @param {Array} arr\n * @param {Function} forEachFnc\n * @param {Function} completeFnc\n * @return {Null}\n */\n function _forEach(arr, forEachFnc, completeFnc) {\n // in case arr is an empty query selector node list\n if (arr) {\n for (var i = 0, len = arr.length; i < len; i++) {\n forEachFnc(arr[i], i);\n }\n }\n\n if (typeof(completeFnc) === 'function') {\n completeFnc();\n }\n }\n\n /**\n * Mark any object with an incrementing number\n * used for keeping track of objects\n *\n * @param Object obj Any object or DOM Element\n * @param String key\n * @return Object\n */\n var _stamp = (function () {\n var keys = {};\n return function stamp (obj, key) {\n \n // get group key\n key = key || 'introjs-stamp';\n\n // each group increments from 0\n keys[key] = keys[key] || 0;\n\n // stamp only once per object\n if (obj[key] === undefined) {\n // increment key for each new object\n obj[key] = keys[key]++;\n }\n\n return obj[key];\n };\n })();\n\n /**\n * DOMEvent Handles all DOM events\n *\n * methods:\n *\n * on - add event handler\n * off - remove event\n */\n var DOMEvent = (function () {\n function DOMEvent () {\n var events_key = 'introjs_event';\n \n /**\n * Gets a unique ID for an event listener\n *\n * @param Object obj\n * @param String type event type\n * @param Function listener\n * @param Object context\n * @return String\n */\n this._id = function (obj, type, listener, context) {\n return type + _stamp(listener) + (context ? '_' + _stamp(context) : '');\n };\n\n /**\n * Adds event listener\n *\n * @param Object obj\n * @param String type event type\n * @param Function listener\n * @param Object context\n * @param Boolean useCapture\n * @return null\n */\n this.on = function (obj, type, listener, context, useCapture) {\n var id = this._id.apply(this, arguments),\n handler = function (e) {\n return listener.call(context || obj, e || window.event);\n };\n\n if ('addEventListener' in obj) {\n obj.addEventListener(type, handler, useCapture);\n } else if ('attachEvent' in obj) {\n obj.attachEvent('on' + type, handler);\n }\n\n obj[events_key] = obj[events_key] || {};\n obj[events_key][id] = handler;\n };\n\n /**\n * Removes event listener\n *\n * @param Object obj\n * @param String type event type\n * @param Function listener\n * @param Object context\n * @param Boolean useCapture\n * @return null\n */\n this.off = function (obj, type, listener, context, useCapture) {\n var id = this._id.apply(this, arguments),\n handler = obj[events_key] && obj[events_key][id];\n\n if (!handler) {\n return;\n }\n\n if ('removeEventListener' in obj) {\n obj.removeEventListener(type, handler, useCapture);\n } else if ('detachEvent' in obj) {\n obj.detachEvent('on' + type, handler);\n }\n\n obj[events_key][id] = null;\n };\n }\n\n return new DOMEvent();\n })();\n\n /**\n * Append a class to an element\n *\n * @api private\n * @method _addClass\n * @param {Object} element\n * @param {String} className\n * @returns null\n */\n function _addClass(element, className) {\n if (element instanceof SVGElement) {\n // svg\n var pre = element.getAttribute('class') || '';\n\n element.setAttribute('class', pre + ' ' + className);\n } else {\n if (element.classList !== undefined) {\n // check for modern classList property\n var classes = className.split(' ');\n _forEach(classes, function (cls) {\n element.classList.add( cls );\n });\n } else if (!element.className.match( className )) {\n // check if element doesn't already have className\n element.className += ' ' + className;\n }\n }\n }\n\n /**\n * Remove a class from an element\n *\n * @api private\n * @method _removeClass\n * @param {Object} element\n * @param {RegExp|String} classNameRegex can be regex or string\n * @returns null\n */\n function _removeClass(element, classNameRegex) {\n if (element instanceof SVGElement) {\n var pre = element.getAttribute('class') || '';\n\n element.setAttribute('class', pre.replace(classNameRegex, '').replace(/^\\s+|\\s+$/g, ''));\n } else {\n element.className = element.className.replace(classNameRegex, '').replace(/^\\s+|\\s+$/g, '');\n }\n }\n\n /**\n * Get an element CSS property on the page\n * Thanks to JavaScript Kit: http://www.javascriptkit.com/dhtmltutors/dhtmlcascade4.shtml\n *\n * @api private\n * @method _getPropValue\n * @param {Object} element\n * @param {String} propName\n * @returns Element's property value\n */\n function _getPropValue (element, propName) {\n var propValue = '';\n if (element.currentStyle) { //IE\n propValue = element.currentStyle[propName];\n } else if (document.defaultView && document.defaultView.getComputedStyle) { //Others\n propValue = document.defaultView.getComputedStyle(element, null).getPropertyValue(propName);\n }\n\n //Prevent exception in IE\n if (propValue && propValue.toLowerCase) {\n return propValue.toLowerCase();\n } else {\n return propValue;\n }\n }\n\n /**\n * Checks to see if target element (or parents) position is fixed or not\n *\n * @api private\n * @method _isFixed\n * @param {Object} element\n * @returns Boolean\n */\n function _isFixed (element) {\n var p = element.parentNode;\n\n if (!p || p.nodeName === 'HTML') {\n return false;\n }\n\n if (_getPropValue(element, 'position') === 'fixed') {\n return true;\n }\n\n return _isFixed(p);\n }\n\n /**\n * Provides a cross-browser way to get the screen dimensions\n * via: http://stackoverflow.com/questions/5864467/internet-explorer-innerheight\n *\n * @api private\n * @method _getWinSize\n * @returns {Object} width and height attributes\n */\n function _getWinSize() {\n if (window.innerWidth !== undefined) {\n return { width: window.innerWidth, height: window.innerHeight };\n } else {\n var D = document.documentElement;\n return { width: D.clientWidth, height: D.clientHeight };\n }\n }\n\n /**\n * Check to see if the element is in the viewport or not\n * http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport\n *\n * @api private\n * @method _elementInViewport\n * @param {Object} el\n */\n function _elementInViewport(el) {\n var rect = el.getBoundingClientRect();\n\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n (rect.bottom+80) <= window.innerHeight && // add 80 to get the text right\n rect.right <= window.innerWidth\n );\n }\n\n /**\n * Add overlay layer to the page\n *\n * @api private\n * @method _addOverlayLayer\n * @param {Object} targetElm\n */\n function _addOverlayLayer(targetElm) {\n var overlayLayer = document.createElement('div'),\n styleText = '',\n self = this;\n\n //set css class name\n overlayLayer.className = 'introjs-overlay';\n\n //check if the target element is body, we should calculate the size of overlay layer in a better way\n if (!targetElm.tagName || targetElm.tagName.toLowerCase() === 'body') {\n styleText += 'top: 0;bottom: 0; left: 0;right: 0;position: fixed;';\n overlayLayer.style.cssText = styleText;\n } else {\n //set overlay layer position\n var elementPosition = _getOffset(targetElm);\n if (elementPosition) {\n styleText += 'width: ' + elementPosition.width + 'px; height:' + elementPosition.height + 'px; top:' + elementPosition.top + 'px;left: ' + elementPosition.left + 'px;';\n overlayLayer.style.cssText = styleText;\n }\n }\n\n targetElm.appendChild(overlayLayer);\n\n overlayLayer.onclick = function() {\n if (self._options.exitOnOverlayClick === true) {\n _exitIntro.call(self, targetElm);\n }\n };\n\n window.setTimeout(function() {\n styleText += 'opacity: ' + self._options.overlayOpacity.toString() + ';';\n overlayLayer.style.cssText = styleText;\n }, 10);\n\n return true;\n }\n\n /**\n * Removes open hint (tooltip hint)\n *\n * @api private\n * @method _removeHintTooltip\n */\n function _removeHintTooltip() {\n var tooltip = document.querySelector('.introjs-hintReference');\n\n if (tooltip) {\n var step = tooltip.getAttribute('data-step');\n tooltip.parentNode.removeChild(tooltip);\n return step;\n }\n }\n\n /**\n * Start parsing hint items\n *\n * @api private\n * @param {Object} targetElm\n * @method _startHint\n */\n function _populateHints(targetElm) {\n\n this._introItems = [];\n\n if (this._options.hints) {\n _forEach(this._options.hints, function (hint) {\n var currentItem = _cloneObject(hint);\n\n if (typeof(currentItem.element) === 'string') {\n //grab the element with given selector from the page\n currentItem.element = document.querySelector(currentItem.element);\n }\n\n currentItem.hintPosition = currentItem.hintPosition || this._options.hintPosition;\n currentItem.hintAnimation = currentItem.hintAnimation || this._options.hintAnimation;\n\n if (currentItem.element !== null) {\n this._introItems.push(currentItem);\n }\n }.bind(this));\n } else {\n var hints = targetElm.querySelectorAll('*[data-hint]');\n\n if (!hints || !hints.length) {\n return false;\n }\n\n //first add intro items with data-step\n _forEach(hints, function (currentElement) {\n // hint animation\n var hintAnimation = currentElement.getAttribute('data-hintanimation');\n\n if (hintAnimation) {\n hintAnimation = (hintAnimation === 'true');\n } else {\n hintAnimation = this._options.hintAnimation;\n }\n\n this._introItems.push({\n element: currentElement,\n hint: currentElement.getAttribute('data-hint'),\n hintPosition: currentElement.getAttribute('data-hintposition') || this._options.hintPosition,\n hintAnimation: hintAnimation,\n tooltipClass: currentElement.getAttribute('data-tooltipclass'),\n position: currentElement.getAttribute('data-position') || this._options.tooltipPosition\n });\n }.bind(this));\n }\n\n _addHints.call(this);\n\n /* \n todo:\n these events should be removed at some point \n */\n DOMEvent.on(document, 'click', _removeHintTooltip, this, false);\n DOMEvent.on(window, 'resize', _reAlignHints, this, true);\n }\n\n /**\n * Re-aligns all hint elements\n *\n * @api private\n * @method _reAlignHints\n */\n function _reAlignHints() {\n _forEach(this._introItems, function (item) {\n if (typeof(item.targetElement) === 'undefined') {\n return;\n }\n\n _alignHintPosition.call(this, item.hintPosition, item.element, item.targetElement);\n }.bind(this));\n }\n\n /**\n * Get a queryselector within the hint wrapper\n *\n * @param {String} selector\n * @return {NodeList|Array}\n */\n function _hintQuerySelectorAll(selector) {\n var hintsWrapper = document.querySelector('.introjs-hints');\n return (hintsWrapper) ? hintsWrapper.querySelectorAll(selector) : [];\n }\n\n /**\n * Hide a hint\n *\n * @api private\n * @method _hideHint\n */\n function _hideHint(stepId) {\n var hint = _hintQuerySelectorAll('.introjs-hint[data-step=\"' + stepId + '\"]')[0];\n \n _removeHintTooltip.call(this);\n\n if (hint) {\n _addClass(hint, 'introjs-hidehint');\n }\n\n // call the callback function (if any)\n if (typeof (this._hintCloseCallback) !== 'undefined') {\n this._hintCloseCallback.call(this, stepId);\n }\n }\n\n /**\n * Hide all hints\n *\n * @api private\n * @method _hideHints\n */\n function _hideHints() {\n var hints = _hintQuerySelectorAll('.introjs-hint');\n\n _forEach(hints, function (hint) {\n _hideHint.call(this, hint.getAttribute('data-step'));\n }.bind(this));\n }\n\n /**\n * Show all hints\n *\n * @api private\n * @method _showHints\n */\n function _showHints() {\n var hints = _hintQuerySelectorAll('.introjs-hint');\n\n if (hints && hints.length) {\n _forEach(hints, function (hint) {\n _showHint.call(this, hint.getAttribute('data-step'));\n }.bind(this));\n } else {\n _populateHints.call(this, this._targetElement);\n }\n }\n\n /**\n * Show a hint\n *\n * @api private\n * @method _showHint\n */\n function _showHint(stepId) {\n var hint = _hintQuerySelectorAll('.introjs-hint[data-step=\"' + stepId + '\"]')[0];\n\n if (hint) {\n _removeClass(hint, /introjs-hidehint/g);\n }\n }\n\n /**\n * Removes all hint elements on the page\n * Useful when you want to destroy the elements and add them again (e.g. a modal or popup)\n *\n * @api private\n * @method _removeHints\n */\n function _removeHints() {\n var hints = _hintQuerySelectorAll('.introjs-hint');\n\n _forEach(hints, function (hint) {\n _removeHint.call(this, hint.getAttribute('data-step'));\n }.bind(this));\n }\n\n /**\n * Remove one single hint element from the page\n * Useful when you want to destroy the element and add them again (e.g. a modal or popup)\n * Use removeHints if you want to remove all elements.\n *\n * @api private\n * @method _removeHint\n */\n function _removeHint(stepId) {\n var hint = _hintQuerySelectorAll('.introjs-hint[data-step=\"' + stepId + '\"]')[0];\n\n if (hint) {\n hint.parentNode.removeChild(hint);\n }\n }\n\n /**\n * Add all available hints to the page\n *\n * @api private\n * @method _addHints\n */\n function _addHints() {\n var self = this;\n\n var hintsWrapper = document.querySelector('.introjs-hints');\n\n if (hintsWrapper === null) {\n hintsWrapper = document.createElement('div');\n hintsWrapper.className = 'introjs-hints';\n }\n\n /**\n * Returns an event handler unique to the hint iteration\n * \n * @param {Integer} i\n * @return {Function}\n */\n var getHintClick = function (i) {\n return function(e) {\n var evt = e ? e : window.event;\n \n if (evt.stopPropagation) {\n evt.stopPropagation();\n }\n\n if (evt.cancelBubble !== null) {\n evt.cancelBubble = true;\n }\n\n _showHintDialog.call(self, i);\n };\n };\n\n _forEach(this._introItems, function(item, i) {\n // avoid append a hint twice\n if (document.querySelector('.introjs-hint[data-step=\"' + i + '\"]')) {\n return;\n }\n\n var hint = document.createElement('a');\n _setAnchorAsButton(hint);\n\n hint.onclick = getHintClick(i);\n\n hint.className = 'introjs-hint';\n\n if (!item.hintAnimation) {\n _addClass(hint, 'introjs-hint-no-anim');\n }\n\n // hint's position should be fixed if the target element's position is fixed\n if (_isFixed(item.element)) {\n _addClass(hint, 'introjs-fixedhint');\n }\n\n var hintDot = document.createElement('div');\n hintDot.className = 'introjs-hint-dot';\n var hintPulse = document.createElement('div');\n hintPulse.className = 'introjs-hint-pulse';\n\n hint.appendChild(hintDot);\n hint.appendChild(hintPulse);\n hint.setAttribute('data-step', i);\n\n // we swap the hint element with target element\n // because _setHelperLayerPosition uses `element` property\n item.targetElement = item.element;\n item.element = hint;\n\n // align the hint position\n _alignHintPosition.call(this, item.hintPosition, hint, item.targetElement);\n\n hintsWrapper.appendChild(hint);\n }.bind(this));\n\n // adding the hints wrapper\n document.body.appendChild(hintsWrapper);\n\n // call the callback function (if any)\n if (typeof (this._hintsAddedCallback) !== 'undefined') {\n this._hintsAddedCallback.call(this);\n }\n }\n\n /**\n * Aligns hint position\n *\n * @api private\n * @method _alignHintPosition\n * @param {String} position\n * @param {Object} hint\n * @param {Object} element\n */\n function _alignHintPosition(position, hint, element) {\n // get/calculate offset of target element\n var offset = _getOffset.call(this, element);\n var iconWidth = 20;\n var iconHeight = 20;\n\n // align the hint element\n switch (position) {\n default:\n case 'top-left':\n hint.style.left = offset.left + 'px';\n hint.style.top = offset.top + 'px';\n break;\n case 'top-right':\n hint.style.left = (offset.left + offset.width - iconWidth) + 'px';\n hint.style.top = offset.top + 'px';\n break;\n case 'bottom-left':\n hint.style.left = offset.left + 'px';\n hint.style.top = (offset.top + offset.height - iconHeight) + 'px';\n break;\n case 'bottom-right':\n hint.style.left = (offset.left + offset.width - iconWidth) + 'px';\n hint.style.top = (offset.top + offset.height - iconHeight) + 'px';\n break;\n case 'middle-left':\n hint.style.left = offset.left + 'px';\n hint.style.top = (offset.top + (offset.height - iconHeight) / 2) + 'px';\n break;\n case 'middle-right':\n hint.style.left = (offset.left + offset.width - iconWidth) + 'px';\n hint.style.top = (offset.top + (offset.height - iconHeight) / 2) + 'px';\n break;\n case 'middle-middle':\n hint.style.left = (offset.left + (offset.width - iconWidth) / 2) + 'px';\n hint.style.top = (offset.top + (offset.height - iconHeight) / 2) + 'px';\n break;\n case 'bottom-middle':\n hint.style.left = (offset.left + (offset.width - iconWidth) / 2) + 'px';\n hint.style.top = (offset.top + offset.height - iconHeight) + 'px';\n break;\n case 'top-middle':\n hint.style.left = (offset.left + (offset.width - iconWidth) / 2) + 'px';\n hint.style.top = offset.top + 'px';\n break;\n }\n }\n\n /**\n * Triggers when user clicks on the hint element\n *\n * @api private\n * @method _showHintDialog\n * @param {Number} stepId\n */\n function _showHintDialog(stepId) {\n var hintElement = document.querySelector('.introjs-hint[data-step=\"' + stepId + '\"]');\n var item = this._introItems[stepId];\n\n // call the callback function (if any)\n if (typeof (this._hintClickCallback) !== 'undefined') {\n this._hintClickCallback.call(this, hintElement, item, stepId);\n }\n\n // remove all open tooltips\n var removedStep = _removeHintTooltip.call(this);\n\n // to toggle the tooltip\n if (parseInt(removedStep, 10) === stepId) {\n return;\n }\n\n var tooltipLayer = document.createElement('div');\n var tooltipTextLayer = document.createElement('div');\n var arrowLayer = document.createElement('div');\n var referenceLayer = document.createElement('div');\n\n tooltipLayer.className = 'introjs-tooltip';\n\n tooltipLayer.onclick = function (e) {\n //IE9 & Other Browsers\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n //IE8 and Lower\n else {\n e.cancelBubble = true;\n }\n };\n\n tooltipTextLayer.className = 'introjs-tooltiptext';\n\n var tooltipWrapper = document.createElement('p');\n tooltipWrapper.innerHTML = item.hint;\n\n var closeButton = document.createElement('a');\n closeButton.className = this._options.buttonClass;\n closeButton.setAttribute('role', 'button');\n closeButton.innerHTML = this._options.hintButtonLabel;\n closeButton.onclick = _hideHint.bind(this, stepId);\n\n tooltipTextLayer.appendChild(tooltipWrapper);\n tooltipTextLayer.appendChild(closeButton);\n\n arrowLayer.className = 'introjs-arrow';\n tooltipLayer.appendChild(arrowLayer);\n\n tooltipLayer.appendChild(tooltipTextLayer);\n\n // set current step for _placeTooltip function\n this._currentStep = hintElement.getAttribute('data-step');\n\n // align reference layer position\n referenceLayer.className = 'introjs-tooltipReferenceLayer introjs-hintReference';\n referenceLayer.setAttribute('data-step', hintElement.getAttribute('data-step'));\n _setHelperLayerPosition.call(this, referenceLayer);\n\n referenceLayer.appendChild(tooltipLayer);\n document.body.appendChild(referenceLayer);\n\n //set proper position\n _placeTooltip.call(this, hintElement, tooltipLayer, arrowLayer, null, true);\n }\n\n /**\n * Get an element position on the page\n * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966\n *\n * @api private\n * @method _getOffset\n * @param {Object} element\n * @returns Element's position info\n */\n function _getOffset(element) {\n var body = document.body;\n var docEl = document.documentElement;\n var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\n var scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\n var x = element.getBoundingClientRect();\n return {\n top: x.top + scrollTop,\n width: x.width,\n height: x.height,\n left: x.left + scrollLeft\n };\n }\n\n /**\n * Find the nearest scrollable parent\n * copied from https://stackoverflow.com/questions/35939886/find-first-scrollable-parent\n *\n * @param Element element\n * @return Element\n */\n function _getScrollParent(element) {\n var style = window.getComputedStyle(element);\n var excludeStaticParent = (style.position === \"absolute\");\n var overflowRegex = /(auto|scroll)/;\n\n if (style.position === \"fixed\") return document.body;\n \n for (var parent = element; (parent = parent.parentElement);) {\n style = window.getComputedStyle(parent);\n if (excludeStaticParent && style.position === \"static\") {\n continue;\n }\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) return parent;\n }\n\n return document.body;\n }\n\n /**\n * scroll a scrollable element to a child element\n *\n * @param Element parent\n * @param Element element\n * @return Null\n */\n function _scrollParentToElement (parent, element) {\n parent.scrollTop = element.offsetTop - parent.offsetTop;\n }\n\n /**\n * Gets the current progress percentage\n *\n * @api private\n * @method _getProgress\n * @returns current progress percentage\n */\n function _getProgress() {\n // Steps are 0 indexed\n var currentStep = parseInt((this._currentStep + 1), 10);\n return ((currentStep / this._introItems.length) * 100);\n }\n\n /**\n * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1\n * via: http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically\n *\n * @param obj1\n * @param obj2\n * @returns obj3 a new object based on obj1 and obj2\n */\n function _mergeOptions(obj1,obj2) {\n var obj3 = {},\n attrname;\n for (attrname in obj1) { obj3[attrname] = obj1[attrname]; }\n for (attrname in obj2) { obj3[attrname] = obj2[attrname]; }\n return obj3;\n }\n\n var introJs = function (targetElm) {\n var instance;\n\n if (typeof (targetElm) === 'object') {\n //Ok, create a new instance\n instance = new IntroJs(targetElm);\n\n } else if (typeof (targetElm) === 'string') {\n //select the target element with query selector\n var targetElement = document.querySelector(targetElm);\n\n if (targetElement) {\n instance = new IntroJs(targetElement);\n } else {\n throw new Error('There is no element with given selector.');\n }\n } else {\n instance = new IntroJs(document.body);\n }\n // add instance to list of _instances\n // passing group to _stamp to increment\n // from 0 onward somewhat reliably\n introJs.instances[ _stamp(instance, 'introjs-instance') ] = instance;\n\n return instance;\n };\n\n /**\n * Current IntroJs version\n *\n * @property version\n * @type String\n */\n introJs.version = VERSION;\n\n /**\n * key-val object helper for introJs instances\n *\n * @property instances\n * @type Object\n */\n introJs.instances = {};\n\n //Prototype\n introJs.fn = IntroJs.prototype = {\n clone: function () {\n return new IntroJs(this);\n },\n setOption: function(option, value) {\n this._options[option] = value;\n return this;\n },\n setOptions: function(options) {\n this._options = _mergeOptions(this._options, options);\n return this;\n },\n start: function (group) {\n _introForElement.call(this, this._targetElement, group);\n return this;\n },\n goToStep: function(step) {\n _goToStep.call(this, step);\n return this;\n },\n addStep: function(options) {\n if (!this._options.steps) {\n this._options.steps = [];\n }\n\n this._options.steps.push(options);\n\n return this;\n },\n addSteps: function(steps) {\n if (!steps.length) return;\n\n for(var index = 0; index < steps.length; index++) {\n this.addStep(steps[index]);\n }\n\n return this;\n },\n goToStepNumber: function(step) {\n _goToStepNumber.call(this, step);\n\n return this;\n },\n nextStep: function() {\n _nextStep.call(this);\n return this;\n },\n previousStep: function() {\n _previousStep.call(this);\n return this;\n },\n exit: function(force) {\n _exitIntro.call(this, this._targetElement, force);\n return this;\n },\n refresh: function() {\n _refresh.call(this);\n return this;\n },\n onbeforechange: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introBeforeChangeCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onbeforechange was not a function');\n }\n return this;\n },\n onchange: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introChangeCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onchange was not a function.');\n }\n return this;\n },\n onafterchange: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introAfterChangeCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onafterchange was not a function');\n }\n return this;\n },\n oncomplete: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introCompleteCallback = providedCallback;\n } else {\n throw new Error('Provided callback for oncomplete was not a function.');\n }\n return this;\n },\n onhintsadded: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._hintsAddedCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onhintsadded was not a function.');\n }\n return this;\n },\n onhintclick: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._hintClickCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onhintclick was not a function.');\n }\n return this;\n },\n onhintclose: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._hintCloseCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onhintclose was not a function.');\n }\n return this;\n },\n onexit: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introExitCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onexit was not a function.');\n }\n return this;\n },\n onskip: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introSkipCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onskip was not a function.');\n }\n return this;\n },\n onbeforeexit: function(providedCallback) {\n if (typeof (providedCallback) === 'function') {\n this._introBeforeExitCallback = providedCallback;\n } else {\n throw new Error('Provided callback for onbeforeexit was not a function.');\n }\n return this;\n },\n addHints: function() {\n _populateHints.call(this, this._targetElement);\n return this;\n },\n hideHint: function (stepId) {\n _hideHint.call(this, stepId);\n return this;\n },\n hideHints: function () {\n _hideHints.call(this);\n return this;\n },\n showHint: function (stepId) {\n _showHint.call(this, stepId);\n return this;\n },\n showHints: function () {\n _showHints.call(this);\n return this;\n },\n removeHints: function () {\n _removeHints.call(this);\n return this;\n },\n removeHint: function (stepId) {\n _removeHint.call(this, stepId);\n return this;\n },\n showHintDialog: function (stepId) {\n _showHintDialog.call(this, stepId);\n return this;\n }\n };\n\n return introJs;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/intro.js/intro.js\n// module id = 1062\n// module chunks = 25","(function(){\nif( !('ace' in window) ) window['ace'] = {}\n\nace.config = {\n storage_method: 0, //0 means use localStorage if available otherwise cookies, 1 means localStorage, 2 means cookies\n cookie_expiry : 604800, //(cookie only) 1 week duration for saved settings\n cookie_path: ''//(cookie only)\n}\nif( !('vars' in window['ace']) ) window['ace'].vars = {}\nace.vars['very_old_ie']\t= !('querySelector' in document.documentElement);\n\nace.settings = {\n\tsaveState : function(element, attrName, attrVal, append) {\n\t\tif( !element || (typeof element == 'string' && !(element = document.getElementById(element))) || !element.hasAttribute('id') ) return false;\n\t\tif( !ace.hasClass(element, 'ace-save-state') ) return false;\n\t\t\n\t\tvar attrName = attrName || 'class';\n\t\tvar id = element.getAttribute('id');\n\t\t\n\t\tvar attrList = ace.data.get('state', 'id-'+id) || {};\n\t\tif(typeof attrList == 'string') {\n\t\t\ttry {\n\t\t\t\tattrList = JSON.parse(attrList);\n\t\t\t}\n\t\t\tcatch(e) {\n\t\t\t\tattrList = {}\n\t\t\t}\n\t\t}\n\n\t\tvar newVal, hasCustomVal = typeof attrVal !== 'undefined', $delete = false;\n\t\t\n\t\tvar re1 = /class/i\n\t\tvar re2 = /checked|disabled|readonly|value/i\n\n\t\tif(re2.test(attrName)) newVal = hasCustomVal ? attrVal : element[attrName];\n\t\telse {\n\t\t\tif(element.hasAttribute(attrName)) {\n\t\t\t\tnewVal = hasCustomVal ? attrVal : element.getAttribute(attrName);\n\t\t\t}\n\t\t\telse if(!hasCustomVal) $delete = true;\n\t\t\t//delete this, because element has no such attribute and we haven't given a custom value! (no attrVal)\n\t\t}\n\t\t\n\t\n\t\tif($delete) {\n\t\t\tdelete attrList[attrName];\n\t\t}\n\t\telse {\n\t\t\t//save class names as an object which indicated which classes should be included or excluded (true/false)\n\t\t\tif( re1.test(attrName) ) {//class\n\t\t\t\n\t\t\t\t\n\t\t\t\tif( !attrList.hasOwnProperty(attrName) ) attrList[attrName] = {}\n\t\t\t\tif(append === true) {\n\t\t\t\t\t//append to previous value\t\t\t\t\t\n\t\t\t\t\tattrList[attrName][newVal] = 1;\n\t\t\t\t}\n\t\t\t\telse if(append === false) {\n\t\t\t\t\t//remove from previous value\n\t\t\t\t\tattrList[attrName][newVal] = -1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tattrList[attrName]['className'] = newVal;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\telse {\n\t\t\t\tattrList[attrName] = newVal;\n\t\t\t}\n\t\t}\n\t\t\n\t\tace.data.set('state', 'id-'+id , JSON.stringify(attrList));\n\t},\n\t\n\tloadState : function(element, attrName) {\n\t\tif( !element || (typeof element == 'string' && !(element = document.getElementById(element))) || !element.hasAttribute('id') ) return false;\n\t\t\n\t\tvar id = element.getAttribute('id');\n\t\tvar attrList = ace.data.get('state', 'id-'+id) || {};\n\t\tif(typeof attrList == 'string') {\n\t\t\ttry {\n\t\t\t\tattrList = JSON.parse(attrList);\n\t\t\t}\n\t\t\tcatch(e) {\n\t\t\t\tattrList = {}\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar setAttr = function(element, attr, val) {\n\t\t\tvar re1 = /class/i\n\t\t\tvar re2 = /checked|disabled|readonly|value/i\n\t\t\t\n\t\t\tif(re1.test(attr)) {\n\t\t\t\tif(typeof val === 'object') {\n\t\t\t\t\tif('className' in val) element.setAttribute('class', val['className']);\n\t\t\t\t\tfor(var key in val) if(val.hasOwnProperty(key)) {\n\t\t\t\t\t\tvar append = val[key];\n\t\t\t\t\t\tif(append == 1) ace.addClass(element, key);\n\t\t\t\t\t\telse if(append == -1) ace.removeClass(element, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//else if(typeof ace.addClass(element, val);\n\t\t\t}\n\t\t\telse if(re2.test(attr)) element[attr] = val;\n\t\t\telse element.setAttribute(attr, val);\n\t\t}\n\t\t\n\t\tif(attrName !== undefined) {\n\t\t\tif(attrList.hasOwnProperty(attrName) && attrList[attrName] !== null) setAttr(element, attrName, attrList[attrName]);\n\t\t}\n\t\telse {\n\t\t\tfor(var name in attrList) {\n\t\t\t\tif(attrList.hasOwnProperty(name) && attrList[name] !== null) setAttr(element, name, attrList[name]);\n\t\t\t}\n\t\t}\n\t},\n\t\n\tclearState : function(element) {\n\t\tvar id = null;\n\t\tif(typeof element === 'string') {\n\t\t\tid = element;\n\t\t}\n\t\telse if('hasAttribute' in element && element.hasAttribute('id')) {\n\t\t\tid = element.getAttribute('id');\n\t\t}\n\t\tif(id) ace.data.remove('state', 'id-'+id);\n\t}\n};\n\n\n\n\n(function() {\n\t//detect if it is supported\n\t//https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Animations/Detecting_CSS_animation_support\n\tvar animationSupport = function() {\n\t\tvar animation = false,\n\t\tanimationstring = 'animation',\n\t\tkeyframeprefix = '',\n\t\tdomPrefixes = 'Webkit Moz O ms Khtml'.split(' '),\n\t\tpfx = '',\n\t\telm = document.createElement('div');\n\n\t\tif( elm.style.animationName !== undefined ) { animation = true; } \n\n\t\tif( animation === false ) {\n\t\t for( var i = 0; i < domPrefixes.length; i++ ) {\n\t\t\tif( elm.style[ domPrefixes[i] + 'AnimationName' ] !== undefined ) {\n\t\t\t pfx = domPrefixes[ i ];\n\t\t\t animationstring = pfx + 'Animation';\n\t\t\t keyframeprefix = '-' + pfx.toLowerCase() + '-';\n\t\t\t animation = true;\n\t\t\t break;\n\t\t\t}\n\t\t }\n\t\t}\n\t\t\n\t\treturn animation;\n\t}\n\t\n\tace.vars['animation'] = animationSupport();\n\tif( ace.vars['animation'] ) {\n\t\t//based on http://www.backalleycoder.com/2012/04/25/i-want-a-damnodeinserted/\n\n\t\tvar animationCSS = \"@keyframes nodeInserted{from{outline-color:#fff}to{outline-color:#000}}@-moz-keyframes nodeInserted{from{outline-color:#fff}to{outline-color:#000}}@-webkit-keyframes nodeInserted{from{outline-color:#fff}to{outline-color:#000}}@-ms-keyframes nodeInserted{from{outline-color:#fff}to{outline-color:#000}}@-o-keyframes nodeInserted{from{outline-color:#fff}to{outline-color:#000}}.ace-save-state{animation-duration:10ms;-o-animation-duration:10ms;-ms-animation-duration:10ms;-moz-animation-duration:10ms;-webkit-animation-duration:10ms;animation-delay:0s;-o-animation-delay:0s;-ms-animation-delay:0s;-moz-animation-delay:0s;-webkit-animation-delay:0s;animation-name:nodeInserted;-o-animation-name:nodeInserted;-ms-animation-name:nodeInserted;-moz-animation-name:nodeInserted;-webkit-animation-name:nodeInserted}\";\n\t\tvar animationNode = document.createElement('style');\n\t\tanimationNode.innerHTML = animationCSS;\n\t\tdocument.head.appendChild(animationNode);\n\t\n\t\tvar domInsertEvent = function(event) {\n\t\t\tvar element = event.target;\n\t\t\tif( !element || !ace.hasClass(element, 'ace-save-state') ) return;\n\t\t\t\n\t\t\tace.settings.loadState(element);\n\t\t}\n\n\t\tdocument.addEventListener('animationstart', domInsertEvent, false);\n\t\tdocument.addEventListener('MSAnimationStart', domInsertEvent, false);\n\t\tdocument.addEventListener('webkitAnimationStart', domInsertEvent, false);\n\t}\n\telse {\n\t\t//if animation events are not supported, wait for document ready event\n\t\tvar documentReady = function() {\n\t\t\tvar list = document.querySelectorAll('.ace-save-state');\n\t\t\tfor(var i = 0 ; i < list.length ; i++) ace.settings.loadState(list[i]);\n\t\t}\n\t\t\n\t\tif(document.readyState == 'complete') documentReady();\n\t\telse if(document.addEventListener) document.addEventListener('DOMContentLoaded', documentReady, false);\n\t\telse if(document.attachEvent) document.attachEvent('onreadystatechange', function(){\n\t\t\tif (document.readyState == 'complete') documentReady();\n\t\t});\n\t}\n})();\n\n\n\n\n\n\n//save/retrieve data using localStorage or cookie\n//method == 1, use localStorage\n//method == 2, use cookies\n//method not specified, use localStorage if available, otherwise cookies\nace.data_storage = function(method, undefined) {\n\tvar prefix = 'ace_';\n\n\tvar storage = null;\n\tvar type = 0;\n\t\n\tif((method == 1 || method === undefined || method == 0) && 'localStorage' in window && window['localStorage'] !== null) {\n\t\tstorage = ace.storage;\n\t\ttype = 1;\n\t}\n\telse if(storage == null && (method == 2 || method === undefined) && 'cookie' in document && document['cookie'] !== null) {\n\t\tstorage = ace.cookie;\n\t\ttype = 2;\n\t}\n\t\n\n\tthis.set = function(namespace, key, value, path, is_obj, undefined) {\n\t\tif(!storage) return;\n\t\t\n\t\tif(value === undefined) {//no namespace here?\n\t\t\tvalue = key;\n\t\t\tkey = namespace;\n\n\t\t\tif(value == null) storage.remove(prefix+key)\n\t\t\telse {\n\t\t\t\tif(type == 1)\n\t\t\t\t\tstorage.set(prefix+key, value)\n\t\t\t\telse if(type == 2)\n\t\t\t\t\tstorage.set(prefix+key, value, ace.config.cookie_expiry, path || ace.config.cookie_path)\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif(type == 1) {//localStorage\n\t\t\t\tif(value == null) storage.remove(prefix+namespace+'_'+key)\n\t\t\t\telse {\n\t\t\t\t\tif(is_obj && typeof value == 'object') {\n\t\t\t\t\t\tvalue = JSON.stringify(value);\n\t\t\t\t\t}\n\t\t\t\t\tstorage.set(prefix+namespace+'_'+key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(type == 2) {//cookie\n\t\t\t\tvar val = storage.get(prefix+namespace);\n\t\t\t\tvar tmp = val ? JSON.parse(val) : {};\n\n\t\t\t\tif(value == null) {\n\t\t\t\t\tdelete tmp[key];//remove\n\t\t\t\t\tif(ace.sizeof(tmp) == 0) {//no other elements in this cookie, so delete it\n\t\t\t\t\t\tstorage.remove(prefix+namespace);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\telse {\n\t\t\t\t\ttmp[key] = value;\n\t\t\t\t}\n\n\t\t\t\tstorage.set(prefix+namespace , JSON.stringify(tmp), ace.config.cookie_expiry, path || ace.config.cookie_path)\n\t\t\t}\n\t\t}\n\t}\n\n\tthis.get = function(namespace, key, is_obj, undefined) {\n\t\tif(!storage) return null;\n\t\t\n\t\tif(key === undefined) {//no namespace here?\n\t\t\tkey = namespace;\n\t\t\treturn storage.get(prefix+key);\n\t\t}\n\t\telse {\n\t\t\tif(type == 1) {//localStorage\n\t\t\t\tvar value = storage.get(prefix+namespace+'_'+key);\n\t\t\t\tif(is_obj && value) {\n\t\t\t\t\ttry { value = JSON.parse(value) } catch(e) {}\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\telse if(type == 2) {//cookie\n\t\t\t\tvar val = storage.get(prefix+namespace);\n\t\t\t\tvar tmp = val ? JSON.parse(val) : {};\n\t\t\t\treturn key in tmp ? tmp[key] : null;\n\t\t\t}\n\t\t}\n\t}\n\n\t\n\tthis.remove = function(namespace, key, undefined) {\n\t\tif(!storage) return;\n\t\t\n\t\tif(key === undefined) {\n\t\t\tkey = namespace\n\t\t\tthis.set(key, null);\n\t\t}\n\t\telse {\n\t\t\tthis.set(namespace, key, null);\n\t\t}\n\t}\n}\n\n\n\n\n\n//cookie storage\nace.cookie = {\n\t// The following settingFunction are from Cookie.js class in TinyMCE, Moxiecode, used under LGPL.\n\n\t/**\n\t * Get a cookie.\n\t */\n\tget : function(name) {\n\t\tvar cookie = document.cookie, e, p = name + \"=\", b;\n\n\t\tif ( !cookie )\n\t\t\treturn;\n\n\t\tb = cookie.indexOf(\"; \" + p);\n\n\t\tif ( b == -1 ) {\n\t\t\tb = cookie.indexOf(p);\n\n\t\t\tif ( b != 0 )\n\t\t\t\treturn null;\n\n\t\t} else {\n\t\t\tb += 2;\n\t\t}\n\n\t\te = cookie.indexOf(\";\", b);\n\n\t\tif ( e == -1 )\n\t\t\te = cookie.length;\n\n\t\treturn decodeURIComponent( cookie.substring(b + p.length, e) );\n\t},\n\n\t/**\n\t * Set a cookie.\n\t *\n\t * The 'expires' arg can be either a JS Date() object set to the expiration date (back-compat)\n\t * or the number of seconds until expiration\n\t */\n\tset : function(name, value, expires, path, domain, secure) {\n\t\tvar d = new Date();\n\n\t\tif ( typeof(expires) == 'object' && expires.toGMTString ) {\n\t\t\texpires = expires.toGMTString();\n\t\t} else if ( parseInt(expires, 10) ) {\n\t\t\td.setTime( d.getTime() + ( parseInt(expires, 10) * 1000 ) ); // time must be in miliseconds\n\t\t\texpires = d.toGMTString();\n\t\t} else {\n\t\t\texpires = '';\n\t\t}\n\n\t\tdocument.cookie = name + \"=\" + encodeURIComponent(value) +\n\t\t\t((expires) ? \"; expires=\" + expires : \"\") +\n\t\t\t((path) ? \"; path=\" + path : \"\") +\n\t\t\t((domain) ? \"; domain=\" + domain : \"\") +\n\t\t\t((secure) ? \"; secure\" : \"\");\n\t},\n\n\t/**\n\t * Remove a cookie.\n\t *\n\t * This is done by setting it to an empty value and setting the expiration time in the past.\n\t */\n\tremove : function(name, path) {\n\t\tthis.set(name, '', -1000, path);\n\t}\n};\n\n\n//local storage\nace.storage = {\n\tget: function(key) {\n\t\treturn window['localStorage'].getItem(key);\n\t},\n\tset: function(key, value) {\n\t\twindow['localStorage'].setItem(key , value);\n\t},\n\tremove: function(key) {\n\t\twindow['localStorage'].removeItem(key);\n\t}\n};\n\n\n\n\n\n\n//count the number of properties in an object\n//useful for getting the number of elements in an associative array\nace.sizeof = function(obj) {\n\tvar size = 0;\n\tfor(var key in obj) if(obj.hasOwnProperty(key)) size++;\n\treturn size;\n}\n\n//because jQuery may not be loaded at this stage, we use our own toggleClass\nace.hasClass = function(elem, className) {\treturn (\" \" + elem.className + \" \").indexOf(\" \" + className + \" \") > -1; }\n\nace.addClass = function(elem, className) {\n var parts = className.split(/\\s+/);\n for(var p = 0; p < parts.length; p++) {\n\tif ( parts[p].length > 0 && !ace.hasClass(elem, parts[p]) ) {\n\t\tvar currentClass = elem.className;\n\t\telem.className = currentClass + (currentClass.length ? \" \" : \"\") + parts[p];\n\t}\n }\n}\n\nace.removeClass = function(elem, className) {\n var parts = className.split(/\\s+/);\n for(var p = 0; p < parts.length; p++) {\n\tif( parts[p].length > 0 ) ace.replaceClass(elem, parts[p]);\n }\n ace.replaceClass(elem, className);\n}\n\nace.replaceClass = function(elem, className, newClass) {\n var classToRemove = new RegExp((\"(^|\\\\s)\" + className + \"(\\\\s|$)\"), \"i\");\n elem.className = elem.className.replace(classToRemove, function (match, p1, p2) {\n\treturn newClass ? (p1 + newClass + p2) : \" \";\n }).replace(/^\\s+|\\s+$/g, \"\");\n}\n\n\nace.toggleClass = function(elem, className) {\n\tif(ace.hasClass(elem, className))\n\t\tace.removeClass(elem, className);\n\telse ace.addClass(elem, className);\n}\n\nace.isHTMlElement = function(elem) {\n return window.HTMLElement ? elem instanceof HTMLElement : ('nodeType' in elem ? elem.nodeType == 1 : false);\n}\n\n\n //data_storage instance used inside ace.settings etc\n ace.data = new ace.data_storage(ace.config.storage_method);\n\n})();\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./source/javascripts/ace/ace-extra.js\n// module id = 1130\n// module chunks = 25"],"sourceRoot":""}