From 5a975046d845b0ee58d910defcccf6a8ad3db0e8 Mon Sep 17 00:00:00 2001 From: Alexey Kontsevoy Date: Fri, 26 Feb 2016 18:41:16 -0500 Subject: [PATCH] (web) adding event-streamer component --- lib/web/connect.go | 2 +- web/devServer.js | 14 +- web/dist/app/app.js | 759 ++++--- web/dist/app/styles.js | 26 +- web/dist/app/vendor.js | 1758 +++++++++-------- web/dist/index.html | 6 +- web/package.json | 2 +- web/src/app/components/eventStreamer.jsx | 27 + web/src/app/components/nodes/main.jsx | 4 +- web/src/app/components/terminalHost.jsx | 39 +- web/src/app/config.js | 17 +- .../app/modules/activeTerminal/actionTypes.js | 3 +- web/src/app/modules/activeTerminal/actions.js | 11 +- .../modules/activeTerminal/activeTermStore.js | 13 +- web/src/app/modules/activeTerminal/getters.js | 9 +- 15 files changed, 1505 insertions(+), 1185 deletions(-) create mode 100644 web/src/app/components/eventStreamer.jsx diff --git a/lib/web/connect.go b/lib/web/connect.go index 990b053fa85..b96bd152ccb 100644 --- a/lib/web/connect.go +++ b/lib/web/connect.go @@ -40,7 +40,7 @@ type connectReq struct { // Term sets PTY params like width and height Term connectTerm `json:"term"` // SessionID is a teleport session ID to join as - SessionID string `json:"session_id"` + SessionID string `json:"sid"` } type connectTerm struct { diff --git a/web/devServer.js b/web/devServer.js index fe9b44eb1b2..ce1d66d5a1a 100644 --- a/web/devServer.js +++ b/web/devServer.js @@ -16,9 +16,17 @@ var compiler = webpack(webpackConfig); var server = new WebpackDevServer(compiler, { proxy: { //"v1/webapi/users/invites": "http://x220:3080" - "/v1/webapi/*": "http://0.0.0.0:3080/", - "/portal/*": "http://localhost:33009", - "/sites/v1/*": "http://localhost:33009" + /*"/v1/socket/*" : { + target: 'ws://localhost:3080/v1/webapi/', + ws: true + },*/ + "/v1/webapi/*": { + target: "http://0.0.0.0:3080/" + }, + "/socket/*": { + target: "ws://0.0.0.0:3080/v1/", + ws: true + } ///"/sites/v1/*": "http://172.28.128.4:34444" }, publicPath: ROOT +'/app', diff --git a/web/dist/app/app.js b/web/dist/app/app.js index a907f811dea..64a350d0db7 100644 --- a/web/dist/app/app.js +++ b/web/dist/app/app.js @@ -2,7 +2,7 @@ webpackJsonp([1],[ /* 0 */ /***/ function(module, exports, __webpack_require__) { - module.exports = __webpack_require__(192); + module.exports = __webpack_require__(194); /***/ }, @@ -25,7 +25,7 @@ webpackJsonp([1],[ exports.__esModule = true; - var _nuclearJs = __webpack_require__(24); + var _nuclearJs = __webpack_require__(20); var reactor = new _nuclearJs.Reactor({ debug: true @@ -40,15 +40,14 @@ webpackJsonp([1],[ /* 14 */, /* 15 */, /* 16 */, -/* 17 */, -/* 18 */ +/* 17 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; exports.__esModule = true; - var _require = __webpack_require__(146); + var _require = __webpack_require__(147); var formatPattern = _require.formatPattern; @@ -65,11 +64,16 @@ webpackJsonp([1],[ return formatPattern(cfg.api.invitePath, { inviteToken: inviteToken }); }, - getTermConnString: function getTermConnString(token, params) { + getEventStreamerConnStr: function getEventStreamerConnStr(token, sid) { + var hostname = getWsHostName(); + return hostname + '/v1/webapi/sites/-current-/sessions/' + sid + '/events/stream?access_token=' + token; + }, + + getSessionConnStr: function getSessionConnStr(token, params) { var json = JSON.stringify(params); var jsonEncoded = window.encodeURI(json); - var prefix = location.protocol == "https:" ? "wss://" : "ws://"; - return '' + prefix + params.addr + '/v1/webapi/sites/-current-/connect?access_token=' + token + '¶ms=' + jsonEncoded; + var hostname = getWsHostName(); + return hostname + '/v1/webapi/sites/-current-/connect?access_token=' + token + '¶ms=' + jsonEncoded; } }, @@ -85,9 +89,16 @@ webpackJsonp([1],[ }; exports['default'] = cfg; + + function getWsHostName() { + var prefix = location.protocol == "https:" ? "wss://" : "ws://"; + var hostport = location.hostname + (location.port ? ':' + location.port : ''); + return '' + prefix + hostport; + } module.exports = exports['default']; /***/ }, +/* 18 */, /* 19 */, /* 20 */, /* 21 */, @@ -308,7 +319,7 @@ webpackJsonp([1],[ var api = __webpack_require__(52); var session = __webpack_require__(36); - var cfg = __webpack_require__(18); + var cfg = __webpack_require__(17); var $ = __webpack_require__(51); var refreshRate = 60000 * 100; // 1 min @@ -401,7 +412,9 @@ webpackJsonp([1],[ var _keymirror2 = _interopRequireDefault(_keymirror); exports['default'] = _keymirror2['default']({ - TLPT_RECEIVE_USER_INVITE: null + TLPT_TERM_CONNECT: null, + TLPT_TERM_CLOSE: null, + TLPT_TERM_CONNECTED: null }); module.exports = exports['default']; @@ -412,14 +425,124 @@ webpackJsonp([1],[ 'use strict'; exports.__esModule = true; + var reactor = __webpack_require__(13); - var _require = __webpack_require__(24); + var _require = __webpack_require__(159); + + var uuid = _require.uuid; + + var _require2 = __webpack_require__(83); + + var TLPT_TERM_CONNECT = _require2.TLPT_TERM_CONNECT; + var TLPT_TERM_CLOSE = _require2.TLPT_TERM_CLOSE; + var TLPT_TERM_CONNECTED = _require2.TLPT_TERM_CONNECTED; + exports['default'] = { + + close: function close() { + reactor.dispatch(TLPT_TERM_CLOSE); + }, + + connected: function connected() { + reactor.dispatch(TLPT_TERM_CONNECTED); + }, + + connect: function connect(addr, login) { + var sid = arguments.length <= 2 || arguments[2] === undefined ? uuid() : arguments[2]; + + /* + * { + * "addr": "127.0.0.1:5000", + * "login": "admin", + * "term": {"h": 120, "w": 100}, + * "sid": "123" + * } + */ + reactor.dispatch(TLPT_TERM_CONNECT, { addr: addr, login: login, sid: sid }); + } + }; + module.exports = exports['default']; + +/***/ }, +/* 85 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _require = __webpack_require__(20); var Store = _require.Store; var toImmutable = _require.toImmutable; var _require2 = __webpack_require__(83); + var TLPT_TERM_CONNECT = _require2.TLPT_TERM_CONNECT; + var TLPT_TERM_CLOSE = _require2.TLPT_TERM_CLOSE; + var TLPT_TERM_CONNECTED = _require2.TLPT_TERM_CONNECTED; + exports['default'] = Store({ + getInitialState: function getInitialState() { + return toImmutable(null); + }, + + initialize: function initialize() { + this.on(TLPT_TERM_CONNECTED, connected); + this.on(TLPT_TERM_CONNECT, connect); + this.on(TLPT_TERM_CLOSE, close); + } + + }); + + function close() { + return toImmutable(null); + } + + function connect(state, term) { + return toImmutable({ + isConnecting: true, + term: term + }); + } + + function connected(state) { + return state.set('isConnected', true).set('isConnecting', false); + } + module.exports = exports['default']; + +/***/ }, +/* 86 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _keymirror = __webpack_require__(31); + + var _keymirror2 = _interopRequireDefault(_keymirror); + + exports['default'] = _keymirror2['default']({ + TLPT_RECEIVE_USER_INVITE: null + }); + module.exports = exports['default']; + +/***/ }, +/* 87 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _require = __webpack_require__(20); + + var Store = _require.Store; + var toImmutable = _require.toImmutable; + + var _require2 = __webpack_require__(86); + var TLPT_RECEIVE_USER_INVITE = _require2.TLPT_RECEIVE_USER_INVITE; exports['default'] = Store({ getInitialState: function getInitialState() { @@ -437,7 +560,7 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 85 */ +/* 88 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -456,19 +579,19 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 86 */ +/* 89 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; exports.__esModule = true; - var _require = __webpack_require__(24); + var _require = __webpack_require__(20); var Store = _require.Store; var toImmutable = _require.toImmutable; - var _require2 = __webpack_require__(85); + var _require2 = __webpack_require__(88); var TLPT_RECEIVE_NODES = _require2.TLPT_RECEIVE_NODES; exports['default'] = Store({ @@ -487,7 +610,7 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 87 */ +/* 90 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -508,7 +631,7 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 88 */ +/* 91 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -527,58 +650,7 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 89 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _keymirror = __webpack_require__(31); - - var _keymirror2 = _interopRequireDefault(_keymirror); - - exports['default'] = _keymirror2['default']({ - TLPT_RECEIVE_TERM: null - }); - module.exports = exports['default']; - -/***/ }, -/* 90 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - var _require = __webpack_require__(24); - - var Store = _require.Store; - var toImmutable = _require.toImmutable; - - var _require2 = __webpack_require__(89); - - var TLPT_RECEIVE_TERM = _require2.TLPT_RECEIVE_TERM; - exports['default'] = Store({ - getInitialState: function getInitialState() { - return toImmutable(null); - }, - - initialize: function initialize() { - this.on(TLPT_RECEIVE_TERM, receiveTerm); - } - - }); - - function receiveTerm(state, term) { - return toImmutable(term); - } - module.exports = exports['default']; - -/***/ }, -/* 91 */ +/* 92 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -597,7 +669,7 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 92 */ +/* 93 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -605,18 +677,18 @@ webpackJsonp([1],[ exports.__esModule = true; var reactor = __webpack_require__(13); - var _require = __webpack_require__(91); + var _require = __webpack_require__(92); var TLPT_RECEIVE_USER = _require.TLPT_RECEIVE_USER; - var _require2 = __webpack_require__(88); + var _require2 = __webpack_require__(91); var TRYING_TO_SIGN_UP = _require2.TRYING_TO_SIGN_UP; - var restApiActions = __webpack_require__(154); + var restApiActions = __webpack_require__(157); var auth = __webpack_require__(82); var session = __webpack_require__(36); - var cfg = __webpack_require__(18); + var cfg = __webpack_require__(17); exports['default'] = { @@ -666,7 +738,7 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 93 */ +/* 94 */ /***/ function(module, exports) { 'use strict'; @@ -689,29 +761,29 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 94 */ +/* 95 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - module.exports.getters = __webpack_require__(93); - module.exports.actions = __webpack_require__(92); - module.exports.nodeStore = __webpack_require__(95); + module.exports.getters = __webpack_require__(94); + module.exports.actions = __webpack_require__(93); + module.exports.nodeStore = __webpack_require__(96); /***/ }, -/* 95 */ +/* 96 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; exports.__esModule = true; - var _require = __webpack_require__(24); + var _require = __webpack_require__(20); var Store = _require.Store; var toImmutable = _require.toImmutable; - var _require2 = __webpack_require__(91); + var _require2 = __webpack_require__(92); var TLPT_RECEIVE_USER = _require2.TLPT_RECEIVE_USER; exports['default'] = Store({ @@ -731,7 +803,6 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 96 */, /* 97 */, /* 98 */, /* 99 */, @@ -742,7 +813,8 @@ webpackJsonp([1],[ /* 104 */, /* 105 */, /* 106 */, -/* 107 */ +/* 107 */, +/* 108 */ /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -784,7 +856,6 @@ webpackJsonp([1],[ /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "googleAuth.jsx" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } /***/ }, -/* 108 */, /* 109 */, /* 110 */, /* 111 */, @@ -822,7 +893,8 @@ webpackJsonp([1],[ /* 143 */, /* 144 */, /* 145 */, -/* 146 */ +/* 146 */, +/* 147 */ /***/ function(module, exports, __webpack_require__) { /* @@ -1063,22 +1135,52 @@ webpackJsonp([1],[ } /***/ }, -/* 147 */ +/* 148 */ +/***/ function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + var activeSession = [['tlpt_active_terminal'], function (activeSession) { + if (!activeSession) { + return null; + } + + return activeSession.toJS(); + }]; + + exports['default'] = { + activeSession: activeSession + }; + module.exports = exports['default']; + +/***/ }, +/* 149 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + module.exports.getters = __webpack_require__(148); + module.exports.actions = __webpack_require__(84); + module.exports.activeTermStore = __webpack_require__(85); + +/***/ }, +/* 150 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var reactor = __webpack_require__(13); reactor.registerStores({ - 'tlpt_connection': __webpack_require__(90), - 'tlpt_user': __webpack_require__(95), - 'tlpt_nodes': __webpack_require__(86), - 'tlpt_invite': __webpack_require__(84), - 'tlpt_rest_api': __webpack_require__(155) + 'tlpt_active_terminal': __webpack_require__(85), + 'tlpt_user': __webpack_require__(96), + 'tlpt_nodes': __webpack_require__(89), + 'tlpt_invite': __webpack_require__(87), + 'tlpt_rest_api': __webpack_require__(158) }); /***/ }, -/* 148 */ +/* 151 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1086,12 +1188,12 @@ webpackJsonp([1],[ exports.__esModule = true; var reactor = __webpack_require__(13); - var _require = __webpack_require__(83); + var _require = __webpack_require__(86); var TLPT_RECEIVE_USER_INVITE = _require.TLPT_RECEIVE_USER_INVITE; var api = __webpack_require__(52); - var cfg = __webpack_require__(18); + var cfg = __webpack_require__(17); exports['default'] = { fetchInvite: function fetchInvite(inviteToken) { @@ -1104,7 +1206,7 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 149 */ +/* 152 */ /***/ function(module, exports, __webpack_require__) { /*eslint no-undef: 0, no-unused-vars: 0, no-debugger:0*/ @@ -1113,7 +1215,7 @@ webpackJsonp([1],[ exports.__esModule = true; - var _require = __webpack_require__(88); + var _require = __webpack_require__(91); var TRYING_TO_SIGN_UP = _require.TRYING_TO_SIGN_UP; @@ -1139,17 +1241,17 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 150 */ +/* 153 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - module.exports.getters = __webpack_require__(149); - module.exports.actions = __webpack_require__(148); - module.exports.nodeStore = __webpack_require__(84); + module.exports.getters = __webpack_require__(152); + module.exports.actions = __webpack_require__(151); + module.exports.nodeStore = __webpack_require__(87); /***/ }, -/* 151 */ +/* 154 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1157,12 +1259,12 @@ webpackJsonp([1],[ exports.__esModule = true; var reactor = __webpack_require__(13); - var _require = __webpack_require__(85); + var _require = __webpack_require__(88); var TLPT_RECEIVE_NODES = _require.TLPT_RECEIVE_NODES; var api = __webpack_require__(52); - var cfg = __webpack_require__(18); + var cfg = __webpack_require__(17); exports['default'] = { fetchNodes: function fetchNodes() { @@ -1174,19 +1276,25 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 152 */ -/***/ function(module, exports) { +/* 155 */ +/***/ function(module, exports, __webpack_require__) { //var sort = require('app/common/sort'); - 'use strict'; exports.__esModule = true; + + var _require = __webpack_require__(20); + + var toImmutable = _require.toImmutable; + var nodeListView = [['tlpt_nodes'], function (nodes) { return nodes.map(function (item) { + var sessions = item.get('sessions') || toImmutable([]); return { tags: getTags(item.get('node')), - ip: item.getIn(['node', 'addr']) + addr: item.getIn(['node', 'addr']), + sessionCount: sessions.size }; }).toJS(); }]; @@ -1225,14 +1333,14 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 153 */ +/* 156 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; - module.exports.getters = __webpack_require__(152); - module.exports.actions = __webpack_require__(151); - module.exports.nodeStore = __webpack_require__(86); + module.exports.getters = __webpack_require__(155); + module.exports.actions = __webpack_require__(154); + module.exports.nodeStore = __webpack_require__(89); // nodes: [{"id":"x220","addr":"0.0.0.0:3022","hostname":"x220","labels":null,"cmd_labels":null}] @@ -1247,7 +1355,7 @@ webpackJsonp([1],[ */ /***/ }, -/* 154 */ +/* 157 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; @@ -1255,7 +1363,7 @@ webpackJsonp([1],[ exports.__esModule = true; var reactor = __webpack_require__(13); - var _require = __webpack_require__(87); + var _require = __webpack_require__(90); var TLPT_REST_API_START = _require.TLPT_REST_API_START; var TLPT_REST_API_SUCCESS = _require.TLPT_REST_API_SUCCESS; @@ -1278,19 +1386,19 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 155 */ +/* 158 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; exports.__esModule = true; - var _require = __webpack_require__(24); + var _require = __webpack_require__(20); var Store = _require.Store; var toImmutable = _require.toImmutable; - var _require2 = __webpack_require__(87); + var _require2 = __webpack_require__(90); var TLPT_REST_API_START = _require2.TLPT_REST_API_START; var TLPT_REST_API_SUCCESS = _require2.TLPT_REST_API_SUCCESS; @@ -1321,69 +1429,42 @@ webpackJsonp([1],[ module.exports = exports['default']; /***/ }, -/* 156 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - var reactor = __webpack_require__(13); - - var _require = __webpack_require__(89); - - var TLPT_RECEIVE_TERM = _require.TLPT_RECEIVE_TERM; - exports['default'] = { - connect: function connect(addr, login) { - /* - * { - * "addr": "127.0.0.1:5000", - * "login": "admin", - * "term": {"h": 120, "w": 100}, - * "sid": "123" - * } - */ - reactor.dispatch(TLPT_RECEIVE_TERM, { addr: addr, login: login }); - } - }; - module.exports = exports['default']; - -/***/ }, -/* 157 */ +/* 159 */ /***/ function(module, exports) { 'use strict'; - exports.__esModule = true; - var connSettings = [['tlpt_connection'], function (settings) { - if (!settings) { - return null; + var utils = { + + uuid: function uuid() { + // never use it in production + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, + v = c == 'x' ? r : r & 0x3 | 0x8; + return v.toString(16); + }); + }, + + displayDate: function displayDate(date) { + try { + return date.toLocaleDateString() + ' ' + date.toLocaleTimeString(); + } catch (err) { + console.error(err); + return 'undefined'; + } + }, + + formatString: function formatString(format) { + var args = Array.prototype.slice.call(arguments, 1); + return format.replace(new RegExp('\\{(\\d+)\\}', 'g'), function (match, number) { + return !(args[number] === null || args[number] === undefined) ? args[number] : ''; + }); } - - var _settings$toJS = settings.toJS(); - - var addr = _settings$toJS.addr; - var login = _settings$toJS.login; - - return { addr: addr, login: login }; - }]; - - exports['default'] = { - connSettings: connSettings }; - module.exports = exports['default']; - -/***/ }, -/* 158 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - module.exports.getters = __webpack_require__(157); - module.exports.actions = __webpack_require__(156); - module.exports.nodeStore = __webpack_require__(90); + module.exports = utils; /***/ }, -/* 159 */, /* 160 */, /* 161 */, /* 162 */, @@ -1407,7 +1488,8 @@ webpackJsonp([1],[ /* 180 */, /* 181 */, /* 182 */, -/* 183 */ +/* 183 */, +/* 184 */ /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -1415,8 +1497,12 @@ webpackJsonp([1],[ 'use strict'; var React = __webpack_require__(5); - var NavLeftBar = __webpack_require__(186); - var cfg = __webpack_require__(18); + var NavLeftBar = __webpack_require__(188); + var cfg = __webpack_require__(17); + + var _require = __webpack_require__(193); + + var TerminalHost = _require.TerminalHost; var App = React.createClass({ displayName: 'App', @@ -1425,6 +1511,7 @@ webpackJsonp([1],[ return React.createElement( 'div', { className: 'grv-tlpt' }, + React.createElement(TerminalHost, null), React.createElement(NavLeftBar, null), React.createElement( 'div', @@ -1435,15 +1522,6 @@ webpackJsonp([1],[ React.createElement( 'ul', { className: 'nav navbar-top-links navbar-right' }, - React.createElement( - 'li', - null, - React.createElement( - 'span', - { className: 'm-r-sm text-muted welcome-message' }, - 'Welcome to Gravitational Portal' - ) - ), React.createElement( 'li', null, @@ -1471,23 +1549,68 @@ webpackJsonp([1],[ /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "app.jsx" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } /***/ }, -/* 184 */ +/* 185 */ /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { 'use strict'; - module.exports.App = __webpack_require__(183); - module.exports.Login = __webpack_require__(185); - module.exports.NewUser = __webpack_require__(187); - module.exports.Nodes = __webpack_require__(188); - module.exports.Sessions = __webpack_require__(189); + exports.__esModule = true; + var cfg = __webpack_require__(17); + var React = __webpack_require__(5); + + var EventStreamer = React.createClass({ + displayName: 'EventStreamer', + + componentDidMount: function componentDidMount() { + var _props = this.props; + var token = _props.token; + var sid = _props.sid; + + var connStr = cfg.api.getEventStreamerConnStr(token, sid); + + this.socket = new WebSocket(connStr, "proto"); + this.socket.onmessage = function () {}; + this.socket.onclose = function () {}; + }, + + componentWillUnmount: function componentWillUnmount() { + this.socket.close(); + }, + + shouldComponentUpdate: function shouldComponentUpdate() { + return false; + }, + + render: function render() { + return null; + } + }); + + exports['default'] = EventStreamer; + module.exports = exports['default']; + + /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "eventStreamer.jsx" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } + +/***/ }, +/* 186 */ +/***/ function(module, exports, __webpack_require__) { + + /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { + + 'use strict'; + + module.exports.App = __webpack_require__(184); + module.exports.Login = __webpack_require__(187); + module.exports.NewUser = __webpack_require__(189); + module.exports.Nodes = __webpack_require__(190); + module.exports.Sessions = __webpack_require__(191); /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "index.jsx" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } /***/ }, -/* 185 */ +/* 187 */ /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -1501,11 +1624,11 @@ webpackJsonp([1],[ var reactor = __webpack_require__(13); var LinkedStateMixin = __webpack_require__(57); - var _require = __webpack_require__(94); + var _require = __webpack_require__(95); var actions = _require.actions; - var GoogleAuthInfo = __webpack_require__(107); + var GoogleAuthInfo = __webpack_require__(108); var LoginInputForm = React.createClass({ displayName: 'LoginInputForm', @@ -1621,7 +1744,7 @@ webpackJsonp([1],[ /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "login.jsx" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } /***/ }, -/* 186 */ +/* 188 */ /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -1636,9 +1759,9 @@ webpackJsonp([1],[ var IndexLink = _require.IndexLink; var History = _require.History; - var cfg = __webpack_require__(18); + var cfg = __webpack_require__(17); - var menuItems = [{ icon: 'fa fa fa-sitemap', to: cfg.routes.nodes, title: 'Nodes' }, { icon: 'fa fa-hdd-o', to: cfg.routes.sessions, title: 'Sessions' }]; + var menuItems = [{ icon: 'fa fa-cogs', to: cfg.routes.nodes, title: 'Nodes' }, { icon: 'fa fa-sitemap', to: cfg.routes.sessions, title: 'Sessions' }, { icon: 'fa fa-question', to: cfg.routes.sessions, title: 'Sessions' }]; var NavLeftBar = React.createClass({ displayName: 'NavLeftBar', @@ -1684,7 +1807,7 @@ webpackJsonp([1],[ /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "navLeftBar.jsx" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } /***/ }, -/* 187 */ +/* 189 */ /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -1695,14 +1818,14 @@ webpackJsonp([1],[ var $ = __webpack_require__(51); var reactor = __webpack_require__(13); - var _require = __webpack_require__(150); + var _require = __webpack_require__(153); var actions = _require.actions; var getters = _require.getters; - var userModule = __webpack_require__(94); + var userModule = __webpack_require__(95); var LinkedStateMixin = __webpack_require__(57); - var GoogleAuthInfo = __webpack_require__(107); + var GoogleAuthInfo = __webpack_require__(108); var InviteInputForm = React.createClass({ displayName: 'InviteInputForm', @@ -1878,7 +2001,7 @@ webpackJsonp([1],[ /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "newUser.jsx" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } /***/ }, -/* 188 */ +/* 190 */ /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -1890,21 +2013,22 @@ webpackJsonp([1],[ var React = __webpack_require__(5); var reactor = __webpack_require__(13); - var _require = __webpack_require__(153); + var _require = __webpack_require__(156); var getters = _require.getters; var actions = _require.actions; - var userGetters = __webpack_require__(93); - var termModule = __webpack_require__(158); + var userGetters = __webpack_require__(94); - var _require2 = __webpack_require__(190); + var _require2 = __webpack_require__(192); var Table = _require2.Table; var Column = _require2.Column; var Cell = _require2.Cell; - var TerminalBox = __webpack_require__(191); + var _require3 = __webpack_require__(84); + + var connect = _require3.connect; var TextCell = function TextCell(_ref) { var rowIndex = _ref.rowIndex; @@ -1943,10 +2067,6 @@ webpackJsonp([1],[ ); }; - function connect(server, role) { - termModule.actions.connect(server.ip, role); - } - var LoginCell = function LoginCell(_ref3) { var user = _ref3.user; var rowIndex = _ref3.rowIndex; @@ -1966,7 +2086,7 @@ webpackJsonp([1],[ { key: i }, React.createElement( 'a', - { href: '#', target: '_blank', onClick: connect.bind(null, data[rowIndex], user.logins[i]) }, + { href: '#', target: '_blank', onClick: connect.bind(null, data[rowIndex].addr, user.logins[i], undefined) }, user.logins[i] ) )); @@ -1980,7 +2100,7 @@ webpackJsonp([1],[ { className: 'btn-group' }, React.createElement( 'button', - { type: 'button', onClick: connect.bind(null, data[rowIndex], user.logins[0]), className: 'btn btn-sm btn-primary' }, + { type: 'button', onClick: connect.bind(null, data[rowIndex].addr, user.logins[0], undefined), className: 'btn btn-sm btn-primary' }, user.logins[0] ), $lis.length > 1 ? React.createElement( @@ -2057,9 +2177,9 @@ webpackJsonp([1],[ { className: '' }, React.createElement( Table, - { rowCount: data.length, className: 'grv-nodes-table' }, + { rowCount: data.length, className: 'table-stripped grv-nodes-table' }, React.createElement(Column, { - columnKey: 'count', + columnKey: 'sessionCount', header: React.createElement( Cell, null, @@ -2068,7 +2188,7 @@ webpackJsonp([1],[ cell: React.createElement(TextCell, { data: data }) }), React.createElement(Column, { - columnKey: 'ip', + columnKey: 'addr', header: React.createElement( Cell, null, @@ -2093,43 +2213,17 @@ webpackJsonp([1],[ ) ) ) - ), - React.createElement(TerminalHost, null) + ) ); } }); - var TerminalHost = React.createClass({ - displayName: 'TerminalHost', - - mixins: [reactor.ReactMixin], - - getDataBindings: function getDataBindings() { - return { - settings: termModule.getters.connSettings - }; - }, - - render: function render() { - if (!this.state.settings) { - return null; - } - - return React.createElement( - 'div', - null, - React.createElement(TerminalBox, { settings: this.state.settings }) - ); - } - - }); - module.exports = Nodes; /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "main.jsx" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } /***/ }, -/* 189 */ +/* 191 */ /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -2219,7 +2313,7 @@ webpackJsonp([1],[ /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "main.jsx" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } /***/ }, -/* 190 */ +/* 192 */ /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -2319,7 +2413,7 @@ webpackJsonp([1],[ children.push(child); }); - var tableClass = 'table table-bordered ' + this.props.className; + var tableClass = 'table ' + this.props.className; return React.createElement( 'table', @@ -2346,19 +2440,154 @@ webpackJsonp([1],[ /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "table.jsx" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } /***/ }, -/* 191 */ +/* 193 */ /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { 'use strict'; + exports.__esModule = true; var session = __webpack_require__(36); - var cfg = __webpack_require__(18); - + var cfg = __webpack_require__(17); var React = __webpack_require__(5); - // {"addr": "127.0.0.1:5000", "login": "admin", "term": {"h": 120, "w": 100}, "sid": "123"} + var _require = __webpack_require__(149); + + var getters = _require.getters; + var actions = _require.actions; + + var EventStreamer = __webpack_require__(185); + + var TerminalHost = React.createClass({ + displayName: 'TerminalHost', + + mixins: [reactor.ReactMixin], + + onOpen: function onOpen() { + actions.connected(); + }, + + getDataBindings: function getDataBindings() { + return { + activeSession: getters.activeSession + }; + }, + + render: function render() { + if (!this.state.activeSession) { + return null; + } + + var _state$activeSession = this.state.activeSession; + var term = _state$activeSession.term; + var isConnected = _state$activeSession.isConnected; + + var _session$getUserData = session.getUserData(); + + var token = _session$getUserData.token; + + return React.createElement( + 'div', + { className: 'grv-terminal-host' }, + React.createElement( + 'div', + { className: 'grv-terminal-participans' }, + React.createElement( + 'ul', + { className: 'nav' }, + React.createElement( + 'li', + null, + React.createElement( + 'button', + { className: 'btn btn-primary btn-circle', type: 'button' }, + ' ', + React.createElement( + 'strong', + null, + 'A' + ) + ) + ), + React.createElement( + 'li', + null, + React.createElement( + 'button', + { className: 'btn btn-primary btn-circle', type: 'button' }, + ' B ' + ) + ), + React.createElement( + 'li', + null, + React.createElement( + 'button', + { className: 'btn btn-primary btn-circle', type: 'button' }, + ' C ' + ) + ), + React.createElement( + 'li', + null, + React.createElement( + 'button', + { onClick: actions.close, className: 'btn btn-danger btn-circle', type: 'button' }, + React.createElement('i', { className: 'fa fa-times' }) + ) + ) + ) + ), + React.createElement( + 'div', + null, + React.createElement( + 'div', + { className: 'btn-group' }, + React.createElement( + 'span', + { className: 'btn btn-xs btn-primary' }, + '128.0.0.1:8888' + ), + React.createElement( + 'div', + { className: 'btn-group' }, + React.createElement( + 'button', + { 'data-toggle': 'dropdown', className: 'btn btn-default btn-xs dropdown-toggle', 'aria-expanded': 'true' }, + React.createElement('span', { className: 'caret' }) + ), + React.createElement( + 'ul', + { className: 'dropdown-menu' }, + React.createElement( + 'li', + null, + React.createElement( + 'a', + { href: '#', target: '_blank' }, + 'Logs' + ) + ), + React.createElement( + 'li', + null, + React.createElement( + 'a', + { href: '#', target: '_blank' }, + 'Logs' + ) + ) + ) + ) + ) + ), + isConnected ? React.createElement(EventStreamer, { token: token, sid: term.sid }) : null, + React.createElement(TerminalBox, { settings: term, token: token, onOpen: actions.connected }) + ); + } + }); var TerminalBox = React.createClass({ displayName: 'TerminalBox', @@ -2366,20 +2595,21 @@ webpackJsonp([1],[ renderTerminal: function renderTerminal() { var _this = this; - var _session$getUserData = session.getUserData(); - - var token = _session$getUserData.token; - + var isNew; var parent = document.getElementById("terminal-box"); - var settings = this.props.settings; + var _props = this.props; + var settings = _props.settings; + var token = _props.token; + var sid = _props.sid; + //settings.sid = 5555; settings.term = { h: 120, w: 100 }; - var connectionStr = cfg.api.getTermConnString(token, settings); + var connectionStr = cfg.api.getSessionConnStr(token, settings); this.term = new Terminal({ cols: 180, @@ -2394,6 +2624,7 @@ webpackJsonp([1],[ this.term.write('\x1b[94mconnecting to "pod"\x1b[m\r\n'); this.socket.onopen = function () { + _this.props.onOpen(); _this.term.on('data', function (data) { _this.socket.send(data); }); @@ -2428,12 +2659,14 @@ webpackJsonp([1],[ } }); - module.exports = TerminalBox; + exports['default'] = TerminalHost; + exports.TerminalBox = TerminalBox; + exports.TerminalHost = TerminalHost; - /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "terminal.jsx" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } + /* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/makeExportsHot.js"); if (makeExportsHot(module, require("react"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error("Cannot not apply hot update to " + "terminalHost.jsx" + ": " + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } } /***/ }, -/* 192 */ +/* 194 */ /***/ function(module, exports, __webpack_require__) { /* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-api/modules/index.js"), RootInstanceProvider = require("/home/akontsevoy/go/src/github.com/gravitational/teleport/web/node_modules/react-hot-loader/RootInstanceProvider.js"), ReactMount = require("react/lib/ReactMount"), React = require("react"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () { @@ -2441,7 +2674,7 @@ webpackJsonp([1],[ 'use strict'; var React = __webpack_require__(5); - var render = __webpack_require__(106).render; + var render = __webpack_require__(107).render; var _require = __webpack_require__(42); @@ -2451,7 +2684,7 @@ webpackJsonp([1],[ var IndexRoute = _require.IndexRoute; var browserHistory = _require.browserHistory; - var _require2 = __webpack_require__(184); + var _require2 = __webpack_require__(186); var App = _require2.App; var Login = _require2.Login; @@ -2459,15 +2692,15 @@ webpackJsonp([1],[ var Sessions = _require2.Sessions; var NewUser = _require2.NewUser; - var _require3 = __webpack_require__(92); + var _require3 = __webpack_require__(93); var ensureUser = _require3.ensureUser; var auth = __webpack_require__(82); var session = __webpack_require__(36); - var cfg = __webpack_require__(18); + var cfg = __webpack_require__(17); - __webpack_require__(147); + __webpack_require__(150); // init session session.init(); @@ -2497,4 +2730,4 @@ webpackJsonp([1],[ /***/ } ]); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL3JlYWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vfi9rZXltaXJyb3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9zZXNzaW9uLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcImpRdWVyeVwiIiwid2VicGFjazovLy8uL3NyYy9hcHAvc2VydmljZXMvYXBpLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXV0aC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvaW52aXRlL2FjdGlvblR5cGVzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy9pbnZpdGUvaW52aXRlU3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL25vZGVzL2FjdGlvblR5cGVzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy9ub2Rlcy9ub2RlU3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL3Jlc3RBcGkvYWN0aW9uVHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL3Jlc3RBcGkvY29uc3RhbnRzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy90ZXJtaW5hbC9hY3Rpb25UeXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvdGVybWluYWwvdGVybVN0b3JlLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy91c2VyL2FjdGlvblR5cGVzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy91c2VyL2FjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL3VzZXIvZ2V0dGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvdXNlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvdXNlci91c2VyU3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL2dvb2dsZUF1dGguanN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tbW9uL3BhdHRlcm5VdGlscy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL2ludml0ZS9hY3Rpb25zLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy9pbnZpdGUvZ2V0dGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvaW52aXRlL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy9ub2Rlcy9hY3Rpb25zLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy9ub2Rlcy9nZXR0ZXJzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy9ub2Rlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvcmVzdEFwaS9hY3Rpb25zLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy9yZXN0QXBpL3Jlc3RBcGlTdG9yZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvdGVybWluYWwvYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvdGVybWluYWwvZ2V0dGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvdGVybWluYWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL2FwcC5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvbG9naW4uanN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9uYXZMZWZ0QmFyLmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvbmV3VXNlci5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL25vZGVzL21haW4uanN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9zZXNzaW9ucy9tYWluLmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvdGFibGUuanN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy90ZXJtaW5hbC5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9pbmRleC5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NDQUF3QixFQUFZOztBQUVwQyxLQUFNLE9BQU8sR0FBRyx1QkFBWTtBQUMxQixRQUFLLEVBQUUsSUFBSTtFQUNaLENBQUM7O0FBRUYsT0FBTSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7O3NCQUVWLE9BQU87Ozs7Ozs7Ozs7Ozs7OztnQkNSQSxtQkFBTyxDQUFDLEdBQXlCLENBQUM7O0tBQW5ELGFBQWEsWUFBYixhQUFhOztBQUVsQixLQUFJLEdBQUcsR0FBRzs7QUFFUixVQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUUvQixNQUFHLEVBQUU7QUFDSCxjQUFTLEVBQUUsa0NBQWtDO0FBQzdDLGdCQUFXLEVBQUUscUJBQXFCO0FBQ2xDLGVBQVUsRUFBRSx1Q0FBdUM7QUFDbkQsbUJBQWMsRUFBRSxrQkFBa0I7QUFDbEMsaUJBQVksRUFBRSxzQkFBQyxXQUFXLEVBQUs7QUFDN0IsY0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBQyxXQUFXLEVBQVgsV0FBVyxFQUFDLENBQUMsQ0FBQztNQUN6RDs7QUFFRCxzQkFBaUIsRUFBRSwyQkFBQyxLQUFLLEVBQUUsTUFBTSxFQUFLO0FBQ3BDLFdBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsV0FBSSxXQUFX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QUMsS0FBSyxJQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVMsRUFBQyxTQUFTLEVBQUUsUUFBUyxHQUFFO0lBQ2xEO0VBQ0QsRUFDUixRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEMiLCJmaWxlIjoiYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3RvciB9IGZyb20gJ251Y2xlYXItanMnXG5cbmNvbnN0IHJlYWN0b3IgPSBuZXcgUmVhY3Rvcih7XG4gIGRlYnVnOiB0cnVlXG59KVxuXG53aW5kb3cucmVhY3RvciA9IHJlYWN0b3I7XG5cbmV4cG9ydCBkZWZhdWx0IHJlYWN0b3JcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9yZWFjdG9yLmpzXG4gKiovIiwibGV0IHtmb3JtYXRQYXR0ZXJufSA9IHJlcXVpcmUoJ2FwcC9jb21tb24vcGF0dGVyblV0aWxzJyk7XG5cbmxldCBjZmcgPSB7XG5cbiAgYmFzZVVybDogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcblxuICBhcGk6IHtcbiAgICBub2Rlc1BhdGg6ICcvdjEvd2ViYXBpL3NpdGVzLy1jdXJyZW50LS9ub2RlcycsXG4gICAgc2Vzc2lvblBhdGg6ICcvdjEvd2ViYXBpL3Nlc3Npb25zJyxcbiAgICBpbnZpdGVQYXRoOiAnL3YxL3dlYmFwaS91c2Vycy9pbnZpdGVzLzppbnZpdGVUb2tlbicsXG4gICAgY3JlYXRlVXNlclBhdGg6ICcvdjEvd2ViYXBpL3VzZXJzJyxcbiAgICBnZXRJbnZpdGVVcmw6IChpbnZpdGVUb2tlbikgPT4ge1xuICAgICAgcmV0dXJuIGZvcm1hdFBhdHRlcm4oY2ZnLmFwaS5pbnZpdGVQYXRoLCB7aW52aXRlVG9rZW59KTtcbiAgICB9LFxuXG4gICAgZ2V0VGVybUNvbm5TdHJpbmc6ICh0b2tlbiwgcGFyYW1zKSA9PiB7XG4gICAgICB2YXIganNvbiA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7XG4gICAgICB2YXIganNvbkVuY29kZWQgPSB3aW5kb3cuZW5jb2RlVVJJKGpzb24pO1xuICAgICAgdmFyIHByZWZpeCA9IGxvY2F0aW9uLnByb3RvY29sID09IFwiaHR0cHM6XCI/XCJ3c3M6Ly9cIjpcIndzOi8vXCI7XG4gICAgICByZXR1cm4gYCR7cHJlZml4fSR7cGFyYW1zLmFkZHJ9L3YxL3dlYmFwaS9zaXRlcy8tY3VycmVudC0vY29ubmVjdD9hY2Nlc3NfdG9rZW49JHt0b2tlbn0mcGFyYW1zPSR7anNvbkVuY29kZWR9YDtcbiAgICB9XG4gIH0sXG5cbiAgcm91dGVzOiB7XG4gICAgYXBwOiAnL3dlYicsXG4gICAgbG9nb3V0OiAnL3dlYi9sb2dvdXQnLFxuICAgIGxvZ2luOiAnL3dlYi9sb2dpbicsXG4gICAgbm9kZXM6ICcvd2ViL25vZGVzJyxcbiAgICBuZXdVc2VyOiAnL3dlYi9uZXd1c2VyLzppbnZpdGVUb2tlbicsXG4gICAgc2Vzc2lvbnM6ICcvd2ViL3Nlc3Npb25zJ1xuICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2ZnO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL2NvbmZpZy5qc1xuICoqLyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGFuIGVudW1lcmF0aW9uIHdpdGgga2V5cyBlcXVhbCB0byB0aGVpciB2YWx1ZS5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgIHZhciBDT0xPUlMgPSBrZXlNaXJyb3Ioe2JsdWU6IG51bGwsIHJlZDogbnVsbH0pO1xuICogICB2YXIgbXlDb2xvciA9IENPTE9SUy5ibHVlO1xuICogICB2YXIgaXNDb2xvclZhbGlkID0gISFDT0xPUlNbbXlDb2xvcl07XG4gKlxuICogVGhlIGxhc3QgbGluZSBjb3VsZCBub3QgYmUgcGVyZm9ybWVkIGlmIHRoZSB2YWx1ZXMgb2YgdGhlIGdlbmVyYXRlZCBlbnVtIHdlcmVcbiAqIG5vdCBlcXVhbCB0byB0aGVpciBrZXlzLlxuICpcbiAqICAgSW5wdXQ6ICB7a2V5MTogdmFsMSwga2V5MjogdmFsMn1cbiAqICAgT3V0cHV0OiB7a2V5MToga2V5MSwga2V5Mjoga2V5Mn1cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbnZhciBrZXlNaXJyb3IgPSBmdW5jdGlvbihvYmopIHtcbiAgdmFyIHJldCA9IHt9O1xuICB2YXIga2V5O1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBPYmplY3QgJiYgIUFycmF5LmlzQXJyYXkob2JqKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleU1pcnJvciguLi4pOiBBcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC4nKTtcbiAgfVxuICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmV0W2tleV0gPSBrZXk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5TWlycm9yO1xuXG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiAuL34va2V5bWlycm9yL2luZGV4LmpzXG4gKiogbW9kdWxlIGlkID0gMzFcbiAqKiBtb2R1bGUgY2h1bmtzID0gMVxuICoqLyIsInZhciB7IGJyb3dzZXJIaXN0b3J5IH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXInKTtcblxuY29uc3QgQVVUSF9LRVlfREFUQSA9ICdhdXRoRGF0YSc7XG5cbnZhciBfaGlzdG9yeSA9IG51bGw7XG5cbnZhciBzZXNzaW9uID0ge1xuXG4gIGluaXQoaGlzdG9yeT1icm93c2VySGlzdG9yeSl7XG4gICAgX2hpc3RvcnkgPSBoaXN0b3J5O1xuICB9LFxuXG4gIGdldEhpc3RvcnkoKXtcbiAgICByZXR1cm4gX2hpc3Rvcnk7XG4gIH0sXG5cbiAgc2V0VXNlckRhdGEodXNlckRhdGEpe1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oQVVUSF9LRVlfREFUQSwgSlNPTi5zdHJpbmdpZnkodXNlckRhdGEpKTtcbiAgfSxcblxuICBnZXRVc2VyRGF0YSgpe1xuICAgIHZhciBpdGVtID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShBVVRIX0tFWV9EQVRBKTtcbiAgICBpZihpdGVtKXtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGl0ZW0pO1xuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfSxcblxuICBjbGVhcigpe1xuICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKClcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2Vzc2lvbjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9zZXNzaW9uLmpzXG4gKiovIiwibW9kdWxlLmV4cG9ydHMgPSBqUXVlcnk7XG5cblxuLyoqKioqKioqKioqKioqKioqXG4gKiogV0VCUEFDSyBGT09URVJcbiAqKiBleHRlcm5hbCBcImpRdWVyeVwiXG4gKiogbW9kdWxlIGlkID0gNTFcbiAqKiBtb2R1bGUgY2h1bmtzID0gMVxuICoqLyIsInZhciAkID0gcmVxdWlyZShcImpRdWVyeVwiKTtcbnZhciBzZXNzaW9uID0gcmVxdWlyZSgnYXBwL3Nlc3Npb24nKTtcblxuY29uc3QgYXBpID0ge1xuXG4gIHBvc3QocGF0aCwgZGF0YSl7XG4gICAgcmV0dXJuIGFwaS5hamF4KHt1cmw6IHBhdGgsIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLCB0eXBlOiAnUE9TVCd9LCBmYWxzZSk7XG4gIH0sXG5cbiAgZ2V0KHBhdGgpe1xuICAgIHJldHVybiBhcGkuYWpheCh7dXJsOiBwYXRofSk7XG4gIH0sXG5cbiAgYWpheChjZmcsIHdpdGhUb2tlbiA9IHRydWUpe1xuICAgIHZhciBkZWZhdWx0Q2ZnID0ge1xuICAgICAgdHlwZTogXCJHRVRcIixcbiAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKHhocikge1xuICAgICAgICBpZih3aXRoVG9rZW4pe1xuICAgICAgICAgIHZhciB7IHRva2VuIH0gPSBzZXNzaW9uLmdldFVzZXJEYXRhKCk7XG4gICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0F1dGhvcml6YXRpb24nLCdCZWFyZXIgJyArIHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJC5hamF4KCQuZXh0ZW5kKHt9LCBkZWZhdWx0Q2ZnLCBjZmcpKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwaTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9zZXJ2aWNlcy9hcGkuanNcbiAqKi8iLCJ2YXIgYXBpID0gcmVxdWlyZSgnLi9zZXJ2aWNlcy9hcGknKTtcbnZhciBzZXNzaW9uID0gcmVxdWlyZSgnLi9zZXNzaW9uJyk7XG52YXIgY2ZnID0gcmVxdWlyZSgnYXBwL2NvbmZpZycpO1xudmFyICQgPSByZXF1aXJlKCdqUXVlcnknKTtcblxuY29uc3QgcmVmcmVzaFJhdGUgPSA2MDAwMCAqIDEwMDsgLy8gMSBtaW5cblxudmFyIHJlZnJlc2hUb2tlblRpbWVySWQgPSBudWxsO1xuXG52YXIgYXV0aCA9IHtcblxuICBzaWduVXAobmFtZSwgcGFzc3dvcmQsIHRva2VuLCBpbnZpdGVUb2tlbil7XG4gICAgdmFyIGRhdGEgPSB7dXNlcjogbmFtZSwgcGFzczogcGFzc3dvcmQsIHNlY29uZF9mYWN0b3JfdG9rZW46IHRva2VuLCBpbnZpdGVfdG9rZW46IGludml0ZVRva2VufTtcbiAgICByZXR1cm4gYXBpLnBvc3QoY2ZnLmFwaS5jcmVhdGVVc2VyUGF0aCwgZGF0YSlcbiAgICAgIC50aGVuKCh1c2VyKT0+e1xuICAgICAgICBzZXNzaW9uLnNldFVzZXJEYXRhKHVzZXIpO1xuICAgICAgICBhdXRoLl9zdGFydFRva2VuUmVmcmVzaGVyKCk7XG4gICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgfSk7XG4gIH0sXG5cbiAgbG9naW4obmFtZSwgcGFzc3dvcmQsIHRva2VuKXtcbiAgICBhdXRoLl9zdG9wVG9rZW5SZWZyZXNoZXIoKTtcbiAgICByZXR1cm4gYXV0aC5fbG9naW4obmFtZSwgcGFzc3dvcmQsIHRva2VuKS5kb25lKGF1dGguX3N0YXJ0VG9rZW5SZWZyZXNoZXIpO1xuICB9LFxuXG4gIGVuc3VyZVVzZXIoKXtcbiAgICB2YXIgdXNlckRhdGEgPSBzZXNzaW9uLmdldFVzZXJEYXRhKCk7XG4gICAgaWYodXNlckRhdGEpe1xuICAgICAgLy8gcmVmcmVzaCB0aW1lciB3aWxsIG5vdCBiZSBzZXQgaW4gY2FzZSBvZiBicm93c2VyIHJlZnJlc2ggZXZlbnRcbiAgICAgIGlmKGF1dGguX2dldFJlZnJlc2hUb2tlblRpbWVySWQoKSA9PT0gbnVsbCl7XG4gICAgICAgIHJldHVybiBhdXRoLl9sb2dpbigpLmRvbmUoYXV0aC5fc3RhcnRUb2tlblJlZnJlc2hlcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAkLkRlZmVycmVkKCkucmVzb2x2ZSh1c2VyRGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3QoKTtcbiAgfSxcblxuICBsb2dvdXQoKXtcbiAgICBhdXRoLl9zdG9wVG9rZW5SZWZyZXNoZXIoKTtcbiAgICByZXR1cm4gc2Vzc2lvbi5jbGVhcigpO1xuICB9LFxuXG4gIF9zdGFydFRva2VuUmVmcmVzaGVyKCl7XG4gICAgcmVmcmVzaFRva2VuVGltZXJJZCA9IHNldEludGVydmFsKGF1dGguX3JlZnJlc2hUb2tlbiwgcmVmcmVzaFJhdGUpO1xuICB9LFxuXG4gIF9zdG9wVG9rZW5SZWZyZXNoZXIoKXtcbiAgICBjbGVhckludGVydmFsKHJlZnJlc2hUb2tlblRpbWVySWQpO1xuICAgIHJlZnJlc2hUb2tlblRpbWVySWQgPSBudWxsO1xuICB9LFxuXG4gIF9nZXRSZWZyZXNoVG9rZW5UaW1lcklkKCl7XG4gICAgcmV0dXJuIHJlZnJlc2hUb2tlblRpbWVySWQ7XG4gIH0sXG5cbiAgX3JlZnJlc2hUb2tlbigpe1xuICAgIGF1dGguX2xvZ2luKCkuZmFpbCgoKT0+e1xuICAgICAgYXV0aC5sb2dvdXQoKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9KVxuICB9LFxuXG4gIF9sb2dpbihuYW1lLCBwYXNzd29yZCwgdG9rZW4pe1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgdXNlcjogbmFtZSxcbiAgICAgIHBhc3M6IHBhc3N3b3JkLFxuICAgICAgc2Vjb25kX2ZhY3Rvcl90b2tlbjogdG9rZW5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGFwaS5wb3N0KGNmZy5hcGkuc2Vzc2lvblBhdGgsIGRhdGEpLnRoZW4oZGF0YT0+e1xuICAgICAgc2Vzc2lvbi5zZXRVc2VyRGF0YShkYXRhKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhdXRoO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL2F1dGguanNcbiAqKi8iLCJpbXBvcnQga2V5TWlycm9yIGZyb20gJ2tleW1pcnJvcidcblxuZXhwb3J0IGRlZmF1bHQga2V5TWlycm9yKHtcbiAgVExQVF9SRUNFSVZFX1VTRVJfSU5WSVRFOiBudWxsXG59KVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvaW52aXRlL2FjdGlvblR5cGVzLmpzXG4gKiovIiwidmFyIHsgU3RvcmUsIHRvSW1tdXRhYmxlIH0gPSByZXF1aXJlKCdudWNsZWFyLWpzJyk7XG52YXIgIHsgVExQVF9SRUNFSVZFX1VTRVJfSU5WSVRFIH0gPSByZXF1aXJlKCcuL2FjdGlvblR5cGVzJyk7XG5cbmV4cG9ydCBkZWZhdWx0IFN0b3JlKHtcbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB0b0ltbXV0YWJsZShudWxsKTtcbiAgfSxcblxuICBpbml0aWFsaXplKCkge1xuICAgIHRoaXMub24oVExQVF9SRUNFSVZFX1VTRVJfSU5WSVRFLCByZWNlaXZlSW52aXRlKVxuICB9XG59KVxuXG5mdW5jdGlvbiByZWNlaXZlSW52aXRlKHN0YXRlLCBpbnZpdGUpe1xuICByZXR1cm4gdG9JbW11dGFibGUoaW52aXRlKTtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL2ludml0ZS9pbnZpdGVTdG9yZS5qc1xuICoqLyIsImltcG9ydCBrZXlNaXJyb3IgZnJvbSAna2V5bWlycm9yJ1xuXG5leHBvcnQgZGVmYXVsdCBrZXlNaXJyb3Ioe1xuICBUTFBUX1JFQ0VJVkVfTk9ERVM6IG51bGxcbn0pXG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy9ub2Rlcy9hY3Rpb25UeXBlcy5qc1xuICoqLyIsInZhciB7IFN0b3JlLCB0b0ltbXV0YWJsZSB9ID0gcmVxdWlyZSgnbnVjbGVhci1qcycpO1xudmFyICB7IFRMUFRfUkVDRUlWRV9OT0RFUyB9ID0gcmVxdWlyZSgnLi9hY3Rpb25UeXBlcycpO1xuXG5leHBvcnQgZGVmYXVsdCBTdG9yZSh7XG4gIGdldEluaXRpYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4gdG9JbW11dGFibGUoW10pO1xuICB9LFxuXG4gIGluaXRpYWxpemUoKSB7XG4gICAgdGhpcy5vbihUTFBUX1JFQ0VJVkVfTk9ERVMsIHJlY2VpdmVOb2RlcylcbiAgfVxufSlcblxuZnVuY3Rpb24gcmVjZWl2ZU5vZGVzKHN0YXRlLCBub2RlQXJyYXkpe1xuICByZXR1cm4gdG9JbW11dGFibGUobm9kZUFycmF5KTtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL25vZGVzL25vZGVTdG9yZS5qc1xuICoqLyIsImltcG9ydCBrZXlNaXJyb3IgZnJvbSAna2V5bWlycm9yJ1xuXG5leHBvcnQgZGVmYXVsdCBrZXlNaXJyb3Ioe1xuICBUTFBUX1JFU1RfQVBJX1NUQVJUOiBudWxsLFxuICBUTFBUX1JFU1RfQVBJX1NVQ0NFU1M6IG51bGwsXG4gIFRMUFRfUkVTVF9BUElfRkFJTDogbnVsbFxufSlcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL3Jlc3RBcGkvYWN0aW9uVHlwZXMuanNcbiAqKi8iLCJpbXBvcnQga2V5TWlycm9yIGZyb20gJ2tleW1pcnJvcidcblxuZXhwb3J0IGRlZmF1bHQga2V5TWlycm9yKHtcbiAgVFJZSU5HX1RPX1NJR05fVVA6IG51bGxcbn0pXG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy9yZXN0QXBpL2NvbnN0YW50cy5qc1xuICoqLyIsImltcG9ydCBrZXlNaXJyb3IgZnJvbSAna2V5bWlycm9yJ1xuXG5leHBvcnQgZGVmYXVsdCBrZXlNaXJyb3Ioe1xuICBUTFBUX1JFQ0VJVkVfVEVSTTogbnVsbFxufSlcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL3Rlcm1pbmFsL2FjdGlvblR5cGVzLmpzXG4gKiovIiwidmFyIHsgU3RvcmUsIHRvSW1tdXRhYmxlIH0gPSByZXF1aXJlKCdudWNsZWFyLWpzJyk7XG52YXIgIHsgVExQVF9SRUNFSVZFX1RFUk0gfSA9IHJlcXVpcmUoJy4vYWN0aW9uVHlwZXMnKTtcblxuZXhwb3J0IGRlZmF1bHQgU3RvcmUoe1xuICBnZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRvSW1tdXRhYmxlKG51bGwpO1xuICB9LFxuXG4gIGluaXRpYWxpemUoKSB7XG4gICAgdGhpcy5vbihUTFBUX1JFQ0VJVkVfVEVSTSwgcmVjZWl2ZVRlcm0pXG4gIH1cblxufSlcblxuZnVuY3Rpb24gcmVjZWl2ZVRlcm0oc3RhdGUsIHRlcm0pe1xuICByZXR1cm4gdG9JbW11dGFibGUodGVybSk7XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy90ZXJtaW5hbC90ZXJtU3RvcmUuanNcbiAqKi8iLCJpbXBvcnQga2V5TWlycm9yIGZyb20gJ2tleW1pcnJvcidcblxuZXhwb3J0IGRlZmF1bHQga2V5TWlycm9yKHtcbiAgVExQVF9SRUNFSVZFX1VTRVI6IG51bGxcbn0pXG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy91c2VyL2FjdGlvblR5cGVzLmpzXG4gKiovIiwidmFyIHJlYWN0b3IgPSByZXF1aXJlKCdhcHAvcmVhY3RvcicpO1xudmFyIHsgVExQVF9SRUNFSVZFX1VTRVIgfSA9IHJlcXVpcmUoJy4vYWN0aW9uVHlwZXMnKTtcbnZhciB7IFRSWUlOR19UT19TSUdOX1VQfSA9IHJlcXVpcmUoJ2FwcC9tb2R1bGVzL3Jlc3RBcGkvY29uc3RhbnRzJyk7XG52YXIgcmVzdEFwaUFjdGlvbnMgPSByZXF1aXJlKCdhcHAvbW9kdWxlcy9yZXN0QXBpL2FjdGlvbnMnKTtcbnZhciBhdXRoID0gcmVxdWlyZSgnYXBwL2F1dGgnKTtcbnZhciBzZXNzaW9uID0gcmVxdWlyZSgnYXBwL3Nlc3Npb24nKTtcbnZhciBjZmcgPSByZXF1aXJlKCdhcHAvY29uZmlnJyk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcblxuICBlbnN1cmVVc2VyKG5leHRTdGF0ZSwgcmVwbGFjZSwgY2Ipe1xuICAgIHZhciB1c2VyRGF0YSA9IHNlc3Npb24uZ2V0VXNlckRhdGEoKTtcbiAgICByZWFjdG9yLmRpc3BhdGNoKFRMUFRfUkVDRUlWRV9VU0VSLCB1c2VyRGF0YS51c2VyKTtcbiAgICBjYigpO1xuXG4gICAgLyphdXRoLmVuc3VyZVVzZXIoKVxuICAgICAgLmRvbmUoKHVzZXJEYXRhKT0+IHtcbiAgICAgICAgcmVhY3Rvci5kaXNwYXRjaChUTFBUX1JFQ0VJVkVfVVNFUiwgdXNlckRhdGEudXNlcik7XG4gICAgICAgIGNiKCk7XG4gICAgICB9KVxuICAgICAgLmZhaWwoKCk9PntcbiAgICAgICAgcmVwbGFjZSh7cmVkaXJlY3RUbzogbmV4dFN0YXRlLmxvY2F0aW9uLnBhdGhuYW1lIH0sIGNmZy5yb3V0ZXMubG9naW4pO1xuICAgICAgICBjYigpO1xuICAgICAgfSk7Ki9cbiAgfSxcblxuICBzaWduVXAoe25hbWUsIHBzdywgdG9rZW4sIGludml0ZVRva2VufSl7XG4gICAgcmVzdEFwaUFjdGlvbnMuc3RhcnQoVFJZSU5HX1RPX1NJR05fVVApO1xuICAgIGF1dGguc2lnblVwKG5hbWUsIHBzdywgdG9rZW4sIGludml0ZVRva2VuKVxuICAgICAgLmRvbmUoKHNlc3Npb25EYXRhKT0+e1xuICAgICAgICByZWFjdG9yLmRpc3BhdGNoKFRMUFRfUkVDRUlWRV9VU0VSLCBzZXNzaW9uRGF0YS51c2VyKTtcbiAgICAgICAgcmVzdEFwaUFjdGlvbnMuc3VjY2VzcyhUUllJTkdfVE9fU0lHTl9VUCk7XG4gICAgICAgIHNlc3Npb24uZ2V0SGlzdG9yeSgpLnB1c2goe3BhdGhuYW1lOiBjZmcucm91dGVzLmFwcH0pO1xuICAgICAgfSlcbiAgICAgIC5mYWlsKCgpPT57XG4gICAgICAgIHJlc3RBcGlBY3Rpb25zLmZhaWwoVFJZSU5HX1RPX1NJR05fVVAsICdmYWlsZWQgdG8gc2luZyB1cCcpO1xuICAgICAgfSk7XG4gIH0sXG5cbiAgbG9naW4oe3VzZXIsIHBhc3N3b3JkLCB0b2tlbn0sIHJlZGlyZWN0KXtcbiAgICAgIGF1dGgubG9naW4odXNlciwgcGFzc3dvcmQsIHRva2VuKVxuICAgICAgICAuZG9uZSgoc2Vzc2lvbkRhdGEpPT57XG4gICAgICAgICAgcmVhY3Rvci5kaXNwYXRjaChUTFBUX1JFQ0VJVkVfVVNFUiwgc2Vzc2lvbkRhdGEudXNlcik7XG4gICAgICAgICAgc2Vzc2lvbi5nZXRIaXN0b3J5KCkucHVzaCh7cGF0aG5hbWU6IHJlZGlyZWN0fSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5mYWlsKCgpPT57XG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvdXNlci9hY3Rpb25zLmpzXG4gKiovIiwiY29uc3QgdXNlciA9IFsgWyd0bHB0X3VzZXInXSwgKGN1cnJlbnRVc2VyKSA9PiB7XG4gICAgaWYoIWN1cnJlbnRVc2VyKXtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogY3VycmVudFVzZXIuZ2V0KCduYW1lJyksXG4gICAgICBsb2dpbnM6IGN1cnJlbnRVc2VyLmdldCgnYWxsb3dlZF9sb2dpbnMnKS50b0pTKClcbiAgICB9XG4gIH1cbl07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgdXNlclxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvdXNlci9nZXR0ZXJzLmpzXG4gKiovIiwibW9kdWxlLmV4cG9ydHMuZ2V0dGVycyA9IHJlcXVpcmUoJy4vZ2V0dGVycycpO1xubW9kdWxlLmV4cG9ydHMuYWN0aW9ucyA9IHJlcXVpcmUoJy4vYWN0aW9ucycpO1xubW9kdWxlLmV4cG9ydHMubm9kZVN0b3JlID0gcmVxdWlyZSgnLi91c2VyU3RvcmUnKTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL3VzZXIvaW5kZXguanNcbiAqKi8iLCJ2YXIgeyBTdG9yZSwgdG9JbW11dGFibGUgfSA9IHJlcXVpcmUoJ251Y2xlYXItanMnKTtcbnZhciAgeyBUTFBUX1JFQ0VJVkVfVVNFUiB9ID0gcmVxdWlyZSgnLi9hY3Rpb25UeXBlcycpO1xuXG5leHBvcnQgZGVmYXVsdCBTdG9yZSh7XG4gIGdldEluaXRpYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4gdG9JbW11dGFibGUobnVsbCk7XG4gIH0sXG5cbiAgaW5pdGlhbGl6ZSgpIHtcbiAgICB0aGlzLm9uKFRMUFRfUkVDRUlWRV9VU0VSLCByZWNlaXZlVXNlcilcbiAgfVxuXG59KVxuXG5mdW5jdGlvbiByZWNlaXZlVXNlcihzdGF0ZSwgdXNlcil7XG4gIHJldHVybiB0b0ltbXV0YWJsZSh1c2VyKTtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL3VzZXIvdXNlclN0b3JlLmpzXG4gKiovIiwidmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIEdvb2dsZUF1dGhJbmZvID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3J2LWdvb2dsZS1hdXRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3J2LWdvb2dsZS1hdXRoLWljb25cIj48L2Rpdj5cbiAgICAgICAgPHN0cm9uZz5Hb29nbGUgQXV0aGVudGljYXRvcjwvc3Ryb25nPlxuICAgICAgICA8ZGl2PkRvd25sb2FkIDxhIGhyZWY9XCJodHRwczovL3N1cHBvcnQuZ29vZ2xlLmNvbS9hY2NvdW50cy9hbnN3ZXIvMTA2NjQ0Nz9obD1lblwiPkdvb2dsZSBBdXRoZW50aWNhdG9yPC9hPiBvbiB5b3VyIHBob25lIHRvIGFjY2VzcyB5b3VyIHR3byBmYWN0b3J5IHRva2VuPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IEdvb2dsZUF1dGhJbmZvO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL2NvbXBvbmVudHMvZ29vZ2xlQXV0aC5qc3hcbiAqKi8iLCIvKlxuICogIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICogIENvcHlyaWdodCAoYykgMjAxNSBSeWFuIEZsb3JlbmNlLCBNaWNoYWVsIEphY2tzb25cbiAqICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICogIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICogIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cblxuaW1wb3J0IGludmFyaWFudCBmcm9tICdpbnZhcmlhbnQnXG5cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpXG59XG5cbmZ1bmN0aW9uIGVzY2FwZVNvdXJjZShzdHJpbmcpIHtcbiAgcmV0dXJuIGVzY2FwZVJlZ0V4cChzdHJpbmcpLnJlcGxhY2UoL1xcLysvZywgJy8rJylcbn1cblxuZnVuY3Rpb24gX2NvbXBpbGVQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgbGV0IHJlZ2V4cFNvdXJjZSA9ICcnO1xuICBjb25zdCBwYXJhbU5hbWVzID0gW107XG4gIGNvbnN0IHRva2VucyA9IFtdO1xuXG4gIGxldCBtYXRjaCwgbGFzdEluZGV4ID0gMCwgbWF0Y2hlciA9IC86KFthLXpBLVpfJF1bYS16QS1aMC05XyRdKil8XFwqXFwqfFxcKnxcXCh8XFwpL2dcbiAgLyplc2xpbnQgbm8tY29uZC1hc3NpZ246IDAqL1xuICB3aGlsZSAoKG1hdGNoID0gbWF0Y2hlci5leGVjKHBhdHRlcm4pKSkge1xuICAgIGlmIChtYXRjaC5pbmRleCAhPT0gbGFzdEluZGV4KSB7XG4gICAgICB0b2tlbnMucHVzaChwYXR0ZXJuLnNsaWNlKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpKVxuICAgICAgcmVnZXhwU291cmNlICs9IGVzY2FwZVNvdXJjZShwYXR0ZXJuLnNsaWNlKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpKVxuICAgIH1cblxuICAgIGlmIChtYXRjaFsxXSkge1xuICAgICAgcmVnZXhwU291cmNlICs9ICcoW14vPyNdKyknO1xuICAgICAgcGFyYW1OYW1lcy5wdXNoKG1hdGNoWzFdKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoWzBdID09PSAnKionKSB7XG4gICAgICByZWdleHBTb3VyY2UgKz0gJyhbXFxcXHNcXFxcU10qKSdcbiAgICAgIHBhcmFtTmFtZXMucHVzaCgnc3BsYXQnKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoWzBdID09PSAnKicpIHtcbiAgICAgIHJlZ2V4cFNvdXJjZSArPSAnKFtcXFxcc1xcXFxTXSo/KSdcbiAgICAgIHBhcmFtTmFtZXMucHVzaCgnc3BsYXQnKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoWzBdID09PSAnKCcpIHtcbiAgICAgIHJlZ2V4cFNvdXJjZSArPSAnKD86JztcbiAgICB9IGVsc2UgaWYgKG1hdGNoWzBdID09PSAnKScpIHtcbiAgICAgIHJlZ2V4cFNvdXJjZSArPSAnKT8nO1xuICAgIH1cblxuICAgIHRva2Vucy5wdXNoKG1hdGNoWzBdKTtcblxuICAgIGxhc3RJbmRleCA9IG1hdGNoZXIubGFzdEluZGV4O1xuICB9XG5cbiAgaWYgKGxhc3RJbmRleCAhPT0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICB0b2tlbnMucHVzaChwYXR0ZXJuLnNsaWNlKGxhc3RJbmRleCwgcGF0dGVybi5sZW5ndGgpKVxuICAgIHJlZ2V4cFNvdXJjZSArPSBlc2NhcGVTb3VyY2UocGF0dGVybi5zbGljZShsYXN0SW5kZXgsIHBhdHRlcm4ubGVuZ3RoKSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0dGVybixcbiAgICByZWdleHBTb3VyY2UsXG4gICAgcGFyYW1OYW1lcyxcbiAgICB0b2tlbnNcbiAgfVxufVxuXG5jb25zdCBDb21waWxlZFBhdHRlcm5zQ2FjaGUgPSB7fVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZVBhdHRlcm4ocGF0dGVybikge1xuICBpZiAoIShwYXR0ZXJuIGluIENvbXBpbGVkUGF0dGVybnNDYWNoZSkpXG4gICAgQ29tcGlsZWRQYXR0ZXJuc0NhY2hlW3BhdHRlcm5dID0gX2NvbXBpbGVQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgcmV0dXJuIENvbXBpbGVkUGF0dGVybnNDYWNoZVtwYXR0ZXJuXVxufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIG1hdGNoIGEgcGF0dGVybiBvbiB0aGUgZ2l2ZW4gcGF0aG5hbWUuIFBhdHRlcm5zIG1heSB1c2VcbiAqIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzOlxuICpcbiAqIC0gOnBhcmFtTmFtZSAgICAgTWF0Y2hlcyBhIFVSTCBzZWdtZW50IHVwIHRvIHRoZSBuZXh0IC8sID8sIG9yICMuIFRoZVxuICogICAgICAgICAgICAgICAgICBjYXB0dXJlZCBzdHJpbmcgaXMgY29uc2lkZXJlZCBhIFwicGFyYW1cIlxuICogLSAoKSAgICAgICAgICAgICBXcmFwcyBhIHNlZ21lbnQgb2YgdGhlIFVSTCB0aGF0IGlzIG9wdGlvbmFsXG4gKiAtICogICAgICAgICAgICAgIENvbnN1bWVzIChub24tZ3JlZWR5KSBhbGwgY2hhcmFjdGVycyB1cCB0byB0aGUgbmV4dFxuICogICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgaW4gdGhlIHBhdHRlcm4sIG9yIHRvIHRoZSBlbmQgb2YgdGhlIFVSTCBpZlxuICogICAgICAgICAgICAgICAgICB0aGVyZSBpcyBub25lXG4gKiAtICoqICAgICAgICAgICAgIENvbnN1bWVzIChncmVlZHkpIGFsbCBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBuZXh0IGNoYXJhY3RlclxuICogICAgICAgICAgICAgICAgICBpbiB0aGUgcGF0dGVybiwgb3IgdG8gdGhlIGVuZCBvZiB0aGUgVVJMIGlmIHRoZXJlIGlzIG5vbmVcbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAtIHJlbWFpbmluZ1BhdGhuYW1lXG4gKiAtIHBhcmFtTmFtZXNcbiAqIC0gcGFyYW1WYWx1ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUGF0dGVybihwYXR0ZXJuLCBwYXRobmFtZSkge1xuICAvLyBNYWtlIGxlYWRpbmcgc2xhc2hlcyBjb25zaXN0ZW50IGJldHdlZW4gcGF0dGVybiBhbmQgcGF0aG5hbWUuXG4gIGlmIChwYXR0ZXJuLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgcGF0dGVybiA9IGAvJHtwYXR0ZXJufWBcbiAgfVxuICBpZiAocGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHtcbiAgICBwYXRobmFtZSA9IGAvJHtwYXRobmFtZX1gXG4gIH1cblxuICBsZXQgeyByZWdleHBTb3VyY2UsIHBhcmFtTmFtZXMsIHRva2VucyB9ID0gY29tcGlsZVBhdHRlcm4ocGF0dGVybilcblxuICByZWdleHBTb3VyY2UgKz0gJy8qJyAvLyBDYXB0dXJlIHBhdGggc2VwYXJhdG9yc1xuXG4gIC8vIFNwZWNpYWwtY2FzZSBwYXR0ZXJucyBsaWtlICcqJyBmb3IgY2F0Y2gtYWxsIHJvdXRlcy5cbiAgY29uc3QgY2FwdHVyZVJlbWFpbmluZyA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0gIT09ICcqJ1xuXG4gIGlmIChjYXB0dXJlUmVtYWluaW5nKSB7XG4gICAgLy8gVGhpcyB3aWxsIG1hdGNoIG5ld2xpbmVzIGluIHRoZSByZW1haW5pbmcgcGF0aC5cbiAgICByZWdleHBTb3VyY2UgKz0gJyhbXFxcXHNcXFxcU10qPyknXG4gIH1cblxuICBjb25zdCBtYXRjaCA9IHBhdGhuYW1lLm1hdGNoKG5ldyBSZWdFeHAoJ14nICsgcmVnZXhwU291cmNlICsgJyQnLCAnaScpKVxuXG4gIGxldCByZW1haW5pbmdQYXRobmFtZSwgcGFyYW1WYWx1ZXNcbiAgaWYgKG1hdGNoICE9IG51bGwpIHtcbiAgICBpZiAoY2FwdHVyZVJlbWFpbmluZykge1xuICAgICAgcmVtYWluaW5nUGF0aG5hbWUgPSBtYXRjaC5wb3AoKVxuICAgICAgY29uc3QgbWF0Y2hlZFBhdGggPVxuICAgICAgICBtYXRjaFswXS5zdWJzdHIoMCwgbWF0Y2hbMF0ubGVuZ3RoIC0gcmVtYWluaW5nUGF0aG5hbWUubGVuZ3RoKVxuXG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgbWF0Y2ggdGhlIGVudGlyZSBwYXRobmFtZSwgdGhlbiBtYWtlIHN1cmUgdGhhdCB0aGUgbWF0Y2hcbiAgICAgIC8vIHdlIGRpZCBnZXQgZW5kcyBhdCBhIHBhdGggc2VwYXJhdG9yIChwb3RlbnRpYWxseSB0aGUgb25lIHdlIGFkZGVkXG4gICAgICAvLyBhYm92ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLCBpZiB0aGUgYWN0dWFsIG1hdGNoIHdhcyBlbXB0eSkuXG4gICAgICBpZiAoXG4gICAgICAgIHJlbWFpbmluZ1BhdGhuYW1lICYmXG4gICAgICAgIG1hdGNoZWRQYXRoLmNoYXJBdChtYXRjaGVkUGF0aC5sZW5ndGggLSAxKSAhPT0gJy8nXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZW1haW5pbmdQYXRobmFtZTogbnVsbCxcbiAgICAgICAgICBwYXJhbU5hbWVzLFxuICAgICAgICAgIHBhcmFtVmFsdWVzOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhpcyBtYXRjaGVkIGF0IGFsbCwgdGhlbiB0aGUgbWF0Y2ggd2FzIHRoZSBlbnRpcmUgcGF0aG5hbWUuXG4gICAgICByZW1haW5pbmdQYXRobmFtZSA9ICcnXG4gICAgfVxuXG4gICAgcGFyYW1WYWx1ZXMgPSBtYXRjaC5zbGljZSgxKS5tYXAoXG4gICAgICB2ID0+IHYgIT0gbnVsbCA/IGRlY29kZVVSSUNvbXBvbmVudCh2KSA6IHZcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcmVtYWluaW5nUGF0aG5hbWUgPSBwYXJhbVZhbHVlcyA9IG51bGxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVtYWluaW5nUGF0aG5hbWUsXG4gICAgcGFyYW1OYW1lcyxcbiAgICBwYXJhbVZhbHVlc1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbU5hbWVzKHBhdHRlcm4pIHtcbiAgcmV0dXJuIGNvbXBpbGVQYXR0ZXJuKHBhdHRlcm4pLnBhcmFtTmFtZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmFtcyhwYXR0ZXJuLCBwYXRobmFtZSkge1xuICBjb25zdCB7IHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzIH0gPSBtYXRjaFBhdHRlcm4ocGF0dGVybiwgcGF0aG5hbWUpXG5cbiAgaWYgKHBhcmFtVmFsdWVzICE9IG51bGwpIHtcbiAgICByZXR1cm4gcGFyYW1OYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKG1lbW8sIHBhcmFtTmFtZSwgaW5kZXgpIHtcbiAgICAgIG1lbW9bcGFyYW1OYW1lXSA9IHBhcmFtVmFsdWVzW2luZGV4XVxuICAgICAgcmV0dXJuIG1lbW9cbiAgICB9LCB7fSlcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHZlcnNpb24gb2YgdGhlIGdpdmVuIHBhdHRlcm4gd2l0aCBwYXJhbXMgaW50ZXJwb2xhdGVkLiBUaHJvd3NcbiAqIGlmIHRoZXJlIGlzIGEgZHluYW1pYyBzZWdtZW50IG9mIHRoZSBwYXR0ZXJuIGZvciB3aGljaCB0aGVyZSBpcyBubyBwYXJhbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdHRlcm4ocGF0dGVybiwgcGFyYW1zKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fVxuXG4gIGNvbnN0IHsgdG9rZW5zIH0gPSBjb21waWxlUGF0dGVybihwYXR0ZXJuKVxuICBsZXQgcGFyZW5Db3VudCA9IDAsIHBhdGhuYW1lID0gJycsIHNwbGF0SW5kZXggPSAwXG5cbiAgbGV0IHRva2VuLCBwYXJhbU5hbWUsIHBhcmFtVmFsdWVcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRva2Vucy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHRva2VuID0gdG9rZW5zW2ldXG5cbiAgICBpZiAodG9rZW4gPT09ICcqJyB8fCB0b2tlbiA9PT0gJyoqJykge1xuICAgICAgcGFyYW1WYWx1ZSA9IEFycmF5LmlzQXJyYXkocGFyYW1zLnNwbGF0KSA/IHBhcmFtcy5zcGxhdFtzcGxhdEluZGV4KytdIDogcGFyYW1zLnNwbGF0XG5cbiAgICAgIGludmFyaWFudChcbiAgICAgICAgcGFyYW1WYWx1ZSAhPSBudWxsIHx8IHBhcmVuQ291bnQgPiAwLFxuICAgICAgICAnTWlzc2luZyBzcGxhdCAjJXMgZm9yIHBhdGggXCIlc1wiJyxcbiAgICAgICAgc3BsYXRJbmRleCwgcGF0dGVyblxuICAgICAgKVxuXG4gICAgICBpZiAocGFyYW1WYWx1ZSAhPSBudWxsKVxuICAgICAgICBwYXRobmFtZSArPSBlbmNvZGVVUkkocGFyYW1WYWx1ZSlcbiAgICB9IGVsc2UgaWYgKHRva2VuID09PSAnKCcpIHtcbiAgICAgIHBhcmVuQ291bnQgKz0gMVxuICAgIH0gZWxzZSBpZiAodG9rZW4gPT09ICcpJykge1xuICAgICAgcGFyZW5Db3VudCAtPSAxXG4gICAgfSBlbHNlIGlmICh0b2tlbi5jaGFyQXQoMCkgPT09ICc6Jykge1xuICAgICAgcGFyYW1OYW1lID0gdG9rZW4uc3Vic3RyaW5nKDEpXG4gICAgICBwYXJhbVZhbHVlID0gcGFyYW1zW3BhcmFtTmFtZV1cblxuICAgICAgaW52YXJpYW50KFxuICAgICAgICBwYXJhbVZhbHVlICE9IG51bGwgfHwgcGFyZW5Db3VudCA+IDAsXG4gICAgICAgICdNaXNzaW5nIFwiJXNcIiBwYXJhbWV0ZXIgZm9yIHBhdGggXCIlc1wiJyxcbiAgICAgICAgcGFyYW1OYW1lLCBwYXR0ZXJuXG4gICAgICApXG5cbiAgICAgIGlmIChwYXJhbVZhbHVlICE9IG51bGwpXG4gICAgICAgIHBhdGhuYW1lICs9IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXRobmFtZSArPSB0b2tlblxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXRobmFtZS5yZXBsYWNlKC9cXC8rL2csICcvJylcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9jb21tb24vcGF0dGVyblV0aWxzLmpzXG4gKiovIiwidmFyIHJlYWN0b3IgPSByZXF1aXJlKCdhcHAvcmVhY3RvcicpO1xucmVhY3Rvci5yZWdpc3RlclN0b3Jlcyh7XG4gICd0bHB0X2Nvbm5lY3Rpb24nOiByZXF1aXJlKCcuL3Rlcm1pbmFsL3Rlcm1TdG9yZScpLFxuICAndGxwdF91c2VyJzogcmVxdWlyZSgnLi91c2VyL3VzZXJTdG9yZScpLFxuICAndGxwdF9ub2Rlcyc6IHJlcXVpcmUoJy4vbm9kZXMvbm9kZVN0b3JlJyksXG4gICd0bHB0X2ludml0ZSc6IHJlcXVpcmUoJy4vaW52aXRlL2ludml0ZVN0b3JlJyksXG4gICd0bHB0X3Jlc3RfYXBpJzogcmVxdWlyZSgnLi9yZXN0QXBpL3Jlc3RBcGlTdG9yZScpXG59KTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL2luZGV4LmpzXG4gKiovIiwidmFyIHJlYWN0b3IgPSByZXF1aXJlKCdhcHAvcmVhY3RvcicpO1xudmFyIHsgVExQVF9SRUNFSVZFX1VTRVJfSU5WSVRFIH0gID0gcmVxdWlyZSgnLi9hY3Rpb25UeXBlcycpO1xudmFyIGFwaSA9IHJlcXVpcmUoJ2FwcC9zZXJ2aWNlcy9hcGknKTtcbnZhciBjZmcgPSByZXF1aXJlKCdhcHAvY29uZmlnJyk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZmV0Y2hJbnZpdGUoaW52aXRlVG9rZW4pe1xuICAgIHZhciBwYXRoID0gY2ZnLmFwaS5nZXRJbnZpdGVVcmwoaW52aXRlVG9rZW4pO1xuICAgIGFwaS5nZXQocGF0aCkuZG9uZShpbnZpdGU9PntcbiAgICAgIHJlYWN0b3IuZGlzcGF0Y2goVExQVF9SRUNFSVZFX1VTRVJfSU5WSVRFLCBpbnZpdGUpO1xuICAgIH0pO1xuICB9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy9pbnZpdGUvYWN0aW9ucy5qc1xuICoqLyIsIi8qZXNsaW50IG5vLXVuZGVmOiAwLCAgbm8tdW51c2VkLXZhcnM6IDAsIG5vLWRlYnVnZ2VyOjAqL1xuXG52YXIge1RSWUlOR19UT19TSUdOX1VQfSA9IHJlcXVpcmUoJ2FwcC9tb2R1bGVzL3Jlc3RBcGkvY29uc3RhbnRzJyk7XG5cbmNvbnN0IGludml0ZSA9IFsgWyd0bHB0X2ludml0ZSddLCAoaW52aXRlKSA9PiB7XG4gIHJldHVybiBpbnZpdGU7XG4gfVxuXTtcblxuY29uc3QgYXR0ZW1wID0gWyBbJ3RscHRfcmVzdF9hcGknLCBUUllJTkdfVE9fU0lHTl9VUF0sIChhdHRlbXApID0+IHtcbiAgdmFyIGRlZmF1bHRPYmogPSB7XG4gICAgaXNQcm9jZXNzaW5nOiBmYWxzZSxcbiAgICBpc0Vycm9yOiBmYWxzZSxcbiAgICBpc1N1Y2Nlc3M6IGZhbHNlLFxuICAgIG1lc3NhZ2U6ICcnXG4gIH1cblxuICByZXR1cm4gYXR0ZW1wID8gYXR0ZW1wLnRvSlMoKSA6IGRlZmF1bHRPYmo7XG4gIFxuIH1cbl07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW52aXRlLFxuICBhdHRlbXBcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL2ludml0ZS9nZXR0ZXJzLmpzXG4gKiovIiwibW9kdWxlLmV4cG9ydHMuZ2V0dGVycyA9IHJlcXVpcmUoJy4vZ2V0dGVycycpO1xubW9kdWxlLmV4cG9ydHMuYWN0aW9ucyA9IHJlcXVpcmUoJy4vYWN0aW9ucycpO1xubW9kdWxlLmV4cG9ydHMubm9kZVN0b3JlID0gcmVxdWlyZSgnLi9pbnZpdGVTdG9yZScpO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvaW52aXRlL2luZGV4LmpzXG4gKiovIiwidmFyIHJlYWN0b3IgPSByZXF1aXJlKCdhcHAvcmVhY3RvcicpO1xudmFyIHsgVExQVF9SRUNFSVZFX05PREVTIH0gID0gcmVxdWlyZSgnLi9hY3Rpb25UeXBlcycpO1xudmFyIGFwaSA9IHJlcXVpcmUoJ2FwcC9zZXJ2aWNlcy9hcGknKTtcbnZhciBjZmcgPSByZXF1aXJlKCdhcHAvY29uZmlnJyk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZmV0Y2hOb2Rlcygpe1xuICAgIGFwaS5nZXQoY2ZnLmFwaS5ub2Rlc1BhdGgpLmRvbmUoZGF0YT0+e1xuICAgICAgcmVhY3Rvci5kaXNwYXRjaChUTFBUX1JFQ0VJVkVfTk9ERVMsIGRhdGEubm9kZXMpO1xuICAgIH0pO1xuICB9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy9ub2Rlcy9hY3Rpb25zLmpzXG4gKiovIiwiLy92YXIgc29ydCA9IHJlcXVpcmUoJ2FwcC9jb21tb24vc29ydCcpO1xuXG5jb25zdCBub2RlTGlzdFZpZXcgPSBbIFsndGxwdF9ub2RlcyddLCAobm9kZXMpID0+e1xuICAgIHJldHVybiBub2Rlcy5tYXAoKGl0ZW0pPT57XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YWdzOiBnZXRUYWdzKGl0ZW0uZ2V0KCdub2RlJykpLFxuICAgICAgICBpcDogaXRlbS5nZXRJbihbJ25vZGUnLCAnYWRkciddKVxuICAgICAgfVxuICAgIH0pLnRvSlMoKTtcbiB9XG5dO1xuXG5mdW5jdGlvbiBnZXRUYWdzKG5vZGUpe1xuICB2YXIgYWxsTGFiZWxzID0gW107XG4gIHZhciBsYWJlbHMgPSBub2RlLmdldCgnbGFiZWxzJyk7XG5cbiAgaWYobGFiZWxzKXtcbiAgICBsYWJlbHMuZW50cnlTZXEoKS50b0FycmF5KCkuZm9yRWFjaChpdGVtPT57XG4gICAgICBhbGxMYWJlbHMucHVzaCh7XG4gICAgICAgIHJvbGU6IGl0ZW1bMF0sXG4gICAgICAgIHZhbHVlOiBpdGVtWzFdXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxhYmVscyA9IG5vZGUuZ2V0KCdjbWRfbGFiZWxzJyk7XG5cbiAgaWYobGFiZWxzKXtcbiAgICBsYWJlbHMuZW50cnlTZXEoKS50b0FycmF5KCkuZm9yRWFjaChpdGVtPT57XG4gICAgICBhbGxMYWJlbHMucHVzaCh7XG4gICAgICAgIHJvbGU6IGl0ZW1bMF0sXG4gICAgICAgIHZhbHVlOiBpdGVtWzFdLmdldCgncmVzdWx0JyksXG4gICAgICAgIHRvb2x0aXA6IGl0ZW1bMV0uZ2V0KCdjb21tYW5kJylcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGFsbExhYmVscztcbn1cblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5vZGVMaXN0Vmlld1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvbm9kZXMvZ2V0dGVycy5qc1xuICoqLyIsIm1vZHVsZS5leHBvcnRzLmdldHRlcnMgPSByZXF1aXJlKCcuL2dldHRlcnMnKTtcbm1vZHVsZS5leHBvcnRzLmFjdGlvbnMgPSByZXF1aXJlKCcuL2FjdGlvbnMnKTtcbm1vZHVsZS5leHBvcnRzLm5vZGVTdG9yZSA9IHJlcXVpcmUoJy4vbm9kZVN0b3JlJyk7XG5cbi8vIG5vZGVzOiBbe1wiaWRcIjpcIngyMjBcIixcImFkZHJcIjpcIjAuMC4wLjA6MzAyMlwiLFwiaG9zdG5hbWVcIjpcIngyMjBcIixcImxhYmVsc1wiOm51bGwsXCJjbWRfbGFiZWxzXCI6bnVsbH1dXG5cblxuLy8gc2Vzc2lvbnM6IFt7XCJpZFwiOlwiMDc2MzA2MzYtYmIzZC00MGUxLWIwODYtNjBiMmNhZTIxYWM0XCIsXCJwYXJ0aWVzXCI6W3tcImlkXCI6XCI4OWY3NjJhMy03NDI5LTRjN2EtYTkxMy03NjY0OTNmZTdjOGFcIixcInNpdGVcIjpcIjEyNy4wLjAuMTozNzUxNFwiLFwidXNlclwiOlwiYWtvbnRzZXZveVwiLFwic2VydmVyX2FkZHJcIjpcIjAuMC4wLjA6MzAyMlwiLFwibGFzdF9hY3RpdmVcIjpcIjIwMTYtMDItMjJUMTQ6Mzk6MjAuOTMxMjA1MzUtMDU6MDBcIn1dfV1cblxuLypcbmxldCBUb2RvUmVjb3JkID0gSW1tdXRhYmxlLlJlY29yZCh7XG4gICAgaWQ6IDAsXG4gICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgY29tcGxldGVkOiBmYWxzZVxufSk7XG4qL1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvbm9kZXMvaW5kZXguanNcbiAqKi8iLCJ2YXIgcmVhY3RvciA9IHJlcXVpcmUoJ2FwcC9yZWFjdG9yJyk7XG5cbnZhciB7XG4gIFRMUFRfUkVTVF9BUElfU1RBUlQsXG4gIFRMUFRfUkVTVF9BUElfU1VDQ0VTUyxcbiAgVExQVF9SRVNUX0FQSV9GQUlMIH0gPSByZXF1aXJlKCcuL2FjdGlvblR5cGVzJyk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcblxuICBzdGFydChyZXFUeXBlKXtcbiAgICByZWFjdG9yLmRpc3BhdGNoKFRMUFRfUkVTVF9BUElfU1RBUlQsIHt0eXBlOiByZXFUeXBlfSk7XG4gIH0sXG5cbiAgZmFpbChyZXFUeXBlLCBtZXNzYWdlKXtcbiAgICByZWFjdG9yLmRpc3BhdGNoKFRMUFRfUkVTVF9BUElfRkFJTCwgIHt0eXBlOiByZXFUeXBlLCBtZXNzYWdlfSk7XG4gIH0sXG5cbiAgc3VjY2VzcyhyZXFUeXBlKXtcbiAgICByZWFjdG9yLmRpc3BhdGNoKFRMUFRfUkVTVF9BUElfU1VDQ0VTUywge3R5cGU6IHJlcVR5cGV9KTtcbiAgfVxuXG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy9yZXN0QXBpL2FjdGlvbnMuanNcbiAqKi8iLCJ2YXIgeyBTdG9yZSwgdG9JbW11dGFibGUgfSA9IHJlcXVpcmUoJ251Y2xlYXItanMnKTtcbnZhciB7XG4gIFRMUFRfUkVTVF9BUElfU1RBUlQsXG4gIFRMUFRfUkVTVF9BUElfU1VDQ0VTUyxcbiAgVExQVF9SRVNUX0FQSV9GQUlMIH0gPSByZXF1aXJlKCcuL2FjdGlvblR5cGVzJyk7XG5cbmV4cG9ydCBkZWZhdWx0IFN0b3JlKHtcbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB0b0ltbXV0YWJsZSh7fSk7XG4gIH0sXG5cbiAgaW5pdGlhbGl6ZSgpIHtcbiAgICB0aGlzLm9uKFRMUFRfUkVTVF9BUElfU1RBUlQsIHN0YXJ0KTtcbiAgICB0aGlzLm9uKFRMUFRfUkVTVF9BUElfRkFJTCwgZmFpbCk7XG4gICAgdGhpcy5vbihUTFBUX1JFU1RfQVBJX1NVQ0NFU1MsIHN1Y2Nlc3MpO1xuICB9XG59KVxuXG5mdW5jdGlvbiBzdGFydChzdGF0ZSwgcmVxdWVzdCl7XG4gIHJldHVybiBzdGF0ZS5zZXQocmVxdWVzdC50eXBlLCB0b0ltbXV0YWJsZSh7aXNQcm9jZXNzaW5nOiB0cnVlfSkpO1xufVxuXG5mdW5jdGlvbiBmYWlsKHN0YXRlLCByZXF1ZXN0KXtcbiAgcmV0dXJuIHN0YXRlLnNldChyZXF1ZXN0LnR5cGUsIHRvSW1tdXRhYmxlKHtpc0ZhaWxlZDogdHJ1ZSwgbWVzc2FnZTogcmVxdWVzdC5tZXNzYWdlfSkpO1xufVxuXG5mdW5jdGlvbiBzdWNjZXNzKHN0YXRlLCByZXF1ZXN0KXtcbiAgcmV0dXJuIHN0YXRlLnNldChyZXF1ZXN0LnR5cGUsIHRvSW1tdXRhYmxlKHtpc1N1Y2Nlc3M6IHRydWV9KSk7XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy9yZXN0QXBpL3Jlc3RBcGlTdG9yZS5qc1xuICoqLyIsInZhciByZWFjdG9yID0gcmVxdWlyZSgnYXBwL3JlYWN0b3InKTtcbnZhciB7IFRMUFRfUkVDRUlWRV9URVJNIH0gID0gcmVxdWlyZSgnLi9hY3Rpb25UeXBlcycpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbm5lY3QoYWRkciwgbG9naW4pe1xuICAgIC8qXG4gICAgKiAgIHtcbiAgICAqICAgXCJhZGRyXCI6IFwiMTI3LjAuMC4xOjUwMDBcIixcbiAgICAqICAgXCJsb2dpblwiOiBcImFkbWluXCIsXG4gICAgKiAgIFwidGVybVwiOiB7XCJoXCI6IDEyMCwgXCJ3XCI6IDEwMH0sXG4gICAgKiAgIFwic2lkXCI6IFwiMTIzXCJcbiAgICAqICB9XG4gICAgKi9cbiAgICByZWFjdG9yLmRpc3BhdGNoKFRMUFRfUkVDRUlWRV9URVJNLCB7YWRkciwgbG9naW59KTtcbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvdGVybWluYWwvYWN0aW9ucy5qc1xuICoqLyIsImNvbnN0IGNvbm5TZXR0aW5ncyA9IFsgWyd0bHB0X2Nvbm5lY3Rpb24nXSwgKHNldHRpbmdzKSA9PiB7XG4gICAgaWYoIXNldHRpbmdzKXtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciB7YWRkciwgbG9naW4gfSA9IHNldHRpbmdzLnRvSlMoKTtcbiAgICByZXR1cm4ge2FkZHIsIGxvZ2luIH1cbiAgfVxuXTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb25uU2V0dGluZ3Ncbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL3Rlcm1pbmFsL2dldHRlcnMuanNcbiAqKi8iLCJtb2R1bGUuZXhwb3J0cy5nZXR0ZXJzID0gcmVxdWlyZSgnLi9nZXR0ZXJzJyk7XG5tb2R1bGUuZXhwb3J0cy5hY3Rpb25zID0gcmVxdWlyZSgnLi9hY3Rpb25zJyk7XG5tb2R1bGUuZXhwb3J0cy5ub2RlU3RvcmUgPSByZXF1aXJlKCcuL3Rlcm1TdG9yZScpO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvdGVybWluYWwvaW5kZXguanNcbiAqKi8iLCJ2YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xudmFyIE5hdkxlZnRCYXIgPSByZXF1aXJlKCcuL25hdkxlZnRCYXInKTtcbnZhciBjZmcgPSByZXF1aXJlKCdhcHAvY29uZmlnJyk7XG5cbnZhciBBcHAgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3J2LXRscHRcIj5cbiAgICAgICAgPE5hdkxlZnRCYXIvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgIDxuYXYgY2xhc3NOYW1lPVwiXCIgcm9sZT1cIm5hdmlnYXRpb25cIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206IDAgfX0+XG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwibmF2IG5hdmJhci10b3AtbGlua3MgbmF2YmFyLXJpZ2h0XCI+XG4gICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtLXItc20gdGV4dC1tdXRlZCB3ZWxjb21lLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgIFdlbGNvbWUgdG8gR3Jhdml0YXRpb25hbCBQb3J0YWxcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICA8YSBocmVmPXtjZmcucm91dGVzLmxvZ291dH0+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS1zaWduLW91dFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIExvZyBvdXRcbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvbmF2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncnYtcGFnZVwiPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn0pXG5cbm1vZHVsZS5leHBvcnRzID0gQXBwO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL2NvbXBvbmVudHMvYXBwLmpzeFxuICoqLyIsIm1vZHVsZS5leHBvcnRzLkFwcCA9IHJlcXVpcmUoJy4vYXBwLmpzeCcpO1xubW9kdWxlLmV4cG9ydHMuTG9naW4gPSByZXF1aXJlKCcuL2xvZ2luLmpzeCcpO1xubW9kdWxlLmV4cG9ydHMuTmV3VXNlciA9IHJlcXVpcmUoJy4vbmV3VXNlci5qc3gnKTtcbm1vZHVsZS5leHBvcnRzLk5vZGVzID0gcmVxdWlyZSgnLi9ub2Rlcy9tYWluLmpzeCcpO1xubW9kdWxlLmV4cG9ydHMuU2Vzc2lvbnMgPSByZXF1aXJlKCcuL3Nlc3Npb25zL21haW4uanN4Jyk7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvY29tcG9uZW50cy9pbmRleC5qc3hcbiAqKi8iLCJ2YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xudmFyICQgPSByZXF1aXJlKCdqUXVlcnknKTtcbnZhciByZWFjdG9yID0gcmVxdWlyZSgnYXBwL3JlYWN0b3InKTtcbnZhciBMaW5rZWRTdGF0ZU1peGluID0gcmVxdWlyZSgncmVhY3QtYWRkb25zLWxpbmtlZC1zdGF0ZS1taXhpbicpO1xudmFyIHthY3Rpb25zfSA9IHJlcXVpcmUoJ2FwcC9tb2R1bGVzL3VzZXInKTtcbnZhciBHb29nbGVBdXRoSW5mbyA9IHJlcXVpcmUoJy4vZ29vZ2xlQXV0aCcpO1xudmFyIExvZ2luSW5wdXRGb3JtID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXG4gIG1peGluczogW0xpbmtlZFN0YXRlTWl4aW5dLFxuXG4gIGdldEluaXRpYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXNlcjogJycsXG4gICAgICBwYXNzd29yZDogJycsXG4gICAgICB0b2tlbjogJydcbiAgICB9XG4gIH0sXG5cbiAgb25DbGljazogZnVuY3Rpb24oZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgIGFjdGlvbnMubG9naW4oeyAuLi50aGlzLnN0YXRlfSwgJy93ZWInKTtcbiAgICB9XG4gIH0sXG5cbiAgaXNWYWxpZDogZnVuY3Rpb24oKSB7XG4gICAgdmFyICRmb3JtID0gJCh0aGlzLnJlZnMuZm9ybSk7XG4gICAgcmV0dXJuICRmb3JtLmxlbmd0aCA9PT0gMCB8fCAkZm9ybS52YWxpZCgpO1xuICB9LFxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGZvcm0gcmVmPVwiZm9ybVwiIGNsYXNzTmFtZT1cImdydi1sb2dpbi1pbnB1dC1mb3JtXCI+XG4gICAgICAgIDxoMz4gV2VsY29tZSB0byBUZWxlcG9ydCA8L2gzPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGlucHV0IHZhbHVlTGluaz17dGhpcy5saW5rU3RhdGUoJ3VzZXInKX0gY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sIHJlcXVpcmVkXCIgcGxhY2Vob2xkZXI9XCJVc2VyIG5hbWVcIiBuYW1lPVwidXNlck5hbWVcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGlucHV0IHZhbHVlTGluaz17dGhpcy5saW5rU3RhdGUoJ3Bhc3N3b3JkJyl9IHR5cGU9XCJwYXNzd29yZFwiIG5hbWU9XCJwYXNzd29yZFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbCByZXF1aXJlZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIi8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8aW5wdXQgdmFsdWVMaW5rPXt0aGlzLmxpbmtTdGF0ZSgndG9rZW4nKX0gY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sIHJlcXVpcmVkXCIgbmFtZT1cInRva2VuXCIgcGxhY2Vob2xkZXI9XCJUd28gZmFjdG9yIHRva2VuIChHb29nbGUgQXV0aGVudGljYXRvcilcIi8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5IGJsb2NrIGZ1bGwtd2lkdGggbS1iXCIgb25DbGljaz17dGhpcy5vbkNsaWNrfT5Mb2dpbjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgICApO1xuICB9XG59KVxuXG52YXIgTG9naW4gPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cbiAgbWl4aW5zOiBbcmVhY3Rvci5SZWFjdE1peGluXSxcblxuICBnZXREYXRhQmluZGluZ3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgLy8gICAgdXNlclJlcXVlc3Q6IGdldHRlcnMudXNlclJlcXVlc3RcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXNQcm9jZXNzaW5nID0gZmFsc2U7Ly90aGlzLnN0YXRlLnVzZXJSZXF1ZXN0LmdldCgnaXNMb2FkaW5nJyk7XG4gICAgdmFyIGlzRXJyb3IgPSBmYWxzZTsvL3RoaXMuc3RhdGUudXNlclJlcXVlc3QuZ2V0KCdpc0Vycm9yJyk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJncnYtbG9naW4gdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncnYtbG9nby10cHJ0XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3J2LWNvbnRlbnQgZ3J2LWZsZXhcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgPExvZ2luSW5wdXRGb3JtLz5cbiAgICAgICAgICAgIDxHb29nbGVBdXRoSW5mby8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi1sb2dpbi1pbmZvXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXF1ZXN0aW9uXCI+PC9pPlxuICAgICAgICAgICAgICA8c3Ryb25nPk5ldyBBY2NvdW50IG9yIGZvcmdvdCBwYXNzd29yZD88L3N0cm9uZz5cbiAgICAgICAgICAgICAgPGRpdj5Bc2sgZm9yIGFzc2lzdGFuY2UgZnJvbSB5b3VyIENvbXBhbnkgYWRtaW5pc3RyYXRvcjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9naW47XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvY29tcG9uZW50cy9sb2dpbi5qc3hcbiAqKi8iLCJ2YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xudmFyIHsgUm91dGVyLCBJbmRleExpbmssIEhpc3RvcnkgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlcicpO1xudmFyIGNmZyA9IHJlcXVpcmUoJ2FwcC9jb25maWcnKTtcblxudmFyIG1lbnVJdGVtcyA9IFtcbiAge2ljb246ICdmYSBmYSBmYS1zaXRlbWFwJywgdG86IGNmZy5yb3V0ZXMubm9kZXMsIHRpdGxlOiAnTm9kZXMnfSxcbiAge2ljb246ICdmYSBmYS1oZGQtbycsIHRvOiBjZmcucm91dGVzLnNlc3Npb25zLCB0aXRsZTogJ1Nlc3Npb25zJ31cbl07XG5cbnZhciBOYXZMZWZ0QmFyID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXG4gIHJlbmRlcjogZnVuY3Rpb24oKXtcbiAgICB2YXIgaXRlbXMgPSBtZW51SXRlbXMubWFwKChpLCBpbmRleCk9PntcbiAgICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLmNvbnRleHQucm91dGVyLmlzQWN0aXZlKGkudG8pID8gJ2FjdGl2ZScgOiAnJztcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxsaSBrZXk9e2luZGV4fSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAgPEluZGV4TGluayB0bz17aS50b30+XG4gICAgICAgICAgICA8aSBjbGFzc05hbWU9e2kuaWNvbn0gdGl0bGU9e2kudGl0bGV9Lz5cbiAgICAgICAgICA8L0luZGV4TGluaz5cbiAgICAgICAgPC9saT5cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPG5hdiBjbGFzc05hbWU9Jycgcm9sZT0nbmF2aWdhdGlvbicgc3R5bGU9e3t3aWR0aDogJzYwcHgnLCBmbG9hdDogJ2xlZnQnLCBwb3NpdGlvbjogJ2Fic29sdXRlJ319PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nJz5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPSduYXYgMW1ldGlzbWVudScgaWQ9J3NpZGUtbWVudSc+XG4gICAgICAgICAgICB7aXRlbXN9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25hdj5cbiAgICApO1xuICB9XG59KTtcblxuTmF2TGVmdEJhci5jb250ZXh0VHlwZXMgPSB7XG4gIHJvdXRlcjogUmVhY3QuUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTmF2TGVmdEJhcjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9jb21wb25lbnRzL25hdkxlZnRCYXIuanN4XG4gKiovIiwidmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciAkID0gcmVxdWlyZSgnalF1ZXJ5Jyk7XG52YXIgcmVhY3RvciA9IHJlcXVpcmUoJ2FwcC9yZWFjdG9yJyk7XG52YXIge2FjdGlvbnMsIGdldHRlcnN9ID0gcmVxdWlyZSgnYXBwL21vZHVsZXMvaW52aXRlJyk7XG52YXIgdXNlck1vZHVsZSA9IHJlcXVpcmUoJ2FwcC9tb2R1bGVzL3VzZXInKTtcbnZhciBMaW5rZWRTdGF0ZU1peGluID0gcmVxdWlyZSgncmVhY3QtYWRkb25zLWxpbmtlZC1zdGF0ZS1taXhpbicpO1xudmFyIEdvb2dsZUF1dGhJbmZvID0gcmVxdWlyZSgnLi9nb29nbGVBdXRoJyk7XG5cbnZhciBJbnZpdGVJbnB1dEZvcm0gPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cbiAgbWl4aW5zOiBbTGlua2VkU3RhdGVNaXhpbl0sXG5cbiAgY29tcG9uZW50RGlkTW91bnQoKXtcbiAgICAkKHRoaXMucmVmcy5mb3JtKS52YWxpZGF0ZSh7XG4gICAgICBydWxlczp7XG4gICAgICAgIHBhc3N3b3JkOntcbiAgICAgICAgICBtaW5sZW5ndGg6IDUsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcGFzc3dvcmRDb25maXJtZWQ6e1xuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGVxdWFsVG86IHRoaXMucmVmcy5wYXNzd29yZFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBtZXNzYWdlczoge1xuICBcdFx0XHRwYXNzd29yZENvbmZpcm1lZDoge1xuICBcdFx0XHRcdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCdFbnRlciBhdCBsZWFzdCB7MH0gY2hhcmFjdGVycycpLFxuICBcdFx0XHRcdGVxdWFsVG86ICdFbnRlciB0aGUgc2FtZSBwYXNzd29yZCBhcyBhYm92ZSdcbiAgXHRcdFx0fVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLnByb3BzLmludml0ZS51c2VyLFxuICAgICAgcHN3OiAnJyxcbiAgICAgIHBzd0NvbmZpcm1lZDogJycsXG4gICAgICB0b2tlbjogJydcbiAgICB9XG4gIH0sXG5cbiAgb25DbGljayhlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgdXNlck1vZHVsZS5hY3Rpb25zLnNpZ25VcCh7XG4gICAgICAgIG5hbWU6IHRoaXMuc3RhdGUubmFtZSxcbiAgICAgICAgcHN3OiB0aGlzLnN0YXRlLnBzdyxcbiAgICAgICAgdG9rZW46IHRoaXMuc3RhdGUudG9rZW4sXG4gICAgICAgIGludml0ZVRva2VuOiB0aGlzLnByb3BzLmludml0ZS5pbnZpdGVfdG9rZW59KTtcbiAgICB9XG4gIH0sXG5cbiAgaXNWYWxpZCgpIHtcbiAgICB2YXIgJGZvcm0gPSAkKHRoaXMucmVmcy5mb3JtKTtcbiAgICByZXR1cm4gJGZvcm0ubGVuZ3RoID09PSAwIHx8ICRmb3JtLnZhbGlkKCk7XG4gIH0sXG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Zm9ybSByZWY9XCJmb3JtXCIgY2xhc3NOYW1lPVwiZ3J2LWludml0ZS1pbnB1dC1mb3JtXCI+XG4gICAgICAgIDxoMz4gR2V0IHN0YXJ0ZWQgd2l0aCBUZWxlcG9ydCA8L2gzPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHZhbHVlTGluaz17dGhpcy5saW5rU3RhdGUoJ25hbWUnKX1cbiAgICAgICAgICAgICAgbmFtZT1cInVzZXJOYW1lXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJVc2VyIG5hbWVcIi8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdmFsdWVMaW5rPXt0aGlzLmxpbmtTdGF0ZSgncHN3Jyl9XG4gICAgICAgICAgICAgIHJlZj1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgbmFtZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwIGdydi1cIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB2YWx1ZUxpbms9e3RoaXMubGlua1N0YXRlKCdwc3dDb25maXJtZWQnKX1cbiAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgbmFtZT1cInBhc3N3b3JkQ29uZmlybWVkXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQYXNzd29yZCBjb25maXJtXCIvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG5hbWU9XCJ0b2tlblwiXG4gICAgICAgICAgICAgIHZhbHVlTGluaz17dGhpcy5saW5rU3RhdGUoJ3Rva2VuJyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHdvIGZhY3RvciB0b2tlbiAoR29vZ2xlIEF1dGhlbnRpY2F0b3IpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBkaXNhYmxlZD17dGhpcy5wcm9wcy5hdHRlbXAuaXNQcm9jZXNzaW5nfSBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgYmxvY2sgZnVsbC13aWR0aCBtLWJcIiBvbkNsaWNrPXt0aGlzLm9uQ2xpY2t9ID5TaWduIHVwPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgICk7XG4gIH1cbn0pXG5cbnZhciBJbnZpdGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cbiAgbWl4aW5zOiBbcmVhY3Rvci5SZWFjdE1peGluXSxcblxuICBnZXREYXRhQmluZGluZ3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGludml0ZTogZ2V0dGVycy5pbnZpdGUsXG4gICAgICBhdHRlbXA6IGdldHRlcnMuYXR0ZW1wXG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50KCl7XG4gICAgYWN0aW9ucy5mZXRjaEludml0ZSh0aGlzLnByb3BzLnBhcmFtcy5pbnZpdGVUb2tlbik7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICBpZighdGhpcy5zdGF0ZS5pbnZpdGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi1pbnZpdGUgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncnYtbG9nby10cHJ0XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3J2LWNvbnRlbnQgZ3J2LWZsZXhcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgPEludml0ZUlucHV0Rm9ybSBhdHRlbXA9e3RoaXMuc3RhdGUuYXR0ZW1wfSBpbnZpdGU9e3RoaXMuc3RhdGUuaW52aXRlLnRvSlMoKX0vPlxuICAgICAgICAgICAgPEdvb2dsZUF1dGhJbmZvLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgPGg0PlNjYW4gYmFyIGNvZGUgZm9yIGF1dGggdG9rZW4gPGJyLz4gPHNtYWxsPlNjYW4gYmVsb3cgdG8gZ2VuZXJhdGUgeW91ciB0d28gZmFjdG9yIHRva2VuPC9zbWFsbD48L2g0PlxuICAgICAgICAgICAgPGltZyBjbGFzc05hbWU9XCJpbWctdGh1bWJuYWlsXCIgc3JjPXsgYGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke3RoaXMuc3RhdGUuaW52aXRlLmdldCgncXInKX1gIH0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnZpdGU7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvY29tcG9uZW50cy9uZXdVc2VyLmpzeFxuICoqLyIsInZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgcmVhY3RvciA9IHJlcXVpcmUoJ2FwcC9yZWFjdG9yJyk7XG52YXIge2dldHRlcnMsIGFjdGlvbnN9ID0gcmVxdWlyZSgnYXBwL21vZHVsZXMvbm9kZXMnKTtcbnZhciB1c2VyR2V0dGVycyA9IHJlcXVpcmUoJ2FwcC9tb2R1bGVzL3VzZXIvZ2V0dGVycycpO1xudmFyIHRlcm1Nb2R1bGUgPSByZXF1aXJlKCdhcHAvbW9kdWxlcy90ZXJtaW5hbC8nKTtcbnZhciB7VGFibGUsIENvbHVtbiwgQ2VsbH0gPSByZXF1aXJlKCdhcHAvY29tcG9uZW50cy90YWJsZS5qc3gnKTtcblxudmFyIFRlcm1pbmFsQm94ID0gcmVxdWlyZSgnLi8uLi90ZXJtaW5hbC5qc3gnKTtcblxuY29uc3QgVGV4dENlbGwgPSAoe3Jvd0luZGV4LCBkYXRhLCBjb2x1bW5LZXksIC4uLnByb3BzfSkgPT4gKFxuICA8Q2VsbCB7Li4ucHJvcHN9PlxuICAgIHtkYXRhW3Jvd0luZGV4XVtjb2x1bW5LZXldfVxuICA8L0NlbGw+XG4pO1xuXG5jb25zdCBUYWdDZWxsID0gKHtyb3dJbmRleCwgZGF0YSwgY29sdW1uS2V5LCAuLi5wcm9wc30pID0+IChcbiAgPENlbGwgey4uLnByb3BzfT5cbiAgICB7IGRhdGFbcm93SW5kZXhdLnRhZ3MubWFwKChpdGVtLCBpbmRleCkgPT5cbiAgICAgICg8c3BhbiBrZXk9e2luZGV4fSBjbGFzc05hbWU9XCJsYWJlbCBsYWJlbC1kZWZhdWx0XCI+XG4gICAgICAgIHtpdGVtLnJvbGV9IDxsaSBjbGFzc05hbWU9XCJmYSBmYS1sb25nLWFycm93LXJpZ2h0XCI+PC9saT5cbiAgICAgICAge2l0ZW0udmFsdWV9XG4gICAgICA8L3NwYW4+KVxuICAgICkgfVxuICA8L0NlbGw+XG4pO1xuXG5cbmZ1bmN0aW9uIGNvbm5lY3Qoc2VydmVyLCByb2xlKXtcbiAgdGVybU1vZHVsZS5hY3Rpb25zLmNvbm5lY3Qoc2VydmVyLmlwLCByb2xlKTtcbn1cblxuY29uc3QgTG9naW5DZWxsID0gKHt1c2VyLCByb3dJbmRleCwgZGF0YSwgLi4ucHJvcHN9KSA9PiB7XG4gIGlmKCF1c2VyIHx8IHVzZXIubG9naW5zLmxlbmd0aCA9PT0gMCl7XG4gICAgcmV0dXJuIDxDZWxsIHsuLi5wcm9wc30gLz47XG4gIH1cblxuICB2YXIgJGxpcyA9IFtdO1xuXG4gIGZvcih2YXIgaSA9IDA7IGkgPCB1c2VyLmxvZ2lucy5sZW5ndGg7IGkrKyl7XG4gICAgJGxpcy5wdXNoKDxsaSBrZXk9e2l9PjxhIGhyZWY9XCIjXCIgdGFyZ2V0PVwiX2JsYW5rXCIgb25DbGljaz17Y29ubmVjdC5iaW5kKG51bGwsIGRhdGFbcm93SW5kZXhdLCB1c2VyLmxvZ2luc1tpXSl9Pnt1c2VyLmxvZ2luc1tpXX08L2E+PC9saT4pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q2VsbCB7Li4ucHJvcHN9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJidG4tZ3JvdXBcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17Y29ubmVjdC5iaW5kKG51bGwsIGRhdGFbcm93SW5kZXhdLCB1c2VyLmxvZ2luc1swXSl9IGNsYXNzTmFtZT1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIj57dXNlci5sb2dpbnNbMF19PC9idXR0b24+XG4gICAgICAgIHtcbiAgICAgICAgICAkbGlzLmxlbmd0aCA+IDEgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIGRyb3Bkb3duLXRvZ2dsZVwiIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2FyZXRcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwiZHJvcGRvd24tbWVudVwiPlxuICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPVwiI1wiIHRhcmdldD1cIl9ibGFua1wiPkxvZ3M8L2E+PC9saT5cbiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cIiNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5Mb2dzPC9hPjwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvQ2VsbD5cbiAgKVxufTtcblxudmFyIE5vZGVzID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXG4gIG1peGluczogW3JlYWN0b3IuUmVhY3RNaXhpbl0sXG5cbiAgZ2V0RGF0YUJpbmRpbmdzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBub2RlUmVjb3JkczogZ2V0dGVycy5ub2RlTGlzdFZpZXcsXG4gICAgICB1c2VyOiB1c2VyR2V0dGVycy51c2VyXG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50KCl7XG4gICAgYWN0aW9ucy5mZXRjaE5vZGVzKCk7XG4gIH0sXG5cbiAgcmVuZGVyUm93cygpe1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7ICAgIFxuICAgIHZhciBkYXRhID0gdGhpcy5zdGF0ZS5ub2RlUmVjb3JkcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJncnYtbm9kZXNcIj5cbiAgICAgICAgPGgxPiBOb2RlcyA8L2gxPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlwiPlxuICAgICAgICAgICAgICA8VGFibGUgcm93Q291bnQ9e2RhdGEubGVuZ3RofSBjbGFzc05hbWU9XCJncnYtbm9kZXMtdGFibGVcIj5cbiAgICAgICAgICAgICAgICA8Q29sdW1uXG4gICAgICAgICAgICAgICAgICBjb2x1bW5LZXk9XCJjb3VudFwiXG4gICAgICAgICAgICAgICAgICBoZWFkZXI9ezxDZWxsPiBTZXNzaW9ucyA8L0NlbGw+IH1cbiAgICAgICAgICAgICAgICAgIGNlbGw9ezxUZXh0Q2VsbCBkYXRhPXtkYXRhfS8+IH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxDb2x1bW5cbiAgICAgICAgICAgICAgICAgIGNvbHVtbktleT1cImlwXCJcbiAgICAgICAgICAgICAgICAgIGhlYWRlcj17PENlbGw+IE5vZGUgPC9DZWxsPiB9XG4gICAgICAgICAgICAgICAgICBjZWxsPXs8VGV4dENlbGwgZGF0YT17ZGF0YX0vPiB9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Q29sdW1uXG4gICAgICAgICAgICAgICAgICBjb2x1bW5LZXk9XCJ0YWdzXCJcbiAgICAgICAgICAgICAgICAgIGhlYWRlcj17PENlbGw+PC9DZWxsPiB9XG4gICAgICAgICAgICAgICAgICBjZWxsPXs8VGFnQ2VsbCBkYXRhPXtkYXRhfS8+IH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxDb2x1bW5cbiAgICAgICAgICAgICAgICAgIGNvbHVtbktleT1cInJvbGVzXCJcbiAgICAgICAgICAgICAgICAgIGhlYWRlcj17PENlbGw+TG9naW4gYXM8L0NlbGw+IH1cbiAgICAgICAgICAgICAgICAgIGNlbGw9ezxMb2dpbkNlbGwgZGF0YT17ZGF0YX0gdXNlcj17dGhpcy5zdGF0ZS51c2VyfS8+IH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8VGVybWluYWxIb3N0Lz5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxufSk7XG5cbnZhciBUZXJtaW5hbEhvc3QgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cbiAgbWl4aW5zOiBbcmVhY3Rvci5SZWFjdE1peGluXSxcblxuICBnZXREYXRhQmluZGluZ3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNldHRpbmdzOiB0ZXJtTW9kdWxlLmdldHRlcnMuY29ublNldHRpbmdzXG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgaWYoIXRoaXMuc3RhdGUuc2V0dGluZ3Mpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICByZXR1cm4gKFxuICAgICA8ZGl2PlxuICAgICAgIDxUZXJtaW5hbEJveCBzZXR0aW5ncz17dGhpcy5zdGF0ZS5zZXR0aW5nc30gLz5cbiAgICAgPC9kaXY+XG4gICAgICk7XG4gIH1cblxufSk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBOb2RlcztcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9jb21wb25lbnRzL25vZGVzL21haW4uanN4XG4gKiovIiwidmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciByZWFjdG9yID0gcmVxdWlyZSgnYXBwL3JlYWN0b3InKTtcbnZhciBOb2RlcyA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPGgxPiBTZXNzaW9ucyE8L2gxPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlwiPlxuICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRoPk5vZGU8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPkxhYmVsczwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoPkNQVTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoPlJBTTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoPk9TPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGg+IExhc3QgSGVhcnRiZWF0IDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgIDx0Ym9keT48L3Rib2R5PlxuICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBOb2RlcztcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9jb21wb25lbnRzL3Nlc3Npb25zL21haW4uanN4XG4gKiovIiwidmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIEdydlRhYmxlQ2VsbCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgcmVuZGVyKCl7XG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gcHJvcHMuaXNIZWFkZXIgPyA8dGgga2V5PXtwcm9wcy5rZXl9Pntwcm9wcy5jaGlsZHJlbn08L3RoPiA6IDx0ZCBrZXk9e3Byb3BzLmtleX0+e3Byb3BzLmNoaWxkcmVufTwvdGQ+O1xuICB9XG59KTtcblxudmFyIEdydlRhYmxlID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXG4gIHJlbmRlckhlYWRlcihjaGlsZHJlbil7XG4gICAgdmFyIGNlbGxzID0gY2hpbGRyZW4ubWFwKChpdGVtLCBpbmRleCk9PntcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGwoaXRlbS5wcm9wcy5oZWFkZXIsIHtpbmRleCwga2V5OiBpbmRleCwgaXNIZWFkZXI6IHRydWUsIC4uLml0ZW0ucHJvcHN9KTtcbiAgICB9KVxuXG4gICAgcmV0dXJuIDx0aGVhZD48dHI+e2NlbGxzfTwvdHI+PC90aGVhZD5cbiAgfSxcblxuICByZW5kZXJCb2R5KGNoaWxkcmVuKXtcbiAgICB2YXIgY291bnQgPSB0aGlzLnByb3BzLnJvd0NvdW50O1xuICAgIHZhciByb3dzID0gW107XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpICsrKXtcbiAgICAgIHZhciBjZWxscyA9IGNoaWxkcmVuLm1hcCgoaXRlbSwgaW5kZXgpPT57XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGwoaXRlbS5wcm9wcy5jZWxsLCB7cm93SW5kZXg6IGksIGtleTogaW5kZXgsIGlzSGVhZGVyOiBmYWxzZSwgLi4uaXRlbS5wcm9wc30pO1xuICAgICAgfSlcblxuICAgICAgcm93cy5wdXNoKDx0ciBrZXk9e2l9PntjZWxsc308L3RyPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIDx0Ym9keT57cm93c308L3Rib2R5PjtcbiAgfSxcblxuICByZW5kZXJDZWxsKGNlbGwsIGNlbGxQcm9wcyl7XG4gICAgdmFyIGNvbnRlbnQgPSBudWxsO1xuICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjZWxsKSkge1xuICAgICAgIGNvbnRlbnQgPSBSZWFjdC5jbG9uZUVsZW1lbnQoY2VsbCwgY2VsbFByb3BzKTtcbiAgICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcHMuY2VsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgIGNvbnRlbnQgPSBjZWxsKGNlbGxQcm9wcyk7XG4gICAgIH1cblxuICAgICByZXR1cm4gY29udGVudDtcbiAgfSxcblxuICByZW5kZXIoKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gW107XG4gICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaCh0aGlzLnByb3BzLmNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKGNoaWxkLnR5cGUuZGlzcGxheU5hbWUgIT09ICdHcnZUYWJsZUNvbHVtbicpe1xuICAgICAgICB0aHJvdyAnU2hvdWxkIGJlIEdydlRhYmxlQ29sdW1uJztcbiAgICAgIH1cblxuICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgfSk7XG5cbiAgICB2YXIgdGFibGVDbGFzcyA9ICd0YWJsZSB0YWJsZS1ib3JkZXJlZCAnICsgdGhpcy5wcm9wcy5jbGFzc05hbWU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRhYmxlIGNsYXNzTmFtZT17dGFibGVDbGFzc30+XG4gICAgICAgIHt0aGlzLnJlbmRlckhlYWRlcihjaGlsZHJlbil9XG4gICAgICAgIHt0aGlzLnJlbmRlckJvZHkoY2hpbGRyZW4pfVxuICAgICAgPC90YWJsZT5cbiAgICApO1xuICB9XG59KVxuXG52YXIgR3J2VGFibGVDb2x1bW4gPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgPEdydlRhYmxlQ29sdW1uIC8+IHNob3VsZCBuZXZlciByZW5kZXInKTtcbiAgfVxufSlcblxuZXhwb3J0IGRlZmF1bHQgR3J2VGFibGU7XG5leHBvcnQge0dydlRhYmxlQ29sdW1uIGFzIENvbHVtbiwgR3J2VGFibGUgYXMgVGFibGUsIEdydlRhYmxlQ2VsbCBhcyBDZWxsfTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9jb21wb25lbnRzL3RhYmxlLmpzeFxuICoqLyIsInZhciBzZXNzaW9uID0gcmVxdWlyZSgnYXBwL3Nlc3Npb24nKTtcbnZhciBjZmcgPSByZXF1aXJlKCdhcHAvY29uZmlnJyk7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbi8vIHtcImFkZHJcIjogXCIxMjcuMC4wLjE6NTAwMFwiLCBcImxvZ2luXCI6IFwiYWRtaW5cIiwgXCJ0ZXJtXCI6IHtcImhcIjogMTIwLCBcIndcIjogMTAwfSwgXCJzaWRcIjogXCIxMjNcIn1cblxudmFyIFRlcm1pbmFsQm94ID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXG4gIHJlbmRlclRlcm1pbmFsOiBmdW5jdGlvbigpIHtcbiAgICB2YXIge3Rva2VufSA9IHNlc3Npb24uZ2V0VXNlckRhdGEoKTtcbiAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0ZXJtaW5hbC1ib3hcIik7XG5cbiAgICB2YXIgc2V0dGluZ3MgPSB0aGlzLnByb3BzLnNldHRpbmdzO1xuICAgIC8vc2V0dGluZ3Muc2lkID0gNTU1NTtcbiAgICBzZXR0aW5ncy50ZXJtID0ge1xuICAgICAgaDogMTIwLFxuICAgICAgdzogMTAwXG4gICAgfTtcblxuICAgIHZhciBjb25uZWN0aW9uU3RyID0gY2ZnLmFwaS5nZXRUZXJtQ29ublN0cmluZyh0b2tlbiwgc2V0dGluZ3MpO1xuXG4gICAgdGhpcy50ZXJtID0gbmV3IFRlcm1pbmFsKHtcbiAgICAgIGNvbHM6IDE4MCxcbiAgICAgIHJvd3M6IDUwLFxuICAgICAgdXNlU3R5bGU6IHRydWUsXG4gICAgICBzY3JlZW5LZXlzOiB0cnVlLFxuICAgICAgY3Vyc29yQmxpbms6IGZhbHNlXG4gICAgfSk7XG5cbiAgICB0aGlzLnRlcm0ub3BlbihwYXJlbnQpO1xuICAgIHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldChjb25uZWN0aW9uU3RyLCBcInByb3RvXCIpO1xuICAgIHRoaXMudGVybS53cml0ZSgnXFx4MWJbOTRtY29ubmVjdGluZyB0byBcInBvZFwiXFx4MWJbbVxcclxcbicpO1xuXG4gICAgdGhpcy5zb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgdGhpcy50ZXJtLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChkYXRhKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuICAgICAgICB0aGlzLnRlcm0ud3JpdGUoZS5kYXRhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy50ZXJtLndyaXRlKCdcXHgxYlszMW1kaXNjb25uZWN0ZWRcXHgxYlttXFxyXFxuJyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbmRlclRlcm1pbmFsKCk7XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgdGhpcy50ZXJtLmRlc3Ryb3koKTtcbiAgfSxcblxuICBzaG91bGRDb21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiBmdW5jdGlvbihwcm9wcykge1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncnYtd2l6LXRlcm1pbmFsXCIgaWQ9XCJ0ZXJtaW5hbC1ib3hcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gVGVybWluYWxCb3g7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvY29tcG9uZW50cy90ZXJtaW5hbC5qc3hcbiAqKi8iLCJ2YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xudmFyIHJlbmRlciA9IHJlcXVpcmUoJ3JlYWN0LWRvbScpLnJlbmRlcjtcbnZhciB7IFJvdXRlciwgUm91dGUsIFJlZGlyZWN0LCBJbmRleFJvdXRlLCBicm93c2VySGlzdG9yeSB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyJyk7XG52YXIgeyBBcHAsIExvZ2luLCBOb2RlcywgU2Vzc2lvbnMsIE5ld1VzZXIgfSA9IHJlcXVpcmUoJy4vY29tcG9uZW50cycpO1xudmFyIHtlbnN1cmVVc2VyfSA9IHJlcXVpcmUoJy4vbW9kdWxlcy91c2VyL2FjdGlvbnMnKTtcbnZhciBhdXRoID0gcmVxdWlyZSgnLi9hdXRoJyk7XG52YXIgc2Vzc2lvbiA9IHJlcXVpcmUoJy4vc2Vzc2lvbicpO1xudmFyIGNmZyA9IHJlcXVpcmUoJy4vY29uZmlnJyk7XG5cbnJlcXVpcmUoJy4vbW9kdWxlcycpO1xuXG4vLyBpbml0IHNlc3Npb25cbnNlc3Npb24uaW5pdCgpO1xuXG5mdW5jdGlvbiBoYW5kbGVMb2dvdXQobmV4dFN0YXRlLCByZXBsYWNlLCBjYil7XG4gIGF1dGgubG9nb3V0KCk7XG4gIC8vIGdvaW5nIGJhY2sgd2lsbCBoaXQgcmVxdWlyZUF1dGggaGFuZGxlciB3aGljaCB3aWxsIHJlZGlyZWN0IGl0IHRvIHRoZSBsb2dpbiBwYWdlXG4gIHNlc3Npb24uZ2V0SGlzdG9yeSgpLmdvQmFjaygpO1xufVxuXG5yZW5kZXIoKFxuICA8Um91dGVyIGhpc3Rvcnk9e3Nlc3Npb24uZ2V0SGlzdG9yeSgpfT5cbiAgICA8Um91dGUgcGF0aD17Y2ZnLnJvdXRlcy5sb2dpbn0gY29tcG9uZW50PXtMb2dpbn0vPlxuICAgIDxSb3V0ZSBwYXRoPXtjZmcucm91dGVzLmxvZ291dH0gb25FbnRlcj17aGFuZGxlTG9nb3V0fS8+XG4gICAgPFJvdXRlIHBhdGg9e2NmZy5yb3V0ZXMubmV3VXNlcn0gY29tcG9uZW50PXtOZXdVc2VyfS8+XG4gICAgPFJvdXRlIHBhdGg9e2NmZy5yb3V0ZXMuYXBwfSBjb21wb25lbnQ9e0FwcH0gb25FbnRlcj17ZW5zdXJlVXNlcn0gPlxuICAgICAgPEluZGV4Um91dGUgY29tcG9uZW50PXtOb2Rlc30vPlxuICAgICAgPFJvdXRlIHBhdGg9e2NmZy5yb3V0ZXMubm9kZXN9IGNvbXBvbmVudD17Tm9kZXN9Lz5cbiAgICAgIDxSb3V0ZSBwYXRoPXtjZmcucm91dGVzLnNlc3Npb25zfSBjb21wb25lbnQ9e1Nlc3Npb25zfS8+XG4gICAgPC9Sb3V0ZT5cbiAgPC9Sb3V0ZXI+XG4pLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcFwiKSk7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvaW5kZXguanN4XG4gKiovIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL3JlYWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vfi9rZXltaXJyb3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9zZXNzaW9uLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcImpRdWVyeVwiIiwid2VicGFjazovLy8uL3NyYy9hcHAvc2VydmljZXMvYXBpLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXV0aC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvYWN0aXZlVGVybWluYWwvYWN0aW9uVHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL2FjdGl2ZVRlcm1pbmFsL2FjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL2FjdGl2ZVRlcm1pbmFsL2FjdGl2ZVRlcm1TdG9yZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvaW52aXRlL2FjdGlvblR5cGVzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy9pbnZpdGUvaW52aXRlU3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL25vZGVzL2FjdGlvblR5cGVzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy9ub2Rlcy9ub2RlU3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL3Jlc3RBcGkvYWN0aW9uVHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL3Jlc3RBcGkvY29uc3RhbnRzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy91c2VyL2FjdGlvblR5cGVzLmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy91c2VyL2FjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL3VzZXIvZ2V0dGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvdXNlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvdXNlci91c2VyU3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL2dvb2dsZUF1dGguanN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tbW9uL3BhdHRlcm5VdGlscy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvYWN0aXZlVGVybWluYWwvZ2V0dGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvYWN0aXZlVGVybWluYWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9hcHAvbW9kdWxlcy9pbnZpdGUvYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvaW52aXRlL2dldHRlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL2ludml0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvbm9kZXMvYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvbm9kZXMvZ2V0dGVycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvbm9kZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9tb2R1bGVzL3Jlc3RBcGkvYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL21vZHVsZXMvcmVzdEFwaS9yZXN0QXBpU3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC91dGlscy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvYXBwLmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvZXZlbnRTdHJlYW1lci5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvbG9naW4uanN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9uYXZMZWZ0QmFyLmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvbmV3VXNlci5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL25vZGVzL21haW4uanN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9zZXNzaW9ucy9tYWluLmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvdGFibGUuanN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy90ZXJtaW5hbEhvc3QuanN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvaW5kZXguanN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0FBd0IsRUFBWTs7QUFFcEMsS0FBTSxPQUFPLEdBQUcsdUJBQVk7QUFDMUIsUUFBSyxFQUFFLElBQUk7RUFDWixDQUFDOztBQUVGLE9BQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDOztzQkFFVixPQUFPOzs7Ozs7Ozs7Ozs7OztnQkNSQSxtQkFBTyxDQUFDLEdBQXlCLENBQUM7O0tBQW5ELGFBQWEsWUFBYixhQUFhOztBQUVsQixLQUFJLEdBQUcsR0FBRzs7QUFFUixVQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNOztBQUUvQixNQUFHLEVBQUU7QUFDSCxjQUFTLEVBQUUsa0NBQWtDO0FBQzdDLGdCQUFXLEVBQUUscUJBQXFCO0FBQ2xDLGVBQVUsRUFBRSx1Q0FBdUM7QUFDbkQsbUJBQWMsRUFBRSxrQkFBa0I7QUFDbEMsaUJBQVksRUFBRSxzQkFBQyxXQUFXLEVBQUs7QUFDN0IsY0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBQyxXQUFXLEVBQVgsV0FBVyxFQUFDLENBQUMsQ0FB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LENBQUMsTUFBTSxDQUFDLEtBQU0sRUFBQyxTQUFTLEVBQUUsS0FBTSxHQUFFO0dBQ2xELG9CQUFDLEtBQUssSUFBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFPLEVBQUMsT0FBTyxFQUFFLFlBQWEsR0FBRTtHQUN4RCxvQkFBQyxLQUFLLElBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBUSxFQUFDLFNBQVMsRUFBRSxPQUFRLEdBQUU7R0FDdEQ7QUFBQyxVQUFLO09BQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBSSxFQUFDLFNBQVMsRUFBRSxHQUFJLEVBQUMsT0FBTyxFQUFFLFVBQVc7S0FDL0Qsb0JBQUMsVUFBVSxJQUFDLFNBQVMsRUFBRSxLQUFNLEdBQUU7S0FDL0Isb0JBQUMsS0FBSyxJQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQU0sRUFBQyxTQUFTLEVBQUUsS0FBTSxHQUFFO0tBQ2xELG9CQUFDLEtBQUssSUFBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFTLEVBQUMsU0FBUyxFQUFFLFFBQVMsR0FBRTtJQUNsRDtFQUNELEVBQ1IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDIiwiZmlsZSI6ImFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlYWN0b3IgfSBmcm9tICdudWNsZWFyLWpzJ1xuXG5jb25zdCByZWFjdG9yID0gbmV3IFJlYWN0b3Ioe1xuICBkZWJ1ZzogdHJ1ZVxufSlcblxud2luZG93LnJlYWN0b3IgPSByZWFjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCByZWFjdG9yXG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvcmVhY3Rvci5qc1xuICoqLyIsImxldCB7Zm9ybWF0UGF0dGVybn0gPSByZXF1aXJlKCdhcHAvY29tbW9uL3BhdHRlcm5VdGlscycpO1xuXG5sZXQgY2ZnID0ge1xuXG4gIGJhc2VVcmw6IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG5cbiAgYXBpOiB7XG4gICAgbm9kZXNQYXRoOiAnL3YxL3dlYmFwaS9zaXRlcy8tY3VycmVudC0vbm9kZXMnLFxuICAgIHNlc3Npb25QYXRoOiAnL3YxL3dlYmFwaS9zZXNzaW9ucycsXG4gICAgaW52aXRlUGF0aDogJy92MS93ZWJhcGkvdXNlcnMvaW52aXRlcy86aW52aXRlVG9rZW4nLFxuICAgIGNyZWF0ZVVzZXJQYXRoOiAnL3YxL3dlYmFwaS91c2VycycsXG4gICAgZ2V0SW52aXRlVXJsOiAoaW52aXRlVG9rZW4pID0+IHtcbiAgICAgIHJldHVybiBmb3JtYXRQYXR0ZXJuKGNmZy5hcGkuaW52aXRlUGF0aCwge2ludml0ZVRva2VufSk7XG4gICAgfSxcblxuICAgIGdldEV2ZW50U3RyZWFtZXJDb25uU3RyOiAodG9rZW4sIHNpZCkgPT4ge1xuICAgICAgdmFyIGhvc3RuYW1lID0gZ2V0V3NIb3N0TmFtZSgpO1xuICAgICAgcmV0dXJuIGAke2hvc3RuYW1lfS92MS93ZWJhcGkvc2l0ZXMvLWN1cnJlbnQtL3Nlc3Npb25zLyR7c2lkfS9ldmVudHMvc3RyZWFtP2FjY2Vzc190b2tlbj0ke3Rva2VufWA7XG4gICAgfSxcblxuICAgIGdldFNlc3Npb25Db25uU3RyOiAodG9rZW4sIHBhcmFtcykgPT4ge1xuICAgICAgdmFyIGpzb24gPSBKU09OLnN0cmluZ2lmeShwYXJhbXMpO1xuICAgICAgdmFyIGpzb25FbmNvZGVkID0gd2luZG93LmVuY29kZVVSSShqc29uKTtcbiAgICAgIHZhciBob3N0bmFtZSA9IGdldFdzSG9zdE5hbWUoKTtcbiAgICAgIHJldHVybiBgJHtob3N0bmFtZX0vdjEvd2ViYXBpL3NpdGVzLy1jdXJyZW50LS9jb25uZWN0P2FjY2Vzc190b2tlbj0ke3Rva2VufSZwYXJhbXM9JHtqc29uRW5jb2RlZH1gO1xuICAgIH1cbiAgfSxcblxuICByb3V0ZXM6IHtcbiAgICBhcHA6ICcvd2ViJyxcbiAgICBsb2dvdXQ6ICcvd2ViL2xvZ291dCcsXG4gICAgbG9naW46ICcvd2ViL2xvZ2luJyxcbiAgICBub2RlczogJy93ZWIvbm9kZXMnLFxuICAgIG5ld1VzZXI6ICcvd2ViL25ld3VzZXIvOmludml0ZVRva2VuJyxcbiAgICBzZXNzaW9uczogJy93ZWIvc2Vzc2lvbnMnXG4gIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBjZmc7XG5cbmZ1bmN0aW9uIGdldFdzSG9zdE5hbWUoKXtcbiAgdmFyIHByZWZpeCA9IGxvY2F0aW9uLnByb3RvY29sID09IFwiaHR0cHM6XCI/XCJ3c3M6Ly9cIjpcIndzOi8vXCI7XG4gIHZhciBob3N0cG9ydCA9IGxvY2F0aW9uLmhvc3RuYW1lKyhsb2NhdGlvbi5wb3J0ID8gJzonK2xvY2F0aW9uLnBvcnQ6ICcnKTtcbiAgcmV0dXJuIGAke3ByZWZpeH0ke2hvc3Rwb3J0fWA7XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvY29uZmlnLmpzXG4gKiovIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE0IEZhY2Vib29rLCBJbmMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYW4gZW51bWVyYXRpb24gd2l0aCBrZXlzIGVxdWFsIHRvIHRoZWlyIHZhbHVlLlxuICpcbiAqIEZvciBleGFtcGxlOlxuICpcbiAqICAgdmFyIENPTE9SUyA9IGtleU1pcnJvcih7Ymx1ZTogbnVsbCwgcmVkOiBudWxsfSk7XG4gKiAgIHZhciBteUNvbG9yID0gQ09MT1JTLmJsdWU7XG4gKiAgIHZhciBpc0NvbG9yVmFsaWQgPSAhIUNPTE9SU1tteUNvbG9yXTtcbiAqXG4gKiBUaGUgbGFzdCBsaW5lIGNvdWxkIG5vdCBiZSBwZXJmb3JtZWQgaWYgdGhlIHZhbHVlcyBvZiB0aGUgZ2VuZXJhdGVkIGVudW0gd2VyZVxuICogbm90IGVxdWFsIHRvIHRoZWlyIGtleXMuXG4gKlxuICogICBJbnB1dDogIHtrZXkxOiB2YWwxLCBrZXkyOiB2YWwyfVxuICogICBPdXRwdXQ6IHtrZXkxOiBrZXkxLCBrZXkyOiBrZXkyfVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xudmFyIGtleU1pcnJvciA9IGZ1bmN0aW9uKG9iaikge1xuICB2YXIgcmV0ID0ge307XG4gIHZhciBrZXk7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIE9iamVjdCAmJiAhQXJyYXkuaXNBcnJheShvYmopKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigna2V5TWlycm9yKC4uLik6IEFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LicpO1xuICB9XG4gIGZvciAoa2V5IGluIG9iaikge1xuICAgIGlmICghb2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICByZXRba2V5XSA9IGtleTtcbiAgfVxuICByZXR1cm4gcmV0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlNaXJyb3I7XG5cblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIC4vfi9rZXltaXJyb3IvaW5kZXguanNcbiAqKiBtb2R1bGUgaWQgPSAzMVxuICoqIG1vZHVsZSBjaHVua3MgPSAxXG4gKiovIiwidmFyIHsgYnJvd3Nlckhpc3RvcnkgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlcicpO1xuXG5jb25zdCBBVVRIX0tFWV9EQVRBID0gJ2F1dGhEYXRhJztcblxudmFyIF9oaXN0b3J5ID0gbnVsbDtcblxudmFyIHNlc3Npb24gPSB7XG5cbiAgaW5pdChoaXN0b3J5PWJyb3dzZXJIaXN0b3J5KXtcbiAgICBfaGlzdG9yeSA9IGhpc3Rvcnk7XG4gIH0sXG5cbiAgZ2V0SGlzdG9yeSgpe1xuICAgIHJldHVybiBfaGlzdG9yeTtcbiAgfSxcblxuICBzZXRVc2VyRGF0YSh1c2VyRGF0YSl7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShBVVRIX0tFWV9EQVRBLCBKU09OLnN0cmluZ2lmeSh1c2VyRGF0YSkpO1xuICB9LFxuXG4gIGdldFVzZXJEYXRhKCl7XG4gICAgdmFyIGl0ZW0gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKEFVVEhfS0VZX0RBVEEpO1xuICAgIGlmKGl0ZW0pe1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoaXRlbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHt9O1xuICB9LFxuXG4gIGNsZWFyKCl7XG4gICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKVxuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXNzaW9uO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL3Nlc3Npb24uanNcbiAqKi8iLCJtb2R1bGUuZXhwb3J0cyA9IGpRdWVyeTtcblxuXG4vKioqKioqKioqKioqKioqKipcbiAqKiBXRUJQQUNLIEZPT1RFUlxuICoqIGV4dGVybmFsIFwialF1ZXJ5XCJcbiAqKiBtb2R1bGUgaWQgPSA1MVxuICoqIG1vZHVsZSBjaHVua3MgPSAxXG4gKiovIiwidmFyICQgPSByZXF1aXJlKFwialF1ZXJ5XCIpO1xudmFyIHNlc3Npb24gPSByZXF1aXJlKCdhcHAvc2Vzc2lvbicpO1xuXG5jb25zdCBhcGkgPSB7XG5cbiAgcG9zdChwYXRoLCBkYXRhKXtcbiAgICByZXR1cm4gYXBpLmFqYXgoe3VybDogcGF0aCwgZGF0YTogSlNPTi5zdHJpbmdpZnkoZGF0YSksIHR5cGU6ICdQT1NUJ30sIGZhbHNlKTtcbiAgfSxcblxuICBnZXQocGF0aCl7XG4gICAgcmV0dXJuIGFwaS5hamF4KHt1cmw6IHBhdGh9KTtcbiAgfSxcblxuICBhamF4KGNmZywgd2l0aFRva2VuID0gdHJ1ZSl7XG4gICAgdmFyIGRlZmF1bHRDZmcgPSB7XG4gICAgICB0eXBlOiBcIkdFVFwiLFxuICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxuICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgIGlmKHdpdGhUb2tlbil7XG4gICAgICAgICAgdmFyIHsgdG9rZW4gfSA9IHNlc3Npb24uZ2V0VXNlckRhdGEoKTtcbiAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQXV0aG9yaXphdGlvbicsJ0JlYXJlciAnICsgdG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAkLmFqYXgoJC5leHRlbmQoe30sIGRlZmF1bHRDZmcsIGNmZykpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBpO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL3NlcnZpY2VzL2FwaS5qc1xuICoqLyIsInZhciBhcGkgPSByZXF1aXJlKCcuL3NlcnZpY2VzL2FwaScpO1xudmFyIHNlc3Npb24gPSByZXF1aXJlKCcuL3Nlc3Npb24nKTtcbnZhciBjZmcgPSByZXF1aXJlKCdhcHAvY29uZmlnJyk7XG52YXIgJCA9IHJlcXVpcmUoJ2pRdWVyeScpO1xuXG5jb25zdCByZWZyZXNoUmF0ZSA9IDYwMDAwICogMTAwOyAvLyAxIG1pblxuXG52YXIgcmVmcmVzaFRva2VuVGltZXJJZCA9IG51bGw7XG5cbnZhciBhdXRoID0ge1xuXG4gIHNpZ25VcChuYW1lLCBwYXNzd29yZCwgdG9rZW4sIGludml0ZVRva2VuKXtcbiAgICB2YXIgZGF0YSA9IHt1c2VyOiBuYW1lLCBwYXNzOiBwYXNzd29yZCwgc2Vjb25kX2ZhY3Rvcl90b2tlbjogdG9rZW4sIGludml0ZV90b2tlbjogaW52aXRlVG9rZW59O1xuICAgIHJldHVybiBhcGkucG9zdChjZmcuYXBpLmNyZWF0ZVVzZXJQYXRoLCBkYXRhKVxuICAgICAgLnRoZW4oKHVzZXIpPT57XG4gICAgICAgIHNlc3Npb24uc2V0VXNlckRhdGEodXNlcik7XG4gICAgICAgIGF1dGguX3N0YXJ0VG9rZW5SZWZyZXNoZXIoKTtcbiAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICB9KTtcbiAgfSxcblxuICBsb2dpbihuYW1lLCBwYXNzd29yZCwgdG9rZW4pe1xuICAgIGF1dGguX3N0b3BUb2tlblJlZnJlc2hlcigpO1xuICAgIHJldHVybiBhdXRoLl9sb2dpbihuYW1lLCBwYXNzd29yZCwgdG9rZW4pLmRvbmUoYXV0aC5fc3RhcnRUb2tlblJlZnJlc2hlcik7XG4gIH0sXG5cbiAgZW5zdXJlVXNlcigpe1xuICAgIHZhciB1c2VyRGF0YSA9IHNlc3Npb24uZ2V0VXNlckRhdGEoKTtcbiAgICBpZih1c2VyRGF0YSl7XG4gICAgICAvLyByZWZyZXNoIHRpbWVyIHdpbGwgbm90IGJlIHNldCBpbiBjYXNlIG9mIGJyb3dzZXIgcmVmcmVzaCBldmVudFxuICAgICAgaWYoYXV0aC5fZ2V0UmVmcmVzaFRva2VuVGltZXJJZCgpID09PSBudWxsKXtcbiAgICAgICAgcmV0dXJuIGF1dGguX2xvZ2luKCkuZG9uZShhdXRoLl9zdGFydFRva2VuUmVmcmVzaGVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKHVzZXJEYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdCgpO1xuICB9LFxuXG4gIGxvZ291dCgpe1xuICAgIGF1dGguX3N0b3BUb2tlblJlZnJlc2hlcigpO1xuICAgIHJldHVybiBzZXNzaW9uLmNsZWFyKCk7XG4gIH0sXG5cbiAgX3N0YXJ0VG9rZW5SZWZyZXNoZXIoKXtcbiAgICByZWZyZXNoVG9rZW5UaW1lcklkID0gc2V0SW50ZXJ2YWwoYXV0aC5fcmVmcmVzaFRva2VuLCByZWZyZXNoUmF0ZSk7XG4gIH0sXG5cbiAgX3N0b3BUb2tlblJlZnJlc2hlcigpe1xuICAgIGNsZWFySW50ZXJ2YWwocmVmcmVzaFRva2VuVGltZXJJZCk7XG4gICAgcmVmcmVzaFRva2VuVGltZXJJZCA9IG51bGw7XG4gIH0sXG5cbiAgX2dldFJlZnJlc2hUb2tlblRpbWVySWQoKXtcbiAgICByZXR1cm4gcmVmcmVzaFRva2VuVGltZXJJZDtcbiAgfSxcblxuICBfcmVmcmVzaFRva2VuKCl7XG4gICAgYXV0aC5fbG9naW4oKS5mYWlsKCgpPT57XG4gICAgICBhdXRoLmxvZ291dCgpO1xuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH0pXG4gIH0sXG5cbiAgX2xvZ2luKG5hbWUsIHBhc3N3b3JkLCB0b2tlbil7XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICB1c2VyOiBuYW1lLFxuICAgICAgcGFzczogcGFzc3dvcmQsXG4gICAgICBzZWNvbmRfZmFjdG9yX3Rva2VuOiB0b2tlblxuICAgIH07XG5cbiAgICByZXR1cm4gYXBpLnBvc3QoY2ZnLmFwaS5zZXNzaW9uUGF0aCwgZGF0YSkudGhlbihkYXRhPT57XG4gICAgICBzZXNzaW9uLnNldFVzZXJEYXRhKGRhdGEpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSk7XG5cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGF1dGg7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvYXV0aC5qc1xuICoqLyIsImltcG9ydCBrZXlNaXJyb3IgZnJvbSAna2V5bWlycm9yJ1xuXG5leHBvcnQgZGVmYXVsdCBrZXlNaXJyb3Ioe1xuICBUTFBUX1RFUk1fQ09OTkVDVDogbnVsbCxcbiAgVExQVF9URVJNX0NMT1NFOiBudWxsLFxuICBUTFBUX1RFUk1fQ09OTkVDVEVEOiBudWxsXG59KVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvYWN0aXZlVGVybWluYWwvYWN0aW9uVHlwZXMuanNcbiAqKi8iLCJ2YXIgcmVhY3RvciA9IHJlcXVpcmUoJ2FwcC9yZWFjdG9yJyk7XG52YXIge3V1aWR9ID0gcmVxdWlyZSgnYXBwL3V0aWxzJyk7XG52YXIgeyBUTFBUX1RFUk1fQ09OTkVDVCwgVExQVF9URVJNX0NMT1NFLCBUTFBUX1RFUk1fQ09OTkVDVEVEIH0gID0gcmVxdWlyZSgnLi9hY3Rpb25UeXBlcycpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG5cbiAgY2xvc2UoKXtcbiAgICByZWFjdG9yLmRpc3BhdGNoKFRMUFRfVEVSTV9DTE9TRSk7XG4gIH0sXG5cbiAgY29ubmVjdGVkKCl7XG4gICAgcmVhY3Rvci5kaXNwYXRjaChUTFBUX1RFUk1fQ09OTkVDVEVEKTtcbiAgfSxcblxuICBjb25uZWN0KGFkZHIsIGxvZ2luLCBzaWQ9dXVpZCgpKXtcbiAgICAvKlxuICAgICogICB7XG4gICAgKiAgIFwiYWRkclwiOiBcIjEyNy4wLjAuMTo1MDAwXCIsXG4gICAgKiAgIFwibG9naW5cIjogXCJhZG1pblwiLFxuICAgICogICBcInRlcm1cIjoge1wiaFwiOiAxMjAsIFwid1wiOiAxMDB9LFxuICAgICogICBcInNpZFwiOiBcIjEyM1wiXG4gICAgKiAgfVxuICAgICovXG4gICAgcmVhY3Rvci5kaXNwYXRjaChUTFBUX1RFUk1fQ09OTkVDVCwge2FkZHIsIGxvZ2luLCBzaWR9ICk7XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL2FjdGl2ZVRlcm1pbmFsL2FjdGlvbnMuanNcbiAqKi8iLCJ2YXIgeyBTdG9yZSwgdG9JbW11dGFibGUgfSA9IHJlcXVpcmUoJ251Y2xlYXItanMnKTtcbnZhciB7IFRMUFRfVEVSTV9DT05ORUNULCBUTFBUX1RFUk1fQ0xPU0UsIFRMUFRfVEVSTV9DT05ORUNURUQgfSAgPSByZXF1aXJlKCcuL2FjdGlvblR5cGVzJyk7XG5cbmV4cG9ydCBkZWZhdWx0IFN0b3JlKHtcbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB0b0ltbXV0YWJsZShudWxsKTtcbiAgfSxcblxuICBpbml0aWFsaXplKCkge1xuICAgIHRoaXMub24oVExQVF9URVJNX0NPTk5FQ1RFRCwgY29ubmVjdGVkKTtcbiAgICB0aGlzLm9uKFRMUFRfVEVSTV9DT05ORUNULCBjb25uZWN0KTtcbiAgICB0aGlzLm9uKFRMUFRfVEVSTV9DTE9TRSwgY2xvc2UpO1xuICB9XG5cbn0pXG5cbmZ1bmN0aW9uIGNsb3NlKCl7XG4gIHJldHVybiB0b0ltbXV0YWJsZShudWxsKTtcbn1cblxuZnVuY3Rpb24gY29ubmVjdChzdGF0ZSwgdGVybSl7XG4gIHJldHVybiB0b0ltbXV0YWJsZSh7XG4gICAgICBpc0Nvbm5lY3Rpbmc6IHRydWUsXG4gICAgICB0ZXJtXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb25uZWN0ZWQoc3RhdGUpe1xuICByZXR1cm4gc3RhdGUuc2V0KCdpc0Nvbm5lY3RlZCcsIHRydWUpXG4gICAgICAgICAgICAgIC5zZXQoJ2lzQ29ubmVjdGluZycsIGZhbHNlKTtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL2FjdGl2ZVRlcm1pbmFsL2FjdGl2ZVRlcm1TdG9yZS5qc1xuICoqLyIsImltcG9ydCBrZXlNaXJyb3IgZnJvbSAna2V5bWlycm9yJ1xuXG5leHBvcnQgZGVmYXVsdCBrZXlNaXJyb3Ioe1xuICBUTFBUX1JFQ0VJVkVfVVNFUl9JTlZJVEU6IG51bGxcbn0pXG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy9pbnZpdGUvYWN0aW9uVHlwZXMuanNcbiAqKi8iLCJ2YXIgeyBTdG9yZSwgdG9JbW11dGFibGUgfSA9IHJlcXVpcmUoJ251Y2xlYXItanMnKTtcbnZhciAgeyBUTFBUX1JFQ0VJVkVfVVNFUl9JTlZJVEUgfSA9IHJlcXVpcmUoJy4vYWN0aW9uVHlwZXMnKTtcblxuZXhwb3J0IGRlZmF1bHQgU3RvcmUoe1xuICBnZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRvSW1tdXRhYmxlKG51bGwpO1xuICB9LFxuXG4gIGluaXRpYWxpemUoKSB7XG4gICAgdGhpcy5vbihUTFBUX1JFQ0VJVkVfVVNFUl9JTlZJVEUsIHJlY2VpdmVJbnZpdGUpXG4gIH1cbn0pXG5cbmZ1bmN0aW9uIHJlY2VpdmVJbnZpdGUoc3RhdGUsIGludml0ZSl7XG4gIHJldHVybiB0b0ltbXV0YWJsZShpbnZpdGUpO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvaW52aXRlL2ludml0ZVN0b3JlLmpzXG4gKiovIiwiaW1wb3J0IGtleU1pcnJvciBmcm9tICdrZXltaXJyb3InXG5cbmV4cG9ydCBkZWZhdWx0IGtleU1pcnJvcih7XG4gIFRMUFRfUkVDRUlWRV9OT0RFUzogbnVsbFxufSlcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL25vZGVzL2FjdGlvblR5cGVzLmpzXG4gKiovIiwidmFyIHsgU3RvcmUsIHRvSW1tdXRhYmxlIH0gPSByZXF1aXJlKCdudWNsZWFyLWpzJyk7XG52YXIgIHsgVExQVF9SRUNFSVZFX05PREVTIH0gPSByZXF1aXJlKCcuL2FjdGlvblR5cGVzJyk7XG5cbmV4cG9ydCBkZWZhdWx0IFN0b3JlKHtcbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB0b0ltbXV0YWJsZShbXSk7XG4gIH0sXG5cbiAgaW5pdGlhbGl6ZSgpIHtcbiAgICB0aGlzLm9uKFRMUFRfUkVDRUlWRV9OT0RFUywgcmVjZWl2ZU5vZGVzKVxuICB9XG59KVxuXG5mdW5jdGlvbiByZWNlaXZlTm9kZXMoc3RhdGUsIG5vZGVBcnJheSl7XG4gIHJldHVybiB0b0ltbXV0YWJsZShub2RlQXJyYXkpO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvbm9kZXMvbm9kZVN0b3JlLmpzXG4gKiovIiwiaW1wb3J0IGtleU1pcnJvciBmcm9tICdrZXltaXJyb3InXG5cbmV4cG9ydCBkZWZhdWx0IGtleU1pcnJvcih7XG4gIFRMUFRfUkVTVF9BUElfU1RBUlQ6IG51bGwsXG4gIFRMUFRfUkVTVF9BUElfU1VDQ0VTUzogbnVsbCxcbiAgVExQVF9SRVNUX0FQSV9GQUlMOiBudWxsXG59KVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvcmVzdEFwaS9hY3Rpb25UeXBlcy5qc1xuICoqLyIsImltcG9ydCBrZXlNaXJyb3IgZnJvbSAna2V5bWlycm9yJ1xuXG5leHBvcnQgZGVmYXVsdCBrZXlNaXJyb3Ioe1xuICBUUllJTkdfVE9fU0lHTl9VUDogbnVsbFxufSlcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL3Jlc3RBcGkvY29uc3RhbnRzLmpzXG4gKiovIiwiaW1wb3J0IGtleU1pcnJvciBmcm9tICdrZXltaXJyb3InXG5cbmV4cG9ydCBkZWZhdWx0IGtleU1pcnJvcih7XG4gIFRMUFRfUkVDRUlWRV9VU0VSOiBudWxsXG59KVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvdXNlci9hY3Rpb25UeXBlcy5qc1xuICoqLyIsInZhciByZWFjdG9yID0gcmVxdWlyZSgnYXBwL3JlYWN0b3InKTtcbnZhciB7IFRMUFRfUkVDRUlWRV9VU0VSIH0gPSByZXF1aXJlKCcuL2FjdGlvblR5cGVzJyk7XG52YXIgeyBUUllJTkdfVE9fU0lHTl9VUH0gPSByZXF1aXJlKCdhcHAvbW9kdWxlcy9yZXN0QXBpL2NvbnN0YW50cycpO1xudmFyIHJlc3RBcGlBY3Rpb25zID0gcmVxdWlyZSgnYXBwL21vZHVsZXMvcmVzdEFwaS9hY3Rpb25zJyk7XG52YXIgYXV0aCA9IHJlcXVpcmUoJ2FwcC9hdXRoJyk7XG52YXIgc2Vzc2lvbiA9IHJlcXVpcmUoJ2FwcC9zZXNzaW9uJyk7XG52YXIgY2ZnID0gcmVxdWlyZSgnYXBwL2NvbmZpZycpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG5cbiAgZW5zdXJlVXNlcihuZXh0U3RhdGUsIHJlcGxhY2UsIGNiKXtcbiAgICB2YXIgdXNlckRhdGEgPSBzZXNzaW9uLmdldFVzZXJEYXRhKCk7XG4gICAgcmVhY3Rvci5kaXNwYXRjaChUTFBUX1JFQ0VJVkVfVVNFUiwgdXNlckRhdGEudXNlcik7XG4gICAgY2IoKTtcblxuICAgIC8qYXV0aC5lbnN1cmVVc2VyKClcbiAgICAgIC5kb25lKCh1c2VyRGF0YSk9PiB7XG4gICAgICAgIHJlYWN0b3IuZGlzcGF0Y2goVExQVF9SRUNFSVZFX1VTRVIsIHVzZXJEYXRhLnVzZXIpO1xuICAgICAgICBjYigpO1xuICAgICAgfSlcbiAgICAgIC5mYWlsKCgpPT57XG4gICAgICAgIHJlcGxhY2Uoe3JlZGlyZWN0VG86IG5leHRTdGF0ZS5sb2NhdGlvbi5wYXRobmFtZSB9LCBjZmcucm91dGVzLmxvZ2luKTtcbiAgICAgICAgY2IoKTtcbiAgICAgIH0pOyovXG4gIH0sXG5cbiAgc2lnblVwKHtuYW1lLCBwc3csIHRva2VuLCBpbnZpdGVUb2tlbn0pe1xuICAgIHJlc3RBcGlBY3Rpb25zLnN0YXJ0KFRSWUlOR19UT19TSUdOX1VQKTtcbiAgICBhdXRoLnNpZ25VcChuYW1lLCBwc3csIHRva2VuLCBpbnZpdGVUb2tlbilcbiAgICAgIC5kb25lKChzZXNzaW9uRGF0YSk9PntcbiAgICAgICAgcmVhY3Rvci5kaXNwYXRjaChUTFBUX1JFQ0VJVkVfVVNFUiwgc2Vzc2lvbkRhdGEudXNlcik7XG4gICAgICAgIHJlc3RBcGlBY3Rpb25zLnN1Y2Nlc3MoVFJZSU5HX1RPX1NJR05fVVApO1xuICAgICAgICBzZXNzaW9uLmdldEhpc3RvcnkoKS5wdXNoKHtwYXRobmFtZTogY2ZnLnJvdXRlcy5hcHB9KTtcbiAgICAgIH0pXG4gICAgICAuZmFpbCgoKT0+e1xuICAgICAgICByZXN0QXBpQWN0aW9ucy5mYWlsKFRSWUlOR19UT19TSUdOX1VQLCAnZmFpbGVkIHRvIHNpbmcgdXAnKTtcbiAgICAgIH0pO1xuICB9LFxuXG4gIGxvZ2luKHt1c2VyLCBwYXNzd29yZCwgdG9rZW59LCByZWRpcmVjdCl7XG4gICAgICBhdXRoLmxvZ2luKHVzZXIsIHBhc3N3b3JkLCB0b2tlbilcbiAgICAgICAgLmRvbmUoKHNlc3Npb25EYXRhKT0+e1xuICAgICAgICAgIHJlYWN0b3IuZGlzcGF0Y2goVExQVF9SRUNFSVZFX1VTRVIsIHNlc3Npb25EYXRhLnVzZXIpO1xuICAgICAgICAgIHNlc3Npb24uZ2V0SGlzdG9yeSgpLnB1c2goe3BhdGhuYW1lOiByZWRpcmVjdH0pO1xuICAgICAgICB9KVxuICAgICAgICAuZmFpbCgoKT0+e1xuICAgICAgICB9KVxuICAgIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL3VzZXIvYWN0aW9ucy5qc1xuICoqLyIsImNvbnN0IHVzZXIgPSBbIFsndGxwdF91c2VyJ10sIChjdXJyZW50VXNlcikgPT4ge1xuICAgIGlmKCFjdXJyZW50VXNlcil7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGN1cnJlbnRVc2VyLmdldCgnbmFtZScpLFxuICAgICAgbG9naW5zOiBjdXJyZW50VXNlci5nZXQoJ2FsbG93ZWRfbG9naW5zJykudG9KUygpXG4gICAgfVxuICB9XG5dO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHVzZXJcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL3VzZXIvZ2V0dGVycy5qc1xuICoqLyIsIm1vZHVsZS5leHBvcnRzLmdldHRlcnMgPSByZXF1aXJlKCcuL2dldHRlcnMnKTtcbm1vZHVsZS5leHBvcnRzLmFjdGlvbnMgPSByZXF1aXJlKCcuL2FjdGlvbnMnKTtcbm1vZHVsZS5leHBvcnRzLm5vZGVTdG9yZSA9IHJlcXVpcmUoJy4vdXNlclN0b3JlJyk7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy91c2VyL2luZGV4LmpzXG4gKiovIiwidmFyIHsgU3RvcmUsIHRvSW1tdXRhYmxlIH0gPSByZXF1aXJlKCdudWNsZWFyLWpzJyk7XG52YXIgIHsgVExQVF9SRUNFSVZFX1VTRVIgfSA9IHJlcXVpcmUoJy4vYWN0aW9uVHlwZXMnKTtcblxuZXhwb3J0IGRlZmF1bHQgU3RvcmUoe1xuICBnZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRvSW1tdXRhYmxlKG51bGwpO1xuICB9LFxuXG4gIGluaXRpYWxpemUoKSB7XG4gICAgdGhpcy5vbihUTFBUX1JFQ0VJVkVfVVNFUiwgcmVjZWl2ZVVzZXIpXG4gIH1cblxufSlcblxuZnVuY3Rpb24gcmVjZWl2ZVVzZXIoc3RhdGUsIHVzZXIpe1xuICByZXR1cm4gdG9JbW11dGFibGUodXNlcik7XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy91c2VyL3VzZXJTdG9yZS5qc1xuICoqLyIsInZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBHb29nbGVBdXRoSW5mbyA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi1nb29nbGUtYXV0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi1nb29nbGUtYXV0aC1pY29uXCI+PC9kaXY+XG4gICAgICAgIDxzdHJvbmc+R29vZ2xlIEF1dGhlbnRpY2F0b3I8L3N0cm9uZz5cbiAgICAgICAgPGRpdj5Eb3dubG9hZCA8YSBocmVmPVwiaHR0cHM6Ly9zdXBwb3J0Lmdvb2dsZS5jb20vYWNjb3VudHMvYW5zd2VyLzEwNjY0NDc/aGw9ZW5cIj5Hb29nbGUgQXV0aGVudGljYXRvcjwvYT4gb24geW91ciBwaG9uZSB0byBhY2Nlc3MgeW91ciB0d28gZmFjdG9yeSB0b2tlbjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSBHb29nbGVBdXRoSW5mbztcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9jb21wb25lbnRzL2dvb2dsZUF1dGguanN4XG4gKiovIiwiLypcbiAqICBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiAqICBDb3B5cmlnaHQgKGMpIDIwMTUgUnlhbiBGbG9yZW5jZSwgTWljaGFlbCBKYWNrc29uXG4gKiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG5cbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50J1xuXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxufVxuXG5mdW5jdGlvbiBlc2NhcGVTb3VyY2Uoc3RyaW5nKSB7XG4gIHJldHVybiBlc2NhcGVSZWdFeHAoc3RyaW5nKS5yZXBsYWNlKC9cXC8rL2csICcvKycpXG59XG5cbmZ1bmN0aW9uIF9jb21waWxlUGF0dGVybihwYXR0ZXJuKSB7XG4gIGxldCByZWdleHBTb3VyY2UgPSAnJztcbiAgY29uc3QgcGFyYW1OYW1lcyA9IFtdO1xuICBjb25zdCB0b2tlbnMgPSBbXTtcblxuICBsZXQgbWF0Y2gsIGxhc3RJbmRleCA9IDAsIG1hdGNoZXIgPSAvOihbYS16QS1aXyRdW2EtekEtWjAtOV8kXSopfFxcKlxcKnxcXCp8XFwofFxcKS9nXG4gIC8qZXNsaW50IG5vLWNvbmQtYXNzaWduOiAwKi9cbiAgd2hpbGUgKChtYXRjaCA9IG1hdGNoZXIuZXhlYyhwYXR0ZXJuKSkpIHtcbiAgICBpZiAobWF0Y2guaW5kZXggIT09IGxhc3RJbmRleCkge1xuICAgICAgdG9rZW5zLnB1c2gocGF0dGVybi5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KSlcbiAgICAgIHJlZ2V4cFNvdXJjZSArPSBlc2NhcGVTb3VyY2UocGF0dGVybi5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KSlcbiAgICB9XG5cbiAgICBpZiAobWF0Y2hbMV0pIHtcbiAgICAgIHJlZ2V4cFNvdXJjZSArPSAnKFteLz8jXSspJztcbiAgICAgIHBhcmFtTmFtZXMucHVzaChtYXRjaFsxXSk7XG4gICAgfSBlbHNlIGlmIChtYXRjaFswXSA9PT0gJyoqJykge1xuICAgICAgcmVnZXhwU291cmNlICs9ICcoW1xcXFxzXFxcXFNdKiknXG4gICAgICBwYXJhbU5hbWVzLnB1c2goJ3NwbGF0Jyk7XG4gICAgfSBlbHNlIGlmIChtYXRjaFswXSA9PT0gJyonKSB7XG4gICAgICByZWdleHBTb3VyY2UgKz0gJyhbXFxcXHNcXFxcU10qPyknXG4gICAgICBwYXJhbU5hbWVzLnB1c2goJ3NwbGF0Jyk7XG4gICAgfSBlbHNlIGlmIChtYXRjaFswXSA9PT0gJygnKSB7XG4gICAgICByZWdleHBTb3VyY2UgKz0gJyg/Oic7XG4gICAgfSBlbHNlIGlmIChtYXRjaFswXSA9PT0gJyknKSB7XG4gICAgICByZWdleHBTb3VyY2UgKz0gJyk/JztcbiAgICB9XG5cbiAgICB0b2tlbnMucHVzaChtYXRjaFswXSk7XG5cbiAgICBsYXN0SW5kZXggPSBtYXRjaGVyLmxhc3RJbmRleDtcbiAgfVxuXG4gIGlmIChsYXN0SW5kZXggIT09IHBhdHRlcm4ubGVuZ3RoKSB7XG4gICAgdG9rZW5zLnB1c2gocGF0dGVybi5zbGljZShsYXN0SW5kZXgsIHBhdHRlcm4ubGVuZ3RoKSlcbiAgICByZWdleHBTb3VyY2UgKz0gZXNjYXBlU291cmNlKHBhdHRlcm4uc2xpY2UobGFzdEluZGV4LCBwYXR0ZXJuLmxlbmd0aCkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdHRlcm4sXG4gICAgcmVnZXhwU291cmNlLFxuICAgIHBhcmFtTmFtZXMsXG4gICAgdG9rZW5zXG4gIH1cbn1cblxuY29uc3QgQ29tcGlsZWRQYXR0ZXJuc0NhY2hlID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVQYXR0ZXJuKHBhdHRlcm4pIHtcbiAgaWYgKCEocGF0dGVybiBpbiBDb21waWxlZFBhdHRlcm5zQ2FjaGUpKVxuICAgIENvbXBpbGVkUGF0dGVybnNDYWNoZVtwYXR0ZXJuXSA9IF9jb21waWxlUGF0dGVybihwYXR0ZXJuKVxuXG4gIHJldHVybiBDb21waWxlZFBhdHRlcm5zQ2FjaGVbcGF0dGVybl1cbn1cblxuLyoqXG4gKiBBdHRlbXB0cyB0byBtYXRjaCBhIHBhdHRlcm4gb24gdGhlIGdpdmVuIHBhdGhuYW1lLiBQYXR0ZXJucyBtYXkgdXNlXG4gKiB0aGUgZm9sbG93aW5nIHNwZWNpYWwgY2hhcmFjdGVyczpcbiAqXG4gKiAtIDpwYXJhbU5hbWUgICAgIE1hdGNoZXMgYSBVUkwgc2VnbWVudCB1cCB0byB0aGUgbmV4dCAvLCA/LCBvciAjLiBUaGVcbiAqICAgICAgICAgICAgICAgICAgY2FwdHVyZWQgc3RyaW5nIGlzIGNvbnNpZGVyZWQgYSBcInBhcmFtXCJcbiAqIC0gKCkgICAgICAgICAgICAgV3JhcHMgYSBzZWdtZW50IG9mIHRoZSBVUkwgdGhhdCBpcyBvcHRpb25hbFxuICogLSAqICAgICAgICAgICAgICBDb25zdW1lcyAobm9uLWdyZWVkeSkgYWxsIGNoYXJhY3RlcnMgdXAgdG8gdGhlIG5leHRcbiAqICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIHRoZSBwYXR0ZXJuLCBvciB0byB0aGUgZW5kIG9mIHRoZSBVUkwgaWZcbiAqICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgbm9uZVxuICogLSAqKiAgICAgICAgICAgICBDb25zdW1lcyAoZ3JlZWR5KSBhbGwgY2hhcmFjdGVycyB1cCB0byB0aGUgbmV4dCBjaGFyYWN0ZXJcbiAqICAgICAgICAgICAgICAgICAgaW4gdGhlIHBhdHRlcm4sIG9yIHRvIHRoZSBlbmQgb2YgdGhlIFVSTCBpZiB0aGVyZSBpcyBub25lXG4gKlxuICogVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogLSByZW1haW5pbmdQYXRobmFtZVxuICogLSBwYXJhbU5hbWVzXG4gKiAtIHBhcmFtVmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFBhdHRlcm4ocGF0dGVybiwgcGF0aG5hbWUpIHtcbiAgLy8gTWFrZSBsZWFkaW5nIHNsYXNoZXMgY29uc2lzdGVudCBiZXR3ZWVuIHBhdHRlcm4gYW5kIHBhdGhuYW1lLlxuICBpZiAocGF0dGVybi5jaGFyQXQoMCkgIT09ICcvJykge1xuICAgIHBhdHRlcm4gPSBgLyR7cGF0dGVybn1gXG4gIH1cbiAgaWYgKHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgcGF0aG5hbWUgPSBgLyR7cGF0aG5hbWV9YFxuICB9XG5cbiAgbGV0IHsgcmVnZXhwU291cmNlLCBwYXJhbU5hbWVzLCB0b2tlbnMgfSA9IGNvbXBpbGVQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgcmVnZXhwU291cmNlICs9ICcvKicgLy8gQ2FwdHVyZSBwYXRoIHNlcGFyYXRvcnNcblxuICAvLyBTcGVjaWFsLWNhc2UgcGF0dGVybnMgbGlrZSAnKicgZm9yIGNhdGNoLWFsbCByb3V0ZXMuXG4gIGNvbnN0IGNhcHR1cmVSZW1haW5pbmcgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdICE9PSAnKidcblxuICBpZiAoY2FwdHVyZVJlbWFpbmluZykge1xuICAgIC8vIFRoaXMgd2lsbCBtYXRjaCBuZXdsaW5lcyBpbiB0aGUgcmVtYWluaW5nIHBhdGguXG4gICAgcmVnZXhwU291cmNlICs9ICcoW1xcXFxzXFxcXFNdKj8pJ1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSBwYXRobmFtZS5tYXRjaChuZXcgUmVnRXhwKCdeJyArIHJlZ2V4cFNvdXJjZSArICckJywgJ2knKSlcblxuICBsZXQgcmVtYWluaW5nUGF0aG5hbWUsIHBhcmFtVmFsdWVzXG4gIGlmIChtYXRjaCAhPSBudWxsKSB7XG4gICAgaWYgKGNhcHR1cmVSZW1haW5pbmcpIHtcbiAgICAgIHJlbWFpbmluZ1BhdGhuYW1lID0gbWF0Y2gucG9wKClcbiAgICAgIGNvbnN0IG1hdGNoZWRQYXRoID1cbiAgICAgICAgbWF0Y2hbMF0uc3Vic3RyKDAsIG1hdGNoWzBdLmxlbmd0aCAtIHJlbWFpbmluZ1BhdGhuYW1lLmxlbmd0aClcblxuICAgICAgLy8gSWYgd2UgZGlkbid0IG1hdGNoIHRoZSBlbnRpcmUgcGF0aG5hbWUsIHRoZW4gbWFrZSBzdXJlIHRoYXQgdGhlIG1hdGNoXG4gICAgICAvLyB3ZSBkaWQgZ2V0IGVuZHMgYXQgYSBwYXRoIHNlcGFyYXRvciAocG90ZW50aWFsbHkgdGhlIG9uZSB3ZSBhZGRlZFxuICAgICAgLy8gYWJvdmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aCwgaWYgdGhlIGFjdHVhbCBtYXRjaCB3YXMgZW1wdHkpLlxuICAgICAgaWYgKFxuICAgICAgICByZW1haW5pbmdQYXRobmFtZSAmJlxuICAgICAgICBtYXRjaGVkUGF0aC5jaGFyQXQobWF0Y2hlZFBhdGgubGVuZ3RoIC0gMSkgIT09ICcvJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVtYWluaW5nUGF0aG5hbWU6IG51bGwsXG4gICAgICAgICAgcGFyYW1OYW1lcyxcbiAgICAgICAgICBwYXJhbVZhbHVlczogbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoaXMgbWF0Y2hlZCBhdCBhbGwsIHRoZW4gdGhlIG1hdGNoIHdhcyB0aGUgZW50aXJlIHBhdGhuYW1lLlxuICAgICAgcmVtYWluaW5nUGF0aG5hbWUgPSAnJ1xuICAgIH1cblxuICAgIHBhcmFtVmFsdWVzID0gbWF0Y2guc2xpY2UoMSkubWFwKFxuICAgICAgdiA9PiB2ICE9IG51bGwgPyBkZWNvZGVVUklDb21wb25lbnQodikgOiB2XG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJlbWFpbmluZ1BhdGhuYW1lID0gcGFyYW1WYWx1ZXMgPSBudWxsXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlbWFpbmluZ1BhdGhuYW1lLFxuICAgIHBhcmFtTmFtZXMsXG4gICAgcGFyYW1WYWx1ZXNcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyYW1OYW1lcyhwYXR0ZXJuKSB7XG4gIHJldHVybiBjb21waWxlUGF0dGVybihwYXR0ZXJuKS5wYXJhbU5hbWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbXMocGF0dGVybiwgcGF0aG5hbWUpIHtcbiAgY29uc3QgeyBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyB9ID0gbWF0Y2hQYXR0ZXJuKHBhdHRlcm4sIHBhdGhuYW1lKVxuXG4gIGlmIChwYXJhbVZhbHVlcyAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHBhcmFtTmFtZXMucmVkdWNlKGZ1bmN0aW9uIChtZW1vLCBwYXJhbU5hbWUsIGluZGV4KSB7XG4gICAgICBtZW1vW3BhcmFtTmFtZV0gPSBwYXJhbVZhbHVlc1tpbmRleF1cbiAgICAgIHJldHVybiBtZW1vXG4gICAgfSwge30pXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIFJldHVybnMgYSB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBwYXR0ZXJuIHdpdGggcGFyYW1zIGludGVycG9sYXRlZC4gVGhyb3dzXG4gKiBpZiB0aGVyZSBpcyBhIGR5bmFtaWMgc2VnbWVudCBvZiB0aGUgcGF0dGVybiBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gcGFyYW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQYXR0ZXJuKHBhdHRlcm4sIHBhcmFtcykge1xuICBwYXJhbXMgPSBwYXJhbXMgfHwge31cblxuICBjb25zdCB7IHRva2VucyB9ID0gY29tcGlsZVBhdHRlcm4ocGF0dGVybilcbiAgbGV0IHBhcmVuQ291bnQgPSAwLCBwYXRobmFtZSA9ICcnLCBzcGxhdEluZGV4ID0gMFxuXG4gIGxldCB0b2tlbiwgcGFyYW1OYW1lLCBwYXJhbVZhbHVlXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0b2tlbnMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB0b2tlbiA9IHRva2Vuc1tpXVxuXG4gICAgaWYgKHRva2VuID09PSAnKicgfHwgdG9rZW4gPT09ICcqKicpIHtcbiAgICAgIHBhcmFtVmFsdWUgPSBBcnJheS5pc0FycmF5KHBhcmFtcy5zcGxhdCkgPyBwYXJhbXMuc3BsYXRbc3BsYXRJbmRleCsrXSA6IHBhcmFtcy5zcGxhdFxuXG4gICAgICBpbnZhcmlhbnQoXG4gICAgICAgIHBhcmFtVmFsdWUgIT0gbnVsbCB8fCBwYXJlbkNvdW50ID4gMCxcbiAgICAgICAgJ01pc3Npbmcgc3BsYXQgIyVzIGZvciBwYXRoIFwiJXNcIicsXG4gICAgICAgIHNwbGF0SW5kZXgsIHBhdHRlcm5cbiAgICAgIClcblxuICAgICAgaWYgKHBhcmFtVmFsdWUgIT0gbnVsbClcbiAgICAgICAgcGF0aG5hbWUgKz0gZW5jb2RlVVJJKHBhcmFtVmFsdWUpXG4gICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJygnKSB7XG4gICAgICBwYXJlbkNvdW50ICs9IDFcbiAgICB9IGVsc2UgaWYgKHRva2VuID09PSAnKScpIHtcbiAgICAgIHBhcmVuQ291bnQgLT0gMVxuICAgIH0gZWxzZSBpZiAodG9rZW4uY2hhckF0KDApID09PSAnOicpIHtcbiAgICAgIHBhcmFtTmFtZSA9IHRva2VuLnN1YnN0cmluZygxKVxuICAgICAgcGFyYW1WYWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdXG5cbiAgICAgIGludmFyaWFudChcbiAgICAgICAgcGFyYW1WYWx1ZSAhPSBudWxsIHx8IHBhcmVuQ291bnQgPiAwLFxuICAgICAgICAnTWlzc2luZyBcIiVzXCIgcGFyYW1ldGVyIGZvciBwYXRoIFwiJXNcIicsXG4gICAgICAgIHBhcmFtTmFtZSwgcGF0dGVyblxuICAgICAgKVxuXG4gICAgICBpZiAocGFyYW1WYWx1ZSAhPSBudWxsKVxuICAgICAgICBwYXRobmFtZSArPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aG5hbWUgKz0gdG9rZW5cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGF0aG5hbWUucmVwbGFjZSgvXFwvKy9nLCAnLycpXG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvY29tbW9uL3BhdHRlcm5VdGlscy5qc1xuICoqLyIsImNvbnN0IGFjdGl2ZVNlc3Npb24gPSBbIFsndGxwdF9hY3RpdmVfdGVybWluYWwnXSwgKGFjdGl2ZVNlc3Npb24pID0+IHtcbiAgICBpZighYWN0aXZlU2Vzc2lvbil7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aXZlU2Vzc2lvbi50b0pTKCk7XG4gIH1cbl07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYWN0aXZlU2Vzc2lvblxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvYWN0aXZlVGVybWluYWwvZ2V0dGVycy5qc1xuICoqLyIsIm1vZHVsZS5leHBvcnRzLmdldHRlcnMgPSByZXF1aXJlKCcuL2dldHRlcnMnKTtcbm1vZHVsZS5leHBvcnRzLmFjdGlvbnMgPSByZXF1aXJlKCcuL2FjdGlvbnMnKTtcbm1vZHVsZS5leHBvcnRzLmFjdGl2ZVRlcm1TdG9yZSA9IHJlcXVpcmUoJy4vYWN0aXZlVGVybVN0b3JlJyk7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy9hY3RpdmVUZXJtaW5hbC9pbmRleC5qc1xuICoqLyIsInZhciByZWFjdG9yID0gcmVxdWlyZSgnYXBwL3JlYWN0b3InKTtcbnJlYWN0b3IucmVnaXN0ZXJTdG9yZXMoe1xuICAndGxwdF9hY3RpdmVfdGVybWluYWwnOiByZXF1aXJlKCcuL2FjdGl2ZVRlcm1pbmFsL2FjdGl2ZVRlcm1TdG9yZScpLFxuICAndGxwdF91c2VyJzogcmVxdWlyZSgnLi91c2VyL3VzZXJTdG9yZScpLFxuICAndGxwdF9ub2Rlcyc6IHJlcXVpcmUoJy4vbm9kZXMvbm9kZVN0b3JlJyksXG4gICd0bHB0X2ludml0ZSc6IHJlcXVpcmUoJy4vaW52aXRlL2ludml0ZVN0b3JlJyksXG4gICd0bHB0X3Jlc3RfYXBpJzogcmVxdWlyZSgnLi9yZXN0QXBpL3Jlc3RBcGlTdG9yZScpXG59KTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL2luZGV4LmpzXG4gKiovIiwidmFyIHJlYWN0b3IgPSByZXF1aXJlKCdhcHAvcmVhY3RvcicpO1xudmFyIHsgVExQVF9SRUNFSVZFX1VTRVJfSU5WSVRFIH0gID0gcmVxdWlyZSgnLi9hY3Rpb25UeXBlcycpO1xudmFyIGFwaSA9IHJlcXVpcmUoJ2FwcC9zZXJ2aWNlcy9hcGknKTtcbnZhciBjZmcgPSByZXF1aXJlKCdhcHAvY29uZmlnJyk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZmV0Y2hJbnZpdGUoaW52aXRlVG9rZW4pe1xuICAgIHZhciBwYXRoID0gY2ZnLmFwaS5nZXRJbnZpdGVVcmwoaW52aXRlVG9rZW4pO1xuICAgIGFwaS5nZXQocGF0aCkuZG9uZShpbnZpdGU9PntcbiAgICAgIHJlYWN0b3IuZGlzcGF0Y2goVExQVF9SRUNFSVZFX1VTRVJfSU5WSVRFLCBpbnZpdGUpO1xuICAgIH0pO1xuICB9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy9pbnZpdGUvYWN0aW9ucy5qc1xuICoqLyIsIi8qZXNsaW50IG5vLXVuZGVmOiAwLCAgbm8tdW51c2VkLXZhcnM6IDAsIG5vLWRlYnVnZ2VyOjAqL1xuXG52YXIge1RSWUlOR19UT19TSUdOX1VQfSA9IHJlcXVpcmUoJ2FwcC9tb2R1bGVzL3Jlc3RBcGkvY29uc3RhbnRzJyk7XG5cbmNvbnN0IGludml0ZSA9IFsgWyd0bHB0X2ludml0ZSddLCAoaW52aXRlKSA9PiB7XG4gIHJldHVybiBpbnZpdGU7XG4gfVxuXTtcblxuY29uc3QgYXR0ZW1wID0gWyBbJ3RscHRfcmVzdF9hcGknLCBUUllJTkdfVE9fU0lHTl9VUF0sIChhdHRlbXApID0+IHtcbiAgdmFyIGRlZmF1bHRPYmogPSB7XG4gICAgaXNQcm9jZXNzaW5nOiBmYWxzZSxcbiAgICBpc0Vycm9yOiBmYWxzZSxcbiAgICBpc1N1Y2Nlc3M6IGZhbHNlLFxuICAgIG1lc3NhZ2U6ICcnXG4gIH1cblxuICByZXR1cm4gYXR0ZW1wID8gYXR0ZW1wLnRvSlMoKSA6IGRlZmF1bHRPYmo7XG4gIFxuIH1cbl07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW52aXRlLFxuICBhdHRlbXBcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL2ludml0ZS9nZXR0ZXJzLmpzXG4gKiovIiwibW9kdWxlLmV4cG9ydHMuZ2V0dGVycyA9IHJlcXVpcmUoJy4vZ2V0dGVycycpO1xubW9kdWxlLmV4cG9ydHMuYWN0aW9ucyA9IHJlcXVpcmUoJy4vYWN0aW9ucycpO1xubW9kdWxlLmV4cG9ydHMubm9kZVN0b3JlID0gcmVxdWlyZSgnLi9pbnZpdGVTdG9yZScpO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL21vZHVsZXMvaW52aXRlL2luZGV4LmpzXG4gKiovIiwidmFyIHJlYWN0b3IgPSByZXF1aXJlKCdhcHAvcmVhY3RvcicpO1xudmFyIHsgVExQVF9SRUNFSVZFX05PREVTIH0gID0gcmVxdWlyZSgnLi9hY3Rpb25UeXBlcycpO1xudmFyIGFwaSA9IHJlcXVpcmUoJ2FwcC9zZXJ2aWNlcy9hcGknKTtcbnZhciBjZmcgPSByZXF1aXJlKCdhcHAvY29uZmlnJyk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZmV0Y2hOb2Rlcygpe1xuICAgIGFwaS5nZXQoY2ZnLmFwaS5ub2Rlc1BhdGgpLmRvbmUoZGF0YT0+e1xuICAgICAgcmVhY3Rvci5kaXNwYXRjaChUTFBUX1JFQ0VJVkVfTk9ERVMsIGRhdGEubm9kZXMpO1xuICAgIH0pO1xuICB9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy9ub2Rlcy9hY3Rpb25zLmpzXG4gKiovIiwiLy92YXIgc29ydCA9IHJlcXVpcmUoJ2FwcC9jb21tb24vc29ydCcpO1xudmFyIHsgdG9JbW11dGFibGUgfSA9IHJlcXVpcmUoJ251Y2xlYXItanMnKTtcblxuY29uc3Qgbm9kZUxpc3RWaWV3ID0gWyBbJ3RscHRfbm9kZXMnXSwgKG5vZGVzKSA9PntcbiAgICByZXR1cm4gbm9kZXMubWFwKChpdGVtKT0+e1xuICAgICAgdmFyIHNlc3Npb25zID0gaXRlbS5nZXQoJ3Nlc3Npb25zJykgfHwgdG9JbW11dGFibGUoW10pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFnczogZ2V0VGFncyhpdGVtLmdldCgnbm9kZScpKSxcbiAgICAgICAgYWRkcjogaXRlbS5nZXRJbihbJ25vZGUnLCAnYWRkciddKSxcbiAgICAgICAgc2Vzc2lvbkNvdW50OiBzZXNzaW9ucy5zaXplXG4gICAgICB9XG4gICAgfSkudG9KUygpO1xuIH1cbl07XG5cbmZ1bmN0aW9uIGdldFRhZ3Mobm9kZSl7XG4gIHZhciBhbGxMYWJlbHMgPSBbXTtcbiAgdmFyIGxhYmVscyA9IG5vZGUuZ2V0KCdsYWJlbHMnKTtcblxuICBpZihsYWJlbHMpe1xuICAgIGxhYmVscy5lbnRyeVNlcSgpLnRvQXJyYXkoKS5mb3JFYWNoKGl0ZW09PntcbiAgICAgIGFsbExhYmVscy5wdXNoKHtcbiAgICAgICAgcm9sZTogaXRlbVswXSxcbiAgICAgICAgdmFsdWU6IGl0ZW1bMV1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbGFiZWxzID0gbm9kZS5nZXQoJ2NtZF9sYWJlbHMnKTtcblxuICBpZihsYWJlbHMpe1xuICAgIGxhYmVscy5lbnRyeVNlcSgpLnRvQXJyYXkoKS5mb3JFYWNoKGl0ZW09PntcbiAgICAgIGFsbExhYmVscy5wdXNoKHtcbiAgICAgICAgcm9sZTogaXRlbVswXSxcbiAgICAgICAgdmFsdWU6IGl0ZW1bMV0uZ2V0KCdyZXN1bHQnKSxcbiAgICAgICAgdG9vbHRpcDogaXRlbVsxXS5nZXQoJ2NvbW1hbmQnKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYWxsTGFiZWxzO1xufVxuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbm9kZUxpc3RWaWV3XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy9ub2Rlcy9nZXR0ZXJzLmpzXG4gKiovIiwibW9kdWxlLmV4cG9ydHMuZ2V0dGVycyA9IHJlcXVpcmUoJy4vZ2V0dGVycycpO1xubW9kdWxlLmV4cG9ydHMuYWN0aW9ucyA9IHJlcXVpcmUoJy4vYWN0aW9ucycpO1xubW9kdWxlLmV4cG9ydHMubm9kZVN0b3JlID0gcmVxdWlyZSgnLi9ub2RlU3RvcmUnKTtcblxuLy8gbm9kZXM6IFt7XCJpZFwiOlwieDIyMFwiLFwiYWRkclwiOlwiMC4wLjAuMDozMDIyXCIsXCJob3N0bmFtZVwiOlwieDIyMFwiLFwibGFiZWxzXCI6bnVsbCxcImNtZF9sYWJlbHNcIjpudWxsfV1cblxuXG4vLyBzZXNzaW9uczogW3tcImlkXCI6XCIwNzYzMDYzNi1iYjNkLTQwZTEtYjA4Ni02MGIyY2FlMjFhYzRcIixcInBhcnRpZXNcIjpbe1wiaWRcIjpcIjg5Zjc2MmEzLTc0MjktNGM3YS1hOTEzLTc2NjQ5M2ZlN2M4YVwiLFwic2l0ZVwiOlwiMTI3LjAuMC4xOjM3NTE0XCIsXCJ1c2VyXCI6XCJha29udHNldm95XCIsXCJzZXJ2ZXJfYWRkclwiOlwiMC4wLjAuMDozMDIyXCIsXCJsYXN0X2FjdGl2ZVwiOlwiMjAxNi0wMi0yMlQxNDozOToyMC45MzEyMDUzNS0wNTowMFwifV19XVxuXG4vKlxubGV0IFRvZG9SZWNvcmQgPSBJbW11dGFibGUuUmVjb3JkKHtcbiAgICBpZDogMCxcbiAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICBjb21wbGV0ZWQ6IGZhbHNlXG59KTtcbiovXG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvbW9kdWxlcy9ub2Rlcy9pbmRleC5qc1xuICoqLyIsInZhciByZWFjdG9yID0gcmVxdWlyZSgnYXBwL3JlYWN0b3InKTtcblxudmFyIHtcbiAgVExQVF9SRVNUX0FQSV9TVEFSVCxcbiAgVExQVF9SRVNUX0FQSV9TVUNDRVNTLFxuICBUTFBUX1JFU1RfQVBJX0ZBSUwgfSA9IHJlcXVpcmUoJy4vYWN0aW9uVHlwZXMnKTtcblxuZXhwb3J0IGRlZmF1bHQge1xuXG4gIHN0YXJ0KHJlcVR5cGUpe1xuICAgIHJlYWN0b3IuZGlzcGF0Y2goVExQVF9SRVNUX0FQSV9TVEFSVCwge3R5cGU6IHJlcVR5cGV9KTtcbiAgfSxcblxuICBmYWlsKHJlcVR5cGUsIG1lc3NhZ2Upe1xuICAgIHJlYWN0b3IuZGlzcGF0Y2goVExQVF9SRVNUX0FQSV9GQUlMLCAge3R5cGU6IHJlcVR5cGUsIG1lc3NhZ2V9KTtcbiAgfSxcblxuICBzdWNjZXNzKHJlcVR5cGUpe1xuICAgIHJlYWN0b3IuZGlzcGF0Y2goVExQVF9SRVNUX0FQSV9TVUNDRVNTLCB7dHlwZTogcmVxVHlwZX0pO1xuICB9XG5cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL3Jlc3RBcGkvYWN0aW9ucy5qc1xuICoqLyIsInZhciB7IFN0b3JlLCB0b0ltbXV0YWJsZSB9ID0gcmVxdWlyZSgnbnVjbGVhci1qcycpO1xudmFyIHtcbiAgVExQVF9SRVNUX0FQSV9TVEFSVCxcbiAgVExQVF9SRVNUX0FQSV9TVUNDRVNTLFxuICBUTFBUX1JFU1RfQVBJX0ZBSUwgfSA9IHJlcXVpcmUoJy4vYWN0aW9uVHlwZXMnKTtcblxuZXhwb3J0IGRlZmF1bHQgU3RvcmUoe1xuICBnZXRJbml0aWFsU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRvSW1tdXRhYmxlKHt9KTtcbiAgfSxcblxuICBpbml0aWFsaXplKCkge1xuICAgIHRoaXMub24oVExQVF9SRVNUX0FQSV9TVEFSVCwgc3RhcnQpO1xuICAgIHRoaXMub24oVExQVF9SRVNUX0FQSV9GQUlMLCBmYWlsKTtcbiAgICB0aGlzLm9uKFRMUFRfUkVTVF9BUElfU1VDQ0VTUywgc3VjY2Vzcyk7XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIHN0YXJ0KHN0YXRlLCByZXF1ZXN0KXtcbiAgcmV0dXJuIHN0YXRlLnNldChyZXF1ZXN0LnR5cGUsIHRvSW1tdXRhYmxlKHtpc1Byb2Nlc3Npbmc6IHRydWV9KSk7XG59XG5cbmZ1bmN0aW9uIGZhaWwoc3RhdGUsIHJlcXVlc3Qpe1xuICByZXR1cm4gc3RhdGUuc2V0KHJlcXVlc3QudHlwZSwgdG9JbW11dGFibGUoe2lzRmFpbGVkOiB0cnVlLCBtZXNzYWdlOiByZXF1ZXN0Lm1lc3NhZ2V9KSk7XG59XG5cbmZ1bmN0aW9uIHN1Y2Nlc3Moc3RhdGUsIHJlcXVlc3Qpe1xuICByZXR1cm4gc3RhdGUuc2V0KHJlcXVlc3QudHlwZSwgdG9JbW11dGFibGUoe2lzU3VjY2VzczogdHJ1ZX0pKTtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9tb2R1bGVzL3Jlc3RBcGkvcmVzdEFwaVN0b3JlLmpzXG4gKiovIiwidmFyIHV0aWxzID0ge1xuXG4gIHV1aWQoKXtcbiAgICAvLyBuZXZlciB1c2UgaXQgaW4gcHJvZHVjdGlvblxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uKGMpIHtcbiAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSoxNnwwLCB2ID0gYyA9PSAneCcgPyByIDogKHImMHgzfDB4OCk7XG4gICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XG4gICAgfSk7XG4gIH0sXG5cbiAgZGlzcGxheURhdGUoZGF0ZSl7XG4gICAgdHJ5e1xuICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgKyAnICcgKyBkYXRlLnRvTG9jYWxlVGltZVN0cmluZygpO1xuICAgIH1jYXRjaChlcnIpe1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgfSxcblxuICBmb3JtYXRTdHJpbmcoZm9ybWF0KSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHJldHVybiBmb3JtYXQucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxceyhcXFxcZCspXFxcXH0nLCAnZycpLFxuICAgICAgKG1hdGNoLCBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuICEoYXJnc1tudW1iZXJdID09PSBudWxsIHx8IGFyZ3NbbnVtYmVyXSA9PT0gdW5kZWZpbmVkKSA/IGFyZ3NbbnVtYmVyXSA6ICcnO1xuICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXRpbHM7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvdXRpbHMuanNcbiAqKi8iLCJ2YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xudmFyIE5hdkxlZnRCYXIgPSByZXF1aXJlKCcuL25hdkxlZnRCYXInKTtcbnZhciBjZmcgPSByZXF1aXJlKCdhcHAvY29uZmlnJyk7XG52YXIge1Rlcm1pbmFsSG9zdH0gPSByZXF1aXJlKCcuL3Rlcm1pbmFsSG9zdC5qc3gnKTtcblxudmFyIEFwcCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJncnYtdGxwdFwiPlxuICAgICAgICA8VGVybWluYWxIb3N0Lz5cbiAgICAgICAgPE5hdkxlZnRCYXIvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgIDxuYXYgY2xhc3NOYW1lPVwiXCIgcm9sZT1cIm5hdmlnYXRpb25cIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206IDAgfX0+XG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwibmF2IG5hdmJhci10b3AtbGlua3MgbmF2YmFyLXJpZ2h0XCI+ICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9e2NmZy5yb3V0ZXMubG9nb3V0fT5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXNpZ24tb3V0XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgTG9nIG91dFxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9uYXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi1wYWdlXCI+XG4gICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSBBcHA7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvY29tcG9uZW50cy9hcHAuanN4XG4gKiovIiwidmFyIGNmZyA9IHJlcXVpcmUoJ2FwcC9jb25maWcnKTtcbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBFdmVudFN0cmVhbWVyID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB2YXIge3Rva2VuLCBzaWR9ID0gdGhpcy5wcm9wcztcbiAgICB2YXIgY29ublN0ciA9IGNmZy5hcGkuZ2V0RXZlbnRTdHJlYW1lckNvbm5TdHIodG9rZW4sIHNpZCk7XG5cbiAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoY29ublN0ciwgXCJwcm90b1wiKTtcbiAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSAoKSA9PiB7fTtcbiAgICB0aGlzLnNvY2tldC5vbmNsb3NlID0gKCkgPT4ge307XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5zb2NrZXQuY2xvc2UoKTtcbiAgfSxcblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUoKXtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRTdHJlYW1lcjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9jb21wb25lbnRzL2V2ZW50U3RyZWFtZXIuanN4XG4gKiovIiwibW9kdWxlLmV4cG9ydHMuQXBwID0gcmVxdWlyZSgnLi9hcHAuanN4Jyk7XG5tb2R1bGUuZXhwb3J0cy5Mb2dpbiA9IHJlcXVpcmUoJy4vbG9naW4uanN4Jyk7XG5tb2R1bGUuZXhwb3J0cy5OZXdVc2VyID0gcmVxdWlyZSgnLi9uZXdVc2VyLmpzeCcpO1xubW9kdWxlLmV4cG9ydHMuTm9kZXMgPSByZXF1aXJlKCcuL25vZGVzL21haW4uanN4Jyk7XG5tb2R1bGUuZXhwb3J0cy5TZXNzaW9ucyA9IHJlcXVpcmUoJy4vc2Vzc2lvbnMvbWFpbi5qc3gnKTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9jb21wb25lbnRzL2luZGV4LmpzeFxuICoqLyIsInZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgJCA9IHJlcXVpcmUoJ2pRdWVyeScpO1xudmFyIHJlYWN0b3IgPSByZXF1aXJlKCdhcHAvcmVhY3RvcicpO1xudmFyIExpbmtlZFN0YXRlTWl4aW4gPSByZXF1aXJlKCdyZWFjdC1hZGRvbnMtbGlua2VkLXN0YXRlLW1peGluJyk7XG52YXIge2FjdGlvbnN9ID0gcmVxdWlyZSgnYXBwL21vZHVsZXMvdXNlcicpO1xudmFyIEdvb2dsZUF1dGhJbmZvID0gcmVxdWlyZSgnLi9nb29nbGVBdXRoJyk7XG52YXIgTG9naW5JbnB1dEZvcm0gPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cbiAgbWl4aW5zOiBbTGlua2VkU3RhdGVNaXhpbl0sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1c2VyOiAnJyxcbiAgICAgIHBhc3N3b3JkOiAnJyxcbiAgICAgIHRva2VuOiAnJ1xuICAgIH1cbiAgfSxcblxuICBvbkNsaWNrOiBmdW5jdGlvbihlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgYWN0aW9ucy5sb2dpbih7IC4uLnRoaXMuc3RhdGV9LCAnL3dlYicpO1xuICAgIH1cbiAgfSxcblxuICBpc1ZhbGlkOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgJGZvcm0gPSAkKHRoaXMucmVmcy5mb3JtKTtcbiAgICByZXR1cm4gJGZvcm0ubGVuZ3RoID09PSAwIHx8ICRmb3JtLnZhbGlkKCk7XG4gIH0sXG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Zm9ybSByZWY9XCJmb3JtXCIgY2xhc3NOYW1lPVwiZ3J2LWxvZ2luLWlucHV0LWZvcm1cIj5cbiAgICAgICAgPGgzPiBXZWxjb21lIHRvIFRlbGVwb3J0IDwvaDM+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8aW5wdXQgdmFsdWVMaW5rPXt0aGlzLmxpbmtTdGF0ZSgndXNlcicpfSBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2wgcmVxdWlyZWRcIiBwbGFjZWhvbGRlcj1cIlVzZXIgbmFtZVwiIG5hbWU9XCJ1c2VyTmFtZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8aW5wdXQgdmFsdWVMaW5rPXt0aGlzLmxpbmtTdGF0ZSgncGFzc3dvcmQnKX0gdHlwZT1cInBhc3N3b3JkXCIgbmFtZT1cInBhc3N3b3JkXCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sIHJlcXVpcmVkXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxpbnB1dCB2YWx1ZUxpbms9e3RoaXMubGlua1N0YXRlKCd0b2tlbicpfSBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2wgcmVxdWlyZWRcIiBuYW1lPVwidG9rZW5cIiBwbGFjZWhvbGRlcj1cIlR3byBmYWN0b3IgdG9rZW4gKEdvb2dsZSBBdXRoZW50aWNhdG9yKVwiLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgYmxvY2sgZnVsbC13aWR0aCBtLWJcIiBvbkNsaWNrPXt0aGlzLm9uQ2xpY2t9PkxvZ2luPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgICk7XG4gIH1cbn0pXG5cbnZhciBMb2dpbiA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcblxuICBtaXhpbnM6IFtyZWFjdG9yLlJlYWN0TWl4aW5dLFxuXG4gIGdldERhdGFCaW5kaW5ncygpIHtcbiAgICByZXR1cm4ge1xuICAvLyAgICB1c2VyUmVxdWVzdDogZ2V0dGVycy51c2VyUmVxdWVzdFxuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpc1Byb2Nlc3NpbmcgPSBmYWxzZTsvL3RoaXMuc3RhdGUudXNlclJlcXVlc3QuZ2V0KCdpc0xvYWRpbmcnKTtcbiAgICB2YXIgaXNFcnJvciA9IGZhbHNlOy8vdGhpcy5zdGF0ZS51c2VyUmVxdWVzdC5nZXQoJ2lzRXJyb3InKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi1sb2dpbiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi1sb2dvLXRwcnRcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncnYtY29udGVudCBncnYtZmxleFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3J2LWZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICA8TG9naW5JbnB1dEZvcm0vPlxuICAgICAgICAgICAgPEdvb2dsZUF1dGhJbmZvLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3J2LWxvZ2luLWluZm9cIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtcXVlc3Rpb25cIj48L2k+XG4gICAgICAgICAgICAgIDxzdHJvbmc+TmV3IEFjY291bnQgb3IgZm9yZ290IHBhc3N3b3JkPzwvc3Ryb25nPlxuICAgICAgICAgICAgICA8ZGl2PkFzayBmb3IgYXNzaXN0YW5jZSBmcm9tIHlvdXIgQ29tcGFueSBhZG1pbmlzdHJhdG9yPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2dpbjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9jb21wb25lbnRzL2xvZ2luLmpzeFxuICoqLyIsInZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgeyBSb3V0ZXIsIEluZGV4TGluaywgSGlzdG9yeSB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyJyk7XG52YXIgY2ZnID0gcmVxdWlyZSgnYXBwL2NvbmZpZycpO1xuXG52YXIgbWVudUl0ZW1zID0gW1xuICB7aWNvbjogJ2ZhIGZhLWNvZ3MnLCB0bzogY2ZnLnJvdXRlcy5ub2RlcywgdGl0bGU6ICdOb2Rlcyd9LFxuICB7aWNvbjogJ2ZhIGZhLXNpdGVtYXAnLCB0bzogY2ZnLnJvdXRlcy5zZXNzaW9ucywgdGl0bGU6ICdTZXNzaW9ucyd9LFxuICB7aWNvbjogJ2ZhIGZhLXF1ZXN0aW9uJywgdG86IGNmZy5yb3V0ZXMuc2Vzc2lvbnMsIHRpdGxlOiAnU2Vzc2lvbnMnfSxcbl07XG5cbnZhciBOYXZMZWZ0QmFyID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXG4gIHJlbmRlcjogZnVuY3Rpb24oKXtcbiAgICB2YXIgaXRlbXMgPSBtZW51SXRlbXMubWFwKChpLCBpbmRleCk9PntcbiAgICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLmNvbnRleHQucm91dGVyLmlzQWN0aXZlKGkudG8pID8gJ2FjdGl2ZScgOiAnJztcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxsaSBrZXk9e2luZGV4fSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAgPEluZGV4TGluayB0bz17aS50b30+XG4gICAgICAgICAgICA8aSBjbGFzc05hbWU9e2kuaWNvbn0gdGl0bGU9e2kudGl0bGV9Lz5cbiAgICAgICAgICA8L0luZGV4TGluaz5cbiAgICAgICAgPC9saT5cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPG5hdiBjbGFzc05hbWU9Jycgcm9sZT0nbmF2aWdhdGlvbicgc3R5bGU9e3t3aWR0aDogJzYwcHgnLCBmbG9hdDogJ2xlZnQnLCBwb3NpdGlvbjogJ2Fic29sdXRlJ319PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nJz5cbiAgICAgICAgICA8dWwgY2xhc3NOYW1lPSduYXYgMW1ldGlzbWVudScgaWQ9J3NpZGUtbWVudSc+XG4gICAgICAgICAgICB7aXRlbXN9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25hdj5cbiAgICApO1xuICB9XG59KTtcblxuTmF2TGVmdEJhci5jb250ZXh0VHlwZXMgPSB7XG4gIHJvdXRlcjogUmVhY3QuUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTmF2TGVmdEJhcjtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9jb21wb25lbnRzL25hdkxlZnRCYXIuanN4XG4gKiovIiwidmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciAkID0gcmVxdWlyZSgnalF1ZXJ5Jyk7XG52YXIgcmVhY3RvciA9IHJlcXVpcmUoJ2FwcC9yZWFjdG9yJyk7XG52YXIge2FjdGlvbnMsIGdldHRlcnN9ID0gcmVxdWlyZSgnYXBwL21vZHVsZXMvaW52aXRlJyk7XG52YXIgdXNlck1vZHVsZSA9IHJlcXVpcmUoJ2FwcC9tb2R1bGVzL3VzZXInKTtcbnZhciBMaW5rZWRTdGF0ZU1peGluID0gcmVxdWlyZSgncmVhY3QtYWRkb25zLWxpbmtlZC1zdGF0ZS1taXhpbicpO1xudmFyIEdvb2dsZUF1dGhJbmZvID0gcmVxdWlyZSgnLi9nb29nbGVBdXRoJyk7XG5cbnZhciBJbnZpdGVJbnB1dEZvcm0gPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cbiAgbWl4aW5zOiBbTGlua2VkU3RhdGVNaXhpbl0sXG5cbiAgY29tcG9uZW50RGlkTW91bnQoKXtcbiAgICAkKHRoaXMucmVmcy5mb3JtKS52YWxpZGF0ZSh7XG4gICAgICBydWxlczp7XG4gICAgICAgIHBhc3N3b3JkOntcbiAgICAgICAgICBtaW5sZW5ndGg6IDUsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcGFzc3dvcmRDb25maXJtZWQ6e1xuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGVxdWFsVG86IHRoaXMucmVmcy5wYXNzd29yZFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBtZXNzYWdlczoge1xuICBcdFx0XHRwYXNzd29yZENvbmZpcm1lZDoge1xuICBcdFx0XHRcdG1pbmxlbmd0aDogJC52YWxpZGF0b3IuZm9ybWF0KCdFbnRlciBhdCBsZWFzdCB7MH0gY2hhcmFjdGVycycpLFxuICBcdFx0XHRcdGVxdWFsVG86ICdFbnRlciB0aGUgc2FtZSBwYXNzd29yZCBhcyBhYm92ZSdcbiAgXHRcdFx0fVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLnByb3BzLmludml0ZS51c2VyLFxuICAgICAgcHN3OiAnJyxcbiAgICAgIHBzd0NvbmZpcm1lZDogJycsXG4gICAgICB0b2tlbjogJydcbiAgICB9XG4gIH0sXG5cbiAgb25DbGljayhlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgdXNlck1vZHVsZS5hY3Rpb25zLnNpZ25VcCh7XG4gICAgICAgIG5hbWU6IHRoaXMuc3RhdGUubmFtZSxcbiAgICAgICAgcHN3OiB0aGlzLnN0YXRlLnBzdyxcbiAgICAgICAgdG9rZW46IHRoaXMuc3RhdGUudG9rZW4sXG4gICAgICAgIGludml0ZVRva2VuOiB0aGlzLnByb3BzLmludml0ZS5pbnZpdGVfdG9rZW59KTtcbiAgICB9XG4gIH0sXG5cbiAgaXNWYWxpZCgpIHtcbiAgICB2YXIgJGZvcm0gPSAkKHRoaXMucmVmcy5mb3JtKTtcbiAgICByZXR1cm4gJGZvcm0ubGVuZ3RoID09PSAwIHx8ICRmb3JtLnZhbGlkKCk7XG4gIH0sXG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Zm9ybSByZWY9XCJmb3JtXCIgY2xhc3NOYW1lPVwiZ3J2LWludml0ZS1pbnB1dC1mb3JtXCI+XG4gICAgICAgIDxoMz4gR2V0IHN0YXJ0ZWQgd2l0aCBUZWxlcG9ydCA8L2gzPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHZhbHVlTGluaz17dGhpcy5saW5rU3RhdGUoJ25hbWUnKX1cbiAgICAgICAgICAgICAgbmFtZT1cInVzZXJOYW1lXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJVc2VyIG5hbWVcIi8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdmFsdWVMaW5rPXt0aGlzLmxpbmtTdGF0ZSgncHN3Jyl9XG4gICAgICAgICAgICAgIHJlZj1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgbmFtZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwIGdydi1cIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB2YWx1ZUxpbms9e3RoaXMubGlua1N0YXRlKCdwc3dDb25maXJtZWQnKX1cbiAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgbmFtZT1cInBhc3N3b3JkQ29uZmlybWVkXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQYXNzd29yZCBjb25maXJtXCIvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG5hbWU9XCJ0b2tlblwiXG4gICAgICAgICAgICAgIHZhbHVlTGluaz17dGhpcy5saW5rU3RhdGUoJ3Rva2VuJyl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHdvIGZhY3RvciB0b2tlbiAoR29vZ2xlIEF1dGhlbnRpY2F0b3IpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBkaXNhYmxlZD17dGhpcy5wcm9wcy5hdHRlbXAuaXNQcm9jZXNzaW5nfSBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgYmxvY2sgZnVsbC13aWR0aCBtLWJcIiBvbkNsaWNrPXt0aGlzLm9uQ2xpY2t9ID5TaWduIHVwPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgICk7XG4gIH1cbn0pXG5cbnZhciBJbnZpdGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cbiAgbWl4aW5zOiBbcmVhY3Rvci5SZWFjdE1peGluXSxcblxuICBnZXREYXRhQmluZGluZ3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGludml0ZTogZ2V0dGVycy5pbnZpdGUsXG4gICAgICBhdHRlbXA6IGdldHRlcnMuYXR0ZW1wXG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50KCl7XG4gICAgYWN0aW9ucy5mZXRjaEludml0ZSh0aGlzLnByb3BzLnBhcmFtcy5pbnZpdGVUb2tlbik7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICBpZighdGhpcy5zdGF0ZS5pbnZpdGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi1pbnZpdGUgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncnYtbG9nby10cHJ0XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3J2LWNvbnRlbnQgZ3J2LWZsZXhcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgPEludml0ZUlucHV0Rm9ybSBhdHRlbXA9e3RoaXMuc3RhdGUuYXR0ZW1wfSBpbnZpdGU9e3RoaXMuc3RhdGUuaW52aXRlLnRvSlMoKX0vPlxuICAgICAgICAgICAgPEdvb2dsZUF1dGhJbmZvLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgPGg0PlNjYW4gYmFyIGNvZGUgZm9yIGF1dGggdG9rZW4gPGJyLz4gPHNtYWxsPlNjYW4gYmVsb3cgdG8gZ2VuZXJhdGUgeW91ciB0d28gZmFjdG9yIHRva2VuPC9zbWFsbD48L2g0PlxuICAgICAgICAgICAgPGltZyBjbGFzc05hbWU9XCJpbWctdGh1bWJuYWlsXCIgc3JjPXsgYGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke3RoaXMuc3RhdGUuaW52aXRlLmdldCgncXInKX1gIH0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnZpdGU7XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvY29tcG9uZW50cy9uZXdVc2VyLmpzeFxuICoqLyIsInZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgcmVhY3RvciA9IHJlcXVpcmUoJ2FwcC9yZWFjdG9yJyk7XG52YXIge2dldHRlcnMsIGFjdGlvbnN9ID0gcmVxdWlyZSgnYXBwL21vZHVsZXMvbm9kZXMnKTtcbnZhciB1c2VyR2V0dGVycyA9IHJlcXVpcmUoJ2FwcC9tb2R1bGVzL3VzZXIvZ2V0dGVycycpO1xudmFyIHtUYWJsZSwgQ29sdW1uLCBDZWxsfSA9IHJlcXVpcmUoJ2FwcC9jb21wb25lbnRzL3RhYmxlLmpzeCcpO1xudmFyIHtjb25uZWN0fSA9IHJlcXVpcmUoJ2FwcC9tb2R1bGVzL2FjdGl2ZVRlcm1pbmFsL2FjdGlvbnMnKTtcblxuY29uc3QgVGV4dENlbGwgPSAoe3Jvd0luZGV4LCBkYXRhLCBjb2x1bW5LZXksIC4uLnByb3BzfSkgPT4gKFxuICA8Q2VsbCB7Li4ucHJvcHN9PlxuICAgIHtkYXRhW3Jvd0luZGV4XVtjb2x1bW5LZXldfVxuICA8L0NlbGw+XG4pO1xuXG5jb25zdCBUYWdDZWxsID0gKHtyb3dJbmRleCwgZGF0YSwgY29sdW1uS2V5LCAuLi5wcm9wc30pID0+IChcbiAgPENlbGwgey4uLnByb3BzfT5cbiAgICB7IGRhdGFbcm93SW5kZXhdLnRhZ3MubWFwKChpdGVtLCBpbmRleCkgPT5cbiAgICAgICg8c3BhbiBrZXk9e2luZGV4fSBjbGFzc05hbWU9XCJsYWJlbCBsYWJlbC1kZWZhdWx0XCI+XG4gICAgICAgIHtpdGVtLnJvbGV9IDxsaSBjbGFzc05hbWU9XCJmYSBmYS1sb25nLWFycm93LXJpZ2h0XCI+PC9saT5cbiAgICAgICAge2l0ZW0udmFsdWV9XG4gICAgICA8L3NwYW4+KVxuICAgICkgfVxuICA8L0NlbGw+XG4pO1xuXG5jb25zdCBMb2dpbkNlbGwgPSAoe3VzZXIsIHJvd0luZGV4LCBkYXRhLCAuLi5wcm9wc30pID0+IHtcbiAgaWYoIXVzZXIgfHwgdXNlci5sb2dpbnMubGVuZ3RoID09PSAwKXtcbiAgICByZXR1cm4gPENlbGwgey4uLnByb3BzfSAvPjtcbiAgfVxuXG4gIHZhciAkbGlzID0gW107XG5cbiAgZm9yKHZhciBpID0gMDsgaSA8IHVzZXIubG9naW5zLmxlbmd0aDsgaSsrKXtcbiAgICAkbGlzLnB1c2goPGxpIGtleT17aX0+PGEgaHJlZj1cIiNcIiB0YXJnZXQ9XCJfYmxhbmtcIiBvbkNsaWNrPXtjb25uZWN0LmJpbmQobnVsbCwgZGF0YVtyb3dJbmRleF0uYWRkciwgdXNlci5sb2dpbnNbaV0sIHVuZGVmaW5lZCl9Pnt1c2VyLmxvZ2luc1tpXX08L2E+PC9saT4pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q2VsbCB7Li4ucHJvcHN9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJidG4tZ3JvdXBcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17Y29ubmVjdC5iaW5kKG51bGwsIGRhdGFbcm93SW5kZXhdLmFkZHIsIHVzZXIubG9naW5zWzBdLCB1bmRlZmluZWQpfSBjbGFzc05hbWU9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCI+e3VzZXIubG9naW5zWzBdfTwvYnV0dG9uPlxuICAgICAgICB7XG4gICAgICAgICAgJGxpcy5sZW5ndGggPiAxID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidG4tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBkcm9wZG93bi10b2dnbGVcIiBhcmlhLWV4cGFuZGVkPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImRyb3Bkb3duLW1lbnVcIj5cbiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cIiNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5Mb2dzPC9hPjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCIjXCIgdGFyZ2V0PVwiX2JsYW5rXCI+TG9nczwvYT48L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKTogbnVsbFxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L0NlbGw+XG4gIClcbn07XG5cbnZhciBOb2RlcyA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcblxuICBtaXhpbnM6IFtyZWFjdG9yLlJlYWN0TWl4aW5dLFxuXG4gIGdldERhdGFCaW5kaW5ncygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbm9kZVJlY29yZHM6IGdldHRlcnMubm9kZUxpc3RWaWV3LFxuICAgICAgdXNlcjogdXNlckdldHRlcnMudXNlclxuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnREaWRNb3VudCgpe1xuICAgIGFjdGlvbnMuZmV0Y2hOb2RlcygpO1xuICB9LFxuXG4gIHJlbmRlclJvd3MoKXtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBkYXRhID0gdGhpcy5zdGF0ZS5ub2RlUmVjb3JkcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJncnYtbm9kZXNcIj5cbiAgICAgICAgPGgxPiBOb2RlcyA8L2gxPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlwiPlxuICAgICAgICAgICAgICA8VGFibGUgcm93Q291bnQ9e2RhdGEubGVuZ3RofSBjbGFzc05hbWU9XCJ0YWJsZS1zdHJpcHBlZCBncnYtbm9kZXMtdGFibGVcIj5cbiAgICAgICAgICAgICAgICA8Q29sdW1uXG4gICAgICAgICAgICAgICAgICBjb2x1bW5LZXk9XCJzZXNzaW9uQ291bnRcIlxuICAgICAgICAgICAgICAgICAgaGVhZGVyPXs8Q2VsbD4gU2Vzc2lvbnMgPC9DZWxsPiB9XG4gICAgICAgICAgICAgICAgICBjZWxsPXs8VGV4dENlbGwgZGF0YT17ZGF0YX0vPiB9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Q29sdW1uXG4gICAgICAgICAgICAgICAgICBjb2x1bW5LZXk9XCJhZGRyXCJcbiAgICAgICAgICAgICAgICAgIGhlYWRlcj17PENlbGw+IE5vZGUgPC9DZWxsPiB9XG4gICAgICAgICAgICAgICAgICBjZWxsPXs8VGV4dENlbGwgZGF0YT17ZGF0YX0vPiB9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Q29sdW1uXG4gICAgICAgICAgICAgICAgICBjb2x1bW5LZXk9XCJ0YWdzXCJcbiAgICAgICAgICAgICAgICAgIGhlYWRlcj17PENlbGw+PC9DZWxsPiB9XG4gICAgICAgICAgICAgICAgICBjZWxsPXs8VGFnQ2VsbCBkYXRhPXtkYXRhfS8+IH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxDb2x1bW5cbiAgICAgICAgICAgICAgICAgIGNvbHVtbktleT1cInJvbGVzXCJcbiAgICAgICAgICAgICAgICAgIGhlYWRlcj17PENlbGw+TG9naW4gYXM8L0NlbGw+IH1cbiAgICAgICAgICAgICAgICAgIGNlbGw9ezxMb2dpbkNlbGwgZGF0YT17ZGF0YX0gdXNlcj17dGhpcy5zdGF0ZS51c2VyfS8+IH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBOb2RlcztcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9jb21wb25lbnRzL25vZGVzL21haW4uanN4XG4gKiovIiwidmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciByZWFjdG9yID0gcmVxdWlyZSgnYXBwL3JlYWN0b3InKTtcbnZhciBOb2RlcyA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPGgxPiBTZXNzaW9ucyE8L2gxPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlwiPlxuICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwidGFibGUgdGFibGUtc3RyaXBlZFwiPlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRoPk5vZGU8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPkxhYmVsczwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoPkNQVTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoPlJBTTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoPk9TPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGg+IExhc3QgSGVhcnRiZWF0IDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgIDx0Ym9keT48L3Rib2R5PlxuICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBOb2RlcztcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9jb21wb25lbnRzL3Nlc3Npb25zL21haW4uanN4XG4gKiovIiwidmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIEdydlRhYmxlQ2VsbCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgcmVuZGVyKCl7XG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gcHJvcHMuaXNIZWFkZXIgPyA8dGgga2V5PXtwcm9wcy5rZXl9Pntwcm9wcy5jaGlsZHJlbn08L3RoPiA6IDx0ZCBrZXk9e3Byb3BzLmtleX0+e3Byb3BzLmNoaWxkcmVufTwvdGQ+O1xuICB9XG59KTtcblxudmFyIEdydlRhYmxlID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXG4gIHJlbmRlckhlYWRlcihjaGlsZHJlbil7XG4gICAgdmFyIGNlbGxzID0gY2hpbGRyZW4ubWFwKChpdGVtLCBpbmRleCk9PntcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGwoaXRlbS5wcm9wcy5oZWFkZXIsIHtpbmRleCwga2V5OiBpbmRleCwgaXNIZWFkZXI6IHRydWUsIC4uLml0ZW0ucHJvcHN9KTtcbiAgICB9KVxuXG4gICAgcmV0dXJuIDx0aGVhZD48dHI+e2NlbGxzfTwvdHI+PC90aGVhZD5cbiAgfSxcblxuICByZW5kZXJCb2R5KGNoaWxkcmVuKXtcbiAgICB2YXIgY291bnQgPSB0aGlzLnByb3BzLnJvd0NvdW50O1xuICAgIHZhciByb3dzID0gW107XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpICsrKXtcbiAgICAgIHZhciBjZWxscyA9IGNoaWxkcmVuLm1hcCgoaXRlbSwgaW5kZXgpPT57XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGwoaXRlbS5wcm9wcy5jZWxsLCB7cm93SW5kZXg6IGksIGtleTogaW5kZXgsIGlzSGVhZGVyOiBmYWxzZSwgLi4uaXRlbS5wcm9wc30pO1xuICAgICAgfSlcblxuICAgICAgcm93cy5wdXNoKDx0ciBrZXk9e2l9PntjZWxsc308L3RyPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIDx0Ym9keT57cm93c308L3Rib2R5PjtcbiAgfSxcblxuICByZW5kZXJDZWxsKGNlbGwsIGNlbGxQcm9wcyl7XG4gICAgdmFyIGNvbnRlbnQgPSBudWxsO1xuICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjZWxsKSkge1xuICAgICAgIGNvbnRlbnQgPSBSZWFjdC5jbG9uZUVsZW1lbnQoY2VsbCwgY2VsbFByb3BzKTtcbiAgICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcHMuY2VsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgIGNvbnRlbnQgPSBjZWxsKGNlbGxQcm9wcyk7XG4gICAgIH1cblxuICAgICByZXR1cm4gY29udGVudDtcbiAgfSxcblxuICByZW5kZXIoKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gW107XG4gICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaCh0aGlzLnByb3BzLmNoaWxkcmVuLCAoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKGNoaWxkLnR5cGUuZGlzcGxheU5hbWUgIT09ICdHcnZUYWJsZUNvbHVtbicpe1xuICAgICAgICB0aHJvdyAnU2hvdWxkIGJlIEdydlRhYmxlQ29sdW1uJztcbiAgICAgIH1cblxuICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgfSk7XG5cbiAgICB2YXIgdGFibGVDbGFzcyA9ICd0YWJsZSAnICsgdGhpcy5wcm9wcy5jbGFzc05hbWU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHRhYmxlIGNsYXNzTmFtZT17dGFibGVDbGFzc30+XG4gICAgICAgIHt0aGlzLnJlbmRlckhlYWRlcihjaGlsZHJlbil9XG4gICAgICAgIHt0aGlzLnJlbmRlckJvZHkoY2hpbGRyZW4pfVxuICAgICAgPC90YWJsZT5cbiAgICApO1xuICB9XG59KVxuXG52YXIgR3J2VGFibGVDb2x1bW4gPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgPEdydlRhYmxlQ29sdW1uIC8+IHNob3VsZCBuZXZlciByZW5kZXInKTtcbiAgfVxufSlcblxuZXhwb3J0IGRlZmF1bHQgR3J2VGFibGU7XG5leHBvcnQge0dydlRhYmxlQ29sdW1uIGFzIENvbHVtbiwgR3J2VGFibGUgYXMgVGFibGUsIEdydlRhYmxlQ2VsbCBhcyBDZWxsfTtcblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIC4vc3JjL2FwcC9jb21wb25lbnRzL3RhYmxlLmpzeFxuICoqLyIsInZhciBzZXNzaW9uID0gcmVxdWlyZSgnYXBwL3Nlc3Npb24nKTtcbnZhciBjZmcgPSByZXF1aXJlKCdhcHAvY29uZmlnJyk7XG52YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xudmFyIHtnZXR0ZXJzLCBhY3Rpb25zfSA9IHJlcXVpcmUoJ2FwcC9tb2R1bGVzL2FjdGl2ZVRlcm1pbmFsLycpO1xudmFyIEV2ZW50U3RyZWFtZXIgPSByZXF1aXJlKCcuL2V2ZW50U3RyZWFtZXIuanN4Jyk7XG5cbnZhciBUZXJtaW5hbEhvc3QgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cbiAgbWl4aW5zOiBbcmVhY3Rvci5SZWFjdE1peGluXSxcblxuICBvbk9wZW4oKXtcbiAgICBhY3Rpb25zLmNvbm5lY3RlZCgpO1xuICB9LFxuXG4gIGdldERhdGFCaW5kaW5ncygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWN0aXZlU2Vzc2lvbjogZ2V0dGVycy5hY3RpdmVTZXNzaW9uXG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgaWYoIXRoaXMuc3RhdGUuYWN0aXZlU2Vzc2lvbil7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIge3Rlcm0sIGlzQ29ubmVjdGVkfSA9IHRoaXMuc3RhdGUuYWN0aXZlU2Vzc2lvbjtcbiAgICB2YXIge3Rva2VufSA9IHNlc3Npb24uZ2V0VXNlckRhdGEoKTtcblxuICAgIHJldHVybiAoXG4gICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3J2LXRlcm1pbmFsLWhvc3RcIj5cbiAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdydi10ZXJtaW5hbC1wYXJ0aWNpcGFuc1wiPlxuICAgICAgICAgPHVsIGNsYXNzTmFtZT1cIm5hdlwiPlxuICAgICAgICAgICA8bGk+PGJ1dHRvbiBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgYnRuLWNpcmNsZVwiIHR5cGU9XCJidXR0b25cIj4gPHN0cm9uZz5BPC9zdHJvbmc+PC9idXR0b24+PC9saT5cbiAgICAgICAgICAgPGxpPjxidXR0b24gY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1jaXJjbGVcIiB0eXBlPVwiYnV0dG9uXCI+IEIgPC9idXR0b24+PC9saT5cbiAgICAgICAgICAgPGxpPjxidXR0b24gY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1jaXJjbGVcIiB0eXBlPVwiYnV0dG9uXCI+IEMgPC9idXR0b24+PC9saT5cbiAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17YWN0aW9ucy5jbG9zZX0gY2xhc3NOYW1lPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLWNpcmNsZVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICA8L2xpPlxuICAgICAgICAgPC91bD5cbiAgICAgICA8L2Rpdj5cbiAgICAgICA8ZGl2PlxuICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidG4tZ3JvdXBcIj5cbiAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYnRuIGJ0bi14cyBidG4tcHJpbWFyeVwiPjEyOC4wLjAuMTo4ODg4PC9zcGFuPlxuICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgIDxidXR0b24gZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBidG4teHMgZHJvcGRvd24tdG9nZ2xlXCIgYXJpYS1leHBhbmRlZD1cInRydWVcIj5cbiAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJkcm9wZG93bi1tZW51XCI+XG4gICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cIiNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5Mb2dzPC9hPjwvbGk+XG4gICAgICAgICAgICAgICA8bGk+PGEgaHJlZj1cIiNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5Mb2dzPC9hPjwvbGk+XG4gICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICA8L2Rpdj5cbiAgICAgICA8L2Rpdj5cbiAgICAgICB7IGlzQ29ubmVjdGVkID8gPEV2ZW50U3RyZWFtZXIgdG9rZW49e3Rva2VufSBzaWQ9e3Rlcm0uc2lkfS8+IDogbnVsbCB9XG4gICAgICAgPFRlcm1pbmFsQm94IHNldHRpbmdzPXt0ZXJtfSB0b2tlbj17dG9rZW59IG9uT3Blbj17YWN0aW9ucy5jb25uZWN0ZWR9Lz5cbiAgICAgPC9kaXY+XG4gICAgICk7XG4gIH1cbn0pO1xuXG52YXIgVGVybWluYWxCb3ggPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIHJlbmRlclRlcm1pbmFsOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXNOZXdcbiAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0ZXJtaW5hbC1ib3hcIik7XG5cbiAgICB2YXIge3NldHRpbmdzLCB0b2tlbiwgc2lkIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgLy9zZXR0aW5ncy5zaWQgPSA1NTU1O1xuICAgIHNldHRpbmdzLnRlcm0gPSB7XG4gICAgICBoOiAxMjAsXG4gICAgICB3OiAxMDBcbiAgICB9O1xuXG4gICAgdmFyIGNvbm5lY3Rpb25TdHIgPSBjZmcuYXBpLmdldFNlc3Npb25Db25uU3RyKHRva2VuLCBzZXR0aW5ncyk7XG5cbiAgICB0aGlzLnRlcm0gPSBuZXcgVGVybWluYWwoe1xuICAgICAgY29sczogMTgwLFxuICAgICAgcm93czogNTAsXG4gICAgICB1c2VTdHlsZTogdHJ1ZSxcbiAgICAgIHNjcmVlbktleXM6IHRydWUsXG4gICAgICBjdXJzb3JCbGluazogZmFsc2VcbiAgICB9KTtcblxuICAgIHRoaXMudGVybS5vcGVuKHBhcmVudCk7XG4gICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KGNvbm5lY3Rpb25TdHIsIFwicHJvdG9cIik7XG4gICAgdGhpcy50ZXJtLndyaXRlKCdcXHgxYls5NG1jb25uZWN0aW5nIHRvIFwicG9kXCJcXHgxYlttXFxyXFxuJyk7XG5cbiAgICB0aGlzLnNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm9uT3BlbigpOyAgICAgIFxuICAgICAgdGhpcy50ZXJtLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChkYXRhKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xuICAgICAgICB0aGlzLnRlcm0ud3JpdGUoZS5kYXRhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy50ZXJtLndyaXRlKCdcXHgxYlszMW1kaXNjb25uZWN0ZWRcXHgxYlttXFxyXFxuJyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbmRlclRlcm1pbmFsKCk7XG4gIH0sXG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgdGhpcy50ZXJtLmRlc3Ryb3koKTtcbiAgfSxcblxuICBzaG91bGRDb21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiBmdW5jdGlvbihwcm9wcykge1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncnYtd2l6LXRlcm1pbmFsXCIgaWQ9XCJ0ZXJtaW5hbC1ib3hcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRlcm1pbmFsSG9zdDtcbmV4cG9ydCB7VGVybWluYWxCb3gsIFRlcm1pbmFsSG9zdH07XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiAuL3NyYy9hcHAvY29tcG9uZW50cy90ZXJtaW5hbEhvc3QuanN4XG4gKiovIiwidmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciByZW5kZXIgPSByZXF1aXJlKCdyZWFjdC1kb20nKS5yZW5kZXI7XG52YXIgeyBSb3V0ZXIsIFJvdXRlLCBSZWRpcmVjdCwgSW5kZXhSb3V0ZSwgYnJvd3Nlckhpc3RvcnkgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlcicpO1xudmFyIHsgQXBwLCBMb2dpbiwgTm9kZXMsIFNlc3Npb25zLCBOZXdVc2VyIH0gPSByZXF1aXJlKCcuL2NvbXBvbmVudHMnKTtcbnZhciB7ZW5zdXJlVXNlcn0gPSByZXF1aXJlKCcuL21vZHVsZXMvdXNlci9hY3Rpb25zJyk7XG52YXIgYXV0aCA9IHJlcXVpcmUoJy4vYXV0aCcpO1xudmFyIHNlc3Npb24gPSByZXF1aXJlKCcuL3Nlc3Npb24nKTtcbnZhciBjZmcgPSByZXF1aXJlKCcuL2NvbmZpZycpO1xuXG5yZXF1aXJlKCcuL21vZHVsZXMnKTtcblxuLy8gaW5pdCBzZXNzaW9uXG5zZXNzaW9uLmluaXQoKTtcblxuZnVuY3Rpb24gaGFuZGxlTG9nb3V0KG5leHRTdGF0ZSwgcmVwbGFjZSwgY2Ipe1xuICBhdXRoLmxvZ291dCgpO1xuICAvLyBnb2luZyBiYWNrIHdpbGwgaGl0IHJlcXVpcmVBdXRoIGhhbmRsZXIgd2hpY2ggd2lsbCByZWRpcmVjdCBpdCB0byB0aGUgbG9naW4gcGFnZVxuICBzZXNzaW9uLmdldEhpc3RvcnkoKS5nb0JhY2soKTtcbn1cblxucmVuZGVyKChcbiAgPFJvdXRlciBoaXN0b3J5PXtzZXNzaW9uLmdldEhpc3RvcnkoKX0+XG4gICAgPFJvdXRlIHBhdGg9e2NmZy5yb3V0ZXMubG9naW59IGNvbXBvbmVudD17TG9naW59Lz5cbiAgICA8Um91dGUgcGF0aD17Y2ZnLnJvdXRlcy5sb2dvdXR9IG9uRW50ZXI9e2hhbmRsZUxvZ291dH0vPlxuICAgIDxSb3V0ZSBwYXRoPXtjZmcucm91dGVzLm5ld1VzZXJ9IGNvbXBvbmVudD17TmV3VXNlcn0vPlxuICAgIDxSb3V0ZSBwYXRoPXtjZmcucm91dGVzLmFwcH0gY29tcG9uZW50PXtBcHB9IG9uRW50ZXI9e2Vuc3VyZVVzZXJ9ID5cbiAgICAgIDxJbmRleFJvdXRlIGNvbXBvbmVudD17Tm9kZXN9Lz5cbiAgICAgIDxSb3V0ZSBwYXRoPXtjZmcucm91dGVzLm5vZGVzfSBjb21wb25lbnQ9e05vZGVzfS8+XG4gICAgICA8Um91dGUgcGF0aD17Y2ZnLnJvdXRlcy5zZXNzaW9uc30gY29tcG9uZW50PXtTZXNzaW9uc30vPlxuICAgIDwvUm91dGU+XG4gIDwvUm91dGVyPlxuKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHBcIikpO1xuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogLi9zcmMvYXBwL2luZGV4LmpzeFxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/web/dist/app/styles.js b/web/dist/app/styles.js index 46af27ffbb8..ef0793540a8 100644 --- a/web/dist/app/styles.js +++ b/web/dist/app/styles.js @@ -3,9 +3,9 @@ webpackJsonp([2],{ /***/ 0: /***/ function(module, exports, __webpack_require__) { - __webpack_require__(274); __webpack_require__(276); - module.exports = __webpack_require__(275); + __webpack_require__(278); + module.exports = __webpack_require__(277); /***/ }, @@ -236,34 +236,34 @@ webpackJsonp([2],{ /***/ }, -/***/ 178: +/***/ 179: /***/ function(module, exports) { module.exports = "/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\n\nbody {\n margin: 0;\n}\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n[hidden],\ntemplate {\n display: none;\n}\n\na {\n background-color: transparent;\n}\n\na:active,\na:hover {\n outline: 0;\n}\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\nb,\nstrong {\n font-weight: bold;\n}\n\ndfn {\n font-style: italic;\n}\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\nmark {\n background: #ff0;\n color: #000;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nimg {\n border: 0;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\nfigure {\n margin: 1em 40px;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\npre {\n overflow: auto;\n}\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\n\nbutton {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\ninput {\n line-height: normal;\n}\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\nlegend {\n border: 0;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n}\n\noptgroup {\n font-weight: bold;\n}\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url(\"~bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.eot\");\n src: url(\"~bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"~bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2\") format(\"woff2\"), url(\"~bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"~bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"~bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\") format(\"svg\");\n}\n\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: transparent;\n}\n\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857;\n color: #333333;\n background-color: #fff;\n}\n\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\na {\n color: #337ab7;\n text-decoration: none;\n}\n\na:hover, a:focus {\n color: #23527c;\n text-decoration: underline;\n}\n\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n\nfigure {\n margin: 0;\n}\n\nimg {\n vertical-align: middle;\n}\n\n.img-responsive {\n display: block;\n max-width: 100%;\n height: auto;\n}\n\n.img-rounded {\n border-radius: 6px;\n}\n\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n\n.img-circle {\n border-radius: 50%;\n}\n\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\n\nh1 small,\nh1 .small, h2 small,\nh2 .small, h3 small,\nh3 .small, h4 small,\nh4 .small, h5 small,\nh5 .small, h6 small,\nh6 .small,\n.h1 small,\n.h1 .small, .h2 small,\n.h2 .small, .h3 small,\n.h3 .small, .h4 small,\n.h4 .small, .h5 small,\n.h5 .small, .h6 small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\n\nh1 small,\nh1 .small, .h1 small,\n.h1 .small,\nh2 small,\nh2 .small, .h2 small,\n.h2 .small,\nh3 small,\nh3 .small, .h3 small,\n.h3 .small {\n font-size: 65%;\n}\n\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n\nh4 small,\nh4 .small, .h4 small,\n.h4 .small,\nh5 small,\nh5 .small, .h5 small,\n.h5 .small,\nh6 small,\nh6 .small, .h6 small,\n.h6 .small {\n font-size: 75%;\n}\n\nh1, .h1 {\n font-size: 36px;\n}\n\nh2, .h2 {\n font-size: 30px;\n}\n\nh3, .h3 {\n font-size: 24px;\n}\n\nh4, .h4 {\n font-size: 18px;\n}\n\nh5, .h5 {\n font-size: 14px;\n}\n\nh6, .h6 {\n font-size: 12px;\n}\n\np {\n margin: 0 0 10px;\n}\n\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\n\nsmall,\n.small {\n font-size: 85%;\n}\n\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n\n.text-left {\n text-align: left;\n}\n\n.text-right {\n text-align: right;\n}\n\n.text-center {\n text-align: center;\n}\n\n.text-justify {\n text-align: justify;\n}\n\n.text-nowrap {\n white-space: nowrap;\n}\n\n.text-lowercase {\n text-transform: lowercase;\n}\n\n.text-uppercase, .initialism {\n text-transform: uppercase;\n}\n\n.text-capitalize {\n text-transform: capitalize;\n}\n\n.text-muted {\n color: #777777;\n}\n\n.text-primary {\n color: #337ab7;\n}\n\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n\n.text-success {\n color: #3c763d;\n}\n\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n\n.text-info {\n color: #31708f;\n}\n\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n\n.text-warning {\n color: #8a6d3b;\n}\n\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n\n.text-danger {\n color: #a94442;\n}\n\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n\n.bg-primary {\n color: #fff;\n}\n\n.bg-primary {\n background-color: #337ab7;\n}\n\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n\n.bg-success {\n background-color: #dff0d8;\n}\n\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n\n.bg-info {\n background-color: #d9edf7;\n}\n\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n\n.bg-warning {\n background-color: #fcf8e3;\n}\n\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n\n.bg-danger {\n background-color: #f2dede;\n}\n\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\n\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\n\nul ul,\nul ol,\nol ul,\nol ol {\n margin-bottom: 0;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\n\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\n\ndt,\ndd {\n line-height: 1.42857;\n}\n\ndt {\n font-weight: bold;\n}\n\ndd {\n margin-left: 0;\n}\n\n.dl-horizontal dd:before, .dl-horizontal dd:after {\n content: \" \";\n display: table;\n}\n\n.dl-horizontal dd:after {\n clear: both;\n}\n\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\n\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n\n.initialism {\n font-size: 90%;\n}\n\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\n\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\n\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857;\n color: #777777;\n}\n\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n\n.blockquote-reverse footer:before,\n.blockquote-reverse small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right footer:before,\nblockquote.pull-right small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n\n.blockquote-reverse footer:after,\n.blockquote-reverse small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right footer:after,\nblockquote.pull-right small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\n\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857;\n}\n\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\n\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\n\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\n\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n\n.container:before, .container:after {\n content: \" \";\n display: table;\n}\n\n.container:after {\n clear: both;\n}\n\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n\n.container-fluid:before, .container-fluid:after {\n content: \" \";\n display: table;\n}\n\n.container-fluid:after {\n clear: both;\n}\n\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n\n.row:before, .row:after {\n content: \" \";\n display: table;\n}\n\n.row:after {\n clear: both;\n}\n\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n\n.col-xs-1 {\n width: 8.33333%;\n}\n\n.col-xs-2 {\n width: 16.66667%;\n}\n\n.col-xs-3 {\n width: 25%;\n}\n\n.col-xs-4 {\n width: 33.33333%;\n}\n\n.col-xs-5 {\n width: 41.66667%;\n}\n\n.col-xs-6 {\n width: 50%;\n}\n\n.col-xs-7 {\n width: 58.33333%;\n}\n\n.col-xs-8 {\n width: 66.66667%;\n}\n\n.col-xs-9 {\n width: 75%;\n}\n\n.col-xs-10 {\n width: 83.33333%;\n}\n\n.col-xs-11 {\n width: 91.66667%;\n}\n\n.col-xs-12 {\n width: 100%;\n}\n\n.col-xs-pull-0 {\n right: auto;\n}\n\n.col-xs-pull-1 {\n right: 8.33333%;\n}\n\n.col-xs-pull-2 {\n right: 16.66667%;\n}\n\n.col-xs-pull-3 {\n right: 25%;\n}\n\n.col-xs-pull-4 {\n right: 33.33333%;\n}\n\n.col-xs-pull-5 {\n right: 41.66667%;\n}\n\n.col-xs-pull-6 {\n right: 50%;\n}\n\n.col-xs-pull-7 {\n right: 58.33333%;\n}\n\n.col-xs-pull-8 {\n right: 66.66667%;\n}\n\n.col-xs-pull-9 {\n right: 75%;\n}\n\n.col-xs-pull-10 {\n right: 83.33333%;\n}\n\n.col-xs-pull-11 {\n right: 91.66667%;\n}\n\n.col-xs-pull-12 {\n right: 100%;\n}\n\n.col-xs-push-0 {\n left: auto;\n}\n\n.col-xs-push-1 {\n left: 8.33333%;\n}\n\n.col-xs-push-2 {\n left: 16.66667%;\n}\n\n.col-xs-push-3 {\n left: 25%;\n}\n\n.col-xs-push-4 {\n left: 33.33333%;\n}\n\n.col-xs-push-5 {\n left: 41.66667%;\n}\n\n.col-xs-push-6 {\n left: 50%;\n}\n\n.col-xs-push-7 {\n left: 58.33333%;\n}\n\n.col-xs-push-8 {\n left: 66.66667%;\n}\n\n.col-xs-push-9 {\n left: 75%;\n}\n\n.col-xs-push-10 {\n left: 83.33333%;\n}\n\n.col-xs-push-11 {\n left: 91.66667%;\n}\n\n.col-xs-push-12 {\n left: 100%;\n}\n\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n\n.col-xs-offset-1 {\n margin-left: 8.33333%;\n}\n\n.col-xs-offset-2 {\n margin-left: 16.66667%;\n}\n\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n\n.col-xs-offset-4 {\n margin-left: 33.33333%;\n}\n\n.col-xs-offset-5 {\n margin-left: 41.66667%;\n}\n\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n\n.col-xs-offset-7 {\n margin-left: 58.33333%;\n}\n\n.col-xs-offset-8 {\n margin-left: 66.66667%;\n}\n\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n\n.col-xs-offset-10 {\n margin-left: 83.33333%;\n}\n\n.col-xs-offset-11 {\n margin-left: 91.66667%;\n}\n\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-1 {\n width: 8.33333%;\n }\n .col-sm-2 {\n width: 16.66667%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-4 {\n width: 33.33333%;\n }\n .col-sm-5 {\n width: 41.66667%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-7 {\n width: 58.33333%;\n }\n .col-sm-8 {\n width: 66.66667%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-10 {\n width: 83.33333%;\n }\n .col-sm-11 {\n width: 91.66667%;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-pull-1 {\n right: 8.33333%;\n }\n .col-sm-pull-2 {\n right: 16.66667%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-4 {\n right: 33.33333%;\n }\n .col-sm-pull-5 {\n right: 41.66667%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-7 {\n right: 58.33333%;\n }\n .col-sm-pull-8 {\n right: 66.66667%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-10 {\n right: 83.33333%;\n }\n .col-sm-pull-11 {\n right: 91.66667%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-push-1 {\n left: 8.33333%;\n }\n .col-sm-push-2 {\n left: 16.66667%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-4 {\n left: 33.33333%;\n }\n .col-sm-push-5 {\n left: 41.66667%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-7 {\n left: 58.33333%;\n }\n .col-sm-push-8 {\n left: 66.66667%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-10 {\n left: 83.33333%;\n }\n .col-sm-push-11 {\n left: 91.66667%;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66667%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66667%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66667%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66667%;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n}\n\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-1 {\n width: 8.33333%;\n }\n .col-md-2 {\n width: 16.66667%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-4 {\n width: 33.33333%;\n }\n .col-md-5 {\n width: 41.66667%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-7 {\n width: 58.33333%;\n }\n .col-md-8 {\n width: 66.66667%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-10 {\n width: 83.33333%;\n }\n .col-md-11 {\n width: 91.66667%;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-pull-1 {\n right: 8.33333%;\n }\n .col-md-pull-2 {\n right: 16.66667%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-4 {\n right: 33.33333%;\n }\n .col-md-pull-5 {\n right: 41.66667%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-7 {\n right: 58.33333%;\n }\n .col-md-pull-8 {\n right: 66.66667%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-10 {\n right: 83.33333%;\n }\n .col-md-pull-11 {\n right: 91.66667%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-push-1 {\n left: 8.33333%;\n }\n .col-md-push-2 {\n left: 16.66667%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-4 {\n left: 33.33333%;\n }\n .col-md-push-5 {\n left: 41.66667%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-7 {\n left: 58.33333%;\n }\n .col-md-push-8 {\n left: 66.66667%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-10 {\n left: 83.33333%;\n }\n .col-md-push-11 {\n left: 91.66667%;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333%;\n }\n .col-md-offset-2 {\n margin-left: 16.66667%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333%;\n }\n .col-md-offset-5 {\n margin-left: 41.66667%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333%;\n }\n .col-md-offset-8 {\n margin-left: 66.66667%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333%;\n }\n .col-md-offset-11 {\n margin-left: 91.66667%;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-1 {\n width: 8.33333%;\n }\n .col-lg-2 {\n width: 16.66667%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-4 {\n width: 33.33333%;\n }\n .col-lg-5 {\n width: 41.66667%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-7 {\n width: 58.33333%;\n }\n .col-lg-8 {\n width: 66.66667%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-10 {\n width: 83.33333%;\n }\n .col-lg-11 {\n width: 91.66667%;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-pull-1 {\n right: 8.33333%;\n }\n .col-lg-pull-2 {\n right: 16.66667%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-4 {\n right: 33.33333%;\n }\n .col-lg-pull-5 {\n right: 41.66667%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-7 {\n right: 58.33333%;\n }\n .col-lg-pull-8 {\n right: 66.66667%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-10 {\n right: 83.33333%;\n }\n .col-lg-pull-11 {\n right: 91.66667%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-push-1 {\n left: 8.33333%;\n }\n .col-lg-push-2 {\n left: 16.66667%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-4 {\n left: 33.33333%;\n }\n .col-lg-push-5 {\n left: 41.66667%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-7 {\n left: 58.33333%;\n }\n .col-lg-push-8 {\n left: 66.66667%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-10 {\n left: 83.33333%;\n }\n .col-lg-push-11 {\n left: 91.66667%;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66667%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66667%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66667%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66667%;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n}\n\ntable {\n background-color: transparent;\n}\n\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\n\nth {\n text-align: left;\n}\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n\n.table > thead > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > th,\n.table > tbody > tr > td,\n.table > tfoot > tr > th,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n\n.table > caption + thead > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > th,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n\n.table .table {\n background-color: #fff;\n}\n\n.table-condensed > thead > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > th,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > th,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n\n.table-bordered {\n border: 1px solid #ddd;\n}\n\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > th,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > th,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\n\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n\n.table > thead > tr > td.active,\n.table > thead > tr > th.active,\n.table > thead > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr > td.active,\n.table > tbody > tr > th.active,\n.table > tbody > tr.active > td,\n.table > tbody > tr.active > th,\n.table > tfoot > tr > td.active,\n.table > tfoot > tr > th.active,\n.table > tfoot > tr.active > td,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n\n.table > thead > tr > td.success,\n.table > thead > tr > th.success,\n.table > thead > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr > td.success,\n.table > tbody > tr > th.success,\n.table > tbody > tr.success > td,\n.table > tbody > tr.success > th,\n.table > tfoot > tr > td.success,\n.table > tfoot > tr > th.success,\n.table > tfoot > tr.success > td,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n\n.table > thead > tr > td.info,\n.table > thead > tr > th.info,\n.table > thead > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr > td.info,\n.table > tbody > tr > th.info,\n.table > tbody > tr.info > td,\n.table > tbody > tr.info > th,\n.table > tfoot > tr > td.info,\n.table > tfoot > tr > th.info,\n.table > tfoot > tr.info > td,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n\n.table > thead > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr > td.warning,\n.table > tbody > tr > th.warning,\n.table > tbody > tr.warning > td,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr > td.warning,\n.table > tfoot > tr > th.warning,\n.table > tfoot > tr.warning > td,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n\n.table > thead > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr > td.danger,\n.table > tbody > tr > th.danger,\n.table > tbody > tr.danger > td,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr > td.danger,\n.table > tfoot > tr > th.danger,\n.table > tfoot > tr.danger > td,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\n\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857;\n color: #555555;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n\n.form-control::-ms-expand {\n border: 0;\n background-color: transparent;\n}\n\n.form-control[disabled], .form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n .input-group-sm input[type=\"date\"],\n input[type=\"time\"].input-sm,\n .input-group-sm\n input[type=\"time\"],\n input[type=\"datetime-local\"].input-sm,\n .input-group-sm\n input[type=\"datetime-local\"],\n input[type=\"month\"].input-sm,\n .input-group-sm\n input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n .input-group-lg input[type=\"date\"],\n input[type=\"time\"].input-lg,\n .input-group-lg\n input[type=\"time\"],\n input[type=\"datetime-local\"].input-lg,\n .input-group-lg\n input[type=\"datetime-local\"],\n input[type=\"month\"].input-lg,\n .input-group-lg\n input[type=\"month\"] {\n line-height: 46px;\n }\n}\n\n.form-group {\n margin-bottom: 15px;\n}\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\n\ninput[type=\"radio\"][disabled], input[type=\"radio\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled]\ninput[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n\n.radio-inline.disabled,\nfieldset[disabled] .radio-inline,\n.checkbox-inline.disabled,\nfieldset[disabled]\n.checkbox-inline {\n cursor: not-allowed;\n}\n\n.radio.disabled label,\nfieldset[disabled] .radio label,\n.checkbox.disabled label,\nfieldset[disabled]\n.checkbox label {\n cursor: not-allowed;\n}\n\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n\n.form-control-static.input-lg, .form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\n\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33333;\n border-radius: 6px;\n}\n\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\n\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33333;\n border-radius: 6px;\n}\n\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.33333;\n}\n\n.has-feedback {\n position: relative;\n}\n\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n\n.has-error .form-control-feedback {\n color: #a94442;\n}\n\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n\n.form-horizontal .form-group:before, .form-horizontal .form-group:after {\n content: \" \";\n display: table;\n}\n\n.form-horizontal .form-group:after {\n clear: both;\n}\n\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n\n.btn:hover, .btn:focus, .btn.focus {\n color: #333;\n text-decoration: none;\n}\n\n.btn:active, .btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n\n.btn.disabled, .btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n\n.btn-default:focus, .btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n\n.btn-default:active, .btn-default.active,\n.open > .btn-default.dropdown-toggle {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n\n.btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus,\n.open > .btn-default.dropdown-toggle:hover,\n.open > .btn-default.dropdown-toggle:focus,\n.open > .btn-default.dropdown-toggle.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n\n.btn-default:active, .btn-default.active,\n.open > .btn-default.dropdown-toggle {\n background-image: none;\n}\n\n.btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus,\nfieldset[disabled] .btn-default:hover,\nfieldset[disabled] .btn-default:focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n\n.btn-primary:active, .btn-primary.active,\n.open > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n\n.btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus,\n.open > .btn-primary.dropdown-toggle:hover,\n.open > .btn-primary.dropdown-toggle:focus,\n.open > .btn-primary.dropdown-toggle.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n\n.btn-primary:active, .btn-primary.active,\n.open > .btn-primary.dropdown-toggle {\n background-image: none;\n}\n\n.btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary:hover,\nfieldset[disabled] .btn-primary:focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n\n.btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n\n.btn-success:active, .btn-success.active,\n.open > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n\n.btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus,\n.open > .btn-success.dropdown-toggle:hover,\n.open > .btn-success.dropdown-toggle:focus,\n.open > .btn-success.dropdown-toggle.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n\n.btn-success:active, .btn-success.active,\n.open > .btn-success.dropdown-toggle {\n background-image: none;\n}\n\n.btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus,\nfieldset[disabled] .btn-success:hover,\nfieldset[disabled] .btn-success:focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n\n.btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n\n.btn-info:active, .btn-info.active,\n.open > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n\n.btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus,\n.open > .btn-info.dropdown-toggle:hover,\n.open > .btn-info.dropdown-toggle:focus,\n.open > .btn-info.dropdown-toggle.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n\n.btn-info:active, .btn-info.active,\n.open > .btn-info.dropdown-toggle {\n background-image: none;\n}\n\n.btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus,\nfieldset[disabled] .btn-info:hover,\nfieldset[disabled] .btn-info:focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n\n.btn-warning:active, .btn-warning.active,\n.open > .btn-warning.dropdown-toggle {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n\n.btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus,\n.open > .btn-warning.dropdown-toggle:hover,\n.open > .btn-warning.dropdown-toggle:focus,\n.open > .btn-warning.dropdown-toggle.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n\n.btn-warning:active, .btn-warning.active,\n.open > .btn-warning.dropdown-toggle {\n background-image: none;\n}\n\n.btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning:hover,\nfieldset[disabled] .btn-warning:focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n\n.btn-danger:active, .btn-danger.active,\n.open > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n\n.btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus,\n.open > .btn-danger.dropdown-toggle:hover,\n.open > .btn-danger.dropdown-toggle:focus,\n.open > .btn-danger.dropdown-toggle.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n\n.btn-danger:active, .btn-danger.active,\n.open > .btn-danger.dropdown-toggle {\n background-image: none;\n}\n\n.btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger:hover,\nfieldset[disabled] .btn-danger:focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n\n.btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n\n.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {\n border-color: transparent;\n}\n\n.btn-link:hover, .btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n\n.btn-link[disabled]:hover, .btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:hover,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33333;\n border-radius: 6px;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n\n.btn-xs, .btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n\n.dropup,\n.dropdown {\n position: relative;\n}\n\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857;\n color: #333333;\n white-space: nowrap;\n}\n\n.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n\n.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n\n.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n\n.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n\n.open > .dropdown-menu {\n display: block;\n}\n\n.open > a {\n outline: 0;\n}\n\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857;\n color: #777777;\n white-space: nowrap;\n}\n\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n right: 0;\n left: auto;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n\n.btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n\n.btn-toolbar {\n margin-left: -5px;\n}\n\n.btn-toolbar:before, .btn-toolbar:after {\n content: \" \";\n display: table;\n}\n\n.btn-toolbar:after {\n clear: both;\n}\n\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n\n.btn-group > .btn-group {\n float: left;\n}\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n\n.btn .caret {\n margin-left: 0;\n}\n\n.btn-lg .caret, .btn-group-lg > .btn .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n\n.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret {\n border-width: 0 5px 5px;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n\n.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {\n content: \" \";\n display: table;\n}\n\n.btn-group-vertical > .btn-group:after {\n clear: both;\n}\n\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n\n.nav:before, .nav:after {\n content: \" \";\n display: table;\n}\n\n.nav:after {\n clear: both;\n}\n\n.nav > li {\n position: relative;\n display: block;\n}\n\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n\n.nav > li > a:hover, .nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n\n.nav > li.disabled > a {\n color: #777777;\n}\n\n.nav > li.disabled > a:hover, .nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n\n.nav .open > a, .nav .open > a:hover, .nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n\n.nav > li > a > img {\n max-width: none;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n\n.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n\n.nav-pills > li {\n float: left;\n}\n\n.nav-pills > li > a {\n border-radius: 4px;\n}\n\n.nav-pills > li + li {\n margin-left: 2px;\n}\n\n.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n\n.nav-stacked > li {\n float: none;\n}\n\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n\n.nav-justified, .nav-tabs.nav-justified {\n width: 100%;\n}\n\n.nav-justified > li, .nav-tabs.nav-justified > li {\n float: none;\n}\n\n.nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n\n@media (min-width: 768px) {\n .nav-justified > li, .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a, .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n\n.nav-tabs-justified, .nav-tabs.nav-justified {\n border-bottom: 0;\n}\n\n.nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n\n.nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n.nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,\n .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n\n.navbar:before, .navbar:after {\n content: \" \";\n display: table;\n}\n\n.navbar:after {\n clear: both;\n}\n\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n\n.navbar-header:before, .navbar-header:after {\n content: \" \";\n display: table;\n}\n\n.navbar-header:after {\n clear: both;\n}\n\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n\n.navbar-collapse:before, .navbar-collapse:after {\n content: \" \";\n display: table;\n}\n\n.navbar-collapse:after {\n clear: both;\n}\n\n.navbar-collapse.in {\n overflow-y: auto;\n}\n\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n\n.container > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-header,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-header,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-brand > img {\n display: block;\n}\n\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n\n.navbar-toggle:focus {\n outline: 0;\n}\n\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n\n.navbar-nav {\n margin: 7.5px -15px;\n}\n\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n\n.navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n\n.navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n\n.navbar-default .navbar-brand {\n color: #777;\n}\n\n.navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n\n.navbar-default .navbar-text {\n color: #777;\n}\n\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n\n.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n\n.navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n\n.navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n\n.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n\n.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555;\n}\n\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n\n.navbar-default .navbar-link {\n color: #777;\n}\n\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n\n.navbar-default .btn-link {\n color: #777;\n}\n\n.navbar-default .btn-link:hover, .navbar-default .btn-link:focus {\n color: #333;\n}\n\n.navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:hover,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n\n.navbar-inverse {\n background-color: #222;\n border-color: #090909;\n}\n\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n\n.navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n\n.navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n\n.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #090909;\n}\n\n.navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n\n.navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n\n.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #090909;\n color: #fff;\n}\n\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #090909;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #090909;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #090909;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n\n.navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus {\n color: #fff;\n}\n\n.navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\n\n.label:empty {\n display: none;\n}\n\n.btn .label {\n position: relative;\n top: -1px;\n}\n\na.label:hover, a.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n\n.label-default {\n background-color: #777777;\n}\n\n.label-default[href]:hover, .label-default[href]:focus {\n background-color: #5e5e5e;\n}\n\n.label-primary {\n background-color: #337ab7;\n}\n\n.label-primary[href]:hover, .label-primary[href]:focus {\n background-color: #286090;\n}\n\n.label-success {\n background-color: #5cb85c;\n}\n\n.label-success[href]:hover, .label-success[href]:focus {\n background-color: #449d44;\n}\n\n.label-info {\n background-color: #5bc0de;\n}\n\n.label-info[href]:hover, .label-info[href]:focus {\n background-color: #31b0d5;\n}\n\n.label-warning {\n background-color: #f0ad4e;\n}\n\n.label-warning[href]:hover, .label-warning[href]:focus {\n background-color: #ec971f;\n}\n\n.label-danger {\n background-color: #d9534f;\n}\n\n.label-danger[href]:hover, .label-danger[href]:focus {\n background-color: #c9302c;\n}\n\n.clearfix:before, .clearfix:after {\n content: \" \";\n display: table;\n}\n\n.clearfix:after {\n clear: both;\n}\n\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n.pull-right {\n float: right !important;\n}\n\n.pull-left {\n float: left !important;\n}\n\n.hide {\n display: none !important;\n}\n\n.show {\n display: block !important;\n}\n\n.invisible {\n visibility: hidden;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.hidden {\n display: none !important;\n}\n\n.affix {\n position: fixed;\n}\n" /***/ }, -/***/ 179: +/***/ 180: /***/ function(module, exports) { - module.exports = ".grv-invite {\n background-color: #2f4050;\n padding-top: 5%;\n height: 100%;\n width: 100%;\n position: fixed;\n overflow: auto;\n}\n\n.grv-invite .grv-content {\n padding: 15px;\n width: 700px;\n z-index: 100;\n margin: 0 auto;\n margin-top: 20px;\n border-radius: 6px;\n background-color: #ffffff;\n}\n\n.grv-invite .grv-content .grv-invite-input-form {\n margin-bottom: 35px;\n}\n\n.grv-invite .grv-content .grv-invite-input-form h3 {\n margin-bottom: 20px;\n}\n\n.grv-invite .grv-content .grv-flex-column {\n padding: 15px;\n}\n\n.grv-login {\n background-color: #2f4050;\n padding-top: 5%;\n height: 100%;\n width: 100%;\n position: fixed;\n overflow: auto;\n}\n\n.grv-login .grv-content {\n padding: 15px;\n width: 400px;\n z-index: 100;\n margin: 0 auto;\n margin-top: 20px;\n border-radius: 6px;\n background-color: #ffffff;\n}\n\n.grv-login .grv-content .grv-flex-column {\n padding: 15px;\n}\n\n.grv-login .grv-content .grv-login-input-form {\n margin-bottom: 30px;\n}\n\n.grv-login .grv-content .grv-login-input-form h3 {\n margin-bottom: 20px;\n}\n\n.grv-login .grv-content .grv-login-info {\n text-align: initial;\n position: relative;\n margin: 15px 0 0 0;\n padding: 0 0 0 70px;\n}\n\n.grv-login .grv-content .grv-login-info .fa-question {\n position: absolute;\n left: 20px;\n font-size: 40px;\n}\n\n.rotating {\n animation: rotating-function 4.00s linear infinite;\n}\n\n@-webkit-keyframes rotating-function {\n from {\n -webkit-transform: rotate(0deg);\n }\n to {\n -webkit-transform: rotate(360deg);\n }\n}\n\n@-moz-keyframes rotating-function {\n from {\n -moz-transform: rotate(0deg);\n }\n to {\n -moz-transform: rotate(360deg);\n }\n}\n\n@-ms-keyframes rotating-function {\n from {\n -ms-transform: rotate(0deg);\n }\n to {\n -ms-transform: rotate(360deg);\n }\n}\n\n@-o-keyframes rotating-function {\n from {\n -o-transform: rotate(0deg);\n }\n to {\n -o-transform: rotate(360deg);\n }\n}\n\n@keyframes rotating-function {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.grv-logo-tprt {\n color: white;\n margin-top: 5%;\n margin: 0 auto;\n width: 67px;\n height: 70px;\n background-size: contain;\n background-repeat: no-repeat;\n background-image: url(\"/web/app/assets/img/grv-tlpt-logo.png\");\n}\n\n.grv-google-auth {\n text-align: initial;\n position: relative;\n margin: 15px 0 0 0;\n padding: 0 0 0 70px;\n}\n\n.grv-google-auth .grv-google-auth-icon {\n position: absolute;\n left: 15px;\n height: 40px;\n width: 40px;\n background-size: contain;\n background-repeat: no-repeat;\n background-image: url(\"/web/app/assets/img/authenticator-icon.png\");\n}\n\n.grv-nodes .grv-nodes-table .label {\n margin-right: 5px;\n}\n\n.grv {\n background-color: white;\n}\n\n.grv #app {\n height: 100%;\n}\n\n.grv .grv-spinner.sk-spinner-three-bounce {\n position: absolute;\n top: 50%;\n left: 50%;\n}\n\n.grv nav {\n height: 100%;\n background-color: #293846;\n font-size: 20px;\n}\n\n.grv .grv-page {\n margin-left: 60px;\n padding: 0 15px;\n}\n\n.grv-flex {\n display: flex;\n}\n\n.grv-flex-column {\n flex-direction: column;\n flex: 1;\n}\n" + module.exports = ".grv-invite {\n background-color: #2f4050;\n padding-top: 5%;\n height: 100%;\n width: 100%;\n position: fixed;\n overflow: auto;\n}\n\n.grv-invite .grv-content {\n padding: 15px;\n width: 700px;\n z-index: 100;\n margin: 0 auto;\n margin-top: 20px;\n border-radius: 6px;\n background-color: #ffffff;\n}\n\n.grv-invite .grv-content .grv-invite-input-form {\n margin-bottom: 35px;\n}\n\n.grv-invite .grv-content .grv-invite-input-form h3 {\n margin-bottom: 20px;\n}\n\n.grv-invite .grv-content .grv-flex-column {\n padding: 15px;\n}\n\n.grv-login {\n background-color: #2f4050;\n padding-top: 5%;\n height: 100%;\n width: 100%;\n position: fixed;\n overflow: auto;\n}\n\n.grv-login .grv-content {\n padding: 15px;\n width: 400px;\n z-index: 100;\n margin: 0 auto;\n margin-top: 20px;\n border-radius: 6px;\n background-color: #ffffff;\n}\n\n.grv-login .grv-content .grv-flex-column {\n padding: 15px;\n}\n\n.grv-login .grv-content .grv-login-input-form {\n margin-bottom: 30px;\n}\n\n.grv-login .grv-content .grv-login-input-form h3 {\n margin-bottom: 20px;\n}\n\n.grv-login .grv-content .grv-login-info {\n text-align: initial;\n position: relative;\n margin: 15px 0 0 0;\n padding: 0 0 0 70px;\n}\n\n.grv-login .grv-content .grv-login-info .fa-question {\n position: absolute;\n left: 20px;\n font-size: 40px;\n}\n\n.rotating {\n animation: rotating-function 4.00s linear infinite;\n}\n\n@-webkit-keyframes rotating-function {\n from {\n -webkit-transform: rotate(0deg);\n }\n to {\n -webkit-transform: rotate(360deg);\n }\n}\n\n@-moz-keyframes rotating-function {\n from {\n -moz-transform: rotate(0deg);\n }\n to {\n -moz-transform: rotate(360deg);\n }\n}\n\n@-ms-keyframes rotating-function {\n from {\n -ms-transform: rotate(0deg);\n }\n to {\n -ms-transform: rotate(360deg);\n }\n}\n\n@-o-keyframes rotating-function {\n from {\n -o-transform: rotate(0deg);\n }\n to {\n -o-transform: rotate(360deg);\n }\n}\n\n@keyframes rotating-function {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.grv-logo-tprt {\n color: white;\n margin-top: 5%;\n margin: 0 auto;\n width: 67px;\n height: 70px;\n background-size: contain;\n background-repeat: no-repeat;\n background-image: url(\"/web/app/assets/img/grv-tlpt-logo.png\");\n}\n\n.grv-google-auth {\n text-align: initial;\n position: relative;\n margin: 15px 0 0 0;\n padding: 0 0 0 70px;\n}\n\n.grv-google-auth .grv-google-auth-icon {\n position: absolute;\n left: 15px;\n height: 40px;\n width: 40px;\n background-size: contain;\n background-repeat: no-repeat;\n background-image: url(\"/web/app/assets/img/authenticator-icon.png\");\n}\n\n.grv-nodes h1 {\n margin-top: -30px;\n padding-bottom: 30px;\n text-align: center;\n}\n\n.grv-nodes .grv-nodes-table .label {\n margin-right: 5px;\n}\n\n.grv-terminal-host {\n padding: 50px 60px;\n padding-left: 130px;\n position: fixed;\n height: 100%;\n width: 100%;\n display: block;\n background-color: black;\n z-index: 1;\n}\n\n.grv-terminal-participans {\n margin-left: -100px;\n width: 50px;\n position: absolute;\n}\n\n.grv-terminal-participans .nav {\n text-align: center;\n}\n\n.grv-terminal-participans .nav > li {\n margin: 15px 0;\n}\n\n.grv {\n background-color: white;\n}\n\n.grv #app {\n height: 100%;\n}\n\n.grv .grv-spinner.sk-spinner-three-bounce {\n position: absolute;\n top: 50%;\n left: 50%;\n}\n\n.grv nav {\n height: 100%;\n background-color: #293846;\n font-size: 20px;\n}\n\n.grv .grv-page {\n margin-left: 60px;\n padding: 0 15px;\n}\n\n.grv-flex {\n display: flex;\n}\n\n.grv-flex-column {\n flex-direction: column;\n flex: 1;\n}\n" /***/ }, -/***/ 180: +/***/ 181: /***/ function(module, exports) { module.exports = "/*\r\n *\r\n * INSPINIA - Responsive Admin Theme\r\n * version 2.4\r\n *\r\n*/\nh1, h2, h3, h4, h5, h6 {\n font-weight: 100;\n}\n\nh1 {\n font-size: 30px;\n}\n\nh2 {\n font-size: 24px;\n}\n\nh3 {\n font-size: 16px;\n}\n\nh4 {\n font-size: 14px;\n}\n\nh5 {\n font-size: 12px;\n}\n\nh6 {\n font-size: 10px;\n}\n\nh3, h4, h5 {\n margin-top: 5px;\n font-weight: 600;\n}\n\n.nav > li > a {\n color: #a7b1c2;\n font-weight: 600;\n padding: 14px 20px 14px 25px;\n}\n\n.nav.navbar-right > li > a {\n color: #999c9e;\n}\n\n.nav > li.active > a {\n color: #ffffff;\n}\n\n.navbar-default .nav > li > a:hover, .navbar-default .nav > li > a:focus {\n background-color: #293846;\n color: white;\n}\n\n.nav .open > a, .nav .open > a:hover, .nav .open > a:focus {\n background: #fff;\n}\n\n.nav.navbar-top-links > li > a:hover, .nav.navbar-top-links > li > a:focus {\n background-color: transparent;\n}\n\n.nav > li > a i {\n margin-right: 6px;\n}\n\n.navbar {\n border: 0;\n}\n\n.navbar-default {\n background-color: transparent;\n border-color: #2F4050;\n}\n\n.navbar-top-links li {\n display: inline-block;\n}\n\n.navbar-top-links li:last-child {\n margin-right: 40px;\n}\n\n.body-small .navbar-top-links li:last-child {\n margin-right: 0;\n}\n\n.navbar-top-links li a {\n padding: 20px 10px;\n min-height: 50px;\n}\n\n.dropdown-menu {\n border: medium none;\n border-radius: 3px;\n box-shadow: 0 0 3px rgba(86, 96, 117, 0.7);\n display: none;\n float: left;\n font-size: 12px;\n left: 0;\n list-style: none outside none;\n padding: 0;\n position: absolute;\n text-shadow: none;\n top: 100%;\n z-index: 1000;\n}\n\n.dropdown-menu > li > a {\n border-radius: 3px;\n color: inherit;\n line-height: 25px;\n margin: 4px;\n text-align: left;\n font-weight: normal;\n}\n\n.dropdown-menu > li > a.font-bold {\n font-weight: 600;\n}\n\n.navbar-top-links .dropdown-menu li {\n display: block;\n}\n\n.navbar-top-links .dropdown-menu li:last-child {\n margin-right: 0;\n}\n\n.navbar-top-links .dropdown-menu li a {\n padding: 3px 20px;\n min-height: 0;\n}\n\n.navbar-top-links .dropdown-menu li a div {\n white-space: normal;\n}\n\n.navbar-top-links .dropdown-messages,\n.navbar-top-links .dropdown-tasks,\n.navbar-top-links .dropdown-alerts {\n width: 310px;\n min-width: 0;\n}\n\n.navbar-top-links .dropdown-messages {\n margin-left: 5px;\n}\n\n.navbar-top-links .dropdown-tasks {\n margin-left: -59px;\n}\n\n.navbar-top-links .dropdown-alerts {\n margin-left: -123px;\n}\n\n.navbar-top-links .dropdown-user {\n right: 0;\n left: auto;\n}\n\n.dropdown-messages, .dropdown-alerts {\n padding: 10px 10px 10px 10px;\n}\n\n.dropdown-messages li a, .dropdown-alerts li a {\n font-size: 12px;\n}\n\n.dropdown-messages li em, .dropdown-alerts li em {\n font-size: 10px;\n}\n\n.nav.navbar-top-links .dropdown-alerts a {\n font-size: 12px;\n}\n\n.nav-header {\n padding: 33px 25px;\n background: url(\"patterns/header-profile.png\") no-repeat;\n}\n\n.pace-done .nav-header {\n transition: all 0.4s;\n}\n\n.nav > li.active {\n border-left: 4px solid #19aa8d;\n background: #293846;\n}\n\n.nav.nav-second-level > li.active {\n border: none;\n}\n\n.nav.nav-second-level.collapse[style] {\n height: auto !important;\n}\n\n.nav-header a {\n color: #DFE4ED;\n}\n\n.nav-header .text-muted {\n color: #8095a8;\n}\n\n.minimalize-styl-2 {\n padding: 4px 12px;\n margin: 14px 5px 5px 20px;\n font-size: 14px;\n float: left;\n}\n\n.navbar-form-custom {\n float: left;\n height: 50px;\n padding: 0;\n width: 200px;\n display: inline-table;\n}\n\n.navbar-form-custom .form-group {\n margin-bottom: 0;\n}\n\n.nav.navbar-top-links a {\n font-size: 14px;\n}\n\n.navbar-form-custom .form-control {\n background: none repeat scroll 0 0 transparent;\n border: medium none;\n font-size: 14px;\n height: 60px;\n margin: 0;\n z-index: 2000;\n}\n\n.count-info .label {\n line-height: 12px;\n padding: 2px 5px;\n position: absolute;\n right: 6px;\n top: 12px;\n}\n\n.arrow {\n float: right;\n}\n\n.fa.arrow:before {\n content: \"\\f104\";\n}\n\n.active > a > .fa.arrow:before {\n content: \"\\f107\";\n}\n\n.nav-second-level li,\n.nav-third-level li {\n border-bottom: none !important;\n}\n\n.nav-second-level li a {\n padding: 7px 10px 7px 10px;\n padding-left: 52px;\n}\n\n.nav-third-level li a {\n padding-left: 62px;\n}\n\n.nav-second-level li:last-child {\n margin-bottom: 10px;\n}\n\nbody:not(.fixed-sidebar):not(.canvas-menu).mini-navbar .nav li:hover > .nav-second-level,\n.mini-navbar .nav li:focus > .nav-second-level {\n display: block;\n border-radius: 0 2px 2px 0;\n min-width: 140px;\n height: auto;\n}\n\nbody.mini-navbar .navbar-default .nav > li > .nav-second-level li a {\n font-size: 12px;\n border-radius: 3px;\n}\n\n.fixed-nav .slimScrollDiv #side-menu {\n padding-bottom: 60px;\n}\n\n.mini-navbar .nav-second-level li a {\n padding: 10px 10px 10px 15px;\n}\n\n.mini-navbar .nav-second-level {\n position: absolute;\n left: 70px;\n top: 0;\n background-color: #2F4050;\n padding: 10px 10px 10px 10px;\n font-size: 12px;\n}\n\n.canvas-menu.mini-navbar .nav-second-level {\n background: #293846;\n}\n\n.mini-navbar li.active .nav-second-level {\n left: 65px;\n}\n\n.navbar-default .special_link a {\n background: #1ab394;\n color: white;\n}\n\n.navbar-default .special_link a:hover {\n background: #17987e !important;\n color: white;\n}\n\n.navbar-default .special_link a span.label {\n background: #fff;\n color: #1ab394;\n}\n\n.navbar-default .landing_link a {\n background: #1cc09f;\n color: white;\n}\n\n.navbar-default .landing_link a:hover {\n background: #1ab394 !important;\n color: white;\n}\n\n.navbar-default .landing_link a span.label {\n background: #fff;\n color: #1cc09f;\n}\n\n.logo-element {\n text-align: center;\n font-size: 18px;\n font-weight: 600;\n color: white;\n display: none;\n padding: 18px 0;\n}\n\n.pace-done .navbar-static-side, .pace-done .nav-header, .pace-done li.active, .pace-done #page-wrapper, .pace-done .footer {\n -webkit-transition: all 0.4s;\n -moz-transition: all 0.4s;\n -o-transition: all 0.4s;\n transition: all 0.4s;\n}\n\n.navbar-fixed-top {\n background: #fff;\n transition-duration: 0.4s;\n border-bottom: 1px solid #e7eaec !important;\n z-index: 2030;\n}\n\n.navbar-fixed-top, .navbar-static-top {\n background: #f3f3f4;\n}\n\n.fixed-nav #wrapper {\n margin-top: 0;\n}\n\nbody.fixed-nav #wrapper .navbar-static-side,\nbody.fixed-nav #wrapper #page-wrapper {\n margin-top: 60px;\n}\n\nbody.top-navigation.fixed-nav #wrapper #page-wrapper {\n margin-top: 0;\n}\n\nbody.fixed-nav.fixed-nav-basic .navbar-fixed-top {\n left: 220px;\n}\n\nbody.fixed-nav.fixed-nav-basic.mini-navbar .navbar-fixed-top {\n left: 70px;\n}\n\nbody.fixed-nav.fixed-nav-basic.fixed-sidebar.mini-navbar .navbar-fixed-top {\n left: 0;\n}\n\nbody.fixed-nav.fixed-nav-basic #wrapper .navbar-static-side {\n margin-top: 0;\n}\n\nbody.fixed-nav.fixed-nav-basic.body-small .navbar-fixed-top {\n left: 0;\n}\n\nbody.fixed-nav.fixed-nav-basic.fixed-sidebar.mini-navbar.body-small .navbar-fixed-top {\n left: 220px;\n}\n\n.fixed-nav .minimalize-styl-2 {\n margin: 14px 5px 5px 15px;\n}\n\n.body-small .navbar-fixed-top {\n margin-left: 0;\n}\n\nbody.mini-navbar .navbar-static-side {\n width: 70px;\n}\n\nbody.mini-navbar .profile-element, body.mini-navbar .nav-label, body.mini-navbar .navbar-default .nav li a span {\n display: none;\n}\n\nbody.canvas-menu .profile-element {\n display: block;\n}\n\nbody:not(.fixed-sidebar):not(.canvas-menu).mini-navbar .nav-second-level {\n display: none;\n}\n\nbody.mini-navbar .navbar-default .nav > li > a {\n font-size: 16px;\n}\n\nbody.mini-navbar .logo-element {\n display: block;\n}\n\nbody.canvas-menu .logo-element {\n display: none;\n}\n\nbody.mini-navbar .nav-header {\n padding: 0;\n background-color: #1ab394;\n}\n\nbody.canvas-menu .nav-header {\n padding: 33px 25px;\n}\n\nbody.mini-navbar #page-wrapper {\n margin: 0 0 0 70px;\n}\n\nbody.fixed-sidebar.mini-navbar .footer,\nbody.canvas-menu.mini-navbar .footer {\n margin: 0 0 0 0 !important;\n}\n\nbody.canvas-menu.mini-navbar #page-wrapper,\nbody.canvas-menu.mini-navbar .footer {\n margin: 0 0 0 0;\n}\n\nbody.fixed-sidebar .navbar-static-side,\nbody.canvas-menu .navbar-static-side {\n position: fixed;\n width: 220px;\n z-index: 2001;\n height: 100%;\n}\n\nbody.fixed-sidebar.mini-navbar .navbar-static-side {\n width: 0;\n}\n\nbody.fixed-sidebar.mini-navbar #page-wrapper {\n margin: 0 0 0 0;\n}\n\nbody.body-small.fixed-sidebar.mini-navbar #page-wrapper {\n margin: 0 0 0 220px;\n}\n\nbody.body-small.fixed-sidebar.mini-navbar .navbar-static-side {\n width: 220px;\n}\n\n.fixed-sidebar.mini-navbar .nav li:focus > .nav-second-level,\n.canvas-menu.mini-navbar .nav li:focus > .nav-second-level {\n display: block;\n height: auto;\n}\n\nbody.fixed-sidebar.mini-navbar .navbar-default .nav > li > .nav-second-level li a {\n font-size: 12px;\n border-radius: 3px;\n}\n\nbody.canvas-menu.mini-navbar .navbar-default .nav > li > .nav-second-level li a {\n font-size: 13px;\n border-radius: 3px;\n}\n\n.fixed-sidebar.mini-navbar .nav-second-level li a,\n.canvas-menu.mini-navbar .nav-second-level li a {\n padding: 10px 10px 10px 15px;\n}\n\n.fixed-sidebar.mini-navbar .nav-second-level,\n.canvas-menu.mini-navbar .nav-second-level {\n position: relative;\n padding: 0;\n font-size: 13px;\n}\n\n.fixed-sidebar.mini-navbar li.active .nav-second-level,\n.canvas-menu.mini-navbar li.active .nav-second-level {\n left: 0;\n}\n\nbody.fixed-sidebar.mini-navbar .navbar-default .nav > li > a,\nbody.canvas-menu.mini-navbar .navbar-default .nav > li > a {\n font-size: 13px;\n}\n\nbody.fixed-sidebar.mini-navbar .nav-label,\nbody.fixed-sidebar.mini-navbar .navbar-default .nav li a span,\nbody.canvas-menu.mini-navbar .nav-label,\nbody.canvas-menu.mini-navbar .navbar-default .nav li a span {\n display: inline;\n}\n\nbody.canvas-menu.mini-navbar .navbar-default .nav li .profile-element a span {\n display: block;\n}\n\n.canvas-menu.mini-navbar .nav-second-level li a,\n.fixed-sidebar.mini-navbar .nav-second-level li a {\n padding: 7px 10px 7px 52px;\n}\n\n.fixed-sidebar.mini-navbar .nav-second-level,\n.canvas-menu.mini-navbar .nav-second-level {\n left: 0;\n}\n\nbody.canvas-menu nav.navbar-static-side {\n z-index: 2001;\n background: #2f4050;\n height: 100%;\n position: fixed;\n display: none;\n}\n\nbody.canvas-menu.mini-navbar nav.navbar-static-side {\n display: block;\n width: 220px;\n}\n\n.btn {\n border-radius: 3px;\n}\n\n.float-e-margins .btn {\n margin-bottom: 5px;\n}\n\n.btn-w-m {\n min-width: 120px;\n}\n\n.btn-primary.btn-outline {\n color: #1ab394;\n}\n\n.btn-success.btn-outline {\n color: #1c84c6;\n}\n\n.btn-info.btn-outline {\n color: #23c6c8;\n}\n\n.btn-warning.btn-outline {\n color: #f8ac59;\n}\n\n.btn-danger.btn-outline {\n color: #ED5565;\n}\n\n.btn-primary.btn-outline:hover,\n.btn-success.btn-outline:hover,\n.btn-info.btn-outline:hover,\n.btn-warning.btn-outline:hover,\n.btn-danger.btn-outline:hover {\n color: #fff;\n}\n\n.btn-primary {\n background-color: #1ab394;\n border-color: #1ab394;\n color: #FFFFFF;\n}\n\n.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary, .btn-primary:active:focus, .btn-primary:active:hover, .btn-primary.active:hover, .btn-primary.active:focus {\n background-color: #18a689;\n border-color: #18a689;\n color: #FFFFFF;\n}\n\n.btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {\n background-image: none;\n}\n\n.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled]:active, .btn-primary.active[disabled], fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active {\n background-color: #1dc5a3;\n border-color: #1dc5a3;\n}\n\n.btn-success {\n background-color: #1c84c6;\n border-color: #1c84c6;\n color: #FFFFFF;\n}\n\n.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success, .btn-success:active:focus, .btn-success:active:hover, .btn-success.active:hover, .btn-success.active:focus {\n background-color: #1a7bb9;\n border-color: #1a7bb9;\n color: #FFFFFF;\n}\n\n.btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {\n background-image: none;\n}\n\n.btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success.active[disabled], fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active {\n background-color: #1f90d8;\n border-color: #1f90d8;\n}\n\n.btn-info {\n background-color: #23c6c8;\n border-color: #23c6c8;\n color: #FFFFFF;\n}\n\n.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info, .btn-info:active:focus, .btn-info:active:hover, .btn-info.active:hover, .btn-info.active:focus {\n background-color: #21b9bb;\n border-color: #21b9bb;\n color: #FFFFFF;\n}\n\n.btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {\n background-image: none;\n}\n\n.btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active, .btn-info.active[disabled], fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active {\n background-color: #26d7d9;\n border-color: #26d7d9;\n}\n\n.btn-default {\n color: inherit;\n background: white;\n border: 1px solid #e7eaec;\n}\n\n.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default, .btn-default:active:focus, .btn-default:active:hover, .btn-default.active:hover, .btn-default.active:focus {\n color: inherit;\n border: 1px solid #d2d2d2;\n}\n\n.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15) inset;\n}\n\n.btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled]:active, .btn-default.active[disabled], fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default.active {\n color: #cacaca;\n}\n\n.btn-warning {\n background-color: #f8ac59;\n border-color: #f8ac59;\n color: #FFFFFF;\n}\n\n.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning, .btn-warning:active:focus, .btn-warning:active:hover, .btn-warning.active:hover, .btn-warning.active:focus {\n background-color: #f7a54a;\n border-color: #f7a54a;\n color: #FFFFFF;\n}\n\n.btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {\n background-image: none;\n}\n\n.btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled]:active, .btn-warning.active[disabled], fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active {\n background-color: #f9b66d;\n border-color: #f9b66d;\n}\n\n.btn-danger {\n background-color: #ED5565;\n border-color: #ED5565;\n color: #FFFFFF;\n}\n\n.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger, .btn-danger:active:focus, .btn-danger:active:hover, .btn-danger.active:hover, .btn-danger.active:focus {\n background-color: #ec4758;\n border-color: #ec4758;\n color: #FFFFFF;\n}\n\n.btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {\n background-image: none;\n}\n\n.btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled]:active, .btn-danger.active[disabled], fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active {\n background-color: #ef6776;\n border-color: #ef6776;\n}\n\n.btn-link {\n color: inherit;\n}\n\n.btn-link:hover, .btn-link:focus, .btn-link:active, .btn-link.active, .open .dropdown-toggle.btn-link {\n color: #1ab394;\n text-decoration: none;\n}\n\n.btn-link:active, .btn-link.active, .open .dropdown-toggle.btn-link {\n background-image: none;\n}\n\n.btn-link.disabled, .btn-link.disabled:hover, .btn-link.disabled:focus, .btn-link.disabled:active, .btn-link.disabled.active, .btn-link[disabled], .btn-link[disabled]:hover, .btn-link[disabled]:focus, .btn-link[disabled]:active, .btn-link.active[disabled], fieldset[disabled] .btn-link, fieldset[disabled] .btn-link:hover, fieldset[disabled] .btn-link:focus, fieldset[disabled] .btn-link:active, fieldset[disabled] .btn-link.active {\n color: #cacaca;\n}\n\n.btn-white {\n color: inherit;\n background: white;\n border: 1px solid #e7eaec;\n}\n\n.btn-white:hover, .btn-white:focus, .btn-white:active, .btn-white.active, .open .dropdown-toggle.btn-white, .btn-white:active:focus, .btn-white:active:hover, .btn-white.active:hover, .btn-white.active:focus {\n color: inherit;\n border: 1px solid #d2d2d2;\n}\n\n.btn-white:active, .btn-white.active {\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15) inset;\n}\n\n.btn-white:active, .btn-white.active, .open .dropdown-toggle.btn-white {\n background-image: none;\n}\n\n.btn-white.disabled, .btn-white.disabled:hover, .btn-white.disabled:focus, .btn-white.disabled:active, .btn-white.disabled.active, .btn-white[disabled], .btn-white[disabled]:hover, .btn-white[disabled]:focus, .btn-white[disabled]:active, .btn-white.active[disabled], fieldset[disabled] .btn-white, fieldset[disabled] .btn-white:hover, fieldset[disabled] .btn-white:focus, fieldset[disabled] .btn-white:active, fieldset[disabled] .btn-white.active {\n color: #cacaca;\n}\n\n.form-control, .form-control:focus, .has-error .form-control:focus, .has-success .form-control:focus, .has-warning .form-control:focus, .navbar-collapse, .navbar-form, .navbar-form-custom .form-control:focus, .navbar-form-custom .form-control:hover, .open .btn.dropdown-toggle, .panel, .popover, .progress, .progress-bar {\n box-shadow: none;\n}\n\n.btn-outline {\n color: inherit;\n background-color: transparent;\n transition: all .5s;\n}\n\n.btn-rounded {\n border-radius: 50px;\n}\n\n.btn-large-dim {\n width: 90px;\n height: 90px;\n font-size: 42px;\n}\n\nbutton.dim {\n display: inline-block;\n text-decoration: none;\n text-transform: uppercase;\n text-align: center;\n padding-top: 6px;\n margin-right: 10px;\n position: relative;\n cursor: pointer;\n border-radius: 5px;\n font-weight: 600;\n margin-bottom: 20px !important;\n}\n\nbutton.dim:active {\n top: 3px;\n}\n\nbutton.btn-primary.dim {\n box-shadow: inset 0 0 0 #16987e, 0 5px 0 0 #16987e, 0 10px 5px #999;\n}\n\nbutton.btn-primary.dim:active {\n box-shadow: inset 0 0 0 #16987e, 0 2px 0 0 #16987e, 0 5px 3px #999;\n}\n\nbutton.btn-default.dim {\n box-shadow: inset 0 0 0 #b3b3b3, 0 5px 0 0 #b3b3b3, 0 10px 5px #999;\n}\n\nbutton.btn-default.dim:active {\n box-shadow: inset 0 0 0 #b3b3b3, 0 2px 0 0 #b3b3b3, 0 5px 3px #999;\n}\n\nbutton.btn-warning.dim {\n box-shadow: inset 0 0 0 #f79d3c, 0 5px 0 0 #f79d3c, 0 10px 5px #999;\n}\n\nbutton.btn-warning.dim:active {\n box-shadow: inset 0 0 0 #f79d3c, 0 2px 0 0 #f79d3c, 0 5px 3px #999;\n}\n\nbutton.btn-info.dim {\n box-shadow: inset 0 0 0 #1eacae, 0 5px 0 0 #1eacae, 0 10px 5px #999;\n}\n\nbutton.btn-info.dim:active {\n box-shadow: inset 0 0 0 #1eacae, 0 2px 0 0 #1eacae, 0 5px 3px #999;\n}\n\nbutton.btn-success.dim {\n box-shadow: inset 0 0 0 #1872ab, 0 5px 0 0 #1872ab, 0 10px 5px #999;\n}\n\nbutton.btn-success.dim:active {\n box-shadow: inset 0 0 0 #1872ab, 0 2px 0 0 #1872ab, 0 5px 3px #999;\n}\n\nbutton.btn-danger.dim {\n box-shadow: inset 0 0 0 #ea394c, 0 5px 0 0 #ea394c, 0 10px 5px #999;\n}\n\nbutton.btn-danger.dim:active {\n box-shadow: inset 0 0 0 #ea394c, 0 2px 0 0 #ea394c, 0 5px 3px #999;\n}\n\nbutton.dim:before {\n font-size: 50px;\n line-height: 1em;\n font-weight: normal;\n color: #fff;\n display: block;\n padding-top: 10px;\n}\n\nbutton.dim:active:before {\n top: 7px;\n font-size: 50px;\n}\n\n.btn:focus {\n outline: none !important;\n}\n\n/* TOOGLE SWICH */\n.onoffswitch {\n position: relative;\n width: 64px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n\n.onoffswitch-checkbox {\n display: none;\n}\n\n.onoffswitch-label {\n display: block;\n overflow: hidden;\n cursor: pointer;\n border: 2px solid #1ab394;\n border-radius: 2px;\n}\n\n.onoffswitch-inner {\n width: 200%;\n margin-left: -100%;\n -moz-transition: margin 0.3s ease-in 0s;\n -webkit-transition: margin 0.3s ease-in 0s;\n -o-transition: margin 0.3s ease-in 0s;\n transition: margin 0.3s ease-in 0s;\n}\n\n.onoffswitch-inner:before, .onoffswitch-inner:after {\n float: left;\n width: 50%;\n height: 20px;\n padding: 0;\n line-height: 20px;\n font-size: 12px;\n color: white;\n font-family: Trebuchet, Arial, sans-serif;\n font-weight: bold;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n.onoffswitch-inner:before {\n content: \"ON\";\n padding-left: 10px;\n background-color: #1ab394;\n color: #FFFFFF;\n}\n\n.onoffswitch-inner:after {\n content: \"OFF\";\n padding-right: 10px;\n background-color: #FFFFFF;\n color: #999999;\n text-align: right;\n}\n\n.onoffswitch-switch {\n width: 20px;\n margin: 0;\n background: #FFFFFF;\n border: 2px solid #1ab394;\n border-radius: 2px;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 44px;\n -moz-transition: all 0.3s ease-in 0s;\n -webkit-transition: all 0.3s ease-in 0s;\n -o-transition: all 0.3s ease-in 0s;\n transition: all 0.3s ease-in 0s;\n}\n\n.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {\n margin-left: 0;\n}\n\n.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {\n right: 0;\n}\n\n/* CHOSEN PLUGIN */\n.chosen-container-single .chosen-single {\n background: #ffffff;\n box-shadow: none;\n -moz-box-sizing: border-box;\n background-color: #FFFFFF;\n border: 1px solid #CBD5DD;\n border-radius: 2px;\n cursor: text;\n height: auto !important;\n margin: 0;\n min-height: 30px;\n overflow: hidden;\n padding: 4px 12px;\n position: relative;\n width: 100%;\n}\n\n.chosen-container-multi .chosen-choices li.search-choice {\n background: #f1f1f1;\n border: 1px solid #ededed;\n border-radius: 2px;\n box-shadow: none;\n color: #333333;\n cursor: default;\n line-height: 13px;\n margin: 3px 0 3px 5px;\n padding: 3px 20px 3px 5px;\n position: relative;\n}\n\n/* PAGINATIN */\n.pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus {\n background-color: #f4f4f4;\n border-color: #DDDDDD;\n color: inherit;\n cursor: default;\n z-index: 2;\n}\n\n.pagination > li > a, .pagination > li > span {\n background-color: #FFFFFF;\n border: 1px solid #DDDDDD;\n color: inherit;\n float: left;\n line-height: 1.42857;\n margin-left: -1px;\n padding: 4px 10px;\n position: relative;\n text-decoration: none;\n}\n\n/* TOOLTIPS */\n.tooltip-inner {\n background-color: #2F4050;\n}\n\n.tooltip.top .tooltip-arrow {\n border-top-color: #2F4050;\n}\n\n.tooltip.right .tooltip-arrow {\n border-right-color: #2F4050;\n}\n\n.tooltip.bottom .tooltip-arrow {\n border-bottom-color: #2F4050;\n}\n\n.tooltip.left .tooltip-arrow {\n border-left-color: #2F4050;\n}\n\n/* EASY PIE CHART*/\n.easypiechart {\n position: relative;\n text-align: center;\n}\n\n.easypiechart .h2 {\n margin-left: 10px;\n margin-top: 10px;\n display: inline-block;\n}\n\n.easypiechart canvas {\n top: 0;\n left: 0;\n}\n\n.easypiechart .easypie-text {\n line-height: 1;\n position: absolute;\n top: 33px;\n width: 100%;\n z-index: 1;\n}\n\n.easypiechart img {\n margin-top: -4px;\n}\n\n.jqstooltip {\n -webkit-box-sizing: content-box;\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n}\n\n/* FULLCALENDAR */\n.fc-state-default {\n background-color: #ffffff;\n background-image: none;\n background-repeat: repeat-x;\n box-shadow: none;\n color: #333333;\n text-shadow: none;\n}\n\n.fc-state-default {\n border: 1px solid;\n}\n\n.fc-button {\n color: inherit;\n border: 1px solid #e7eaec;\n cursor: pointer;\n display: inline-block;\n height: 1.9em;\n line-height: 1.9em;\n overflow: hidden;\n padding: 0 0.6em;\n position: relative;\n white-space: nowrap;\n}\n\n.fc-state-active {\n background-color: #1ab394;\n border-color: #1ab394;\n color: #ffffff;\n}\n\n.fc-header-title h2 {\n font-size: 16px;\n font-weight: 600;\n color: inherit;\n}\n\n.fc-content .fc-widget-header, .fc-content .fc-widget-content {\n border-color: #e7eaec;\n font-weight: normal;\n}\n\n.fc-border-separate tbody {\n background-color: #F8F8F8;\n}\n\n.fc-state-highlight {\n background: none repeat scroll 0 0 #FCF8E3;\n}\n\n.external-event {\n padding: 5px 10px;\n border-radius: 2px;\n cursor: pointer;\n margin-bottom: 5px;\n}\n\n.fc-ltr .fc-event-hori.fc-event-end, .fc-rtl .fc-event-hori.fc-event-start {\n border-radius: 2px;\n}\n\n.fc-event,\n.fc-agenda .fc-event-time,\n.fc-event a {\n padding: 4px 6px;\n background-color: #1ab394;\n /* background color */\n border-color: #1ab394;\n /* border color */\n}\n\n.fc-event-time, .fc-event-title {\n color: #717171;\n padding: 0 1px;\n}\n\n.ui-calendar .fc-event-time, .ui-calendar .fc-event-title {\n color: #fff;\n}\n\n/* Chat */\n.chat-activity-list .chat-element {\n border-bottom: 1px solid #e7eaec;\n}\n\n.chat-element:first-child {\n margin-top: 0;\n}\n\n.chat-element {\n padding-bottom: 15px;\n}\n\n.chat-element, .chat-element .media {\n margin-top: 15px;\n}\n\n.chat-element, .media-body {\n overflow: hidden;\n}\n\n.media-body {\n display: block;\n width: auto;\n}\n\n.chat-element > .pull-left {\n margin-right: 10px;\n}\n\n.chat-element img.img-circle, .dropdown-messages-box img.img-circle {\n width: 38px;\n height: 38px;\n}\n\n.chat-element .well {\n border: 1px solid #e7eaec;\n box-shadow: none;\n margin-top: 10px;\n margin-bottom: 5px;\n padding: 10px 20px;\n font-size: 11px;\n line-height: 16px;\n}\n\n.chat-element .actions {\n margin-top: 10px;\n}\n\n.chat-element .photos {\n margin: 10px 0;\n}\n\n.right.chat-element > .pull-right {\n margin-left: 10px;\n}\n\n.chat-photo {\n max-height: 180px;\n border-radius: 4px;\n overflow: hidden;\n margin-right: 10px;\n margin-bottom: 10px;\n}\n\n.chat {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.chat li {\n margin-bottom: 10px;\n padding-bottom: 5px;\n border-bottom: 1px dotted #B3A9A9;\n}\n\n.chat li.left .chat-body {\n margin-left: 60px;\n}\n\n.chat li.right .chat-body {\n margin-right: 60px;\n}\n\n.chat li .chat-body p {\n margin: 0;\n color: #777777;\n}\n\n.panel .slidedown .glyphicon,\n.chat .glyphicon {\n margin-right: 5px;\n}\n\n.chat-panel .panel-body {\n height: 350px;\n overflow-y: scroll;\n}\n\n/* LIST GROUP */\na.list-group-item.active, a.list-group-item.active:hover, a.list-group-item.active:focus {\n background-color: #1ab394;\n border-color: #1ab394;\n color: #FFFFFF;\n z-index: 2;\n}\n\n.list-group-item-heading {\n margin-top: 10px;\n}\n\n.list-group-item-text {\n margin: 0 0 10px;\n color: inherit;\n font-size: 12px;\n line-height: inherit;\n}\n\n.no-padding .list-group-item {\n border-left: none;\n border-right: none;\n border-bottom: none;\n}\n\n.no-padding .list-group-item:first-child {\n border-left: none;\n border-right: none;\n border-bottom: none;\n border-top: none;\n}\n\n.no-padding .list-group {\n margin-bottom: 0;\n}\n\n.list-group-item {\n background-color: inherit;\n border: 1px solid #e7eaec;\n display: block;\n margin-bottom: -1px;\n padding: 10px 15px;\n position: relative;\n}\n\n.elements-list .list-group-item {\n border-left: none;\n border-right: none;\n padding: 15px 25px;\n}\n\n.elements-list .list-group-item:first-child {\n border-left: none;\n border-right: none;\n border-top: none !important;\n}\n\n.elements-list .list-group {\n margin-bottom: 0;\n}\n\n.elements-list a {\n color: inherit;\n}\n\n.elements-list .list-group-item.active,\n.elements-list .list-group-item:hover {\n background: #f3f3f4;\n color: inherit;\n border-color: #e7eaec;\n /*border-bottom: 1px solid #e7eaec;*/\n /*border-top: 1px solid #e7eaec;*/\n border-radius: 0;\n}\n\n.elements-list li.active {\n transition: none;\n}\n\n.element-detail-box {\n padding: 25px;\n}\n\n/* FLOT CHART */\n.flot-chart {\n display: block;\n height: 200px;\n}\n\n.widget .flot-chart.dashboard-chart {\n display: block;\n height: 120px;\n margin-top: 40px;\n}\n\n.flot-chart.dashboard-chart {\n display: block;\n height: 180px;\n margin-top: 40px;\n}\n\n.flot-chart-content {\n width: 100%;\n height: 100%;\n}\n\n.flot-chart-pie-content {\n width: 200px;\n height: 200px;\n margin: auto;\n}\n\n.jqstooltip {\n position: absolute;\n display: block;\n left: 0;\n top: 0;\n visibility: hidden;\n background: #2b303a;\n background-color: rgba(43, 48, 58, 0.8);\n color: white;\n text-align: left;\n white-space: nowrap;\n z-index: 10000;\n padding: 5px 5px 5px 5px;\n min-height: 22px;\n border-radius: 3px;\n}\n\n.jqsfield {\n color: white;\n text-align: left;\n}\n\n.fh-150 {\n height: 150px;\n}\n\n.fh-200 {\n height: 200px;\n}\n\n.h-150 {\n min-height: 150px;\n}\n\n.h-200 {\n min-height: 200px;\n}\n\n.legendLabel {\n padding-left: 5px;\n}\n\n.stat-list li:first-child {\n margin-top: 0;\n}\n\n.stat-list {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n\n.stat-percent {\n float: right;\n}\n\n.stat-list li {\n margin-top: 15px;\n position: relative;\n}\n\n/* DATATABLES */\ntable.dataTable thead .sorting,\ntable.dataTable thead .sorting_asc:after,\ntable.dataTable thead .sorting_desc,\ntable.dataTable thead .sorting_asc_disabled,\ntable.dataTable thead .sorting_desc_disabled {\n background: transparent;\n}\n\n.dataTables_wrapper {\n padding-bottom: 30px;\n}\n\n.dataTables_length {\n float: left;\n}\n\n.dataTables_filter label {\n margin-right: 5px;\n}\n\n.html5buttons {\n float: right;\n}\n\n.html5buttons a {\n border: 1px solid #e7eaec;\n background: #fff;\n color: #676a6c;\n box-shadow: none;\n padding: 6px 8px;\n font-size: 12px;\n}\n\n.html5buttons a:hover, .html5buttons a:focus:active {\n background-color: #eee;\n color: inherit;\n border-color: #d2d2d2;\n}\n\ndiv.dt-button-info {\n z-index: 100;\n}\n\n@media (max-width: 768px) {\n .html5buttons {\n float: none;\n margin-top: 10px;\n }\n .dataTables_length {\n float: none;\n }\n}\n\n/* CIRCLE */\n.img-circle {\n border-radius: 50%;\n}\n\n.btn-circle {\n width: 30px;\n height: 30px;\n padding: 6px 0;\n border-radius: 15px;\n text-align: center;\n font-size: 12px;\n line-height: 1.428571429;\n}\n\n.btn-circle.btn-lg {\n width: 50px;\n height: 50px;\n padding: 10px 16px;\n border-radius: 25px;\n font-size: 18px;\n line-height: 1.33;\n}\n\n.btn-circle.btn-xl {\n width: 70px;\n height: 70px;\n padding: 10px 16px;\n border-radius: 35px;\n font-size: 24px;\n line-height: 1.33;\n}\n\n.show-grid [class^=\"col-\"] {\n padding-top: 10px;\n padding-bottom: 10px;\n border: 1px solid #ddd;\n background-color: #eee !important;\n}\n\n.show-grid {\n margin: 15px 0;\n}\n\n/* ANIMATION */\n.css-animation-box h1 {\n font-size: 44px;\n}\n\n.animation-efect-links a {\n padding: 4px 6px;\n font-size: 12px;\n}\n\n#animation_box {\n background-color: #f9f8f8;\n border-radius: 16px;\n width: 80%;\n margin: 0 auto;\n padding-top: 80px;\n}\n\n.animation-text-box {\n position: absolute;\n margin-top: 40px;\n left: 50%;\n margin-left: -100px;\n width: 200px;\n}\n\n.animation-text-info {\n position: absolute;\n margin-top: -60px;\n left: 50%;\n margin-left: -100px;\n width: 200px;\n font-size: 10px;\n}\n\n.animation-text-box h2 {\n font-size: 54px;\n font-weight: 600;\n margin-bottom: 5px;\n}\n\n.animation-text-box p {\n font-size: 12px;\n text-transform: uppercase;\n}\n\n/* PEACE */\n.pace {\n -webkit-pointer-events: none;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n\n.pace-inactive {\n display: none;\n}\n\n.pace .pace-progress {\n background: #1ab394;\n position: fixed;\n z-index: 2040;\n top: 0;\n right: 100%;\n width: 100%;\n height: 2px;\n}\n\n.pace-inactive {\n display: none;\n}\n\n/* WIDGETS */\n.widget {\n border-radius: 5px;\n padding: 15px 20px;\n margin-bottom: 10px;\n margin-top: 10px;\n}\n\n.widget.style1 h2 {\n font-size: 30px;\n}\n\n.widget h2, .widget h3 {\n margin-top: 5px;\n margin-bottom: 0;\n}\n\n.widget-text-box {\n padding: 20px;\n border: 1px solid #e7eaec;\n background: #ffffff;\n}\n\n.widget-head-color-box {\n border-radius: 5px 5px 0 0;\n margin-top: 10px;\n}\n\n.widget .flot-chart {\n height: 100px;\n}\n\n.vertical-align div {\n display: inline-block;\n vertical-align: middle;\n}\n\n.vertical-align h2, .vertical-align h3 {\n margin: 0;\n}\n\n.todo-list {\n list-style: none outside none;\n margin: 0;\n padding: 0;\n font-size: 14px;\n}\n\n.todo-list.small-list {\n font-size: 12px;\n}\n\n.todo-list.small-list > li {\n background: #f3f3f4;\n border-left: none;\n border-right: none;\n border-radius: 4px;\n color: inherit;\n margin-bottom: 2px;\n padding: 6px 6px 6px 12px;\n}\n\n.todo-list.small-list .btn-xs, .todo-list.small-list .btn-group-xs > .btn {\n border-radius: 5px;\n font-size: 10px;\n line-height: 1.5;\n padding: 1px 2px 1px 5px;\n}\n\n.todo-list > li {\n background: #f3f3f4;\n border-left: 6px solid #e7eaec;\n border-right: 6px solid #e7eaec;\n border-radius: 4px;\n color: inherit;\n margin-bottom: 2px;\n padding: 10px;\n}\n\n.todo-list .handle {\n cursor: move;\n display: inline-block;\n font-size: 16px;\n margin: 0 5px;\n}\n\n.todo-list > li .label {\n font-size: 9px;\n margin-left: 10px;\n}\n\n.check-link {\n font-size: 16px;\n}\n\n.todo-completed {\n text-decoration: line-through;\n}\n\n.geo-statistic h1 {\n font-size: 36px;\n margin-bottom: 0;\n}\n\n.glyphicon.fa {\n font-family: \"FontAwesome\";\n}\n\n/* INPUTS */\n.inline {\n display: inline-block !important;\n}\n\n.input-s-sm {\n width: 120px;\n}\n\n.input-s {\n width: 200px;\n}\n\n.input-s-lg {\n width: 250px;\n}\n\n.i-checks {\n padding-left: 0;\n}\n\n.form-control, .single-line {\n background-color: #FFFFFF;\n background-image: none;\n border: 1px solid #e5e6e7;\n border-radius: 1px;\n color: inherit;\n display: block;\n padding: 6px 12px;\n transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s;\n width: 100%;\n font-size: 14px;\n}\n\n.form-control:focus, .single-line:focus {\n border-color: #1ab394 !important;\n}\n\n.has-success .form-control {\n border-color: #1ab394;\n}\n\n.has-warning .form-control {\n border-color: #f8ac59;\n}\n\n.has-error .form-control {\n border-color: #ED5565;\n}\n\n.has-success .control-label {\n color: #1ab394;\n}\n\n.has-warning .control-label {\n color: #f8ac59;\n}\n\n.has-error .control-label {\n color: #ED5565;\n}\n\n.input-group-addon {\n background-color: #fff;\n border: 1px solid #E5E6E7;\n border-radius: 1px;\n color: inherit;\n font-size: 14px;\n font-weight: 400;\n line-height: 1;\n padding: 6px 12px;\n text-align: center;\n}\n\n.spinner-buttons.input-group-btn .btn-xs {\n line-height: 1.13;\n}\n\n.spinner-buttons.input-group-btn {\n width: 20%;\n}\n\n.noUi-connect {\n background: none repeat scroll 0 0 #1ab394;\n box-shadow: none;\n}\n\n.slider_red .noUi-connect {\n background: none repeat scroll 0 0 #ED5565;\n box-shadow: none;\n}\n\n/* UI Sortable */\n.ui-sortable .ibox-title {\n cursor: move;\n}\n\n.ui-sortable-placeholder {\n border: 1px dashed #cecece !important;\n visibility: visible !important;\n background: #e7eaec;\n}\n\n.ibox.ui-sortable-placeholder {\n margin: 0 0 23px !important;\n}\n\n/* SWITCHES */\n.onoffswitch {\n position: relative;\n width: 54px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n\n.onoffswitch-checkbox {\n display: none;\n}\n\n.onoffswitch-label {\n display: block;\n overflow: hidden;\n cursor: pointer;\n border: 2px solid #1AB394;\n border-radius: 3px;\n}\n\n.onoffswitch-inner {\n display: block;\n width: 200%;\n margin-left: -100%;\n -moz-transition: margin 0.3s ease-in 0s;\n -webkit-transition: margin 0.3s ease-in 0s;\n -o-transition: margin 0.3s ease-in 0s;\n transition: margin 0.3s ease-in 0s;\n}\n\n.onoffswitch-inner:before, .onoffswitch-inner:after {\n display: block;\n float: left;\n width: 50%;\n height: 16px;\n padding: 0;\n line-height: 16px;\n font-size: 10px;\n color: white;\n font-family: Trebuchet, Arial, sans-serif;\n font-weight: bold;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n.onoffswitch-inner:before {\n content: \"ON\";\n padding-left: 7px;\n background-color: #1AB394;\n color: #FFFFFF;\n}\n\n.onoffswitch-inner:after {\n content: \"OFF\";\n padding-right: 7px;\n background-color: #FFFFFF;\n color: #919191;\n text-align: right;\n}\n\n.onoffswitch-switch {\n display: block;\n width: 18px;\n margin: 0;\n background: #FFFFFF;\n border: 2px solid #1AB394;\n border-radius: 3px;\n position: absolute;\n top: 0;\n bottom: 0;\n right: 36px;\n -moz-transition: all 0.3s ease-in 0s;\n -webkit-transition: all 0.3s ease-in 0s;\n -o-transition: all 0.3s ease-in 0s;\n transition: all 0.3s ease-in 0s;\n}\n\n.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {\n margin-left: 0;\n}\n\n.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {\n right: 0;\n}\n\n/* jqGrid */\n.ui-jqgrid {\n -moz-box-sizing: content-box;\n}\n\n.ui-jqgrid-btable {\n border-collapse: separate;\n}\n\n.ui-jqgrid-htable {\n border-collapse: separate;\n}\n\n.ui-jqgrid-titlebar {\n height: 40px;\n line-height: 15px;\n color: #676a6c;\n background-color: #F9F9F9;\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n}\n\n.ui-jqgrid .ui-jqgrid-title {\n float: left;\n margin: 1.1em 1em 0.2em;\n}\n\n.ui-jqgrid .ui-jqgrid-titlebar {\n position: relative;\n border-left: 0 solid;\n border-right: 0 solid;\n border-top: 0 solid;\n}\n\n.ui-widget-header {\n background: none;\n background-image: none;\n background-color: #f5f5f6;\n text-transform: uppercase;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.ui-jqgrid tr.ui-row-ltr td {\n border-right-color: inherit;\n border-right-style: solid;\n border-right-width: 1px;\n text-align: left;\n border-color: #DDDDDD;\n background-color: inherit;\n}\n\n.ui-search-toolbar input[type=\"text\"] {\n font-size: 12px;\n height: 15px;\n border: 1px solid #CCCCCC;\n border-radius: 0;\n}\n\n.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {\n background: #F9F9F9;\n border: 1px solid #DDDDDD;\n line-height: 15px;\n font-weight: bold;\n color: #676a6c;\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n}\n\n.ui-widget-content {\n box-sizing: content-box;\n}\n\n.ui-icon-triangle-1-n {\n background-position: 1px -16px;\n}\n\n.ui-jqgrid tr.ui-search-toolbar th {\n border-top-width: 0 !important;\n border-top-color: inherit !important;\n border-top-style: ridge !important;\n}\n\n.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {\n background: #f5f5f5;\n border-collapse: separate;\n}\n\n.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {\n background: #f2fbff;\n}\n\n.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {\n border: 1px solid #dddddd;\n background: #ffffff;\n font-weight: normal;\n color: #212121;\n}\n\n.ui-jqgrid .ui-pg-input {\n font-size: inherit;\n width: 50px;\n border: 1px solid #CCCCCC;\n height: 15px;\n}\n\n.ui-jqgrid .ui-pg-selbox {\n display: block;\n font-size: 1em;\n height: 25px;\n line-height: 18px;\n margin: 0;\n width: auto;\n}\n\n.ui-jqgrid .ui-pager-control {\n position: relative;\n}\n\n.ui-jqgrid .ui-jqgrid-pager {\n height: 32px;\n position: relative;\n}\n\n.ui-pg-table .navtable .ui-corner-all {\n border-radius: 0;\n}\n\n.ui-jqgrid .ui-pg-button:hover {\n padding: 1px;\n border: 0;\n}\n\n.ui-jqgrid .loading {\n position: absolute;\n top: 45%;\n left: 45%;\n width: auto;\n height: auto;\n z-index: 101;\n padding: 6px;\n margin: 5px;\n text-align: center;\n font-weight: bold;\n display: none;\n border-width: 2px !important;\n font-size: 11px;\n}\n\n.ui-jqgrid .form-control {\n height: 10px;\n width: auto;\n display: inline;\n padding: 10px 12px;\n}\n\n.ui-jqgrid-pager {\n height: 32px;\n}\n\n.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl {\n border-top-left-radius: 0;\n}\n\n.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr {\n border-top-right-radius: 0;\n}\n\n.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl {\n border-bottom-left-radius: 0;\n}\n\n.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br {\n border-bottom-right-radius: 0;\n}\n\n.ui-widget-content {\n border: 1px solid #ddd;\n}\n\n.ui-jqgrid .ui-jqgrid-titlebar {\n padding: 0;\n}\n\n.ui-jqgrid .ui-jqgrid-titlebar {\n border-bottom: 1px solid #ddd;\n}\n\n.ui-jqgrid tr.jqgrow td {\n padding: 6px;\n}\n\n.ui-jqdialog .ui-jqdialog-titlebar {\n padding: 10px 10px;\n}\n\n.ui-jqdialog .ui-jqdialog-title {\n float: none !important;\n}\n\n.ui-jqdialog > .ui-resizable-se {\n position: absolute;\n}\n\n/* Nestable list */\n.dd {\n position: relative;\n display: block;\n margin: 0;\n padding: 0;\n list-style: none;\n font-size: 13px;\n line-height: 20px;\n}\n\n.dd-list {\n display: block;\n position: relative;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.dd-list .dd-list {\n padding-left: 30px;\n}\n\n.dd-collapsed .dd-list {\n display: none;\n}\n\n.dd-item,\n.dd-empty,\n.dd-placeholder {\n display: block;\n position: relative;\n margin: 0;\n padding: 0;\n min-height: 20px;\n font-size: 13px;\n line-height: 20px;\n}\n\n.dd-handle {\n display: block;\n margin: 5px 0;\n padding: 5px 10px;\n color: #333;\n text-decoration: none;\n border: 1px solid #e7eaec;\n background: #f5f5f5;\n -webkit-border-radius: 3px;\n border-radius: 3px;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n}\n\n.dd-handle span {\n font-weight: bold;\n}\n\n.dd-handle:hover {\n background: #f0f0f0;\n cursor: pointer;\n font-weight: bold;\n}\n\n.dd-item > button {\n display: block;\n position: relative;\n cursor: pointer;\n float: left;\n width: 25px;\n height: 20px;\n margin: 5px 0;\n padding: 0;\n text-indent: 100%;\n white-space: nowrap;\n overflow: hidden;\n border: 0;\n background: transparent;\n font-size: 12px;\n line-height: 1;\n text-align: center;\n font-weight: bold;\n}\n\n.dd-item > button:before {\n content: '+';\n display: block;\n position: absolute;\n width: 100%;\n text-align: center;\n text-indent: 0;\n}\n\n.dd-item > button[data-action=\"collapse\"]:before {\n content: '-';\n}\n\n#nestable2 .dd-item > button {\n font-family: FontAwesome;\n height: 34px;\n width: 33px;\n color: #c1c1c1;\n}\n\n#nestable2 .dd-item > button:before {\n content: \"\\f067\";\n}\n\n#nestable2 .dd-item > button[data-action=\"collapse\"]:before {\n content: \"\\f068\";\n}\n\n.dd-placeholder,\n.dd-empty {\n margin: 5px 0;\n padding: 0;\n min-height: 30px;\n background: #f2fbff;\n border: 1px dashed #b6bcbf;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n}\n\n.dd-empty {\n border: 1px dashed #bbb;\n min-height: 100px;\n background-color: #e5e5e5;\n background-image: -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);\n background-image: -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);\n background-image: linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff), linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);\n background-size: 60px 60px;\n background-position: 0 0, 30px 30px;\n}\n\n.dd-dragel {\n position: absolute;\n z-index: 9999;\n pointer-events: none;\n}\n\n.dd-dragel > .dd-item .dd-handle {\n margin-top: 0;\n}\n\n.dd-dragel .dd-handle {\n -webkit-box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, 0.1);\n box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, 0.1);\n}\n\n/**\r\n* Nestable Extras\r\n*/\n.nestable-lists {\n display: block;\n clear: both;\n padding: 30px 0;\n width: 100%;\n border: 0;\n border-top: 2px solid #ddd;\n border-bottom: 2px solid #ddd;\n}\n\n#nestable-menu {\n padding: 0;\n margin: 10px 0 20px 0;\n}\n\n#nestable-output,\n#nestable2-output {\n width: 100%;\n font-size: 0.75em;\n line-height: 1.333333em;\n font-family: open sans, lucida grande, lucida sans unicode, helvetica, arial, sans-serif;\n padding: 5px;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n}\n\n#nestable2 .dd-handle {\n color: inherit;\n border: 1px dashed #e7eaec;\n background: #f3f3f4;\n padding: 10px;\n}\n\n#nestable2 .dd-handle:hover {\n /*background: #bbb;*/\n}\n\n#nestable2 span.label {\n margin-right: 10px;\n}\n\n#nestable-output,\n#nestable2-output {\n font-size: 12px;\n padding: 25px;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n}\n\n/* CodeMirror */\n.CodeMirror {\n border: 1px solid #eee;\n height: auto;\n}\n\n.CodeMirror-scroll {\n overflow-y: hidden;\n overflow-x: auto;\n}\n\n/* Google Maps */\n.google-map {\n height: 300px;\n}\n\n/* Validation */\nlabel.error {\n color: #cc5965;\n display: inline-block;\n margin-left: 5px;\n}\n\n.form-control.error {\n border: 1px dotted #cc5965;\n}\n\n/* ngGrid */\n.gridStyle {\n border: 1px solid #d4d4d4;\n width: 100%;\n height: 400px;\n}\n\n.gridStyle2 {\n border: 1px solid #d4d4d4;\n width: 500px;\n height: 300px;\n}\n\n.ngH eaderCell {\n border-right: none;\n border-bottom: 1px solid #e7eaec;\n}\n\n.ngCell {\n border-right: none;\n}\n\n.ngTopPanel {\n background: #F5F5F6;\n}\n\n.ngRow.even {\n background: #f9f9f9;\n}\n\n.ngRow.selected {\n background: #EBF2F1;\n}\n\n.ngRow {\n border-bottom: 1px solid #e7eaec;\n}\n\n.ngCell {\n background-color: transparent;\n}\n\n.ngHeaderCell {\n border-right: none;\n}\n\n/* Toastr custom style */\n#toast-container > .toast {\n background-image: none !important;\n}\n\n#toast-container > .toast:before {\n position: fixed;\n font-family: FontAwesome;\n font-size: 24px;\n line-height: 24px;\n float: left;\n color: #FFF;\n padding-right: 0.5em;\n margin: auto 0.5em auto -1.5em;\n}\n\n#toast-container > .toast-warning:before {\n content: \"\\f0e7\";\n}\n\n#toast-container > .toast-error:before {\n content: \"\\f071\";\n}\n\n#toast-container > .toast-info:before {\n content: \"\\f005\";\n}\n\n#toast-container > .toast-success:before {\n content: \"\\f00C\";\n}\n\n#toast-container > div {\n -moz-box-shadow: 0 0 3px #999;\n -webkit-box-shadow: 0 0 3px #999;\n box-shadow: 0 0 3px #999;\n opacity: .9;\n -ms-filter: alpha(Opacity=90);\n filter: alpha(opacity=90);\n}\n\n#toast-container > :hover {\n -moz-box-shadow: 0 0 4px #999;\n -webkit-box-shadow: 0 0 4px #999;\n box-shadow: 0 0 4px #999;\n opacity: 1;\n -ms-filter: alpha(Opacity=100);\n filter: alpha(opacity=100);\n cursor: pointer;\n}\n\n.toast {\n background-color: #1ab394;\n}\n\n.toast-success {\n background-color: #1ab394;\n}\n\n.toast-error {\n background-color: #ED5565;\n}\n\n.toast-info {\n background-color: #23c6c8;\n}\n\n.toast-warning {\n background-color: #f8ac59;\n}\n\n.toast-top-full-width {\n margin-top: 20px;\n}\n\n.toast-bottom-full-width {\n margin-bottom: 20px;\n}\n\n/* Notifie */\n.cg-notify-message.inspinia-notify {\n background: #fff;\n padding: 0;\n box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.2);\n -moz-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.2);\n border: none;\n margin-top: 30px;\n color: inherit;\n}\n\n.inspinia-notify.alert-warning {\n border-left: 6px solid #f8ac59;\n}\n\n.inspinia-notify.alert-success {\n border-left: 6px solid #1c84c6;\n}\n\n.inspinia-notify.alert-danger {\n border-left: 6px solid #ED5565;\n}\n\n.inspinia-notify.alert-info {\n border-left: 6px solid #1ab394;\n}\n\n/* Image cropper style */\n.img-container, .img-preview {\n overflow: hidden;\n text-align: center;\n width: 100%;\n}\n\n.img-preview-sm {\n height: 130px;\n width: 200px;\n}\n\n/* Forum styles */\n.forum-post-container .media {\n margin: 10px 10px 10px 10px;\n padding: 20px 10px 20px 10px;\n border-bottom: 1px solid #f1f1f1;\n}\n\n.forum-avatar {\n float: left;\n margin-right: 20px;\n text-align: center;\n width: 110px;\n}\n\n.forum-avatar .img-circle {\n height: 48px;\n width: 48px;\n}\n\n.author-info {\n color: #676a6c;\n font-size: 11px;\n margin-top: 5px;\n text-align: center;\n}\n\n.forum-post-info {\n padding: 9px 12px 6px 12px;\n background: #f9f9f9;\n border: 1px solid #f1f1f1;\n}\n\n.media-body > .media {\n background: #f9f9f9;\n border-radius: 3px;\n border: 1px solid #f1f1f1;\n}\n\n.forum-post-container .media-body .photos {\n margin: 10px 0;\n}\n\n.forum-photo {\n max-width: 140px;\n border-radius: 3px;\n}\n\n.media-body > .media .forum-avatar {\n width: 70px;\n margin-right: 10px;\n}\n\n.media-body > .media .forum-avatar .img-circle {\n height: 38px;\n width: 38px;\n}\n\n.mid-icon {\n font-size: 66px;\n}\n\n.forum-item {\n margin: 10px 0;\n padding: 10px 0 20px;\n border-bottom: 1px solid #f1f1f1;\n}\n\n.views-number {\n font-size: 24px;\n line-height: 18px;\n font-weight: 400;\n}\n\n.forum-container, .forum-post-container {\n padding: 30px !important;\n}\n\n.forum-item small {\n color: #999;\n}\n\n.forum-item .forum-sub-title {\n color: #999;\n margin-left: 50px;\n}\n\n.forum-title {\n margin: 15px 0 15px 0;\n}\n\n.forum-info {\n text-align: center;\n}\n\n.forum-desc {\n color: #999;\n}\n\n.forum-icon {\n float: left;\n width: 30px;\n margin-right: 20px;\n text-align: center;\n}\n\na.forum-item-title {\n color: inherit;\n display: block;\n font-size: 18px;\n font-weight: 600;\n}\n\na.forum-item-title:hover {\n color: inherit;\n}\n\n.forum-icon .fa {\n font-size: 30px;\n margin-top: 8px;\n color: #9b9b9b;\n}\n\n.forum-item.active .fa {\n color: #1ab394;\n}\n\n.forum-item.active a.forum-item-title {\n color: #1ab394;\n}\n\n@media (max-width: 992px) {\n .forum-info {\n margin: 15px 0 10px 0;\n /* Comment this is you want to show forum info in small devices */\n display: none;\n }\n .forum-desc {\n float: none !important;\n }\n}\n\n/* New Timeline style */\n.vertical-container {\n /* this class is used to give a max-width to the element it is applied to, and center it horizontally when it reaches that max-width */\n width: 90%;\n max-width: 1170px;\n margin: 0 auto;\n}\n\n.vertical-container::after {\n /* clearfix */\n content: '';\n display: table;\n clear: both;\n}\n\n#vertical-timeline {\n position: relative;\n padding: 0;\n margin-top: 2em;\n margin-bottom: 2em;\n}\n\n#vertical-timeline::before {\n content: '';\n position: absolute;\n top: 0;\n left: 18px;\n height: 100%;\n width: 4px;\n background: #f1f1f1;\n}\n\n.vertical-timeline-content .btn {\n float: right;\n}\n\n#vertical-timeline.light-timeline:before {\n background: #e7eaec;\n}\n\n.dark-timeline .vertical-timeline-content:before {\n border-color: transparent #f5f5f5 transparent transparent;\n}\n\n.dark-timeline.center-orientation .vertical-timeline-content:before {\n border-color: transparent transparent transparent #f5f5f5;\n}\n\n.dark-timeline .vertical-timeline-block:nth-child(2n) .vertical-timeline-content:before,\n.dark-timeline.center-orientation .vertical-timeline-block:nth-child(2n) .vertical-timeline-content:before {\n border-color: transparent #f5f5f5 transparent transparent;\n}\n\n.dark-timeline .vertical-timeline-content,\n.dark-timeline.center-orientation .vertical-timeline-content {\n background: #f5f5f5;\n}\n\n@media only screen and (min-width: 1170px) {\n #vertical-timeline.center-orientation {\n margin-top: 3em;\n margin-bottom: 3em;\n }\n #vertical-timeline.center-orientation:before {\n left: 50%;\n margin-left: -2px;\n }\n}\n\n@media only screen and (max-width: 1170px) {\n .center-orientation.dark-timeline .vertical-timeline-content:before {\n border-color: transparent #f5f5f5 transparent transparent;\n }\n}\n\n.vertical-timeline-block {\n position: relative;\n margin: 2em 0;\n}\n\n.vertical-timeline-block:after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.vertical-timeline-block:first-child {\n margin-top: 0;\n}\n\n.vertical-timeline-block:last-child {\n margin-bottom: 0;\n}\n\n@media only screen and (min-width: 1170px) {\n .center-orientation .vertical-timeline-block {\n margin: 4em 0;\n }\n .center-orientation .vertical-timeline-block:first-child {\n margin-top: 0;\n }\n .center-orientation .vertical-timeline-block:last-child {\n margin-bottom: 0;\n }\n}\n\n.vertical-timeline-icon {\n position: absolute;\n top: 0;\n left: 0;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n font-size: 16px;\n border: 3px solid #f1f1f1;\n text-align: center;\n}\n\n.vertical-timeline-icon i {\n display: block;\n width: 24px;\n height: 24px;\n position: relative;\n left: 50%;\n top: 50%;\n margin-left: -12px;\n margin-top: -9px;\n}\n\n@media only screen and (min-width: 1170px) {\n .center-orientation .vertical-timeline-icon {\n width: 50px;\n height: 50px;\n left: 50%;\n margin-left: -25px;\n -webkit-transform: translateZ(0);\n -webkit-backface-visibility: hidden;\n font-size: 19px;\n }\n .center-orientation .vertical-timeline-icon i {\n margin-left: -12px;\n margin-top: -10px;\n }\n .center-orientation .cssanimations .vertical-timeline-icon.is-hidden {\n visibility: hidden;\n }\n}\n\n.vertical-timeline-content {\n position: relative;\n margin-left: 60px;\n background: white;\n border-radius: 0.25em;\n padding: 1em;\n}\n\n.vertical-timeline-content:after {\n content: \"\";\n display: table;\n clear: both;\n}\n\n.vertical-timeline-content h2 {\n font-weight: 400;\n margin-top: 4px;\n}\n\n.vertical-timeline-content p {\n margin: 1em 0;\n line-height: 1.6;\n}\n\n.vertical-timeline-content .vertical-date {\n float: left;\n font-weight: 500;\n}\n\n.vertical-date small {\n color: #1ab394;\n font-weight: 400;\n}\n\n.vertical-timeline-content::before {\n content: '';\n position: absolute;\n top: 16px;\n right: 100%;\n height: 0;\n width: 0;\n border: 7px solid transparent;\n border-right: 7px solid white;\n}\n\n@media only screen and (min-width: 768px) {\n .vertical-timeline-content h2 {\n font-size: 18px;\n }\n .vertical-timeline-content p {\n font-size: 13px;\n }\n}\n\n@media only screen and (min-width: 1170px) {\n .center-orientation .vertical-timeline-content {\n margin-left: 0;\n padding: 1.6em;\n width: 45%;\n }\n .center-orientation .vertical-timeline-content::before {\n top: 24px;\n left: 100%;\n border-color: transparent;\n border-left-color: white;\n }\n .center-orientation .vertical-timeline-content .btn {\n float: left;\n }\n .center-orientation .vertical-timeline-content .vertical-date {\n position: absolute;\n width: 100%;\n left: 122%;\n top: 2px;\n font-size: 14px;\n }\n .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content {\n float: right;\n }\n .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content::before {\n top: 24px;\n left: auto;\n right: 100%;\n border-color: transparent;\n border-right-color: white;\n }\n .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content .btn {\n float: right;\n }\n .center-orientation .vertical-timeline-block:nth-child(even) .vertical-timeline-content .vertical-date {\n left: auto;\n right: 122%;\n text-align: right;\n }\n .center-orientation .cssanimations .vertical-timeline-content.is-hidden {\n visibility: hidden;\n }\n}\n\n/* Tabs */\n.tabs-container .panel-body {\n background: #fff;\n border: 1px solid #e7eaec;\n border-radius: 2px;\n padding: 20px;\n position: relative;\n}\n\n.tabs-container .nav-tabs > li.active > a,\n.tabs-container .nav-tabs > li.active > a:hover,\n.tabs-container .nav-tabs > li.active > a:focus {\n border: 1px solid #e7eaec;\n border-bottom-color: transparent;\n background-color: #fff;\n}\n\n.tabs-container .nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n\n.tabs-container .tab-pane .panel-body {\n border-top: none;\n}\n\n.tabs-container .nav-tabs > li.active > a, .tabs-container .nav-tabs > li.active > a:hover, .tabs-container .nav-tabs > li.active > a:focus {\n border: 1px solid #e7eaec;\n border-bottom-color: transparent;\n}\n\n.tabs-container .nav-tabs {\n border-bottom: 1px solid #e7eaec;\n}\n\n.tabs-container .tab-pane .panel-body {\n border-top: none;\n}\n\n.tabs-container .tabs-left .tab-pane .panel-body, .tabs-container .tabs-right .tab-pane .panel-body {\n border-top: 1px solid #e7eaec;\n}\n\n.tabs-container .nav-tabs > li a:hover {\n background: transparent;\n border-color: transparent;\n}\n\n.tabs-container .tabs-below > .nav-tabs,\n.tabs-container .tabs-right > .nav-tabs,\n.tabs-container .tabs-left > .nav-tabs {\n border-bottom: 0;\n}\n\n.tabs-container .tabs-left .panel-body {\n position: static;\n}\n\n.tabs-container .tabs-left > .nav-tabs, .tabs-container .tabs-right > .nav-tabs {\n width: 20%;\n}\n\n.tabs-container .tabs-left .panel-body {\n width: 80%;\n margin-left: 20%;\n}\n\n.tabs-container .tabs-right .panel-body {\n width: 80%;\n margin-right: 20%;\n}\n\n.tabs-container .tab-content > .tab-pane,\n.tabs-container .pill-content > .pill-pane {\n display: none;\n}\n\n.tabs-container .tab-content > .active,\n.tabs-container .pill-content > .active {\n display: block;\n}\n\n.tabs-container .tabs-below > .nav-tabs {\n border-top: 1px solid #e7eaec;\n}\n\n.tabs-container .tabs-below > .nav-tabs > li {\n margin-top: -1px;\n margin-bottom: 0;\n}\n\n.tabs-container .tabs-below > .nav-tabs > li > a {\n -webkit-border-radius: 0 0 4px 4px;\n -moz-border-radius: 0 0 4px 4px;\n border-radius: 0 0 4px 4px;\n}\n\n.tabs-container .tabs-below > .nav-tabs > li > a:hover,\n.tabs-container .tabs-below > .nav-tabs > li > a:focus {\n border-top-color: #e7eaec;\n border-bottom-color: transparent;\n}\n\n.tabs-container .tabs-left > .nav-tabs > li,\n.tabs-container .tabs-right > .nav-tabs > li {\n float: none;\n}\n\n.tabs-container .tabs-left > .nav-tabs > li > a,\n.tabs-container .tabs-right > .nav-tabs > li > a {\n min-width: 74px;\n margin-right: 0;\n margin-bottom: 3px;\n}\n\n.tabs-container .tabs-left > .nav-tabs {\n float: left;\n margin-right: 19px;\n}\n\n.tabs-container .tabs-left > .nav-tabs > li > a {\n margin-right: -1px;\n -webkit-border-radius: 4px 0 0 4px;\n -moz-border-radius: 4px 0 0 4px;\n border-radius: 4px 0 0 4px;\n}\n\n.tabs-container .tabs-left > .nav-tabs .active > a,\n.tabs-container .tabs-left > .nav-tabs .active > a:hover,\n.tabs-container .tabs-left > .nav-tabs .active > a:focus {\n border-color: #e7eaec transparent #e7eaec #e7eaec;\n *border-right-color: #ffffff;\n}\n\n.tabs-container .tabs-right > .nav-tabs {\n float: right;\n margin-left: 19px;\n}\n\n.tabs-container .tabs-right > .nav-tabs > li > a {\n margin-left: -1px;\n -webkit-border-radius: 0 4px 4px 0;\n -moz-border-radius: 0 4px 4px 0;\n border-radius: 0 4px 4px 0;\n}\n\n.tabs-container .tabs-right > .nav-tabs .active > a,\n.tabs-container .tabs-right > .nav-tabs .active > a:hover,\n.tabs-container .tabs-right > .nav-tabs .active > a:focus {\n border-color: #e7eaec #e7eaec #e7eaec transparent;\n *border-left-color: #ffffff;\n z-index: 1;\n}\n\n@media (max-width: 767px) {\n .tabs-container .nav-tabs > li {\n float: none !important;\n }\n .tabs-container .nav-tabs > li.active > a {\n border-bottom: 1px solid #e7eaec !important;\n margin: 0;\n }\n}\n\n/* jsvectormap */\n.jvectormap-container {\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n}\n\n.jvectormap-tip {\n position: absolute;\n display: none;\n border: solid 1px #CDCDCD;\n border-radius: 3px;\n background: #292929;\n color: white;\n font-family: sans-serif, Verdana;\n font-size: smaller;\n padding: 5px;\n}\n\n.jvectormap-zoomin, .jvectormap-zoomout, .jvectormap-goback {\n position: absolute;\n left: 10px;\n border-radius: 3px;\n background: #1ab394;\n padding: 3px;\n color: white;\n cursor: pointer;\n line-height: 10px;\n text-align: center;\n box-sizing: content-box;\n}\n\n.jvectormap-zoomin, .jvectormap-zoomout {\n width: 10px;\n height: 10px;\n}\n\n.jvectormap-zoomin {\n top: 10px;\n}\n\n.jvectormap-zoomout {\n top: 30px;\n}\n\n.jvectormap-goback {\n bottom: 10px;\n z-index: 1000;\n padding: 6px;\n}\n\n.jvectormap-spinner {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n background: center no-repeat url(data:image/gif;base64,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);\n}\n\n.jvectormap-legend-title {\n font-weight: bold;\n font-size: 14px;\n text-align: center;\n}\n\n.jvectormap-legend-cnt {\n position: absolute;\n}\n\n.jvectormap-legend-cnt-h {\n bottom: 0;\n right: 0;\n}\n\n.jvectormap-legend-cnt-v {\n top: 0;\n right: 0;\n}\n\n.jvectormap-legend {\n background: black;\n color: white;\n border-radius: 3px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend {\n float: left;\n margin: 0 10px 10px 0;\n padding: 3px 3px 1px 3px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend .jvectormap-legend-tick {\n float: left;\n}\n\n.jvectormap-legend-cnt-v .jvectormap-legend {\n margin: 10px 10px 0 0;\n padding: 3px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend-tick {\n width: 40px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend-tick-sample {\n height: 15px;\n}\n\n.jvectormap-legend-cnt-v .jvectormap-legend-tick-sample {\n height: 20px;\n width: 20px;\n display: inline-block;\n vertical-align: middle;\n}\n\n.jvectormap-legend-tick-text {\n font-size: 12px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend-tick-text {\n text-align: center;\n}\n\n.jvectormap-legend-cnt-v .jvectormap-legend-tick-text {\n display: inline-block;\n vertical-align: middle;\n line-height: 20px;\n padding-left: 3px;\n}\n\n/*Slick Carousel */\n.slick-prev:before,\n.slick-next:before {\n color: #1ab394 !important;\n}\n\n/* Payments */\n.payment-card {\n background: #ffffff;\n padding: 20px;\n margin-bottom: 25px;\n border: 1px solid #e7eaec;\n}\n\n.payment-icon-big {\n font-size: 60px;\n color: #D1DADE;\n}\n\n.payments-method.panel-group .panel + .panel {\n margin-top: -1px;\n}\n\n.payments-method .panel-heading {\n padding: 15px;\n}\n\n.payments-method .panel {\n border-radius: 0;\n}\n\n.payments-method .panel-heading h5 {\n margin-bottom: 5px;\n}\n\n.payments-method .panel-heading i {\n font-size: 26px;\n}\n\n/* Select2 custom styles */\n.select2-container--default .select2-selection--single,\n.select2-container--default .select2-selection--multiple {\n border-color: #e7eaec;\n}\n\n/* Tour */\n.tour-tour .btn.btn-default {\n background-color: #ffffff;\n border: 1px solid #d2d2d2;\n color: inherit;\n}\n\n.tour-step-backdrop {\n z-index: 2101;\n}\n\n.tour-backdrop {\n z-index: 2100;\n opacity: .7;\n}\n\n.popover[class*=tour-] {\n z-index: 2100;\n}\n\nbody.tour-open .animated {\n animation-fill-mode: initial;\n}\n\nbody {\n font-family: \"open sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n background-color: #2f4050;\n font-size: 13px;\n color: #676a6c;\n overflow-x: hidden;\n}\n\nhtml, body {\n height: 100%;\n}\n\nbody.full-height-layout #wrapper,\nbody.full-height-layout #page-wrapper {\n height: 100%;\n}\n\n#page-wrapper {\n min-height: auto;\n}\n\nbody.boxed-layout {\n background: url(\"patterns/shattered.png\");\n}\n\nbody.boxed-layout #wrapper {\n background-color: #2f4050;\n max-width: 1200px;\n margin: 0 auto;\n -webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.75);\n -moz-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.75);\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.75);\n}\n\n.top-navigation.boxed-layout #wrapper,\n.boxed-layout #wrapper.top-navigation {\n max-width: 1300px !important;\n}\n\n.block {\n display: block;\n}\n\n.clear {\n display: block;\n overflow: hidden;\n}\n\na {\n cursor: pointer;\n}\n\na:hover, a:focus {\n text-decoration: none;\n}\n\n.border-bottom {\n border-bottom: 1px solid #e7eaec !important;\n}\n\n.font-bold {\n font-weight: 600;\n}\n\n.font-noraml {\n font-weight: 400;\n}\n\n.text-uppercase {\n text-transform: uppercase;\n}\n\n.b-r {\n border-right: 1px solid #e7eaec;\n}\n\n.hr-line-dashed {\n border-top: 1px dashed #e7eaec;\n color: #ffffff;\n background-color: #ffffff;\n height: 1px;\n margin: 20px 0;\n}\n\n.hr-line-solid {\n border-bottom: 1px solid #e7eaec;\n background-color: transparent;\n border-style: solid !important;\n margin-top: 15px;\n margin-bottom: 15px;\n}\n\nvideo {\n width: 100% !important;\n height: auto !important;\n}\n\n/* GALLERY */\n.gallery > .row > div {\n margin-bottom: 15px;\n}\n\n.fancybox img {\n margin-bottom: 5px;\n /* Only for demo */\n width: 24%;\n}\n\n/* Summernote text editor */\n.note-editor {\n height: auto !important;\n min-height: 300px;\n}\n\n.note-editor.fullscreen {\n z-index: 2050;\n}\n\n/* MODAL */\n.modal-content {\n background-clip: padding-box;\n background-color: #FFFFFF;\n border: 1px solid transparent;\n border-radius: 4px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);\n outline: 0 none;\n position: relative;\n}\n\n.modal-dialog {\n z-index: 2200;\n}\n\n.modal-body {\n padding: 20px 30px 30px 30px;\n}\n\n.inmodal .modal-body {\n background: #f8fafb;\n}\n\n.inmodal .modal-header {\n padding: 30px 15px;\n text-align: center;\n}\n\n.animated.modal.fade .modal-dialog {\n -webkit-transform: none;\n -ms-transform: none;\n -o-transform: none;\n transform: none;\n}\n\n.inmodal .modal-title {\n font-size: 26px;\n}\n\n.inmodal .modal-icon {\n font-size: 84px;\n color: #e2e3e3;\n}\n\n.modal-footer {\n margin-top: 0;\n}\n\n/* WRAPPERS */\n#wrapper {\n width: 100%;\n overflow-x: hidden;\n}\n\n.wrapper {\n padding: 0 20px;\n}\n\n.wrapper-content {\n padding: 20px 10px 40px;\n}\n\n#page-wrapper {\n padding: 0 15px;\n min-height: 568px;\n position: relative !important;\n}\n\n@media (min-width: 768px) {\n #page-wrapper {\n position: inherit;\n margin: 0 0 0 240px;\n min-height: 2002px;\n }\n}\n\n.title-action {\n text-align: right;\n padding-top: 30px;\n}\n\n.ibox-content h1, .ibox-content h2, .ibox-content h3, .ibox-content h4, .ibox-content h5,\n.ibox-title h1, .ibox-title h2, .ibox-title h3, .ibox-title h4, .ibox-title h5 {\n margin-top: 5px;\n}\n\nul.unstyled, ol.unstyled {\n list-style: none outside none;\n margin-left: 0;\n}\n\n.big-icon {\n font-size: 160px !important;\n color: #e5e6e7;\n}\n\n/* FOOTER */\n.footer {\n background: none repeat scroll 0 0 white;\n border-top: 1px solid #e7eaec;\n bottom: 0;\n left: 0;\n padding: 10px 20px;\n position: absolute;\n right: 0;\n}\n\n.footer.fixed_full {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n padding: 10px 20px;\n background: white;\n border-top: 1px solid #e7eaec;\n}\n\n.footer.fixed {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n padding: 10px 20px;\n background: white;\n border-top: 1px solid #e7eaec;\n margin-left: 220px;\n}\n\nbody.mini-navbar .footer.fixed,\nbody.body-small.mini-navbar .footer.fixed {\n margin: 0 0 0 70px;\n}\n\nbody.mini-navbar.canvas-menu .footer.fixed,\nbody.canvas-menu .footer.fixed {\n margin: 0 !important;\n}\n\nbody.fixed-sidebar.body-small.mini-navbar .footer.fixed {\n margin: 0 0 0 220px;\n}\n\nbody.body-small .footer.fixed {\n margin-left: 0;\n}\n\n/* PANELS */\n.page-heading {\n border-top: 0;\n padding: 0 10px 20px 10px;\n}\n\n.panel-heading h1, .panel-heading h2 {\n margin-bottom: 5px;\n}\n\n/* TABLES */\n.table-bordered {\n border: 1px solid #EBEBEB;\n}\n\n.table-bordered > thead > tr > th, .table-bordered > thead > tr > td {\n background-color: #F5F5F6;\n border-bottom-width: 1px;\n}\n\n.table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td {\n border: 1px solid #e7e7e7;\n}\n\n.table > thead > tr > th {\n border-bottom: 1px solid #DDDDDD;\n vertical-align: bottom;\n}\n\n.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td {\n border-top: 1px solid #e7eaec;\n line-height: 1.42857;\n padding: 8px;\n vertical-align: top;\n}\n\n/* PANELS */\n.panel.blank-panel {\n background: none;\n margin: 0;\n}\n\n.blank-panel .panel-heading {\n padding-bottom: 0;\n}\n\n.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {\n -moz-border-bottom-colors: none;\n -moz-border-left-colors: none;\n -moz-border-right-colors: none;\n -moz-border-top-colors: none;\n background: none;\n border-color: #DDDDDD #DDDDDD transparent;\n border-bottom: #f3f3f4;\n border-image: none;\n border-style: solid;\n border-width: 1px;\n color: #555555;\n cursor: default;\n}\n\n.nav.nav-tabs li {\n background: none;\n border: none;\n}\n\n.nav-tabs > li > a {\n color: #A7B1C2;\n font-weight: 600;\n padding: 10px 20px 10px 25px;\n}\n\n.nav-tabs > li > a:hover, .nav-tabs > li > a:focus {\n background-color: #e6e6e6;\n color: #676a6c;\n}\n\n.ui-tab .tab-content {\n padding: 20px 0;\n}\n\n/* GLOBAL */\n.no-padding {\n padding: 0 !important;\n}\n\n.no-borders {\n border: none !important;\n}\n\n.no-margins {\n margin: 0 !important;\n}\n\n.no-top-border {\n border-top: 0 !important;\n}\n\n.ibox-content.text-box {\n padding-bottom: 0;\n padding-top: 15px;\n}\n\n.border-left-right {\n border-left: 1px solid #e7eaec;\n border-right: 1px solid #e7eaec;\n border-top: none;\n border-bottom: none;\n}\n\n.border-left {\n border-left: 1px solid #e7eaec;\n border-right: none;\n border-top: none;\n border-bottom: none;\n}\n\n.border-right {\n border-left: none;\n border-right: 1px solid #e7eaec;\n border-top: none;\n border-bottom: none;\n}\n\n.full-width {\n width: 100% !important;\n}\n\n.link-block {\n font-size: 12px;\n padding: 10px;\n}\n\n.nav.navbar-top-links .link-block a {\n font-size: 12px;\n}\n\n.link-block a {\n font-size: 10px;\n color: inherit;\n}\n\nbody.mini-navbar .branding {\n display: none;\n}\n\nimg.circle-border {\n border: 6px solid #FFFFFF;\n border-radius: 50%;\n}\n\n.branding {\n float: left;\n color: #FFFFFF;\n font-size: 18px;\n font-weight: 600;\n padding: 17px 20px;\n text-align: center;\n background-color: #1ab394;\n}\n\n.login-panel {\n margin-top: 25%;\n}\n\n.icons-box h3 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n\n.icons-box .infont a i {\n font-size: 25px;\n display: block;\n color: #676a6c;\n}\n\n.icons-box .infont a {\n color: #a6a8a9;\n}\n\n.icons-box .infont a {\n padding: 10px;\n margin: 1px;\n display: block;\n}\n\n.ui-draggable .ibox-title {\n cursor: move;\n}\n\n.breadcrumb {\n background-color: #ffffff;\n padding: 0;\n margin-bottom: 0;\n}\n\n.breadcrumb > li a {\n color: inherit;\n}\n\n.breadcrumb > .active {\n color: inherit;\n}\n\ncode {\n background-color: #F9F2F4;\n border-radius: 4px;\n color: #ca4440;\n font-size: 90%;\n padding: 2px 4px;\n white-space: nowrap;\n}\n\n.ibox {\n clear: both;\n margin-bottom: 25px;\n margin-top: 0;\n padding: 0;\n}\n\n.ibox.collapsed .ibox-content {\n display: none;\n}\n\n.ibox.collapsed .fa.fa-chevron-up:before {\n content: \"\\f078\";\n}\n\n.ibox.collapsed .fa.fa-chevron-down:before {\n content: \"\\f077\";\n}\n\n.ibox:after, .ibox:before {\n display: table;\n}\n\n.ibox-title {\n -moz-border-bottom-colors: none;\n -moz-border-left-colors: none;\n -moz-border-right-colors: none;\n -moz-border-top-colors: none;\n background-color: #ffffff;\n border-color: #e7eaec;\n border-image: none;\n border-style: solid solid none;\n border-width: 3px 0 0;\n color: inherit;\n margin-bottom: 0;\n padding: 14px 15px 7px;\n min-height: 48px;\n}\n\n.ibox-content {\n background-color: #ffffff;\n color: inherit;\n padding: 15px 20px 20px 20px;\n border-color: #e7eaec;\n border-image: none;\n border-style: solid solid none;\n border-width: 1px 0;\n}\n\n.ibox-footer {\n color: inherit;\n border-top: 1px solid #e7eaec;\n font-size: 90%;\n background: #ffffff;\n padding: 10px 15px;\n}\n\ntable.table-mail tr td {\n padding: 12px;\n}\n\n.table-mail .check-mail {\n padding-left: 20px;\n}\n\n.table-mail .mail-date {\n padding-right: 20px;\n}\n\n.star-mail, .check-mail {\n width: 40px;\n}\n\n.unread td a, .unread td {\n font-weight: 600;\n color: inherit;\n}\n\n.read td a, .read td {\n font-weight: normal;\n color: inherit;\n}\n\n.unread td {\n background-color: #f9f8f8;\n}\n\n.ibox-content {\n clear: both;\n}\n\n.ibox-heading {\n background-color: #f3f6fb;\n border-bottom: none;\n}\n\n.ibox-heading h3 {\n font-weight: 200;\n font-size: 24px;\n}\n\n.ibox-title h5 {\n display: inline-block;\n font-size: 14px;\n margin: 0 0 7px;\n padding: 0;\n text-overflow: ellipsis;\n float: left;\n}\n\n.ibox-title .label {\n float: left;\n margin-left: 4px;\n}\n\n.ibox-tools {\n display: block;\n float: none;\n margin-top: 0;\n position: relative;\n padding: 0;\n text-align: right;\n}\n\n.ibox-tools a {\n cursor: pointer;\n margin-left: 5px;\n color: #c4c4c4;\n}\n\n.ibox-tools a.btn-primary {\n color: #fff;\n}\n\n.ibox-tools .dropdown-menu > li > a {\n padding: 4px 10px;\n font-size: 12px;\n}\n\n.ibox .ibox-tools.open > .dropdown-menu {\n left: auto;\n right: 0;\n}\n\n/* BACKGROUNDS */\n.gray-bg {\n background-color: #f3f3f4;\n}\n\n.white-bg {\n background-color: #ffffff;\n}\n\n.navy-bg {\n background-color: #1ab394;\n color: #ffffff;\n}\n\n.blue-bg {\n background-color: #1c84c6;\n color: #ffffff;\n}\n\n.lazur-bg {\n background-color: #23c6c8;\n color: #ffffff;\n}\n\n.yellow-bg {\n background-color: #f8ac59;\n color: #ffffff;\n}\n\n.red-bg {\n background-color: #ED5565;\n color: #ffffff;\n}\n\n.black-bg {\n background-color: #262626;\n}\n\n.panel-primary {\n border-color: #1ab394;\n}\n\n.panel-primary > .panel-heading {\n background-color: #1ab394;\n border-color: #1ab394;\n}\n\n.panel-success {\n border-color: #1c84c6;\n}\n\n.panel-success > .panel-heading {\n background-color: #1c84c6;\n border-color: #1c84c6;\n color: #ffffff;\n}\n\n.panel-info {\n border-color: #23c6c8;\n}\n\n.panel-info > .panel-heading {\n background-color: #23c6c8;\n border-color: #23c6c8;\n color: #ffffff;\n}\n\n.panel-warning {\n border-color: #f8ac59;\n}\n\n.panel-warning > .panel-heading {\n background-color: #f8ac59;\n border-color: #f8ac59;\n color: #ffffff;\n}\n\n.panel-danger {\n border-color: #ED5565;\n}\n\n.panel-danger > .panel-heading {\n background-color: #ED5565;\n border-color: #ED5565;\n color: #ffffff;\n}\n\n.progress-bar {\n background-color: #1ab394;\n}\n\n.progress-small, .progress-small .progress-bar {\n height: 10px;\n}\n\n.progress-small, .progress-mini {\n margin-top: 5px;\n}\n\n.progress-mini, .progress-mini .progress-bar {\n height: 5px;\n margin-bottom: 0;\n}\n\n.progress-bar-navy-light {\n background-color: #3dc7ab;\n}\n\n.progress-bar-success {\n background-color: #1c84c6;\n}\n\n.progress-bar-info {\n background-color: #23c6c8;\n}\n\n.progress-bar-warning {\n background-color: #f8ac59;\n}\n\n.progress-bar-danger {\n background-color: #ED5565;\n}\n\n.panel-title {\n font-size: inherit;\n}\n\n.jumbotron {\n border-radius: 6px;\n padding: 40px;\n}\n\n.jumbotron h1 {\n margin-top: 0;\n}\n\n/* COLORS */\n.text-navy {\n color: #1ab394;\n}\n\n.text-primary {\n color: inherit;\n}\n\n.text-success {\n color: #1c84c6;\n}\n\n.text-info {\n color: #23c6c8;\n}\n\n.text-warning {\n color: #f8ac59;\n}\n\n.text-danger {\n color: #ED5565;\n}\n\n.text-muted {\n color: #888888;\n}\n\n.text-white {\n color: #ffffff;\n}\n\n.simple_tag {\n background-color: #f3f3f4;\n border: 1px solid #e7eaec;\n border-radius: 2px;\n color: inherit;\n font-size: 10px;\n margin-right: 5px;\n margin-top: 5px;\n padding: 5px 12px;\n display: inline-block;\n}\n\n.img-shadow {\n -webkit-box-shadow: 0 0 3px 0 #919191;\n -moz-box-shadow: 0 0 3px 0 #919191;\n box-shadow: 0 0 3px 0 #919191;\n}\n\n/* For handle diferent bg color in AngularJS version */\n.dashboards\\.dashboard_2 nav.navbar,\n.dashboards\\.dashboard_3 nav.navbar,\n.mailbox\\.inbox nav.navbar,\n.mailbox\\.email_view nav.navbar,\n.mailbox\\.email_compose nav.navbar,\n.dashboards\\.dashboard_4_1 nav.navbar,\n.metrics nav.navbar, .metrics\\.index nav.navbar,\n.dashboards\\.dashboard_5 nav.navbar {\n background: #fff;\n}\n\n/* For handle diferent bg color in MVC version */\n.Dashboard_2 .navbar.navbar-static-top,\n.Dashboard_3 .navbar.navbar-static-top,\n.Dashboard_4_1 .navbar.navbar-static-top,\n.ComposeEmail .navbar.navbar-static-top,\n.EmailView .navbar.navbar-static-top,\n.Inbox .navbar.navbar-static-top,\n.Metrics .navbar.navbar-static-top,\n.Dashboard_5 .navbar.navbar-static-top {\n background: #fff;\n}\n\na.close-canvas-menu {\n position: absolute;\n top: 10px;\n right: 15px;\n z-index: 1011;\n color: #a7b1c2;\n}\n\na.close-canvas-menu:hover {\n color: #fff;\n}\n\n.close-canvas-menu {\n display: none;\n}\n\n.canvas-menu .close-canvas-menu {\n display: block;\n}\n\n.light-navbar .navbar.navbar-static-top {\n background-color: #fff;\n}\n\n/* FULL HEIGHT */\n.full-height {\n height: 100%;\n}\n\n.fh-breadcrumb {\n height: calc(100% - 196px);\n margin: 0 -15px;\n position: relative;\n}\n\n.fh-no-breadcrumb {\n height: calc(100% - 99px);\n margin: 0 -15px;\n position: relative;\n}\n\n.fh-column {\n background: #fff;\n height: 100%;\n width: 240px;\n float: left;\n}\n\n.modal-backdrop {\n z-index: 2040 !important;\n}\n\n.modal {\n z-index: 2050 !important;\n}\n\n.spiner-example {\n height: 200px;\n padding-top: 70px;\n}\n\n/* MARGINS & PADDINGS */\n.p-xxs {\n padding: 5px;\n}\n\n.p-xs {\n padding: 10px;\n}\n\n.p-sm {\n padding: 15px;\n}\n\n.p-m {\n padding: 20px;\n}\n\n.p-md {\n padding: 25px;\n}\n\n.p-lg {\n padding: 30px;\n}\n\n.p-xl {\n padding: 40px;\n}\n\n.p-w-xs {\n padding: 0 10px;\n}\n\n.p-w-sm {\n padding: 0 15px;\n}\n\n.p-w-m {\n padding: 0 20px;\n}\n\n.p-w-md {\n padding: 0 25px;\n}\n\n.p-w-lg {\n padding: 0 30px;\n}\n\n.p-w-xl {\n padding: 0 40px;\n}\n\n.m-xxs {\n margin: 2px 4px;\n}\n\n.m-xs {\n margin: 5px;\n}\n\n.m-sm {\n margin: 10px;\n}\n\n.m {\n margin: 15px;\n}\n\n.m-md {\n margin: 20px;\n}\n\n.m-lg {\n margin: 30px;\n}\n\n.m-xl {\n margin: 50px;\n}\n\n.m-n {\n margin: 0 !important;\n}\n\n.m-l-none {\n margin-left: 0;\n}\n\n.m-l-xs {\n margin-left: 5px;\n}\n\n.m-l-sm {\n margin-left: 10px;\n}\n\n.m-l {\n margin-left: 15px;\n}\n\n.m-l-md {\n margin-left: 20px;\n}\n\n.m-l-lg {\n margin-left: 30px;\n}\n\n.m-l-xl {\n margin-left: 40px;\n}\n\n.m-l-n-xxs {\n margin-left: -1px;\n}\n\n.m-l-n-xs {\n margin-left: -5px;\n}\n\n.m-l-n-sm {\n margin-left: -10px;\n}\n\n.m-l-n {\n margin-left: -15px;\n}\n\n.m-l-n-md {\n margin-left: -20px;\n}\n\n.m-l-n-lg {\n margin-left: -30px;\n}\n\n.m-l-n-xl {\n margin-left: -40px;\n}\n\n.m-t-none {\n margin-top: 0;\n}\n\n.m-t-xxs {\n margin-top: 1px;\n}\n\n.m-t-xs {\n margin-top: 5px;\n}\n\n.m-t-sm {\n margin-top: 10px;\n}\n\n.m-t {\n margin-top: 15px;\n}\n\n.m-t-md {\n margin-top: 20px;\n}\n\n.m-t-lg {\n margin-top: 30px;\n}\n\n.m-t-xl {\n margin-top: 40px;\n}\n\n.m-t-n-xxs {\n margin-top: -1px;\n}\n\n.m-t-n-xs {\n margin-top: -5px;\n}\n\n.m-t-n-sm {\n margin-top: -10px;\n}\n\n.m-t-n {\n margin-top: -15px;\n}\n\n.m-t-n-md {\n margin-top: -20px;\n}\n\n.m-t-n-lg {\n margin-top: -30px;\n}\n\n.m-t-n-xl {\n margin-top: -40px;\n}\n\n.m-r-none {\n margin-right: 0;\n}\n\n.m-r-xxs {\n margin-right: 1px;\n}\n\n.m-r-xs {\n margin-right: 5px;\n}\n\n.m-r-sm {\n margin-right: 10px;\n}\n\n.m-r {\n margin-right: 15px;\n}\n\n.m-r-md {\n margin-right: 20px;\n}\n\n.m-r-lg {\n margin-right: 30px;\n}\n\n.m-r-xl {\n margin-right: 40px;\n}\n\n.m-r-n-xxs {\n margin-right: -1px;\n}\n\n.m-r-n-xs {\n margin-right: -5px;\n}\n\n.m-r-n-sm {\n margin-right: -10px;\n}\n\n.m-r-n {\n margin-right: -15px;\n}\n\n.m-r-n-md {\n margin-right: -20px;\n}\n\n.m-r-n-lg {\n margin-right: -30px;\n}\n\n.m-r-n-xl {\n margin-right: -40px;\n}\n\n.m-b-none {\n margin-bottom: 0;\n}\n\n.m-b-xxs {\n margin-bottom: 1px;\n}\n\n.m-b-xs {\n margin-bottom: 5px;\n}\n\n.m-b-sm {\n margin-bottom: 10px;\n}\n\n.m-b {\n margin-bottom: 15px;\n}\n\n.m-b-md {\n margin-bottom: 20px;\n}\n\n.m-b-lg {\n margin-bottom: 30px;\n}\n\n.m-b-xl {\n margin-bottom: 40px;\n}\n\n.m-b-n-xxs {\n margin-bottom: -1px;\n}\n\n.m-b-n-xs {\n margin-bottom: -5px;\n}\n\n.m-b-n-sm {\n margin-bottom: -10px;\n}\n\n.m-b-n {\n margin-bottom: -15px;\n}\n\n.m-b-n-md {\n margin-bottom: -20px;\n}\n\n.m-b-n-lg {\n margin-bottom: -30px;\n}\n\n.m-b-n-xl {\n margin-bottom: -40px;\n}\n\n.space-15 {\n margin: 15px 0;\n}\n\n.space-20 {\n margin: 20px 0;\n}\n\n.space-25 {\n margin: 25px 0;\n}\n\n.space-30 {\n margin: 30px 0;\n}\n\n.fullscreen-ibox-mode .animated {\n animation: none;\n}\n\nbody.fullscreen-ibox-mode {\n overflow-y: hidden;\n}\n\n.ibox.fullscreen {\n z-index: 2030;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n overflow: auto;\n margin-bottom: 0;\n}\n\n.ibox.fullscreen .collapse-link {\n display: none;\n}\n\n.ibox.fullscreen .ibox-content {\n min-height: calc(100% - 48px);\n}\n\nbody.modal-open {\n padding-right: inherit !important;\n}\n\nbody.modal-open .animated {\n animation-fill-mode: initial;\n z-index: inherit;\n}\n\n/* Show profile dropdown on fixed sidebar */\nbody.mini-navbar.fixed-sidebar .profile-element, .block {\n display: block !important;\n}\n\nbody.mini-navbar.fixed-sidebar .nav-header {\n padding: 33px 25px;\n}\n\nbody.mini-navbar.fixed-sidebar .logo-element {\n display: none;\n}\n\n.fullscreen-video .animated {\n animation: none;\n}\n\n@media print {\n nav.navbar-static-side {\n display: none;\n }\n #page-wrapper {\n margin: 0;\n }\n}\n" /***/ }, -/***/ 274: +/***/ 276: /***/ function(module, exports, __webpack_require__) { // style-loader: Adds some css to the DOM by adding a